Grupa dwuścienna jest grupą symetrii kwadratu, to znaczy ruchami, które przekształcają kwadrat w siebie poprzez obroty i odbicia. Składa się z 8 elementów: obrotu o 0, 90, 180 i 270 stopni oraz odbić w poprzek osi poziomej, pionowej i dwóch przekątnych.
Wszystkie zdjęcia pochodzą z tej uroczej strony autorstwa Larry Riddle'a.
Wyzwanie polega na skomponowaniu tych ruchów: biorąc pod uwagę dwa ruchy, wygeneruj ruch, który jest równoważny z wykonaniem ich jeden po drugim. Na przykład wykonanie ruchu 7, po którym następuje ruch 4, jest tym samym, co wykonanie ruchu 5.
Zauważ, że zmiana kolejności na ruch 4, a następnie ruch 7 powoduje ruch 6.
Wyniki zestawiono w tabeli poniżej; to jest stół Cayleya grupy . Na przykład dane wejściowe powinny dawać wynik .
Wyzwanie
Twoim celem jest wdrożenie tej operacji w jak najmniejszej liczbie bajtów, ale oprócz kodu wybierasz także etykiety reprezentujące ruchy od 1 do 8. Etykiety muszą mieć 8 różnych liczb od 0 do 255 , lub 8 -bajtowe znaki, które reprezentują ich punkty kodowe.
Twój kod otrzyma dwie etykiety z 8, które wybrałeś i musi wypisać etykietę odpowiadającą ich składowi w dwuściennej grupie .
Przykład
Powiedzmy, że wybrałeś znaki C, O, M, P, U, T, E, R odpowiednio dla ruchów od 1 do 8. Następnie kod powinien implementować tę tabelę.
Biorąc pod uwagę wejścia E i P, powinieneś wypisać U. Twoje dane wejściowe będą zawsze składały się z dwóch liter C, O, M, P, U, T, E, R, a twoja informacja wyjściowa powinna zawsze być jedną z tych liter.
Tabela tekstowa do kopiowania
1 2 3 4 5 6 7 8
2 3 4 1 8 7 5 6
3 4 1 2 6 5 8 7
4 1 2 3 7 8 6 5
5 7 6 8 1 3 2 4
6 8 5 7 3 1 4 2
7 6 8 5 4 2 1 3
8 5 7 6 2 4 3 1
Your choice of labels doesn't count against your code length.
opracowywanie myśli? W tej chwili mogę na stałe zakodować matrycę w moim kodzie i twierdzić, że nie liczy się ona do mojego wyniku.