Obviamente, o código do golfe tem tudo a ver com aproveitar ao máximo o código. Quem realmente se importa com o resultado real?
Embora tenhamos enfrentado um desafio pela maior taxa de entrada / saída , essa é uma exigência para a saída mais finita e determinística com comprimentos de código especificados. Ironicamente, esse desafio não é o código-golfe .
Regras:
Escreva três trechos independentes (não programas / funções completos).
Os trechos devem estar no mesmo idioma.
Pontuação é o número total de bytes gerados.
As saídas podem estar na forma de um resultado, STDOUT etc.
Os trechos não podem causar nenhum erro.
Os trechos podem causar diferentes formas de saída.
Caracteres de nova linha à direita não são contados.
O primeiro snippet deve ter 1 byte ou o comprimento mínimo que produz pelo menos 1 byte de saída.
O segundo snippet deve ter um byte a mais que isso.
O terceiro trecho deve ter dois bytes a mais que o primeiro.
Respostas:
gs2, 412 + 5,37 * 10 902 + 10 10 903,1 bytes
f
envia1\n2\nFizz\n4\nBuzz\n...\nFizzBuzz
como uma412
sequência de bytes.fô
imprime todas as suas permutações, portanto,412! * 412
caracteres.fôô
imprime todas as permutações dessa lista de elementos 412 !, em que cada elemento possui 412 caracteres, portanto412 * (412!)!
bytes.EDIT: Para colocar as coisas em perspectiva, isso é pelo menos
bytes, superando todas as outras respostas aqui até agora.
fonte
Pyth, 26 + 1140850688 + (> 4,37 × 10 20201781 )
Não tenho idéia se é possível calcular o comprimento exato da saída para o terceiro programa. Eu só posso dar limites. Irá imprimir algo entre
4.37 × 10^20201781
e1.25 × 10^20201790
caracteres.Isso imprime:
O primeiro imprime o alfabeto, o segundo todos os subconjuntos do alfabeto e o terceiro os subconjuntos dos subconjuntos do alfabeto, que é uma lista de comprimento
2^(2^26) ~= 1.09 × 10^20201781
.Obviamente, nenhum computador será capaz de calcular essa grande lista e produzi-la.
fonte
CJam, 17 + 34 + 72987060245299200000 = 72987060245299200051 bytes de saída
Para uma comparação mais fácil, isso é aproximadamente 7,3 * 10 19 .
Impressões:
Bem, o último consiste em todas as permutações de
[0 1 2 ... 19]
com os números esmagados juntos. Eu não recomendaria experimentá-lo ... (Experimente como4e!
se fosse provar.)Teste aqui: Programa 1 , Programa 2 , versão saudável do programa 3 .
fonte
Gelatina , 1,2 × 10 2568 bytes de saída
Calcula 1000 , 1000 1000 e 1000 1000! .
Experimente online: primeiro programa | segundo programa | terceiro programa (modificado)
Para fins de contagem de bytes,
ȷ
pode ser codificado como o byte 0xa0 na versão atual do Jelly .Como funciona
No Jelly,
ȷ
pode ser usado dentro de literais numéricos como o Pythone
(notação científica). Por exemplo,3ȷ4
retorna 30000 . Em notação científica da Jelly, os padrões coeficiente a 1 e os padrões expoente para 3 , por issoȷ
,1ȷ3
e1000
tudo devolver o mesmo número.fonte
⍳
?ı
éR
(intervalo).ı
eȷ
faça algo totalmente não relacionado em Jelly. Vou adicionar uma explicação em alguns minutos.ȷRR
causa?ȷRR
é⍳¨⍳1000
. Eu queria⍳⍳1000
. Em Dyalog,⍳⍳7
pontua 91244,⍳⍳8
803487,⍳⍳9
7904816, porque lista todos os índices em uma matriz 1 × 2 × 3 × 4 × .... Assim⍳⍳1000
, teoricamente (WS FULL!) Geraria uma matriz de! 1000 listas de 1000 elementos cada!Hexagonia , 1 + 3 + 6 = 10 bytes de saída
Bem ... não é uma pontuação muito impressionante, mas pelo menos posso afirmar que é ideal. Com um único bytes, é impossível imprimir algo e terminar, então começamos com dois bytes:
O código desdobrado é
Isso imprime um byte e termina.
Para três bytes de código, podemos imprimir três bytes de saída. Por exemplo:
ou desdobrado:
impressões
111
. Qualquer letra minúscula ded
paraz
funciona e imprime seu código de caractere. Essas são as únicas 23 maneiras de imprimir 3 bytes com 3 bytes de código.Finalmente, para quatro bytes, existem 169 maneiras de imprimir 6 bytes. Como nenhum deles faz algo mais interessante (exceto o fluxo de controle ímpar) do que a solução direta, apresentarei que:
Desdobrado:
Você adivinhou. Imprime
111111
.Como sei se essas são ótimas? Eu adaptei o forçador bruto que escrevi para o catálogo de máquinas da verdade para procurar a saída finita máxima em 7000 ciclos (não acho que você possa escrever um castor ocupado com 4 bytes, que roda por 7000 ciclos, mas termina ainda mais tarde).
fonte
12345
e interrompem. . .por curiosidade, você entende.Sério, 2025409 bytes
1 byte:
(produz 11.756 bytes de saída)
2 bytes:
Produz 153.717 bytes de saída
3 bytes:
Produz 1.859.936 bytes de saída
Sério ainda não apresenta itens como "todos os subconjuntos" ou "todas as combinações", portanto, a pontuação é relativamente baixa.
fonte
N
isso faz com que produza tanto resultado?Python 3, 1 + 22 + 23 = 56
Resultado
Imprima 9 e depois a definição para
id
eabs
.fonte
Labirinto , 1 + 2 + 4 = 7 bytes
Outra pontuação baixa, que estou publicando principalmente porque provei que é ideal para o idioma.
Como o Hexagony, o Labyrinth não pode imprimir e terminar com um único byte; portanto, começamos com dois bytes:
Imprime um zero e termina.
Por três bytes, não podemos vencer a solução ingênua:
Isso imprime dois bytes antes de terminar. Existem algumas outras opções, como imprimir
-1
com(!@
ou~!@
ou,!@
. Existe uma solução bem legal que usa rotação de código fonte:Isso imprime um zero e muda a fonte para se tornar
@!>
. Nesse ponto, ele atinge um beco sem saída, vira e executa!
novamente no caminho de volta, antes de terminar.Para quatro bytes, é um pouco mais divertido, porque a única maneira de imprimir 4 caracteres é usar o truque acima:
Imprima dois zeros, mude para
@!!>
, imprima outros dois zeros.Em todos esses casos, estou ignorando que você também pode imprimir um byte com
\
ou.
, porque eles sempre imprimem exatamente um byte, enquanto!
que imprimem pelo menos um e potencialmente vários.fonte
Bash, 1726 bytes
(Corrigi-o agora. Por favor, considere a possibilidade de votar.)
1 byte :
"
Saídas:
307 bytes:
id
Saídas:
1418 bytes:
zip
(Imprime em STDOUT)fonte
MATL , 313
A versão atual do idioma ( 3.1.0 ) é usada, anterior a esse desafio.
Código (literal predefinido: produz o número 2, que é impresso implicitamente):
Saída (1 byte):
Código (produz o número pi, que é impresso implicitamente com 15 casas decimais):
Saída (17 bytes):
Código (números de 1 a 99, que são impressos por padrão com espaços no meio):
Saída (295 bytes):
fonte
Processando, 39 bytes
Determinístico
1 byte :
Saídas
0
.9 bytes :
Saídas
3.1415927
29 bytes :
Saídas
processing.opengl.PGraphics3D
Não determinístico,> = 129 bytes
> = 32 bytes:
Saídas
processing.awt.PGraphicsJava2D@ + [mem-address]
> = 32 bytes:
Saídas
processing.awt.PGraphicsJava2D@ + [mem-address]
> = 65 bytes: (Obrigado a @anOKsquirrel por esta sugestão.)
Saídas
fonte
JavaScript, 1 + 3 + 18 =
1822Não é uma resposta muito interessante, mas provavelmente o melhor JavaScript é capaz.
Adicionado 4 pontos graças a @UndefinedFunction !
Saídas como texto:
fonte
alert()
obtém saída deundefined
(pelo menos no Safari).alert(.1)
dá0.1
ealert(1/9)
dá0.1111111111111111
alert
me dáfunction alert() { [native code] }
Befunge, 2 + 4 + 6 = 12
Qualquer trecho menor que o comprimento 2 não pode ser emitido ou não pode finalizar sua saída.
No Befunge,
.
gera o valor superior da pilha como um número inteiro, seguido por um espaço. Um espaço não é uma nova linha; portanto, é incluído na contagem. Além disso, a pilha é "infinitamente" preenchida com zeros, portanto os programas produzem (respectivamente):fonte
..<@
imprime 8 bytes.SmileBASIC, 1 + 4 + 10 = 15 bytes
Programa 1:
A maneira mais curta de imprimir algo é com? (PRINT) e um único caractere. Pode ser um número ou um nome de variável e não importa, pois todos têm o mesmo comprimento.
Programa 2:
Agora temos acesso a mais algumas coisas. A expressão mais longa que pode ser feita seria uma das constantes #Y, #L ou #R, que possuem os valores 128, 256 e 512, respectivamente. No entanto, em vez disso, uso uma vírgula para que (nesse caso) 3 espaços extras sejam impressos.
Programa 3:
Com 3 caracteres, você pode escrever números de notação E:
fonte
HQ9 +, 71304
Imprime as letras de 11.884 caracteres de "99 garrafas de cerveja"
Imprime "99 garrafas de cerveja" duas vezes
Imprime "99 garrafas de cerveja" três vezes
fonte
Japão
-Q
, Saídas1.0123378918474279e+150
bytesO número completo é
bytes.
# 1
Saídas
Para 67 bytes. (Crédito para Shaggy)
# 2
Saídas
que é 501 bytes.
(Crédito para @Shaggy)
# 3
Produz todas as permutações dos 95 caracteres imprimíveis ASCII no formato
["...","...","..."...]
, que éVocê pode obter uma quantidade infinita de bytes de saída se usar o
-F
sinalizador em Japt. O que faz é que, se a última expressão do programa for avaliada como falsa, ela emitirá o valor especificado no sinalizador. Então eu acho que a pontuação para Japt-F"Insert Super Long String Here"
é infinito.fonte
undefined
em 1 byte:$
.K
e obter 26 bytes de saída, mas seu 501 Byter é apenas gênioMalbolge , 1 + 2 + 3 = 6 bytes
Experimente online: primeiro , segundo , terceiro
Saídas:
Bruto forçado. Assume que
\0
não é um caractere de saída válidoCom
\0
:Saídas:
fonte
scg , 1 + 27 + 188 = 216
Primeiro:
Apenas imprime 1, pois a pilha é impressa no final do programa.
Segundo:
Imprime informações de depuração, que devem ser assim:
Terceiro:
adiciona 99 à pilha e usa a função range. Saídas 01234567891011 .... (este é um daqueles momentos em que desejo implementar a função fatorial. Não o fiz)
fonte
Marbelous 1 + 1 + 2 = 4 bytes de saída
Marbelous é interrompido aqui por ter instruções de dois bytes. Comentários inúteis ou espaços em branco desnecessários são as únicas maneiras de obter uma contagem de bytes ímpares.
imprima "A" e termine:
imprima "B" e termine com um comentário EOL vazio
imprima "CD" e termine:
fonte
Mathematica, 6 + 461 + 763 = 1230
1225618163bytes de saídaAtualmente, os dois últimos usam
Information
para obter documentação sobre os símbolos, que podem gerar muitos bytes. Observe que isso foi executado na linha de comando 10.1MathKernel
.fonte
Javascript, 72 bytes
Isso funciona no interpretador de linha de comando Mozilla JSShell Javascript.
1 byte:
1
Saídas
1
35 bytes:
gc
Saídas
36 bytes:
run
Saídas
fonte
js
linha de comando, você obterá um shell JavaScript.-bash: js: command not found
Especifique mais.js
a versão mais recente do Bash.gc
parece não existir no nó TIO, portanto, encontre uma implementação ou remova esta resposta.Oitava, 2818417 bytes
14 bytes para
ans = 2.7183\n
14 bytes para
ans = 3.1416\n
Exiba toda a documentação. 2818389 bytes, contados com
dd
Experimente online! porqueevalc
não funcionou.fonte
SmileBASIC 4, 1 + 13 + 15 = 29 bytes
Isso será semelhante à resposta SmileBASIC 3 do 12Me21, com alguns ajustes.
1
Como antes, a menor quantidade de código para produzir alguma saída é 2 bytes:
?
(PRINT
) e alguma expressão de byte único. O consenso é quePRINT
faz não produzir uma nova linha quando ele avança para a próxima linha, devido à forma como as obras de tela de texto. Portanto, isso resulta em um byte de saída.2
Com 3 bytes, podemos fazer algo diferente. O SB4 apresenta
INSPECT
, como alias??
, que imprime informações sobre um único valor. Se atribuirmos a ele uma string vazia, por exemplo, isso pode produzir muito mais saída do que o SB3. Isso nos dá 13 bytes.3
Como temos 4 bytes para trabalhar, precisamos decidir o que devemos fazer para maximizar nossa produção. Ir com
??
é uma aposta segura; temos apenas 2 bytes para usar em nossa expressão, mas a saída adicional deINSPECT
é basicamente livre. Então, eu o uso para imprimir uma sequência de etiquetas. Isso é 15 bytes.O total é 29 bytes.
fonte
Microscript II, 23 + 47 + 71 = 141 bytes
1:
C
A stringification de continuações não é estritamente definida pelas especificações, mas na implementação de referência isso, executado por conta própria, gera uma string de 23 bytes.
<Continuation @t=\d\d\dus>
(\d
representa um dígito, cujo dígito varia).No meu computador, pelo menos, isso sempre leva de 180 a 400 microssegundos para ser executado.
O primeiro uso que já tive para esta instrução.
2:
CP
47 bytes de saída - a saída do primeiro duas vezes com uma nova linha no meio.
3:
CPP
Bastante direto. 71 bytes de saída - a saída do primeiro três vezes com novas linhas no meio.
fonte
PowerShell, ~ 4300 bytes
Comprimento aproximado da saída, considerando o sistema em que é executado. Todos os trechos abaixo são determinísticos, pois se o mesmo estado inicial do computador fornecer o mesmo texto, apenas na prática o resultado poderá mudar de execução para execução.
Comprimento 1, 107 bytes
Este é um apelido para
Where-Object
. Ele exibirá um prompt do usuário solicitando informações adicionais:Comprimento 2, 113 bytes
Este é um apelido para
Remove-ItemProperty
. Ele exibirá um prompt do usuário solicitando informações adicionais:Apenas um pouco mais que o snippet de comprimento 1.
Comprimento 3, ~ 4100 bytes
Este é um alias para o
Get-Process
qual produzirá uma tabela formatada de todos os processos em execução no sistema:fonte
Javascript, 312 + 318 + 624 = 1254 bytes de saída
As duas funções
$
e$$
estão disponíveis em consoles de todos os principais navegadores, como atalhos paradocument.querySelector
edocument.querySelectorAll
, respectivamente. Navegadores diferentes têm código nativo coagido a seqüências de caracteres um pouco diferentes entre si, e o IE usa JS simples em cada função, resultando em uma representação muito mais longa.Para a contagem de bytes, estou usando o comprimento da representação de seqüência de caracteres de cada um, em vez da exibição do console às vezes modificada, para que o total de bytes seja, para cada um dos seguintes navegadores:
(Estou considerando que o resultado do IE seja a contagem "oficial" porque é a mais longa.)
Para ambientes de navegador que não são do console, as maiores saídas são as seguintes:
Duração dos resultados por navegador:
{}
for utilizável) + 32 = 38 (ou 48) bytes{}
for utilizável) + 38 = 44 (ou 54){}
for utilizável) + 36 = 42 (ou 52)Esses dois conjuntos de entrada produzem a maior saída possível em todos esses navegadores e consoles. Para provar isso, vamos verificar todas as alternativas:
Object.getOwnPropertyNames(window).filter(x=>x.length<=3)
, em seguida,map
elas em suas saídas de string para determinar as maiores. (Observe que em alguns navegadores como o Firefox, determinadas variáveis especiais do console não podem ser acessadas dessa maneira, pois não são propriedade da janela.)1234567890
) opcionalmente seguido por.
mais dígitos decimais e / ou uma parte do expoente, ou ser.
seguido por um ou mais dígitos decimais e, opcionalmente, uma parte do expoente. Outros tipos de números deve ser0o
,0x
ou0b
(ou formas em maiúsculas), seguido por um ou mais dígitos. Para nossos propósitos, podemos deduzir o seguinte:$
uma vírgula ou um número de um dígito. Matrizes com apenas um elemento são coagidas a strings como o próprio elemento. Matrizes vazias se tornam cadeias vazias.{}
sozinho no início de um script seria tratado como um gabinete em vez de criar um objeto.eval({})
retorna indefinido,eval({$})
retorna a$
função. Não há caracteres suficientes para cercar o{}
no()
.if
,in
,do
,new
,for
,try
,var
, elet
que todos exigem um mínimo de dois outros personagens de usar, excedendo o limite.~
,+
,-
,!
,++
, e--
. Os operadores de dois caracteres podem ser usados apenas com uma variável de caractere, da qual existe apenas um ($
), que geraNaN
. Os outros quatro operadores podem ser usados com qualquer valor de um ou dois caracteres, dos quais existem:$
,$_
,$0
,$1
,$2
,$3
,$4
,$
,$$
,$x
). Quando utilizado com esses operadores, os resultados são limitados a-1
,true
,false
, eNaN
.true
,false
.-1
,0
(-0
torna-se0
no toString),true
.+
,-
,*
,/
,%
,<
,>
,&
,|
,^
. Eles só podem ser usados com um valor de um caractere em cada lado. As opções para valores incluem$
e números inteiros 0-9. Os resultados de todas as combinações destes incluemInfinity
, alguns números e valores binários mencionados acima, e numerosas fracções que são forçados para cordas de 19 caracteres ou menos (1/7
se 19 caracteres, ao contrário1/9
sugerido acima, que é de apenas 18), e a representação de texto$
precedido ou seguido por um número inteiro de um dígito ou por si próprio..
requer uma variável existente e um identificador referente a uma propriedade. Todos os usos deste aqui resultam emundefined
. Ao redor de um valor,(
)
retorna-o, assim como o atribui=
. Usar()
ou `` para chamar um valor como uma função resulta em erros indefinidos ou com todos os valores disponíveis.Somando tudo isso, há um total geral de 1651 saídas possíveis ao usar um console do Chrome. As saídas mais longas para um, dois e três caracteres são a partir de
$
,$$
e$+$
respectivamente.fonte
dc , 2 + 5 + 18 = 25 bytes
1:
Ff
rendimentos ( Experimente online! ):2:
Fdf
rendimentos ( Experimente online! ):3:
Fd^f
rendimentos ( Experimente online! )Nenhum dos quais é particularmente interessante, mas
dc
não é realmente bom para cuspir pilhas de saída. Eu gosto que cada resposta se baseie na anterior. Enfim,F
é apenas o número 15;f
imprime a pilha inteira;d
duplica o topo da pilha;^
aumenta o topo da pilha para o poder da parte superior da pilha (nesse caso, 15 ^ 15). Não acredito que isso possa ser superadodc
.fonte
Ruby, 3 + 14 + 28 = 45 bytes
Por que eu fiz isso?
Impressões
nil
.Imprime
#<IO:<STDOUT>>
.Imprime algo ao longo das linhas de
#<Object:0x0000000003610988>
.Inicia uma instância do Interactive Ruby. Ao sair, o objeto retornado é
#<IRB::Irb: @context=#<IRB::Context:0x0000000003643040>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x00000000038900a0>>
para 121, mas como exige que você pressione^D
ou algo para realmente sair da instância irb, não tinha certeza se ele realmente contaria como uma solução em "3 bytes", por isso não estou na verdade, incluí-lo na partitura, a menos que seja aprovado.fonte
Perl 6, 53 (17 + 18 + 18) bytes
e
saídas-e
saídase*e
saídasfonte
Encantos Rúnicos, 4.000.000 de bytes de saída
O primeiro programa é:
Leva 2 bytes para: envie um valor para a pilha, imprima um valor da pilha e termine. Nesse caso, ele é impresso
10
(embora qualquer valor inteiro de 0 a 16 também seja válido)Para 3 bytes:
Prints
10000
, Mais uma vez,a
pode ser de 1 a 16 inclusive (a fim de gerar mais saída do que o programa original, 0 é potencialmente válida sob outros operadores) e não há um monte de operadores que têm uma única entrada e produzem qualquer saída, saída muito menos longa .XCYZ:E
são as únicas opções reais.aY@
é apenas o que resulta em mais saída.De acordo com a especificação da linguagem, isso é executado infinitamente. No entanto, como o intérprete possui um limite máximo de execução "ok, basta", essa é a saída mais alcançável em 4 caracteres (e o TIO interrompe a execução após ~ 130.000 bytes por exceder 128 kib) e como o intérprete define o idioma , isso trabalho. E embora eu tenha aumentado esse limite uma vez antes (de 10 mil etapas para 1 milhão), não pretendo mexer com isso tão cedo.
Maior?
Se eu invocar as três suposições que fiz aqui , com certeza.
O que funciona para
Ack(65,Ack(65,64))
, os quais não são valores terrivelmente grandes para serem inseridos na função Ackerman inicialmente - certamente menores que os 255 no post anterior - mas tudo bem, podemos chamar Ack duas vezes em 4 instruções.E só Deus sabe o que será impresso.
Nota:
A
desde então, a instrução foi transformada emMath
meta-instrução, que consome 3 objetos na pilha: um caractere para qual instrução executar e, em seguida, duas entradas, x e y. Como tal, esse programa não faz nada, nem porqueA
nem@
mapeia para uma função matemática e porque duas chamadas subsequentes resultam em um estouro de pilha.fonte