Ao tentar jogar várias das minhas respostas, eu precisava escrever números inteiros grandes com o menor número possível de caracteres.
Agora eu sei a melhor maneira de fazer isso: eu vou fazer você escrever este programa.
O desafio
- Escreva um programa que, quando dado um número inteiro positivo, produz um programa que o imprima em stdout ou equivalente.
- Os programas de saída não precisam estar no mesmo idioma que o criador.
- A saída deve ter no máximo 128 bytes.
- Você pode aceitar entrada de stdin ou equivalente (não entrada de função)
- Você pode enviar o programa resultante para stdout ou equivalente.
- O número de saída deve estar em decimal (base 10)
Pontuação
Sua pontuação é igual ao menor número inteiro positivo que seu programa não pode codificar.
A entrada com a maior pontuação vence.
Respostas:
Python 3 → CJam, (163 122 - 1) · 255/162 + 1 ≈ 1.213 · 10 270
Acontece que todo número inteiro de 1023 a (163 122 - 1) · 255/162 pode ser representado de pelo menos uma maneira por uma conversão de base b ≤ 163 de uma sequência de no máximo 122 caracteres com os códigos 93 a b + 92, em vez dos habituais 0 a b - 1. Isso evita os caracteres problemáticos 34 (aspas duplas) e 92 (barra invertida) sem nenhum código de saída extra.
fonte
Pyth, 252 111 ≈ 3,593 × 10 266
Tinha que usar um pouco da sintaxe do Python, porque o Pyth
print
não pode imprimiriso-8859-1
.O número é codificado na base 252 e representa cada dígito nessa base como um caractere iso-8859-1. Os caracteres
\
e"
precisariam escapar e, portanto, não são usados. O char`
não é usado porque o golfe ... Além disso, o byte nulo também não é usado, o compilador Pyth o proíbe.A saída é um programa com uma sobrecarga de 17 bytes:
Aqui está um exemplo de uso com o maior número possível:
Explicação
do programa de saída.
fonte
12
, porque Pyth infelizmente lê CR como LF .CJam, 254 109 ≈ 1,34 x 10 262
Estou codificando o número na base 254 e represento cada dígito nessa base como um caractere ISO 8859-1, pulando
"
e\
. A saída tem uma sobrecarga de 19 bytes,""{_'[>-_'!>-}%254b
para que eu possa representar tudo menos que 254 128-19 , ou explicitamenteComo exemplo,
6153501
seria codificado comoAqui está um programa de teste que imprime o número inteiro codificado e depois imprime seu comprimento e o executa imediatamente para mostrar sua validade (isso evita o problema de ter que copiar os caracteres não imprimíveis em um novo programa, o que nem sempre funciona com o intérprete online).
fonte
Perl, 10 216
Também codifica a base 100, um pouco mais elegante. A saída para
12345678
seria:Os delímetros
{
e}
correspondem aos valores hexadecimaisb7
ed7
, respectivamente, que não podem aparecer na entrada e, portanto, não precisam ser escapados.Existem 20 bytes de sobrecarga, deixando 108 para codificação, atingindo um valor máximo de 10 216 -1.
Perl, 10 206
Codificação simples da base 100. A saída para
12345678
ficaria assim:Existem 25 bytes de sobrecarga, deixando 103 para codificação, atingindo um valor máximo de 10 206 -1.
fonte
Lisp comum, 36 114 - 1 ~ 2.62 × 10 117
O maior número é:
262110903510567204510935835404817018532936318707188694632900321233523044002781809113959992952482356206474995050940249429827687987350383362234813440240440440440440450540440460840410
Basta usar a base 36. Para a maior entrada, a saída de 128 bytes é:
fonte
CJam, 233 114 ≈ 7.561⋅10 269
O programa de saída
"…"{iKms*}%233b
decodifica os caracteres de 8 bits de uma string para basear 233 dígitos com n ⌊ ⌊ n ⌋ sen 20⌋ = ⌊ n ⋅ 0,913⌋. Essa transformação é subjetiva, sem exigir os pontos de código críticos 34 (aspas duplas) e 92 (barra invertida) como entrada.fonte