Dichotomien programmieren (wörtlich)

33

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 ABCDEFGHIsollte sein heads, und der Ausgang der 123456789sollte 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.)

Calvins Hobbys
quelle
6
Gah, das ist so schwer in einer "normalen" Sprache wie JavaScript zu tun. Das weiteste, was ich bekommen kann, ist so etwas wie x0=00;;. Große Herausforderung!
Türklinke
@Doorknob Entschuldigung, Ihr Boot zu entleeren, wird aber 00;traditionell vom Compiler ignoriert ...
John Dvorak
2
Ernsthaft ... "Apfel" hat eine Shannon-Entropie von 1,92 ???
John Dvorak
4
It may have an odd or even number of charactersGibt es eine Anzahl von Zeichen, die ungerade oder gerade sind?
Snack
1
@ Snack Damit wissen die Leute, dass die beiden Teile des Antwortcodes nicht dieselbe Länge haben müssen.
Calvins Hobbys

Antworten:

55

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).

"';"+alert( 'What is the ideal breakfast???')+/ " ;apl=e"rbta(k"esnc"r.armebplleadc ee g g s(" ) + " \/)k;e"/+ ",t'hceo 'c)a;kye= ailse rat (lpi)e "

Splits:

";+lr('hti h da rafs??)/";p="baken".replace   (    /ke/ ,'co');y=alert(p) 

und

'"aet Wa steielbekat?'+  alert("scrambled eggs")+"\);"+"the cake is a lie"

 

Frage: What is the ideal breakfast???

Antworten: baconundscrambled eggs

es1024
quelle
4
Das ist die Qualität, die ich an dieser Seite liebe! Wo sonst kann man Leute finden, die das können?
Cruncher
1
Ich habe (vielleicht offensichtlich) an Improvisationskursen teilgenommen und ich gebe Ihnen hier +1 für den Humorwert. Aber wie alle Ingenieure der Aperturwissenschaft wissen, sind wir Praktiker der Wissenschaft ... der lustigste Teil ist also , eine saubere Waffe herzustellen . :-)
Dr. Rebmu
29

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: conifersundbroadleafs

-+[[++++++++++++++++++++++[+>++++++[+>++++++++++++<>-+]+>+-+.++++++<+<+-+]+>+++++.+>++.+-..------.-<--..-+-+-+..->.-+-+-+.+<+++.+-+-+-+-+.++++.+++.+<.+>-+++-+++-+++-++.->]]++-+[[+-+-[[+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++.+++++++++++++++++.-------.>.<<.>.>--.<++++.<.>>++.<+++.---.<.>>.+++.<++++++++++.<.>--.------------.++++++++.+++++.<.>-------.>-----.<++++++++.>+++.<+.>--.<<.>-.---------.<.>>+.--.<-..>+.<<[<++>-]<-.<]]]]

Hauptschleife

Das Programm besteht aus einer Hauptschleife (die eigentlich keine Schleife ist, da alle [] -Blöcke nur einmal ausgeführt werden) und zwei Abschnitten.

-+[[        // let answers enter
            * SNIP interleaved answer sections *
]]
++-+[[      // let odd answer and question enter
    +-+-[[  // let question enter
            * SNIP question section *
    ]]
]]

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):

// location 0 contains minus 1 from main
// set location 1 = 10 * 10 minus 1 = 99 (c)
+++++++++++[>++++++++++<-]>-. // c
++++++++++++.-.     // on
-----.---.          // if
-.+++++++++++++.+.  // ers
<                   // goto 0 (which contains 0)
+-+-+-+-+-          // padding to match length of odd answer

Ungerade Antwort (gerade Anweisungen entfernt):

// location 0 contains 1 from main
// set location 1 = 16 * 6 plus 2 = 98 (b)  location used for characters below 'l'
// set location 2 = 16 * 7 plus 2 = 114 (r) location used for 'l' and above
+++++++++++++++[>++++++>+++++++<<-]>++.>++. // br
---.<               // o
-.+++.              // ad
>---.<              // l
+.----.+++++.       // eaf
>+++++++.           // s
>                   // goto 3 (which contains 0)

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 <.>.

// location 0 contains 2 from main
// set location 1 = 17 * 2 minus 2 = 32 (space)
// set location 2 = 17 * 5 plus 2 = 87 (W)   location used for characters below 'r'
// set location 3 = 17 * 7 minus 3 = 116 (t) location used for 'r' and above
+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++. // W
+++++++++++++++++.  // h
-------.>.<         // at
<.>                 // (space)
.>--.<++++.         // are
<.>                 // (space)
>++.<+++.---.       // the
<.>                 // (space)
>.+++.<++++++++++.  // two
<.>                 // (space)
--.------------.    // ma
++++++++.+++++.     // in
<.>                 // (space)
-------.>-----.     // gr
<++++++++.>+++.     // ou
<+.>--.<            // ps
<.>                 // (space)
-.---------.        // of
<.>                 // (space)
>+.--.<-..>+.       // trees
<<[<++>-]<-.<       // ? (value_of_space * 2 minus 1)

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.

Mika Lammi
quelle
23

Charge - 84

Ganz stolz auf diesen

Volles Programm: Was sind zwei Seiten einer Münze? (Konsole)

echo What are two sides of a coin?  2>>xx  2>>cc&&eecchhoo  hteaaidlss  2>>xx  2>>cc

Nur gleichmäßige: Köpfe ('c'-Datei)

eh htaetosdso  on 2>x >c&echo heads 2>x >c

Nur Gewinnchancen: Schwänze ('x' Datei)

coWa r w ie faci? >x 2>c&echo tails >x 2>c

In beiden Fällen wird die Fehlerausgabe in eine Datei umgeleitet.

Οurous
quelle
Ich habe mir schon überlegt, wie ich es kürzer machen könnte, aber das muss bis morgen warten.
Urous
3
Dies hat die höchste Punktzahl bisher: 12 - 28 = -16.
Nur die Hälfte des
20

Python - 104 96 (gespielt: 76)

Meine Lösung ist ziemlich einfach (und irgendwie lesbar):

"";print 'What is the color of a zebra?' ;""
paraianat= "' b l a c k '"
aparaianat="'w h i t e'"

Ausgabe:

What is the color of a zebra?
black
white

Ehrlich gesagt, fand ich die Idee für die erste Zeile in der Antwort von bitpwner.


Noch besser lesbare Alternative: - 113 105 97

"";print 'What is the color of a zebra?' ;""
"p r i n t ' b l a c k '" ;"p r i n t ' w h i t e '"

Noch kürzere Alternative: - 86 76

"";print'What is the color of a zebra?';""
"""";;pprriinntt''bwlhaictke''"""
Falko
quelle
"Schachbrett" erfüllt auch die Anforderungen.
Martin Ender
3
@ MartinBüttner Zebra. :-P
David Richerby
Oh, ich mag zebra. Und es passt gut in eine "Golf" -Version mit einer Frage von genau 30 Zeichen. So habe ich meine Lösung leicht modifiziert. :)
Falko
1
Strings in dreifachen Anführungszeichen sind keine Kommentare, sondern mehrzeilige Strings. Da sie auch als Dokumentzeichenfolgen verwendet werden , können sie mit Kommentaren verwechselt werden.
Falko
1
Die aktualisierte Frage ist nur 29 Zeichen lang.
Dennis
15

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] :

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} pp{{[RReebdo]l}}

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:

my-string: {"It's cool," said {Dr. Rebmu}, "for MANY reasons--like less escaping."}

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:

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} ddoo{{pp{{[RReebdo]l}}}}

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:

DD  11  DD :do dd {dd  {AAAqt}} ddoo{{BCBCBCBCBC C C}}

(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:

DD 11 DD: do dd {dd {rJ N 0% rN Wa1m2j S {\ x /} eZ 1 5] 3] prRJ [si ~ dSPscSqFHs] eZ 1 [s + dCa + wM2cNO]] Va | [mpAp2j] prSI ~ w { } Ls2w Wl h01tiVsb01n -1 chRVs { } hLceVn01qt} ddoo {{Brdzc [sn [{N sbeo [tIt0l1eV} 0e5gXN1 01L {5s0} C {1} 0 {0 Do5f0 0bMe1e0r0} 0]] tMw9C9 Numz Jl [paN + [KperlCJBn [[ba sWS {B noJn Nt0l] aJe] {K, j} b P {. } W enn EZ - - n [N m {G otothestoreandbuysome more}] {T akeonedownandpassitar ound} c B w P lf]]}}

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:

DD 11                    ; assign 11 to dd (about to overwrite again)
DD :do                   ; make dd a synonym for DO (a.k.a. "eval")

; eval a string as source code that ends with QUIT (QT)
dd {dd  {p{Which languages must you learn?}qt}}

; we'll never get here, but whatever's here must be legally parseable
pp{{[RReebdo]l}}

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:

D 1                      ; assign 1 to d
D d                      ; assign d to itself, so it's still 1
d                        ; evaluates to integer, no side effect
{d pWihlnugsms o er?q}   ; string literal, no side effect
p {Rebol}                ; print "Rebol"

Und hier ist der Even-Chars-Code:

D 1                      ; assign 1 to d
D:od                     ; URL-literal (foo:...), no side effect
d                        ; evaluates to integer, no side effect
{{hc agae utyulan}t}     ; string literal (well-formed!), no side effect
p {[Red]}                ; print "[Red]"

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:

do {{print "Hello"}}

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, sind dsie 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; ppLädt fine als Symbol, obwohl es undefiniert ist, und wird pin 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:

ddoo{{pp{{[RReebdo]l}}}}

Wenn der Parser im ganzen Fall nur das symbolische Wort ddoound 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:

do{p{Rebol}}

..und...

do{p{[Red]}}

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.)

Dr. Rebmu
quelle
Sie haben tatsächlich Ihre eigene Programmiersprache erstellt?
Stimmen
2
@ tjt263 Es ist besser, an eine Code-Golf "Kodierung" der existierenden Sprache Rebol zu denken . Ähnliche Dinge haben die Leute zum Beispiel mit Pyth gemacht , was im Grunde genommen Python abkürzt. Aber Rebmu hat einen ziemlich interessanten Unterschied darin, dass es tatsächlich vom Rebol-Parser geladen werden kann und "kompatibel" ist. Sie können jederzeit in die Mitte von Rebol einbrechen, siehe zum Beispiel Hourglass . Gerne besprechen wir es im Rebol- und Red-Chat, wenn Sie es wünschen.
Dr. Rebmu
15

Perl 186 139 135

"";print'What are the best things in life?';""&&pprriinntt("'hceraurs ht hyeo ulra meennetmaiteiso'n s   o f   t h e i r   w o m e n ")

Was sind die besten Dinge im Leben?

"pitWa r h ettig nlf?;"&print('crush your enemies'                 )

vernichte deine Feinde

";rn'htaetebs hnsi ie'"&print"hear the lamentations of their women"

höre die Wehklagen ihrer Frauen

Weniger lange Antworten verwenden:

Perl 79 72

"";print'What are my preferred weapons?';""&&pprriinntt("'smwaocredss'")

What are my preferred weapons?(30 Byte, H (X) = 3,76) swords(H (X) = 2,25) und maces(H (X) = 2,32)

Thaylon
quelle
9

Python - 139 103

"";print'What are the ingredients for success?';""; ";" ;id=='"RUaniincboorwnss'";;pprriinntt  id++"'"'

What are the ingredients for success?-> UnicornsundRainbows

Prüfung:

c="\"\";print\'What are the ingredients for success?\';\"\"; \";\" ;id==\'\"RUaniincboorwnss\'\";;pprriinntt  id++\"\'\"\'"
exec c        # What are the ingredients for success?
exec c[::2]   # Unicorns
exec c[1::2]  # Rainbows
print 
print c[::2]  # ";rn'htaeteigeinsfrsces'";"";d="Unicorns";print d+''
print c[1::2] # "pitWa r h nrdet o ucs?;" ; i='Rainbows';print i+""

Alte Version:

# What are the ingredients for success?
"";print(('What are the ingredients for success?'));""; ";" ;"pHrEiRnEt (C'OUMnEiSc oZrAnLsG'O)"; ";" ; "p,r iTnOtN(Y' RTaHiEn bPoOwNsY'.)"
# Unicorns
";rn('htaeteigeinsfrsces')";"";print('Unicorns');"";", TONY THE PONY."
# Rainbows
"pit(Wa r h nrdet o ucs?);" ; "HERE COMES ZALGO" ;  print('Rainbows')
Vektorisiert
quelle
6

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?

main=putStrLn{---}"What can I not have enough of?"{- }
=u"Scrank=e"sS"h
omeasi"n
=mpauitnS=tpru taSntprt tmLi

-----}

"Schuhe" und "Kuchen":

mi=uSrn--"htcnInthv nuho?{ 
uSrn="Shoes"
main=putStr mi
--}
anpttL{-}Wa a  o aeeog f"-}="cakes"
main=putStr anpttL
---

NB Das Erscheinen von crankunter "Wovon kann ich nicht genug haben?" sollte nicht als sinnvoll angesehen werden.

hervorragend
quelle
1
Kommentare sind nicht erlaubt
proud haskeller
Und wie ist die zweite gültige Haskell-Syntax?
stolzer Haskeller
Der ursprüngliche Code hat einen nicht geschlossenen Kommentarblock, da sich das schließende Paar in einem Zeilenkommentar befindet. Der "Kuchen" -Code scheint nicht einmal wie Code zu sein - ist anpttL keine Funktion? Wo ist das = Zeichen in seiner Definition? heißt es nicht eigentlich anpttLWa?
stolzer Haskeller
@proudhaskeller Verpasste die Regel zu Kommentaren. Das tut mir leid. Das erste Programm hat keinen nicht geschlossenen Kommentarblock. Es analysiert ganz gut. Zeilenkommentare sind in Blockkommentaren bedeutungslos. Der zweite ist gültig, da Zeilenkommentare gültig sind. anpttL ist eine Zeichenfolge. Nehmen Sie den Blockkommentar heraus und Sie werden sehen, dass er "Kuchen" entspricht. Wa steht im Blockkommentar, also nein, es ist eigentlich nicht anpttLWa.
comperendinous
2
@proudhaskeller Mein Kopf lässt GHCi die Arbeit in seinem Namen erledigen.
Comperendinous
4

Lisp (76 Zeichen)

31-stellige Frage, 6 Zeichen in jeder Antwort ⟹ Länge - Nutzlast = 33

'(: (pprriinncc''fmuacghesnitaa))':(princ "What is your favorite pink hue?")

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 ''fmuacghesnitaazu ""fmuacghesnitaa"".

Gilles 'SO - hör auf böse zu sein'
quelle
Da diese Frage eine Abstimmungskomponente hatte, habe ich sie genutzt, um die Aufmerksamkeit auf sich zu ziehen und mehr Stimmen zu erhalten. Aber das Kopfgeld ist aufgebraucht und da ich mir die Punkte nicht selbst geben kann :-), werde ich es Ihrem Eintrag geben, der auf Rebmus Ahnensprache basiert, und Sie ermutigen, es zu überprüfen, wenn Sie es noch nicht getan haben! codegolf.stackexchange.com/a/36114/57
Dr. Rebmu
3

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?"

g   a = "g   q   /b/a/" 
g l= "b = ""b r o w n i e s "
g   c = "g   /b/a/" 
g lpo= "d = ""c o o k i e s "
g   e = "c a p  "  /////
 +  "d i ""$ b "
g   f = "c a p  "  /////
 +  "d i ""$ d "
g   g = "c a p  "  /////
 + "c a p   / / /  "+ "/ / /"
di "What are the best desserts to bake right now?"

"Brownies"

g a="    ba"
gl b="brownies"
    g /// 
 p="  "       
g e="   " //
 di "$b"
    cap ///
+" "  
g g="   " //
  cap ///   +"  "
i"htaetebs esrst aergtnw"

"Kekse"

    g q /// 
 ="  "        
g c="  ba"
glo d="cookies"
    cap ///
+" "  
g f="   " //
 di "$d"
    cap  ///
+ "       " ///
d Wa r h etdset obk ih o?
Markierungen
quelle
2

Ksh (82 Zeichen)

35-stellige Frage, 5 Zeichen in jeder Antwort ⟹ Länge - Nutzlast = 37

ec=\'o'(;)eehc(h)oe cChroi m$e1;; '\'
echo  What\'s the  country\'s worst problem?

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.

Gilles 'SO - hör auf böse zu sein'
quelle
2

PowerShell 88

"" > $x;{What is my favorite equipment?};"" >> ${x}

${XsXwXoXrXdX};;;${XsXhXiXeXlXdX}

Was ist meine Lieblingsausrüstung? (30 Zeichen, H (X) = 4,0314)

"  x{hti yfvrt qimn?;"> {}
{sword};$XXXXXXX

Schwert (5 Zeichen, H (X) = 2.32193)

">$;Wa sm aoieeupet}" >$x
$XXXXXX;;{shield}

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 $xin 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 $XXXXXXoder $XXXXXXXin den verschiedenen Fällen platziert werden).

DarkAjax
quelle
1

GolfScript, 51 Bytes

"Which are the sides of a coin? ".;""thaeialdss""

Ausgabe

Which are the sides of a coin? 

Wie es funktioniert

.;dupliziert den String und löscht die Kopie. ""drückt eine leere Zeichenfolge. thaeialdssist undefiniert, tut also nichts.

Seltsame Zeichen

"hc r h ie faci?";"heads"

Ausgabe

heads

Wie es funktioniert

; löscht den ersten String vom Stack.

Sogar Zeichen

Wihaetesdso  on ."tails"

Ausgabe

tails

Wie es funktioniert

Wihaetesdsound onsind Noops. .dupliziert die leere Zeichenfolge auf dem Stapel.

Dennis
quelle