Jak rozwiązać zgadywankę „Mastermind”?

Jak stworzysz algorytm do rozwiązania następującej zagadki: „Mastermind”?

Twój przeciwnik wybrał cztery różne kolory z zestawu sześciu (żółty, niebieski, zielony, czerwony, pomarańczowy, fioletowy). Musisz zgadnąć, które wybrali iw jakiej kolejności. Po każdym odgadnięciu twój przeciwnik mówi ci, ile (ale nie jakie) kolorów odgadłeś, które były właściwym kolorem we właściwym miejscu [„czarne”) i ile (ale nie które) miały odpowiedni kolor, ale w niewłaściwym miejscu ["upławy"]. Gra kończy się, gdy odgadniesz poprawnie (4 czarne, 0 białych).

Na przykład, jeśli twój przeciwnik wybrał (niebieski, zielony, pomarańczowy, czerwony) i zgadujesz (żółty, niebieski, zielony, czerwony), dostaniesz jeden „czarny” (dla czerwonego) i dwa białe (dla niebieski i zielony). Otrzymasz ten sam wynik za zgadywanie (niebieski, pomarańczowy, czerwony, fioletowy).

Interesuje mnie jaki algorytm wybierzesz i (opcjonalnie), jak to przetłumaczysz na kod (najlepiej w Pythonie). Interesują mnie rozwiązania kodowane, które są:

Wyczyść (łatwo zrozumiałe)ZwięzłyWydajny (szybko zgaduje)Skuteczna (najmniejsza liczba domysłów do rozwiązania zagadki)Elastyczne (można łatwo odpowiedzieć na pytania dotyczące algorytmu, np. Jaki jest jego najgorszy przypadek?)Ogólne (można łatwo dostosować do innych rodzajów układanki niż Mastermind)

Jestem zadowolony z algorytmu, który jest bardzo skuteczny, ale niezbyt wydajny (pod warunkiem, że nie jest źle wdrożony!); jednakże bardzo wydajny i skuteczny algorytm wdrożony w sposób nieelastyczny i nieprzenikniony nie jest użyteczny.

Mam własne (szczegółowe) rozwiązanie w Pythonie, które opublikowałem, ale nie jest to jedyne lub najlepsze podejście, więc proszę pisać więcej! Nie oczekuję eseju;)

questionAnswers(2)

yourAnswerToTheQuestion