Crece hasta 2017

16

En este desafío, creará un programa que crece a medida que avanza a través de las edades ... Hasta 2017.

Desafío

Siempre que esta descripción del desafío diga "programa", también puede leer "función".

Su envío, cuando se ejecute, generará un programa que tiene una longitud de THE LENGTH OF YOUR SUBMISSION+ 1bytes.

Cuando se ejecuta ese programa, generará un programa que tiene una longitud de THE LENGTH OF YOUR SUBMISSION+ 2bytes ... y así sucesivamente.

Sin embargo , cuando su programa ha alcanzado una longitud de 2017 bytes, en su lugar debe salir 2017y salir.

Reglas

  • La salida del programa final tiene que ser 2017y solo 2017. Puede ser una cadena o un entero, pero debe leer 2017y no 2017.0o 0x7E1o cosa por el estilo.
  • No hay lagunas estándar .
  • Solo su programa inicial puede requerir entrada, que se agregará a su bytecount.
    Entonces, si su programa inicial tiene 324 caracteres de largo y toma una entrada de 13 bytes, su puntaje total será 324 + 13 = 337 y el programa que salga debe tener 338 bytes de largo.
    • perl -XSin embargo, el uso de indicadores de línea de comando (p . Ej. ) Está bien, siempre que su programa inicial y todos los programas generados utilicen los mismos indicadores. Además, también cuentan para el recuento total de bytes. Los guiones, barras, etc. delante de un indicador de línea de comando no cuentan para el total, por lo que, por ejemplo, perl -Xcuentan como un byte adicional.
  • Si devuelve una función, debería ser una función real y no una cadena que, cuando se evalúa, produce una función.
  • No se permiten quines inadecuados (si su programa es un quine).

Ejemplo

Pseudocódigo, 99 bytes

IF (PROGRAM LENGTH == 2017)
  PRINT 2017
ELSE
  PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)

Su envío puede funcionar de manera diferente, siempre que cumpla con las reglas anteriores.

usuario2428118
fuente
¿Es solo agregar NOP como ;;;permitido?
FlipTack
@FlipTack Sí. ·
user2428118
"Los guiones, barras, etc. frente a un indicador de línea de comando no cuentan para el total, por lo que, por ejemplo, perl -X cuenta como un byte adicional". - ¿Es esto intencionalmente contrario a la norma aquí descrita en Meta? Normalmente, a veces se deben contar guiones, barras, etc., dependiendo de cómo se vea la invocación sin esa opción: meta.codegolf.stackexchange.com/questions/273/…
hvd
@hvd No creo que haya leído eso, así que no, no es intencional. Dicho esto, no creo que haya mucho daño en ignorarlos, así que no lo cambiaré para este desafío.
user2428118

Respuestas:

6

*> <> , 29 28 30 bytes

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

Pruébalo aquí! (* prueba con 2017 bytes )
* establece el retraso en 0 ms o quizás tengas que esperar mucho tiempo

Esto agrega un adicional cada ejecución subsiguiente. Si tiene 2017 bytes y se ejecuta, generará 2017 y detendrá la ejecución sin ningún otro resultado.

Actualización: se guardó 1 byte al verificar si la longitud es menor que 2017 en lugar de igual

Actualización 2: salida fija para +2 bytes

Explicación

" 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
fuente
sí, no del todo bien when your program has reached a length of 2017 bytes, no 2016
Destructible Lemon
@DestructibleWatermelon solucionado
redstarcoder
4

Python 2.7, 90 bytes

Aquí hay uno relativamente simple:

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

¡Prueba la primera iteración aquí! ¡Prueba la penúltima iteración aquí! ¡Prueba la iteración final aquí!

Sin golf:

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
fuente
@redstarcoder La iteración final tiene exactamente 2017 caracteres. Puede ver el recuento de bytes en la esquina superior derecha, creo ...
Calconym
Ah, mi error, no estoy seguro de cómo sucedió eso, lo siento!
Redstarcoder
Puede usar p='';...y 1929else, pero tenga en cuenta que la impresión también imprime una nueva línea al final, por lo que debe agregar una nueva línea final a su programa, de lo contrario, crecerá dos bytes después de la primera ejecución.
mbomb007
2

Microscript II, 38 bytes

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

> <> , 34 bytes

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

Pruébalo en línea! Tenga en cuenta que, para probar esto para valores más pequeños, su valor (menos 1) debe poder generarse en 7 bytes.

Explicación

":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
fuente
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();}}}//

Esto supone que el proyecto se realizó en Eclipse, utilizando la convención de .java archivos en el SRC del directorio de trabajo. Hay otras formas de detectar dónde está la fuente, pero tampoco creo que esto vaya en contra de las reglas.

Básicamente abre el código fuente .java y agrega como hasta 2017 (después de un comentario). Cuando el tamaño del archivo de la fuente alcanza un total de 2017 bytes, en su lugar imprimirá 2017.

Urna de pulpo mágico
fuente
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
fuente
1

Pitón 2, 217 167 78 bytes

Tenga en cuenta que debería haber una nueva línea final. Usé conceptos similares a los que usaba Calconym, ¡así que gracias por la inspiración!

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

Pruébalo en línea

Probar en 2016 ; Probar en 2017


Versión previa:

Este programa usa el inspectmódulo para obtener el número de línea actual. Luego, se imprime solo pero con una línea adicional después de la importación, que cambia el número de línea para el siguiente programa. También debería haber una nueva línea final aquí.

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

Pruébalo en línea

mbomb007
fuente
1

CJam , 39 33 30 bytes

33q:X~

con la entrada

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

Pruébalo en línea!

Esto es funcionalmente equivalente a mi versión anterior, excepto que evita la necesidad de escribir y escapar de las comillas. La versión anterior:

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

Que salidas

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

que salidas

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

y así. Finalmente el programa

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

Salidas 2017.

Cómo funciona

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

Pero, ¿qué hace realmente el código en la entrada?

 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)

Si el primer número del programa no es igual a 2017, generará un programa en el que ese número se incrementa una vez más de lo que era esta vez. Si es igual a 2017 (es decir, se ha incrementado 1984 veces), simplemente presione 2017 y finalice. El primer número comienza como 33 (la longitud del código); cada incremento aumenta la longitud del código en 1 Y ese número en 1, por lo que cuando 33 se ha incrementado lo suficiente como para convertirse en 2017, el código también tendrá una longitud de 2017 bytes.

Gato de negocios
fuente
0

JavaScript 98 83 bytes

Eso fue todo un desafío ... Supongo que eso es lo que obtengo por requerir que se devuelvan funciones reales y no solo la fuente de la función.

Función original

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

Estoy usando en functionlugar de =>aquí porque este último no admite funciones con nombre, solo asigna funciones anónimas a una variable.

Primera iteración

Ejecutar lo anterior en la consola del navegador devuelve una función que, cuando se convierte en una cadena, se ve así:

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

Llegando a 2017

Como cada función devuelve una nueva función, puede llamar a la función original / su resultado 1934 veces para obtener 2017 .

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

Probado con Firefox.

usuario2428118
fuente