Stellen Sie sich eine Frage in einfachem Englisch vor, deren Antwort zwei einigermaßen genaue (aber möglicherweise clevere) Wörter oder Ausdrücke enthält, die durch das Wort "und" getrennt werden können:
F: Was sind die beiden Seiten einer Münze? A: Köpfe und Schwänze
F: Was sind die besten Reisemöglichkeiten? A: Flugzeug und Jetpack
F: Warum ist ein Rabe wie ein Schreibtisch? A: Weil es in beiden ein 'b' und in keinem ein 'n' gibt
Tor
Schreiben Sie ein Programm, das bei normaler Ausführung eine solche Frage ausgibt.
Wenn jedes andere Zeichen aus dem Programm entfernt wird, beginnend mit dem zweiten Zeichen, und das Ergebnis erneut ausgeführt wird, sollte die Ausgabe links vom 'und' in der Antwort erfolgen.
Wenn jedes andere Zeichen aus dem Programm entfernt wird, beginnend mit dem ersten Zeichen, und das Ergebnis erneut ausgeführt wird, sollte die Ausgabe rechts vom 'und' in der Antwort erfolgen.
(Das 'und' selbst wird nicht ausgegeben.)
Beispiel
Wenn das Programm ist
A1B2C3D4E5F6G7H8I9
und seine Ausgabe ist
What are the two sides of a coin?
Dann ist der Ausgang der ABCDEFGHI
sollte sein heads
, und der Ausgang der 123456789
sollte tails
.
Regeln zu Fragen und Antworten
- Sie können meine Beispielfragen verwenden, aber ich ermutige Sie, Ihre eigenen zu erfinden.
- Die Frage und die beiden Antwortteile:
- müssen alle verschieden sein
- sollte allgemeines grammatikalisch bedeutungsvolles Englisch sein
- darf nur druckbares ASCII enthalten (hex 20 bis 7E)
- Im Idealfall wird die Frage großgeschrieben und unterbrochen (die Antworten müssen jedoch nicht sein).
- Die Frage muss mindestens 30 Zeichen lang sein und eine Entropie von mindestens 3,5 haben. (String eintippen, rechnen , letztes H suchen (X) .)
- Die beiden Antwortteile (ohne die
[space]and[space]
dazwischen liegenden) müssen jeweils mindestens 5 Zeichen mit einer Entropie über oder gleich 2 haben. - Das Wort 'und' kann in beiden Antwortteilen vorkommen.
Regeln zum Code
- Keiner der 3 Code-Schnipsel darf:
- Kommentare oder andere Elemente enthalten, die traditionell vom Compiler / Interpreter ignoriert werden (machen Sie sich keine Sorgen, wenn Sie ein oder zwei zusätzliche Semikolons einfügen, aber wenn Sie denken, dass es sich um einen Kommentar handelt, ist dies wahrscheinlich der Fall)
- Beenden Sie das Programm während der Ausführung
- Der Code kann beliebige Zeichen enthalten, einschließlich Unicode und nicht druckbarem ASCII.
- Es kann eine ungerade oder gerade Anzahl von Zeichen haben.
- Die Ausgabe erfolgt nach stdout oder in eine Datei oder was auch immer vernünftig erscheint. Es erfolgt keine Eingabe.
Wertung
Da ich keine golfenen Antworten ermutigen möchte, sondern noch kluge Antworten ermutigen möchte, wird die Wertung etwas zwischen Code-Golf und Beliebtheitswettbewerb sein:
Ergebnis = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)
Die höchste Punktzahl gewinnt.
(Verwenden Sie http://mothereff.in/byte-counter als Bytezähler.)
quelle
x0=00;;
. Große Herausforderung!00;
traditionell vom Compiler ignoriert ...It may have an odd or even number of characters
Gibt es eine Anzahl von Zeichen, die ungerade oder gerade sind?Antworten:
Javascript (148 Bytes)
Erstellt einige unsinnige Literale mit dem Nebeneffekt, dass eine Warnung * für die Frage erstellt wird. (Die Spaltungen verhalten sich ähnlich, erstellen jedoch Warnmeldungen * für jede Antwort).
Splits:
und
Frage:
What is the ideal breakfast???
Antworten:
bacon
undscrambled eggs
quelle
Brainfuck (437 Zeichen)
Ich muss gestehen, dass dies mein erstes Brainfuck-Programm ist, das tatsächlich etwas Sinnvolles tut. Das Programm ist stark für Systeme mit wenig Arbeitsspeicher optimiert, da es nur 4 Speicherplätze verwendet.
Frage:
What are the two main groups of trees?
Antworten:
conifers
undbroadleafs
Hauptschleife
Das Programm besteht aus einer Hauptschleife (die eigentlich keine Schleife ist, da alle [] -Blöcke nur einmal ausgeführt werden) und zwei Abschnitten.
Wenn Sie Abschnitte unabhängig testen möchten, müssen Sie die Hauptschleife berücksichtigen. Die Position 0 enthält -1 in der geraden Antwort, 1 in der ungeraden Antwort und 2 im Frageabschnitt.
Antwortbereich
Gerade Antwort (ungerade Anweisungen entfernt):
Ungerade Antwort (gerade Anweisungen entfernt):
Frage Abschnitt
Ich habe mich entschieden, Speicherplatz an einem separaten Ort zu speichern, da sich sein Wert drastisch von anderen Zeichen unterscheidet. Dadurch kann Platz einfach mit gedruckt werden
<.>
.Endgültiges Update
In meinem letzten Update habe ich Multiplikationen so optimiert, dass minimale Anweisungen verwendet werden. Die Aufnahme von 'l' in die zweite Zeichengruppe in den Abschnitt mit den ungeraden Antworten erwies sich als enorme Verbesserung. Einsparungen bei einzelnen Zeichen bei ungeraden Antworten bedeuteten im Grunde genommen zwei Zeichen aus dem gesamten Programm, da dadurch auch der Abstand zur geraden Antwort verringert wird. Ich habe auch ein paar unnötige Anweisungen von hier und da entfernt und glaube nicht, dass ich den Code weiter optimieren kann.
quelle
Charge - 84
Ganz stolz auf diesen
Volles Programm: Was sind zwei Seiten einer Münze? (Konsole)
Nur gleichmäßige: Köpfe ('c'-Datei)
Nur Gewinnchancen: Schwänze ('x' Datei)
In beiden Fällen wird die Fehlerausgabe in eine Datei umgeleitet.
quelle
Python -
10496 (gespielt: 76)Meine Lösung ist ziemlich einfach (und irgendwie lesbar):
Ausgabe:
Ehrlich gesagt, fand ich die Idee für die erste Zeile in der Antwort von bitpwner.
Noch besser lesbare Alternative: -
11310597Noch kürzere Alternative: -
8676quelle
zebra
. Und es passt gut in eine "Golf" -Version mit einer Frage von genau 30 Zeichen. So habe ich meine Lösung leicht modifiziert. :)Rebmu : 79 Zeichen OR (37 + Länge (p1) + 2 * max (Länge (p2), Länge (p3))
Zuerst gebe ich eine 79-Zeichen-Lösung, in der gefragt wird, welche Sprachen Sie lernen müssen. (Entropie 4.0, 30 Buchstaben nicht enthalten
?
) und bietet Ihnen die Vorschläge von Rebol und [Red] :Eine einzigartige Taktik, die hier nicht in anderen Sprachen verfügbar ist, beruht auf der Tatsache, dass geschweifte Klammern ein asymmetrischer String-Begrenzer sind, der legal verschachtelt werden kann:
Auf diese Weise konnte ich eine verallgemeinerte Lösung erstellen, die mühelos mit jedem Programm funktioniert, das keine Escape-Sequenzen verwendet. Die 79-Zeichen-Version war einfach genug, um eine Verknüpfung herzustellen, aber um eine beliebige Programmquelle für die Programme p2 und p3 zu enthalten, benötigen Sie die vollständige Vorlage. Hätten wir das benutzt, wären es 87 Zeichen gewesen:
Das Muster für diese allgemeine Form ist , dass , wenn Sie drei Quelltexte von aufeinanderfolgenden Zeichen variabler Länge haben (wir verwenden ein Beispiel wie
AAA
,BBBBB
,CCCCCCC
) Sie sie als etwas entlang der Linien von codieren:(Hinweis: Obwohl dieses Muster bei Programmen, die Escape-Zeichen verwenden, nicht funktioniert, ist dies kein schwerwiegender Fehler. Um eine nicht passende linke Klammer in einer durch Klammern begrenzten Zeichenfolge zu erhalten, müssen
{Foo ^{ Bar}
Sie Folgendes tun: die alternative"Foo { Bar"
Saitennotation und kombinierte Fälle können durch Zusammenkleben einer Mischung aus nicht entkappten Saiten verwaltet werden.)Also ... wie wäre es mit einem Beispiel? Sobald die allgemeine Form verfügbar war, wurde dieses 573-Zeichen-Programm in nur wenigen Minuten aus 3 früheren Code-Golflösungen zusammengestellt:
Wenn Sie das Programm nicht ändern, handelt es sich um die Hourglass-Lösung .
Wenn Sie nur die ungeraden Zeichen nehmen und ausführen, werden die 99 Flaschen Biergedicht gedruckt
Nur die geraden Zeichen führen eine kleine Umrechnung der römischen Zahlen für Sie durch.
Wenn jemand versuchen möchte, dieses Programm in der Sprache seiner Wahl zu schreiben, und glaubt, dass er 573 schlagen kann, lass es mich wissen. Ich werde Ihnen eine Menge Reputation einräumen, wenn Sie das tun - vorausgesetzt, Ihre Sprache ist nicht Rebmu, weil ich weiß, dass diese Programme nicht minimal sind. :-)
Dieser "verschwenderische" Abstand, den Sie am Ende erhalten, tritt auf, wenn p2 und p3 unausgeglichen sind. In diesem Fall sind jedoch alle drei Programme unterschiedlich groß, sodass für p2 / p3 keine besonders gute Paarung ausgewählt werden kann. (Ich habe diese ausgewählt, weil es keine externen Daten als Eingabe gab, wie zum Beispiel ein Labyrinth oder was auch immer, nicht, dass sie von ähnlicher Länge waren. Ich hätte zwar neue Programme schreiben können, die optimaler waren, aber ich habe genug Zeit aufgewendet und es ging darum Sie müssen keine neuen Programme schreiben ...)
Wie es funktioniert
(Hinweis: Ich habe mit einem "kreativeren" Ansatz begonnen, der nicht so geradlinig war, aber interessanter aussah. Ich habe ihn auf einen Eintrag in meinem Blog verschoben , da die Beschreibung dieses Ansatzes bereits lang ist.)
Ein Schlüssel hier ist der Trick "Eval Code as a String" wie bei einigen anderen Einträgen, er hat nur den Trumpf des asymmetrischen Zeichenkettenbegrenzers. Ich beginne mit der Erläuterung der Funktionsweise des 80-Zeichen-Falls.
Hier ist das "ganze" Programm, das die Leerzeichen an die Lesbarkeit dieses Falls anpasst:
Hier wird DD zu einem Synonym für DO (aka "eval"). Der Trick ist jedoch, dass beim Ausführen der halbierten Programme Code ausgeführt wird, dessen einzige Auswirkung darin besteht, D für das harmlose Literal 1 zu definieren.
Hier ist, was der Odd-Chars-Code macht, Leerzeichen wieder angepasst:
Und hier ist der Even-Chars-Code:
Es ist tatsächlich so, dass für das nicht halbierte Programm der
dd {dd {(arbitrary code)qt}}
Code ausgeführt wird, den Sie möchten. Anstelle von nur einem Aufruf müssen jedoch zwei Aufrufe ausgewertet werden. Das liegt daran, dass die geschachtelten Klammern im Interleaved-Code zwar hervorragend funktionieren, aber das Bewertungsverhalten von DO durcheinander bringen. Weil:Lädt den String als Programm, aber das Programm ist nur die String-Konstante
{print "Hello"}
. Daher benutze ich hier den Trick, meine DD (mit demselben Funktionswert wie DO) zu nehmen und zweimal auszuführen. Die Halver kauen an den verschiedenen Teilen der Saite, aber sie kauen nicht beide, wenn die Gerade / Ungerade für den Inhalt richtig ist, und weil das, was nach der Halbierung außerhalb der Saite übrig bleibt, nur die integrale Konstante ist, sindd
sie harmlos.Mit diesem Muster ist es keine Herausforderung, das Programmverhalten zu schreiben, wenn es nicht halbiert ist - Sie können alles eingeben, solange die Zeichenlänge des Codes gerade ist (ungerade, wenn Sie das QT zählen, was QUIT ist). Wenn Sie die gerade Zahl von einer ungeraden Zahl erhalten möchten, geben Sie ein Leerzeichen ein (in meiner obigen Formel steht also für ungerade Programmlängen von p1 eine +1) . Der Trick scheint, diesen verschachtelten Code danach zu schreiben, der den Parser passieren muss, wenn er nicht halbiert wird. (Es wird wegen des QT nicht ausgeführt, aber es muss LOADable sein, bevor es ausgeführt wird.)
Dieser Fall ist trivial;
pp
Lädt fine als Symbol, obwohl es undefiniert ist, und wirdp
in jedem halben Programm zum Drucken aufgeteilt. Aber wir können einen anderen Trick machen, indem wir wieder ein String-Literal verwenden. Die halbierten Programme haben immer noch die normale DO-Definition, daher hätten wir auch sagen können:Wenn der Parser im ganzen Fall nur das symbolische Wort
ddoo
und ein String-Literal aufnimmt, können wir zwei beliebige Programme in dieses String-Literal einbetten und den Parser nicht verärgern. Die halbierten Versionen werden nur sagen:..und...
Wie gesagt, dieser Teil kommt anderen Lösungen bekannt vor, die Programme als Zeichenfolgen behandeln und bewerten. Wenn die Programme, die Sie packen, im Wettbewerb verschachtelte Zeichenfolgen enthalten, werden diese mit einem Schraubenschlüssel belegt. Hier sind die einzigen Dinge, die Sie in Schwierigkeiten bringen, die Flucht mit carets (
^
) ..., die leicht umgangen werden können.(Kleiner Hinweis zum Schummeln: Ich habe QT für "QUIT" als Antwort auf dieses Problem hinzugefügt. Eigentlich hatte ich die Abkürzung für "quit" vorher absichtlich entfernt ... weil ich dachte, es sei nur gut für die Konsolenbenutzung und nur für das Aufnehmen der Leerzeichen mit zwei Buchstaben, wenn es nicht in einer REPL enthalten ist. Ich füge es hinzu, weil ich sehe, dass ich mich geirrt habe, und füge es nicht speziell für diesen Fall hinzu. Vor dieser Änderung wären es jedoch 2 Zeichen länger gewesen. Als ich die Lösung zum ersten Mal veröffentlichte, gab es einen Fehler in Rebmu, der verhinderte, dass sie tatsächlich funktionierte, obwohl sie hätte funktionieren müssen ... jetzt funktioniert sie.)
quelle
Perl
186139135Was sind die besten Dinge im Leben?
vernichte deine Feinde
höre die Wehklagen ihrer Frauen
Weniger lange Antworten verwenden:
Perl
7972What are my preferred weapons?
(30 Byte, H (X) = 3,76)swords
(H (X) = 2,25) undmaces
(H (X) = 2,32)quelle
Python -
139103What are the ingredients for success?
->Unicorns
undRainbows
Prüfung:
Alte Version:
quelle
Haskell, 117
Um mit dem Funktionsparadigma von Haskell arbeiten zu können, muss alles einer Variablen zugewiesen oder mit Zeilen-
--
oder Blockkommentaren{- -}
auskommentiert werden. Unsinnsfunktionen ohne Zuweisung laufen zu lassen ist out. Um gesund zu bleiben, habe ich die Fragen und Antworten so kurz wie möglich gehalten.Frage: Wovon kann ich nicht genug haben?
"Schuhe" und "Kuchen":
NB Das Erscheinen von
crank
unter "Wovon kann ich nicht genug haben?" sollte nicht als sinnvoll angesehen werden.quelle
Wa
steht im Blockkommentar, also nein, es ist eigentlich nicht anpttLWa.Lisp (76 Zeichen)
31-stellige Frage, 6 Zeichen in jeder Antwort ⟹ Länge - Nutzlast = 33
Ich wollte "Was ist Ihre Lieblingsfarbe?" Verwenden, erreichte aber selbst in britischer Schreibweise gerade das Minimum von 30 Zeichen für die Fragenlänge und benötigte eine Frage mit ungerader Länge, um die doppelten Anführungszeichen auszugleichen.
Sie sagen, dass Common Lisp wortreich ist, aber Sie würden nicht denken, dass dieser Einzeiler so geht. Es ist nicht einmal sehr verschleiert, Sie müssen nur ein wenig Leerzeichen einfügen, um zu sehen, was in Anführungszeichen steht und was ausgeführt wird.
Viele Lisp-Implementierungen rufen die Farben hervor, weil sie Symbole in Großbuchstaben umwandeln. Wenn Sie das stört, wechseln Sie
''fmuacghesnitaa
zu""fmuacghesnitaa""
.quelle
STATA 295
Frage: Was sind momentan die besten Desserts? Antwort: Brownies und Kekse.
Erläuterung: Befehle in STATA werden durch neue Zeilen begrenzt.
Während "//" ein Kommentar in STATA ist, weist "///" den Compiler an, mit der nächsten Zeile fortzufahren und deren Inhalt in den aktuellen Befehl aufzunehmen.
Befehle in STATA können oft bis zu dem Punkt abgekürzt werden, an dem sie als eindeutig genug angesehen werden, um differenzierbar zu sein. Anzeige "wird zu" di "usw.). Der Anzeigebefehl zeigt Text auf dem Bildschirm an. Der Befehl capture erfasst alle Fehler (einschließlich Syntaxfehler), weshalb dieses Programm ordnungsgemäß kompiliert wird.
Ich denke, wenn Sie wählerisch werden möchten, werden alle zusätzlichen "/" nach den ersten 3 aufeinanderfolgenden in einer Zeile vom Compiler ignoriert. Auch im "Brownies" -Programm ist technisch + "" ein Kommentar. Aber ich behaupte, dass es immer noch zählt, weil der Erfassungsbefehl es immer noch irrelevant gemacht hätte, selbst wenn es kein Kommentar gewesen wäre.
Danke, dass Sie meine wirklich lange Erklärung gelesen haben. Nun zum Code:
"Was sind die besten Desserts zum Backen?"
"Brownies"
"Kekse"
quelle
Ksh (82 Zeichen)
35-stellige Frage, 5 Zeichen in jeder Antwort ⟹ Länge - Nutzlast = 37
Ich missbrauche die Funktionsdefinitionssyntax jenseits von POSIX. Dash und Bash können das nicht, aber ksh (public domain oder ATT) kann es.
Nichts Besonderes, nur ein bisschen Echo. Verschwenden Sie nicht, wollen Sie nicht.
quelle
PowerShell 88
Was ist meine Lieblingsausrüstung? (30 Zeichen, H (X) = 4,0314)
Schwert (5 Zeichen, H (X) = 2.32193)
Schild (5 Zeichen, H (X) = 2,58496)
Im vollständigen Programm werden leere Zeichenfolgen in eine nicht vorhandene Variable umgeleitet
${x}
(die Anführungszeichen für diese leeren Zeichenfolgen werden verwendet, um eine unsinnige Zeichenfolge zu bilden, die entweder in einen leeren Block{}
oder in eine nicht vorhandene Variable$x
in den geraden / ungeraden Versionen umgeleitet wird ). Anschließend werden die Fragen und ausgegeben deklariert 2 nicht verwendete Variablen (die gedruckt und neben einer anderen nicht verwendeten Variablen$XXXXXX
oder$XXXXXXX
in den verschiedenen Fällen platziert werden).quelle
GolfScript, 51 Bytes
Ausgabe
Wie es funktioniert
.;
dupliziert den String und löscht die Kopie.""
drückt eine leere Zeichenfolge.thaeialdss
ist undefiniert, tut also nichts.Seltsame Zeichen
Ausgabe
Wie es funktioniert
;
löscht den ersten String vom Stack.Sogar Zeichen
Ausgabe
Wie es funktioniert
Wihaetesdso
undon
sind Noops..
dupliziert die leere Zeichenfolge auf dem Stapel.quelle