Rzucanie kostką
Więc rzuciłem kostką jakiś czas temu i pomyślałem o wyzwaniu.
Biorąc pod uwagę sześcian z siatką pobraną z danych wejściowych i listą ruchów, znajdź kwadrat na dole na końcu.
Użyję tego obrazu do przykładów tutaj.
Wejście
Bierzesz ciąg z listą ruchów. Ciąg zawiera tylko duże litery ASCII N, S, W i E. Odpowiadają one zwinięciu kostki o jeden krok w tym kierunku.
Na zdjęciu jedna litera N sprawiłaby, że dolna ściana ma wartość 6. Na tym zdjęciu północ jest z dala od kamery, południe jest w kierunku, wschód jest w prawo, a zachód jest w lewo.
Możesz również wziąć ciąg w następującym formacie: 1P 2P 3P 4P 5P 6P, gdzie każdy P jest pozycją z N, S, W, E, T i B. T & B są na dole i na górze.
Liczby są twarzą z tym numerem, a litera oznacza pozycję, w której znajduje się twarz. W przypadku, gdy nie jest jasne, sieć zawsze będzie uporządkowana według numeru, więc 1P 2P 3P 4P 5P 6P, nigdy 2B 1T 3N 4S 5W 6E.
Pozycja na zdjęciu to 1S 2B 3E 4W 5T 6N.
Wynik
Twój program powinien wypisać liczbę reprezentującą dolną stronę.
Przypadki testowe
(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
Inne zasady
Możesz również założyć, że sześcian znajduje się na nieskończonej płaskiej płaszczyźnie, prawdopodobnie z pewnym rodzajem tarcia.
Standardowe luki zabronione, chociaż nie mogę ich znaleźć.
W przypadku nieprawidłowych danych wejściowych kod może zrobić wszystko oprócz rozpoczęcia apokalipsy.
Ponieważ ten program powinien pasować na moje kości, powinien być jak najmniejszy. Liczę w bajtach, z pewnymi wyjątkami dla języków takich jak Foldery .
(nothing) -> 2
oznacza, że nie ma siatki, czy może gdzieś tam jest siatka?