Ziel dieses Codegolfs ist es, einen Interpreter für die Programmiersprache HQ9 + zu erstellen.
Diese Programmiersprache enthält 4 Befehle:
- H - druckt "Hallo Welt!"
- Q - druckt den Quellcode des Programms
- 9 - druckt den Text des Liedes "99 Flaschen Bier"
- + - erhöht den Akku
Die Regeln:
- Da der Akku nicht definiert ist, können Sie den Befehl + ignorieren
- Ihr Programm sollte zur Eingabe auffordern (diese Eingabe ist der Quellcode) oder der Quellcode wird aus einer Datei gelesen
- Sie dürfen den Text von "99 Flaschen Bier" nicht in eine Datei einfügen und den Text aus der Datei lesen
- Sie dürfen keinen Komprimierungsalgorithmus wie GZip oder BZip zum Komprimieren des Liedtexts verwenden: Sie müssen Ihren eigenen Komprimierungsalgorithmus erstellen. Dies muss kein komplexer Algorithmus sein, aber versuchen Sie, den Text so weit wie möglich zu komprimieren (denken Sie daran: Dies ist ein Code-Golf, der Code mit den wenigsten Bytes gewinnt).
- Wenn der Quellcode ein Zeichen enthält, das nicht H , Q , 9 oder + ist , geben Sie "Quellcode enthält ungültige Zeichen" aus, bevor Sie Befehle ausführen! Dies bedeutet, dass, wenn der Quellcode
H1
zum Beispiel ist, nicht ausgegeben wird,Hello, world!
bevor Sie ausgebenSource code contains invalid characters
. Nein, sofort ausgebenSource code contains invalid characters
- Wenn Ihr Interpreter sowohl Groß- als auch Kleinbuchstaben akzeptiert, erhalten Sie -8 als Zeichenanzahl
Viel Glück!
code-golf
interpreter
hq9+
ProgramFOX
quelle
quelle
Antworten:
APL (Dyalog) (326 - 8 = 318)
Fügen Sie es in ein Editorfenster ein und rufen Sie es auf
H
. Die Eingabe erfolgt über die Tastatur.quelle
Mathematica,
349 346341 Zeichenquelle
If[StringMatchQ[3, "a"], x, y]
C,
599587487481467 ZeichenIch bin sicher, das kann geschlagen werden. Ich benutze schließlich C. Es gibt einen Grund, warum Sie nicht viele in C geschriebene Gewinngolfeinträge sehen. Das sind jetzt 467 Zeichen, dank kriminellem Missbrauch von
#define
.Geben Sie die HQ9 + -Quelldatei als Befehlszeilenargument an.BEARBEITEN: Akzeptiert jetzt die Quelle von stdin, keine Datei. Starten Sie das Programm, geben Sie den Code ein, CTRL- Cwenn Sie damit fertig sind.
Es kompiliert mindestens in MinGW / GCC mit:
gcc -o hq9+.exe hq9+.c
Sollte in MSVC funktionieren, aber ich hatte keine Lust, eine vollständige Lösung dafür zu erstellen. :)
Oder:
quelle
C
und ein paar vor loswerdenR;
. 8 Zeichen könntenp[s++]=0;
nach der Eingabeschleife abgeschnitten werden , um das Drucken zu vereinfachenp
.Python 2 -
452453443 BytesBleh. Es war schon schlimm, aber dann entdeckte ich einen Fehler, dessen Behebung mich ein Byte gekostet hat. Bleh.
(Früher habe ich nicht
+
in die Ausgabe für aufgenommenQ
. Eine Eingabe vonQ+++
gab die AusgabeQ
zum Beispiel.)Einige Zeichen wurden gespeichert, indem bei ungültiger Eingabe nicht beendet wurde, wie ich es erwartet hatte.
Erklärte Version folgt in Kürze.Ich gab auf. Ich verstehe kaum noch, wie diese Monstrosität funktioniert. Wenn es Nachfrage gibt, werde ich es noch einmal versuchen, aber bis dahin passiert es nicht.quelle
exit
das ungültige Zeichen nicht verwenden, zeigen Sie einfach die Nachricht an, damit Sie dort 7 Zeichen speichern können.99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall.
Es soll heißen :99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
+
. Sie sollten ignorieren+
, keinen Fehler machenHQHH
sollte es sagenHello World!HQHHHelloWorld!Hello World!
Perl, 325 - 8 = 317
Erweitert:
quelle
Ruby,
364360 - 8 = 352Hat noch viel Raum für Verbesserungen. 99 Flaschen Code von hier gestohlen .
quelle
No more bottles of beer on the wall
nach dem1 bottle
Abschnitt sein. dann ist esGo to the store...
1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
Haskell, 298
das ist ganz einfach.
%
Gibt die Ausgabe eines Befehls zurück (unter Angabe des Quellcodes für die Verwendung inQ
).d
gibt den 99 Flaschen Song mit einer Junk Line am Start aus Golfgründen zurück. Alles ist in eine Interaktion eingebunden (möglicherweise möchten Sie diese verwenden,g
anstatt sie zumain
testen)quelle
<interactive>:8:5: parse error on input ‘=’
.let
zum Einfügen von Definitionen verwenden (dies bricht ab, wenn Sie mehrere Definitionen ohne Trennzeichen einfügen;
) oder den Code aus einer Datei ausführen.main
, heißt es, dass der Quellcode ungültige Zeichen enthält, wenn ich versuche, sie auszuführenH
. Wenn ich versuche zu laufeng
stattmain
, gibt es sofort einen Fehler.main
funktioniert nicht, da der angehängte Zeilenumbruch kein zulässiger Befehl ist. Deshalb habe ichg
stattdessen empfohlen . Wie fürg
, funktioniert dasputStrLn $ g "H"
nicht richtig?J - 444 Bytes
Ich mochte die Nummer, also hörte ich auf zu golfen. Komm schon, Funktion mit einem Ausdruck!
Beispiele:
quelle
Fortran 528
470481Es erfordert das Kompilieren mit-fpp
Flag (+3, um zu punkten) 1 , um Vorverarbeitungs-Direktiven zu verwenden (was weit mehr als 3 Zeichen spart, also bin ich damit völlig einverstanden). Es wird auch nicht zwischen Groß- und Kleinschreibung unterschieden, daher gibt es -8: D. 5 Zeichen gespart, indem das nicht vorverarbeitet wird,endif
da es sowieso einmal verwendet wird .Erfordert eine Dateierweiterung
.F90
(es ist sinnvoll, sie aufzurufenhq9+.F90
), damit der Compiler die Vorverarbeitung erzwingt. Der Code unterscheidet zwischen Groß- und Kleinschreibung. Wenn die Groß- / Kleinschreibung nicht beachtet wird, werden 16 Zeichen hinzugefügt. Es lohnt sich also nicht, 8 Zeichen zu speichern. Meine bisherige Antwort berücksichtigt nicht die wechselnden Plurale inbottles
für9
; Diese Version korrigiert es (und fügt leider viel mehr Zeichen hinzu).Sieht viel besser ungolfed & unverarbeitet aus (wahrscheinlich, weil Sie sehen können, was los ist):
quelle
.cc
, damit das-lstdc++
Flag nicht benötigt wird.Python 2, 340 - 8 = 332
quelle
Lua 443 - 8 = 435
464 - 8 = 456Ich habe es geschafft, 21 Zeichen zu speichern, indem ich mehrere
if-end
s anstelle von verwendet habeif-elseif-end
. Ich hatte auch einige zusätzliche Leerzeichen nach ein paar schweben)
.Ich bin ziemlich zufrieden damit, auch wenn es nicht viel kürzer ist als meine Fortran-Antwort . Die 99 Flaschen Biercode wurden von dieser Antwort von Alessandro modifiziert . Ungolfed haben wir
quelle
if s in'Hh'
in
ist für for-loop-Iteratoren und nicht für Vergleiche. Sie erhalten eine Fehlermeldung, wenn Sie das dort hineinstecken. Hier gibt es drei Möglichkeiten: (1)match
in jeder Zeile verwenden, (2) Benutzers=='h'or s=='H'
in jeder Zeile, (3) es tun, wie ich es getan habe. Offensichtlich ist (3) kürzer als (1) und (2).Julia, 362
quelle
Tcl, 515
Nur ein bisschen Golf gespielt, immer noch kleiner als C und die richtigen 99 Flaschen Bier enden in Versen.
quelle
regexp
. Sie können mein Golfspiel mit 99 Bieren auf codegolf.stackexchange.com/a/109818/29325JavaScript (ES6), 385
Habe mich nicht für die Groß- / Kleinschreibung entschieden, hätte zu viele Zeichen gekostet. Nicht einmal in der Nähe von einigen der anderen Einträge, aber es hat trotzdem Spaß gemacht!
JavaScript, 344
Ich habe eine Version mit einer weniger vollständigen Version des Songs gemacht:
aber nachdem ich die anderen Einträge gesehen hatte (und die tatsächlichen Texte angeschaut hatte, wer wusste!), dachte ich, es wäre ein bisschen ein Cop out!
quelle
Go to the store, buy some more, *99* bottles of beer on the wall
nicht sein*No more* bottles of beer on the wall
Q
funktioniert auch nicht bei mir.Q
das mal machen sollte und den Quellcode der Funktion anstelle der Eingabe lieferte ... Das war ursprünglich mein Grund dafür in JS wäre dieser Teil einfach, aber ich weiß jetzt, dass das überhaupt nicht erforderlich ist!C 562 Bytes
Als volles Programm. Das erste Argument ist das Programm HQ9 +. Mit einem tatsächlichen Akku. Ich habe mich herausgefordert, keine define-Anweisungen zu verwenden.
Ungolfed-Version:
quelle
Java, 546 Bytes
Dies ist meine erste Code Golf Einreichung. Ich bin sicher, wir könnten mehr damit anfangen. Die Eingabe wird als Befehlszeilenargument gelesen. Biercode "ausgeliehen" von "99 Bottles of Beer" Java-Antwort (Creative Commons)
Lassen Sie mich wissen, wenn Befehlszeilenargumente nicht akzeptabel sind. Das hat viel Spaß gemacht!
quelle
Excel VBA, 489 Bytes
Ungerückt:
(zur besseren Lesbarkeit eingerückt)
Standardmodul1 in M- Aufruf mit umbenennen Dies funktioniert auch in anderen Office-Anwendungen, indem ActiveWorkbook in den entsprechenden Dokumenttyp geändert wird
h "+++++++++Your Code"
quelle
For n=1 To
to konvertierenFor n=1To
(vorher Leerzeichen entfernenTo
) und 4 Bytes, indem Sie alle Instanzen vonDebug.? 2;
to konvertierenDebug.?2;
(nach dem?
Schlüsselwort Leerzeichen entfernen )