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| | |
źródło
Odpowiedzi:
Galaretka , 57 bajtów
Pobiera macierz, w której
0
jest wypełniona,1
odtwarzana jako pierwsza i2
odtwarzana jako druga. Daje listę 1-indeksowanych kolumn, pustych, jeśli zidentyfikowano fałszywkę.Wypróbuj online! (zbyt nieefektywny, aby uruchomić więcej niż 7 sztuk w mniej niż minutę)
Uwaga:
ZṠṢ€Ƒȧ
dla +6 bajtów)źródło
JavaScript (ES6),
202 194 187183 bajtówWypróbuj online!
W jaki sposób?
Robiąc to, upewnia się, że nie będziemy mieli żadnego szeregu czterech kolejnych nieparzystych wartości, dopóki wszystkie parzyste wartości nie znikną (tzn. Jeśli strona wygra, musi to być ostatni ruch).
Skomentował
źródło
f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [0,2,2,0,2,2,0], [1,1,1,1,1,1,1] ])
kończy się0
if([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [2,2,2,0,2,2,1], [1,1,1,1,1,1,1] ])
powinno być prawdąPython 2 ,
295285 bajtówWypróbuj online!
-10 podziękowania dla Jo Kinga .
Dane wejściowe to lista ciągów znaków reprezentujących kolumny; z „1” dla czerwonego i „0” dla żółtego. Ciągi nie są wypełnione. Tak więc przypadek (falsey):
jest wprowadzany jako:
Dane wyjściowe to lista indeksów kolumn, indeksowanych 0, które mogłyby utworzyć tablicę; lub
None
jeśli nie jest poprawny.Akceptuje pustą tablicę jako prawidłową (zwraca pustą listę
[]
zamiastNone
).To podejście jest rekurencyjne od ostatniego ruchu do pierwszego ruchu: na podstawie parytetu całkowitej liczby wykonanych ruchów usuwamy ostatni ruch czerwony lub ostatni ruch żółty (lub kończy się niepowodzeniem, jeśli nie jest to możliwe); sprawdź wynikową planszę, aby sprawdzić, czy przeciwnik ma 4 w rzędzie (w takim przypadku się nie powiedzie, ponieważ gra powinna już się zatrzymać); w przeciwnym razie powtarzaj się, dopóki tablica nie będzie pusta (co jest ważne).
Kod 4 w rzędzie jest najbardziej nadęty. Wszystkie ciągi diagonalne macierzy
b
są generowane przez:która najpierw wymienia przekątne „opadające”, a następnie „opadające”.
źródło