zenprogrammist

zenprogrammist

На Пикабу
143 рейтинг 2 подписчика 17 подписок 2 поста 0 в горячем
Награды:
5 лет на Пикабу
9

Игра "Быки и Коровы" (Telegram бот)

Игра "Быки и Коровы" (Telegram бот)

Продолжаю изучать программирование и в качестве учебной задачи запилил нового бота. Бот реализует довольно известную игру "Быки и Коровы" (Статья на wiki - https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D0%BA%D0%B8_%D0%B...). В классическом варианте цифры не могут повторяться и число не может начинаться с нуля. По-моему это излишне упрощает и без того несложную игру, поэтому ноль может стоять на первом месте и цифры могут повторяться в любых количествах.


Чтобы поиграть - нужно переписываться с ботом в мессенджере Telegram. У телеграма есть клиенты для любых телефонов и компьютеров. Есть даже веб-версия, так что ничего устанавливать не обязательно (подробнее - https://telegram.org/)


Самого бота можно найти по ссылке https://telegram.me/bulls_and_cows_numbers_bot

Или поиском в самом телеграме по словам bulls_and_cows_numbers_bot


ПРАВИЛА:

Игра состоит в следующем: бот загадывает 4 цифры, игроку предлагается угадать это число, использовав как можно меньше попыток. После каждой попытки бот сообщает подсказку (количество быков и коров). Делая правильные выводы из полученных подсказок можно угадать число в среднем за 6 - 7 попыток. Число попыток не ограничено.


Подробнее о том, как считается количество быков и коров:


Пример: загадано 0250, ваш ответ - 0202.

1) Считаем количество быков, для этого смотрим цифры вашего ответа по порядку.

- первая цифра 0 - бык, т.к. в 0250 на первом месте тоже 0

- вторая цифра 2 - бык, т.к. в 0250 на втором месте тоже 2

- третья цифра 0 - не бык, т.к. в 0250 на третьем месте 5

- четвертая цифра 2 - не бык, т.к. в 0250 на четвертом месте 0

Итого 2 быка. (2Б)

2) Считаем количество коров, для этого смотрим цифры вашего ответа по порядку,

но только те которые не являются быками:

- первая цифра 0 - уже бык, поэтому не может быть коровой, хотя в загаданном числе она есть еще и на третьем месте

- вторая цифра 2 - уже бык, тоже не может быть коровой

- третья цифра 0 - корова, т.к. не бык и при этом есть в 0250 на четвертом месте

- четвертая цифра 2 - не бык и не корова. Она присутствует в 0250, но первые две цифры уже заняты быками, т.е. мы должны проверить есть ли 2 среди последних цифр __50.

Иными словами каждая цифра в загаданном числе и в ответе может соответствовать только одному животному.

Итого 1 корова. (1К)

Т.е. подсказка на ваш ответ будет 0202 2Б 1К

Ещё примеры:

1) загадано 1111 ответ 1214 - 2Б 0К

2) загадано 2342 ответ 3222 - 1Б 2К

3) загадано 5678 ответ 6587 - 0Б 4К

4) загадано 1234 ответ 1111 - 1Б 0К


Ну, как смог, так и объяснил =)


Если в правилах что-то не понятно - пишите в комментариях, постараюсь пояснить


Для тех кому интересно: бот написан на python. База данных - MariaDB. В качестве хостинга (и заодно IDE) используется c9.io (кстати рекомендую - крутая штука)

Показать полностью 1
11

Telegram-bot-игра "Ним"

Решил на досуге поизучать что-нибудь новое и попробовать написать небольшую игру в телеграме. Оно конечно понятно, что оно нафиг никому не сдалось, но если случится чудо и кто-то захочет немного поиграть/потестировать - буду очень благодарен.

Игру-бота можно найти по ссылке https://telegram.me/nim_game_bot

или поиском по слову nim_game_bot


Ним - это довольно простая математическая конечная игра с полной информацией. Т.е. если знать правильную стратегию и очень хорошо уметь считать в уме то можно всегда выигрывать (при условии что повезло с выпавшими изначально числами).


Игра заключается в том что перед вами три кучки монет. За ход можно взять любое количество монет из одной кучки. Пропускать ход нельзя. Брать монеты больше, чем из одной кучки нельзя. Тот кто должен будет взять последнюю монету - проиграл.


В боте три кучки монет представлены тремя числами, записанными через пробел. Т.е. во время своего хода нужно уменьшить одно из чисел на произвольное количество единиц.


Чтобы дать шанс жалким людишкам, бот примерно в 50% случаев тупит, так что обыграть его более чем реально.


UPDATE: я неправильно правила прочитал =) Наоборот нужно взять последнюю монету чтобы победить. Уже исправил)))

Показать полностью 2
Отличная работа, все прочитано!