ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я НЕ ищу решение Mastermind.
Я пытаюсь написать программу для решения такой игры, как вдохновитель, и я немного застрял. Я не хочу полного решения, только помощь с той частью, которую я не могу пройти. Вот игра:
Есть N
возможных цветов, известных заранее. Существует неизвестный набор (возможно, с повторениями) k
, который выбран и хранится в секрете. Цель состоит в том, чтобы угадать цвета (с повторениями) в секретном наборе. Позвольте мне еще раз подчеркнуть, что это набор, поэтому порядок не имеет значения , но повторы разрешены. Например
Цвета a,b,c,d,e,f,g,h
(N=8
) и неизвестный набор {a,c,c}
(k=3
).
Получены последовательные предположения, которые дают больше информации о наборе секретов. Каждое предположение должно быть набором (допускается повторение) k
цветов. Ответом на каждое предположение является количество цветов, общих между догадкой и неизвестным набором повторений. Например
Угадай: a,d,e
Результат: 1
Угадай: b,c,f
Результат: 1
Угадай: a,a,g
Результат: 1
Угадай: a,c,h
Результат: 2
Угадай: b,e,h
Результат: 0
Предположения сделаны кем-то другим. Мои цели:
- определить, когда известна информация об определенном цвете.
- Определить, когда может быть логически выведен неизвестный набор.
В начале игры ни один цвет не определен в наборе или определенно отсутствует в неизвестном наборе (при условии N>1
). После предположения, которое приводит к 0
, все цвета этого предположения, как известно, не находятся в неизвестном наборе. Если результат равен k
, то известно, что все цвета этого предположения находятся в неизвестном наборе. У меня проблемы с написанием программы, чтобы выяснить все случаи между ними. Например, ничего не известно наверняка о любом из цветов до последнего предположения выше. После последнего предположения известно, что набор равен a,c,c
. Логика такова:
- К 5,
b,e,h
нет в неизвестном наборе
- К 4
a,c
находятся в неизвестном наборе
- По 1,
d
нет в неизвестном наборе
- По 2,
f
не в неизвестном наборе
- К 3,
g
нет в неизвестном наборе
- Поэтому единственными цветами в неизвестном наборе являются
a
и c
.
- К 3,
a
не входит в неизвестный набор более одного раза.
- Следовательно, неизвестный набор -
a,c,c
.
Я могу работать с логикой таким образом, но я не уверен, как программировать это вообще. Если бы кто-то мог предложить структурированный способ сделать это, это было бы здорово. Я бы предпочел объяснение высокого уровня с псевдокодом, а не полную реализацию на каком-либо одном языке. Спасибо.