Programmieren Sie Ihre Lieblingsphrase

28

Wählen Sie ein Zitat oder eine Phrase aus, die genau 5 Wörter lang ist, z Programming puzzles and code golf!.

Schreiben Sie ein Programm, das, wenn es n- mal an sich selbst angehängt wird , die ersten n + 1 Wörter Ihrer Phrase nacheinander ausgibt .

Zum Beispiel, wenn Ihr Programmcode war MYPROG und Ihre Phrase waren Programming puzzles and code golf!, läuft ...

  • MYPROG sollte ausgeben Programming
  • MYPROGMYPROG sollte ausgeben Programming puzzles
  • MYPROGMYPROGMYPROG sollte ausgeben Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG sollte ausgeben Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG sollte ausgeben Programming puzzles and code golf!

Mehr als viermaliges Anhängen ist nicht definiert, Ihr Programm kann alles tun.

Regeln

  • Ihre Phrase muss grammatikalisch bedeutungsvolles Englisch sein. Im Idealfall sollte es richtig groß geschrieben und unterbrochen werden.
  • Ihr Ausdruck kann beliebig lang sein, aber seine Entropie, wie von http://www.shannonentropy.netmark.pl/ berechnet , darf nicht weniger als 3,5 betragen .
    (Fügen Sie Ihre Phrase ein, klicken Sie auf Berechnen und suchen Sie nach dem letzten H (X).) .)
  • Ihre Phrase kann nur druckbare ASCII-Zeichen enthalten (hexadezimal 20 bis 7E). Ihr Code kann nur druckbare ASCII-Dateien sowie Registerkarten und Zeilenumbrüche enthalten.
  • Ihre Phrase muss genau 5 eindeutige Wörter und 4 Leerzeichen enthalten. Alle Nicht-Leerzeichen zählen als Teile von Wörtern. Leerzeichen sind die Wortgrenzen. Sie dürfen nicht vor- oder nachlaufend sein; es sollte doch eins geben, außer dem letzten Wort.
  • Die Ausgabe sollte auch ein Leerzeichen zwischen den Wörtern enthalten. Die Ausgabe bei jedem angehängten Schritt kann nachgestellte Leerzeichen, jedoch keine führenden Leerzeichen enthalten.
  • Ausgabe auf Standardausgabe. Es erfolgt keine Eingabe.

Wertung

Ihre Punktzahl ist die Länge in Bytes Ihres ursprünglichen nicht angehängten Programms. (zB MYPROGPunktzahl 6)

Da dies Codegolf ist, gewinnt die niedrigste Punktzahl.

Calvins Hobbys
quelle
21
aww, die Anforderungen an Entropie und Einzigartigkeit töten meine Vorstellung von "Büffel" als Eintrag.
Sparr
4
Ich würde so viel Spaß in Piet haben, bis "Ihr Code kann nur druckbare ASCII und Tabulatoren und Zeilenumbrüche enthalten." :(
Sp3000
3
@ Sp3000 Gerne können Sie eine ehrenamtliche Antwort einreichen. Ich würde gerne eine Piet-Lösung sehen :)
Calvins Hobbys
Dies ist die einzige Situation, in der Haskells Reinheit genau das Problem ist ...
Rhymoid
grammatikalisch bedeutungsvolles Englisch Zu unklar, was "grammatikalisch bedeutungsvolles Englisch" ist, da grammatikalisch und bedeutungsvoll unterschiedlich interpretiert werden.
MilkyWay90

Antworten:

6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Versuchen Sie es unter http://cjam.aditsu.net/

Erläuterung:

Lm entfernt die Buchstaben in L (anfangs "") aus "TheguywasnotI"
3< Die ersten 3 Buchstaben
]sammeln den Inhalt des Stapels in einem Array.
S*Fügt das Array unter Verwendung von Leerzeichen als Trennzeichen hinzu.
:LWeist die resultierende Zeichenfolge L zu (lässt sie auch auf dem Stapel) )

Alte Version (28 Bytes):

"He is but a dog."S/W):W=]S*

Erläuterung:

S/Splits durch Raum
W):WInkremente W (anfänglich W = -1)
=das W'th Wort wird
]in einem Feld , den Inhalt des Stapels sammelt
S*schließt sich die Array Raum als Separator verwendet

aditsu
quelle
Diese Sprache ist wirklich interessant. Wie sie sagen: "Man lernt jeden Tag etwas über eine neue Sprache" ... oder so ähnlich. Gute Arbeit!
Brobin
Akzeptiere dies anstelle von Dennis ' ebenso kurzer Antwort, da diese zuerst gepostet wurde.
Calvins Hobbys
28

Piet (Ehrenantwort)

Bildbeschreibung hier eingeben

Schlangen bahnen sich ihren Weg nach unten, rennen durch Blau nach rechts und treten durch Grün wieder ein. Druckt "Fruchtfliegen wie eine Banane."

Ich habe PietCreator verwendet , um dies zu machen, aber Sie können es hier ausprobieren . Das Remaking von Piet-Programmen ist ein Schmerz, also habe ich mit 35x35 begonnen und so weitergemacht, was bedeutet, dass ich viel mehr Codels verwendet habe, als ich brauchte.

Tatsächliche Größenversionen

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Sp3000
quelle
11

> <> (42)

Fische sind wirklich das größte Haustier. Einige Leute halten Käfer als Haustiere wegen eines unverständlichen Mangels an Logik. Dieses Programm tut sein Bestes, um mit solchen Leuten zu argumentieren.

!v'?od gub yna nac tahW;'00p!
<<|ov!
voo <

Beachten Sie, dass dies kein abschließender Zeilenumbruch im Programm ist. Die volle Ausgabe wird in der ersten Zeile umgekehrt; Der vollständige Satz lautet: "Was kann ein Fehler tun?" (Entropie 3,58418).

Vollständige Erklärung:

Dies ist eines der spaßigeren Programme, die ich geschrieben habe, da dies das erste ist, das Reflektion verwendet. In der ersten Zeile befindet sich das Fleisch des Programms.

!vist ein No-Op, da !der nächste Befehl übersprungen wird.

'?od gub yna nac tahW;' speichert die vollständige Phrase auf dem Stapel (es ist rückwärts, da jeder Buchstabe in der angegebenen Reihenfolge auf den Stapel geschoben wird, sodass er umgekehrt werden muss, damit er gut herausspringt).

00pHier beginnt die wahre Magie. Beachten Sie, dass nicht nur die Phrase gespeichert wurde, sondern auch a ;. 00pFügt das oberste Zeichen auf dem Stapel an der Position (0, 0) in das Programm ein, sodass jetzt das erste Zeichen des Programms a ist ;.

Das Ende !überspringt das Semikolon und bewegt den Cursor darauf v, wodurch der Programmfluss nach unten gelenkt wird.

Ab hier ist alles nur noch Druckerei. Da es keine abschließenden Zeilenumbrüche gibt, fügen aufeinanderfolgende Anhänge des Programms einfach die letzten beiden Zeilen hinzu, da die erste Zeile rechts von stehtvoo < befindet und daher niemals ausgeführt wird.

Am Ende wird der Cursor nach links unten im Programm verschoben und nach links oben zurückgesetzt, wo er ;zuvor eingefügt wurde, wodurch das Programm beendet wird.

Mike Precup
quelle
Vor einer Minute war dies technisch ungültig, aber ich habe gerade die Spezifikation geändert, so dass Zeilenumbrüche (und Tabulatoren) im Code zulässig sind (was ich ursprünglich wollte).
Calvins Hobbys
Oh, meine böse, total vermisste, dass das auf die Quelle zutrifft, nicht nur auf die Phrase. Ich bin froh, dass das die Absicht war,> <> Programme verlassen sich ziemlich stark auf Newlines.
Mike Precup
Wenn Sie dies ein wenig reduzieren möchten, können Sie eine Phrase mit 11 Buchstaben und keinen wiederholten Zeichen verwenden, z "It is by a rope.".
Isaacg
Das Problem ist, dass jede Ausgabe im Grunde die gleiche Länge haben muss, um gut zu drucken, da> <> Leerzeichen nicht einfach erkennen kann. Ich konnte keine kürzere finden.
Mike Precup
2
Persönlich bevorzuge ich Mikes Satz;)
Calvins Hobbys
10

Python 66

i='i'in dir()and i+1;print("Tfpcfhaialetgny"[i::5],end=" ."[i>3]);

Entropie: 3,61635

Ausgang:

The fat pig can fly.

Vielen Dank an @JasonS und @grc für die Tipps zum Kürzen des variablen Erkennungsteils.

Update: Sehen Sie die Antwort von JasonS für einen bösen Wraparound-Trick, der dies auf 55 Bytes reduziert hat . :)

Vektorisiert
quelle
i=locals().get('i',-1)+1;ist -5 Bytes
Jason S
Schlagen Sie mich dazu! Ich würde verwenden i='i'in dir()and i+1. Bearbeiten: Regeln geändert.
Grc
Nun, das ist ein weiterer -4
Jason S
60 Bytes mit Python 2:i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
nyuszika7h
9

Python 3, 55 (Bonus 67)

# 55 bytes, H(X)=3.72, Based on bitpwner's 66. "Mix dog and cat fur."
i=0;print("Mdacfionauxgdtr"[i::5],end=" ."[i>3]);i+=1;i

# 67 bytes, H(X)=4.28. "Thanks for supporting Python development."
q=b"qx!%%0077C";a,b,*q=q;print((str(credits)*2)[49:][a:b],end='');q

# 60 bytes, H(X) = 3.51. "Fix the bed old pal"
s="Fixthebedoldpal";a,b,c,*s=s;print(a+b+c,end='. '[s>[]]);s

Du meinst, es wickelt sich um?

OK, eine Erklärung zu # 2 (Spoiler)

  • creditsist eine Python-Version, die Text enthält, den ich verwenden möchte. Es ist von einem speziellen Typ mit einer Formatierung, reprso dass Sie es einfach in den interaktiven Interpreter eingeben und eine schöne Ausgabe sehen können, also muss ich str()es. Ich habe ziemlich viel Zeit damit verbracht, mir Builtins dafür anzuschauen, und "Vielen Dank für die Unterstützung der Python-Entwicklung" war zu gut, um darauf zu verzichten.

  • Da es viel Text gibt und ich nur meine 5 Wörter möchte, möchte ich die Start- und Endpositionen der einzelnen Teilzeichenfolgen speichern. Das ist in den Bytes am Anfang. bytesObjekte in python3 verhalten sich wie Arrays von Ganzzahlen, wenn Sie mit ihnen Sequenzoperationen ausführen.

  • Da der Code jedoch nur druckbare Zeichen enthalten kann, musste ich einen Versatz (49) finden, mit dem alle meine Positionswerte als Zeichen gedruckt werden können.

  • "Danke" steht am Anfang der Zeichenfolge, während die anderen Wörter näher am Ende sind. Das bedeutet, dass meine Positionswerte zu weit voneinander entfernt waren, um im druckbaren Bereich zu liegen. Durch Multiplizieren der Zeichenfolge um 2 wird eine weitere Kopie von "Thanks" erstellt, die den anderen Wörtern näher kommt.

  • Das [49:]Slice des Strings zu nehmen, ist ein Quellbyte weniger als das Addieren von 49 zu a und b.

  • Das in allen drei Antworten verwendete Konstrukt ist x=<value>;dostuff and increment;x. Das Trailing xmacht überhaupt nichts, aber wenn es mit der nächsten Kopie des Codes kombiniert wird, verwandelt es sich in xx=<value>einen Code, der verhindert, dass der xZähler überschrieben wird.

  • a,b,*q=q ist ganz normal, Python 3-Sequenz auspacken.

Jason S
quelle
+1. Böser Trick. :) Kann ich meine Antwort aktualisieren?
Vectorized
Nun, ich habe deine Mitte benutzt
Jason S
Ich wundere mich gerade über deine zweite Antwort. So viele Tricks stecken dahinter.
Vectorized
2
Kannst du mir bitte sagen, wie die zweite Antwort funktioniert?
Sajas
8

Python 2 (37)

Nachdem Sarah Präsidentin ihres örtlichen Mensakapitels geworden war, geriet sie in den Fokus der romantischen Aufmerksamkeit von Männern, die nach einem intelligenten Partner suchten. Bei jedem Date versuchte Sarah, eine persönliche Verbindung herzustellen, aber die Männer untersuchten sie nur bei abstrusen philosophischen Fragen. Frustriert darüber, dass sich niemand um ihre emotionale Seite kümmerte, rief sie aus ...

i=4;print"mniIMeosQy!t"[i::5],;i-=1;i

Ausgabe:

My
My IQ
My IQ is
My IQ is not
My IQ is not me!

Die Entropie ist H(x)=3.5genau.

Dank an Jason S., dessen Antwort ich hauptsächlich im Großhandel verwendet habe. Der iiWraparound-Trick ist wunderbar.

xnor
quelle
Nett! Requisiten für die Suche nach einer kürzeren Phrase mit der richtigen Entropie. Ich gab auf. Auch vergessen, dass py2 printLeerzeichen voranstellt, anstatt sie anzufügen
Jason S
Dies ist erstaunlich kurz für eine Python-Antwort! Gut gemacht.
isaacg
Sie können das Komma, das Sie in der Mitte Ihres Programms haben, entfernen, um auf 36 Zeichen herunterzufallen.
Xleviator
8

C - 65

Kommentar Missbrauch :)

char*z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//

Aus diesem Grund sind die neuen Zeilen wichtig und der Code sollte wie folgt angehängt werden:

char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//...
Allbeert
quelle
Das ist eine schöne Lösung!
MilkyWay90
4

CJam, 24 Bytes

"LwOtmiaKoezs"W):W>5%]S*

Wenn es fünf Mal ausgeführt wird, wird gedruckt, dass Liz für mich in Ordnung war . Zeichensetzung nicht enthalten, sorry.

Wie es funktioniert

"LwOtmiaKoezs"  " Push that string. ";
W):W            " Push W (initially -1), increment and save the result in W. ";
>               " Shift that many characters from the string. ";
5%              " Select every fifth character, starting with the first. ";
]S*             " Wrap the stack in an array and join its strings using spaces. ";
Dennis
quelle
Coole Idee, obwohl der Satz ein bisschen schwach ist: p
aditsu
Ich gebe zu, aber es musste xxx xxx xx xx xx ohne wiederholte Buchstaben sein. Das ist der einzige Satz, den ich mir einfallen lassen könnte, der zumindest ein wenig Sinn
Dennis
Wie wäre es mit "Sun war OK für mich"? Sie können "Sun" auch durch ein anderes Wort oder einen anderen Namen ersetzen.
Aditsu
Das ist besser, danke.
Dennis
3

Pyth , 32

p?kqZ4d@P"It is by a rope."dZ~Z1

Phrase: "Es ist durch ein Seil."

Entropie: 3.5

Wie es funktioniert:

p bedeutet Drucken mit angegebenem Trennzeichen.

Das erste Argument ?kqZ4dgibt das Trennzeichen an. ?kqZ4dbedeutet k if Z==4 else d. kist '', während dist' ' .

Das zweite Argument, der zu druckende Wert, wird durch Aufteilen ( P) auf Leerzeichen ( d) und Indizieren in diese Liste ( @) um erzeugt Z.

Schließlich wird Zder Wert, der automatisch auf 0 initialisiert wird, um 1 ( ~Z1) erhöht .

isaacg
quelle
2
Ich konnte mir keinen Kontext vorstellen, in den diese Phase natürlich passen würde ^^
Fehler
1
@flawr "Wo habe ich den Ball gelebt?" "Es ist an einem Seil."
isaacg
3

Golfscript, 53

Dieser hat Spaß gemacht.

{'1'-print}:puts;.'You; are; not; a; duck.'';'/\,=\1+

Phrase: "Du bist keine Ente." (Das ist völlig richtig; Entropie 3.5110854081804286)

Erläuterung:

Der Stack startet wie ''beim ersten "Durchlauf" (da kein STDIN angegeben ist). '1's werden angehängt, um anzuzeigen, wie oft der Code eingefügt wurde.

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: '' ''
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (0)
                              # Stack: '' [words] 0
=                             # Stack: '' 'You'
\1+                           # Stack: 'You' '1'

Was passiert nun im zweiten Durchgang:

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: 'You' '1' '1'
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (1)
                              # Stack: 'You' '1' [words] 1
=                             # Stack: 'You' '1' ' are'
\1+                           # Stack: 'You' ' are' '11'

Und so weiter.

"Aber," denken Sie, "wie bringen Sie die Einsen dazu, nicht auszugeben?" Ah, das ist der spaßige Teil. Golfscript implementiert puts(das aufgerufen wird, wenn das Programm endet) wie folgt:

{print n print}:puts;

Ich habe es einfach in geändert

{'1'-print}:puts;

Damit werden die 1s aus der endgültigen Ausgabe unterdrückt.

Türknauf
quelle
3

J - 42 Zeichen

Ich könnte eine kürzere Formulierung wählen, aber warum? Es wäre nicht mein Favorit.

(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '

Dies funktioniert aufgrund der Dualität von Js Monade / Dyade: Jedes Verb kann als Monade aufgerufen werden - mit einem Argument rechts davon - oder als Dyade - mit einem Argument links und einem anderen rechts davon.

Betrachten Sie die folgende Sitzung mit der J REPL:

   'You multiplied 6 by 9. '
You multiplied 6 by 9.
   'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
You multiplied 6 by 9. You multiplied 6 by 9.
   ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '   NB. break into words
+---+----------+-+--+--+---+----------+-+--+--+
|You|multiplied|6|by|9.|You|multiplied|6|by|9.|
+---+----------+-+--+--+---+----------+-+--+--+
   (#\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '             NB. count off
1 2 3 4 5 6 7 8 9 10
   (6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '         NB. mod 6
1 2 3 4 5 0 1 2 3 4
   (1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
1 0 0 0 0 0 1 0 0 0
   (#~ 1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '  NB. select
+---+----------+
|You|multiplied|
+---+----------+
   (#~ 1 = 6 | #\)&.;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. ' NB. undo ;:
You multiplied

Dort wird ,es als Dyade behandelt, weil es zwischen zwei Argumenten liegt, und (#~1=6|#\)&.;:als Monade, weil es kein übriges Argument gibt. Wenn wir also ein Verb hätten, das sich so ,verhalten könnte, als wäre es dyadisch und (#~1=6|#\)&.;:als wäre es monadisch, wären wir gesetzt.

Wie Sie vielleicht schon vermutet haben, existiert eine solche Konjunktion und es sieht so aus :. Monadic f :gist äquivalent zu fund es ist äquivalent zug dyadisch. Dies löst das Problem.

Beispiele, die Sie auf tryj.tk selbst ausprobieren können :

   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by 9.

Und ja, die Natur der Umkehrung von ;:macht es so, dass es keine nachgestellten Leerzeichen gibt.

Mit Hilfe It is by a rope.als Ausdruck gibt 35 Zeichen: (#~1=6|#\)&.;: :,'It is by a rope.'. Wir brauchen nicht das Leerzeichen, wie wir es für meinen Satz tun, aus arkanen ;:Gründen.

algorithmshark
quelle
3

BBC Basic, 40

Beinhaltet einen Zeilenumbruch. Wäre 30, wenn die Schlüsselwörter anstelle von ASCII als tokenisiert betrachtet werden könnten.

Ich habe meine Freundin beim Schlafen mit dem Milchmann erwischt, also habe ich sie fallen lassen und schlafe mit ihrer Schwester aus Rache. As my ex do I!(fünf aus zwei Buchstaben bestehende "Wörter" mit eindeutigen Zeichen) reichten nicht für die Entropie aus, daher habe ich am Ende den mit der Zunge herausgezogenen Smiley hinzugefügt, um die Entropie auf genau 3,5 zu bringen. Schließlich habe ich in Wirklichkeit ein ziemlich normales Leben, keine sonderbare Seifenoper.

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Wir wiederholen das Programm 5 Mal

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Es werden nur die 5 READAnweisungen ausgeführt, und die ersten 5 Datenelemente werden aus der ersten DATAAnweisung gelesen . Der Rest der Daten ist redundant. Ausgabe:

  (once)
  As 
  (5 times)
  As my ex do I:-P 
Level River St
quelle
2

Rubin, 50

puts'The fat pig can fly.'[0..File.size($0)/12-1]#

Dies bestimmt anhand seiner eigenen Länge, wie viele Wörter gedruckt werden sollen. Seine Wiederholungen werden im übrigen nach der Endung der Kommentarzeichen ignoriert #. Von bitpwner entliehene Phrase : Es ist sehr praktisch, eine kurze Phrase mit der gleichen Anzahl von Buchstaben in jedem Wort zu haben.

Da jedes Wort + Ende 4 Zeichen hat, wäre die Formel zB für ein Programm mit 56 Zeichen:, (File.size($0)/56)*4 - 1aber ich kann vorzeitig teilen 56/4 = 14, also File.size($0)/14 - 1ein paar Zeichen speichern. 50ist kein Vielfaches von 4, aber 12nahe genug für den benötigten Bereich.

Tim S.
quelle
2

Chip , 165 + 3 = 168 Bytes

+3 für Flagge -w

| ,z `Z`Z  `Z
| |ZZZ>Z>ZZZ>ZZZZ
>((((((((((((((((
|)-)))-)-)))-))))g
|)d)xx-x-)xx-))x)e
||b+))-x-x))-x)xc
|`v))xa(-x(x-((^d
|*`.))d| b | b
|Z~<b( |~Zf|
>~T| | |   |

"Ich habe einen roten Anzug gewonnen" (3.5) (so etwas habe ich eigentlich noch nicht gewonnen) (... bis jetzt)

Beachten Sie die nachfolgende Newline, sodass die verkettete Kopie unter dem vorhandenen Code angezeigt wird.

Probieren Sie es online! (das Original)
Probieren Sie es online! (das Original plus alle vier Kopien)

Dies ist ein bisschen wie ein Wirrwarr. Es stellte sich heraus, dass der schwierigste Punkt die Abbruchbedingung war. (In meiner ersten Iteration wurden die Wörter gedruckt, gefolgt von einem endlosen Strom von Null-Bytes ...).

Wie es funktioniert

Zuerst der Satz:
12 eindeutige Zeichen + 4 Leerzeichen = genau 3,5 Entropien.

Und der Code:
Jede Kopie druckt das erste Wort und weist die nachfolgende Kopie an, das nächste Wort zu drucken. Wenn es nur eine Instanz gibt, gibt es keine zweite Kopie, sodass nichts außer dem ersten Wort gedruckt wird.

Wenn es zwei Kopien gibt, drucken beide gleichzeitig das erste Wort (die Bytes sind ODER-verknüpft, damit es in Ordnung ist), und nur die zweite Kopie druckt das zweite Wort.

Wenn alle fünf Exemplare vorhanden sind, drucken alle das erste Wort usw. usw., und die fünfte Kopie druckt das letzte Wort selbst aus.

Die Beendigungsschaltung beendet das Programm, sobald nicht alle Kopien aktiv gedruckt werden.

Phlarx
quelle
1

Rubin, 63

+1;puts"See Dick and Jane run!"[/(.*?( |!)){#$.}/]if($.+=1)==$.
Histokrat
quelle
1

Perl, 37

print qw(My IQ is not me!)[$i++].' ';

Ähnlich wie bei Comperendinous, aber nutzen Sie Perls qw, um ein paar weitere Zeichen zu speichern.

user0721090601
quelle
1

Rebmu Nachrichtenlänge + 27

Wollten wir mit "Mein IQ ist nicht ich!" das wäre 43. Aber ich unterstütze diese Botschaft:

uV?'s[S[{The}{rebellion}{against}{software}{complexity.}]]proTKsPROsp

Äquivalent Rebol / Rot:

unless value? 's [
    s: [{The}{rebellion}{against}{software}{complexity.}]
]

print/only take s
print/only space

Rebol hat 3 grundlegende Bedingungen: WENN, ENTWEDER und WENIGER. UNLESS ist äquivalent zu IF NOT, kann aber klarer sein: "Immer die folgenden Schritte ausführen, WENN diese Bedingung nicht erfüllt ist."

In diesem Fall ist die Bedingung, dass wir testen, ob dem Symbol S im aktuellen Kontext ein Wert zugewiesen wurde. Wir müssen ein Anführungszeichen verwenden, da der Versuch, ein S ohne Anführungszeichen in einem Bedingungsausdruck zu verwenden, es auswerten und möglicherweise einen Fehler auslösen würde. (Der value?Parameter wird standardmäßig nicht in Anführungszeichen gesetzt, da Sie möglicherweise möchten, dass das zu überprüfende Symbol in einer Variablen enthalten ist. sym: 'sDann if value? sym [...]würde z. B. geprüft, ob S und nicht SYM definiert wurde.)

Nur das erste Einfügen des Programms weist S. die Zeichenfolgenfolge zu. Aufeinanderfolgende Einfügungen nehmen eine Zeichenfolge aus dem Anfang der Zeichenfolge und übergeben sie an PRINT / ONLY, wodurch das Argument gedruckt wird, ohne einen Zeilenvorschub hinzuzufügen.

(Hinweis: PRINT / ONLY ist eine empfohlene Ersatzmethode für PRIN, die in Rebol 3 und Rot berücksichtigt wird. Ein Ersatzdruck wird jetzt in Rebmu getestet.)

Dr. Rebmu
quelle
1

AHK , 44 Bytes

i++
Send % SubStr("He is an OK ex",i*3-2,3)

Beachten Sie die neue Zeile am Ende. Das einzig Schlaue dabei ist, dass die Zeichenfolge nur aus drei Buchstaben besteht, sodass wir nichts teilen müssen. Stattdessen ziehen wir einfach eine Teilzeichenfolge basierend auf i. Die Ausgabe erfolgt auf dem aktiven Bildschirm, als ob sie über die Tastatur eingegeben worden wäre.

Ingenieur Toast
quelle
0

Javascript (53)

Ich habe den Text von aditsu genommen, da ich mit dem Text nichts Besonderes mache, so dass die ausgewählten Wörter für die Lösung etwas irrelevant sind (außer für die Anzahl der Bytes).

var i=i|0;alert("He 0is 0but 0a 0dog".split(0)[i++]);

Zählt alertin diesem Fall? Bearbeiten: Lesen der Regeln ist es wahrscheinlich nicht, da ich die Zeichenfolgen nicht mit Leerzeichen verbinde. Ich werde Leerzeichen hinzufügen, um es fair zu machen.

Beachten Sie auch, dass die teuer var in diesem Fall tatsächlich relevant ist.

Ingo Bürk
quelle
Kann mir jemand erklären, warum var i|=0;hier NICHT funktioniert ???
Fehler
@flawr Das kannst du nicht machen |=oder ähnliches mit var. Ohne varbekommst du ein ReferenceError: i is not defined. var i=i|0dehnt sich aus var i=undefined|0und undefined|0ist anscheinend 0.
Nyuszika7h
Dies funktioniert wegen des Hebens. var i=i|0ist äquivalent zu var i;i=i|0. Aus diesem Grund wird der Referenzfehler nicht angezeigt. Der Grund, warum es beim ersten Mal auf 0 gesetzt wird, ist das, was @ nyuszika7h gesagt hat.
Ingo Bürk
1
Dadurch werden die Wörter jedoch separat gewarnt.
stolzer Haskeller
0

Perl, 43-56

print substr'Mine was not Red 5!',4*$i++,4;

Ich akzeptiere, dass ich diesen nicht gewinnen kann. Mein ursprünglicher Versuch erklärt, warum:

@a=('This',' code',' is',' too',' long.');print$a[$i++];
hervorragend
quelle
0

Lua, 77

Eine ziemlich einfache Lösung:

i=(i or 0)+1;io.write((i==1 and""or" ")..("Thebigfoxwasup."):sub(3*i-2,3*i))

(H (X) = 4,23)

ahuff44
quelle
0

Javascript, 138

g=this;clearTimeout(g.t);g.i|=0;i++;g.t=setTimeout(
    function(){console.log(["I'll","sleep","when","I'm","dead."].slice(0,i).join(' '))},0);

(Der zusätzliche Zeilenumbruch wird nur zur besseren Lesbarkeit hinzugefügt.)

Druckt I'll sleep when I'm dead. Verwendet einen Timer, um sicherzustellen, dass die Ausgabe nur einmal gedruckt wird

Aebabis
quelle
0

Pure Bash, 51 Bytes

a=(All you need is Love!)
printf "${i:+ }${a[i++]}"

H (X) = 3,59447

Das könnte man ein bisschen besser spielen, wenn man eine der kürzeren Phrasen pochiert, aber ich halte mich gerne an Descartes ' Lennons berühmtestem Zitat. (Sorry @Descartes, aber alle Wörter müssen eindeutig sein).

Ausgabe:

$ ./phrase.sh 
All$ cat phrase.sh phrase.sh phrase.sh > phrase3.sh
$ chmod +x phrase3.sh 
$ ./phrase3.sh 
All you need$ 
$ cat phrase.sh phrase.sh phrase.sh phrase.sh phrase.sh > phrase.sh
$ chmod +x phrase5.sh 
$ ./phrase5.sh 
All you need is Love!$ 

Achten Sie darauf, Leerzeichen zwischen Wörtern einzufügen, jedoch keine führenden oder nachfolgenden Leerzeichen.

Beruht auf der Tatsache, dass undefinierte Variablen in bash, wenn sie als Zeichenfolgen erweitert werden, den Wert "" haben, aber wenn sie arithmetisch erweitert werden, den Wert 0 haben.

Digitales Trauma
quelle
Die 5 Wörter müssen eindeutig sein ...
Trichoplax
Da Ihr Code vielseitig genug zu sein scheint, um mit 5 Wortphrasen umzugehen, können Sie sich sicher eine vorstellen, die die erforderliche Entropie von 3,5 hat (zu viele Doppelbuchstaben in dieser ...).
Trichoplax
@githubphagocyte Ich hatte gehofft, du würdest mir den Vorteil der Rundung geben ;-) Ok, ich habe es !jetzt mit einem Extra behoben - scheint den Trick zu tun.
Digital Trauma
0

PHP 89 78 char

Es ist ein wenig wortreich und wird auf keinen Fall gewinnen, aber es hat trotzdem Spaß gemacht. Folgendes habe ich mir ausgedacht

Phrase:

code golf is pretty fun

Entropie = 3,82791

Code:

<?
$i=(isset($i)?$i+1:0);
$w=["code","golf","is","really","fun"];
echo $w[$i].";

Golf gespielt:

<?$i=(isset($i)?$i+1:0);$w=["code","golf","is","really","fun"];echo $w[$i].
Brobin
quelle
0

Python3 - 122 Bytes

Öffne die Türen der Pods [HAL]

Ich denke, ich werde mir mit diesem einen Nerd-Kredit verdienen. Wenn nur die Frage noch ein Wort erlauben würde ...

Mein Programm verwendet den Dateinamen (p.py ist die Basis) und überprüft, wie oft der Basisname iteriert wird. Es werden dann nmal Slices aus einem String genommen . nist die Anzahl von ps im Dateinamen.

import sys,re
for i in range(len(re.findall(re.compile('p'),sys.argv[0]))):print('Otpbdphoaoeedyon   r    s'[i::5],end='')

~ $ python p.py
Open

~ $ python pp.py
Open the

~ $ python ppp.py
Open the pod

~ $ python pppp.py
Open the pod bay

~ $ python ppppp.py
Open the pod bay doors

Der Vorteil der Regex ist, dass das Programm aufgerufen werden kann, was immer Sie möchten, und es wird weiterhin funktionieren (vorausgesetzt, Sie ändern den Basisnamen im Code): Mein ursprüngliches Programm hieß golfed.py.

Beta-Zerfall
quelle
0

05AB1E , 21 Bytes (nicht konkurrierend)

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?

Probieren Sie es online!

Verwendet:

This works for literally anything. 
H(x) = 4.02086

Erläuterung

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # Pushes "This works for literally anything."
              #       # Split on spaces
               ¾è     # get element at index of counter_variable (default 0)
                 ¼    # Increment the counter_variable
                  ?   # Print the selected element
                   ð? # Prints a space
Datboi
quelle
“€í€Ü€…‚¿‹·“Hab das nicht gesehen, in der Nähe des gleichen mit hehe
Magic Octopus Urn
0

SmileBASIC, 54 Bytes

DATA"Does"," anybody"," have"," a"," key?
READ W$?W$;

Ich hätte es vorgezogen "Der Sand kann gegessen werden." aber das scheitert irgendwie am entropietest. Natürlich hätte ich einen kürzeren Ausdruck wählen können, aber das ist langweilig.

Das READSchlüsselwort liest einen Wert aus DATAund speichert ihn in einer Variablen. Bei READerneuter Verwendung erhalten Sie den nächsten Eintrag und so weiter.

12Me21
quelle