একটি অ-অনুমান করা সুডোকু সমাধানকারী কার্যকর করুন


27

সংক্ষিপ্ত সুডোকু সমাধানকারী কার্যকর করুন।

সুডোকু ধাঁধা:

 | 1 2 3 | 4 5 6 | 7 8 9
-+-----------------------
A|   3   |     1 |
B|     6 |       |   5
C| 5     |       | 9 8 3
-+-----------------------
D|   8   |     6 | 3   2
E|       |   5   |
F| 9   3 | 8     |   6
-+-----------------------
G| 7 1 4 |       |     9
H|   2   |       | 8
I|       | 4     |   3

উত্তর:

 | 1 2 3 | 4 5 6 | 7 8 9
-+-----------------------
A| 8 3 2 | 5 9 1 | 6 7 4
B| 4 9 6 | 3 8 7 | 2 5 1
C| 5 7 1 | 2 6 4 | 9 8 3
-+-----------------------
D| 1 8 5 | 7 4 6 | 3 9 2
E| 2 6 7 | 9 5 3 | 4 1 8
F| 9 4 3 | 8 1 2 | 7 6 5
-+-----------------------
G| 7 1 4 | 6 3 8 | 5 2 9
H| 3 2 9 | 1 7 5 | 8 4 6
I| 6 5 8 | 4 2 9 | 1 3 7

নিয়মাবলী:

  1. ধরুন সমস্ত ম্যাজগুলি কেবল যুক্তি দ্বারা সমাধানযোগ্য।
  2. সমস্ত ইনপুট 81 টি অক্ষর দীর্ঘ হবে। অনুপস্থিত অক্ষরগুলি 0 হবে।
  3. একক স্ট্রিং হিসাবে সমাধান আউটপুট।
  4. আপনার ইচ্ছামত "গ্রিড" অভ্যন্তরীণভাবে সংরক্ষণ করা যেতে পারে।
  5. সমাধানটি অবশ্যই অ-অনুমানযোগ্য সমাধানটি ব্যবহার করে। ( সুডোকু সলভার দেখুন )

আই / ও উদাহরণ:

>sudoku.py "030001000006000050500000983080006302000050000903800060714000009020000800000400030"
832591674496387251571264983185746392267953418943812765714638529329175846658429137

আপনার সত্যই সময়সীমা যুক্ত করা উচিত।
JPvdMerwe

1
@ জেপিভিডিমারভে: ভালো কথা, তবে একটি সময়সীমা মানিক করা শক্ত হবে।
snmcdonald

1
@gnibbler: এটি আগে করা হয়ে থাকতে পারে (তবে কোডগলফ.সে নয়)। আমি মনে করি এটি সমাধান করার পাশাপাশি সম্প্রদায়ের জন্য কিছু মূল্য যুক্ত করতে মজাদার হবে, বিশেষত যদি কেউ সততার সাথে এটি সম্পর্কে আলোচনা করে।
snmcdonald

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

4
"কেবল যুক্তি দ্বারা সমাধানযোগ্য" সমস্যাগুলি খুব অস্পষ্ট। আপনি কী বোঝাতে চেয়েছেন, সম্ভবত, ক এর কেবলমাত্র প্রাথমিক পদক্ষেপগুলি ব্যবহার করে) কক্ষে এমন কোনও মান লিখছেন যার জন্য এটির সারি, কলাম এবং ব্লক নয়, খ) একটি নম্বর চিহ্নিত করুন যা কেবল তার সারিতে, কলামে এক জায়গায় যেতে পারে , বা ব্লক, এবং সেখানে লিখছেন?
xnor

উত্তর:


4

রুবি ( 449 436 অক্ষর)

I=*(0..8)
b=$*[0].split('').map{|v|v<'1'?I.map{|d|d+1}:[v.to_i]};f=b.map{|c|!c[1]}
[[z=I.map{|v|v%3+v/3*9},z.map{|v|v*3}],[x=I.map{|v|v*9},I],[I,x]
].map{|s,t|t.map{|i|d=[a=0]*10;s.map{|j|c=b[i+j];c.map{|v|d[v]+=1if !f[i+j]}
v,r=*c;s.map{|k|b[i+k].delete(v)if j!=k}if !r 
s[(a+=1)..8].map{|k|s.map{|l|b[i+l]-=c if l!=k&&l!=j}if c.size==2&&c==b[i+k]}}
v=d.index 1;f[i+k=s.find{|j|b[i+j].index v}]=b[i+k]=[v]if v}}while f.index(!1)
p b*''

উদাহরণ:

C:\golf>soduku2.rb 030001000006000050500000983080006302000050000903800060714000009020000800000400030
"832591674496387251571264983185746392267953418943812765714638529329175846658429137"

দ্রুত ব্যাখ্যা:
বোর্ড bহ'ল ৮ টি অ্যারেগুলির একটি অ্যারে যা প্রতিটি কক্ষের জন্য সমস্ত সম্ভাব্য মান ধারণ করে। তিন লাইনের অ্যারে প্রতিটি গ্রুপের জন্য [অফসেট, স্টার্ট_ইন্ডেক্স] রাখে (বাক্স, সারি, কলাম)। গ্রুপগুলির মাধ্যমে পুনরাবৃত্তি করার সময় তিনটি কার্য সম্পাদন করা হয়।

  1. ১ মাপের যে কোনও কক্ষের মান বাকি গোষ্ঠী থেকে সরানো হবে।
  2. যদি কোনও জোড়ার ঘরগুলিতে একই 2 টি মান থাকে তবে এই মানগুলি বাকী গোষ্ঠী থেকে সরানো হবে।
  3. প্রতিটি মানের গণনা এতে সঞ্চিত থাকে d- যদি কোনও মানের 1 টি উদাহরণ থাকে তবে আমরা সেই মানটিটি সহ কক্ষটি সেট করি এবং এতে ঘরটি স্থির করে চিহ্নিত করিf

সমস্ত ঘর স্থির না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।


আপনি বন্ধনীগুলি বাদ দিতে পারেন I=*(0..8), 2 টি অক্ষর সাশ্রয় করবেন।
ডগবার্ট

আমি পেতে sudokusolver.rb:8: unterminated string meets end of fileযদি আমি এটা দিয়ে শুরু ruby1.8 sudokusolver.rb 030...। আমি কি ভুল করছি?
ব্যবহারকারী অজানা

দেখে মনে হচ্ছে শেষ লাইনে অতিরিক্ত 'রয়েছে। কীভাবে সেখানে পেলেন তা নিশ্চিত নন ...
অ্যাশেলি 5'11

2

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

:-use_module(library(clpfd)).
a(X):-all_distinct(X).
b([],[],[]).
b([A,B,C|X],[D,E,F|Y],[G,H,I|Z]):-a([A,B,C,D,E,F,G,H,I]),b(X,Y,Z).
c([A,B,C,D,E,F,G,H,I|X])-->[[A,B,C,D,E,F,G,H,I]],c(X).
c([])-->[].
l(X,Y):-length(X,Y).
m(X,Y):-maplist(X,Y).
n(L,M):-l(M,L).
o(48,_).
o(I,O):-O is I-48.
:-l(L,81),see(user),m(get,L),seen,maplist(o,L,M),phrase(c(M),R),l(R,9),m(n(9),R),append(R,V),V ins 1..9,m(a,R),transpose(R,X),m(a,X),R=[A,B,C,D,E,F,G,H,I],b(A,B,C),b(D,E,F),b(G,H,I),flatten(R,O),m(write,O).

আউটপুট:

ইনপুটিং: 000000000000003085001020000000507000004000100090000000500000073002010000000040009 আউটপুট: 987654321246173985351928746128537694634892157795461832519286473472319568863745219

ইনপুটিং: 030001000006000050500000983080006302000050000903800060714000009020000800000400030 আউটপুট: 832591674496387251571264983185746392267953418943812765714638529329175846658429137

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.