Логическая задача

Логические задачи

Модераторы: Азарапетыч, Администрация

deric
Читатель
Читатель
Сообщения: 2
Зарегистрирован: 12 июн 2007, 07:37

Логическая задача

Сообщение deric »

Логическая игра "Быки и коровы" http://www.bullsandcows.h17.ru
Изображение
Последний раз редактировалось deric 12 июл 2007, 20:18, всего редактировалось 1 раз.

Аватара пользователя
Азарапетыч
Модератор
Модератор
Сообщения: 10801
Зарегистрирован: 14 мар 2006, 21:45
Пол: Мужской
Откуда: Москва
Контактная информация:

Сообщение Азарапетыч »

И еще тут: viewtopic.php?t=2852

И вот тут: viewtopic.php?t=2932

:D
ɐнɔɐdʞǝdu qнεиЖ

deric
Читатель
Читатель
Сообщения: 2
Зарегистрирован: 12 июн 2007, 07:37

Сообщение deric »

Со словами, мне кажется, проще, если угадал пару букв далее можно по смыслу, а вот числа по смыслу не угадаешь.

Аватара пользователя
Азарапетыч
Модератор
Модератор
Сообщения: 10801
Зарегистрирован: 14 мар 2006, 21:45
Пол: Мужской
Откуда: Москва
Контактная информация:

Сообщение Азарапетыч »

deric писал(а):Со словами, мне кажется, проще
Зато интереснее. Еще и загадать надо слово позаковыристее.

А цифровые "быки-коровы" довольно элементарно алгоритмизируются...


(Кстати, эту тему надо было заводить в "играх", а не в "задачках".)
ɐнɔɐdʞǝdu qнεиЖ

Аватара пользователя
Atson
Литератор-любитель
Литератор-любитель
Сообщения: 371
Зарегистрирован: 15 апр 2007, 21:02
Пол: Мужской
Откуда: планета K-pax

Сообщение Atson »

Давайте превратим в задачку. Найти оптимальный алгоритм отгадывания в числовом варианте.
зайчатки интеллекта

Аватара пользователя
team55
Популярный автор
Популярный автор
Сообщения: 1089
Зарегистрирован: 18 апр 2006, 16:49

Сообщение team55 »

Atson писал(а):Давайте превратим в задачку. Найти оптимальный алгоритм отгадывания в числовом варианте.
Я всегда отгадывал, просто подставляя очередное число, подходящее под все предыдущие варианты. Начинал обычно с 1234 :) (или 1230 в варианте с запретом нуля в начале числа).

IMHO подробный оптимальный алгоритм отгадывания довольно разветвлён и сильно зависит от ответов.

Интересен другой вопрос: сколько максимум ходов может понадобиться для отгадывания по оптимальному алгоритму? Я только что угадал за 8 ходов. Можно ли гарантированно потратить меньше?

Аватара пользователя
Dendr
Акула пера
Акула пера
Сообщения: 5717
Зарегистрирован: 06 май 2005, 15:11
Пол: Мужской
Откуда: Раменское, Мос.обл.
Контактная информация:

Сообщение Dendr »

Если повезет, то можно и быстрее. Но это уж как карта ляжет.
Вот "распечатка" угадывания за 5 ходов, только что.

1) 1234 - 1Б1К
2) 5678 - 0Б2К
Значит, две цифры из первой четверки, и две из второй. Причем в первой уже угадал цифру на своем месте.
Допустил, что это 1. Остальные - рандомом.
3) 1863 - 1Б0К
Вот это повезло... единственный бык.
Допустим, что это тройка. Значит, единицы в ответе нет. Либо 2, либо 4. Но - смотрим в первую комбинацию: тройка - "корова". Значит, "бык" - двойка. Следовательно, *2*3, причем на местах звездочек - 5 и 7. Во второй комбинации они - "коровы". Следовательно, ответ в этом допущении - 7253.
Допустим теперь, что шестерка, **6*. Тогда - из первой комбинации - в ответе 2 и 4. И либо это 426*, либо 2*64. На месте звездочек - либо 5, либо 7. Всего - 4 варианта. 4265, 4267, 2564, 2764.
Допустим, что восьмерка, *8**. Двойка, значит, в первой комбинации, может быть только "коровой". А четверка - "быком". Либо 28*4, либо *824. Учитывая вторую комбинацию - 5 или 7 - "коров", получим, 2854 или 7824.
Допустим, единица, 1***. Тройка - не "корова". Т.е. в первой комбинации - корова либо 2, либо 4. Т.е. 1*2*, 1**2, 14**, 1*4*. На месте звездочек - 5 или 7. Т.е. 1527, 1725, 1752, 1457, 1547, 1745.
Нетрудно сосчитать, что после трех запросов осталось 13 вариантов. Можно попробовать перебрать их, а можно поинтуичить... Всю эту логику я написал сейчас, при разгадывании я просто вводил следующее число по наитию. Но можно это "наитие" подвести под логику. Во всех вариантах есть хотя бы две цифры (а то и все 3) из "триплета" 2-5-7. Вот и воспользуемся этим. Четвертой цифрой хорошо бы взять единицу - тогда очень хорошее "обрезание" выйдет.

4) 1752 - 2Б2К
Надо же, угадал. Случайно.
Надо выбрать из вариантов 1527 и 1725. Надо поменять две цифры местами, а 1 и "какую-то" - не трогать.
Ну, тут только один вариант:
5) 1725 - 4Б0К.

Аватара пользователя
Dendr
Акула пера
Акула пера
Сообщения: 5717
Зарегистрирован: 06 май 2005, 15:11
Пол: Мужской
Откуда: Раменское, Мос.обл.
Контактная информация:

Сообщение Dendr »

Можно ли единый алгоритм придумать? Наверное, можно, но он слишком зависит от ответов...
Вообще, каждый ход "обрезает" количество вариантов. Изначально их 10*9*8*7=5040 (не берем в расчет версию игры с первой ненулевой). После первого хода происходит "обрезание".
Начинать надо, очевидно, с 1234. Потому что никакой разницы нет. Ну, только если случайно угадаешь с первого хода - но это лотерея.
Исходов может быть несколько, возьму и выпишу их:
4б0к,
3б0к, 3б1к,
2б0к, 2б1к, 2б2к,
1б0к, 1б1к, 1б2к, 1б3к,
0б0к, 0б1к, 0б2к, 0б3к, 0б4к.
Всего - 15. В каждом нужно применять свою логику.

Например, 2б1к - 6 вариантов пар "быков", и в каждом случае 2 варианта одной "коровы", она встает на место "лишней" цифры, а на ее "коровье" место - встает одна из 6 оставшихся цифр (5..0).
6*2*6=72 варианта. Например, 1439, 2734 и т.д. А вот дальше...На второй ход можно задаться постулатом: предполагать "быками" наименьшие цифры, затем - "коровами" - наименьшие из оставшихся.
Т.е. в данном случае - (1234 - 2б1к): предположим вариант 12*3. Видимо, нужно ставить 1253 (опять - нет никакой разницы между другими вариантами). И опять - в общем случае, один из 15-ти вариантов исхода. Тогда нужно искать перекрывание тех (72) вариантов, и этих.
Ну, допустим, что тут вышло 1б2к.
Перебор вариантов - рассмотрим, какие возможны были пары "быков" в (1234):

12 - тогда в (1253) должно быть минимум 2 быка. Пр-речие.

13 - т.е. либо 2, либо 5 - "корова". (другая "корова" - 3). Во втором варианте - означает, что "корова" из (1234) - 4. Т.е.: 1*32, 1435. На месте звездочки - 6..0. Всего - 5 вариантов.

14 - тогда 5 - "корова" точно (из 2 и 3 - только 1 "корова"). Т.е. 15*4 (либо 2 либо 3 на месте звездочки), т.е. только 1524.

23 - Тогда в (1253): 2 - "бык", 3 - "корова". Еще одна корова - либо 1, либо 5. Во втором случае - 4 есть "корова" из (1234). Т.е. имеем 4235 или *231, на месте звездочки 6..0.

24 - тогда 5 - точно "корова". Т.е. 52*4, на месте звездочки либо 1, либо 3 (но надо помнить, что это "корова" из (1234)). Т.е. 5214.

34 - тогда в (1253) 1 и 2 - не "быки", 5 - аналогично, 3 - только "корова". Пр-речие.

Итог (в порядке возрастания): 1435, 1524, 1*32, 4235, 5214, *231 (на месте * - 6,7,8,9,0) Всего - 14 вариантов.

Аналогично можно провести такую же логику для остальных вариантов первого исхода, затем соответственно приведенного второго. Получается многоэтажное ветвление. 15 ветвей первого уровня, от каждой - не более чем 15 ветвей второго уровня, получаем около двухсот вариантов. В каждом - по (навскидку) паре десятков наборов.

Идем дальше - 14 вариантов (ну, 6, но в некоторых еще надо подставлять неизвестные доселе цифры)... это немало. Можно взять снова минимальное число, 1435.
Дальше - зависит от правильного ответа:
1435 - 4б0к
1524 - 1б2к
1*32 - 2б0к
4235 - 2б1к
5214 - 0б3к
*231 - 1б1к
Исходы - разные! Четвертым ходом мы просто называем нужное число... Кроме случаев №3 и №6. Ими и займемся.
Еще раз повторим наши ходы:
1) 1234 - 2б1к
2) 1253 - 1б2к
3) 1435 - 2б0к
Следовательно, ответ - вида 1*32, где на месте звездочки - одна из цифр 6, 7, 8, 9, 0. Для ее гарантированного выбора требуется 3 хода.

Поясню это: буду писать варианты ответов: для 6, 7, 8, 9, 0 соответственно:
4) 6782 - 2б1к, 3б1к, 2б1к, 2б0к, 2б0к
- имеем три варианта ответа. Во втором (3б1к) - пишем сразу ответ. В остальных - нужно еще 2 раза пробовать. Например, при 2б1к:
6 или 8
5) 1632 - 3б0к, 4б0к - либо закончено, либо - нет если нет - еще 1 ход:
6) 1832 - 4б0к.

То есть, гарантированно отгадали за 6 ходов. Это один вариант (первый ход 2б1к, второй - 1б2к). В других, может быть, будет иначе... Для этого надо полностью перебрать все комбинации. Или просто действовать по правилу, которое уже предложили выше - писать число, удовлетворяющее всем вышеупомянутым исходам. Для удобства можно добавить - минимальное.

Аватара пользователя
team55
Популярный автор
Популярный автор
Сообщения: 1089
Зарегистрирован: 18 апр 2006, 16:49

Сообщение team55 »

Dendr писал(а): 3б1к
Ни разу не встречал. Тяжело решать, наверно :)

IMHO даже если с 1го хода получаешь ответ 3Б0К, оптимальный алгоритм найти непросто.

И, кстати, 2Atson: что такое "оптимальный"? Допустим, есть выбор:
1)гарантированно отгадать за 8 ходов или
2)отгадать за 6 ходов с вероятностью 90% и за 9 ходов с вероятностью 10%. Что подразумеваем под оптимумом?

Аватара пользователя
Инна
Популярный автор
Популярный автор
Сообщения: 1434
Зарегистрирован: 18 июл 2006, 18:44
Пол: Женский
Откуда: Калифорния

Сообщение Инна »

Можно решать эти миниатюры, как логические задачки.
Для примера:

63410 ббк
84270 ббкк
23145 бб
________
????? ббббб

Аватара пользователя
Chebur
Популярный автор
Популярный автор
Сообщения: 3259
Зарегистрирован: 09 авг 2006, 11:29
Пол: Мужской
Откуда: Рига
Контактная информация:

Сообщение Chebur »

[offtop]
"А 2Б - это мы с Машкой"
:lol:
[/offtop]

Аватара пользователя
Dendr
Акула пера
Акула пера
Сообщения: 5717
Зарегистрирован: 06 май 2005, 15:11
Пол: Мужской
Откуда: Раменское, Мос.обл.
Контактная информация:

Сообщение Dendr »

team55 писал(а):
Dendr писал(а): 3б1к
Ни разу не встречал. Тяжело решать, наверно :)
Ну, накинулись... Стормозил сначала)))
team55 писал(а):IMHO даже если с 1го хода получаешь ответ 3Б0К, оптимальный алгоритм найти непросто.
Алгоритм тут несложный. Дело в том, что комбинирование цифр делает их равнозначными. В 3б0к - имеем один из 4-х вариантов:
123*
12*4
1*34
*234
и на месте * стоит одна из цифр 5..0
Варианты - равноценны (с точностью до перестановки цифр и переобозначения их), все из 6 цифр - тоже.
Поэтому вариант следующего хода - на самом деле один-единственный:
1235
Если в ответе нет четверки, то мы получим 3бк0, как минимум. Или, если попали, 4б0к.
Если есть, то у нас только 2 "быка" (пятерка может быть в лучшем случае коровой) Т.е. 2бк0 или 2бк1.
Итак:
1) 1234 3бк0
2) 1235 - а) 4бк0 (победа) б) 3бк0 в) 2бк0 г) 2бк1

случай (г) - означает один из вариантов 1254, 1534, 5234. Перебором находим ответ. 5 ходов максимум.

случай (б) - у нас ответ вида 123*, на месте * - 6, 7, 8, 9 или 0. Делаем так: 3) 1678. Заведомо 1-"бык". 6 и 7 могут быть только коровами (1б1к), 8 - может быть "быком" (2б0к). Если же в ответе 9 или 0, то исход будет 1б0к. Двумя ходами находим ответ.

случай (в) - распишем отдельно
1) 1234 3бк0
2) 1235 2бк0
Варианты: 12*4, 1*34, *234. На месте * - 6..0
Пишем: 3) 1264.
Если тройка - в ответе, то 4 - "бык", 1 или 2 - бык, 6 - только "корова" в лучшем случае. Т.е. будет а1) 2б0к или б1) 2б1к.
Если тройки нет в ответе, то в1) 3б0к или г1) 4б0к (победа)
(в1): ответ вида 12*4, на месте * - 7,8,9,0. Тремя ходами выясняем это (докажите сами в качестве домашнего задания ;) ). Итого - 6 максимум.
(б1): либо 1634, либо 6234. два хода (итого - 5)

(а1): 1*34 или *234, на месте * - 7,8,9,0
4) 1734 - если тип 1*34, то исход либо 4бк0 (победа), либо 3бк0 - 1834, 1934, 1034. За два хода выясним ответ (докажете это сами? :) ).
- если *234, то либо 2бк1 (ответ - 7234), либо 2бк0 (ответ - 8234, 9234, 0234). Аналогично - плюс два хода.

Итого - при исходе первого хода 3бк0 можно решить задачу за 6 ходов максимум. (последним ходом считается ход с ответом 4бк0)

Также я уже (вроде, брал только самые "жесткие" варианты) доказал, что при двух "быках" при первом ходе, можно найти ответ за 7 ходов.

При меньшем числе "быков" число вариантов резко растет, не так-то просто разобрать их все.
Самый тяжелый - когда ответ будет 0б1к - остается 1440 вариантов (из 5040 первоначальных). А если второй ход делать 5678, то при 0б2к получится 504. Не многим лучше (может, надо другой вариант - к примеру, 1567 или 2567). Самый длинный путь, скорее всего, будет именно тут, его и надо анализировать. Пока в процессе....

Аватара пользователя
Инна
Популярный автор
Популярный автор
Сообщения: 1434
Зарегистрирован: 18 июл 2006, 18:44
Пол: Женский
Откуда: Калифорния

Сообщение Инна »

Задачка с финала прошедшего чемпионата России по пазлспорту.
Все цифры в загаданном числе различны

56079 кк
12308 бкк
45691 бб
30742 ббк
__________
????? ббббб

Аватара пользователя
Рыжик
Популярный автор
Популярный автор
Сообщения: 3235
Зарегистрирован: 05 фев 2007, 19:41
Пол: Мужской
Откуда: Калининград
Контактная информация:

Сообщение Рыжик »

Инна писал(а):Задачка с финала прошедшего чемпионата России по пазлспорту.
Все цифры в загаданном числе различны

56079 кк
12308 бкк
45691 бб
30742 ббк
__________
????? ббббб
32791
Опыт истории учит, что люди ничему не научаются на опыте истории.(с)

Аватара пользователя
Инна
Популярный автор
Популярный автор
Сообщения: 1434
Зарегистрирован: 18 июл 2006, 18:44
Пол: Женский
Откуда: Калифорния

Сообщение Инна »

Совершенно верно

Ответить

Вернуться в «Задачки»