Jeśli kiedykolwiek miałeś styczność z kulturą japońską lub wschodnioazjatycką, na pewno spotkałeś się z grą Amidakuji:
Jak wyjaśnia Wikipedia , jest to rodzaj loterii rysowanej na papierze i służącej do losowego wybierania permutacji N. przedmiotów.
Na przykład można go użyć do losowego przypisania sekwencji początkowej N osobom lub N nagród N osobom i tak dalej.
Sztuczka, aby zrozumieć, dlaczego gra reprezentuje permutację, polega na uświadomieniu sobie, że każde poziome pociągnięcie (zwane „nogą”) zamienia dwa elementy na swoim miejscu.
Ta sama strona Wikipedii wyjaśnia również, że każda permutacja P elementów N odpowiada nieskończonej liczbie diagramów Amidakuji. Te z najmniejszą liczbą poziomych pociągnięć (nóg) są nazywane „liczbami pierwszymi” tej konkretnej permutacji P.
Twoim zadaniem jest otrzymanie diagramu Amidakuji z 2 lub więcej pionowymi liniami (w tym przykładzie jest ich 6) w tym formacie (bez liter):
A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E
I utwórz jedną ze liczb pierwszych (ponownie bez liter):
A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E
Pierwszy i ostatni wiersz z literami nie są częścią formatu. Dodałem je tutaj, aby pokazać permutację. Jest również nie wymaga, że pierwsze lub ostatnie wiersze zawierają żadnych nóg |-|
, ani że wyjście być możliwie jak najmniejsze.
Ten konkretny przykład wejściowy jest jedną z (nieskończonych) reprezentacji ASCII diagramu Amidakuji na górze strony Wikipedii.
Istnieje jedna nieoczywista zasada dotycząca tych diagramów ASCII: zabronione jest sąsiadowanie nóg.
|-|-| <- NO, this does not represent a single swap!
Wikipedia wyjaśnia standardową procedurę uzyskiwania liczby pierwszej z diagramu, zwaną „bubblizacją”, która polega na ciągłym stosowaniu następujących uproszczeń:
1) Od prawego widelca do lewego widelca:
| |-| |-| |
|-| | -> | |-|
| |-| |-| |
2) Eliminacja podwójnych:
|-| | |
|-| -> | |
Nie jestem pewien, czy to wyjaśnienie jest jednoznaczne. Twój kod może używać tej techniki lub dowolnego innego algorytmu, który generuje wymagane liczby pierwsze.
Najkrótszy kod wygrywa.
Obowiązują standardowe zasady i standardowe dodatki. (Jeśli dane wejściowe są niepoprawne, twój program może się zapalić. Formaty wejścia / wyjścia mogą być standardowe: standardowe / standardowe, argumenty łańcuchowe, lista linii, macierz znaków, cokolwiek działa najlepiej dla ciebie, itp.)