Es el 10 de agosto de 2019, pero su tarea aún involucra Y2K. Raro, verdad?
Cree un programa que se imprima solo, con un número de dos dígitos adjunto. La primera vez que lo ejecute, debería agregar 00 a su salida (su código fuente, porque esta es una variante quine). Cuando ejecuta esa salida, el programa original sin un número de dos dígitos, debe generar el programa original, pero con 01 añadido. Ejecute esa salida para obtener el programa OG con 02 añadido, luego para obtener el programa con 03 ... Esta cadena debería continuar hasta 99. Ese programa debería salir BREAKING NEWS: WORLD ENDS.
Si su programa es Y2Kparanoia: yesentonces:
- Debería salir
Y2Kparanoia: yes00 - Esa salida debería imprimir
Y2Kparanoia: yes01 - Esa salida debería imprimir
Y2K paranoia: yes02 - Repita hasta el paso 100: este programa emite las noticias del día del juicio final especificadas
Este es el código de golf, por lo que gana el programa más corto que puede imprimirse mientras sigue estos pasos.

2Kparanoia: yes97y produciendo2Kparanoia: yes98, así que ¿no debería (4) leerRepeat to step 100, but step 101 will output "BREAKING NEWS: WORLD ENDS"? (es decir,2Kparanoia: yes99produce la noticia)Respuestas:
Perl 6 ,
122114106bytes-8 bytes gracias a Shelvacu
Pruébalo en línea!
Toma el formato estándar de quine y agrega la cadena de noticias de última hora, así como una nueva llamada de función con el número adjunto. Esto se utiliza
ENDpara ejecutar la función cuando finaliza el programa.fuente
ENDy unaourvariable:END {<print $s-199??"END\{<$_>~~.EVAL};our\$s="~($s-1&&$s-99)+100!!"BREAKING NEWS: WORLD ENDS">~~.EVAL};our$s=1Ruby,
158154146128122100 bytesInspirado por esta respuesta .
EDITAR: pude eliminarlo
(s.split(35.chr)[0]+35.chr).inspecty reemplazarlo cons[0..-2](rango de cada valor excepto el último) y la%{ ... }sintaxis de cadena que usé antes. ¡Guardado 22 bytes!Versión antigua:
EDITAR: guardó un par de parens (y el par correspondiente en la sección de datos) al darse cuenta de que
"BREAKING NEWS: WORLD ENDS"es una cadena de formato perfectamente válida, y ruby ignora los parámetros extraneos.Al iniciar este me di cuenta de que, dado que el número tiene que ir al final del programa, y el rubí no permite el uso de variables antes de que se declaran, que tendría que hacer que el código se ejecute después de los dígitos de alguna manera. Podría haber hecho algo como lo
def a(s) ... end;a 1que sería...end;a 100, sin embargo, usar laENDsintaxis menos conocida de Ruby usa menos bytes. Sin embargo, el bloque interiorENDtiene un alcance diferente, por lo queSdebe ser una variable global o constante.Explicación:
END{ ... };S=1: Ejecute el bloque de código justo antes de que finalice el programa; Establezca constanteSen1(o100-199en futuras iteraciones)$><<( ... ):$>es un atajo en ruby para stdout, y<<en un IO escribe en el IO. Los padres son obligatorios, de lo contrario se convierte en($><<S)>198...S>198?"BREAKING NEWS: WORLD ENDS":(q=...)%[q,S<2?0:S-99]: Si tuviera que dividir esto en un código un poco más razonable sería:El
%operador aplicado a una cadena es efectivoprintf, con LHS como cadena de formato y RHS como argumentos.%{ ... (q=%%{%s}) ... S=1%02d}: ruby tiene una sintaxis interesante para las cadenas que también permite que aparezcan pares de llaves dentro de la cadena sin escapar siempre que estén equilibradas. Esto es muy útil, ya que de lo contrario una quine similar tendría que escapar de la cadena para colocarla en sí misma como un literal de cadena. Las dos sustituciones en la cadena de formato son%spara una cadena normal y%02dpara un número rellenado a la derecha a un tamaño de 2 con el carácter0.Mis pensamientos sobre acortar aún más:
Sería bueno poder usarlo enEDITAR: ¡Las constantes son globales y pueden ser un solo personaje!slugar de hacerlo$s, pero al definir ss=$s;o hacer una función,def a(s) ...ambos usan más bytes de los que guardan, y no se me ocurre otra forma de hacerlo.Ssiempre fuera menor100, de modo que pudiera compararse usando números de 2 dígitos en lugar de números de 3 dígitos. Sin embargo, si utilizoS=0al final, los dos dígitos siguientes se interpretan como octal, y8y9son válidos y todo está litera.S=simplemente no es válido, y no conozco otra forma de hacer que un valor sea válido tanto antes como después de agregar dos dígitos. Es de destacar que0(y cualquier otro número entero) es verdadero en rubí.Cualquier idea sobre cómo hacer esto más corto, ¡hágamelo saber!
Pruébalo en línea!
fuente
s=100-1? Entoncessserá 99, 0, -1 ...- 99, y-sserá -99, 0 ... 99.Ir,
382366354340305298272bytesNo ganará pero me divertí con el desafío.
¡Pruébalo en Go Playground!
Basado en una quine. Si la variable
nes inferior a 199, agrega a la variable de cadenanun acento grave (\x60), el carácter de Go para cadenas de varias líneas, seguido de una coma,. Continúa imprimiendo los primeros 147 caracteres des(para evitar imprimir,porque solo ocurre al final), luego imprimescomo un todo y finalmente imprime100sin == 1y de lon+1contrario. El resultado es que las ejecuciones sucesivas cambian la variablenal final del programa a 100, 101, etc. Si la variablenes 199 o más, imprime las últimas noticias.fuente
Haskell ,
240232218216 bytesPruébalo en línea!
Adaptado de una quine
fuente
JavaScript (ES6), 116 bytes
94 bytes, si se permiten funciones de cadena
fuente
f=${f}), eso no es una quine según codegolf.meta.stackexchange.com/a/4878/13400C # (compilador interactivo de Visual C #) , 193 bytes
Pruébalo en línea!
fuente
Pyth ,
8180 bytesPruébalo en línea!
Explicación:
Y el código en la cadena es (noticias de última hora acortadas):
fuente