Как бы вы создали алгоритм для решения следующей головоломки "Mastermind"?
Ваш противник выбрал четыре разных цвета из набора из шести (желтый, синий, зеленый, красный, оранжевый, фиолетовый). Вы должны угадать, что они выбрали, и в каком порядке. После каждой догадки ваш оппонент говорит вам, сколько (но не тех) цветов, которые вы предположили, это правильный цвет в нужном месте [ "черные" ] и сколько (но не которые) были правильного цвета, но не в том месте [ "белые" ]. Игра заканчивается, когда вы правильно угадываете (4 черных, 0 белых).
Например, если ваш оппонент выбрал (синий, зеленый, оранжевый, красный), и вы предполагаете (желтый, синий, зеленый, красный), вы получите один "черный" (для красного) и два белых (для синего и зеленого). Вы получите ту же оценку для угадывания (синий, оранжевый, красный, фиолетовый).
Мне интересен алгоритм, который вы бы выбрали, и (необязательно), как вы переводите его в код (предпочтительно Python). Меня интересуют кодированные решения, которые:
- Ясный (легко понимаемый)
- Сжатый
- Эффективный (быстрый выбор)
- Эффективное (наименьшее количество догадок для решения головоломки)
- Гибкий (может легко ответить на вопросы об алгоритме, например, что является его наихудшим случаем?)
- Общее (может быть легко адаптировано к другим типам головоломок, чем у вдохновителя)
Я доволен алгоритмом, который очень эффективен, но не очень эффективен (при условии, что он не только плохо реализован!); однако очень эффективный и эффективный алгоритм, реализованный негибко и непроницаемо, не используется.
У меня есть собственное (подробное) решение в Python, которое я опубликовал, но это далеко не единственный или лучший подход, поэтому, пожалуйста, напишите больше! Я не ожидаю эссе;)