Inspirado en github.com/JackToaster/Reassuring-Parable-Generator , inspirado a su vez en xkcd.com/1263 . Las posibles palabras se derivan del reassuring.cfg de ese repositorio.
Se recomienda echar un vistazo a reassuring.cfg (use el 12º commit) para ver la gramática que coincide con la salida (La salida es una lista de todas las cadenas que coinciden con la gramática).
Tarea: Su programa debe mostrar todas las 7968 líneas que distinguen entre mayúsculas y minúsculas del texto exacto contenido en pastebin pastebin.com/2SNAJ1VH . Se guarda una copia del pastebin en Wayback Machine
Aquí hay una muestra de 33 líneas motivadoras del pastebin:
Computers can't enjoy a salad.
Computers can't enjoy a cake.
Computers can't enjoy a ice cream cone.
Computers can't enjoy a meal.
Computers can't enjoy a drink.
Computers can't enjoy a steak.
Computers can't enjoy a chicken dinner.
Computers can't enjoy a piece of cake.
Computers can't enjoy a piece of pie.
Computers can't enjoy a cookie.
Computers can't enjoy a sandwich.
Computers can't taste a salad.
Computers can't taste a cake.
Computers can't taste a ice cream cone.
Computers can't taste a meal.
Computers can't taste a drink.
Computers can't taste a steak.
Computers can't taste a chicken dinner.
Computers can't taste a piece of cake.
Computers can't taste a piece of pie.
Computers can't taste a cookie.
Computers can't taste a sandwich.
Computers can't experience eating a salad.
Computers can't experience eating a cake.
Computers can't experience eating a ice cream cone.
Computers can't experience eating a meal.
Computers can't experience eating a drink.
Computers can't experience eating a steak.
Computers can't experience eating a chicken dinner.
Computers can't experience eating a piece of cake.
Computers can't experience eating a piece of pie.
Computers can't experience eating a cookie.
Computers can't experience eating a sandwich.
Reglas de desafío:
- La salida de las líneas se puede ordenar de la forma que desee, pero todas las 7968 deben estar incluidas.
- La salida debe ser como una sola cadena plana, no como una lista de cadenas.
- Su programa no debe aceptar ninguna entrada o una entrada vacía sin usar.
- Es posible que su programa no obtenga datos de ninguna fuente en línea.
- Una nueva línea final es opcional.
Este es el código de golf , por lo que gana el código más corto.
code-golf
string
kolmogorov-complexity
grammars
fireflame241
fuente
fuente
No computer {can} {action}.
se repite dos veces yComputers {cannot_present}
produce frases como "Las computadoras son incapaces de". ¿Intencional?Respuestas:
Zsh , 765 bytes
Esto puede ser lo primero que he escrito en zsh, pero tiene la característica increíblemente conveniente de poder convertir matrices para expansiones de llaves (aunque no es tan conveniente como debería ser ... ). Corre con
zsh -P
(contado como +1 byte), que se activaRC_EXPAND_PARAM
.Pruébalo en línea!
fuente
JavaScript (ES6),
12341091 bytes¡Es un buen conteo de bytes para comenzar! Es hora de jugar golf en esa enorme cuerda.
Menos golfizado:
¿Cómo?
(¡Este es, con mucho, uno de mis campos de golf más favoritos de todos los tiempos!)
La gramática se almacena en la matriz
G
, que se evalúa a esto:F
es una función que divide una cadena por el delimitador|
y la itera. Hasta aquí todo bien.¿Qué está pasando con esta función interna?
Primero inicializamos una matriz
A
. Entonces nos encontramos con todos los dígitos en la cadena pasadas
y construimos un subprograma: El uso de cada dígiton
, generamos unfor
-of
bucle que itera a través de las entradasG[n]
(almacenados como propiedadesF
, ya que las funciones en JavaScript son también objetos). Los bucles se agregan uno tras otro.Por ejemplo, el subprograma generado para
s="1 2 3"
comienza así:En cada iteración, el subprograma reemplaza cada dígito
s
con su reemplazo correspondiente, almacenadoF[n]
, y el resultado se empuja aA
. El subprograma seeval
edita yA
se devuelve implícitamente.Utilizando
F
, el resto del programa simplemente construye el resto de la gramática a partir de las reglas de producción que ya existen; Los reemplazos se definen simplemente por un índice de un solo dígito enG
.fuente
f
. Por lo tanto,f=
debe agregarse al recuento de bytes.F
lugar def
).PHP, 877 bytes
Ah, eso fue divertido!
Si puede, intente desenterrar un byte más.
sin golf
explicación
La salida se puede dividir en 48 trozos de 166 líneas cada uno. Dentro de cada fragmento, cada línea comienza con una de
Computers|A computer|No computer
seguida de una de 14 capacidades negativas (paraComputers
yA computer
) o 9 positivas (paraNo computer
).Codifiqué estos fragmentos a 6 bits cada uno (3 sujetos diferentes -> 2 bits inferiores; las mayúsculas positivas y negativas comparten claves -> 4 bits superiores), y (probablemente obvio) agregué 65 para usar los valores como códigos ASCII.
Dentro de estos fragmentos, 8 combinaciones verbo / adjetivo para 11 alimentos diferentes y 13 combinaciones diferentes para 6 artes diferentes, siempre en el mismo orden; para que simplemente se puedan recorrer en bucle, usando la tecla verbo / adjetivo para determinar si tengo que enumerar alimentos o bebidas en el siguiente ciclo.
Quedaba una parte difícil: algunas de las mayúsculas requieren la forma gerundia del verbo; y algunos de los verbos pierden un
e
en la transformación. El índice de límite indica si es necesario o no.(y gracias al orden de los bits en la codificación, simplemente puedo usar el carácter ASCII para la comparación).
¿Pero cómo? Después de hacer malabarismos con expresiones regulares por un tiempo, simplemente coloco un lugar
1
dondee
debe ser reemplazadoing
y un lugar0
dondeing
debe agregarse y dejar questrtr
haga el trabajo.Esa es la historia de la versión anterior sin golf. (1199 bytes empaquetados)
El golf consistió principalmente en 3 pasos:
strtr
se extendió a todo excepto al sujeto para mover variables astrtr
.strtr
.La palabra 19
tast
, fue reemplazada por una letra mayúscula para deshacerse de un par de comillas.Me pregunto qué pasaría si también codificara las combinaciones verbo / adjetivo.
Tal vez podría vencer a Zsh; pero no estoy seguro si me pregunto lo suficiente como para intentarlo.
fuente
Retina,
12491192 bytesLa salida excede las limitaciones de TIO. Quería usar
%`
etapas para evitar todo$%'¶$%`
pero, por alguna razón, eso no hace lo que quiero. Editar: Guardado 57 bytes gracias a @ fireflame241.fuente
ing
e 'Ito' se usan varias veces. Cada llamada a1
,2
y5
está precedida y seguida por un espacio, por lo que se pueden poner en la sustitución. Del mismo modo,6
y7
siempre van seguidos de un punto.3
parece que solo se usa una vez.Chicle , 23353 bytes
Sip. La mayor parte no cabe en una respuesta, así que ... Tanto el código como el enlace TIO están en pastas.
Código (un hexdump del código)
Enlace TIO (la salida excede las limitaciones de TIO)
fuente