Я мог найти только вызовы для игры в гольф для Mastermind, так что вот версия для кода, которую мне хотелось бы взять на себя.
Оптимальная стратегия для нормальной игры Mastermind, MM (4,6), была найдена Коямой и Лаем в 1993 году, имея среднее количество догадок = 5625/1296 ~ 4,34. ММ (5,8) до сих пор не решен, но, по оценкам, имеет среднее количество предположений ~ 5,5.
Ваша задача - создать стратегию MM (5,8) для 5 лунок и 8 цветов, охватывающую все pow(8,5) = 32768
возможные различные решения. Очевидно, это не должно быть оптимальным. У вас есть два варианта:
- Опубликовать детерминистическую программу, которая генерирует стратегию. Программа должна быть компилируемой / запускаемой в Windows 7, Mac OS X или Linux без каких-либо дополнительных несвободных программ.
- Опубликуйте свою стратегию (вместе с именем StackExchange) где-нибудь в Интернете и опубликуйте URL-адрес здесь.
В обоих случаях укажите оценку (см. Ниже) в заголовке ответа.
Стратегия должна быть закодирована в соответствии со следующей грамматикой:
strategy : guessing-strategy | known-solution-strategy
guessing-strategy : '{' guess ':' branches '}'
known-solution-strategy : guess
guess : color color color color color
color : 'A'..'H'
branches : '{' branch (',' branch)* '}'
branch : reply ':' strategy
reply : number-of-blacks number-of-whites
number-of-blacks : number-of-key-pegs
number-of-whites : number-of-key-pegs
number-of-key-pegs : '0'..'5'
Алгоритм, используемый для определения количества чёрно-белых колышков клавиш, описан в http://en.wikipedia.org/wiki/Mastermind_(board_game)
Обратите внимание, что ответ «50» (т.е. правильное предположение) подразумевается и не является частью грамматики.
Оценка: N = сумма количества предположений для каждого из 32768 путей / решений. Стратегия с самым низким N выигрывает. Первый тай-брейк: наименьшее максимальное количество догадок. Второй тай-брейк: первый опубликованный ответ. Конкурс заканчивается 1 августа 2014 года в 0:00 по Гринвичу .
Пример стратегии для MM (2,3) со счетом = 21:
{AB:{10:{AC:{10:AA,01:CB,00:BB}},02:BA,01:{BC:{01:CA}},00:CC}}
Используя эту стратегию, 9 возможных игр будут выглядеть так:
- AB 20
- AB 10, AC 20
- AB 10, AC 10, AA 20
- AB 10, AC 01, CB 20
- AB 10, AC 00, BB 20
- AB 02, BA 20
- AB 01, BC 20
- AB 01, BC 01, CA 20
- AB 00, CC 20
Скоро я опубликую для вашего удобства верификатор стратегии MM (5,8) на основе Java.
источник
{AB:{10|01:BB}}
? У меня есть ответ, но он довольно наивный, и из-за древовидной структуры грамматики он не масштабируется вообще (4 отверстия, 3 цвета, генерирует стратегию 147 МБ, которую я мог бы значительно сократить , комбинируя части дерево).Ответы:
Джава
Мой алгоритм для MM (5,8)
дает 177902,178006,182798,182697 с максимальной глубиной89 и требует всего несколько секунд (на моем медленном компьютере).Пример вывода стратегии для MM (2,3) со счетом = 21, найденной этим алгоритмом, выглядит следующим образом:
В моем алгоритме нет ничего захватывающего. Нет изобретения. Я просто следовал рецептам, найденным в сети, и сжал их в этот код Java. Единственная оптимизация, которую я сделал, - это попытка оптимизировать строки кода (в некотором смысле). Это выглядит так:
@MrBackend: Думаю, написать верификатор сложно. ;-)
Некоторые замечания:
Стратегию для
MM(5,8)
можно найти здесь . У GitHub есть некоторые проблемы с отображением длинных строк, поэтому нажмите на кнопку Raw .источник
Рубин
РЕДАКТИРОВАТЬ: Добавлена логика, чтобы исключить невозможные догадки. Следовательно, стратегии теперь соответствуют данному формату и намного более управляемы.
Итак, вот одна попытка, чтобы начать это. Это довольно наивно (и не очень разборчиво - это помогает читать ветку if / elsif / else снизу вверх).
Во- первых, я стараюсь 5 каждого цвета:
AAAAA
,BBBBB
и т.д. Из этого я выясняю , какие цвета фактически используются в шаблоне. И тогда я просто пробую все перестановки данных цветов, опуская те, которые уже были исключены черными колышками.Вот
MM(2,3)
стратегия:Стратегия для
MM(5,8)
занимает 376KB и можно найти здесь . У GitHub есть некоторые проблемы с отображением длинных строк, поэтому нажмите на кнопку Raw .Теперь, если я получу верификатор, я также могу сказать вам, каков мой реальный счет. :)
источник