Herausforderung
Schreiben Sie das kürzeste Programm P so, dass
- P nimmt eine beliebige positive ganze Zahl n als Eingabe und gibt eine Programmzeichenfolge P 1 aus
Durch Ausführen von P 1 (ohne Eingabe) wird eine Programmzeichenfolge P 2 ausgegeben.
Durch Ausführen von P 2 (ohne Eingabe) wird eine Programmzeichenfolge P 3 ausgegeben.
...
- Das Ausführen von P n (ohne Eingabe) gibt genau "Hallo!" (ohne die Anführungszeichen).
Schematisch:
P (n) → P 1 → P 2 → ... → P n → Hallo!
Kriterien
- E / A erfolgt über stdin / stdout.
- Die Programmlänge wird in Bytes gemessen.
- Programme bestehen nur aus ASCII-druckbaren Zeichen.
- Es dürfen keine Duplikate zwischen den Programmen P, P 1 , ..., P n vorhanden sein .
BEARBEITEN: Die Programme P, P 1 , ..., P n sind als Quellcode gedacht, und "Ausführen des Programms" bezieht sich auf die Verarbeitung, die die Ausgabe erzeugt (dh Interpretation, Kompilierung und Ausführung usw.).
Antworten:
Golfscript
3914Beispiel:
Unter der Annahme, dass n = 4 ist und unser Programm P ist , sind dies die Schritte:
Führen Sie P mit Parameter 4 aus . Der Ausgang ist
"\"\\\"\\\\\\\"Hello!\\\\\\\"\\\"\""
( P 1 )Ausführen von P 1 -Ausgängen
"\"\\\"Hello!\\\"\""
( P 2 )Ausführen von P 2 -Ausgängen
"\"Hello!\""
( P 3 )Ausführen von P 3 -Ausgängen
"Hello!"
( P 4 )Ausführen von P 4 -Ausgängen
Hello!
. Wenn Sie mir nicht vertrauen, folgen Sie diesem Link ☺.quelle
\'\\\'\\\\\\\'Hello!\\\\\\\'\\\'\'
(dh es fehlen die äußeren Anführungszeichen), wenn ich es sowohl unter Linux als auch unter ausführe Win 7 (mitecho 4 | ...
an einer Eingabeaufforderung). Irgendeine Idee, was das Problem sein könnte?~''\(,{)2\?('\\'*}/]"'"*:z"'Hello!"z-1%"'"
;"..."
, wobei...
die Eingabe ist. ZB;"4"
hätte das Problem des fehlenden Anführungszeichens oben aufgedeckt, während das einfache Voranstellen des Programms"4"
dies nicht tut.) ...;
. Als ich das erste Programm schrieb, vergaß ich dies auf dem Weg, obwohl ich es war, der auf der Meta-Site darüber schrieb: meta.codegolf.stackexchange.com/a/521/3527JavaScript, 58 Zeichen
quelle
_
0 ist, gibt es "Hallo!" aus, andernfalls gibt es die Funktionsdefinition aus und ruft mit_
minus eins aufPerl (
4536)Führen Sie mit
perl -M5.010
zu verwendensay
.Für
n=1
, Ausgängesay q(Hello!)
Für
n=2
, Ausgängesay q(say q(Hello!))
Für
n=3
, Ausgängesay q(say q(say q(Hello!)))
und so weiter.
quelle
Python3, 66
quelle
Common Lisp, 68 Zeichen
Das einzig Unkomplizierte: Es generiert eine Programmebene mehr als nötig und wertet sie aus, da
eval
ein Zeichen kürzer als istprint
.quelle
Common Lisp: 65
Diese Version ist kleiner als die vorhandene CL-Antwort. Wenn Ihr Lisp mit einem Stackoverflow krächzt, müssen Sie dies verwenden, 81 Bytes:
Ich weiß, dass ich zu spät zur Party komme und ich bin sicher, dass dies noch optimiert werden könnte.
Demonstration (Vorsicht, einige Online-REPLs funktionieren nicht richtig):
Beachten Sie, dass:
Getestet mit SBCL 1.2.11.debian
Es gibt viele Warnungen, weil ich Dinge tue, die ernsthaft nicht getan werden sollen. Zum Glück werden alle Warnungen mit einem Semikolon gedruckt, sodass sie sowieso als Kommentare behandelt werden.
Die Duplizierung erfolgt, weil einer der Rückgabewert und eine tatsächliche Ausgabe ist. Wenn der Rückgabewert auch zählen würde, vereinfacht er sich auf 58 Bytes:
#1=(SETF N(READ)(CADDR'#1#)(1- N)W(IF(= N 0)"Hello!"'#1#))
Ich weiß immer noch, dass ich zu spät zur Party komme
quelle
Python 2.7, 57
quelle
Haskell, 62
quelle
Bash, 47 oder 12 (wenn ich Golfbash benutze)
Code:
Golfbash-Code:
Vorheriger Code (49):
Verwenden:
Programm P erstellen
Beispiel
Machen Sie P1:
Machen Sie P2:
Machen Sie P3:
Machen Sie P4:
Führen Sie P4 aus:
Angenommen, ich erstelle eine neue Allzwecksprache namens Golfbash - ähnlich wie Golfscript - mit einigen nützlichen Befehlen wie diesen:
Dann könnte ich folgendes schreiben:
Das wäre legal, nicht wahr?
quelle
F #, 182
quelle
J - 31 char
Beachten Sie, dass J Zeichenfolgen im Pascal-Stil verwendet:
'It''s too easy!'
Erklärt:
".1!:1]1
- Lesen Sie eine Zeile von stdin ein und konvertieren Sie sie in eine Zahl.<:2^
- Nehmen Sie 2 hoch von dieser Zahl und dekrementieren Sie.''''#~
- Erstellen Sie eine Zeichenfolge mit so vielen Kopien des einfachen Anführungszeichens.'Hello!'(],,)
- Fügen Sie diese Anführungszeichen vorne und hinten anHello!
.Verwendungszweck:
quelle
Python 2.7: 75
Beim ersten Golfen bin ich mir nicht sicher, ob ich es richtig mache
quelle
h
auch in den nachfolgenden Programmen bekannt ist? (Damit dies in einer REPL oder so ausgeführt werden müsste?)Clojure, 36 Bytes
Symbol
bewertet zu
Erstellen Sie ein Symbol mit 5 einfachen Anführungszeichen und führen Sie das Ergebnis aus, bis keine Anführungszeichen mehr vorhanden sind.
quelle