Ziel einer Rosetta Stone Challenge ist es, Lösungen in möglichst vielen Sprachen zu schreiben. Zeigen Sie Ihre Programmiervielsprachigkeit!
Die Herausforderung
Ihre Herausforderung besteht darin, ein Programm zu implementieren, das eine Liste von Zahlen eingibt und die Regel ausgibt, die zum Generieren jeder aufeinanderfolgenden Zahl in der Reihe in so vielen Programmiersprachen wie möglich verwendet wird . Sie dürfen jede Art von Standardbibliotheksfunktion verwenden, die Ihre Sprache hat, da dies meistens ein Sprachschaufenster ist.
Was ist eine "Serie"?
Eine Reihe ist eine geordnete Liste von ganzen Zahlen. Jede fortlaufende Nummer in der Serie kann durch Anwenden einer einfachen Regel auf die vorherige Nummer in der Serie generiert werden. Bei dieser Herausforderung besteht die Regel darin, die Zahl mit einer Konstanten zu multiplizieren und dann eine zweite Konstante hinzuzufügen. Beide Konstanten können beliebige Ganzzahlen sein. Das Ziel dieser Herausforderung ist die Ausgabe dieser beiden Konstanten.
Für die Serie 2 5 11
kann die Regel als geschrieben werden 2 1
. Dies bedeutet, dass jede Zahl die vorherige Zahl ist, mal 2 plus 1. Eine wichtige Tatsache ist, dass die meisten Serien genau eine Regel haben. Einige Serien haben entweder eine unendliche Zahl oder gar keine, aber Sie müssen sich nicht damit befassen.
Eingang
Die Eingabe ist eine Liste von drei verschiedenen Ganzzahlen, die die Zahlen in der Sequenz sind. Die Zahlen können entweder durch Leerzeichen, Kommas oder Zeilenumbrüche getrennt sein. Bitte geben Sie an, welche. Ich werde bei dieser Einschränkung flexibel sein, da bestimmte Sprachen Eingabebeschränkungen aufweisen können. Hier sind vier Beispiele für Eingaben:
0 7 14
2 5 11
2 0 -4
5 -19 77
Ausgabe
Es werden zwei Ganzzahlen ausgegeben, die die Regel darstellen, die zum Generieren der Serie verwendet wird. Die erste Zahl ist die multiplikative Konstante, während die zweite Zahl die additive Konstante ist. Die Ausgabe kann durch Leerzeichen, Kommas oder Zeilenumbrüche getrennt formatiert werden. Auch bei dieser Einschränkung bin ich flexibel. Hier sind die entsprechenden Beispiele für die Ausgabe:
1 7
2 1
2 -4
-4 1
Das objektiv gewinnende Kriterium
Als objektives Gewinnkriterium gilt: Jede Sprache stellt einen eigenen Wettbewerb dar, wer den kürzesten Beitrag schreiben kann, aber der Gesamtsieger wäre die Person, die die meisten dieser Teilwettbewerbe gewinnt. Dies bedeutet, dass eine Person, die in vielen ungewöhnlichen Sprachen antwortet, einen Vorteil erzielen kann. Code-Golf ist vor allem dann ein Tiebreak, wenn es mehr als eine Lösung in einer Sprache gibt: Die Person mit dem kürzesten Programm bekommt für diese Sprache Anerkennung.
Regeln, Einschränkungen und Hinweise
Ihr Programm kann in jeder Sprache geschrieben werden, die vor dem 9. April 2012 existierte. Ich muss mich auch darauf verlassen, dass die Community einige Antworten validiert, die in einer der ungewöhnlicheren / esoterischeren Sprachen geschrieben wurden, da es unwahrscheinlich ist, dass ich sie testen kann Sie.
Aktuelle Rangliste
Dieser Abschnitt wird regelmäßig aktualisiert, um die Anzahl der Sprachen und die jeweils führenden Personen anzuzeigen.
- AWK (32) - Mellamokb
- Bash (31) - Peter Taylor
- Befunge (29) - Howard
- bc (39) - Kernigh
- Gehirnfick (174) - CMP
- C (78) - 10n3_shArk
- C ++ (96) - links herum
- Common Lisp (88) - Kernigh
- Cray Chapel (59) - Kyle Kanos
- csh (86) - Kernigh
- Cuda (301) - links in der Nähe
- dc (30) - kernigh
- DOS BATCH (54) - Mellamokb
- Element (27) - Howard
- es (95) - Kernigh
- Faktor (138) - Kernigh
- Felix (86) - kirbyfan64sos
- Fortran (44) - Kyle Kanos
- Geh (101) - Howard
- GolfScript (16) - Howard
- Golflua (44) - Kyle Kanos
- Haskell (35) - links in der Nähe
- J (23) - Gareth
- Java (141) - Howard
- JavaScript (47) - mellamokb
- Julia (71) - ML
- Lua (51) - Howard
- Mercury (319) - links herum
- MoonScript (48) - kirbyfan64sos
- Nimrod (146) - links herum
- Eule (22) - res
- Pascal (88) - links herum
- Perl (57) - Gareth
- PHP (61) - Mellamokb
- PicoLisp (72) - Kernigh
- Piet (56) - ML
- PostScript (61) - Howard
- Python (40) - Howard
- Q (36) -Tmartin
- QBasic (34) -Mellamokb
- R (50) - res
- Ruby (44) - Howard
- Scala (102) - Gareth
- SQL (57) - Aman ZeeK Verma
- TI-83 BASIC (25) - Mellamokb
- Unbegrenzte Registermaschine (285) - Paxinum
- VBA (57) - Gaffi
- Leerzeichen (123) - res
- zsh (62) - Kernigh
Aktuelle Benutzerrankings
Gleiche Ränge werden alphabetisch sortiert.
Howard (9): Befunge (29), Element (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
Kernigh (8): bc (39), Common Lisp (88), csh (86), dc (30), es (95), Faktor (138), PicoLisp (72), zsh (62)
links um (6): C ++ (96), Cuda (301), Haskell (35), Mercury (319), Nimrod (146), Pascal (88)
Mellamokb (6): AWK (32), DOS BATCH (54), JavaScript (47), PHP (61), QBasic (34), TI-83 BASIC (41)
Gareth (3): J (23), Perl (57), Scala (102)
Kyle Kanos (3): Cray Chapel (59), Fortran (44), Golflua (44)
res (3): Eule (22), R (50), Leerzeichen (123)
kirbyfan64sos (2): Felix (86), MoonScript (48)
ML (2): Julia (71), Piet (56)
Aman Zeek Verma (1): SQL (57)
CMP (1): Brainfuck (174)
Gaffi (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): Unbegrenzte Registermaschine (285)
Peter Taylor (1): Bash (31)
tmartin (1): Q (36)
quelle
code-golf
und verdientcode-challenge
.Antworten:
GolfScript, 16 Zeichen
Die Eingabe erfolgt als durch Leerzeichen getrennte Liste.
JavaScript, 56 Zeichen
Die Eingabe erfolgt bei Aufforderung.
Ruby, 44 Zeichen
Die Eingabe erfolgt hier als kommagetrennte Liste.
Python, 40 Zeichen
Die Eingabe wird erneut durch Kommas getrennt.
Java, 141 Zeichen
Eingabe durch Zeilenvorschub getrennt.
Lua, 51 Zeichen
Eingabe durch Zeilenvorschub getrennt.
Go, 101 Zeichen
Eingabe durch Zeilenvorschub getrennt.
Fortran, 90 Zeichen
Eingabe durch Zeilenvorschub getrennt.
Befunge, 29 Zeichen
PostScript, 61 Zeichen
Eule, 23 Zeichen
Eingabe durch Zeilenvorschub getrennt.
Element , 27 Zeichen
Eingabe durch Zeilenvorschub getrennt.
quelle
Brainfuck - 174
Piet - 82?
Ich bin mir nicht sicher, wie ich hier Golf messen soll. Ich werde mit der Gesamtbildgröße (in Codels) gehen. Meine ist 41x2:
Befunge - 34
Englisch - 278
Ich bin mir nicht sicher, ob das zählt, dachte aber, ich würde es versuchen. Es ist bemerkenswert schwierig, auch einen einfachen Algorithmus genau zu beschreiben. Ich wünsche mir, dass Englisch eine Art Gruppierungssymbol unterstützt, um den Vorrang einzurichten.
quelle
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
Die Lösung sollte sein-4 1
QBasic, 42
Benötigt Eingabe mit Komma, Ausgabe mit Leerzeichen (ist das in Ordnung?)
Mercury, 319
Haskell,
8581Jetzt Eingaben mit Leerzeichen, Ausgaben mit Zeilenumbrüchen.
C 80
C ++, 96
Nimrod, 146
Eingabe mit Zeilenumbrüchen, Ausgabe mit Komma.
Dieser zählt nicht, aber ich glaube, dass er irgendwie noch passt:
Mathematischer Satz, 713 Zeichen von LaTeX
Während wir
:=
Definitionen schreiben ...Pascal,
9088Cuda, 301
quelle
m
und wiederverwendenc
, und zwei weitere, indem Siec-=b;c/=b-a;
anstelle von verwendenc=(c-b)/(b-a);
.scanf()
Formatzeichenfolge.AWK, 35 Zeichen
2 0 -4
bc, 39 Zeichen
z=f(2, 0, -4)
bc
Ausdruck. Nach dembc
Lesen der Quelldatei wird die Standardeingabe gelesen. Aus diesem Grund muss die Eingabe wie ein Funktionsaufruf aussehen.bc
, das nach dem einen Zeilenumbruch benötigt{
.Common Lisp, 88 Zeichen
2 0 -4
csh, 86 zeichen
2 0 -4
csh
ist die einzige Sprache, für die ich Zeilenumbruch am Ende der Datei zähle. Dies liegt daran, dasscsh
der letzte Befehl nur ausgeführt wird, wenn eine neue Zeile vorhanden ist.set i=($<)
funktioniert nicht, weil$<
es keine wortteilung gibt.Gleichstrom, 30 Zeichen
2 0 _4
wo_
ist der Unterstrich.es, 95 Zeichen
2 0 -4
es
ist die erweiterbare Schale von Paul Haahr und Byron Rakitzis.Faktor 138 Zeichen
2 0 -4
PicoLisp,
7472 Zeichen2 0 -4
a(read)b(read)c(read)
von verlorenr read a(r)b(r)c(r)
.TI-83 BASIC,
6361 Zeichen2
ENTER0
ENTER¯4
ENTER, wobei¯
das unäre Minus des Rechners ist.→
(der rechte Pfeil) zählt als U + 2192. Zum Beispiel zählt der RechnerInput A
als 2 Zeichen, aber ich zähleInput A
als 7 Zeichen. Ich zähle auch:
als 1 Charakter.zsh, 62 Zeichen
2 0 -4
quelle
AWK (32)
Demo: http://ideone.com/kp0Dj
Bash (38)
Demo: http://ideone.com/tzFi8
DOS / BATCH (54
55)Nimmt Parameter als durch Leerzeichen getrennte Liste von Argumenten.
Java (143
185)JavaScript (48
6167)Demo: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Demo: http://ideone.com/CEgke
QBasic (34)
TI-83 Basic (25
41)Ja, die fehlende rechte Klammer ist absichtlich. Es ist eine bekannte Optimierungstechnik, dass das Schließen der Klammern vor einer STO-Operation in der TI-83 Basic-Programmierung nicht erforderlich ist.
quelle
p
definiert ist. Sagt die JS-Spezifikation, dass Funktionsargumente ausgewertet werden sollten, bevor die Funktion aufgelöst wird?Leerzeichen, 123
E / A ist durch Zeilenumbrüche getrennt. (Um den Quellcode zu erhalten, rufen Sie den Bearbeitungsmodus auf und kopieren Sie das Leerzeichen zwischen den vorformatierten Tags. Alternativ können Sie das Online- Beispiel bei Ideone lesen .)
Erklärung, wobei S, T, L für Leerzeichen, Tabulator, Zeilenvorschub steht:
R 50
I / O ist durch Leerzeichen getrennt.
Eule
--- 22 ---
E / A ist durch Zeilenumbrüche getrennt.
--- 19 --- (wenn diese Version erlaubt ist; aber ich denke es betrügt, da der \ ausführbarer Code ist):
E / A ist durch Leerzeichen getrennt. Befehlszeilenverwendung:
owl prog 5 19\ 77
(das \ fungiert in Owl als unärmeres Minus für Postfix).quelle
J, 23 Zeichen
Verwendung:
Negative Zahlen werden in J durch Unterstriche dargestellt.
PHP, 88 Zeichen
Scala, 102 Zeichen
Perl, 57 Zeichen
Benötigt die Option '-p', für die ich 2 Zeichen hinzugefügt habe. Nimmt an, dass die Eingabe gültig ist, um einige Zeichen zu speichern.
Alle meine Antworten enthalten durch Leerzeichen getrennte Zahlen.
quelle
1!:1]3
rechts vom Ausdruck wird die Eingabe von STDIN gelesen. Ich denke, es wurde über Meta diskutiert oder in Kommentaren zu einigen Antworten darüber, ob dies erlaubt sein sollte oder nicht. Ich bin etwas ambivalent - es macht mir Spaß herauszufinden, wie ich J dazu bringen kann, auf kleinstem Raum das zu tun, was ich will, und ich nehme die 6-Zeichen-Strafe für die Eingabe von STDIN, wenn es das ist, was jeder will.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
scheint im Konsolenmodus in Ordnung zu sein.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Wenn die Eingabe als Argumente übergeben wird:Nun, wie @mellamokb vorschlug, mit $ n = $ argv:C
77, 78^ funktioniert nicht so, hier ist das Zeug: [Danke an @ugoren, dass er es zur Kenntnis genommen hat]quelle
fscanf
undscanf
ohne Leerzeichen konntest. Genial!$argv
, dh$n=$argv
am Anfang?scanf
zuerst getan werden, dannd=..
dannb-d*a
?VBA, 57 Zeichen
( Dies ist im Grunde das Gleiche wie bei den anderen 'BASIC'-Funktionen, aber ich habe dort draußen bereits keine VBA-Einreichungen gesehen. )
quelle
Debug.?y;b-a*y
Bash (42 Zeichen)
Pure Bash:
Bash (31 Zeichen)
Beschuss mit etwas anderem:
(Basierend auf Howards OWL-Implementierung )
quelle
Dies ist (nicht optimierter) Code für die unlimitierte Registermaschine, der hier beschrieben wird: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
Der Eingang sollte sich in den Registern 1,2 und 3 befinden, und der Ausgang sollte sich nach Abschluss des Programms in den Registern 1 und 2 befinden. Nicht negative und nicht ganzzahlige Zahlen werden nicht behandelt, aber die Eingaben 0,7,14 und 2,5,11 werden korrekt behandelt.
Zero[8] Trans[2,11] Jump[3,11,7] Succ[11] Succ[8] Jump[11,11,3] Zero[5] Trans[1,12] Jump[2,12,13] Succ[12] Succ[5] Jump[12,12,9] Zero[17] Trans[8,13] Jump[13,17,25] Zero[16] Trans[5,14] Jump[13,14,22] Succ[14] Succ[16] Jump[14,14,18] Succ[9] Trans[16,13] Jump[17,17,15] Zero[6] Zero[20] Jump[9,6,40] Zero[7] Trans[1,21] Jump[20,7,36] Succ[21] Trans[21,19] Trans[19,21] Succ[7] Jump[7,7,30] Trans[21,18] Trans[18,20] Succ[6] Jump[6,6,27] Trans[20,4] Zero[10] Trans[4,15] Jump[2,15,47] Succ[15] Succ[10] Jump[15,15,43] Trans[9,1] Trans[10,2]
BEARBEITEN: durch Entfernen von Klammern und Kürzen von Anweisungsnamen:
URM 285
Z8 T2,11 J3,11,7 S11 S8 J11,11,3 Z5 T1,12 J2,12,13 S12 S5 J12,12,9 Z17 T8,13 J13,17,25 Z16 T5,14 J13,14,22 S14 S16 J14,14,18 S9 T16,13 J17,17,15 Z6 Z20 J9,6,40 Z7 T1,21 J20,7,36 S21 T21,19 T19,21 S7 J7,7,30 T21,18 T18,20 S6 J6,6,27 T20,4 Z10 T4,15 J2,15,47 S15 S10 J15,15,43 T9,1 T10,2
quelle
DOS-BATCH, 98
Eingabe in separaten Zeilen
Bash, 51
Beispiel:
sh prog.sh 2 0 -4
(durch Leerzeichen getrennte Argumente)Perl, 84
Java, 297
Durch Leerzeichen getrennte Eingabe, durch Leerzeichen getrennte Ausgabe.
SQL, 57
Dies ist ein trauriger Eintrag, aber "nur" löst den Zweck. Die Abfrage bindet die Eingabe zur Laufzeit. 1,2,3 sind Variablen in der Reihenfolge der Eingabe.
quelle
bash
Lösung bereits übertroffen haben , wollte ich nur vorschlagen, dass Sie all diese zusätzlichen Leerzeichen entfernen und 6 Zeichen speichern könnten.Q, 36
Verwendung
quelle
Fortran 44
Die Eingabe erfolgt in einer einzelnen Zeile (durch Kommas oder Leerzeichen getrennt).
Cray Chapel 59
Die Eingabe erfolgt in einer einzelnen Zeile, keine neue Zeile (fügen Sie dazu 2 Zeichen hinzu, indem Sie
writeln
anstelle von verwendenwrite
).Golflua 44
Eingabe mit Zeilenumbruch, Ausgabe mit Leerzeichen
quelle
Julia, 71 Zeichen
Durch Leerzeichen getrennte Ein- und Ausgabe.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Beispiel für Ein- und Ausgabe:
Piet,
866056 Codels (14x4), Codelgröße 10 für bessere SichtbarkeitIch könnte die Anzahl der Codels sogar um satte 35% reduzieren. Ich habe kein so gutes Ergebnis erwartet. Das Programm rückwärts zu programmieren war, wie ich erwartet hatte, ziemlich erfolgreich. Ich bezweifle, dass es kürzer sein kann, aber ich wäre wirklich interessiert, wenn jemand eine kleinere Lösung finden könnte.
Die Abfrage gibt nicht an, ob das Programm nach der Anzeige des Ergebnisses angehalten werden muss, sodass mein kleinstes (56 Codel) Programm gültig sein sollte. Nachdem das Ergebnis angezeigt wurde, kehrt es zum Anfang zurück und fordert ein neues Triplett von ganzen Zahlen an. Aufgrund der engen Packung gibt es keinen Platz für die Ausgabe von zwei Zeilenumbrüchen, aber das ist mit dem npiet-Interpreter kein Problem, da er immer ein '?' wenn es auf die Eingabe wartet.
Es gibt zwei mögliche Größen, um eine Loop-Version zu erstellen, aber eine Version, die nur einmal ausgeführt wird, ist nur in einem Programm möglich, das mindestens 64 Codel (16x4) groß ist. Die folgenden Versionen zeigen den Grund. Vielleicht ist es auch für diejenigen interessant, die mit Piet vertraut sind.
Die letzte, dichteste 56-Codel-Version mit einer Schleife :
Zweite Version (60 Codels), mit einer Schleife
Wenn die 56-Codel-Version gegen die Regeln verstößt, ist hier die endgültige 64-Codel-Version, die nur einmal ausgeführt wird :
Meine erste Version (86 Codels)
Eingabe und Ausgabe sind durch Zeilenumbrüche getrennt.
Beispiel für Ein- und Ausgabe:
Für geloopte Versionen, die etwas hässlicher aussehen:
Ich habe Newline als Trennzeichen gewählt, weil die Codierung von ASCII 10 (\ n) offensichtlich nur 7 Codels benötigt, im Vergleich zu ASCII 32 (), das 8 Codels benötigt, oder sogar ASCII 40 (,), das 9 Codels benötigt.
Das Zurückcodieren vom Ergebnis zur ersten Eingabe ist eine gute Möglichkeit, den Codelverbrauch für ROL-Operationen zu reduzieren. Die Stapelreihenfolge am Anfang und am Ende ist bekannt, der Rest wird einfach von Hand erledigt.
Hier ist eine Textversion des 64-Codel-Programms (mit Stapel) in meiner erfundenen Kurzform. Die kürzeren Programme werden nicht beendet, sondern kehren zum Anfang zurück.
quelle
MoonScript (48 Zeichen, durch Zeilenumbrüche und Leerzeichen getrennte Ausgabe)
Felix (86 Zeichen, durch Zeilenumbrüche und durch Kommas getrennte Ausgabe)
Julia (84 Zeichen, durch Leerzeichen begrenzte Eingabe, durch Leerzeichen begrenzte Ausgabe)
quelle
julia file.jl
den gleichen Fehler, wenn Sie es in eine Datei einfügen und über ausführen ?