Escribir una cita en inglés sencillo

41

Escriba un quine que consista en palabras reales en inglés separadas por espacios individuales. Una "palabra" se define como una cadena que contiene solo letras minúsculas y mayúsculas ( /[a-zA-Z]+/en expresiones regulares). Para ser "real", su palabra debe ser reconocida por el diccionario oficial de Scrabble .

Estoy usando el diccionario Scrabble ya que da una respuesta definitiva sobre qué es y qué no es válido. Hay demasiadas áreas grises con un diccionario normal. Tenga en cuenta que "A" e "I" (sin mencionar "quine") no son palabras válidas de scrabble.

Dado que escribir un quine solo usando letras y espacios es casi imposible en la mayoría de los lenguajes de programación, tiene la opción de reemplazar los espacios individuales entre palabras con un carácter de su elección. También tiene la opción de agregar caracteres al frente de la primera palabra y al final de la última palabra. Estos caracteres agregados pueden ser cualquier cosa (incluidas líneas nuevas y no ASCII) excepto letras (az, AZ) . Sin embargo, hay una penalización por agregarlos (ver Puntuación).

Detalles

  • Como de costumbre, los quines pueden no leer o acceder a su propio código fuente. (Diría que el comando Q de HQ9 + viola esto).
  • La salida debería ir a stdout o una alternativa similar. No hay entrada
  • Las palabras no necesitan estar en mayúscula correctamente. Pueden tener mayúsculas y minúsculas en cualquier lugar. La secuencia de palabras no necesita tener ningún sentido.
  • Ninguna palabra se puede usar más de 3 veces en su programa. Las palabras con mayúsculas diferentes siguen siendo la misma palabra (por ejemplo, 'PERRO', 'perro' y 'dOg' son todas la misma palabra).
  • El uso de lenguajes como PHP o HTML que pueden capturar sus contenidos se considera una laguna trivial y no está permitido.
  • El programa debe contener al menos una palabra.

Tanteo

Su puntaje es el número de "palabras reales" en su programa más estas penalizaciones:

  • +1 por cada espacio que fue reemplazado por otro personaje
  • n n por cada n caracteres que agregaste antes de la primera palabra (sí, eso es n al poder n)
  • n n por cada n caracteres que agregaste después de la última palabra

Por ejemplo, el programa

We all LIKE PROgraMmING

puntuaría 4 porque contiene 4 palabras; no se agregaron caracteres ni se reemplazaron espacios. Su salida, por supuesto, sería We all LIKE PROgraMmING.

El programa

!We@all LIKE#PROgraMmING- =

puntuaría 4 + 2 + 1 + 27 = 34; 4 para las palabras, 2 para los espacios reemplazados, 1 para !el frente y 27 para - =el final. Su salida, por supuesto, sería !We@all LIKE#PROgraMmING- =.

El puntaje más bajo gana. Tiebreaker va a la respuesta con la menor cantidad de puntos de penalización. Si todavía hay un empate, gana la respuesta más votada.

Pasatiempos de Calvin
fuente
1
¿Ese diccionario también existe como una lista? Sería mucho más útil para navegar que tener que revisar cada palabra individualmente.
Martin Ender
16
Shakespeare alguien?
dwana
1
@ JanDvorak No lo creo ... El hecho de que no pueda escribir algo como esto no debería hacer que otras personas vean esto como una mala pregunta, es un desafío válido, aunque bastante difícil, ¿no?
rorlork
77
Todavía estoy interesado en una solución de Shakespeare.
John Dvorak

Respuestas:

25

golfscript, 8 palabras + 8 símbolos = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

Las palabras son solo un relleno, el núcleo es un pequeño núcleo de quine:

{".~"}.~

Duplica y evalúa una función que solo agrega las instrucciones para duplicarse y evaluarse a sí misma. Cuando se imprime una función, se encadena automáticamente. Esta es la quine más pequeña que hace algo .

O podríamos usar una función literal que nunca se evalúa. Pero se siente como hacer trampa ...

{whatever}
John Dvorak
fuente
No necesitas concatenación. {a`b"x.y~z"c}x.y~z
Dennis
@ Dennis Ni siquiera necesito la inspección en ese caso. ¡Gracias! Siento que necesito preguntarle al OP algo ...
John Dvorak
8
@Cephalopod No leo mi propio código fuente. Solo estoy insertando una función en la pila y el tiempo de ejecución la imprime, felizmente inconsciente del hecho de que la totalidad de mi código fuente es una función literal.
John Dvorak
1
Creo que la {whatever}violación de la norma demasiado trivial ( "Uso de lenguajes como PHP o HTML que se acaba de gato fuera su contenido se considera una laguna trivial y no está permitido.")
Claudiu
1
@Claudiu es una regla contra los idiomas, no las soluciones. Por eso pregunté.
John Dvorak
54

> <> , 25 palabras + (22 + 1 1 + 1 1 ) extra = 57 49

Oh dios, mi cerebro.

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Dado que las reglas establecen "No hay entrada", para que este programa funcione, deberá canalizar en un archivo vacío.

Ah y sí, brres una palabra Scrabble válida, como son tsktsky pfft.

Explicación

En primer lugar, las siguientes palabras son no operativas:

deep clap beep flap leap clip blip flip

Esto es por dos razones:

  • abcdeflnúmeros de inserción (10, 11, 12, 13, 14, 15 y la longitud de la pila, respectivamente). Además, iempuja -1 si se cumple EOF, ya que no hay entrada.
  • El pcomando muestra tres caracteres v,y,xy lugares ven la posición x,y.

Sí,> <> te permite modificar el código fuente sobre la marcha. Sin embargo, realmente no hacemos uso de eso, ya que solo necesitamos el ppopping.

Si nos deshacemos de estos no-ops, obtenemos:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

De manera similar, la laced appparte de placed appley la e alpparte de apple alptambién son no-ops, y la rrde brrsimplemente invierte la pila dos veces, lo que también podemos eliminar:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Finalmente, ¡algo que parece un programa> <> normal! La idea es utilizar el estándar> <> quine, que funciona así:

  • La inicialización 'inicia el análisis de cadenas, empujando cada char hasta que lleguemos a otro'
  • Seguimos presionando caracteres hasta el final de la línea, momento en el cual ajustamos el puntero de instrucción de regreso al inicio (ya que> <> es toroidal)
  • Aterrizamos de 'nuevo en la inicial y detenemos el análisis de cadenas. El resultado es que hemos introducido todos los caracteres del programa (excepto el inicial ') en la pila.

Entonces sucede lo siguiente:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop
Sp3000
fuente
"Ninguna palabra se puede usar más de 3 veces en su programa. Las palabras con mayúsculas diferentes siguen siendo la misma palabra (por ejemplo, 'PERRO', 'perro' y 'dOg' son la misma palabra". De todos modos, usted recibe un voto positivo de mi parte, señor.
rorlork
@rcrmn ¡Seguí agregando tantas palabras que olvidé por completo esa regla! Solucionado ahora, aunque quería evitar tener que usar i.
Sp3000
1
TIL "pa", "la" y "be" son palabras válidas en Scrabble
John Dvorak
20
Leer su programa en voz alta me hace imaginar cómo sonarían las computadoras con tarjetas perforadas.
Aficiones de Calvin
10
Creo que has robado ese programa de la fuente del sistema operativo R2D2.
dejó de girar en contra del reloj
21

Pollo , 1 palabra

Normalmente no estoy en esolangs, pero este parecía perfecto para esto. Creo que esta es una verdadera quine:

chicken

Empuja 1 pollo a la pila. Luego se muestra la pila.

Trauma digital
fuente
1
Esto (y la respuesta de Julia) bordean trivialmente inválido. Puede mantenerlos aquí, pero no promete aceptarlos.
Hobbies de Calvin
@ Calvin'sHobbies En aras de la equidad, lo eliminaré con mucho gusto si considera que es demasiado legal: su llamada. Estaba trabajando en una solución de applecript, pero me sentí frustrado por la regla "No se puede usar ninguna palabra más de 3 veces" que parece hacer que esto sea especialmente difícil. Así que fui por el truco barato :-)
Digital Trauma
@ Calvin'sHobbies: Soy el autor de la presentación de Julia. Lo hago con el sentimiento de DigitalTrauma de eliminar mi publicación si crees que está demasiado al límite. También hice R. ¿Está demasiado cerca también?
Alex A.
@Alex y DT: Depende de ustedes, chicos. Probablemente no acepte ninguna de las respuestas, pero no me importa que estén aquí. Todavía estoy un poco desgarrado por la respuesta R, aunque la idea es más o menos la misma que la de Julia ...
Calvin's Hobbies
12

R, 2 palabras + 1 reemplazo + 1¹ final = 4

Los objetos que no están asignados a nada solo se imprimen en stdout. Como una expresión es un objeto, se imprime el siguiente código:

expression(puppy)

Presentación previa, 5 puntos:

function(hello)hello
Alex A.
fuente
Te inspiró mi solución de 3 puntos, ¿no? ;-)
John Dvorak
1
@ JanDvorak: En realidad no lo vi antes de publicar esto, pero ahora es una fuente de inspiración retrospectiva.
Alex A.
12

Python 2, 58 = 37 palabras + 21 signos de puntuación

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Con algunas nuevas líneas agregadas:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

La restricción de tres usos por palabra fue lo que hizo que este fuera difícil de escribir. Quería usar la cadena con todo el código más de 3 veces, y cada cadena tenía que aislarse con if else and oroperadores de los que solo tenía un suministro limitado.

Feersum
fuente
@ user23013 ¡Vaya! Olvidé reemplazarlo con un identificador aleatorio.
feersum
7

Julia, 1 palabra + 1¹ precedente = 2

Julia tiene objetos llamados símbolos que se definen usando un precedente :. Al igual que mi solución R, esto solo se imprime cuando se envía.

:puppy
Alex A.
fuente
5

Línea de comando DOS, 10

& was unexpected at this time.

Error quine, no prohibido parece

l4m2
fuente
1
Este código no "codifica" ninguna parte del código. Vea nuestra definición de quine
MilkyWay90
@ MilkyWay90 El uso de la definición &codifica todo el código y deja de
salir
Oh, ¿puedes editar la respuesta para que pueda eliminar mi voto negativo?
MilkyWay90
1
Interesante respuesta loopholey ... ¿es &una palabra, sin embargo?
Programas Redwolf
@RedwolfPrograms no, pero & son dos símbolos. 5 (palabras) + 1 (final) + 2 ^ 2
iniciales
3

Encantamientos rúnicos , puntaje 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Pruébalo en línea!

Palabras: hot ox not knot(4)
Reemplazos: 3 4 +(3)
Antes: "(1)
Después: @(1)

Todos los personajes GNOQWghtxzson no-op en Runic (así como espacio y punto, pero más espacios no ayudan a puntuar). Incluyendo el Xy krequerido para la funcionalidad, esto da la siguiente lista de palabras disponibles:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

Elegí la cereza en función de las necesidades del espacio en el que estaba entrando y haciendo que parezca divertido.

Al eliminar todos los caracteres NOP se obtiene la siguiente quine:

"3X4+k@

Pruébalo en línea!

Draco18s
fuente
0

eh? - 1 palabra + 1 ** 1/1 ^ 1 = 1 carácter después de la palabra = 2 puntuación total.

Ouch!

Ouch! es una quine válida en eh?

Ejecútelo como pythuhn.py Ouch!, y no puede haber un archivo nombrado Ouch!en el directorio actual.

MilkyWay90
fuente