Neste desafio, você estará construindo um programa que cresce à medida que atravessa as eras ... Até 2017.
Desafio
Sempre que essa descrição do desafio indicar "programa", você também poderá ler "função".
Sua apresentação, quando executado, a saída vontade um programa que é THE LENGTH OF YOUR SUBMISSION
+ 1
bytes.
Quando esse programa é executado, ele irá imprimir um programa que é THE LENGTH OF YOUR SUBMISSION
+ 2
bytes de comprimento ... e assim por diante.
No entanto , quando seu programa atingir um comprimento de 2017 bytes, ele deve 2017
sair e sair.
Regras
- A saída do programa final deve ser
2017
e somente2017
. Pode ser uma string ou um número inteiro, mas deve ler2017
e não2017.0
ou0x7E1
ou outras bobagens desse tipo. - Sem brechas padrão .
- Somente seu programa inicial tem permissão para exigir entrada, que será adicionada ao seu número de bytes.
Portanto, se seu programa inicial tiver 324 caracteres e receber uma entrada de 13 bytes, sua pontuação total será 324 + 13 = 337 e o programa gerado por ele deverá ter 338 bytes.perl -X
No entanto, o uso de sinalizadores de linha de comando (por exemplo ) é bom - desde que o programa inicial e todos os programas gerados usem os mesmos sinalizadores. Além disso, eles também contam para o número total de bytes. Traços, barras, etc., na frente de um sinalizador de linha de comando não contam para o total, portanto,perl -X
contam como um byte adicional.
- Se você retornar uma função, ela deve ser uma função real e não uma sequência que, quando avaliada, produz uma função.
- Quines impróprios (se o seu programa for um quine) não serão permitidos.
Exemplo
Pseudocódigo, 99 bytes
IF (PROGRAM LENGTH == 2017) PRINT 2017 ELSE PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)
Seu envio pode funcionar de maneira diferente, desde que cumpra as regras acima.
;;;
permitido?Respostas:
*> <> ,
292830 bytesExperimente aqui! (* tente com 2017 bytes )
* defina o atraso para 0ms ou talvez você precise esperar muito tempo
Isso adiciona um adicional a
cada execução subseqüente. Se ele tiver 2017 bytes e for executado, ele produzirá 2017 e interromperá a execução sem outra saída.
Atualização: salvou 1 byte, verificando se o comprimento é menor que 2017 em vez de igual
Atualização 2: Saída corrigida para +2 bytes
Explicação
fonte
when your program has reached a length of 2017 bytes
, não 2016 #Python 2.7, 90 bytes
Aqui está um relativamente simples:
Experimente a primeira iteração aqui! Experimente a penúltima iteração aqui! Experimente a iteração final aqui!
Ungolfed:
fonte
p='';...
e1929else
, mas observe que a impressão também imprime uma nova linha no final; portanto, você deve adicionar uma nova linha à direita no seu programa, caso contrário, ela cresce dois bytes após a primeira execução.Microscript II, 38 bytes
fonte
> <> , 34 bytes
Experimente online! Observe que, para testar isso em valores menores, seu valor (menos 1) deve poder ser gerado em 7 bytes.
Explicação
fonte
Java, 251 bytes (Eclipse IDE)
Isso pressupõe que o projeto foi feito no Eclipse, usando a convenção de
.java
arquivos no SRC do diretório de trabalho. Existem outras maneiras de detectar onde está a fonte, mas também não acho que isso seja contra as regras.Basicamente, abre o código-fonte .java e anexa As até 2017 (após um comentário). Quando o tamanho do arquivo da fonte atingir um total de 2017 bytes, ele será impresso em 2017.
fonte
C, 197 bytes
fonte
Python 2,
21716778 bytesObserve que deve haver uma nova linha à direita. Eu usei conceitos semelhantes ao que Calconym usou, então obrigado pela inspiração!
Experimente online
Tente em 2016 ; Experimente em 2017
Versão anterior:
Este programa usa o
inspect
módulo para obter o número da linha atual. Em seguida, ele se imprime, mas com uma linha extra após a importação, que altera o número da linha para o próximo programa. Também deve haver uma nova linha à direita aqui.Experimente online
fonte
CJam ,
393330 bytescom a entrada
Experimente online!
Isso é funcionalmente equivalente à minha versão anterior, exceto que evita a necessidade de escrever e escapar das aspas. A versão anterior:
Quais saídas
quais saídas
e assim por diante. Finalmente, o programa
Saídas
2017
.Como funciona
Mas o que o código na entrada realmente faz?
Se o primeiro número do programa não for igual a 2017, ele emitirá um programa no qual esse número será incrementado mais uma vez do que era desta vez. Se for igual a 2017 (ou seja, foi incrementado 1984 vezes), basta pressionar 2017 e encerrar. O primeiro número começa como 33 (o comprimento do código); todo incremento aumenta o comprimento do código em 1 E esse número em 1; portanto, quando 33 tiver sido incrementado o suficiente para se tornar 2017, o código também terá 2017 bytes.
fonte
JavaScript,
9883 bytesIsso foi um grande desafio ... Acho que é o que eu recebo por exigir que as funções reais sejam retornadas e não apenas a fonte da função.
Função original
Estou usando no
function
lugar=>
daqui porque o último não suporta funções nomeadas, apenas atribuindo funções anônimas a uma variável.Primeira iteração
A execução do procedimento acima no console do navegador retorna uma função que, quando convertida em uma string, se parece com:
Chegando a 2017
Como cada função retorna uma nova função, você pode chamar a função original / seu resultado 1934 vezes para obter 2017 .
Testado com o Firefox.
fonte