Schreiben Sie eine Quine in Plain English

41

Schreiben Sie ein Quine , das aus echten englischen Wörtern besteht, die durch einzelne Leerzeichen getrennt sind. Ein "Wort" ist eine Zeichenfolge, die nur Klein- und Großbuchstaben enthält ( /[a-zA-Z]+/in Regex). Um "echt" zu sein, muss Ihr Wort vom offiziellen Scrabble-Wörterbuch erkannt werden .

Ich verwende das Scrabble-Wörterbuch, da es eine endgültige Antwort darauf gibt, was gültig ist und was nicht. Ein normales Wörterbuch enthält zu viele Grauzonen. Beachten Sie, dass "A" und "I" (ganz zu schweigen von "quine") keine gültigen Scrabble-Wörter sind.

Da das Schreiben eines Quines nur mit Buchstaben und Leerzeichen in den meisten Programmiersprachen nahezu unmöglich ist, haben Sie die Möglichkeit, die einzelnen Leerzeichen zwischen Wörtern durch ein Zeichen Ihrer Wahl zu ersetzen. Sie haben auch die Möglichkeit, Zeichen vor dem ersten und dem letzten Wort anzuhängen. Diese hinzugefügten Zeichen können beliebige Zeichen (einschließlich Zeilenumbrüche und Nicht-ASCII-Zeichen) außer Buchstaben (az, AZ) sein . Es gibt jedoch eine Strafe für das Hinzufügen (siehe Wertung).

Einzelheiten

  • Wie üblich können die Quines ihren eigenen Quellcode nicht lesen oder darauf zugreifen. (Ich würde sagen, dass der Q-Befehl von HQ9 + dies verletzt.)
  • Die Ausgabe sollte nach stdout oder einer ähnlichen Alternative erfolgen. Es erfolgt keine Eingabe.
  • Die Wörter müssen nicht richtig groß geschrieben werden. Sie können überall Groß- und Kleinschreibung haben. Die Reihenfolge der Wörter muss keinen Sinn ergeben.
  • In Ihrem Programm darf kein Wort mehr als dreimal verwendet werden. Anders großgeschriebene Wörter sind immer noch dasselbe Wort (z. B. 'DOG', 'dog' und 'dOg' sind alle dasselbe Wort).
  • Mit Sprachen wie PHP oder HTML - Code, können Katze aus ihrem Inhalt eine triviale Lücke betrachtet und ist nicht erlaubt.
  • Das Programm muss mindestens ein Wort enthalten.

Wertung

Ihre Punktzahl ergibt sich aus der Anzahl der "echten Wörter" in Ihrem Programm sowie den folgenden Strafen:

  • +1 für jedes Leerzeichen, das durch ein anderes Zeichen ersetzt wurde
  • n n für alle n Zeichen, die Sie vor dem ersten Wort hinzugefügt haben (ja, das ist n hoch n)
  • n n für alle n Zeichen, die Sie nach dem letzten Wort hinzugefügt haben

Zum Beispiel das Programm

We all LIKE PROgraMmING

würde 4 Punkte erzielen, weil es 4 Wörter enthält; Es wurden keine Zeichen hinzugefügt oder Leerzeichen ersetzt. Die Ausgabe wäre natürlich We all LIKE PROgraMmING.

Das Programm

!We@all LIKE#PROgraMmING- =

würde 4 + 2 + 1 + 27 = 34 erzielen; 4 für die Wörter, 2 für die ersetzten Leerzeichen, 1 für !die Vorderseite und 27 für die - =am Ende. Die Ausgabe wäre natürlich !We@all LIKE#PROgraMmING- =.

Die niedrigste Punktzahl gewinnt. Tiebreaker geht mit den wenigsten Strafpunkten zur Antwort. Wenn es immer noch einen Gleichstand gibt, gewinnt die am höchsten gewählte Antwort.

Calvins Hobbys
quelle
1
Existiert das Wörterbuch auch als Liste? Das wäre viel hilfreicher, als jedes Wort einzeln prüfen zu müssen.
Martin Ender
16
Shakespeare jemand?
Dwana
1
@JanDvorak Ich glaube nicht ... Die Tatsache, dass ich so etwas nicht schreiben kann, sollte andere Leute nicht dazu bringen, dies als eine schlechte Frage zu sehen. Es ist eine gültige, wenn auch ziemlich schwierige Herausforderung, nicht wahr?
Lorlork
7
Ich bin immer noch an einer Shakespeare-Lösung interessiert.
John Dvorak

Antworten:

25

Golfscript, 8 Wörter + 8 Symbole = 20 16 (3?)

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

Die Wörter sind nur ein Füllstoff, der Kern ist ein winziger quiner Kern:

{".~"}.~

Dupliziert und wertet eine Funktion aus, die nur die Anweisungen zum Duplizieren und Auswerten anfügt. Wenn eine Funktion gedruckt wird, wird sie automatisch mit einem String versehen. Dies ist die kleinste Quine, die etwas bewirkt .

Oder wir könnten einfach ein Funktionsliteral verwenden, das niemals ausgewertet wird. Aber es fühlt sich an wie Betrug ...

{whatever}
John Dvorak
quelle
Sie brauchen keine Verkettung. {a`b"x.y~z"c}x.y~z
Dennis
@Dennis Ich brauche in diesem Fall nicht einmal die Inspektion. Vielen Dank! Ich habe das Gefühl, ich muss den OP etwas fragen ...
John Dvorak
8
@Cephalopod Ich lese meinen eigenen Quellcode nicht. Ich schiebe einfach eine Funktion auf den Stack und die Laufzeit druckt sie für mich aus, glücklicherweise ohne die Tatsache zu kennen, dass der gesamte Quellcode ein Funktionsliteral ist.
John Dvorak
1
Ich denke, das {whatever}würde gegen die allzu triviale Regel verstoßen ("Die Verwendung von Sprachen wie PHP oder HTML, mit denen nur der Inhalt korrigiert werden kann, wird als triviale Lücke angesehen und ist nicht zulässig.")
Claudiu
1
@Claudiu das ist eine Regel gegen Sprachen, keine Lösungen. Darum habe ich gefragt.
John Dvorak
54

> <> , 25 Wörter + (22 + 1 1 + 1 1 ) extra = 57 49

Oh Gott, mein Gehirn.

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

Da die Regeln "Es gibt keine Eingabe." Angeben, müssen Sie eine leere Datei einfügen, damit dieses Programm funktioniert.

Oh und ja, brrist ein gültiges Scrabble-Wort, genau wie tsktskund pfft.

Erläuterung

Zuallererst sind die folgenden Wörter No-Ops:

deep clap beep flap leap clip blip flip

Dies hat zwei Gründe:

  • abcdeflPush-Nummern (10, 11, 12, 13, 14, 15 bzw. die Länge des Stapels). Darüber hinaus idrückt -1 , wenn EOF erfüllt ist, da es keine Eingabe ist.
  • Mit dem pBefehl werden drei Zeichen v,y,xund Stellen van der Position angezeigt x,y.

Ja, mit> <> können Sie den Quellcode im Handumdrehen ändern! Davon machen wir aber eigentlich keinen Gebrauch, da wir das nur pzum Knallen brauchen .

Wenn wir diese No-Ops loswerden, bekommen wir:

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

In ähnlicher Weise sind der laced appTeil von placed appleund der e alpTeil von apple alpauch No-Ops, und der rrvon brrdreht den Stapel einfach zweimal um, was wir auch entfernen können:

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

Endlich etwas, das aussieht wie ein normales> <> Programm! Die Idee ist, das Standard-Quine zu verwenden, das wie folgt funktioniert:

  • Die Initiale 'beginnt mit dem Parsen der Zeichenketten und drückt jeden getroffenen Buchstaben, bis wir einen anderen treffen'
  • Wir halten die Zeichen bis zum Ende der Zeile gedrückt. An diesem Punkt setzen wir den Befehlszeiger wieder auf den Anfang (da> <> toroidal ist).
  • Wir landen wieder auf der Initiale 'und hören auf , die Zeichenfolge zu analysieren. Das Ergebnis ist, dass wir jedes einzelne Zeichen im Programm (außer dem Anfangsbuchstaben ') auf den Stack verschoben haben.

Dann passiert folgendes:

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
quelle
"In Ihrem Programm darf kein Wort mehr als dreimal verwendet werden. Wörter mit unterschiedlichen Großbuchstaben sind immer noch dasselbe Wort (z. B. 'DOG', 'dog' und 'dOg' sind alle dasselbe Wort)." Wie auch immer, Sie bekommen eine Gegenstimme von mir, Sir.
Rorlork
@rcrmn Ich habe so viele Wörter hinzugefügt, dass ich diese Regel komplett vergessen habe! Behoben jetzt, obwohl ich vermeiden wollte, verwenden zu müssen i.
Sp3000,
1
Bis "pa", "la" und "be" sind gültige Wörter in Scrabble
John Dvorak
20
Wenn ich Ihr Programm vorlese, stelle ich mir vor, wie sich Lochkartencomputer angehört haben müssen.
Calvins Hobbys
10
Ich denke, Sie haben dieses Programm aus der Quelle des R2D2-Betriebssystems gestohlen.
aufgehört, sich
21

Huhn , 1 Wort

Normalerweise mag ich Esolangs nicht, aber dieser hier schien perfekt dafür zu sein. Ich denke, das ist eine wahre Quine:

chicken

Drückt 1 Huhn auf den Stapel. Der Stapel wird angezeigt.

Digitales Trauma
quelle
1
Diese (und die Julia-Antwort) sind trivial ungültig. Sie können sie hier behalten, aber keine Zusagen zur Annahme.
Calvins Hobbys
@ Calvin'sHobbies Im Interesse der Fairness werde ich dies gerne löschen, wenn Sie der Meinung sind, dass es zu lückenhaft ist - Ihr Anruf. Ich habe an einer Applescript-Lösung gearbeitet, war aber frustriert über die Regel "Kein Wort darf mehr als dreimal verwendet werden", die dies besonders schwierig zu machen scheint. Also habe ich stattdessen den billigen Trick gewählt :-)
Digital Trauma
@ Calvin'sHobbies: Ich bin der Autor der Julia-Einreichung. Ich spreche auch von DigitalTraumas Gefühl, meinen Beitrag zu entfernen, wenn Sie der Meinung sind, dass er zu grenzwertig ist. Ich habe auch R. Ist das auch zu nah?
Alex A.
@ Alex und DT: Es liegt an euch. Ich werde wahrscheinlich keine Antwort annehmen, aber es macht mir nichts aus, dass sie hier sind. Ich bin immer noch ein bisschen hin und her gerissen bei der R-Antwort, obwohl die Idee ziemlich mit der von Julia identisch ist ...
Calvins Hobbys
12

R, 2 Wörter + 1 Ersetzung + 1¹ Nachlauf = 4

Objekte, die nichts zugeordnet sind, werden nur auf stdout gedruckt. Da ein Ausdruck ein Objekt ist, gibt sich der folgende Code von selbst aus:

expression(puppy)

Bisherige Einreichung, 5 Punkte:

function(hello)hello
Alex A.
quelle
Sie haben sich von meiner betrügerischen 3-Punkte-Lösung inspirieren lassen, oder? ;-)
John Dvorak
1
@JanDvorak: Das habe ich vorher eigentlich nicht gesehen, aber jetzt ist es eine retrospektive Inspirationsquelle.
Alex A.
12

Python 2, 58 = 37 Wörter + 21 Satzzeichen

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

Mit einigen neuen Zeilen hinzugefügt:

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

Die drei Verwendungszwecke pro Wort machten das Schreiben schwierig. Ich wollte die Zeichenfolge mehr als dreimal mit dem gesamten Code verwenden, und jede Zeichenfolge musste mit if else and orOperatoren isoliert werden, von denen ich nur einen begrenzten Vorrat hatte.

Feersum
quelle
@ user23013 Hoppla, habe vergessen, es durch eine zufällige ID zu ersetzen.
Feersum
7

Julia, 1 Wort + 1¹ vor = 2

Julia hat Objekte, die als Symbole bezeichnet werden und mit einem vorangestellten Zeichen definiert sind :. Ähnlich wie bei meiner R-Lösung wird diese nur gedruckt, wenn sie gesendet wird.

:puppy
Alex A.
quelle
5

DOS-Befehlszeile, 10

& was unexpected at this time.

Fehler quine, es scheint nicht verboten

l4m2
quelle
1
Dieser Code "codiert" keinen Teil des Codes. Siehe unsere Definition für eine Quine
MilkyWay90
@ MilkyWay90 Mit der Definition wird &der gesamte Code codiert und die Ausgabe
gestoppt
Oh, können Sie die Antwort bearbeiten, damit ich meine Ablehnung entfernen kann
MilkyWay90
1
Interessante lückenlose Antwort ... ist &ein Wort?
Redwolf-Programme
@RedwolfPrograms nein, aber & es sind zwei Symbole. 5 (Wörter) + 1 (nachgestellte) + 2 ^ 2 führende = 10.
Draco18s
3

Runenverzauberungen , Ergebnis 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Probieren Sie es online!

Wörter: hot ox not knot(4)
Ersetzungen: 3 4 +(3)
Vorher: "(1)
Nachher: @(1)

Alle Charaktere GNOQWghtxzsind in Runic no-op (sowie Leerzeichen und Punkt, aber mehr Leerzeichen helfen nicht, Punkte zu erzielen). Einschließlich der Xund kfür die Funktionalität erforderlichen gibt dies die folgende verfügbare Wortliste:

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

Ich suchte nach den Bedürfnissen des Raums, in den es gehen sollte, und machte es lustig.

Wenn Sie alle NOP-Zeichen entfernen, erhalten Sie das folgende Ergebnis:

"3X4+k@

Probieren Sie es online!

Draco18s
quelle
0

huh? - 1 Wort + 1 ** 1/1 ^ 1 = 1 Zeichen nach dem Wort = 2 Gesamtpunktzahl.

Ouch!

Ouch! ist eine gültige quine in huh?

Führen Sie es wie pythuhn.py Ouch!folgt Ouch!aus: Das aktuelle Verzeichnis darf keine Datei enthalten .

MilkyWay90
quelle