Rosetta Stone Code-Herausforderungen sind Herausforderungen, bei denen Sie die Aufgabe in möglichst vielen Sprachen ausführen müssen.
Die Herausforderung
Sie erhalten zwei Zahlen n
und s
in einer Liste als Eingabe. Das n
wird eine Zahl , die Sie haben zu zählen bis zu. n
ist eine beliebige Zahl von 2 bis 10000. s
ist die Zahl, die Sie beim Zählen bis überspringen n
. s
wird von 1 bis n
/ 2 (die Hälfte von n
) sein. Wenn n
600 war, s
könnte 300 nicht größer sein. Sie müssen alle Zahlen bis zum n
Überspringen s
ausgeben, indem Sie mit 1 beginnen. Jede Ausgabenummer sollte sich entweder in einer neuen Zeile, in derselben durch Leerzeichen getrennten Zeile oder in einer Liste befinden.
Die Wendung
Für diese Rosetta Stone Code Challenge muss jedes Snippet, in das Sie das Programm schreiben, dieselbe Länge haben. dh: Wenn Ihr Python-Programm 56 Zeichen hat, muss Ihr Java-Programm auch 56 Zeichen haben. Leerzeichen und Kommentare zählen nicht als Zeichen. Variablen- / Funktionsnamen dürfen nicht länger als 10 Zeichen sein. Denken Sie daran, dass dies auch Code Golf ist. Versuchen Sie also, Ihren Code kurz zu halten.
Beispiel
Eingang
[100, 7]
Ausgabe
1
8
15
22
29
36
43
50
57
64
71
78
85
92
99
Hinweis: Die Ausgabe kann in einer einzelnen Zeile erfolgen, die durch Leerzeichen oder Listenformat getrennt ist
Gewinnkriterium
Der Gewinner wird nach folgender Formel ermittelt:
numberOfLanguages/codeSize
codeSize
ist nicht die Gesamtcodegröße, sondern die durchschnittliche Codegröße eines Snippets.
Der Benutzer mit der höchsten Punktzahl gewinnt. dh: Eine Antwort mit 4 Sprachen und einer Größe von 31 Bytes würde eine Antwort mit 7 Sprachen und einer Größe von 80 Bytes gewinnen. Ein Gewinner wird am 9. März 2015 um 2:00 UTC ausgewählt.
Anzeigetafel
Alle Punkte werden auf das nächste Tausendstel gerundet
Maltysen - 14 Sprachen / 24 Zeichen = 0,583 ---- Gewinner
mbomb007 - 15 Sprachen / 29 Zeichen = 0,517
Jakube - 5 Sprachen / 11 Zeichen = 0,455
Teun Pronk - 4 Sprachen / 51 Zeichen = 0,078
captncraig - 1 Sprache / 56 Zeichen = 0,018
quelle
NumberOfLanguages / CodeSize
?Antworten:
14 Sprachen - 24 Bytes = 0,58333333333
** Gesichtspalme **. Ich habe vergessen, den Platz in meiner Python-Antwort nicht zu zählen. Also bin ich jetzt bei 24 Bytes.
Ich habe aus dieser Herausforderung viele neue Sprachen gelernt, die ich wahrscheinlich beim Golfspielen verwenden werde. Eine Website, die mir wirklich geholfen hat, diese Sprachen zu finden, war http://www.tutorialspoint.com/codingground.htm . Erwarten Sie nur nicht, dass meine Programme darin ausgeführt werden. Es ist ein vollständiges Programmformat erforderlich. Ich habe es nur verwendet, um die Sprachen kennenzulernen, und andere REPLs verwendet, um sie auszuführen.
1. Pyth :
Pyth hat keinen Bereich für Schritt Funktion im Gegensatz zu Python, so dass ich regelmäßig Bereich verwendet und
gehackt(dank @Jakube) verwendete mod Betreiber darauf.Definiert eine Funktion g (bis, Schritt)
2. Golfscript:
Dies ist mein erstes Golfscript-Programm. Wahrscheinlich nicht der beste Weg, es zu tun.
3. Bash Utils:
Verwendet den Befehl seq mit dem Parameter INCREMENT.
4,5. Python, Salbei :
Selbsterklärender Code.
Sage ist eine Sprache, die auf Python basiert und für Mathematik verwendet wird.
6. Mathematica:
Wieder selbsterklärend.
7. Matlab:
Verwendet die Bereichsnotation von Matlab und definiert eine anonyme Funktion.
8. Livescript:
Wie Coffeescript ist es ein JS-Derivat. Hat coole Range-Syntax. Pfeilnotation wieder.
9. Erlang:
Erlernte erlang nur dafür. Ziemlich selbsterklärend, definiert Funktion r.
10. F #:
Offensichtlich sind die Funktionsdefinitionen von F # wie Variablen.
11. Haskell:
In der Bereichsnotation von Haskell geben Sie die ersten beiden im Bereich für das Inkrement an und kein explizites Inkrement.
12. R:
Sehr coole Sprache, auch wenn die Funktionsdefinitionen etwas ausführlich sind.
13. Julia:
Tolle Sprache, wird in Zukunft zum Golfen verwendet.
14. CJam:
Wie meine alte Golfscript-Antwort, außer mit Eingabe-Parsing und Padding.
quelle
Mmhdcr1GH100 7
funktioniert nicht so, wie ich es mir vorgestellt habe.M
definiert eine Funktiong
, die Sie zuerst aufrufen müssen. Versuchen Sie esMmhdcr1GHg100 7
.%
ist das gleiche wie bei Python[::a]
. Kein Hacken nötig. Und ich bin mir ziemlich sicher, dass Ihr Bereich bis einschließlich umfassen mussG
, zr1hG
.7
. Negativ sieht nicht richtig aus.23 Sprachen, 15 Zeichen = 1,5333333
quelle
jrojcoq-]m[m]uN
wäre eine Burlesque-Version, die eine Nummer ausgibt und keine Dummy-Daten auf den Stapel schiebt, nur um sie erneut zu platzieren.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
Testen Sie es online mit der Eingabe
100 7
.Burleske
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, z
100 7 jrojcoq-]m[
gs2
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
oder als Hex-Dump:
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 SieW@!'."B !4+
sie einfach in eine Datei mit dem Namencompiled
und führen Sie sie dann mit ausecho 100 7 | python gs2.py compiled
.Die Mnemonik ist ziemlich selbsterklärend, aber hier ist, was im Stapel vor sich geht.
Ü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 bedeutet57 0e 42 2f 34 2b
, was sogar besser ist als der optimale Python.zsh
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 schreibenf() seq 1 $2 $1
und in die nächste Zeilef 100 7
.Zuerst habe ich versucht, dies in Bash zu schreiben, aber dort muss man
()
um den Codeblock herum schreiben , wief() ( seq 1 $2 $1 )
. Also wechselte ich stattdessen zu zsh.Pyth
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
.quelle
100ro7en?i
was produziert{8 15 22 29 36 43 50 57 64 71 78 85 92 99}
. Sie können noch kürzer gehen, indem Sie verwenden7mo14.+?i
.[::a]
Befehl in Python.EveryNth([1,2,3,4,5,6,7,8, 9], 3)
kehrt zurück[3, 6, 9]
und nicht[1,4,7]
, wie es bei dieser Herausforderung erforderlich war.en
Arbeiten sind anders als man es von anderen Sprachen erwarten würde. Ich verfluche den Tag, an dem ich es so umgesetzt habe: D. Übliche Problemumgehungen hierfür sind entweder diemo
oben erwähnte Verwendung oder die Verwendungco
wie in9ro3co)-]
der Produktion{1 4 7}
. PS: Ich hatte früher einen Online-Dolmetscher, aber mein neuer Hoster unterstützt CGI nicht mehr, aber ich kann möglicherweise jemanden mit einem Server mit CGI-Unterstützung davon überzeugen, den Online-Dolmetscher erneut zu hosten :)15 Sprachen, 29 Zeichen = (15/29) ≈ 0,517
Ich habe bisher meinen gesamten Code repariert. Jetzt suche ich nach anderen Sprachen.
1. Python (24 Golf)
2.> <> (Fisch) - (19 + Junk-Zeichen)
Dieses Programm geht davon aus, dass sich die Anzahl und die Schrittgröße zuvor auf dem Stapel befanden und in dieser Reihenfolge verschoben wurden. Uses
ao
Zeilenumbrüche zwischen den Zahlen zu drucken.Erläuterung (Code, Stapel nach Ausführung des vorhergehenden Codes, Kommentare):
3. APL (19 Golf)
Golf gespielt . Hier einfügen: http://ngn.github.io/apl/web/
Rufen Sie so an :
7 f 100
. Dadurch wird ein Array von 1 bis n erstellt, jedes Element mit s multipliziert, jedem Element eins hinzugefügt und dann die ersten Ceil-Elemente (n / s) verwendet.4-7. Haskell , Clean , Curry , Frege (14 Golfplätze zählen nicht)
Dieses Programm ist in Haskell, Clean, Curry und Frege gültig.
Golf gespielt. Führen Sie hier aus: https://ideone.com/Ii0pgP
8. Scotch (15 Golf)
9. Jaskell (24 Golf) - Basierend auf Dokumentation gebaut.
Filtern Sie die Liste, in der die restlichen Module 1 sind.
10. CoffeeScript (25 Golf) Laufen Sie hier
11. R (25 Golf) Laufen Sie hier: http://www.r-fiddle.org/#/fiddle?id=k3vRnCOW&version=2
12. Cobra (26 Golf)
13. S-Lang (28 Golf)
14. Boo (29)
Nicht sicher, ob die Bereichsfunktion 3 Parameter annehmen kann ...
15. Funge-98 (29, Hilfe beim Golfen?)
So nah wie möglich an meinem> <> Programm. Da es keine Stapelanweisung "drehen" gibt, musste ich stattdessen "put" und "get" verwenden. Befunge braucht wirklich einige Anweisungen zum Stapeln / Verschieben des Stapels oder sogar eine "Über" -Anweisung .
Erläuterung:
NICHT IM MOMENT VERWENDEN, ZU LANG - Meine Punktzahl wird verbessert, indem diese nicht berücksichtigt werden .
Ruby (35) Hier ausführen : http://ideone.com/yFZELR
PowerShell (38)
Perl (39) Hier ausführen : https://ideone.com/HGoleN
quelle
i
was einen Charakter antreibt . Ist es akzeptabel, dass das Programm nach erfolgreichem Abschluss seiner Ausgabe abstürzt, indem wir einen leeren Stapel platzen lassen, während wir uns mit dem Thema beschäftigen?seq.int()
. Es funktioniert genauso wierange
in Python. Dann können Sie es bis 29.4 Sprachen 51 Zeichen = (4/51) = 0,0784313725490196
Keine Ahnung, wie viele Zahlen nach dem Komma du willst, also lasse ich es einfach so.
Alle Snippets sind 51 Zeichen lang, wenn Sie alle Leerzeichen entfernen.
Arbeiten an mehr und kürzerem Code, aber es ist ein Anfang.
Log
Erste Antwort
Eingereicht Python (3.4), Lua (5.1) und Javascript.
Punktzahl: 3/51 = 0,0588235294117647
Update 1
Ruby
Score hinzugefügt: 4/51 = 0,0784313725490196.
Python 3.4
Lua 5.1
Javascript
Rubin
quelle
di _reque(s) _reque(n) gl a=1 while $a<=$n{ di $a gl a=$a+$s }
1 Sprache - 56 Zeichen = 0,01785714285
piet (2x28) -
quelle