Давайте поиграем в некоторый код-гольф!
Задача состоит в том, чтобы найти победителя игры в крестики-нолики.
Это было сделано много раз, давая доску с одним явным победителем, но вот поворот:
Ячейки нумеруются так:
1|2|3
-+-+-
4|5|6
-+-+-
7|8|9
Вы получаете массив из ровно 9 ходов:
{3, 5, 6, 7, 9, 8, 1, 2, 3}
Это анализируется следующим образом:
- Игрок 1 отмечает клетку 3
- Игрок 2 отмечает клетку 5
- Игрок 1 отмечает клетку 6
- Игрок 2 отмечает клетку 7
- Игрок 1 отмечает клетку 9
- Игрок 1 выиграл
Примечание: игра не останавливается после победы одного игрока, может случиться так, что проигравшему игроку удастся получить три подряд после победившего игрока, но учитывается только первый выигрыш.
Теперь ваша задача - получить 9 чисел в качестве входных и выходных данных о победителе и раунде, в котором произошел выигрыш. Если никто не выигрывает, выведите что-нибудь постоянное по вашему выбору. Вы можете получать входные данные и предоставлять выходные данные в любом стандартном среднем формате.
Повеселись!
Еще несколько примеров по запросу:
{2,3,4,5,6,7,1,8,9} => Player 2 wins in round 6
{1,2,4,5,6,7,3,8,9} => Player 2 wins in round 8
{1,2,3,5,4,7,6,8,9} => Player 2 wins in round 8
источник
[X, Y]
? В случае связи, мы можем вывести любое другое последовательное значение вместо этого? Я рекомендую это, потому что печать этих точных струн не является частью игры в гольф. Для будущих задач, я рекомендую использовать песочницу . :-){3, 5, 6, 7, 9, 8, 1, 2, 3}
» -3
действительно должно появиться дважды?Ответы:
Сетчатка , 114 байт
Попробуйте онлайн! Исходя из моего ответа на крестики-нолики - X или O? , Выводится,
X<N>
если первый игрок выигрывает послеN
ходов,O<N>
если второй игрок выигрывает,T
если ни один из них не выигрывает. Объяснение:Создает внутреннюю доску, а также отмечает каждый ход с игроком, чей это ход.
Применяет ход.
Ищет выигрыш и, если он найден, заменяет доску победителем и количеством оставшихся ходов.
Если ходы исчерпаны и никто не выиграл, то игра ничья.
Подсчитайте количество раундов из числа оставшихся ходов.
источник
MATL , 39 байт
Выход
1
иR
в отдельных строках, если пользователь 1 выигрывает в раунде R ;0
иR
в отдельных строках, если пользователь 2 выигрывает в раунде R ;Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Javascript (ES6), 130 байт
объяснение
источник
Java (OpenJDK 8) , 445 байт
Попробуйте онлайн!
Возвращаемое значение {1,8} означает, что игрок 1 выиграл в 8 раунде. Возвращаемое значение {0,0} означает ничью.
источник
false
можно заменить на1<0
, а пробел после первого]
можно удалить.//Code that was submitted
и//End of code
.Котлин , 236 байт
украшенный
Тест
TIO
TryItOnline
источник
Python 2 , 170 байт
Попробуйте онлайн! или попробуйте все тестовые случаи
источник
Желе , 38 байт
Попробуйте онлайн!
Игрок 1 победа:
[round, 1]
Игрок 2 победа:
[round, 2]
Tie:
[0, 0]
источник
Python 3.6+, 137 байт
Выходной формат
winner number:round
или-1
для галстука. Игрок 20
Игрок 1 находится1
. Ввод в виде неопределенной строки из 1-индексированных квадратных чисел.источник
Желе , 35 байт
Монадическая ссылка, берущая список ходов и возвращающая список, в
[move, player]
котором игроки идентифицированы как1
(первый действует) и0
(второй должен действовать).Попробуйте онлайн!
Как?
источник
Python 2, 168 байт
Выходы (игрок, раунд) или 0 на ничью.
Наносит на карту игру на магический квадрат 3 на 3 и ищет наборы по 3 Os или X, которые составляют 15.
источник
Чисто ,
244... 220 байтПопробуйте онлайн!
Итерированная строка
h
содержит непечатаемые и эквивалентна"\003\001\000\000"
.источник
Python 2 ,
140136134 байтаПопробуйте онлайн!
РЕДАКТИРОВАТЬ: 4 байта + 2 байта thx Эрик Outgolfer.
Выводит кортеж (playerNumber, roundNumber) или False, если нет победителя.
источник