Verwenden Sie die folgende Tabelle ( Quelle ), um Code zu schreiben, der die Namen zweier Planeten aufnimmt und den Abstand zwischen ihnen zurückgibt:
+-------------------+---------------+
| Planets | Distance (km) |
+-------------------+---------------+
| Mercury -> Venus | 50290000 |
| Venus -> Earth | 41400000 |
| Earth -> Mars | 78340000 |
| Mars -> Jupiter | 550390000 |
| Jupiter -> Saturn | 646270000 |
| Saturn -> Uranus | 1448950000 |
| Uranus -> Neptune | 1627450000 |
| Neptune -> Pluto | 1405380000 |
+-------------------+---------------+
Beispiele, Eingabe dann Ausgabe:
Mercury, Mars
170030000
Neptune, Jupiter
-3722670000
Earth, Earth
0
Beachten Sie das negative Vorzeichen, da Jupiter vor Neptun steht. Sie sind auch alle ganzen Zahlen.
Pluto muss nicht enthalten sein (hauptsächlich wegen einer seltsamen Umlaufbahn, die es schwierig macht, die Entfernung zu berechnen - diese Entfernung ist meine eigene Berechnung, aber da Pluto jetzt alle berühmt ist ...).
Mit Entfernungen zwischen Planeten meine ich Umlaufbahnen - ich erwarte kein Datum und rechne nicht damit, wo sie sich befinden.
Dies ist Code Golf, der kürzeste Code gewinnt.
Mercury, Mars -> 170030000.0
?Antworten:
CJam,
545144 BytesProbieren Sie es online im CJam-Interpreter aus .
Idee
Wir verwenden eine einfache Hash-Funktion, um alle acht Planeten zu identifizieren. Indem Sie jeden Namen als Array seiner Codepunkte betrachten, ihn von der Basis 26 in eine Ganzzahl umwandeln und das Ergebnis modulo 93 nehmen, ordnen Sie dann modulo 8, Merkur , Venus , Erde usw. 2 , 4 , 0 , 1 , 3 , 5 zu , 6 und 7 .
Nun wählen wir einen Punkt, der 320.000 km hinter Neptun liegt und berechnen die Entfernungen aller acht Planeten zu diesem Punkt. Nachdem wir vier nachgestellte Nullen gelöscht und die Planeten so neu angeordnet haben, dass sie den 8 Indizes von oben entsprechen, erhalten wir das Array
was, wenn wir jede ganze Zahl in der Basis 70 codieren, Folgendes ergibt:
Denken Sie daran, dass zwei benachbarte Ziffern
(A B)
durch ersetzt((A-1) (B+70))
werden können, und ändern Sie das Array von oben, sodass alle Ganzzahlen als druckbare ASCII-Zeichen codiert werden können:Code
quelle
Python 2,
149147142138128123119 BytesVerwenden Sie einfach eine einfache Suche, um herauszufinden, welche Entfernungen verwendet werden müssen :) Dies definiert eine anonyme Funktion. Um sie zu verwenden, müssen Sie ihr einen Namen geben.
Vielen Dank an Sp3000 für Ideen, die eine Menge Bytes gespart haben!
Richtig eingerückt und zur besseren Lesbarkeit leicht ungolfed:
Rufen Sie wie folgt an:
quelle
Prolog,
190174151 BytesVielen Dank an Fatalize für die Anleitung.
quelle
s(A, B, R)
anstatt zu schreibenR
? Für Ausgaben ist nichts angegeben, daher sollte eine Prädikatenrückgabe in Ordnung sein.g
zug(A,X):-sub_atom(A,2,2,_,B),member(B:X,[rc:0,nu:5029,rt:9169,rs:17003,pi:72042,tu:136669,an:281564,pt:444309]).
und die Beseitigung aller Fakten für Planeten. Es ist weniger cool als,=..
aber es ist kürzer, eine Schlüsselwertzuordnung zu erhaltenJavaScript (ES6),
115 bis110 ByteDies ist eine anonyme Funktion, daher müssen Sie sie in einer Variablen speichern (
f=...; f("Earth", "Mercury")
) oder als Ausdruck in Klammern verwenden ()(...)("Earth", "Mercury")
.Diese chaotischen Zeichenfolgen sind die ersten beiden Buchstaben jedes Planeten, gefolgt von der Entfernung dieses Planeten zum Merkur (geteilt durch 10000, um Platz zu sparen). Die innere Funktion
g
macht folgendes:k
),k[0]+k[1]
),Ea(\d*)
),1e4
) und gibt das Ergebnis zurück.Indem wir einen Quecksilberabstand vom anderen subtrahieren, erhalten wir den Abstand zwischen den Planeten.
quelle
btoa
haben Codepunkte unter 256, sodass ISO 8859-1 jedes Zeichen mit einem einzelnen Byte codiert.Java,
274272264 Bytes (einschließlich Pluto!)Input-Output:
Abstand und Tabbed:
quelle
int
undint[]
int i=0,j=1,k[]={};
10000
mit1e4
.e > w
Sie ein Zeichen mit dem Operator "gehe zu"while(e-->w)
for(;e--!=w;)
Python, 118 Bytes
n
ist eine Funktion, die die Entfernung von Merkur zurückgibt.Die Zeichenfolge enthält
"VeEaMaJuSaUrNe"
die ersten beiden Zeichen aller Planetennamen mit Ausnahme von Merkur .find
kann Merkur nicht finden und gibt -1 zurück. -1/2 ist immer noch -1, also ist dies das letzte Element im Tupel, das 0 ist.Einfacher Testcode:
quelle
APL,
979585 BytesDies erzeugt eine unbenannte dyadische Funktion, die den Ursprungsplaneten als linkes Argument und den Zielplaneten als rechtes Argument verwendet.
Sie können es online ausprobieren !
quelle
J-- , 226 Bytes
Ich denke nicht, dass dies zählt, da ich die Sprache gemacht habe, während die Frage offen war, aber es war hauptsächlich ein Test, wie klein ich Java-Code komprimieren konnte. Dies ist völlig und vollständig basiert weg DeadChex Antwort .
So verwenden Sie es:
quelle
Pyth -
5953 BytesCodiert die Entfernung in Unicode-Codepunkten.
Die Namenssuche ist ein bisschen cool, weil sie sich herumschleift. Vielen Dank an @Dennis für die Empfehlung von Index 14 als kollisionsfreies Nachschlagen!
Probieren Sie es hier online .
quelle
Bash, 140 Bytes
quelle
CoffeeScript,
183180 BytesNicht abgeschlossen:
quelle
Ruby, 168 Bytes
Es ist als Skript konzipiert, das von der Kommandozeile aus ausgeführt werden soll
ARGV
. Rennen wiequelle
Haskell,
160,158,157 BytesAnwendungsbeispiel:
So funktioniert es: Ich definiere einen neuen Datentyp,
P
bei dem die Konstruktornamen die Namen der Planeten sind. Ich stelle es auch in dieEnum
Klasse, dh ich erhalte eine Zuordnung zu ganzen Zahlen überfromEnum
(in der Reihenfolge der Definition beginnend mitMercury
->0
). Diese Ganzzahl kann als Index für die Entfernungsliste verwendet werden.Edit: @Kritzefitz hat zwei Bytes zum Speichern gefunden und @Alchymist ein weiteres. Vielen Dank!
quelle
fromEnum x
und zwei Bytes speichern.Julia,
206203190 BytesDadurch wird eine unbenannte Funktion erstellt, die zwei Zeichenfolgen akzeptiert und eine Ganzzahl zurückgibt. Um es zu nennen, geben Sie ihm einen Namen.
Ungolfed + Erklärung:
quelle
Java,
257228 Bytesstatic long d(String...s){...}
löst die Herausforderung. Für die Eingabe sind Namen von Planeten erforderlich, die exakt mit den Namen der Konstanten der Aufzählung übereinstimmen. Ich finde es toll, wie Java eine Methode zur Konvertierung von Zeichenfolgen in Aufzählungen für mich <3 bietetVerwendung:
Z.d("Mercury","Pluto")
kehrt zurück5848470000
Z.d("Pluto","Mercury")
kehrt zurück-5848470000
Z.d("Uranus","Neptune")
kehrt zurück1627450000
Z.d("Mars","Pluto")
kehrt zurück5678440000
quelle
C (gcc) Pre-Prozessor-Makro, 146 Bytes
Probieren Sie es online!
quelle