Considere una pregunta escrita en inglés simple cuya respuesta involucra dos palabras o frases razonablemente precisas (pero potencialmente inteligentes) que pueden separarse por la palabra 'y':
P: ¿Cuáles son las dos caras de una moneda? A: cabezas y colas
P: ¿Cuáles son las mejores formas de viajar? A: avión y jetpack
P: ¿Por qué un cuervo es como un escritorio? A: porque hay una 'b' en ambos y una 'n' en ninguno
Gol
Escriba un programa que, cuando se ejecuta normalmente, genera dicha pregunta.
Cuando todos los demás caracteres se eliminan del programa comenzando con el segundo carácter y el resultado se vuelve a ejecutar, la salida debe ser lo que esté a la izquierda de 'y' en la respuesta.
Cuando todos los demás caracteres se eliminan del programa comenzando con el primer carácter y el resultado se vuelve a ejecutar, la salida debe ser lo que esté a la derecha de 'y' en la respuesta.
(El 'y' en sí mismo no se emite).
Ejemplo
Si el programa es
A1B2C3D4E5F6G7H8I9
y su salida es
What are the two sides of a coin?
Entonces la salida de ABCDEFGHI
debería ser heads
, y la salida de 123456789
debería ser tails
.
Reglas sobre preguntas y respuestas
- Puede usar mis preguntas de ejemplo, pero le animo a que haga las suyas.
- La pregunta y las dos partes de respuesta:
- todos deben ser distintos
- debe ser inglés gramatical común y significativo
- solo puede contener ASCII imprimible (hex 20 a 7E)
- Idealmente, la pregunta se escribirá con mayúscula y puntuada (pero las respuestas no tienen por qué serlo).
- La pregunta debe tener al menos 30 caracteres y tener una entropía superior o igual a 3.5. (Escriba una cadena, presione calcular , busque la última H (X)) .
- Las dos partes de la respuesta (sin incluir la
[space]and[space]
entre ellas) deben tener al menos 5 caracteres con una entropía superior o igual a 2. - La palabra 'y' puede aparecer en cualquier parte de la respuesta.
Reglas sobre el código
- Ninguno de los 3 fragmentos de código puede:
- contener comentarios o cualquier otra cosa que el compilador / intérprete ignora tradicionalmente (no se preocupe por poner un punto y coma adicional o dos, pero si cree que es un comentario, probablemente lo sea)
- salir del programa a mitad de ejecución
- El código puede contener caracteres, incluidos Unicode y ASCII no imprimible.
- Puede tener un número par o impar de caracteres.
- La salida va a stdout o un archivo o lo que parezca razonable. No hay entrada
Tanteo
Dado que no quiero alentar las respuestas de golf pero quiero alentar aún más las respuestas inteligentes, la puntuación será algo entre el código de golf y el concurso de popularidad:
Puntuación = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)
El puntaje más alto gana.
(Utilice http://mothereff.in/byte-counter como contador de bytes).
fuente
x0=00;;
. ¡Gran reto!00;
el compilador lo ignora tradicionalmente ...It may have an odd or even number of characters
¿Hay varios caracteres que no sean impares o pares?Respuestas:
Javascript (148 bytes)
Crea algunos literales sin sentido, con el efecto secundario de crear una alerta * para la pregunta. (las divisiones hacen algo similar, pero crean alertas * para cada una de las respuestas).
Splits:
y
Pregunta:
What is the ideal breakfast???
Respuestas:
bacon
yscrambled eggs
fuente
Brainfuck (437 caracteres)
Tengo que confesar que este es mi primer programa de brainfuck que realmente hace algo significativo. El programa está altamente optimizado para sistemas con poca memoria ya que usa solo 4 ubicaciones de memoria.
Pregunta:
What are the two main groups of trees?
Respuestas:
conifers
ybroadleafs
Bucle principal
El programa consta de un bucle principal (que no es realmente un bucle ya que todos los bloques [] se ejecutan solo una vez) y dos secciones.
Si desea probar secciones de forma independiente, debe tener en cuenta el bucle principal. La ubicación 0 contiene -1 en respuesta par, 1 en respuesta impar y 2 en la sección de preguntas.
Sección de respuestas
Respuesta par (instrucciones extrañas eliminadas)
Respuesta impar (incluso las instrucciones eliminadas):
Sección de preguntas
Decidí almacenar espacio para separar la ubicación porque su valor difiere drásticamente de otros personajes. Esto permite que el espacio se imprima simplemente con
<.>
.Actualización final
En mi actualización final, optimicé las multiplicaciones para que se usen instrucciones mínimas. También incluir 'l' al segundo grupo de personajes en la sección de respuestas impares demostró ser una gran mejora. El ahorro de un solo carácter en respuesta impar básicamente significa dos caracteres de todo el programa, ya que también reduce el relleno de la respuesta par. También eliminé un par de instrucciones innecesarias de aquí y de allá y no creo que pueda optimizar el código más.
fuente
Lote - 84
Bastante orgulloso de este
Programa completo: ¿Cuáles son las dos caras de una moneda? (consola)
Evens only: heads (archivo 'c')
Solo probabilidades: colas (archivo 'x')
Funciona redirigiendo la salida del error a un archivo en ambos casos.
fuente
Python -
10496 (golfizado: 76)Mi solución es bastante simple (y de alguna manera legible):
Salida:
Honestamente, encontré la idea de la primera línea en la respuesta de Bitpwner.
Alternativa aún más legible:
11310597Alternativa aún más corta: -
8676fuente
zebra
. Y encaja perfectamente en una versión "golfista" con una pregunta de exactamente 30 caracteres. Por lo tanto, modifiqué ligeramente mi solución. :)Rebmu : 79 caracteres O (37 + longitud (p1) + 2 * max (longitud (p2), longitud (p3)))
Primero daré una solución de 79 caracteres que pregunta ¿Qué idiomas debes aprender? (entropía 4.0, 30 letras no incluidas
?
) y le ofrece las sugerencias de Rebol y [Rojo] :Una táctica única disponible aquí que no está en otros idiomas proviene de aprovechar el hecho de que las llaves son un delimitador de cadenas asimétrico, que puede anidar legalmente:
Eso me permite producir una solución generalizada, que puede funcionar sin esfuerzo en cualquier programa que no use secuencias de escape. La versión de 79 caracteres era lo suficientemente simple como para un acceso directo, pero para contener adecuadamente la fuente de programa arbitraria para los programas p2 y p3 necesitaría la plantilla completa. Si hubiéramos usado eso, habrían sido 87 caracteres:
El patrón para utilizar esta forma general es que si tiene tres textos fuente de caracteres secuenciales de longitud variable (Usemos un ejemplo como
AAA
,BBBBB
,CCCCCCC
) se puede codificar como algo a lo largo de las líneas de:(Nota: aunque este patrón no funcionará sin modificar los programas que usan caracteres de escape, esto no es un defecto fatal. Obtener un paréntesis izquierdo sin igual en una cadena delimitada por llaves requiere algo como
{Foo ^{ Bar}
... pero podría reescribirlo fácilmente usando la notación de cadena alternativa"Foo { Bar"
, y los casos combinados se pueden manejar pegando una mezcla de cadenas sin escape).Entonces ... ¿qué tal un ejemplo? Una vez que el formulario general estuvo disponible, este programa de 573 caracteres se ensambló en solo un par de minutos a partir de 3 soluciones de golf de código anteriores:
Si no modifica el programa, es la solución de reloj de arena .
Si toma solo los caracteres extraños y lo ejecuta, imprimirá las 99 botellas de poema de cerveza
Solo los personajes pares harán una pequeña conversión de números romanos por ti.
Si alguien quiere intentar escribir ese programa en el idioma de su elección y cree que puede vencer a 573, avíseme. Si lo haces, te recompensaré con una gran cantidad de reputación, suponiendo que tu idioma de elección no sea Rebmu, porque sé que esos programas no son mínimos. :-)
Ese espaciado "derrochador" que obtienes al final es lo que sucede cuando p2 y p3 tienen longitudes desequilibradas. Pero los 3 programas son de diferentes tamaños en este caso, por lo que no hay un buen emparejamiento particular para elegir para p2 / p3. (Los elegí porque no había datos externos como entrada, como un laberinto o lo que sea, no es que fueran de longitudes similares. Si bien podría haber escrito nuevos programas que fueran más óptimos, he pasado suficiente tiempo y el punto era usted no tiene que escribir nuevos programas ...)
Cómo funciona
(Nota: comencé con un enfoque más "creativo" que no era tan simple pero de aspecto más interesante. Lo moví a una entrada en mi blog, ya que describir este enfoque ya es largo).
Una clave aquí es el truco de "evaluar el código como una cadena" como algunas otras entradas, solo tiene la carta de triunfo del delimitador de cadena asimétrica. Comenzaré explicando el funcionamiento del caso de 80 caracteres.
Aquí está el programa "completo", ajustando el espacio en blanco para la legibilidad de este caso:
Aquí terminamos configurando DD como sinónimo de DO (también conocido como "eval"). Pero el truco es que cuando se ejecutan los programas reducidos a la mitad, terminan ejecutando código cuyo único efecto es definir D en el inofensivo literal 1.
Esto es lo que hace el código de caracteres impares, el espacio en blanco nuevamente ajustado:
Y aquí está el código de caracteres pares:
Es realmente el caso de que para el programa no reducido a la mitad,
dd {dd {(arbitrary code)qt}}
ejecutará el código que desee. Sin embargo, hay dos llamadas para evaluar en lugar de solo una. Esto se debe a que, si bien las llaves anidadas funcionan muy bien en el código intercalado, arruinan el comportamiento de evaluación de DO. Porque:Cargará la cadena como un programa, pero ese programa termina siendo solo la constante de la cadena
{print "Hello"}
. Por lo tanto, el truco que uso aquí es tomar mi DD (que tiene el mismo valor de función que DO) y ejecutarlo dos veces. Las mitades mastican las diferentes partes de la cadena, pero no mastican ambas si la par / impar es correcta para el contenido, y porque lo que queda fuera de la cadena después de la mitad es solo la constante integrald
, son inofensivas.Con este patrón no hay ningún desafío en escribir el comportamiento del programa cuando no se reduce a la mitad: puede poner cualquier cosa siempre que la longitud del código sea uniforme (impar si cuenta el QT, que es QUIT). Si necesita obtener el número par de uno impar, agregue un espacio (por lo que en realidad hay un +1 en mi fórmula anterior en p1 para longitudes impares de programa de p1) . El truco parecería escribir ese código intercalado después, que debe pasar el analizador si no se reduce a la mitad. (No se ejecutará debido al QT, pero debe CARGARSE antes de ejecutarse).
Este caso es trivial;
pp
se carga bien como símbolo aunque no esté definido, y se divide enp
para imprimir en cada medio programa. Pero podemos hacer otro truco simplemente usando una cadena literal nuevamente. Los programas a la mitad todavía tienen DO definido normalmente, por lo que también podríamos haber dicho:Al hacer que la única parte recogida por el analizador en todo el caso sea la palabra simbólica
ddoo
y un literal de cadena, podemos intercalar cualquiera de los dos programas que deseamos dentro de ese literal de cadena y no enojar al analizador. Las versiones reducidas a la mitad solo dirán:..y...
Como digo, esta parte parece familiar a otras soluciones que tratan los programas como cadenas y los evalúan. Pero en el caso de la competencia, cuando los programas que está empaquetando contienen cadenas anidadas, eso les arroja llaves. Aquí, las únicas cosas que lo meterán en problemas son el uso de escapar a través de carets (
^
) ... que puede solucionarse fácilmente.(Pequeña nota de 'trampa': agregué QT para "QUIT" en respuesta a este problema. En realidad, había eliminado a propósito la abreviatura para dejar de fumar antes ... porque de alguna manera pensé que solo era bueno para el uso de la consola y simplemente retomando el espacio de dos letras si no estaba en un REPL. Lo agrego porque veo que estaba equivocado, no lo agregué para este caso en particular. Sin embargo, antes de ese cambio, habría sido 2 caracteres más. Además, cuando publiqué la solución por primera vez, había un error en Rebmu que impedía que funcionara aunque debería haberlo hecho ... ahora funciona).
fuente
Perl
186139135¿Cuáles son las mejores cosas de la vida?
aplastar a tus enemigos
escuchar las lamentaciones de sus mujeres
Usando respuestas menos largas:
Perl
7972What are my preferred weapons?
(30 Byte, H (X) = 3.76)swords
(H (X) = 2,25) ymaces
(H (X) = 2,32)fuente
Python -
139103What are the ingredients for success?
->Unicorns
yRainbows
Prueba:
Versión antigua:
fuente
Haskell, 117
Tener que trabajar con el paradigma funcional de Haskell significa que todo tiene que asignarse a una variable o comentarse con comentarios de línea
--
o bloque{- -}
; tener funciones sin sentido ejecutadas sin asignación está fuera. Entonces, para mantenerme cuerdo, mantuve la pregunta y las respuestas tan cortas como lo permitieron las reglas.Pregunta: ¿De qué no puedo tener suficiente?
"Zapatos" y "pasteles":
NB La aparición de
crank
debajo de "¿De qué no puedo tener suficiente?" no debe ser visto como significativo.fuente
Wa
está en el comentario de bloque, así que no, en realidad no es anpttLWa.Lisp (76 caracteres)
Pregunta de 31 caracteres, 6 caracteres en cada respuesta ⟹ longitud - carga útil = 33
Quería usar "¿Cuál es tu color favorito?", Pero incluso se extendió a la ortografía británica, solo alcanzó el mínimo de 30 caracteres para la longitud de la pregunta, y necesitaba una pregunta de longitud impar para equilibrar las comillas dobles.
Dicen que Common Lisp es detallado, pero no pensarías que lo harías de esta manera. Ni siquiera está muy ofuscado, solo necesita insertar un poco de espacio en blanco para ver qué se cotiza y qué se ejecuta.
Muchas implementaciones de Lisp gritarán los colores, porque deforman los símbolos en mayúsculas. Si eso te molesta, cambia
''fmuacghesnitaa
a""fmuacghesnitaa""
.fuente
STATA 295
Pregunta: ¿Cuáles son los mejores postres para hornear en este momento? Respuesta: brownies y galletas.
Explicación: Los comandos en STATA están delimitados por nuevas líneas.
Mientras que "//" es un comentario en STATA, "///" le dice al compilador que continúe a la siguiente línea e incluya su contenido en el comando actual.
Los comandos en STATA a menudo se pueden abreviar hasta el punto en que se consideran lo suficientemente únicos como para ser diferenciables (por lo que "generar" se convierte en "g", "global" se convierte en "gl" o "glo", "captura" se convierte en "cap", " mostrar "se convierte en" di ", etc.). El comando de visualización muestra texto en la pantalla. El comando de captura captura todos los errores (incluidos los errores de sintaxis), por lo que este programa se compila correctamente.
Supongo que si quieres ser exigente, el compilador ignora cualquier "/" adicional después de los primeros 3 consecutivos en una línea. Además, en el programa "brownies", técnicamente + "" es un comentario. Pero afirmo que todavía cuenta porque el comando de captura aún lo habría hecho irrelevante incluso si no fuera un comentario.
Gracias por leer mi larga explicación. Ahora para el código:
"¿Cuáles son los mejores postres para hornear en este momento?"
"Brownies"
"galletas"
fuente
Ksh (82 caracteres)
Pregunta de 35 caracteres, 5 caracteres en cada respuesta ⟹ longitud - carga útil = 37
Abuso de la sintaxis de definición de función más allá de POSIX. Dash y bash no pueden soportarlo, pero ksh (dominio público o ATT) sí.
No pasa nada notable, solo un poco de eco. No desperdicies, no quieras.
fuente
PowerShell 88
¿Cuál es mi equipo favorito? (30 caracteres, H (X) = 4.0314)
espada (5 caracteres, H (X) = 2.32193)
escudo (5 caracteres, H (X) = 2.58496)
En el programa completo, redirige las cadenas vacías a una variable inexistente
${x}
(las comillas para esas cadenas vacías se utilizan para formar una cadena sin sentido que se redirige a un bloque vacío o a una{}
variable inexistente$x
en las versiones pares / impares), luego imprime la pregunta y declara 2 variables no utilizadas (que se imprimen y colocan al lado de otra variable no utilizada$XXXXXX
o$XXXXXXX
en los diferentes casos).fuente
GolfScript, 51 bytes
Salida
Cómo funciona
.;
duplica la cadena y elimina la copia.""
empuja una cuerda vacía.thaeialdss
no está definido, por lo que no hace nada.Caracteres extraños
Salida
Cómo funciona
;
elimina la primera cadena de la pila.Incluso caracteres
Salida
Cómo funciona
Wihaetesdso
yon
son noops..
duplica la cadena vacía en la pila.fuente