Erstellen Sie ein Programm, das einen Hallo-Welt-String ("Hallo-Welt", "Hallo-Welt" usw.) und Quellcode ausgibt. Die Ausgabe wird auf stdout oder ein gleichwertiges Format geschrieben. Hallo Weltzeichenfolge ist in den Quellcode eingebettet.
Beispielsweise könnte die Ausgabe für sein
(some source code here)hello world(some source code here)
Wenn die Ausgabe erneut kompiliert oder interpretiert wird, sollte sie eine ähnliche Ausgabe erzeugen, aber die Hello World-Zeichenfolge muss eine andere Interpunktion oder Großschreibung haben. Im vorherigen Beispiel könnte beispielsweise die folgende Ausgabe erstellt werden
(some source code here)hello, wORld(some source code here)
Jedes "(hier etwas Quellcode)" in diesen Beispielen kann sich nach jeder Ausführung ändern oder es kann dasselbe sein.
Ihre Ausgabe muss genau einmal eine gültige Hallo-Welt-Zeichenfolge enthalten. Es kann eine beliebige Anzahl ungültiger Hallo-Welt-Zeichenfolgen enthalten. Der Quellcode kann eine beliebige Anzahl von Kommentaren enthalten, und der Hallo-Welt-String kann in Kommentare eingebettet sein. Das erste Programm kann entweder null oder eine gültige Hallo-Welt-Zeichenfolge haben, aber nicht mehr.
Folgende Interpunktion ist gültig:
hello, world
hello world
helloworld
Jede Großschreibung ist akzeptabel. Dies sind beispielsweise gültige Hallo-Welt-Zeichenfolgen:
Hello, world
hellO WORld
HELLoworlD
Diese Zeichenfolgen sind ungültig:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Ihr Programm schlägt fehl, sobald eine der folgenden Bedingungen erfüllt ist:
- Es gibt einen Hallo-Welt-String aus, der während einer früheren Ausführung ausgegeben wurde.
- Ausgabe ist nicht mehr gültiger Quellcode in derselben Sprache oder
- Die Ausgabe enthält nicht genau einen gültigen Hallo-Welt-String.
Ihr Programm ist für diesen Wettbewerb nur gültig, wenn mindestens zwei erste Ausführungen erfolgreich sind. Dies bedeutet, dass die dritte Ausgabe ungültig sein darf. Die Ausgabe Ihres Programms kann nicht zufällig sein. Die erste Ausführung sollte immer die gleiche zweite Ausgabe erzeugen, die zweite Ausführung sollte immer die gleiche dritte Ausgabe erzeugen usw.
Die Bewertung wird als Anzahl von Bytes im Quellcode des ursprünglichen Programms berechnet. Die niedrigste Punktzahl gewinnt.
Es gelten folgende Boni (bis zu -60%):
- -5% * (N - 2), wobei N der Index der Ausführung ist, nach dem Ihr Programm eine ungültige Ausgabe erzeugt. Dieser Bonus ist auf -50% begrenzt. Wenn Ihr Programm 12 Mal oder mehr erfolgreich ist, erhalten Sie den maximalen Bonus.
- -10%, wenn Ihre Ausgaben (einschließlich des ersten Quellcodes) alle drei gültigen Interpunktionsalternativen enthalten.
Ihre Einreichung sollte den ersten Quellcode und die Ausgaben der erfolgreichen Ausführungen enthalten. Wenn Ihr Programm mehr als 12 Mal erfolgreich ist, fügen Sie die Ausgabe für 12 Ausführungen hinzu.
Beispiel
Nächste Zeile ist der erste Quellcode. Wenn wir es ausführen, ist es die erste Ausführung.
hello world(some source code here)
In der nächsten Zeile wird der erste Quellcode ausgegeben. Es ist die erste Ausgabe.
hello, world(some source code here)
Nächste Zeile ist die Ausgabe der zweiten Ausführung. Es ist die zweite Ausgabe.
helloworld(some source code here)
Als wir die erste Ausgabe ausführten, wurde dieses Programm für den Bonus von -10% qualifiziert. Das heißt, wir haben zwei Ausgaben und einen Originalcode, die alle unterschiedliche Interpunktion haben. Da die zweite Ausgabe gültig war, ist dieses Programm für diesen Wettbewerb berechtigt.
Nächste Zeile ist die Ausgabe der dritten Ausführung. Es ist die dritte Ausgabe.
Helloworld(some source code here)
Nächste Zeile ist die Ausgabe der vierten Ausführung. Es ist die vierte Ausgabe.
hellworld(some source code here)
Diese Ausgabe war ungültig. Index der letzten gültigen Ausführung war 4. Für dieses Programm werden -5% * (4 - 2) Bonus und -10% Bonus auf die Zeichensetzung gewährt. Das sind insgesamt -20%. Die Länge des ersten Quellcodes ("Hallo Welt (etwas Quellcode hier)") betrug 34 Bytes, das Endergebnis ist also 27,2.
hello world
?Antworten:
Pyth, 17 Bytes
Eine andere Pyth-Lösung:
Ausgabe:
Zweiter Ausgang:
quelle
Mathematica, 214 - 50% = 107 Bytes
Ich habe mich entschlossen, die Anzahl der Zeichenfolgen hier zu optimieren. Dies läuft für 1024 Programme ohne anzuhalten und durchläuft jede Kombination von Groß- und Kleinbuchstaben. Die Ausführung ist zu sehen, hier .
quelle
s
und mit auswertenToExpression
.)Vitsy, 33 - 33 * .05 * (11-2) = 18,15 Bytes
Heh! Schlag das! Das wirst du wahrscheinlich. : c
Erste Ausgabe:
Zweiter Ausgang:
Dritte Ausgabe:
Vierte Ausgabe:
Fünfte Ausgabe:
Sechste Ausgabe:
Siebte Ausgabe:
Achte Ausgabe:
Neunte Ausgabe:
Zehnte Ausgabe:
Elfte Ausgabe:
Dies ist die letzte Ausgabe, da sie einen Fehler verursacht.
quelle
CJam, N =
34, 28 Bytes - 10% - 10% = 22,4Dies startet die folgende Kette:
wobei der letzte kein gültiges "Hallo Welt" mehr enthält.
Teste es hier.
Erläuterung
Beachten Sie, dass das anfängliche Programm kein gültiges "Hallo Welt" enthält, dass es uns jedoch ermöglicht, eine Iteration weiterzugehen.
quelle
CJam
6960 - 50% = 30Ich bin noch Anfänger, bitte sag mir, wie man in CJam Golf spielt.
Es ist mühsam, jede Iteration zu drucken, da sie für 99 Iterationen gültig ist.
Es funktioniert durch Aufzählen der Großschreibung von Hallo Wort. Die Mühe besteht darin, die Strings in Teile aufzuteilen, da sowohl "Hallo Welt" als auch der Zähler aktualisiert werden müssen.
Erläuterung
HINWEIS: Ich habe die Mathematica-Antwort nicht gelesen. Tut mir leid, ich denke, sie war originell
Bei Neuordnung und unterschiedlicher Groß- und Kleinschreibung verliere ich 9 Byte.
CJam 73 - 60% = 29,2
Zählen Sie diesmal auch die Interpunktion auf.
quelle
GolfScript, 35 Bytes - 50% = 17,5
Ich beschloss, die Anzahl der Hinrichtungen vor einer Wiederholung zu übertreiben. Dieses Programm, dessen Ausgabe in den GolfScript-Interpreter zurückgeführt wird, erzeugt vor der ersten Wiederholung 890 verschiedene Hello World-Strings. Als kurzes Beispiel sind hier die ersten 15 Iterationen:
Die Arbeitsweise besteht darin, die Zeichenfolge zu durchlaufen und die Groß- und Kleinschreibung jedes Buchstabens umzukehren (indem der ASCII-Code mit 32 XOR-verknüpft wird), wenn der vorherige Buchstabe (nachdem möglicherweise die Groß- und Kleinschreibung umgedreht wurde) klein geschrieben ist. Die Groß- und Kleinschreibung des ersten Buchstabens wird umgedreht, wenn die Zahl am Anfang des Programms 32 und nicht 0 ist. Die Zahl für die nächste Iteration wird immer dann 32 sein, wenn der letzte Buchstabe des Strings in Kleinbuchstaben geschrieben ist Die Zeichenfolge, die bei der nächsten Iteration an den Anfang zurückgegeben werden soll.
(Dieser spezielle Rückkopplungsprozess wurde vollständig erhalten spontan durchgeführt. Eigentlich wollte ich nur einen einfachen Binärzähler mit Groß- und Kleinbuchstaben als Bits ausführen, aber die Implementierung dauerte zu viele Bytes, und so fing ich an, ihn zu optimieren, um etwas Kürzeres zu finden das würde immer noch eine ziemlich hohe Zykluslänge ergeben. Da das theoretische Maximum, wenn nur die Groß- / Kleinschreibung verwendet wird, 2 10 = 1024 ist, ist es ziemlich schön, einen 890-Iterationszyklus zu erhalten.)
Leider ist der Bonus für zusätzliche Iterationen auf -50% begrenzt. Ohne die Obergrenze hätte dieses Programm einen unglaublichen Bonus von −4440%. ;-)
quelle
Pyth, 18 Bytes
Welches gibt zurück:
Was wiederum druckt:
Ich hatte eine Lösung, die alle drei Schreibweisen beherrschte, aber es ist sogar mit dem Bonus länger.
quelle
Simplex , 21 Bytes.
Dafür wurde Simplex geboren . Damit kann ich definitiv weitermachen.
(Ich drücke weiterhin Strg + Eingabetaste. Tut mir leid. Ich beschuldige die Tablett-Tastatur.)
Versuch 3, v.0.8 +, 31 -5% = 29.45 Bytes (UTF-8-Methoden)
Das Emote in der Mitte drückt mich aus. Art von. Warum habe ich das nochmal gemacht? ._.
2. Ausgabe:
3. Ausgabe:
Endgültige Ausgabe:
Versuch 2, v.0.8 +, 21 Bytes (UTF-8, denke ich)
Ausgabe:
Endgültige Ausgabe:
Versuch 1, v.0.7 +
2826 BytesIch bin mir nicht sicher, ob dies für den ersten Bonus qualifiziert ist ...
Erste Ausgabe:
Das äußere Programm wird am Ende der Ausführung ausgewertet (es tut es für y; so sieht das äußere Programm aus:
Endgültige Ausgabe:
quelle
Rubin, 81 - 50% = 40,5
Originalcode:
Aufeinanderfolgende Ausgaben:
Ich denke das zählt als die vollen 50%? Könnte um eins abgehen. Außerdem gibt es in Ruby wahrscheinlich eine besser bewertete Nicht-Bonus-Lösung.
Der Originalcode enthält nicht "helloworld", sondern ein Quine, das den ersten Großbuchstaben im Quellcode durch die Kleinbuchstaben ersetzt. So wird bei jedem Durchlauf des Quines ein Großbuchstabe weniger ausgegeben.
Der Trick dabei ist, eine Formatzeichenfolge zu verwenden, um sowohl die Zeichenfolge selbst zum Quinieren als auch die Hello World-Zeichenfolge so zu interpolieren, dass sie nur einmal angezeigt wird.
quelle
PHP, 297 - 40% = 178,2 Byte
Nicht wirklich konkurrenzfähig, aber es hat Spaß gemacht zu schreiben
Es ist eine Variation dieser Quine:
es fügt aber auch "helloworld" zur Ausgabe hinzu und ersetzt
0
mit0+1
(in der nächsten Iteration1
mit1+1
und so weiter). Die Verwendungsubstr
einer vorhandenen "helloworld" -Ausgabe wird entfernt, bevor die neue "helloworld" hinzugefügt wird.Um eine andere Ausgabe zu erhalten, wird ein Buchstabe von "helloworld" großgeschrieben (bestimmt durch die inkrementelle Zahl). Dies ist der relevante Code:
Eine Herausforderung bestand darin, außer hier und für die Nummernersetzung keine Nummern zu verwenden
Da siehst du schon, dass
+1
das realisiert wird als+(int)true
.Für die Teilstring-Argumente brauchte ich
0, 146
:Die nicht leere Zeichenfolge "i" wird erzwungen
true
und negiert.false
ist ein gültiges ganzzahliges Argument und wird wie folgt behandelt0
.ord(I)
ist der ASCII-Wert von "I": 73Ausgabe (1. Iteration):
Ausgabe (2. Iteration):
Ausgabe (10. Iteration):
Dies ist die letzte gültige Ausgabe, aber kein gültiges Programm mehr
quelle
(int)true
zu `` !! i` wechseln und 12 Bytes sparen kann. Ich werde versuchen, etwas später Golf zu spielenPip, 48 - 50% = 24
was sich wie folgt entwickelt:
Die letzte Ausgabe ist ungültig, da sich die
HELLOWORLD
nicht geändert hat. (Korrigieren Sie mich, wenn ich den Bonus nicht richtig gemacht habe.)Dank dieser Frage habe ich gerade eine neue Quine-Technik entdeckt! Die Grundquine ist
V Y"`V Y`.RPy"
:Unser zusätzlicher Code ändert die Zeichenfolge
y
vor dem erneuten Darstellen wie folgt:0
Zeichen ganz in Großbuchstaben geschrieben sind.0
durcho+0
(wobeio
eine eingebaute Variable gleich 1 ist).Das nächste Mal um die Nummer im Code ist
1
statt0
, und so weiter.quelle
Javascript, 52 Bytes
Prüfung
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
quelle
///, 23 Bytes - 10% = 20,7 & le;
Probieren Sie es online!
Erste Ausgabe:
Zweiter Ausgang:
quelle
BBC BASIC, 56 Bytes
Ich hatte einen Riss, bevor mir klar wurde, wie spät ich zum Spiel bin. Hier ist meine Version und mein erster Versuch, StackExchange Code Golf zu spielen.
Hier gibt V. die Zeichen aus, die durch die ASCII-Codes in der folgenden durch Kommas getrennten Liste angegeben sind, und P. ist eine Kurzform für den Ausdruck. Ich benutze das Backspace-Zeichen, um die vorhandene 'helloworld'-Zeichenfolge zu überschreiben.
Gebe den Code ein:
Erste Ausgabe:
Zweiter Ausgang:
Es kann online unter https://bbc.godbolt.org/ getestet werden.
quelle