Cuando ejecuta su programa primero, debe imprimir una secuencia de enteros. La segunda ejecución debería imprimir la canción 'Mary tenía un corderito'. La tercera ejecución debería producir un archivo de imagen ASCII.
Puntuación
Su puntaje será la suma de sus bytes de código y cualquier contenido de archivo al comienzo de cada una de las 3 ejecuciones. La puntuación más baja gana.
Por ejemplo, myprog
tiene 1500 bytes y no cambia su tamaño, pero escribe un archivo de 4 bytes en cada ejecución para que sepa qué hacer en la próxima ejecución. La puntuación sería 1500 + (1500 + 4) + (1500 + 4) = 4508.
Salida
La primera salida es esta secuencia de 133 enteros, separados por espacios individuales:
0 89 98 179 188 197 269 278 287 296 359 368 377 386 395 449 458 467 476 485
494 539 548 557 566 575 584 593 629 638 647 656 665 674 683 692 719 728
737 746 755 764 773 782 791 809 818 827 836 845 854 863 872 881 890 908
917 926 935 944 953 962 971 980 1079 1088 1097 1169 1178 1187 1196 1259
1268 1277 1286 1295 1349 1358 1367 1376 1385 1394 1439 1448 1457 1466 1475
1484 1493 1529 1538 1547 1556 1565 1574 1583 1592 1619 1628 1637 1646 1655
1664 1673 1682 1691 1709 1718 1727 1736 1745 1754 1763 1772 1781 1790 1808
1817 1826 1835 1844 1853 1862 1871 1880 1907 1916 1925 1934 1943 1952 1961
1970
El segundo resultado es este texto exactamente (incluyendo mayúsculas, puntuación y espacios en blanco; la puntuación inconsistente es intencional):
Mary had a little lamb,
Little lamb, little lamb,
Mary had a little lamb,
Its fleece was white as snow
And everywhere that Mary went,
Mary went, Mary went,
Everywhere that Mary went
The lamb was sure to go
It followed her to school one day
School one day, school one day
It followed her to school one day
Which was against the rules.
It made the children laugh and play,
Laugh and play, laugh and play,
It made the children laugh and play
To see a lamb at school
El tercer resultado es esta imagen en formato PPM ASCII (P3) que queda en un archivo llamado
blue.ppm
. Esta es la imagen en formato PNG:
El archivo PPM debería verse así:
P3 50 50 255
255 255 255 255 255 255 255 255 255 255 255 255 ...
...
255 255 255
Hay una copia del archivo PPM completo aquí .
Ejemplo ejecutado (en Linux)
# ls
myprog
# interpreter myprog
0 89 98 179 188 197 269 278 287 296 359 ...
# interpreter myprog
Mary had a little lamb,
Little ...
# interpreter myprog
# ls
blue.ppm
myprog
# cat blue.ppm
P3 50 50 255
255 255 255 255 255 ...
Reglas
- Su código puede modificarse a sí mismo.
- Ejecutar el programa por cuarta vez es un comportamiento indefinido.
- Puede escribir en un archivo en el directorio actual, pero el tamaño de este archivo se agregará a su puntaje al comienzo de cada ejecución. El archivo PPM final está excluido de esto.
- Las dos primeras salidas son stdout (o similar). La última salida se escribe en un archivo, sin nada enviado a stdout.
- Las dos primeras salidas pueden tener opcionalmente un carácter de espacio en blanco final (por ejemplo, espacio o avance de línea).
- No puede usar la compresión o las bibliotecas de imágenes. Puede usar sus propias funciones de compresión o imagen, pero este código debe incluirse en su programa.
- Las lagunas estándar están prohibidas.
fuente
Respuestas:
Python (897 + 814 + 386 = 2097)
Respuesta simple auto modificable. Tendré que refinar la segunda carrera más tarde.
Además, si se ejecuta por cuarta vez, se degrada con seguridad a un NOP:
fuente
Rubí,
13561268 * 3 = 3804 bytesPara realizar un seguimiento de la invocación, estoy creando un archivo vacío
a
en la primera ejecución y un archivo vacíob
en la segunda ejecución.fuente
i.to_s.chars.map(&:to_i).reduce(:+)
con(j=i.to_s).sum-48*j.size
Python 3, 1027 + 1028 + 1029 = 3084
Utiliza OEIS A166370 para los números, algo de compresión escrita a mano para Mary's Lamb y bytes ASCII para almacenar las cantidades de números en el PPM.
(Ab) usa la función de Python para evaluar solo el segundo valor para operadores lógicos si el resultado aún no se conoce (cortocircuito):
1 or code
y0 and code
no evalúacode
. Luego usa algunos reemplazos para cambiar la0 or
ejecución del código de habilitación a ay al0 and
lado1 or
de0 or
.La tercera ejecución mata al segundo reemplazo, ya que no hay más
1 or
. La cuarta ejecución mata al primer reemplazo, después de lo cual el código básicamente no hace nada.fuente
C ++, 1204 * 3 = 3612 bytes
Compilador utilizado - GCC 4.9.2 con
-std=c++14
banderaExplicación -:
fuente
PHP (1552 * 3) +2 = 4658
Hay MUCHO golf que se puede hacer.
El código escribe 1 byte en otro archivo llamado
z
, para verificar el estado.Aquí está el código:
Sé que este es un código MUY horrible y puedo intentar jugar golf en la lista.
Pero bueno, no puedo encontrar un patrón en esos: /
fuente
Rubí, 691 + 612 + 225 = 1528 bytes
Otra respuesta auto modificable, esta vez en rubí. Ayer me topé con esto y la compresión del poema me llamó la atención. Solo pude guardar 92 bytes del texto sin procesar pensado.
Cada ejecución del programa reescribe el programa para la siguiente ejecución. No descubrí la propiedad especial de los números hasta que examiné las otras respuestas. Y tomé la misma inspiración de la respuesta de Martin, pero no utilicé la sugerencia de blutorange porque no podía entender por qué funcionó.
Probablemente hay algunos bytes más para buscar del poema, pero no mucho. Básicamente se trata de subcapsular en secuencias comunes y está usando el orden de la secuencia como la parte para reemplazar.
Para la parte final, la longitud codifiqué todos los 255 bytes en una matriz y los pegué junto con los ceros. Y luego codifiqué las secuencias repetidas en esa matriz.
fuente
JavaScript + HTML, 3909 bytes
Esta es una aplicación HTML / JavaScript que utiliza la recarga de página para volver a ejecutar archivos. Me burlé al analizar el PPM. Si sabe cómo leer archivos PPM, hágamelo saber. Stack Exchange no permite el almacenamiento local. Entonces tendrá que ejecutar JSFiddle.
De nuevo, sé que bombardeé el archivo ppm.
Pero al final:
JavaScript : 1,232 bytes * 3 = 3696
HTML : 71 bytes * 3 = 213
Total : 3909
JSFiddle
fuente