Możemy przedstawić Kostkę Rubika jako sieć w następujący sposób (po rozwiązaniu):
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
Każda litera reprezentuje odpowiedni kolor ( W
jest biały, G
zielony itp.)
To Wykazano , że istnieje dokładnie (~ trylionów) różne permutacje, że Kostka Rubika może mieć.
Twoim zadaniem jest pobranie liczby całkowitej od do i odpowiedniej permutacji w sposób pokazany powyżej. Możesz wybrać sposób uporządkowania permutacji, ale musisz użyć algorytmu, aby wygenerować unikalną i poprawną permutację dla każdego możliwego wejścia.
Nieprawidłowe reguły permutacji
Zaczerpnięte z tej strony
Na początek środek każdej powierzchni 3x3 musi pozostać taki sam, ponieważ środkowego kwadratu na Kostce Rubika nie można obrócić. Cały sześcian można obracać, zmieniając miejsce, w którym wydaje się znajdować ściana, ale nie wpływa to na sieć sześcianu.
Jeśli mówimy, że każda permutacja ma parzystość, na podstawie parytetu liczby zamian, aby osiągnąć tę permutację, możemy powiedzieć
Każdy element narożny ma trzy możliwe orientacje. Może być ustawiony prawidłowo (0), zgodnie z ruchem wskazówek zegara (1) lub przeciwnie do ruchu wskazówek zegara (2). Suma orientacji narożnych zawsze pozostaje podzielna przez 3
Każdy legalny obrót Kostki Rubika zawsze zmienia parzystą liczbę krawędzi, więc nie może być źle ustawiony tylko jeden element.
Biorąc pod uwagę permutację wszystkich narożników i krawędzi, ogólna parzystość musi być równa, co oznacza, że każdy legalny ruch zawsze wykonuje równowartość parzystej liczby zamian (ignorowanie orientacji)
Na przykład następujące trzy sieci są nieprawidłowymi danymi wyjściowymi:
WWW
WWW
WWW
GGGWWWBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
(Too many whites/not enough reds)
WRW
WRW
WRW
GGGRWRBBBOOO
GGGWRRBBBOOO
YYGRWROOOBBB
YYY
GGY
YYY
(There are two red/green center squares and no white/yellow center squares.
In all valid permutations, the center squares are all different colours)
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBOYOO
YYY
YYY
YYB
(The yellow/orange/blue corner is rotated into an impossible permutation)
Zasady
- Musisz udowodnić, jak chcesz, że algorytm jest poprawny. Nie musisz wyliczać każdej permutacji, o ile udowodnisz poprawność swojego algorytmu.
- Na przykład, jeśli Twój program Javascript nie powiedzie się dla danych wejściowych wyłącznie z tego powodu, że liczba ta jest poza zakresem, to w porządku. Jeśli jednak algorytm zostałby przeniesiony do języka z liczbami całkowitymi o dowolnej wielkości i nie powiódłby się dla tego wejścia, program nie byłby prawidłowy.
- W odpowiedzi musisz podać jakiś dowód ważności. Dowód ten może udowodnić ważność w dowolnej zaakceptowanej metodzie dowodu, z wyjątkiem wyliczenia wszystkich możliwości.
- Możesz wybrać alternatywną metodę wprowadzania, jeśli chcesz, o ile:
- Dane wejściowe są ograniczone
- Każde wejście odpowiada jednemu wyjściu
- Wyjaśniasz dokładnie format wejściowy i sposób, w jaki odpowiada on każdemu wyjściu
- Możesz zmienić znaki używane przy użyciu 6 różnych znaków ASCII, między 33 (
!
) a 126 (~
), zamiastWGRBOY
- Możesz generować dane w dowolny sposób, pod warunkiem, że tworzy wyraźną reprezentację sześcianu, w którym można wyświetlić wszystkie 6 ścian, w tym dowolną prawidłową siatkę sześcianu, pojedynczy ciąg liniowy lub rendering 3D. Jeśli nie masz pewności co do określonego formatu, nie wahaj się zapytać w komentarzach.
To jest golfowy kod, więc wygrywa najkrótszy kod w bajtach w każdym języku.
Przykładowe prawidłowe dane wyjściowe
YYY
YYY
YYY
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
WWW
WWW
WWW
(The `W` and `Y` faces have been swapped)
ZZZ
+++
+}}
+[[}77ZZ7bbb
bb[}[[7}}+Z7
bb[}++[}}+Z7
7bb
[7Z
[7Z
(To start with, the colours have been mapped W -> +, G -> b, R -> [, B -> }, O -> Z and Y -> 7.
Then, the moves L, R, U and F' have been applied, in that order.
Notice that each centre square is different, and corresponds to the same colour as in the mapping)