Słowa kluczowe opisowe (do wyszukiwania): zrównanie dwóch macierzy, nakładanie się, tablica, wyszukiwanie
Wyzwanie
Święty Mikołaj miał w przeszłości historię elfów kradnących prezenty ze swojego skarbca, więc w tym roku zaprojektował zamek, który jest bardzo trudny do złamania, i wydaje się, że trzymał elfy w tym roku. Niestety przegrał kombinację i nie może też wymyślić, jak ją otworzyć! Na szczęście zatrudnił cię do napisania programu do znalezienia kombinacji. Nie musi być najkrótszy, ale musi go znaleźć tak szybko, jak to możliwe!
Ma bardzo ścisły harmonogram i nie może sobie pozwolić na długie oczekiwanie. Twój wynik będzie równy całkowitemu czasowi działania programu pomnożonemu przez liczbę kroków, które program wykonuje dla danych wejściowych oceniania. Najniższy wynik wygrywa.
Dane techniczne
Blokada jest kwadratową matrycą 1s i 0s. Jest ustawiony na losowy układ 1 i 0 i musi być ustawiony na określony kod. Na szczęście Święty Mikołaj pamięta wymagany kod.
Jest kilka kroków, które może wykonać. Każdy krok można wykonać na dowolnej ciągłej podmacierzy (tzn. Należy wybrać macierz podrzędną, która jest całkowicie ograniczona przez lewy górny i prawy dolny róg) (może to być podmacierz nie kwadratowa):
- Obróć w prawo o 90 stopni *
- Obróć w lewo o 90 stopni *
- Obróć o 180 stopni
- Przełączaj każdy
n
element wiersza w prawo lub w lewo (zawija się) - Cykluj każdą kolumnę w
m
górę lub w dół (zawija) - Obróć poziomo
- Odwróć w pionie
- Włącz główną przekątną *
- Włącz główną anty-przekątną *
* tylko jeśli podmacierz jest kwadratowa
Oczywiście może również wykonywać te kroki na całej matrycy. Ponieważ jedynek i zer można zamieniać tylko na macierzy, ale wartości kwadratu nie można bezpośrednio zmienić, liczba zer i jedynek jest taka sama dla konfiguracji początkowej i końcowej.
Specyfikacje formatowania + reguły
Otrzymasz dane wejściowe w postaci dwóch kwadratowych macierzy (pozycji początkowej i końcowej) w dowolnym rozsądnym formacie. Dane wyjściowe powinny być sekwencją tych kroków w dowolnym czytelnym formacie. Ponieważ nie jest to golf kodowy, uczyń go łatwym do zweryfikowania formatem, ale nie jest to ścisły wymóg. Jeśli chcesz, możesz wybrać długość boku macierzy na wejściu.
Twój program zostanie uruchomiony na moim komputerze (Linux Mint, dokładne szczegóły wersji dostępne na żądanie, jeśli ktoś się tym przejmuje: P), a ja ustalę czas na podstawie czasu między naciśnięciem klawisza „enter” w wierszu polecenia a momentem polecenie kończy się.
Przypadki testowe
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Weź całą matrycę. Przełącz każdą kolumnę w górę 1.
- Weź dwie środkowe kolumny jako podmacierz. Przełączaj każdą kolumnę w dół 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Weź całą matrycę. Cykluj każdą kolumnę w dół 1.
- Weź środkową kolumnę. Wyłącz go 2.
- Weź 2 górne rzędy. Odwróć w pionie.
- Weź 2 górne prawe elementy górnego rzędu. Zamień je (obróć w prawo / w lewo 1, odwróć w poziomie).
- Weź 2 górne rzędy po lewej stronie elementów. Zamień je.
Mogą istnieć bardziej wydajne metody, ale to nie ma znaczenia. Jeśli jednak je znajdziesz, możesz je wskazać w komentarzach :)
Ocenianie przypadku testowego
Ten przypadek testowy zostanie wykorzystany do oceny Twojego zgłoszenia. Jeśli uważam, że odpowiedź zbytnio specjalizuje się w przypadku testowym, mam prawo powtórzyć losowe dane wejściowe i ponownie ocenić wszystkie odpowiedzi w nowym przypadku. Przypadek testowy można znaleźć tutaj, gdzie góra jest początkiem, a dół pożądaną konfiguracją.
Jeśli uważam, że odpowiedzi zbytnio się specjalizują, to MD5 następnego przypadku testowego jest 3c1007ebd4ea7f0a2a1f0254af204eed
. (Jest to teraz napisane tutaj, aby uwolnić się od oskarżeń o oszukiwanie: P)
Obowiązują standardowe luki. Żadna odpowiedź nie zostanie zaakceptowana. Miłego kodowania!
Uwaga: Inspirację do tej serii wyzwań czerpałem z Advent Of Code . Nie mam powiązań z tą stroną
Możesz zobaczyć listę wszystkich wyzwań w serii, patrząc na sekcję „Połączone” pierwszego wyzwania tutaj .
0
i 641
i są256 choose 64 ≈ 1.9 × 10⁶¹
dostępne matryce. (który jest porównywalny do Megaminxa i jest większy niż Zemsta Rubika, chociaż znacznie mniej niż kostka Profesora)