Вступление
Connect Four - игра, в которой вы пытаетесь получить четыре подряд: по горизонтали, по вертикали или по диагонали. В этом коде гольф мы будем пытаться выяснить, кто выиграл, учитывая игровую доску. Всегда будет один победитель и только один победитель.
задача
Имея доску Connect Four, выясните, кто победитель: X
или Y
. Всегда будет один победитель и только один победитель. Размер доски всегда будет 6 на 7, как показано на рисунке.
Для данной доски следующая доска в этом случае X
красная и Y
синяя:
Ваш вклад будет:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY
Вы можете разделить строки игры по символу новой строки (как выше), без разделительного символа, разделить строки на массив или список, или вы можете ввести матрицу символов.
Правильный вывод для этого примера:
Y
Y имеет четыре подряд; Итак, Y - победитель. Итак, мы выводим Y.
Контрольные примеры
Входные данные:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO
Выход:
X
Входные данные:
OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX
Выход:
X
Входные данные:
YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO
Выход:
Y
Входные данные:
OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO
Выход:
Y
Входные данные:
OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX
Выход:
X
счет
Наименьшее количество байтов побеждает!
Ответы:
Желе , 19 байт
Попробуйте онлайн!
Суть этого ответа скопирована из моего ответа на этот очень похожий вопрос .
объяснение
Довольно просто: мы берем все строки, столбцы, диагонали и антидиагонали (как в валидаторе n-queens), затем берем все подстроки длины 4 из них, затем сортируем их таким образом, чтобы выигрышная строка 4 сортировалась в конец. (Нам нужен тай-брейк в случае, если есть
OOOO
дополнение кXXXX
илиYYYY
.) Возьмите последний элемент последнего элемента, и это будетX
или поY
мере необходимости.источник
Сетчатка,
5148 байтСпасибо Мартину Эндеру за сохранение 3 байта
Попробуйте онлайн!
Принимает ввод как разделенный запятыми список строк
источник
(.{7}X){3}|XXX
до(.{7}X|X)\4\4
: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/…\4
- вы хотите повторить эффект.{7}
, а не совпадающую строку. (И балансирование групп, вероятно, будет слишком длинным.)Javascript (ES6), 54
55Редактировать 1 байт спасен благодаря @Arnauld
Я просто проверяю, является ли Х победителем, так как всегда будет один победитель и только один победитель
Ввод - это строка с любым разделителем, как в ответе @ Арнаулда
источник
Желе ,
2522 байтаПринимает список строк (или список списка символов), сформированный из
X
,Y
иO
(также будет работать с заменами, так что у пробела есть более низкий порядковый номер, чем у обоих счетчиков).Попробуйте онлайн! или запустить расширенную версию, которая принимает многострочную строку.
Как?
источник
JavaScript (ES6),
777669 байтСохранено 7 байтов благодаря Нейлу
Принимает ввод как разделенную чем-то строку, где что-то - это в основном любой символ.
Контрольные примеры
Показать фрагмент кода
источник
b.match()
? Следует сэкономить наRegExp
звонке.match()
делал неявное преобразование вRegExp
. Благодарность!Python 2 , 143 байта
Принимает список строк или список символов. Жестко запрограммирован для 6 строк на 7 столбцов, в соответствии со спецификацией.
Попробуйте онлайн!
источник
PHP, 71 байт
Онлайн версия
источник
Python 2 ,
201143129128107 байтЯ решил добавить горизонталь, вертикаль и диагональ вместе в один список, а затем добавить приращение, а затем искать X раз в нем. И поскольку всегда будет победитель, я могу предположить, что Y выиграл, если X не победит. Этот код принимает матрицу всех различных частей и пустых мест.
Попробуйте онлайн!
кредиты
источник
i:] for
,i, r
,r] for
и1 for
.*(len(m)-1)
может быть*~-len(m)
. Как это устроено.] for
И1 for
все еще там.K (нгн / к) ,
5855 байтПопробуйте онлайн!
{
}
функция с аргументомx
+!6 7
все возможные пары 0..5 и 0..6{
}'
для каждого из них сделать4#1-+!3 3
4 из 8 ортодиагональных направлений:(1 1;1 0;1 -1;0 1)
3+[
]\&4
начать со списка из четырех нулей (&4
) и сделать 3 шага в каждом из направленийx+/:/:
начать с каждой возможной позиции и предпринять шаги в каждом возможном направлении,/
конкатенации. на данный момент у нас есть матрица из 4-х списков координатных пар, некоторые из которых простираются за пределы доскиx ./:/:
найдите соответствующие ячейки изx
88<
кто из них"Y"
-с? (88 является кодом ASCII"X"
)&/'
какие 4-списки состоят только из"Y"
-s? (и-снижения-каждый)|/
есть хотя бы один такой? (Или-уменьшение)"XY"@
если ложный возврат"X"
, если истинный возврат"Y"
источник
Zsh ,
207 ...159 байтИстория версий: 4 итерации по ~ 25 байт в первую неделю; затем еще 3 итерации для ~ 25 байтов 6 месяцев спустя.
( первый ) ( второй ) ( третий ) ( четвертый) ) ( пятый ) ( шестой )Попробуйте онлайн!В нижнем колонтитуле я печатаю как плату ввода, так и массив, который мы строим, из него в stderr. Прокрутите вниз, чтобы отладить, чтобы увидеть их. Массив, который мы строим, теперь стал намного длиннее, так как
t
делает декартово произведение с платой ввода при каждом вызове. (Эй, он сократил код на несколько байтов.)Здесь есть что рассказать, поэтому я переместил (шестое издание) комментарии в аннотированную суть .
(tl; dr: объединить транспонирование исходного массива, но убедитесь, что они разделены)
источник