爱因斯坦写了一个谜语。他说,世界上98%的人无法解决这一问题。
在去上班的火车上,我用了25分钟就解开了这个谜团。这基本上只是推论。
一排有五种不同颜色的房子。住在每栋房子里住着一个有着不同nationality.的人--5位主人喝某种饮料,抽某种牌子的雪茄,并保留一定的pet. --没有主人有相同的宠物,抽同样牌子的雪茄,或者喝同样的beverage.问题:鱼是谁的?
为了解开这个谜团,爱因斯坦给出了15个提示:
有了这些提示,您就可以找到解决方案。
你的任务:制定一个程序,为你解开这个谜团。硬编码解决方案是不允许的(duh)
允许以任何格式对提示进行硬编码。
示例格式:
//Hints in order
(Nationality:Brit)==(Color:Red)
(Nationality:Swede)==(Pet:Dogs)
(Nationality:Dane)==(Drink: Tea)
(Color:Green)/(Color:White)
(Color:Green)==(Drink:Coffee)
(Smoke:PallMall)==(Pet:Birds)
(Color:Yellow)==(Smoke:Dunhill)
(House:3)==(Drink:Milk)
(Nationality:Norwegian)==(House:1)
(Smoke:Blend)/\(Pet:Cats)==的意思是等于 /在左边的意思of \在右边的意思of /\的意思是左或右
就像我说的,它允许硬编码提示或将它们作为输入。
输出:输出应该采用以下格式(带有正确的值,只对巨魔说出来;)
_____________ _____________ _____________ _____________ _____________
| Number | | Number | | Number | | Number | | Number |
| Nationality | | Nationality | | Nationality | | Nationality | | Nationality |
| Color | | Color | | Color | | Color | | Color |
| Drink | | Drink | | Drink | | Drink | | Drink |
| Smoke | | Smoke | | Smoke | | Smoke | | Smoke |
| Pet | | Pet | | Pet | | Pet | | Pet |
--------------- --------------- --------------- --------------- ---------------
The <Nationality> in the <Color> house owns the fish!Ascii艺术盒可以被你改变,只要它们是盒子,不管你用什么符号。
任何关于这个谜语和解决方案的知识都不能在程序中使用。它应该用纯粹的逻辑和演绎来解决谜语。
标记这是一个合作伙伴,但可能是一个代码挑战,不确定。任何关于赢得代码挑战的标准的想法都可以分享:)
现在,这是代码-高尔夫,所以程序与最低的字节码获胜。
祝好运和快乐编码:)
发布于 2014-05-09 21:34:49
m(A,Z):-member(A,Z).
e:-e(Z),w(Z).
e(Z):-Z=[[1,A,F,K,P,U],[2,B,G,L,Q,V],[3,C,H,M,R,W],[4,D,I,N,S,X],[5,E,J,O,T,Y]],m([_,b,r,_,_,_],Z),m([_,s,_,d,_,_],Z),m([_,d,_,_,t,_],Z),m([WH,_,w,_,_,_],Z),m([GH,_,g,_,_,_],Z),GH=:=WH-1,m([_,_,g,_,c,_],Z),m([_,_,_,b,_,p],Z),m([_,_,y,_,_,d],Z),m([3,_,_,_,m,_],Z),m([1,n,_,_,_,_],Z),m([BH,_,_,_,_,b],Z),m([CH,_,_,c,_,_],Z),(BH=:=CH+1;BH=:=CH-1),m([DH,_,_,_,_,d],Z),m([HH,_,_,h,_,_],Z),(HH=:=DH+1;HH=:=DH-1),m([_,_,_,_,b,l],Z),m([_,g,_,_,_,r],Z),m([NH,n,_,_,_,_],Z),m([YH,_,b,_,_,_],Z),(NH=:=YH+1;NH=:=YH-1),m([SH,_,_,_,_,b],Z),m([XH,_,_,_,w,_],Z),(SH=:=XH+1;SH=:=XH-1),p([n,d,b,g,s],[A,B,C,D,E]),p([y,b,r,g,w],[F,G,H,I,J]),p([c,h,b,f,d],[K,L,M,N,O]),p([w,t,m,c,b],[P,Q,R,S,T]),p([d,b,p,r,l],[U,V,W,X,Y]).
t(X,[X|R],R).
t(X,[F|R],[F|S]):-t(X,R,S).
p([W|X],Y):-p(X,V),t(W,Y,V).
p([],[]).
b:-write('+--+--+--+--+--+--+'),nl.
z(A):-writef('|%2L|%2L|%2L|%2L|%2L|%2L|',A),nl.
w([A,B,C,D,E]):-b,z(A),z(B),z(C),z(D),z(E),b.+--+--+--+--+--+--+
|1 |n |y |c |w |d |
|2 |d |b |h |t |b |
|3 |b |r |b |m |p |
|4 |g |g |f |c |r |
|5 |s |w |d |b |l |
+--+--+--+--+--+--+密钥:
发布于 2014-05-10 02:42:19
暴力搜索近250亿个可能的答案。
我的电脑大约需要75天才能运行这个程序。
我从来没有验证这个程序是否打印正确的答案!
以ruby riddle.rb < riddle.in的形式运行
riddle.rb (332个字节)
g=readlines
v=g.shift(5).map &:split
c,*d=v.map{|a|[*a.permutation]}
c.product(*d){|a|(f=eval a.map{|b|b.each_with_index.map{|s,i|"#{s}=#{i}\n"}.join}.join+'g.map{|h|eval h}.all?&&fish')&&(r=['-----------']*5
puts [r,[*0..4],*a,r].map{|s|s.map{|t|'|%11s|'%t}.join},"The #{a[0][f]} in the #{a[1][f]} house owns the fish!")}riddle.in (442字节)
brit dane german norwegian swede
blue green red white yellow
beer coffee milk tea water
blends bluemasters dunhill pall_mall prince
birds cats dogs fish horse
brit==red
swede==dogs
dane==tea
green==white-1
green==coffee
pall_mall==birds
yellow==dunhill
2==milk
norwegian==0
blends==cats-1||blends==cats+1
horse==dunhill-1||horse==dunhill+1
bluemasters==beer
german==prince
norwegian==blue-1||norwegian==blue+1
blends==water-1||blends==water+1输入文件必须包含5行名称,然后是逻辑表达式行。房子号码是0到4,一定有fish。
这个程序给Array#permutation打了五次电话,以找出各种方式来订购国籍、颜色、饮料、香烟和宠物。长循环是c.product(*d){|a|...},调用Array#product来迭代将近250亿个可能的答案。循环体具有(f=eval ...)&&(...)形式。eval ...部分计算逻辑表达式。如果所有都是真的,那么f是鱼的房屋号,&&(...)部分打印出答案。House number 0在Ruby中是正确的。
代码高尔夫意味着不增加代码的速度!但是我没有75天来运行这个程序!
发布于 2016-06-11 20:56:03
a([],L,L).
a([H|T],L2,[H|L3]):-a(T,L2,L3).
m(X,L):-a(_,[X|_],L).
r(X,Y,L):-a(_,[X,Y|_],L).
n(X,Y,L):-r(X,Y,L);r(Y,X,L).
s:-s(S),w(S).
s(S):-length(S,5),m([b,r,_,_,_],S),m([s,_,_,_,d],S),m([d,_,t,_,_],S),r([_,g,_,_,_],[_,w,_,_,_],S),m([_,g,c,_,_],S),m([_,_,_,p,b],S),m([_,y,_,d,_],S),S=[_,_,[_,_,m,_,_],_,_],S=[[n,_,_,_,_],_,_,_,_],n([_,_,_,b,_],[_,_,_,_,c],S),n([_,_,_,d,_],[_,_,_,_,h],S),m([_,_,b,l,_],S),m([g,_,_,r,_],S),n([n,_,_,_,_],[_,b,_,_,_],S),n([_,_,_,b,_],[_,_,w,_,_],S),m([_,_,_,_,f],S).
b:-write('----------------+'),nl.
z(Y,A):-write(Y),writef('|%2L|%2L|%2L|%2L|%2L|',A),nl.
w([S1,S2,S3,S4,S5]):-b,z(1,S1),z(2,S2),z(3,S3),z(4,S4),z(5,S5),b.https://codegolf.stackexchange.com/questions/26852
复制相似问题