Bank został włamany, a wszyscy lokalni bandyci mafii mają niezwykłe alibi: grali w Connect 4! Aby pomóc w dochodzeniu, należy napisać program do sprawdzania wszystkich zajętych plansz Connect 4, aby sprawdzić, czy pozycje rzeczywiście są pozycjami z ważnej gry Connect 4 i nie zostały pospiesznie poskładane jak tylko policja zapukała do drzwi.
Zasady łączenia 4: graczy R
i Y
zmieniaj je, aby upuszczać kafelki ich koloru do kolumn siatki 7x6. Kiedy gracz upuszcza płytkę do kolumny, spada ona, aby zająć najniższą niewypełnioną pozycję w tej kolumnie. Jeśli graczowi uda się uzyskać na planszy poziomy, pionowy lub ukośny układ czterech płytek tego samego koloru, wówczas wygrywa i gra kończy się natychmiast.
Na przykład (z R
uruchomieniem) poniżej jest niemożliwa pozycja Connect 4.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Twój program lub funkcja musi pobrać płytę Connect 4 i zwrócić albo
- Wartość falsy wskazująca, że pozycja jest niemożliwa lub
- Ciąg o numerach od 1 do 7, zawierającą jedną możliwą sekwencję ruchów prowadzące do tej pozycji (kolumny są ponumerowane
1
się7
od lewej do prawej, a więc sekwencji112
, na przykład, oznacza czerwony ruch w kolumnie1
, a następnie za pomocą żółtego przenieść w kolumnie1
, a następnie czerwony ruch w kolumnie2
). Możesz wybrać numerację kolumny inną niż 1234567, jeśli chcesz, o ile podasz w swoim rozwiązaniu. Jeśli chcesz zwrócić listę w innym formacie; na przykład jako tablica[2, 4, 3, 1, 1, 3]
, to też jest w porządku, o ile łatwo jest zobaczyć, jakie są ruchy.
Możesz wybrać czytanie planszy w dowolnym rozsądnym formacie, w tym za pomocą liter innych niż R
i Y
dla graczy, ale musisz określić, który gracz będzie pierwszy. Możesz założyć, że na planszy zawsze będzie 6x7, z dwoma graczami.
Możesz założyć, że pozycje, które otrzymujesz, są przynajmniej fizycznie możliwe do stworzenia na standardowej planszy Connect 4; tzn. że nie będzie żadnych „pływających” elementów. Możesz założyć, że tablica nie będzie pusta.
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź. Obowiązują standardowe luki.
Przykłady
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |