Slimmeriken
Ook de “Slimmeriken” puzzel in het boek “Eureka! Logic Puzzles for Really Smart People” (pagina 124-125) is voor Co-pilot een makkie. De eerste versie levert een brute-force programma op, die simpelweg alle 1,7 combinaties afsjouwt. Dat gaat wel zo snel dat je al tevreden zou kunnen zijn. Maar dat moet toch echt sneller mogelijk zijn.
In de stellingen liggen een aantal combinaties hard vast. Bijvoorbeeld “Emmy heeft het laagste IQ”, “Ada heeft als enige een leeftijd vaanvan het 1e cijfer de helft is van het 2e”, “Edwin heeft het hoogste IQ”, “Edwin is niet 27”, enz
Samen maakt dat er ‘nog’ maar 5761 combinaties over blijven.
Daarna kan nog verder geoptimaliseerd worden:
Stellingen direct verwerken in de permutatiefase
In plaats van alle combinaties te genereren en daarna te filteren met IsValid, kun je sommige stellingen tijdens het genereren al gebruiken om combinaties vroegtijdig uit te sluiten.
Stelling 1: De middelste leeftijd (qua volgorde) moet een IQ hebben dat ±1 is van die van de 64-jarige. Je kunt dit al checken tijdens het genereren van leeftijdscombinaties.
Stelling 3: De IQ van de deeltjesfysicus is 2 hoger dan die van de biochemicus. Dit kun je al checken tijdens het genereren van vakgebiedcombinaties.
Slimme filtering van vakgebieden
Je kunt ook regels toepassen op vakgebiedcombinaties vóór je ze gebruikt:
Stelling 3: Zoek alleen vakgebiedcombinaties waarin “Deeltjes” en “Biochemie” niet aan dezelfde persoon zijn gekoppeld én waarin het IQ-verschil tussen die twee personen precies 2 is.
Stelling 4: Zoek alleen combinaties waarin “Fotonica” en Emmy niet aan dezelfde persoon zijn gekoppeld, en het IQ van Fotonica is 1 hoger dan Emmy.
Dat levert op:

!
Het initiële VB programma is uitstekend, echter blijkt (ook de vorige puzzel) vooralsnog steeds de brute force methode gebruikt te worden.