Tirando los dados
Entonces, estaba tirando dados hace un tiempo y pensé en un desafío.
Dado el cubo con una red tomada de la entrada y una lista de movimientos, encuentre el cuadrado en la parte inferior al final.
Usaré esta imagen para los ejemplos aquí.
Entrada
Usted toma una cadena con una lista de movimientos. La cadena contiene solo las letras mayúsculas ASCII N, S, W y E. Estas corresponden a rodar el cubo un paso en esa dirección.
En la imagen, una N colocaría la cara inferior como 6. En esta imagen, el Norte está lejos de la cámara, el Sur está hacia, el Este está a la derecha y el Oeste está a la izquierda.
También toma una cadena en el siguiente formato: 1P 2P 3P 4P 5P 6P, donde cada P es una posición de N, S, W, E, T y B. T y B son inferiores y superiores.
Los números son la cara con ese número, y la letra representa la posición en la que se encuentra la cara. En caso de que no esté claro, la red siempre estará ordenada por el número, por lo que 1P 2P 3P 4P 5P 6P, nunca 2B 1T 3N 4S 5W 6E.
La posición en la imagen es 1S 2B 3E 4W 5T 6N.
Salida
Su programa debería generar un número que represente el lado inferior.
Casos de prueba
(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
Otras reglas
También puede suponer que el cubo está en un plano plano infinito, probablemente con algún tipo de fricción.
Lagunas estándar no permitidas, aunque no puedo encontrar ninguna.
Para una entrada no válida, su código puede hacer cualquier cosa excepto iniciar el apocalipsis.
Debido a que este programa debe caber en mis dados, debe ser lo más pequeño posible. Cuento en bytes, con algunas excepciones para idiomas como Carpetas .
(nothing) -> 2
significa que no se proporciona ninguna red, o debería haber una red allí en alguna parte?