Advertencia: Este desafío contiene algunos spoilers leves para The Secret of Monkey Island.
Hacia el final del juego, una cabeza de navegante mágicamente preservada te guía a través de las catacumbas:
Necesitas su collar de globo ocular, pero la Cabeza es reacia a dártelo. Una forma de conseguirlo es simplemente seguir rogando:
Guybrush: mayo por favor tener ese collar?
Jefe: No, pero gracias por preguntar tan cortésmente.
Guybrush: Oh, vamos, ¿por favor?
Cabeza: Puedes rogar todo lo que quieras, pero no puedes tenerlo.
Guybrush: ¿ Bastante por favor?
Cabeza: Puedes rogar todo lo que quieras, pero no puedes tenerlo.
Guybrush: bastante BONITO por favor?
Cabeza: Puedes rogar todo lo que quieras, pero no puedes tenerlo.
Guybrush: ¿ Bastante por favor con azúcar encima?
Cabeza: Oh, está bien, bebé grande. Tu puedes tenerlo. Oye, ¿de qué sirve un collar si no tienes hombros?
El reto
Escriba un programa completo que imprima el diálogo anterior. El problema es que cada vez que se llama al programa, solo debe imprimir dos líneas (una suplica de Guybrush y la respuesta del Jefe). Por ejemplo, si su envío está escrito en Python, el uso debería verse así:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
Invocar el programa más de 5 veces puede dar lugar a un comportamiento indefinido, por lo que puede realizar un bucle, seguir imprimiendo las dos últimas líneas o incluso el programa podría romperse después de la quinta invocación.
Puede escribir en un archivo en el directorio de trabajo, o puede modificar el código fuente del programa en sí para realizar un seguimiento de las invocaciones. En el último caso, su programa no debe depender de su propio nombre de archivo. (En el primer caso, puede suponer que el nombre de archivo de su programa no entrará en conflicto con ningún nombre de archivo del que dependa su programa).
No debe asumir un entorno similar a REPL o que ningún dato se mantenga en RAM entre invocaciones. Por ejemplo, si responde en Mathematica, debe asumir que dejé el núcleo entre invocaciones.
Este es el código de golf, gana la respuesta más corta (en bytes). Si su programa depende de que existan archivos adicionales antes de la primera invocación , agregue su nombre y contenido a su recuento de bytes.
fuente
node please.js
5 salidas diferentes.Respuestas:
Python, 224 + 97 + 1 = 322 caracteres
La solución más sencilla para comenzar a todos. ¡Gracias a gnibbler por ayudarme a reducir 18 bytes!
Requiere que el archivo
z
esté presente en el mismo directorio (+1 para nombre de archivo, +224 para tamaño de archivo):Puede generar
z
con lo siguiente:Salida:
fuente
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
ahora puede dividir|
y simplementeprint D[n]
Lisp común (SBCL): 659 caracteres
Explicaciones
format
connil
).Esta no será la presentación más corta, pero pensé que era un buen enfoque para el problema.
Primera invocación
Invocaciones posteriores
fuente
C # - 593 + 1 + 1 caracteres (595)
Ediciones: actualizado con sugerencias de Martin y varias otras optimizaciones
Primero +1 es un nombre de archivo. El segundo +1 es el contenido de ese archivo. Sin todos los espacios y saltos de línea eliminados para que pueda leerlo:
Explicación
Se basa en un archivo de texto llamado "x" para estar presente en el directorio. Inicialmente debe contener un cero y se utiliza para almacenar el progreso.
El programa extrae elementos relevantes de la matriz de cadenas de acuerdo con el progreso y escribe el progreso al final. Algunas líneas se reutilizan para acortar la longitud, por lo tanto, la lógica de selección de índice para la selección
h+b[(a+5)/6*2+1]
de respuestas.Salida
Mi primer código de golf, probablemente no sea el más corto posible en C #, pero bueno, ¡Monkey Island no pudo resistirse!
Código eliminado
fuente
a<1?1:a<8?3:9
, si C # admite enteros verdaderos, entonces tambiéna?a<8?3:9:1
. Pero probablemente incluso pueda utilizar la división de enteros y hacer(a+5)/6*2
y mover la cadena final de la cabeza para reemplazar la primera vacía (índice 5). Y prueba cosas comousing s=System.String;
. (Ah, y es posible que pueda omitir el espacio de nombres, o incluso usar el espacioSystem
de nombres para evitarSystem
todo el uso.)JS,
488473Refrescando 5 veces la página que contiene este código muestra los 5 cuadros de diálogo diferentes.
Manifestación:
http://c99.nl/f/212197.html
fuente
Perl - 356 bytes
Un enfoque de auto-modificación, con sustituciones de cadenas comunes.
Uso de muestra:
fuente