Lancer les dés
Donc, je jetais des dés il y a un moment et j'ai pensé à un défi.
Étant donné le cube avec un filet pris en entrée et une liste de mouvements, trouvez le carré en bas à la fin.
J'utiliserai cette image pour les exemples ici.
Contribution
Vous prenez une chaîne avec une liste de mouvements. La chaîne contient uniquement les lettres majuscules ASCII N, S, W et E. Celles-ci correspondent au roulement du cube d'un pas dans cette direction.
Dans l'image, un N ferait la face inférieure un 6. Dans cette image, le Nord est loin de la caméra, le Sud est vers, l'Est est à droite et l'Ouest est à gauche.
Vous prenez également une chaîne au format suivant: 1P 2P 3P 4P 5P 6P, où chaque P est une position de N, S, W, E, T et B. T & B sont en bas et en haut.
Les chiffres sont le visage avec ce numéro, et la lettre représente la position du visage. Dans le cas où ce n'est pas clair, le filet sera toujours ordonné par le numéro, donc 1P 2P 3P 4P 5P 6P, jamais 2B 1T 3N 4S 5W 6E.
La position dans l'image est 1S 2B 3E 4W 5T 6N.
Production
Votre programme devrait sortir un nombre représentant le côté inférieur.
Cas de test
(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
Autres règles
Vous pouvez également supposer que le cube est sur un plan plat infini, probablement avec une sorte de friction.
Les failles standard interdites, même si je n'en trouve aucune.
Pour une entrée invalide, votre code peut faire autre chose que démarrer l'apocalypse.
Parce que ce programme devrait tenir sur mes dés, il devrait être aussi petit que possible. Je compte en octets, à quelques exceptions près pour les langues comme les dossiers .
(nothing) -> 2
signifie-t-il qu'aucun filet n'est fourni, ou devrait-il y avoir un filet quelque part?Réponses:
CJam,
43403734 octetsMerci à Dennis de m'avoir aidé à économiser 6 octets.
Testez-le ici.
Explication
En ce qui concerne le fonctionnement du mappage des caractères d'instruction aux permutations, voici un tableau pratique:
J'ai inclus la
5%
colonne parce que c'est ce que fait l'indexation cyclique dans la chaîne implicitement. Pour les quatre permutations, nous pouvons voir que chacune d'elles laisse deux côtés (opposés) intacts et permute cycliquement les quatre autres.la source
Ĕ
est276
.6e!
vous donne une liste de toutes les 720 permutations de[0 1 2 3 4 5]
. Et276
se trouve être l'index de[2 1 4 0 3 5]
cette liste.Perl,
166158154 154144139135134 134132116 bytescomprend +1 pour
-p
Avec commentaires:
Fichier d'entrée:
Courir avec
Production:
262223564
update 158 L' utilisation de
$N, $S, $E, $W
variables globales au lieu d'%t = {N=>, S=>, E=>, $W=>}
économiser 8 octets.mise à jour 154 Étant donné que l'exigence est que la sortie du programme un numéro, pas l' impression de la nouvelle ligne
print "$h{B}\n"
permet d' économiser 4 octets:print $h{B}
.mise à jour 144 Économisez 10 octets en faisant
au lieu de
update 139 Déplacez le regex de la commande à la fin pour éliminer une variable, économisant 6 octets.
mise à jour 135 Enregistrez 4 octets sur
@l[0..3,0]
au lieu de@l[1..3],$l[0]
.update 134 Enregistrez 1 octet en utilisant l'affectation
@l=split//,$$_
comme valeur.mise à jour 132 Enregistrez 2 octets en faisant
/^\w+/ && $&
au lieu de/^(\w+)/ && $1
.mettre à jour 129 Enregistrer 3 octets en utilisant au
-p
lieu de-n
et attribuer $ _ pour l' impression.mise à jour 116 Enregistrer 13 octets en réécrivant
split//, /^\w+/ && $&
dans/^\w+/g
.la source
Python 2, 204 octets
J'ai pensé qu'il était temps de répondre à ma propre question.
Pas très court, mais ça marche.
Courir comme:
Modifier : nombre d'octets incorrect. Maintenant plus longtemps. :(
la source