5 Sprachen 11 Zeichen = 0,4545
Ich nutzte diese Herausforderung als Gelegenheit, um einige neue Sprachen (CJam, Burlesque, zsh, gs2) auszuprobieren. Zum ersten Mal habe ich mit diesen Sprachen gearbeitet.
Die Methode zum Erstellen der Ausgabe ist in fast jeder Sprache unterschiedlich. Nur die CJam- und die gs2-Methode sind identisch. Die 4 Methoden sind, einen Bereich [1, 100] zu erstellen und ihn mit Modulo (CJam und gs2) zu schneiden, den Bereich [1, ..., 100] zu erstellen und nach Elementen zu filtern, die 1 Mod 7 (Pyth) sind, zu erstellen Teilen Sie den Bereich [1, ..., 100] in Blöcke von Länge 7 auf, verwenden Sie das erste Element jedes Blocks (Burlesque) und erstellen Sie die Sequenz direkt (zsh).
Ich habe versucht, jedes Programm so zu gestalten, dass es für jemanden, der mit der Sprache nicht vertraut ist, wie ein Golfspiel aussieht.
edit 1: Burlesque hinzugefügt, vorherige 2 Sprachen mit 10 Zeichen = 0,2
edit 2: gs2 hinzugefügt, vorherige 3 Sprachen mit 11 Zeichen = 0,2727
edit 3: zsh hinzugefügt, vorherige 4 Sprachen mit 11 Zeichen = 0,3636
CJam
q~\1+,0-\%p
Testen Sie es online mit der Eingabe 100 7
.
q~ push the evaluated input (100 7)
\ swap (7 100)
1 push 1 (7 100 1)
+ add last to elements (7 101)
, create the range (7, [0, 1, ..., 100])
0 push 0 (7, [0, 1, ..., 100], 0)
- delete 0 from the range (7, [1, 2, ..., 100])
\ swap ([1, 2, ..., 100], 7)
% use every 7th entry ([1, 8, ..., 99])
p print pretty
Burleske
jrojcoq-]m[
Neben zsh ist dies das einzige Golfprogramm. Burlesque ist ziemlich genial, es hat eine sehr große Auswahl an verschiedenen Funktionen, wie z ro
. Leider gibt es nichts Schöneres als den Python- [::a]
Slicing-Operator.
Es gibt keinen Online-Dolmetscher, aber Sie können Burlesque hier bekommen . Da Burlesque keine Funktionen oder E / A unterstützt, müssen Sie die Werte zuerst auf den Stapel legen, z100 7 jrojcoq-]m[
j Swap (7 100)
ro Range (7 {1 2 ... 100})
j Swap ({1 2 ... 100} 7)
co ChunksOf ({{1 2 .. 7} {8 ... 14} ... {99 100}})
q Create Block ({{1 2 .. 7} {8 ... 14} ... {99 100}} {})
-] head (first element) ({{1 2 .. 7} {8 ... 14} ... {99 100}} {-]})
m[ map the chunks to the head-block
gs2
read-nums dup head inc range tail swap reverse head mod unlines
Ja, das sind nur 11 Zeichen. In gs2 hat jedes Byte eine andere Bedeutung. Da das Schreiben in Bytes jedoch ziemlich schwierig ist und keinen Spaß macht, können Sie auch in Mnemonics schreiben, die Sie mit dem eigentlichen gs2-Code kompilieren können. Der gs2-Code, der ausgeführt wird, ist
W@!'."B !4+
oder als Hex-Dump:
57 40 21 27 2e 22 42 20 21 34 2b
Lustige Tatsache: Ich habe nicht in Mnemonik geschrieben, sondern direkt die Nummern des Hex-Dumps.
Sie können es testen, indem Sie den Compiler herunterladen . Kompilieren Sie die Mnemonics-Datei mit python gs2c.py < mnemonics.txt > compiled
oder kopieren Sie W@!'."B !4+
sie einfach in eine Datei mit dem Namen compiled
und führen Sie sie dann mit aus echo 100 7 | python gs2.py compiled
.
Die Mnemonik ist ziemlich selbsterklärend, aber hier ist, was im Stapel vor sich geht.
57 40 21 27 2e 22 42 20 21 34 2b
57 read-nums ([100 7])
40 dup ([100 7] [100 7])
21 head ([100 7] 100)
27 inc ([100 7] 101)
2e range ([100 7] [0 1 ... 100])
22 tail ([100 7] [1 2 ... 100])
42 swap ([1 2 ... 100] [100 7])
20 reverse ([1 2 ... 100] [7 100])
21 head ([1 2 ... 100] 7)
34 mod ([1 8 ... 99])
2b unlines ('1\n8\n...\n99')
everything on the stack gets printed
Übrigens sind 8 Bytes möglich, vielleicht sogar weniger.
edit: Ich habe gs2 gegabelt, einen Befehl leicht manipuliert und eine Pull-Anfrage gestellt, die bereits zusammengeführt ist. Jetzt kann die Aufgabe mit 6 Bytes erledigt werden:, read-nums extract-array swap range1 mod unlines
was übersetzt bedeutet 57 0e 42 2f 34 2b
, was sogar besser ist als der optimale Python.
zsh
f() seq 1 $2 $1
Dies definiert eine Funktion f
, die eine Sequenz erstellt. Um es unter Windows zu verwenden, habe ich die Babun- Shell installiert , in die Sie diese Befehle einfach eingeben können. Einfach schreiben f() seq 1 $2 $1
und in die nächste Zeile f 100 7
.
Zuerst habe ich versucht, dies in Bash zu schreiben, aber dort muss man ()
um den Codeblock herum schreiben , wie f() ( seq 1 $2 $1 )
. Also wechselte ich stattdessen zu zsh.
Pyth
fq1%TeQUhhQ
Das tut wirklich weh, da ich natürlich das offensichtliche 7-Byte-Golf sehe. Sie können es online mit der Eingabe testen 100, 7
.
Q = input()
UhhQ the range [0, 1, ..., Q[0]]
f filtered (only use those elements T, which satisfy the equation
q1%TeQ 1 == T % Q[1]
NumberOfLanguages / CodeSize
?