Правила игры изложены в отдельной статье, а здесь мы займёмся изучением вопроса оптимального алгоритма поиска числа противника в игре быки и коровы. И так, есть общие принципы как следует задавать вопросы:

  • Вопрос должен быть таким, чтобы ответ был максимально информативен.
  • Категорически избегаем повторений. Нет нужды спрашивать то, что мы уже знаем.
  • Немного везения как никогда будет кстати.

Сколько комбинаций цифр можно составить? Первую цифру можно загадать десятью способами, вторую девятью и тд. И получаем 10*9*8*7 = 5040. Вот это общее количество комбинаций. А вариантов ответов может быть всего 14, они все показаны на рисунке.

В приведённой таблице рассмотрены все варианты ответов. Самый желанный и вкусный — это 4 быка, то есть сразу выигрыш. И такой вариант один. Самый вариативный это 1 корова — имеет 1440 вариантов расстановки цифр. По большому счёту наши дальнейшие шаги буде определять наш первый ход. А тут мы может положиться только на нашу удачу, расположение звёзд, расставленной мебели по фен-шую и наличию кофе. То есть любую комбинацию цифр. И по полученному ответу мы планируем дальнейшие шаги. Рассмотрим варианты, кроме 4быков:

  • 0 быков, 0 коров — это тоже вполне удачный ход! Эти цифры сразу исключаем из угадываемого числа, но можем использовать для выявления быков.
  • 1 бык или 1 корова — то есть мы нашли одну цифру, но какая она не ясно.
  • 1 бык и 1 корова, или 2 быка или 2 коровы — нашли 2 цифры.
  • 3 быка и 0 коров, 2 быка и 1 корова, 1 бык 2 коровы. Нашли 3 цифры, но самый желанный — это три быка, всего 24 комбинации! На практике 4 хода.
  • 2 быка и 2 коровы, 1 бык и 3 коровы, 4 коровы — то есть мы нашли все цифры. Здесь мы можем кричать ура, так как выигрыш считайте у нас в кармане! Самое большее 9 комбинаций!

Дальнейшую стратегию рассмотрим на примерах игры, так будет гораздо наглядней и проще.

Первый пример

На первый вопрос 1234 мы получили ответ одна корова. Вторым вопросом была комбинация 5678. И тут удача — два быка и одна корова. Логика третьего хода следующая: мы угадали три цифры, нужно определить их расположение. И мы точно знаем что цифра 9 и 0 отсутствуют в загаданном числе. Потому берём две цифры из второго вопроса, но ставим на другие места и доставляем 0 и 9.

Получаем такой вопрос: 7890, на который мы получили ответ 2 коровы. Поздравляем — мы точно определили 2 быка: 7 на третьем месте, 8 на четвёртом. Далее мы знаем что 5 или 6 точно есть в загаданном числе. Уберём одно и поставим на другое место. Последнее число возьмём из первого вопроса, тут без разницы какое — чистое везение. Получаем такой вопрос — 4578. И радуемся победе, мы отгадали, ответ четыре быка!

Второй пример

На первый вопрос 0123 мы получили ответ 1 бык, 2 коровы. Вторым вопросом задаём 4567. Получаем в ответе 1 корова. Всё, мы снова исключили две цифры — это 8 и 9. И теперь мы возьмём две цифры с первого вопроса и как обычно поставим на другое место, добавим 8 и 9.

Получился такой вопрос 2389, ответ на который был одна корова. Казалось бы результат так себе, но не тут-то было! Скомбинируем третий вопрос так — возьмём ноль с первого вопроса, но менять его место не будем, возьмём двойку с третьего и поставим на второе и разбавим несуществующими. Вот что получили: 0289. Ответом было два быка! Теперь тройку тоже вычеркнем, а это значит, что единичка точно в числе есть. Теперь осталось всего два варианта и мы выбираем 0215. И получаем 4 быка! Пятёрочка — это чистое везение.

Третий пример

В первый раз спросим 9012. Получаем 2 коровы. Второй вопрос — 3456 — тоже две коровы. Так, 7 и 8 исключаем. Теперь перетасовываем второй вопрос и уберём одну, заменив на семерку. Получаем такой вариант : 6573. Ответ — одна корова. Что мы поняли? Цифра 4 точно есть и получили расположения, где цифры 3, 5 и 6 точно не стоят.

Четвёртый вопрос формируем так — комбинируем третий и первый вопрос, меняя местами. Вот какую комбинацию мы получили — 1234. Ответ — три быка. 3 и 4 стоят на своих местах, проверяем только первые цифры. 9234 — ответом на него было 2 быка, одна корова. Всё, мы нашли число! 1934.

Четвёртый пример

Первый вариант у нас 4590, ответ — один бык. Второй ход 1236 и ответ три коровы. Снова 7 и 8 вне игры. На третьем ходу тасуем цифры третьего вопроса и разбавляем 7. 7263, что даёт нам снова 3 коровы. Значит единичку выбрасываем.

Теперь нам нужно правильно расположить наших коров и найти быка с первого вопроса. Задаём такой вариант — 4623, ответ на него два быка и одна корова. Значит не четвёрка. Тройку мы не меняли и потому точно можем сказать, что именно тройка не на своём месте! Пробуем ещё раз — 3620. И бинго. Мы разгадали число!

Бытует мнение, что выявив цифры, которые точно отсутствуют в загаданном числе, то их использовать дальше нельзя. И следует оперировать только найденными коровами, чтобы найти быков. Я придерживаюсь другого мнения. "Пустышки" крайне полезны в выявлении быков, так как мы можем точно определить цифры, которые стоят на своих местах. И это не будет какой либо потерей хода. Наоборот, оперируя только найденными коровами можно запутаться в том, какая из коров в данный момент стала быком.

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

Рассмотрим теперь несколько партий (точнее было бы сказать, пользуясь шахматной терминологией, — окончаний или этюдов), представленных в виде задач. Разобрав их, вы получите неплохую инструкцию как выиграть, которая иллюстрирует тонкости игры в «быки и коровы».

Будут изучены все ситуации, когда ответ противника на наш первый ход — для определенности число 1234 — совпадет с одним из первых пяти в таблице на рис. 2 (предыдущая страничка). При ответе 4б партия продолжается всего один ход, а для каждого из четырех других случаев мы укажем способ игры, гарантирующий отгадывание задуманного числа за наименьшее количество ходов.

Другими словами, за столько ходов мы точно отгадаем число противника, каким бы оно ни было, а при меньшем количестве нам всегда может не повезти — шифр не будет раскрыт.

Партия 1.

На первый ход 1234 противник ответил 2б 2к. Как выиграть? Какое наименьшее количество ходов гарантирует отгадывание задуманного числа?

Легко проверить, что только шесть задуманных чисел в ответ на первый ход 1234 могут дать ответ 2б 2к (табл. 3, первый столбец), и при любом втором ходе по крайней мере три из них дадут одинаковый ответ.

Вторым ходом сыграем 1356 (вместо цифр 5 и 6 можно было бы взять и другие, отличные от 1, 2, 3, 4). Все возможные ответы находятся во втором столбце таблицы. Ответ 2б сразу определяет задуманное число — 1324 (у других чисел иной ответ), ответ 1 б 1 к оставляет два варианта, а ответ 2к — три.

Третий ход 3256 (с учетом второго) вносит полную ясность — все пять чисел-кандидатов дают разную пару ответов. Прочерк в табл. 3 (и всех последующих таблицах) означает, что при соответствующем ходе «реакция» на него данного числа нас уже не интересует. Таким образом, на четвертом ходу гарантирован ответ 4б и партия длится не более четырех ходов.

Типичная и совершенно не очевидная ошибка, которую допускают многие, кто решает эту задачу, состоит в использовании для игры чисел, содержащих только цифры 1, 2, 3, 4. Логика здесь простая — раз все цифры известны, то зачем подключать новые? Однако при таком подходе задуманное число с гарантией определяется на пятом ходу (ответ 4 б).

Партия 2.

Тот же вопрос, что и в первой партии, но ответ на первый ход 1б Зк. На первый ход 1234 восемь чисел могут дать ответ 16 Зк (табл. 4).

При любом втором ходе хотя бы одна четверка чисел дает один и тот же ответ, и для выяснения ситуации понадобятся еще два хода. При втором ходе 1256 числа разделяются на две группы; для чисел первой группы (ответ1б 1к) сделаем третий ход , а для чисел второй группы (ответ 2к) ход 2564. После этого остаются две пары чисел в каждой гpynne, требующие еще одного хода, и четвертый ход 1564 полностью проясняет картину.

Таким образом, вторая партия длится не более пяти ходов.

Рассмотрим, как выиграть в «быки и коровы», анализируя еще две партии.

Партия 3.

Тот же вопрос, что и в предыдущих двух партиях, но при ответе на первый ход 4к.

В ответ на первый ход 1234 девять чисел могут дать ответ 4к (табл. 5). Второй ход 3102 расшифровывает два числа, а остальные семь делит на две группы, в одной из которых решает ход 4153, а в другой — 2456. Четвертый ход завершит партию (будет получен ответ 4б).

Партия 4.

Тот же вопрос, что и в предыдущих трех партиях, но при ответе на первый ход 3б.

Ответ 3б на первый ход 1234 дают 24 числа. Действительно, три цифры можно зафиксировать на своих местах четырьмя способами, а для четвертой имеется шесть возможностей: 0, 5, 6, 7, 8, 9, то есть всего 4X6 = 24 варианта. Любопытно, что найти задуманное число среди 24 чисел в данной партии удается за столько же ходов, за сколько восемь чисел во второй партии.

Рассмотрим табл. 6 а. В ее первых четырех строках а обозначает любую из цифр 8, 9, 0. Таким образом, здесь представлены все 24 возможности. Сделаем второй ход 1567. Ответ 0б 0к оставляет выбор из трех неразгаданных чисел, для которых годится третий ход 8934 (табл. 6 б). При ответе 2б можно сыграть 1506 (табл. 6 в), а при ответе 1к — 5634 (табл. 6 г).

Для девяти чисел с ответом 1б в табл. 6 а составим табл. 6 д (вновь а может принимать одно из трех значений — 8, 9, 0). Третий ход 3564 разделяет их на три равные группы, четвертым ходом числа идентифицируются, и пятый ход завершит игру (ответ 4б).

У нас осталось еще шесть чисел, расположенных в нижних строках табл. 6 а, выпишем их отдельно (табл. бе). И с этой шестеркой удается разобраться за два дополнительных хода. Итак, вновь партия длится не более пяти ходов.

Результаты всех рассмотренных партий собраны в табл. 7. Строгое доказательство того, что в каждом случае меньшим количеством ходов не обойтись, мы опускаем.

Эта инструкция, как выиграть и разобранные примеры показывают, что искусная игра в «быки и коровы» требует тонкого математического расчета.

Компьютер задумывает четыре различные цифры из 0,1,2. 9. Игрок делает ходы, чтобы узнать эти цифры и их порядок. Каждый ход состоит из четырёх цифр, 0 может стоять на первом месте. В ответ компьютер показывает число отгаданных цифр, стоящих на своих местах (число быков) и число отгаданных цифр, стоящих не на своих местах (число коров).

Компьютер задумал 0834. Игрок сделал ход 8134. Компьютер ответил: 2 быка (цифры 3 и 4) и 1 корова (цифра 8).

Компьютер уже что-то задумал. Играем!