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 ausgebenProgramming
MYPROGMYPROG
sollte ausgebenProgramming puzzles
MYPROGMYPROGMYPROG
sollte ausgebenProgramming puzzles and
MYPROGMYPROGMYPROGMYPROG
sollte ausgebenProgramming puzzles and code
MYPROGMYPROGMYPROGMYPROGMYPROG
sollte ausgebenProgramming 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 MYPROG
Punktzahl 6)
Da dies Codegolf ist, gewinnt die niedrigste Punktzahl.
code-golf
source-layout
Calvins Hobbys
quelle
quelle
Antworten:
CJam - 24
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.:L
Weist die resultierende Zeichenfolge L zu (lässt sie auch auf dem Stapel) )Alte Version (28 Bytes):
Erläuterung:
S/
Splits durch RaumW):W
Inkremente W (anfänglich W = -1)=
das W'th Wort wird]
in einem Feld , den Inhalt des Stapels sammeltS*
schließt sich die Array Raum als Separator verwendetquelle
Piet (Ehrenantwort)
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
quelle
> <> (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.
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.
!v
ist 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).00p
Hier beginnt die wahre Magie. Beachten Sie, dass nicht nur die Phrase gespeichert wurde, sondern auch a;
.00p
Fü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 daraufv
, 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 steht
voo <
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.quelle
"It is by a rope."
.Python 66
Entropie: 3,61635
Ausgang:
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 . :)
quelle
i=locals().get('i',-1)+1;
ist -5 Bytesi='i'in dir()and i+1
. Bearbeiten: Regeln geändert.i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
Python 3, 55 (Bonus 67)
Du meinst, es wickelt sich um?
OK, eine Erklärung zu # 2 (Spoiler)
credits
ist eine Python-Version, die Text enthält, den ich verwenden möchte. Es ist von einem speziellen Typ mit einer Formatierung,repr
so dass Sie es einfach in den interaktiven Interpreter eingeben und eine schöne Ausgabe sehen können, also muss ichstr()
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.
bytes
Objekte 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 Trailingx
macht überhaupt nichts, aber wenn es mit der nächsten Kopie des Codes kombiniert wird, verwandelt es sich inxx=<value>
einen Code, der verhindert, dass derx
Zähler überschrieben wird.a,b,*q=q
ist ganz normal, Python 3-Sequenz auspacken.quelle
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 ...
Ausgabe:
Die Entropie ist
H(x)=3.5
genau.Dank an Jason S., dessen Antwort ich hauptsächlich im Großhandel verwendet habe. Der
ii
Wraparound-Trick ist wunderbar.quelle
print
Leerzeichen voranstellt, anstatt sie anzufügenC - 65
Kommentar Missbrauch :)
Aus diesem Grund sind die neuen Zeilen wichtig und der Code sollte wie folgt angehängt werden:
quelle
CJam, 24 Bytes
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
quelle
Pyth , 32
Phrase: "Es ist durch ein Seil."
Entropie: 3.5
Wie es funktioniert:
p
bedeutet Drucken mit angegebenem Trennzeichen.Das erste Argument
?kqZ4d
gibt das Trennzeichen an.?kqZ4d
bedeutetk if Z==4 else d
.k
ist''
, währendd
ist' '
.Das zweite Argument, der zu druckende Wert, wird durch Aufteilen (
P
) auf Leerzeichen (d
) und Indizieren in diese Liste (@
) um erzeugtZ
.Schließlich wird
Z
der Wert, der automatisch auf 0 initialisiert wird, um 1 (~Z1
) erhöht .quelle
Golfscript, 53
Dieser hat Spaß gemacht.
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.Was passiert nun im zweiten Durchgang:
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:Ich habe es einfach in geändert
Damit werden die
1
s aus der endgültigen Ausgabe unterdrückt.quelle
J - 42 Zeichen
Ich könnte eine kürzere Formulierung wählen, aber warum? Es wäre nicht mein Favorit.
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:
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
:
. Monadicf :g
ist äquivalent zuf
und es ist äquivalent zug
dyadisch. Dies löst das Problem.Beispiele, die Sie auf tryj.tk selbst ausprobieren können :
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.quelle
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.Wir wiederholen das Programm 5 Mal
Es werden nur die 5
READ
Anweisungen ausgeführt, und die ersten 5 Datenelemente werden aus der erstenDATA
Anweisung gelesen . Der Rest der Daten ist redundant. Ausgabe:quelle
Rubin, 50
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 - 1
aber ich kann vorzeitig teilen56/4 = 14
, alsoFile.size($0)/14 - 1
ein paar Zeichen speichern.50
ist kein Vielfaches von4
, aber12
nahe genug für den benötigten Bereich.quelle
Chip , 165 + 3 = 168 Bytes
+3 für Flagge
-w
"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.
quelle
Rubin, 63
quelle
Perl, 37
Ähnlich wie bei Comperendinous, aber nutzen Sie Perls qw, um ein paar weitere Zeichen zu speichern.
quelle
Rebmu Nachrichtenlänge + 27
Wollten wir mit "Mein IQ ist nicht ich!" das wäre 43. Aber ich unterstütze diese Botschaft:
Äquivalent Rebol / Rot:
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: 's
Dannif 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.)
quelle
AHK , 44 Bytes
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.quelle
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).
Zählt
alert
in 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.quelle
var i|=0;
hier NICHT funktioniert ???|=
oder ähnliches mitvar
. Ohnevar
bekommst du einReferenceError: i is not defined
.var i=i|0
dehnt sich ausvar i=undefined|0
undundefined|0
ist anscheinend0
.var i=i|0
ist äquivalent zuvar 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.Perl,
43-56Ich akzeptiere, dass ich diesen nicht gewinnen kann. Mein ursprünglicher Versuch erklärt, warum:
quelle
Lua, 77
Eine ziemlich einfache Lösung:
(H (X) = 4,23)
quelle
Javascript, 138
(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 wirdquelle
Pure Bash, 51 Bytes
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:
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.
quelle
!
jetzt mit einem Extra behoben - scheint den Trick zu tun.PHP
8978 charEs 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:
Golf gespielt:
quelle
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
n
mal Slices aus einem String genommen .n
ist die Anzahl vonp
s im Dateinamen.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.
quelle
05AB1E , 21 Bytes (nicht konkurrierend)
Probieren Sie es online!
Verwendet:
Erläuterung
quelle
“€í€Ü€…‚¿‹·“
Hab das nicht gesehen, in der Nähe des gleichen mit heheStax , 24
Führen Sie es aus und debuggen Sie es
Quote: Manche Tiere sind gleichberechtigter.
quelle
SmileBASIC, 54 Bytes
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
READ
Schlüsselwort liest einen Wert ausDATA
und speichert ihn in einer Variablen. BeiREAD
erneuter Verwendung erhalten Sie den nächsten Eintrag und so weiter.quelle
Pyth , 27 Bytes
Einmal , zweimal , dreimal , viermal und fünfmal . Das anschließende Anhängen beginnt, die Phrase zu wiederholen.
quelle