Crescer até 2017

16

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+ 1bytes.

Quando esse programa é executado, ele irá imprimir um programa que é THE LENGTH OF YOUR SUBMISSION+ 2bytes de comprimento ... e assim por diante.

No entanto , quando seu programa atingir um comprimento de 2017 bytes, ele deve 2017sair e sair.

Regras

  • A saída do programa final deve ser 2017e somente 2017. Pode ser uma string ou um número inteiro, mas deve ler 2017e não 2017.0ou 0x7E1ou 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 -XNo 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 -Xcontam 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.

user2428118
fonte
Apenas anexar NOPs, como ;;;permitido?
FlipTack
@FlipTack Sim. ·
user2428118 01/01
"Traços, barras etc. na frente de um sinalizador de linha de comando não contam para o total, portanto, por exemplo, o perl -X conta como um byte adicional." - Isso é intencionalmente contrário à norma aqui descrita no Meta? Normalmente, traços, barras, etc., devem por vezes ser contado, dependendo do que a invocação sem que parece opções como: meta.codegolf.stackexchange.com/questions/273/...
hvd
@ DVD Não pense que eu li esse, então não, não é intencional. Dito isto, acho que não há muito mal em ignorá-los, então não vou mudá-lo para este desafio.
precisa saber é o seguinte

Respostas:

6

*> <> , 29 28 30 bytes

" r::2+l'-':*7-(?ul1-n;Ol?!;ou

Experimente 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

" r: 2+                         build quine
    :                           copy extra " "
       l                        push length to stack
        '-':*7-                 push "2018" to stack
               (?u     O        if not length < 2018:
                  l1-n;           output length-1 and exit
                       Ol?!;ou  output entire stack and exit
redstarcoder
fonte
sim, não muito certo when your program has reached a length of 2017 bytes, não 2016 #
Destructible Lemon
@DestructibleWatermelon fixed
redstarcoder 1/17
4

Python 2.7, 90 bytes

Aqui está um relativamente simples:

p='q';s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1929 else'2017'";exec s

Experimente a primeira iteração aqui! Experimente a penúltima iteração aqui! Experimente a iteração final aqui!

Ungolfed:

p='q'      # The length of string p is the number of iterations so far.

s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1928 else'2017'"

exec s     # s contains the source code, but also contains a line saying "p += 'q'",
           # which makes the byte count longer. When the length of p is 1928 (i.e. when the
           # entire program is 2017 bytes long), 2017 is printed instead.
Calconym
fonte
@redstarcoder A iteração final possui exatamente 2017 caracteres. Você pode ver a contagem de bytes no canto superior direito Eu acho que ....
Calconym
Ah meu erro, não sei como isso aconteceu, desculpe!
Redstarcoder #
Você pode usar p='';...e 1929else, 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.
mbomb007
2

Microscript II, 38 bytes

{v{h}sl+s""+vK#s2017=(2017ph)lp"~"ph}~
SuperJedi224
fonte
1

> <> , 34 bytes

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#

Experimente online! Observe que, para testar isso em valores menores, seu valor (menos 1) deve poder ser gerado em 7 bytes.

Explicação

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#
".................................   push this string
 :                                   duplicate
  l                                  push length of stack
   ' '95**                           push 2016
          )                          1, if length > 2016, 0 otherwise
           b*                        multiply by 11
             f3++                    add 18
                 0.                  jump to that character on this line
                                     if the length is sufficiently long, this skips the
                                     next 10 characters, to the 11th (`b` from earlier):
                             :ln;    (if length is > 2016)
                             :         duplicate
                              l        push length
                               n       output as number
                                ;      terminate
                   1-}'#'r>o<        (if length <= 2016)
                   1-                  subtract 1 from the last char, `#`, to get `"`,
                     }                 which is then moved to the bottom
                      '#'              pushes `#` (will be appended)
                         r             reverses the stack
                          >o<          output stack, until error (accepted by default)
                                 #   This is never reached, but is used to generate `"`
Conor O'Brien
fonte
1

Java, 251 bytes (Eclipse IDE)

import java.io.*;class G{public static void main(String[]args) throws Exception{File x=new File("./src/G.java");if(x.length()==2017){System.out.print("2017");}else{PrintWriter y=new PrintWriter(new FileOutputStream(x,1>0));y.print("A");y.close();}}}//

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.

Urna de polvo mágico
fonte
1

C, 197 bytes

#define A ""
char*s="#define A %c %s%c%cchar*s=%c%s%c;%cmain(){printf(sizeof A==1820?%c2017%c:s,34,A,34,10,34,s,34,10,34,34);}";
main(){printf(sizeof A==1820?"2017":s,34,A,34,10,34,s,34,10,34,34);}
Giacomo Garabello
fonte
1

Python 2, 217 167 78 bytes

Observe que deve haver uma nova linha à direita. Eu usei conceitos semelhantes ao que Calconym usou, então obrigado pela inspiração!

p='q';s='p+=p[0];print"p=%r;s=%r;exec s"%(p,s)if len(p)<1941else 2017';exec s

Experimente online

Tente em 2016 ; Experimente em 2017


Versão anterior:

Este programa usa o inspectmó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.

from inspect import*
n=stack()[0][2];s='from inspect import*%sn=stack()[0][2];s=%r;print(s%%(chr(10)*n,s))if n<1852else 2017';print(s%(chr(10)*n,s))if n<1852else 2017

Experimente online

mbomb007
fonte
1

CJam , 39 33 30 bytes

33q:X~

com a entrada

2017:N=N{33')X+`":X~"+}?

Experimente online!

Isso é funcionalmente equivalente à minha versão anterior, exceto que evita a necessidade de escrever e escapar das aspas. A versão anterior:

33"2017:N=N{33')X+`\":X~\"+}?":X~

Quais saídas

33")2017:N=N{33')X+`\":X~\"+}?":X~

quais saídas

33"))2017:N=N{33')X+`\":X~\"+}?":X~

e assim por diante. Finalmente, o programa

33"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))2017:N=N{33')X+`\":X~\"+}?":X~

Saídas 2017 .

Como funciona

33      Push 33
  q     Read the input: 2017:N=N{33')X+`":X~"+}?
   :X   Store it in variable X
     ~  Eval it

Mas o que o código na entrada realmente faz?

 2017:N                      Push 2017 and store it in N
       =                     Check if the other number (33 on first run) equals 2017
        N                     If it does, push 2017
         {                    Else, execute this block:
          33                   Push 33
            ')                 Push the ) character
              X                Push X
               +               Concatenate with ')
                `              String representation (wraps it in quotes, escapes quotes inside)
                 ":X~"       Push the string ":X~"
                      +      Concatenate
                       }?    (end of block)

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.

Gato de negócios
fonte
0

JavaScript, 98 83 bytes

Isso 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

function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

Estou usando no functionlugar =>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:

function x(){return "33".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

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 .

console.log((
function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}
)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
)

Testado com o Firefox.

user2428118
fonte