Würfeln
Also habe ich vor einiger Zeit gewürfelt und an eine Herausforderung gedacht.
Wenn der Würfel ein aus der Eingabe entnommenes Netz und eine Liste von Zügen enthält, finden Sie das Quadrat unten am Ende.
Ich werde dieses Bild für die Beispiele hier verwenden.
Eingang
Sie nehmen eine Zeichenfolge mit einer Liste von Zügen auf. Die Zeichenfolge enthält nur die ASCII-Großbuchstaben N, S, W und E. Diese entsprechen dem Rollen des Würfels um einen Schritt in diese Richtung.
Im Bild würde ein N die Unterseite zu einer 6 machen. In diesem Bild ist Norden von der Kamera entfernt, Süden ist in Richtung, Osten ist rechts und Westen ist links.
Sie können auch eine Zeichenfolge im folgenden Format eingeben: 1P 2P 3P 4P 5P 6P, wobei jedes P eine Position von N, S, W, E, T und B ist. T & B sind unten und oben.
Die Zahlen sind das Gesicht mit dieser Nummer, und der Buchstabe stellt die Position dar, an der sich das Gesicht befindet. Wenn es nicht klar ist, wird das Netz immer nach der Nummer sortiert, also 1P 2P 3P 4P 5P 6P, niemals 2B 1T 3N 4S 5W 6E.
Die Position im Bild ist 1S 2B 3E 4W 5T 6N.
Ausgabe
Ihr Programm sollte eine Zahl ausgeben, die die Unterseite darstellt.
Testfälle
(nothing), 1S 2B 3E 4W 5T 6N -> 2
N, 1S 2B 3E 4W 5T 6N -> 6
NS, 1S 2B 3E 4W 5T 6N -> 2
NWS, 1S 2B 3E 4W 5T 6N -> 2
NWSNWS, 1S 2B 3E 4W 5T 6N -> 2
NWSS, 1S 2B 3E 4W 5T 6N -> 3
NNNNNN, 1S 2B 3E 4W 5T 6N -> 5
SNWEEWS, 1N 2T 3E 4W 5B 6S, 6
SNEEWS, 1N 2T 3W 4S 5B 6E, 4
Andere Regeln
Sie können auch annehmen, dass sich der Würfel auf einer unendlichen flachen Ebene befindet, wahrscheinlich mit irgendeiner Reibung.
Standard-Schlupflöcher sind nicht erlaubt, obwohl ich keine finde.
Bei ungültiger Eingabe kann Ihr Code alles tun, außer die Apokalypse zu starten.
Da dieses Programm auf meine Würfel passen sollte, sollte es so klein wie möglich sein. Ich zähle in Bytes, mit einigen Ausnahmen für Sprachen wie Ordner .
(nothing) -> 2
, dass kein Netz bereitgestellt wird, oder sollte irgendwo ein Netz vorhanden sein?Antworten:
CJam,
43403734 BytesVielen Dank an Dennis, der mir geholfen hat, 6 Bytes zu sparen.
Teste es hier.
Erläuterung
Im Folgenden finden Sie eine praktische Tabelle zur Zuordnung von Anweisungszeichen zu Permutationen:
Ich habe die
5%
Spalte eingefügt, da dies implizit durch die zyklische Indizierung in der Zeichenfolge bewirkt wird. Für die vier Permutationen können wir sehen, dass jede von ihnen zwei (gegenüberliegende) Seiten unberührt lässt und die anderen vier zyklisch permutiert.quelle
Ĕ
ist276
.6e!
gibt Ihnen eine Liste aller 720 Permutationen von[0 1 2 3 4 5]
. Und das ist276
zufällig der Index von[2 1 4 0 3 5]
in dieser Liste.Perl,
166158154144139135134132116 Bytesbeinhaltet +1 für
-p
Mit Kommentaren:
Eingabedatei:
Laufen Sie mit
Ausgabe:
262223564
Update 158 Durch die Verwendung
$N, $S, $E, $W
globaler Variablen werden%t = {N=>, S=>, E=>, $W=>}
8 Byte gespart.Update 154 Da die Voraussetzung ist , dass das Programm Ausgabe eine Zahl, nicht den Druck des Newline
print "$h{B}\n"
4 Bytes speichert:print $h{B}
.update 144 Sparen Sie dabei 10 Bytes
Anstatt von
update 139 Verschieben Sie den regulären Ausdruck für den Befehl ans Ende, um eine Variable zu entfernen und 6 Bytes zu sparen.
update 135 Sparen Sie 4 Bytes ein
@l[0..3,0]
statt@l[1..3],$l[0]
.Update 134 Sparen Sie 1 Byte, indem Sie die Zuweisung
@l=split//,$$_
als Wert verwenden.update 132 Sparen Sie 2 Bytes, indem Sie
/^\w+/ && $&
anstelle von/^(\w+)/ && $1
.Update 129 Sparen Sie 3 Bytes, indem Sie
-p
anstelle von-n
$ _ für den Druck verwenden und zuweisen.update 116 Sparen Sie 13 Bytes durch Umschreiben
split//, /^\w+/ && $&
in/^\w+/g
.quelle
Python 2, 204 Bytes
Ich dachte, es wäre Zeit, auf meine eigene Frage zu antworten.
Nicht sehr kurz, aber funktioniert.
Rennen wie:
Edit : Bytes falsch gezählt. Jetzt länger :(
quelle