অনন্য সুডোকু সন্ধানকারী


19

চ্যালেঞ্জ:

স্ট্যান্ডার্ড ইনপুটটিতে সুডোকু বোর্ড দেওয়া, বোর্ডটিকে অনন্য করতে সংখ্যার নূন্যতম সংখ্যার যোগ করুন।

সুনির্দিষ্ট / নিয়মাবলী:

  • ইনপুটটি নিম্নরূপে ফর্ম্যাট করা হয়েছে (সমস্ত সাদা স্থান উল্লেখযোগ্য)

    516|827|943
    278|394|615
    349|615|872
    ---+---+---
    98 |4 2|156
    465|189|237
    12 |5 6|489
    ---+---+---
    892|743|561
    634|951|728
    751|268|394
    
  • আউটপুট প্রতি লাইনে একটি সংখ্যার সাথে ফর্ম্যাট করা হয়, যেমন (x,y):z- x এবং y শীর্ষে বাম দিক থেকে শুরু করে নীচে এবং ডানদিকে বাড়ানো হয়; z যোগ করার সংখ্যা।

    • এই ক্ষেত্রে এই সকল বৈধ আউটপুট হবে: (3,4):3, (3,4):7, (5,4):3, (5,4):7, (3,6):3, (3,6):7, (5,6):3, এবং (5,6):7, এই যে কোনো একটি বোর্ড সমাধান করা সম্ভব হবে।
  • যদি কোনও অনন্য / সমাধান করা সুডোকু বোর্ড প্রবেশ করানো হয় তবে প্রোগ্রামটি কোনও কিছু, এমনকি একটি নতুন লাইনও প্রিন্ট করা উচিত নয়।
  • প্রোগ্রামটি কোনও বোর্ডের জন্য এক ঘণ্টারও কম সময়ে চলতে হবে (আমি একটি সম্পূর্ণ ফাঁকা বোর্ড ব্যবহার করে পরীক্ষা করার পরামর্শ দিচ্ছি, বা একটি বোর্ড যাতে এলোমেলো নম্বর আছে ...)।

স্কোরিং:

  • সমস্ত সাদা স্থান সহ ক্যারেক্টারে আপনার মোট (গল্ফড) কোড আকারটি নিন ...

বোনাসেস:

১/২ কোডের আকার : যদি প্রোগ্রামটি কোনও একক বিস্মৃতিবোধক পয়েন্টটি মুদ্রণ করে এবং কোনও সমাধান প্রবেশ করানো না করে বোর্ড থাকা বন্ধ করে দেয়।

১/২ কোডের আকার : যদি প্রোগ্রামটি দুটি বিস্ময়কর বিন্দু মুদ্রণ করে এবং অভ্যন্তরীণ দ্বন্দ্বের সাথে একটি বোর্ড প্রবেশ করানো বন্ধ করে দেয় (একই সারি / কলাম / বর্গক্ষেত্রে দুটি সংখ্যা একই)।


3
বিরক্তিকর এবং সম্ভবত কঠিন :(
ওলেহ প্রাইপিন

6
বু। 'কিছু মুদ্রণ করবেন না, এমনকি একটি নতুন লাইনও নয়' গল্ফস্ক্রিপ্টের বিধি দেয়।
পিটার টেলর

1
একটি সুডোকু সলভার যা সম্পূর্ণ সমাধানের জন্য কখনই ব্যাকট্র্যাক / অনুমানের প্রয়োজন হয় না এর জন্য প্রয়োজন (এবং প্রতিটি সময় "অনুমান" এর আউটপুট প্রয়োজন)
র‌্যাচেট ফ্রিক

3
এটিকে হ্রাস করার কারণ আমি দেখছি না। একটি সুন্দর ধাঁধা দেখানোর জন্য অনেক চেষ্টা করা হয়েছিল; এটি খুব স্পষ্ট, এবং সঠিকভাবে বিবৃত। এটি আমার স্বাদের জন্য খুব বড়, তবে এটি ডাউনভোটের কারণ হিসাবে খুব সাবজেক্টিভ, তাই না?
ব্যবহারকারী অজানা

উত্তর:


10

ব্র্যাচল্যাগ , 245 বাইট / 2 = 122.5

@n:1a:"-"x:7fF:3a$\:3a@3:4a,Fc~bCh[0:0:0]gO,Co~c[V:O:T]h:F:6f:10ao:ba(h:11a;!);"!!"w!
h"-".|:"|"x:2f.
e(~m["0123456789":.]`;0<.<=9)
:ha#d.
:@3az:ca:5a.
:3a.
hs.:=a,?t:9ac:=fl1
:Im:8f:[[I]]z:ca.
:Jm:J.
:ha.
lg:?c.
b:+a[X:Y],?h:Y:Xr:"(~d,~d):~d
"w

(নোট করুন যে আপনাকে এই প্রতিশ্রুতি হিসাবে ভাষাটির সংস্করণ ব্যবহার করতে হবে Bra ব্র্যাচল্যাগের নিম্নলিখিত সংস্করণগুলিতে সঠিকভাবে কাজ করার জন্য এই কোডটির কিছুটা পরিবর্তন দরকার হবে)

"!!"প্রদত্ত বোর্ডের অভ্যন্তরীণ দ্বন্দ্ব থাকলে এটি মুদ্রণ করে (এটি টিআইও-তে তবে কয়েক সেকেন্ড সময় নেয় তাই ধৈর্য ধরুন)।

আমি নিশ্চিত না যে আমি প্রথম বোনাসটি সঠিকভাবে বুঝতে পেরেছি তাই আমি এটিকে সম্বোধন করছি না।

এটি স্পষ্টতই অ-প্রতিযোগিতামূলক, যেহেতু ভাষা চ্যালেঞ্জের চেয়ে অনেক বেশি সাম্প্রতিক, তবে অন্য কোনও উত্তর না থাকায় আমি নিশ্চিত নই যে এটি পুরোপুরি গুরুত্বপূর্ণ matters

ব্যাখ্যা

  • প্রধান শিকারী:

    @n                Split the input on line breaks
    :1a:"-"x          Transform into a list of lists, each sublist contains a line's values
    :7fF              Transform so that cells are [Value:X:Y]
    :3a               All values on lines must be different
    $\:3a             All values on columns must be different (by transposition)
    @3:4a,            All 3*3 block values must be different
    Fc~bCh[0:0:0]gO,  Append a fake cell [0:0:0]
    Co~c[V:O:T]       Sort the board, the blank cells V will be those before O ([0:0:0])
    h:F:6f            Find all subsets of blank cells with specific values for which 
                          the board has only one solution
    :10ao             Sort the subsets by lengths
    :ba               Discard the lengths
    (                 
      h:11a             Print the first subset = an answer
    ;                 Or (board is already fully determined)
      !                 Terminate
    )          
    ;                 Or (Some values don't respect the constraints)
    "!!"w!            Print "!!" and terminate
    
  • সম্পৃক্ত 1: সমস্ত "সরান |" লাইন উপর, রুপান্তর ---+---+---মধ্যে -পরে তাদের সরিয়ে

    h"-".    If the first char is "-", then Output is "-"
    |        Or
    :"|"x    Remove all occurences of "|" from the input
    :2f.     Output is the result of all outputs of predicate 2 on the filtered string
    
  • ভবিষ্যদ্বাণী 2: একটি চরকে একটি পূর্ণসংখ্যার সাথে রূপান্তর করুন বা 1 থেকে 9 এর মধ্যে ফাঁকে ফাঁকে রাখলে।

    e                      Take a char of the input string
    (
      ~m["0123456789":.]     Output is the index of the char in "0123456789"
      `                      Discard the choice point caused by the ;
    ;                      Or
      0<.<=9                 Output is an integer between 1 and 9
    )
    
  • ভবিষ্যদ্বাণী 3: চাপিয়ে দিন যে ঘরগুলির ইনপুট তালিকার সমস্ত মান পৃথক হতে হবে

    :ha    Retrieve the head of each cell (i.e. the value) in the input 
    #d.    Apply a constraint of distinctness to those values
    
  • ভবিষ্যদ্বাণী 4: 3 * 3 ব্লকের মানগুলিতে স্বতন্ত্রতা সীমাবদ্ধতা প্রয়োগ করুন

    :@3a            Split 3 lines of the board in 3 parts
        z           Zip them together
         :ca:5a.    Concatenate each element of the zip, apply predicate 5 to that
    
  • ভবিষ্যদ্বাণী 5:

    :3a.    Apply predicate 3 to each element of the input
    
  • ভবিষ্যদ্বাণী 6: শূন্য কোষগুলির একটি উপসেটের সীমাবদ্ধতাগুলি সন্তুষ্ট করে মানগুলি নির্ধারণ করুন, তারপরে সেই মানগুলির সাথে বোর্ডের কেবলমাত্র একটি সমাধান রয়েছে।

    hs.       Output is a subset of the blank cells
    :=a,      Assign values to those cells
    ?t:9ac    Concatenate the values of all cells of the board
    :=f       Find all solved boards
    l1        There is only 1 such solved board
    
  • ভবিষ্যদ্বাণী 7: বোর্ডটি এমনভাবে রূপান্তর করে যে প্রতিটি ঘরে এখন [V:X:Y]কেবলমাত্র V(মান) এর পরিবর্তে থাকে ।

    :Im       Take the Ith line of the board
    :8f       Transform all elements of the line using predicate 8
    :[[I]]z   Zip the result with [I]
    :ca.      Concatenate each element of the zip
    
  • পূর্বাভাস 8: একটি লাইন এমন রূপান্তর করে যাতে প্রতিটি ঘর এখন [V:X]

    :Jm    Take the Jth element of the line
    :J.    Output is [That element:J]
    
  • ভবিষ্যদ্বাণী 9: কক্ষের মানগুলি পুনরুদ্ধার করুন

    :ha.   Take the head of each element of the input
    
  • ভবিষ্যদ্বাণী 10: এটির শুরুতে একটি উপসেটের দৈর্ঘ্য যুক্ত করুন

    lg     Put the length of the input in a list
    :?c.   Concatenate it with the input
    
  • ভবিষ্যদ্বাণী ১১: একটি কক্ষ মুদ্রণ করুন

    b:+a[X:Y],        Increment coordinates by 1 to get X and Y
    ?h:Y:Xr:          Build the list [X:Y:Value]
    "(~d,~d):~d\n"w   Format that list as "('X','Y'):'Value'\n" to STDOUT
    

2
আপনি কি কেবল এটিকে প্রোলোগ উত্তরে প্রসারিত করতে পারবেন না? তাহলে এটা প্রতিযোগিতা হবে! (আপনি এটি আলাদাভাবে পোস্ট করতে পারেন)) আমি নিশ্চিত না যে ব্র্যাচ্ল্যাগ এবং প্রোলোগের মধ্যে ম্যাপিংটি কতটা সরাসরি।
লিন

@ লিন হ্যাঁ আমি পারতাম, আমি এমনকি ব্রকল্যাগের ট্রান্সপ্লেলার দ্বারা উত্পাদিত প্রোলগ কোডটি পোস্ট করতে পারতাম (যা স্পষ্টতই উচ্চশিক্ষিত হবে)। যদিও আমি এটি করব না কারণ আমি নিশ্চিত যে চ্যালেঞ্জের পোস্টার আর কোনওভাবেই কোনও উত্তর গ্রহণ করতে ফিরে আসবে না: p
ফ্যাটালাইজ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.