Poszukałem „kodu 20q” i znalazłem to: http://mosaic.cnfolio.com/B142LCW2008A197
Ta wersja jest tylko dla zwierząt, ale faktyczne 20 pytań prawdopodobnie ma podobny algorytm.
Oto krótki przegląd kodu, który podłączyłem:
Istnieje kilka różnych odpowiedzi zakodowanych na stałe w programie. Następnie przypisuje się im kilka atrybutów PRAWDA lub FAŁSZ:
#define ANIMALS_LIST "daddylonglegs bee penguin eagle giraffe octopus tiger elephant jellyfish bull \nparrot dolphin python crocodile cat leopard monkey zebra sheep rat \nowl spider frog polarbear snail tortoise rabbit salmon rhino fox"
#define MAMMALS "0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1 1"
#define FLYING_ANIMALS "1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
#define WATER_ANIMALS "0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0"
#define BEAK "0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0"
...
Jak widać pszczoła nie jest ssakiem, ale lata, itp.
Dla każdej grupy istnieje tablica:
int mammals[ TOTAL_ANIMALS ] = { 0 };
int flying_animals[ TOTAL_ANIMALS ] = { 0 };
int water_animals[ TOTAL_ANIMALS ] = { 0 };
...
Kiedy zadawane jest każde pytanie:
askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals );
Program analizuje definicję odpowiedniej kategorii i śledzi, które zwierzę jest najprawdopodobniej tym, o którym myślisz, na podstawie wartości PRAWDA lub FAŁSZ oraz wprowadzonej odpowiedzi Tak lub Nie na pytanie.
Odbywa się to w:
void askUserQuestion( int guessNumber, char* question, int* animalData );