读书人

Revisit again: 一路应聘智力题的编程

发布时间: 2012-10-20 14:12:47 作者: rapoo

Revisit again: 一道应聘智力题的编程求解, Einstein puzzle

Continue on: http://jellyfish.iteye.com/admin/blogs/610841, but this time we take a different approach, using ranged variables.

?

First, define all the attributes we need with a range. The reason we need this twist is that later on we can "rule out" (remove values which are not possible based on deduction).

?

?

?

and

?

?

?

and

?

?

and

?

?

and

?

?

and

?

These classes more or less have the same structure. Now we use these classes to define the Person class:

?

?Here the only thing unusual is the if block in the constructor because we don't want infinite recursion.

?

Now we define the clue interface:

?

I believe I forget the package names, but you can easily fix that.

?

The result is like this:

?

rule 01 applied: British hourse color is red.rule 02 applied: Swedish has dog.rule 03 applied: Denmark drinks tea.rule 05 applied: Green house host drinks coffeerule 09 applied: Norwegian lives in the 1st housr.rule 13 applied: German smokes prince.step=1state(0)={German:Unknown{Blue,White,Green,Yellow}:Unknown{Bird,Cat,Horse,Fish}:Unknown{Coffee,Beer,Milk,Water}:Prince:Unknown{3,2,5,4}}state(1)={Denmark:Unknown{Blue,White,Yellow}:Unknown{Bird,Cat,Horse,Fish}:Tea:Unknown{Pall Mall,Blend,Dunhill}:Unknown{2,5,4}}state(2)={Norwegian:Unknown{White,Green,Yellow}:Unknown{Bird,Cat,Horse,Fish}:Unknown{Coffee,Beer,Milk,Water}:Unknown{Blue Master,Pall Mall,Blend,Dunhill}:1}state(3)={Swedish:Unknown{Blue,White,Green,Yellow}:Dog:Unknown{Coffee,Beer,Milk,Water}:Unknown{Blue Master,Blend,Dunhill}:Unknown{3,2,5,4}}state(4)={British:Red:Unknown{Bird,Cat,Horse,Fish}:Unknown{Beer,Milk,Water}:Unknown{Blue Master,Pall Mall,Blend}:Unknown{3,2,5,4}}========================================================rule 04 applied: Green house is left neighbour of white house.rule 05 applied: Green house host drinks coffeestep=2state(0)={German:Unknown{Blue,White,Green}:Unknown{Cat,Horse,Fish}:Unknown{Coffee,Milk,Water}:Prince:Unknown{3,2,5,4}}state(1)={Denmark:Unknown{Blue,White}:Unknown{Bird,Cat,Horse,Fish}:Tea:Unknown{Pall Mall,Blend,Dunhill}:Unknown{2,5,4}}state(2)={Norwegian:Yellow:Unknown{Bird,Cat,Horse,Fish}:Unknown{Beer,Water}:Unknown{Blue Master,Pall Mall,Blend,Dunhill}:1}state(3)={Swedish:Unknown{Blue,White,Green}:Dog:Unknown{Coffee,Beer,Milk,Water}:Unknown{Blue Master,Blend,Dunhill}:Unknown{3,2,5,4}}state(4)={British:Red:Unknown{Bird,Cat,Horse,Fish}:Unknown{Beer,Milk,Water}:Unknown{Blue Master,Pall Mall,Blend}:Unknown{3,2,5,4}}========================================================step=3state(0)={German:Unknown{Blue,White,Green}:Unknown{Cat,Horse,Fish}:Unknown{Coffee,Milk}:Prince:Unknown{3,2,5,4}}state(1)={Denmark:Unknown{Blue,White}:Unknown{Bird,Cat,Horse,Fish}:Tea:Unknown{Pall Mall,Blend}:Unknown{2,5,4}}state(2)={Norwegian:Yellow:Unknown{Bird,Cat,Horse,Fish}:Water:Dunhill:1}state(3)={Swedish:Unknown{Blue,White,Green}:Dog:Unknown{Coffee,Beer,Milk}:Unknown{Blue Master,Blend}:Unknown{3,2,5,4}}state(4)={British:Red:Unknown{Bird,Cat,Horse,Fish}:Unknown{Beer,Milk}:Unknown{Blue Master,Pall Mall,Blend}:Unknown{3,2,5,4}}========================================================step=4state(0)={German:Unknown{White,Green}:Unknown{Cat,Fish}:Unknown{Coffee,Milk}:Prince:Unknown{3,2,5,4}}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Unknown{Cat,Fish}:Water:Dunhill:1}state(3)={Swedish:Unknown{White,Green}:Dog:Unknown{Coffee,Beer,Milk}:Unknown{Blue Master}:Unknown{3,2,5,4}}state(4)={British:Red:Unknown{Bird,Cat,Fish}:Unknown{Beer,Milk}:Unknown{Blue Master,Pall Mall}:Unknown{3,2,5,4}}========================================================step=5state(0)={German:Unknown{White,Green}:Unknown{Cat}:Unknown{Coffee,Milk}:Prince:Unknown{3,5,4}}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Fish:Water:Dunhill:1}state(3)={Swedish:Unknown{White,Green}:Dog:Unknown{Coffee,Beer,Milk}:Blue Master:Unknown{3,5,4}}state(4)={British:Red:Unknown{Bird,Cat}:Unknown{Beer,Milk}:Pall Mall:Unknown{3,5,4}}========================================================step=6state(0)={German:Unknown{White,Green}:Cat:Unknown{Coffee}:Prince:Unknown{3,5,4}}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Fish:Water:Dunhill:1}state(3)={Swedish:Unknown{White,Green}:Dog:Beer:Blue Master:Unknown{3,5,4}}state(4)={British:Red:Bird:Milk:Pall Mall:Unknown{3,5,4}}========================================================rule 05 applied: Green house host drinks coffeestep=7state(0)={German:Unknown{Green}:Cat:Coffee:Prince:Unknown{5,4}}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Fish:Water:Dunhill:1}state(3)={Swedish:White:Dog:Beer:Blue Master:Unknown{5,4}}state(4)={British:Red:Bird:Milk:Pall Mall:3}========================================================step=8state(0)={German:Green:Cat:Coffee:Prince:Unknown{5,4}}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Fish:Water:Dunhill:1}state(3)={Swedish:White:Dog:Beer:Blue Master:Unknown{5,4}}state(4)={British:Red:Bird:Milk:Pall Mall:3}========================================================step=9state(0)={German:Green:Cat:Coffee:Prince:4}state(1)={Denmark:Blue:Horse:Tea:Blend:2}state(2)={Norwegian:Yellow:Fish:Water:Dunhill:1}state(3)={Swedish:White:Dog:Beer:Blue Master:5}state(4)={British:Red:Bird:Milk:Pall Mall:3}========================================================time taken=31Process finished with exit code 0

?

The only thing I don't like is the puzzle class is too large, about <300 lines. I would've refactor it to <200 lines.

读书人网 >编程

热点推荐