আইনস্টাইনের ধাঁধা সমাধান করুন


19

আইনস্টাইন একটি ধাঁধা লিখেছিলেন। তিনি বলেছিলেন যে বিশ্বের 98% মানুষ এর সমাধান করতে পারেনি।

ট্রেনে কাজ করার সময় আমি প্রায় 25 মিনিটের মধ্যে এই ধাঁধাটি সমাধান করেছি। এটি মূলত কেবল ছাড়

ধাঁধা

একটানা 5 টি বিভিন্ন রঙে 5 টি বাড়ি রয়েছে।
প্রতিটি ঘরে আলাদা আলাদা জাতীয়তা থাকা ব্যক্তি থাকে।
5 জন মালিক একটি নির্দিষ্ট ধরণের পানীয় পান করেন, একটি নির্দিষ্ট ব্র্যান্ডের সিগার ধূমপান করেন এবং একটি নির্দিষ্ট পোষা প্রাণী রাখেন।
কোনও মালিকদের একই পোষা প্রাণী নেই, একই ব্র্যান্ডের সিগার ধূমপান করবেন না বা একই পানীয় পান করবেন না।
প্রশ্ন: মাছের মালিক কে?

এই ধাঁধাটি সমাধান করার জন্য আইনস্টাইন 15 টি ইঙ্গিত সরবরাহ করে:

  1. ব্রিট রেড হাউসে থাকে।
  2. সুইডেন কুকুরটিকে পোষা প্রাণী হিসাবে রাখে।
  3. ডেন চা পান করে।
  4. গ্রিন হাউসটি সাদা বাড়ির তত্ক্ষণাত্ বাম দিকে।
  5. গ্রিন হাউসের মালিক কফি পান করেন।
  6. যে মালিক পল মলে ধূমপান করেন তিনি পাখি পালন করেন।
  7. হলুদ ঘরের মালিক ডানহিলকে ধূমপান করেন।
  8. কেন্দ্রের বাড়ীতে থাকা মালিক দুধ পান করেন।
  9. নরওয়েজিয়ানরা প্রথম বাড়িতে থাকে।
  10. যে ব্যক্তি ব্লেন্ডসকে ধূমপান করে তার মালিক বিড়াল রাখেন তার পাশে থাকেন।
  11. যে ঘোড়া রাখে তার মালিক যে ডানহিল ধূমপান করে তার পাশে থাকে lives
  12. যে মালিক ব্লুমাস্টারকে ধূমপান করেন তিনি বিয়ার পান করেন।
  13. জার্মান যুবরাজ ধূমপান।
  14. নরওয়েজিয়ানরা নীল বাড়ির পাশে বাস করে।
  15. যে ব্যক্তি ব্লেন্ডসকে ধূমপান করে সেই মালিক যিনি জল পান করেন তার পাশে থাকেন।

এই ইঙ্গিতগুলির সাহায্যে আপনি একটি সমাধানে আসতে পারেন।

আপনার টাস্ক: এমন একটি প্রোগ্রাম তৈরি করুন যা আপনার জন্য এই ধাঁধাটি সমাধান করবে। কঠিন কোডিংয়ের সমাধান অনুমোদিত নয় (ডু)

এটি কোনও বিন্যাসে ইঙ্গিতগুলিকে হার্ডকোড করার অনুমতি রয়েছে।
উদাহরণ ফর্ম্যাট:

//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)

== এর অর্থ
left এর বাম পাশের / এর সমান / মানে side এর
ডানদিকে
/ \ মানে বাম বা ডানদিকে

যেমন আমি বলেছিলাম এটি হার্ডকোড ইঙ্গিতগুলির অনুমতি দেয় বা ইনপুট হিসাবে সেগুলি রাখে।

আউটপুট: আউটপুট নিম্নলিখিত বিন্যাসে হওয়া উচিত (সঠিক মান সহ, কেবল ট্রলের জন্য বলছি;))

 _____________    _____________    _____________    _____________    _____________
|   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 আর্ট বাক্সগুলি আপনার দ্বারা পরিবর্তন করা যেতে পারে, যতক্ষণ না সেগুলি বাক্স হয় আপনি কোন চিহ্ন ব্যবহার করেন তা বিবেচনা করে না।

এই ধাঁধা এবং সমাধান সম্পর্কে যে কোনও জ্ঞান প্রোগ্রামে ব্যবহার করা যাবে না । ধাঁধাটি সমাধান করার জন্য এটি খাঁটি যুক্তি এবং ছাড়ের ব্যবহার করা উচিত।

এটি একটি কোডগল্ফ হিসাবে ট্যাগ করেছে তবে একটি কোড চ্যালেঞ্জ হতে পারে, নিশ্চিত নয়। কোড চ্যালেঞ্জের জন্য বিজয়ী মানদণ্ডের বিষয়ে কোনও ধারণা নির্দ্বিধায় শেয়ার করুন :)

আপাতত এটি কোড-গল্ফ তাই সর্বনিম্ন বাইটকাউন্টের সাথে প্রোগ্রামটি।

শুভকামনা এবং শুভ কোডিং :)


15
প্রথম অনুচ্ছেদের দাবিগুলি অবশ্যই মিথ্যা।
পিটার টেলর

1
@ পিটারটেলর @ আপনার অর্থ কি? 98% এবং আইনস্টাইন বিট? এটি নিশ্চিতভাবে জানতে পারত না, ইন্টারভিউগুলি এটি বলে এবং নির্বিশেষে, ব্যাকগ্রাউন্ডের জন্য এর মজাদার :) আমি যখন এটি সমাধান করেছি তখন আমি বিশেষ অনুভব করেছি, "হ্যাঁ এই 2%"
তেওন প্রোঙ্ক

4
বিট উভয়। ইন্টারভ্যুগুলিতে টাইমক्यूबও বৈশিষ্ট্যযুক্ত, তাই তারা আপনাকে যা বলেছে তা বিশ্বাস না করার জন্য আপনাকে পরামর্শ দেওয়া হবে, বিশেষত যখন তারা কোনও প্রমাণ দেয় না।
পিটার টেলর

1
@ পিটারটেলর হ্যাঁ আমি জানি, তবে আমি যেমনটি বলেছিলাম যে, পটভূমির জন্য এটি কোনওভাবেই মজাদার নয় এবং এটি সত্য, বা কথাসাহিত্যের মতো নয় প্রদত্ত সমস্যার জন্য প্রয়োজনীয়। এছাড়াও উইকিপিডিয়া জানিয়েছে যে এর কোনও বাস্তব প্রমাণ নেই :)
তেওন প্রোঙ্ক

3
আমি মনে করি সমাধানগুলি ঘরবাড়ি, সম্পত্তি এবং ইঙ্গিতগুলির একটি নির্বিচারে সংখ্যায় সাধারণীকরণে সক্ষম হওয়া উচিত able তাহলে এটি একটি সত্যিই আকর্ষণীয় প্রশ্ন হবে যা আপনাকে একটি নিয়ম হিসাবে "কোনও হার্ডকডিং" এড়াতে হবে না। যা আমার অভিজ্ঞতায় সর্বদা একটি প্রশ্ন বাড়ে যা এটি আসলে হার্ডকোডিং।
ক্রুঙ্কার 18

উত্তর:


24

প্রোলোগ - 954 অক্ষর

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 |
+--+--+--+--+--+--+

মূল:

  • প্রথম কলামটি হ'ল নম্বর;
  • দ্বিতীয় কলামটি জাতীয়তা;
  • তৃতীয় কলামটি প্রিয় রঙ;
  • চতুর্থ কলামটি পোষ্য;
  • পঞ্চম কলামটি পানীয়; এবং
  • ষষ্ঠ কলামটি সিগারেট (r = যুবরাজ, l = নীলমাস্টার)।

9
এটি কাজের জন্য সঠিক ভাষা।
মেরিনাস

গল্ফ সংখ্যা তুলনা করার জন্য আপনার নাম বানান করা উচিত নয়?
blabla999

5

রুবি 322 + ইনপুট 442

প্রায় 25 বিলিয়ন সম্ভাব্য উত্তরের জন্তুটিকে জোর করে অনুসন্ধান করা ।
আমার কম্পিউটারটি এই প্রোগ্রামটি চালাতে প্রায় 75 দিন সময় লাগবে ।
এই প্রোগ্রামটি যদি সঠিক উত্তরটি প্রিন্ট করে তবে আমি কখনও যাচাই করিনি!

হিসাবে চালান ruby riddle.rb < riddle.in

riddle.rb (৩৩২ বাইট)

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জাতীয়তা, রঙ, পানীয়, ধূমপান এবং পোষা প্রাণীর অ্যারে অর্ডার করার সমস্ত উপায় সন্ধান করার জন্য প্রোগ্রামটি পাঁচবার কল করেছে। দীর্ঘ লুপটি প্রায় 25 বিলিয়ন সম্ভাব্য উত্তরগুলি পুনরাবৃত্তি করতে c.product(*d){|a|...}কল Array#productকরছে। লুপের দেহের রূপ রয়েছে (f=eval ...)&&(...)eval ...অংশ যৌক্তিক এক্সপ্রেশন মূল্যায়ন করে। যদি সমস্ত সত্য হয়, তবে fমাছের বাড়ির নম্বর এবং &&(...)অংশটি উত্তরটি মুদ্রণ করে। বাড়ি নম্বর 0 টি রুবিতে সত্য।

কোড গল্ফ মানে গতির জন্য কোড যুক্ত না করা! তবে প্রোগ্রামটি চালাতে আমার 75 দিনের অভাব রয়েছে !


1
এমনকি ব্রুট ফোর্সের পরিবর্তে এক বা দুটি ক্লু ব্যবহার করা প্রচুর অনুসন্ধান সাশ্রয় করতে পারে।
qwr

আমি রুবিকে চিনি না, তবে ইন্টারনেট বলে যে এটি ধীর গতির । আমি বাজি ধরেছি যে আপনি যদি আপনার উত্তরটি সংকলিত ভাষায় অনুবাদ করেন এবং তারপরে এটি কিছুটা অপ্টিমাইজডও হন তবে আপনি 5000% স্পিডআপের কাছাকাছি যেতে পারবেন (যুক্তিসঙ্গত পরিমাণে যথাযথ পরিমাণে যথার্থতা যাচাই করতে হবে)। আপনি যদি জঘন্য অনুবাদ এমনকি কুরুচিপূর্ণ, তবে ভালভাবে নথিভুক্ত করেন তবে আমি এটি আপনার জন্য অপ্টিমাইজ করে এবং তারপরে নির্ভুলতা যাচাই করে খুশি হব।
রেইনবোল্ট

4

প্রোলোগ, 653 টি অক্ষর

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.

1
আমি আপনার কোডের অপ্রয়োজনীয় স্পেস এবং লাইনব্রেকগুলি সরিয়ে ফেলার স্বাধীনতা গ্রহণ করেছি, যা এটি 653 টি অক্ষরে নেমে এসেছে।

1
এসডাব্লুআই-প্রোলোগে পরীক্ষিত, কেবল টাইপ করুন? - এস।
ej8000

3

স্মলটালক 1332 অক্ষর

প্লেইন ছোট্ট টাল্ক ব্যবহার:

|n c v g p t r|n:=#(Brit Swede Dane Norwegian German
Red Green White Yellow Blue
Tea Coffee Milk Beer Water
PallMall Dunhill Blends Bluemasters Prince
Dogs Birds Cats Horses Fish).
v:=Dictionary new.n do:[:n|v at:n put:nil].g:=n splitForSize:5.
c:={{[:b :r|b==r].#Brit.#Red}.{[:s :d|s==d].#Swede.#Dogs}.{[:d :t|d==t].#Dane.#Tea}.
{[:g :w|g==(w-1)].#Green.#White}.{[:g :c|g==c].#Green.#Coffee}.
{[:p :b|p==b].#PallMall.#Birds}.{[:y :d|y==d].#Yellow.#Dunhill}.
{[:m|m==3].#Milk}.{[:n|n==1].#Norwegian}.{[:b :c|(b-c)abs==1].#Blends.#Cats}.
{[:h :d|(h-d)abs==1].#Horses.#Dunhill}.{[:m :b|m==b].#Bluemasters.#Beer}.
{[:g :p|g==p].#German.#Prince}.{[:n :b|(n-b)abs==1].#Norwegian.#Blue}.
{[:b :w|(b-w)abs==1].#Blends.#Water}}.
t:=[:c|x:=(c from:2collect:[:n|v at:n]).(x includes:nil)or:[c first valueWithArguments:x]].
p:=[|f|(((''-'',* 16),'' ''),*5)printCR.g do:[:n||w|w:=n collect:[:n|v at:n].w sortWith:n.
n do:[:n|''|''print.(n centerPaddedTo:14)print.''| ''print].''''printCR.].(((''-'',* 16),'' ''),*5)printCR.
f:=v at:#Fish.(''The %1 in the %2 house owns the fish''bindWith:(g first detect:[:n|(v at:n)==f])with:((g at:2) detect:[:n|(v at:n)==f]))printCR].
r:=[:gi|gi==0ifTrue:p ifFalse:[#(1 2 3 4 5)permutationsDo:[:perm|v declareAll:(g at:gi)from:perm.
(c conform:t)ifTrue:[r value:gi-1]].v declareAll:(g at:gi)from:#(nil),*5]].
r value:g size.

আউটপুট:

---------------- ---------------- ---------------- ---------------- ---------------- 
|  Norwegian   | |     Dane     | |     Brit     | |    German    | |    Swede     | 
|    Yellow    | |     Blue     | |     Red      | |    Green     | |    White     | 
|    Water     | |     Tea      | |     Milk     | |    Coffee    | |     Beer     | 
|   Dunhill    | |    Blends    | |   PallMall   | |    Prince    | | Bluemasters  | 
|     Cats     | |    Horses    | |    Birds     | |     Fish     | |     Dogs     | 
---------------- ---------------- ---------------- ---------------- ----------------
The German in the Green house owns the fish

গল্ফযুক্ত সংস্করণটি প্রায় অপঠনযোগ্য হিসাবে, পড়ার যোগ্যতার জন্য এখানে যথাযথ নাম, ইনডেন্টেশন এবং স্পেস সহ বিকাশকারীর কোড রয়েছে:

|names constraints foundSolution v groups printSolution testC test try|

names := #(Brit Swede Dane Norwegian German
 Red Green White Yellow Blue
 Tea Coffee Milk Beer Water
 PallMall Dunhill Blends Bluemasters Prince
 Dogs Birds Cats Horses Fish).

v := Dictionary new.
names do:[:n | v at:n put:nil].
groups := names splitForSize:5.

constraints := {
        {[:b :r | b==r] . #Brit . #Red   }.          "/ The Brit lives in the red house.
        {[:s :d | s==d] . #Swede . #Dogs }.          "/ The Swede keeps dogs as pets.
        {[:d :t | d==t] . #Dane . #Tea   }.          "/ The Dane drinks tea.
        {[:g :w | g==(w-1)] . #Green . #White }.     "/ The green house is on the immediate left of the white house.
        {[:g :c | g==c] . #Green . #Coffee}.         "/ The green house's owner drinks coffee.
        {[:p :b | p==b] . #PallMall . #Birds}.       "/ The owner who smokes Pall Mall rears birds.
        {[:y :d | y==d] . #Yellow . #Dunhill}.       "/ The owner of the yellow house smokes Dunhill.
        {[:m | m==3] . #Milk}.                       "/ The owner living in the center house drinks milk.
        {[:n | n==1] . #Norwegian }.                 "/ The Norwegian lives in the first house.
        {[:b :c | (b-c)abs==1] . #Blends . #Cats}.   "/ The owner who smokes Blends lives next to the one who keeps cats.
        {[:h :d | (h-d)abs==1] . #Horses . #Dunhill}."/ The owner who keeps the horse lives next to the one who smokes Dunhill.
        {[:m :b | m==b] . #Bluemasters . #Beer}.     "/ The owner who smokes Bluemasters drinks beer.
        {[:g :p | g==p] . #German . #Prince}.        "/ The German smokes Prince.
        {[:n :b | (n-b)abs==1] . #Norwegian . #Blue}."/ The Norwegian lives next to the blue house.
        {[:b :w | (b-w)abs==1] . #Blends . #Water}.  "/ The owner who smokes Blends lives next to the one who drinks water.
}.
testC := [:c | vi:=((c from:2) collect:[:n|v at:n]). (vi includes:nil) or:[c first valueWithArguments:vi]].
test := [constraints conform:testC].

printSolution :=
 [  |f|
    ((('-',* 16),' '),*5) printCR.
    groups do:[:names|
         |values|
         values := names collect:[:nm|v at:nm].
         values sortWith:names.
         names do:[:n| '|'print. (n centerPaddedTo:14)print.'| ' print].
         '' printCR.
    ].
    ((('-',* 16),' '),*5) printCR.
    f := v at:#Fish.
    ('The %1 in the %2 house owns the fish'
        bindWith:((groups at:1) detect:[:n|(v at:n)==f])
        with:((groups at:2) detect:[:n|(v at:n)==f]))printCR
 ].


try := [:gi |
    gi == 0 
     ifTrue: printSolution
     ifFalse:[
        (1 to:5) asArray permutationsDo:[:perm |
            v declareAll:(groups at:gi) from:perm.
            test value ifTrue:[
                try value:(gi-1).
            ].
        ].
        v declareAll:(groups at:gi) from:#(nil nil nil nil nil).
    ].
].
try value:groups size.

সীমাবদ্ধ সমাধানকারী গ্রন্থাগার ব্যবহার:

একটি সীমাবদ্ধ সমাধানকারী গ্রন্থাগার ব্যবহার করা যা ওজেড / মোজার্ট ম্যানুয়ালটিতে বর্ণিতটির সাথে খুব মিল। যেমনটি আমি প্রত্যাশা করি আপনি প্রতিযোগিতার জন্য এটি বৈধ নয় বলে অভিযোগ করবেন ;-), এটি কেবল আপনার বিনোদন এবং অনুপ্রেরণার জন্য যুক্ত করা হয়েছে (আপনার ভাষায় একটি কনট্রিন্ট প্যাকেজ সন্ধান করুন), অবরুদ্ধ, এবং চরিত্র গণনা নয়।

|solution|

solution := Solver
    anySolutionFor:[
        |Brit Swede Dane Norwegian German
         Red Green White Yellow Blue
         PallMall Dunhill Prince Blends Bluemasters
         Tea Coffee Water Beer Milk
         Dogs Birds Cats Horses Fish|

        Brit        := (1 %% 5) name:#Brit.
        Swede       := (1 %% 5) name:#Swede.
        Dane        := (1 %% 5) name:#Dane.
        Norwegian   := (1 %% 5) name:#Norwegian.
        German      := (1 %% 5) name:#German.

        Red     := (1 %% 5) name:#Red.
        Green   := (1 %% 5) name:#Green.
        White   := (1 %% 5) name:#White.
        Yellow  := (1 %% 5) name:#Yellow.
        Blue    := (1 %% 5) name:#Blue.

        PallMall     := (1 %% 5) name:#PallMall.
        Dunhill      := (1 %% 5) name:#Dunhill.
        Prince       := (1 %% 5) name:#Prince.
        Blends       := (1 %% 5) name:#Blends.
        Bluemasters  := (1 %% 5) name:#Bluemasters.

        Tea    := (1 %% 5) name:#Tea.
        Coffee := (1 %% 5) name:#Coffee.
        Milk   := (1 %% 5) name:#Milk.
        Water  := (1 %% 5) name:#Water.
        Beer   := (1 %% 5) name:#Beer.

        Dogs         := (1 %% 5) name:#Dogs.
        Birds        := (1 %% 5) name:#Birds.
        Cats         := (1 %% 5) name:#Cats.
        Horses       := (1 %% 5) name:#Horses.
        Fish         := (1 %% 5) name:#Fish.

        Solver allDistinct:{ Brit . Swede . Dane . Norwegian . German. }.
        Solver allDistinct:{ Red. Green. White. Yellow. Blue. }.
        Solver allDistinct:{ PallMall. Dunhill. Prince. Blends. Bluemasters. }.
        Solver allDistinct:{ Tea. Coffee. Milk. Water. Beer }.
        Solver allDistinct:{ Dogs. Birds. Cats. Horses. Fish. }.

        Brit       =: Red.           "/ The Brit lives in the red house.
        Swede      =: Dogs.          "/ The Swede keeps dogs as pets.
        Dane       =: Tea.           "/ The Dane drinks tea.
        Green =: (White - 1).        "/ The green house is on the immediate left of the white house.
        Green =: Coffee.             "/ The green house's owner drinks coffee.
        PallMall   =: Birds.         "/ The owner who smokes Pall Mall rears birds.
        Yellow =: Dunhill.           "/ The owner of the yellow house smokes Dunhill.
        Milk =: 3.                   "/ The owner living in the center house drinks milk.
        Norwegian =: 1.              "/ The Norwegian lives in the first house.
        (Blends - Cats) abs =: 1.    "/ The owner who smokes Blends lives next to the one who keeps cats.
        (Horses - Dunhill) abs =: 1. "/ The owner who keeps the horse lives next to the one who smokes Dunhill.
        Bluemasters =: Beer.         "/ The owner who smokes Bluemasters drinks beer.
        German =: Prince.            "/ The German smokes Prince.
        (Norwegian - Blue) abs =: 1. "/ The Norwegian lives next to the blue house.
        (Blends - Water) abs =: 1.   "/ The owner who smokes Blends lives next to the one who drinks water.
    ].

solution printCR.

"=:" অপারেটরটি লক্ষ্য করুন, যার অর্থ "সাথে একত্রিত"। সমাধান ব্লক সমস্যা ব্লকে সংজ্ঞায়িত সীমাবদ্ধতার সেটে ব্যাকট্র্যাকিং অ্যালগরিদম ব্যবহার করে। বাকী কোডগুলি সমাধানগুলিকে বাক্সে মুদ্রণ করে:

    |pLine pSorted f |

    pLine := [ 
        (1 to:5) do:[:i | ('-' ,* 15) print] separatedBy:[' ' print].
        '' printCR.
    ].
    pSorted := [:keys |
        |items t|

        items := keys collect:[:k| solution at:k].
        t := keys copy. items values sortWith:t. 
        pLine value:(t collect:[:x | '| ',(x centerPaddedTo:11),' |']).
    ].

    pLine value.
    pSorted value:#( Brit Swede Dane Norwegian German ).
    pSorted value:#( Red Green White Yellow Blue ).
    pSorted value:#( Tea Coffee Milk Water Beer ).
    pSorted value:#( PallMall Dunhill Prince Blends Bluemasters ).
    pSorted value:#( Dogs Birds Cats Horses Fish ).
    pLine value.

    f := solution at:'Fish'.
    ('The %1 in the %2 house owns the fish!'
        bindWith:(#( Brit Swede Dane Norwegian German ) detect:[:n| (solution at:n) == f])
        with:(#( Red Green White Yellow Blue ) detect:[:n| (solution at:n) == f])
            ) printCR.

আউটপুট:

Solution(Brit->3 Swede->5 Dane->2 Norwegian->1 German->4 Red->3 Green->4
 White->5 Yellow->1 Blue->2 PallMall->3 Dunhill->1 Prince->4 Blends->2
 Bluemasters->5 Tea->2 Coffee->4 Milk->3 Water->1 Beer->5 Dogs->5 Birds->3
 Cats->1 Horses->2 Fish->4)
--------------- --------------- --------------- --------------- ---------------
|  Norwegian  | |    Dane     | |    Brit     | |   German    | |    Swede    |
|   Yellow    | |    Blue     | |     Red     | |    Green    | |    White    |
|    Water    | |     Tea     | |    Milk     | |   Coffee    | |    Beer     |
|   Dunhill   | |   Blends    | |  PallMall   | |   Prince    | | Bluemasters |
|    Cats     | |   Horses    | |    Birds    | |    Fish     | |    Dogs     |
--------------- --------------- --------------- --------------- ---------------
The German in the Green house owns the fish!

সম্পাদনা: উফ - আমি সরল সংস্করণে "মাছের মালিক" লাইনটি প্রিন্ট করতে ভুলে গিয়েছি।


3

রুবি 1166 অক্ষর

সম্পাদনা: সঠিক আউটপুট ফর্ম্যাট জন্য আপডেট

একটি এমবিপি আই 5-তে নিয়মিত 0.2 সেকেন্ডের মধ্যে চলে s

সূত্র: গিথুব দেখুন

এক রৈখিক:

def q(a);a.permutation;end;def z(a,b,c,d);l(a,b,c,d)||l(c,d,a,b);end;def l(a,b,c,d);(0..4).any?{|i|a[i]==b&&c[i+1]==d};end;def i(a,b,c,d);(0..4).any?{|i|a[i]==b&&c[i]==d};end;def t(i);['White','Yellow','Blue','Red','Green','German','Swede','Brit','Norwegian','Dane','Birds','Cats','Horses','Fish','Dogs','Beer','Water','Tea','Milk','Coffee','Blends','PallMall','Prince','Bluemasters','Dunhill'][i];end;def y(s);l=13-s.length;'|'+' '*(l/2.0).floor+s+' '*(l/2.0).ceil+'|';end;def d(s);b=[' '+(0..4).map{'_'*13}.join(' '*4)];u='  ';b<<[1,2,3,4,5].map{|i|y(i.to_s)}.join(u);s.each{|i|b<<i.map{|j|y(t(j))}.join(u)};b<<(0..4).map{'-'*15}.join(u);b<<'';z=s[4].index(13);b<<"The #{t s[0][z]} in the #{t s[1][z]} house owns the fish!";b.join "\n";end;q([0,1,2,3,4]).each{|c|l(c,4,c,0)||next;q([5,6,7,8,9]).each{|n|i(n,7,c,3)||next;n[0]==8||next;z(n,8,c,2)||next;q([10,11,12,13,14]).each{|a|i(n,6,a,14)||next;q([15,16,17,18,19]).each{|d|d[2]==18||next;i(c,4,d,19)||next;i(n,9,d,17)||next;q([20,21,22,23,24]).each{|s|z(a,12,s,24)||next;i(s,21,a,10)||next;z(s,20,d,16)||next;z(s,20,a,11)||next;i(n,5,s,22)||next;i(c,1,s,24)||next;i(s,23,d,15)||next;puts d([n,c,d,s,a]);exit}}}}}

পৃষ্ঠাটি ফিট করার জন্য নতুন লাইনের সাথে প্যাড করা:

def q(a);a.permutation;end;def z(a,b,c,d);l(a,b,c,d)||l(c,d,a,b);end
def l(a,b,c,d);(0..4).any?{|i|a[i]==b&&c[i+1]==d};end;def i(a,b,c,d);
(0..4).any?{|i|a[i]==b&&c[i]==d};end;def t(i);['White','Yellow','Blue',
'Red','Green','German','Swede','Brit','Norwegian','Dane','Birds',
'Cats','Horses','Fish','Dogs','Beer','Water','Tea','Milk','Coffee',
'Blends','PallMall','Prince','Bluemasters','Dunhill'][i];end;def y(s);
l=13-s.length;'|'+' '*(l/2.0).floor+s+' '*(l/2.0).ceil+'|';end;
def d(s);b=[' '+(0..4).map{'_'*13}.join(' '*4)];u='  ';
b<<[1,2,3,4,5].map{|i|y(i.to_s)}.join(u);s.each{|i|b<<i.map{|j|
y(t(j))}.join(u)};b<<(0..4).map{'-'*15}.join(u);b<<'';
z=s[4].index(13);
b<<"The #{t s[0][z]} in the #{t s[1][z]} house owns the fish!";
b.join "\n";end;q([0,1,2,3,4]).each{|c|l(c,4,c,0)||next;
q([5,6,7,8,9]).each{|n|i(n,7,c,3)||next;n[0]==8||next;z(n,8,c,2)||next;
q([10,11,12,13,14]).each{|a|i(n,6,a,14)||next;
q([15,16,17,18,19]).each{|d|d[2]==18||next;i(c,4,d,19)||next;
i(n,9,d,17)||next;q([20,21,22,23,24]).each{|s|z(a,12,s,24)||next;
i(s,21,a,10)||next;z(s,20,d,16)||next;z(s,20,a,11)||next;i(n,5,s,22)||next;
i(c,1,s,24)||next;i(s,23,d,15)||next;puts d([n,c,d,s,a]);exit}}}}}

আউটপুট:

 _____________    _____________    _____________    _____________    _____________
|      1      |  |      2      |  |      3      |  |      4      |  |      5      |
|  Norwegian  |  |    Dane     |  |    Brit     |  |   German    |  |    Swede    |
|   Yellow    |  |    Blue     |  |     Red     |  |    Green    |  |    White    |
|    Water    |  |     Tea     |  |    Milk     |  |   Coffee    |  |    Beer     |
|   Dunhill   |  |   Blends    |  |  PallMall   |  |   Prince    |  | Bluemasters |
|    Cats     |  |   Horses    |  |    Birds    |  |    Fish     |  |    Dogs     |
---------------  ---------------  ---------------  ---------------  ---------------

The German in the Green house owns the fish!

অবহেলিত কোড

@colors        = [:white, :yellow, :blue, :red, :green].shuffle.permutation
@cigars        = [:blends, :pall_mall, :prince, :bluemasters, :dunhill].shuffle.permutation
@nationalities = [:german, :swedish, :british, :norwegian, :danish,].shuffle.permutation
@drinks        = [:beer, :water, :tea, :milk, :coffee].shuffle.permutation
@pets          = [:birds, :cats, :horses, :fish, :dogs].shuffle.permutation

def next_to?(set_a, val_a, set_b, val_b)
  left_of?(set_a, val_a, set_b, val_b) ||
  left_of?(set_b, val_b, set_a, val_a)
end

def left_of?(set_a, val_a, set_b, val_b)
  (0..4).any? do |i|
    set_a[i]   == val_a &&
    set_b[i+1] == val_b
  end
end

def implies?(set_a, val_a, set_b, val_b)
  (0..4).any? do |i|
    set_a[i] == val_a &&
    set_b[i] == val_b
  end
end

def solve
  i = 0
  @colors.each do |colors|
    i += 1
    next unless left_of?(colors, :green, colors, :white)
    @nationalities.each do |nationalities|
      i += 1
      next unless implies?(nationalities, :british, colors, :red)
      next unless nationalities[0] == :norwegian
      next unless next_to?(nationalities, :norwegian, colors, :blue)
      @pets.each do |pets|
        i += 1
        next unless implies?(nationalities, :swedish, pets, :dogs) 
        @drinks.each do |drinks|
          i += 1
          next unless drinks[2] == :milk
          next unless implies?(colors, :green, drinks, :coffee)
          next unless implies?(nationalities, :danish, drinks, :tea)
          @cigars.each do |cigars|
            i += 1
            next unless next_to?(pets, :horses, cigars, :dunhill)
            next unless implies?(cigars, :pall_mall, pets, :birds)
            next unless next_to?(cigars, :blends, drinks, :water)
            next unless next_to?(cigars, :blends, pets, :cats)
            next unless implies?(nationalities , :german, cigars, :prince)
            next unless implies?(colors, :yellow, cigars, :dunhill)
            next unless implies?(cigars, :bluemasters,  drinks, :beer)
            return [colors, nationalities, pets, drinks, cigars], i
          end
        end
      end
    end
  end
end

class Symbol
  def humanize
    result = self.to_s
    result.gsub!('_', ' ')
    result.split(' ').collect{|part| part.capitalize }.join(' ')
  end
end

solution, attempts = solve

puts "\nSolved in #{attempts} attempts.\n\n"

for i in (0..4)
  number, color, nationality, cigar, drink, pet = i+1, solution[0][i], solution[1][i].humanize, solution[4][i].humanize, solution[3][i], solution[2][i]
  puts "House #{number} is #{color}. The owner is #{nationality}, smokes #{cigar}, drinks #{drink}, and keeps #{pet}."
end

puts "\n"

আউটপুট:

Solved in 37663 attempts.

House 1 is yellow. The owner is Norwegian, smokes Dunhill, drinks water, and keeps cats.
House 2 is blue. The owner is Danish, smokes Blends, drinks tea, and keeps horses.
House 3 is red. The owner is British, smokes Pall Mall, drinks milk, and keeps birds.
House 4 is green. The owner is German, smokes Prince, drinks coffee, and keeps fish.
House 5 is white. The owner is Swedish, smokes Bluemasters, drinks beer, and keeps dogs.

shuffleপ্রাথমিক সেটআপের ব্যবহারটি প্রতিবার অনন্য সমাধানের পাথ নিশ্চিত করে। রানের মধ্যে পরিবর্তনগুলির চেষ্টা করে আপনি এটি দেখতে পারেন। এটি আলাদাভাবে ইনপুটগুলিতে খাওয়ানোর প্রয়োজনীয়তা হ্রাস করে, যদিও কোডটি করার জন্য এটি পরিবর্তন করা তুচ্ছ হবে।


2
আউটপুট প্রয়োজনীয় বিন্যাসের সাথে মেলে না।
মেগো

এখানে পিপিসিজিতে সঠিক সমাধানের পক্ষে যথেষ্ট নয়। উত্তরগুলি অবশ্যই নির্দিষ্টকরণের সাথে মেলে, যার মধ্যে এটি সঠিক উপায়ে ফর্ম্যাট করা রয়েছে।
এল'েন্ডিয়া স্টারম্যান

2
ঠিক আছে. চ্যালেঞ্জের বৈশিষ্টটি পূরণ করতে ফর্ম্যাট কোড সহ মূল পোস্ট আপডেট হয়েছে।
seanh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.