Masz dość innych graczy zadowolonych z ogłoszenia „BINGO” i triumfalnego przejścia obok ciebie, aby odebrać nagrodę. Tym razem będzie inaczej. Przekupiłeś dzwoniącego, aby z wyprzedzeniem dawał Ci połączenia BINGO , w kolejności, w jakiej będą dzwonić. Teraz wystarczy stworzyć tablicę BINGO, która wygra jak najwcześniej dla tych połączeń, gwarantując Ci wygraną (lub mało prawdopodobne remis).
Biorąc pod uwagę ciąg znaków lub listę wywołań w kolejności, w typowym formacie BINGO (dołączone litery, np. B9
Lub G68
, zobacz zasady, aby uzyskać więcej informacji), wypisz macierz lub listę 2D reprezentującą optymalną tablicę BINGO dla tych połączeń. Załóż, że dane wejściowe zawsze będą prawidłowe.
Zasady BINGO:
- Tablica 5x5
- „BINGO” ma miejsce, gdy na twojej karcie znajduje się 5 cyfr z rzędu, z numerów, które zostały wywołane do tej pory.
- Środkowy kwadrat jest wolny (automatycznie liczony do BINGO) i może być reprezentowany przez spację, pustą listę
-1
lub0
. - W 5 kolumn są reprezentowane przez litery
B
,I
,N
,G
,O
, odpowiednio. - Pierwsza kolumna może zawierać liczby 1-15, druga 16-30, ... a piąta 61-75.
- Litery i cyfry brane pod uwagę mogą opcjonalnie być rozdzielane (czymś sensownym, np.
,
Znakiem spacji) lub traktowane jako krotka znaku i liczby. - Wyjście wymaga tylko liczb w każdym miejscu w matrycy.
- Kwadraty, które nie przyczynią się do Twojego wczesnego BINGO, muszą być prawidłowe, ale nie muszą być optymalne.
- To jest golf, najkrótszy kod wygrywa
Przykłady:
Korzystam z tego formatu wejściowego w przykładach, ponieważ jest on krótszy. Akceptowane formaty wejścia / wyjścia znajdują się w sekcji powyżej.
O61 B2 N36 G47 I16 N35 I21 O64 G48 O73 I30 N33 I17 N43 G46 O72 I19 O71 B14 B7 G50 B1 I22 B8 N40 B13 B6 N37 O70 G55 G58 G52 B3 B4 N34 I28 I29 O65 B11 G51 I23 G56 G59 I27 I25 G54 O66 N45 O67 O75 N42 O62 N31 N38 N41 G57 N39 B9 G60 I20 N32 B15 O63 N44 B10 I26 O68 G53 I18 B12 O69 G49 B5 O74 I24
Possible Output (this has a horizontal BINGO in 3rd row. A diagonal is also possible.):
[[11,25,42,53,68],
[ 6,22,32,57,62],
[ 2,16, 0,47,61],
[ 3,17,37,59,75],
[ 9,19,41,46,70]]
N42 N34 O66 N40 B6 O65 O63 N41 B3 G54 N45 I16 O67 N31 I28 B2 B14 G51 N36 N33 I23 B11 I17 I27 N44 I24 O75 N38 G50 G58 B12 O62 I18 B5 O74 G60 I26 B8 I22 N35 B1 B4 G53 O73 G52 O68 B10 O70 I30 G59 N43 N39 B9 G46 G55 O64 O61 I29 G56 G48 G49 I19 G57 N37 O72 I25 N32 B13 B7 B15 O71 I21 I20 O69 G47
Must be a vertical BINGO in 3rd (N) column (because 4 N's came before one of each B,I,G,O):
[[11,25,42,53,63],
[ 2,22,34,57,65],
[ 6,16, 0,47,66],
[ 3,17,41,54,75],
[ 9,19,40,46,70]]
The 5 columns are represented by the letters B,I,N,G,O, respectively.
Odpowiedzi:
Mathematica, 302 bajty
Nienazwana funkcja przyjmująca za argument listę uporządkowanych par, na przykład
{{N,42},{N,34},{O,66},{N,40},...}
(zauważ, że pierwszy element w każdej uporządkowanej parze nie jest ciągiem, lecz nagim symbolem) i zwraca listę liczb całkowitych 2D, w której listy podrzędne reprezentują kolumny (nie wiersze) na planszy bingo.Dane wyjściowe dla pierwszego przypadku testowego:
Zasadniczo, gdy nastąpi najwcześniejsze możliwe bingo z powodu liczby wywoływanej w każdym z rzędów B / I / G / O, wówczas liczby te będą znajdować się w środkowym rzędzie; każda kolumna zawiera w przeciwnym razie cztery możliwie najmniejsze liczby (biorąc pod uwagę już użyty numer). Na przykład, jeśli pierwszy przypadek testowy zostanie zmieniony tak, że drugim wywoływanym numerem jest
B12
zamiastB2
, wówczas pierwszą kolumną płyty wyjściowej będzie{1,2,12,3,4}
.Dane wyjściowe dla drugiego przypadku testowego:
Zasadniczo, gdy najwcześniejsze możliwe bingo występuje z powodu pięciu liczb wywoływanych w jednej kolumnie (lub czterech wywoływanych w kolumnie N), wówczas pozostałe cztery kolumny zawierają ich pięć możliwie najmniejszych liczb w kolejności.
Jeśli drugi przypadek testowy zostanie zmieniony z
{{N,42},{N,34},{O,66},{N,40},...}
na{{O,72},{O,74},{O,66},{N,40},...}
( zostaną zmienione tylko dwa pierwsze wpisy), wówczas wynikiem będzie:Nieco golfowa wersja:
Pierwszy wiersz to w większości definicje skracające kod, chociaż
g
wstawia środkowy kwadrat{N,0}
do danych wejściowych, aby uprościć wyszukiwanie bingo. (n
Funkcja daje najmniejsze pięć legalnych liczb bingo w#
kolumnie th, indeksowane 1.o
Funkcja pobiera 5 krotek i przesuwa pierwszy element, tak aby był trzeci.)While
Pętli linii 2-6 znajduje najmniejszy początkowego segmentu wkładu, który zawiera Gry. (Testy trzeciej linii dla bingo z jedną kolumną, podczas gdy testy piątej linii dla bingo z jedną kolumną).Dla dowolnej funkcji
F
operatorMapIndexed[F,{B,I,N,G,O}]
(zaczynając od wiersza 7) wytwarza 5-krotną{F{B,1},F{I,2},F{N,3},F{G,4},F{O,5}}
(cóż, technicznie jest to{F{B,{1}},...}
); stosujemy funkcję,F
która tworzy kolumnę bingo z dwóch argumentów. Ta funkcja zależy jednak od typu znalezionego bingo: wiersz 8 jest prawdziwy, gdy mamy bingo z jedną kolumną, w którym to przypadku funkcja (wiersz 9) używa odpowiednich liczb wejściowych w kolumnie bingo i liczb domyślnych w inne kolumny. W innym przypadku funkcja (wiersze 10-12) używa odpowiednich liczb wejściowych na środku każdej kolumny i liczb domyślnych w innym miejscu.źródło
Bingo
funkcji?Bingo
nie jest zabronione? <biegnie, by zmienić odpowiedź>JavaScript (ES6) 372 bajtów
Prawdopodobnie można jeszcze trochę grać w golfa, ale nie wiem jak. Sugestie są bardzo mile widziane;)
źródło