Вы устали от других игроков, которые самодовольно объявляют «БИНГО» и триумфально проходят мимо вас, чтобы получить свой приз. На этот раз все будет иначе. Вы подкупили вызывающего абонента, чтобы он давал вам звонки BINGO заранее, в порядке их вызова. Теперь вам просто нужно создать доску BINGO, которая выиграет как можно раньше для этих коллов, гарантируя вам выигрыш (или маловероятную ничью).
Если задана строка с разделителями или список вызовов по порядку, в типичном формате BINGO (включая буквы, например, B9
или G68
см. Правила), выведите матрицу или 2D-список, представляющий оптимальную плату BINGO для этих вызовов. Предположим, что ввод всегда будет действительным.
Правила БИНГО:
- Доска 5х5
- «БИНГО» - это когда на вашей карте 5 номеров подряд из тех номеров, которые уже были вызваны.
- Центральный квадрат свободен (автоматически подсчитывается в БИНГО) и может быть представлен пробелом, пустым списком
-1
или0
. - В 5 колонок представлены буквами
B
,I
,N
,G
,O
, соответственно. - Первый столбец может содержать цифры 1-15, второй 16-30, ... и пятый 61-75.
- Буквы и цифры, взятые для ввода, могут при желании быть разделены (чем-то, что имеет смысл, например,
,
или пробел) или могут быть приняты как кортеж символа и числа. - Вывод требует только числа в каждом месте в матрице.
- Квадраты, которые не будут способствовать вашему раннему БИНГО, должны быть действительными, но не обязательно должны быть оптимальными.
- Это код-гольф, выигрывает самый короткий код
Примеры:
Я использую этот формат ввода для примеров, потому что он короче. См. Раздел выше для приемлемых форматов ввода / вывода.
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.
Ответы:
Mathematica, 302 байта
Безымянная функция, принимающая в качестве аргумента список упорядоченных пар, таких как
{{N,42},{N,34},{O,66},{N,40},...}
(обратите внимание, что первый элемент в каждой упорядоченной паре является не строкой, а скорее голым символом), и возвращает двумерный список целых чисел, где подсписки представляют столбцы (не ряды) доски бинго.Выход для первого теста:
В общем, когда самое раннее возможное бинго происходит из-за числа, вызываемого в каждой из строк B / I / G / O, тогда эти числа будут в центральной строке; в противном случае каждый столбец будет содержать четыре наименьших возможных числа (с учетом уже использованного числа). Например, если первый контрольный пример изменен так, что второй вызываемый номер является
B12
скорее, чемB2
, тогда будет первый столбец платы вывода{1,2,12,3,4}
.Выход для второго теста:
В общем, когда самое раннее возможное бинго происходит из-за пяти чисел, вызываемых в одном столбце (или четырех, называемых в столбце N), тогда оставшиеся четыре столбца содержат свои пять наименьших возможных чисел по порядку.
Если второй контрольный пример изменен с
{{N,42},{N,34},{O,66},{N,40},...}
на{{O,72},{O,74},{O,66},{N,40},...}
( изменились только первые две записи), то вывод:Несколько неглёвая версия:
Первая строка - это, в основном, определения для сокращения кода, хотя перед входом
g
ставится центральный квадрат,{N,0}
чтобы упростить поиск бинго. (n
Функция дает наименьшее пять допустимых чисел бинго в#
столбце th с индексом 1.o
Функция принимает 5-кортеж и перемещает первый элемент так, чтобы он стал третьим.)While
Цикл в строках 2-6 находит наименьший начальный отрезок входного , который содержит бинго. (Третья строка тестирует бинго по одному в каждом столбце, а пятая строка тестирует бинго по одному столбцу).Для любой функции
F
операторMapIndexed[F,{B,I,N,G,O}]
(начиная с строки 7) создает 5-кортеж{F{B,1},F{I,2},F{N,3},F{G,4},F{O,5}}
(ну, технически это{F{B,{1}},...}
); мы применяем функцию,F
которая создает столбец доски бинго из двух аргументов. Эта функция, однако, зависит от того, какой тип бинго был найден: строка 8 верна, когда у нас есть бинго из одного столбца, и в этом случае функция (строка 9) использует соответствующие входные номера в столбце бинго и номера по умолчанию в другие столбцы. В другом случае функция (строки 10-12) использует соответствующие входные номера в центре каждого столбца и номера по умолчанию в других местах.источник
Bingo
функции?Bingo
не запрещено? <бежит, чтобы изменить ответ>JavaScript (ES6) 372 байта
Возможно, еще можно немного поиграть в гольф, но я не понимаю как. Предложения очень ценятся;)
источник