একটি সুডোকু সমাধান চেকার তৈরি করুন


21

একটি সুডোকু সমাধান চেকার তৈরি করুন

এখানে সুডোকু সলভার্সের ওডলস রয়েছে তবে আমি চাই আপনি একটি সমাধান চেকার যতটা সম্ভব মানুষের পক্ষে সম্ভব (কোড-গল্ফ) তৈরি করুন।

  • একটি বৈধ এন্ট্রি হয় 9x9 অ্যারেটি আর্গুমেন্ট হিসাবে গ্রহণ করতে সক্ষম হবে (রেফারেন্স দ্বারা পাস হয়েছে, কমান্ড লাইনে সিরিয়ালযুক্ত হয়েছে, তবে আপনি এটি নিতে চান) বা চূড়ান্ত গ্রিডের জন্য নয় সংখ্যার নয়টি লাইনের একটি ইনপুট ফাইল গ্রহণ করতে পারবেন । নীচে ইনপুট উদাহরণ দেখুন।

  • বৈধ ইনপুট বেস -10 নম্বর (1-9) হওয়া উচিত

  • অনুপস্থিত, খালি, অতিরিক্ত, অ-সংখ্যাসূচক অবস্থান বা 1-9 এর বাইরে সংখ্যাসমূহের অবস্থানগুলিকে একটি শূন্য-ফলাফল না দিয়ে, একটি ত্রুটি মুদ্রণ করে বা উভয়ই অবৈধ ইনপুট হিসাবে প্রত্যাখ্যান করা উচিত।

  • আপনার প্রোগ্রামটি প্রতিটি কলামে একবার, একবার প্রতি লাইন এবং একবার 3x3 সাব-গ্রিডে প্রদর্শিত হবে কিনা তা পরীক্ষা করা দরকার। যদি এটি পাস হয়ে যায়, "0" এবং যদি না হয় তবে একটি শূন্য-ফলাফল ছাড়াই ফিরে আসুন।

  • বাহ্যিক সংস্থার (ওয়েবসাইট ইত্যাদি) ব্যবহার এড়ানো উচিত।

  • যদি আপনার সমাধানটি একা-একা প্রোগ্রাম হয়, বা প্রিন্টের প্রস্থান স্থিতি দিয়ে প্রস্থান করা হয়, "পাস" বা "ব্যর্থ" এর জন্য যথাক্রমে "0" বা শূন্য নয়, ঠিক আছে।

সবচেয়ে ছোট উত্তরটি জয় হোক!

ইনপুট উদাহরণ:

সি অ্যারে:

int input[9][9]={{1,2,3,4,5,6,7,8,9},
                 {4,5,6,7,8,9,1,2,3},
                 {7,8,9,1,2,3,4,5,6},
                 {2,3,1,5,6,4,8,9,7},
                 {5,6,4,8,9,7,2,3,1},
                 {8,9,7,2,3,1,5,6,4},
                 {3,1,2,6,4,5,9,7,8},
                 {6,4,5,9,7,8,3,1,2},
                 {9,7,8,3,1,2,6,4,5}
                };

ফাইল:

123456789
456789123
789123456
231564897
564897231
897231564
312645978
645978312
978312645

9 টি উপ-গ্রিড:

+---+---+---+
|123|456|789|
|456|789|123|
|789|123|456|
+---+---+---+
|231|564|897|
|564|897|231|
|897|231|564|
+---+---+---+
|312|645|978|
|645|978|312|
|978|312|645|
+---+---+---+

উত্তর:


5

গল্ফস্ক্রিপ্ট, 39 টি অক্ষর

.zip.{3/}%zip{~}%3/{[]*}%++{$10,1>=!},,

এটি ইনপুট হিসাবে একটি অ্যারের অ্যারে নেয় ( অনলাইন উদাহরণ দেখুন ) এবং 0এটি বৈধ গ্রিড হলে আউটপুট ।

কোডটির সংক্ষিপ্ত ব্যাখ্যা

.zip         # Copy the input array and transpose it
.{3/}%       # Split each line into 3 blocks
zip{~}%      # Transpose these blocks
3/{[]*}%     # Do the same for the lines themselves and join again
++           # Make one large list of 27 9-element arrays 
             # (9 for rows, 9 for columns, 9 for blocks)
{$10,1>=!},  # From those 27 select the ones which are not a permutation of [1 2 3 ... 9]
             #   $      -> sort
             #   10,1>  -> [1 2 3 ... 9]
             #   =!     -> not equal
,            # Count after filtering

আমি পছন্দ করি যে আপনার কোডটির শূন্য-আউটপুট কেবল 1বা-1
ডেভিড উইলকিন্স

আমি আপনার উত্তরটি সত্যই পছন্দ করেছি কিন্তু শেষ পর্যন্ত আমি গল্ফস্ক্রিপ্ট সমাধান না নিয়ে নির্বাচন করেছি। আমি সত্যিই আশা করি আপনি বুঝতে পেরেছেন
ডেভিড উইলকিনস

2
@ ডেভিডওয়িলকিনস আসলে আমি বুঝতে পারি না - আপনি বিধি তৈরি করেছেন (!) এবং কোথাও এমন বক্তব্য দেননি যে গল্ফস্ক্রিপ্ট অনুমোদিত নয়।
হাওয়ার্ড

আপনার বক্তব্য পুরোপুরি বৈধ ... সত্যিকার অর্থে আপনার উত্তর চয়ন না করার ন্যায়সঙ্গত করার মতো আমার কাছে কিছুই নেই। ভাল খেলেছে
ডেভিড উইলকিন্স

10

পাইথন, 103

আমি সুডোকুকে ঘৃণা করি।

b = [[1,2,3,4,5,6,7,8,9],
     [4,5,6,7,8,9,1,2,3],
     [7,8,9,1,2,3,4,5,6],
     [2,3,1,5,6,4,8,9,7],
     [5,6,4,8,9,7,2,3,1],
     [8,9,7,2,3,1,5,6,4],
     [3,1,2,6,4,5,9,7,8],
     [6,4,5,9,7,8,3,1,2],
     [9,7,8,3,1,2,6,4,5]]

e=enumerate;print 243-len(set((a,t)for(i,r)in e(b)for(j,t)in e(r)for a in e([i,j,i/3*3+j/3]*(0<t<10))))

এটি কীভাবে কাজ করে: প্রতিটি সারি, কলাম এবং ব্লকের প্রতিটি সংখ্যা 1 থেকে 9 হওয়া উচিত So সুতরাং প্রত্যেকের জন্য 0 <= i, j < 9, ঘরটি i,jব্লকে রয়েছে 3*floor(i/3) + floor(j/3)। সুতরাং, সন্তুষ্ট করার জন্য 243 প্রয়োজনীয়তা রয়েছে। আমি প্রতিটি প্রয়োজনীয়তাকে একটি টুপল বানিয়েছি ((item index,item type number),symbol)যেখানে সারি, কলাম বা ব্লকটি যথাক্রমে item index0 এবং 8 (অন্তর্ভুক্ত) এর মধ্যে একটি সংখ্যা, item type number0,1, বা 2, এবং symbolএন্ট্রি b[i][j]

সম্পাদনা: আমি ভুলভাবে বৈধ এন্ট্রিগুলির জন্য পরীক্ষা করিনি। এখন আমি করি.


0সমাধানটি পাস হলে আপনার প্রোগ্রামটি আউটপুট করা উচিতTrue
ডেভিড উইলকিন্স

@ ডেভিড উইলকিন্স কি এক বিজোড় প্রয়োজন। সংশোধন করা হয়েছে।
বুথবি

আপনি যেভাবে আপনার উত্তরটি শুরু করেছিলেন তার জন্য আপনি স্যার আমার ভোট পান: ডি
টিউন প্রানক

9

এপিএল (46)

{∧/,↑∊∘Z¨(/∘(,⍵)¨↓Z∘.=,3/3⌿3 3⍴Z←⍳9),(↓⍵),↓⍉⍵}

এটিতে 9-বাই -9 ম্যাট্রিক্স লাগে। ট্রাইএপএল-তে উদাহরণটি যেমন প্রবেশ করা যায়:

     sudoku ← ↑(1 2 3 4 5 6 7 8 9)(4 5 6 7 8 9 1 2 3)(7 8 9 1 2 3 4 5 6)(2 3 1 5 6 4 8 9 7)(5 6 4 8 9 7 2 3 1)(8 9 7 2 3 1 5 6 4)(3 1 2 6 4 5 9 7 8)(6 4 5 9 7 8 3 1 2)(9 7 8 3 1 2 6 4 5)
     {∧/,↑∊∘Z¨(/∘(,⍵)¨↓Z∘.=,3/3⌿3 3⍴Z←⍳9),(↓⍵),↓⍉⍵} sudoku
1

ব্যাখ্যা:

  • ↓⍉⍵: এর কলাম পান ,
  • ↓⍵: সারি পেতে ,
  • 3/3⌿3 3⍴Z←⍳9: করতে একটি 3-বাই-3 ম্যাট্রিক্স সংখ্যার ধারণকারী 1করতে 9, তারপর উভয় নির্দেশাবলী মধ্যে প্রতিটি সংখ্যা ত্রিগুণিত, সংখ্যা সঙ্গে একটি 9-দ্বারা-9 ম্যাট্রিক্স দান 1করতে 9প্রতিটি গ্রুপ ইঙ্গিত,
  • Z∘.=: প্রতিটি সংখ্যার 1জন্য 9, প্রদত্ত গোষ্ঠীর জন্য একটি বিটমাস্ক তৈরি করুন,
  • /∘(,⍵)¨: এবং প্রত্যেকের সাথে মাস্ক করুন , এর গ্রুপগুলি প্রদান করুন
  • ∊∘Z¨: প্রতিটি উপ-অ্যারের জন্য, দেখুন যদি এটি সংখ্যার ধারণ 1করার 9,
  • ∧/,↑: andএই সমস্ত সংখ্যার যৌক্তিকতা একসাথে নিয়ে যান।

+1 ভাল! তবে 3 × 3 গ্রুপগুলিকে আরও কিছু গল্ফ করা যেতে পারে। উদাহরণস্বরূপ ↓9 9⍴1 3 2⍉3 3 9⍴⍵এটি সমান /∘(,⍵)¨↓Z∘.=,3/3⌿3 3⍴Z←⍳9তবে বেশ খাটো। আমি নিশ্চিত যে আরও ছোট সূত্র আছে।
টোবিয়া

এছাড়াও, আপনি ম্যাট্রিকগুলি প্রথম মাপের সাথে সংযুক্ত করতে এবং শেষে একক বিভাজন করতে পারেন:↓(9 9⍴1 3 2⍉3 3 9⍴⍵)⍪⍵⍪⍉⍵
টোবিয়া

একটি ত্রুটি রয়েছে: এই কোডটি ∊∘Z¨পরীক্ষা করছে যে প্রতিটি উপ-অ্যারে (সারি, কলাম বা ব্লক) কেবলমাত্র 1 থেকে 9 নম্বরের তৈরি কিনা তা পরীক্ষা করে নিচ্ছে যে সমস্ত সংখ্যা প্রতিনিধিত্ব করে কিনা। আপনার Z∘.∊পরীক্ষার মতো কিছু করার দরকার যা জেডের প্রতিটি সংখ্যা প্রতিটি উপ-অ্যারেতে অন্তর্ভুক্ত থাকে।
টোবিয়া

এবং ∧/,↑এটি সংক্ষিপ্ত করা যেতে পারে ∧/∊। আমি হয়ে গেলাম, হয়ে গেলাম! ;-)
টোবিয়া

খুব কমপ্যাক্ট, তবে আপনি একটি সমালোচনা পয়েন্ট মিস করেছেন যা আমি এখনই দেখতে পাচ্ছি:If it passes, return "0" and if not, return a non-zero result.
ডেভিড উইলকিন্স

5

জাভা / সি # - 183/180 181/178 173/170 বাইট

boolean s(int[][]a){int x=0,y,j;int[]u=new int[27];for(;x<(y=9);x++)while(y>0){j=1<<a[x][--y];u[x]|=j;u[y+9]|=j;u[x/3+y/3*3+18]|=j;}for(x=0;x<27;)y+=u[x++];return y==27603;}

( সি # booleanতে পরিবর্তন করুন bool)

বিন্যাসকৃত:

boolean s(int[][] a){
    int x=0, y, j;
    int[] u=new int[27];
    for(;x<(y=9);x++)
        while(y>0){
            j=1<<a[x][--y];
            u[x]|=j;
            u[y+9]|=j;
            u[x/3+y/3*3+18]|=j;
        }

    for(x=0;x<27;)
        y+=u[x++];

    return y==27603;
}

পদ্ধতিটি uনয়টি সারি, কলাম এবং স্কোয়ারে প্রাপ্ত অঙ্কগুলি উপস্থাপন করে 27 বিটমাস্ক সহ একটি অ্যারে তৈরি করে ।

এটি তখন সমস্ত কক্ষের উপরে পুনরাবৃত্তি করে, 1 << a[x][y]অঙ্কটি এবং ওআরএস এর সাথে এর কলাম, সারি এবং বর্গক্ষেত্র বিটমাস্ককে উপস্থাপন করে একটি বিটমাস্ক তৈরি করতে অপারেশন সম্পাদন করে ।

এরপরে এটি সমস্ত 27 বিটমাস্কগুলিতে পুনরাবৃত্তি করে তা নিশ্চিত করে যে তারা সকলেই 27594 (1022 * 9, 1022 পর্যন্ত সমস্ত সংখ্যার 1-9 উপস্থিত থাকার বিটমাস্ক) যুক্ত করে। (নোট যেটি yইতিমধ্যে ডাবল লুপের 9 টি অন্তর্ভুক্ত থাকার কারণে 27603 হিসাবে শেষ হয়েছে))

সম্পাদনা করুন: দুর্ঘটনাক্রমে %3এমন একটি জায়গায় রেখে গেছে যা আর প্রয়োজন হয় না।

সম্পাদনা 2: ব্রাইস ওয়াগনারের মন্তব্যে অনুপ্রাণিত হয়ে কোডটি আরও কিছুটা সঙ্কোচিত করা হয়েছে।


সি # 149 চরগুলিতে প্রায় একই অ্যালগোরিদম (তবে কেবল যদি লিনককে অনুমতি দেওয়া হয়): বুল এস (ইনট [] ক) {ইনট এক্স = 0, ওয়াই, জে; ভার ইউ = নতুন ইনট [27]; যখন (x ++ <(y = 9)) যখন (Y> 0) {ঞ = 1 << একটি [X + + 9 * - Y]; তোমার দর্শন লগ করা এর [x] | = ঞ; তোমার দর্শন লগ করা [Y + + 9] | = ঞ; তোমার দর্শন লগ করা এর [x / 3 + y / 3 * 3 + 18] | = জ;} রিটার্ন ইউ.সুম () == 27594;}
ব্রাইস ওয়াগনার

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

3

অজগর = 196

সর্বাধিক গল্ফড নয়, তবে ধারণাটি এখানে রয়েছে। সেটগুলি বেশ কার্যকর।

বোর্ড:

b = [[1,2,3,4,5,6,7,8,9],
     [4,5,6,7,8,9,1,2,3],
     [7,8,9,1,2,3,4,5,6],
     [2,3,1,5,6,4,8,9,7],
     [5,6,4,8,9,7,2,3,1],
     [8,9,7,2,3,1,5,6,4],
     [3,1,2,6,4,5,9,7,8],
     [6,4,5,9,7,8,3,1,2],
     [9,7,8,3,1,2,6,4,5]]

কার্যক্রম:

n={1,2,3,4,5,6,7,8,9};z=0
for r in b:
 if set(r)!=n:z=1
for i in zip(*b):
 if set(i)!=n:z=1
for i in (0,3,6):
 for j in (0,3,6):
  k=j+3
  if set(b[i][j:k]+b[i+1][j:k]+b[i+2][j:k])!=n:z=1
print(z)

এস / {1,2,3,4,5,6,7,8,9} / সেট (পরিসীমা (1,10)) / 3 টি অক্ষর সংরক্ষণ করে।
ম্যাট্রিক্সফ্রোগ

পাইথন 3.5 তে আপনি ব্যবহার করতে পারেন n={*range(1,10)}তবে এটি চ্যালেঞ্জের চেয়ে নতুন। পরিবর্তে set(range(1,10))ম্যাট্রিক্সফ্রোগ যেমনটি ব্যবহার করেছেন তেমন ব্যবহার করুন ।
mbomb007

3

জাভা - 385 306 328 260 টি অক্ষর

সম্পাদনা: উত্তরটি সম্পূর্ণ প্রোগ্রাম হতে হবে এমন নির্দেশাবলী আমি বোকামি দিয়ে ভুলভাবে লিখেছি । যেহেতু এটি কেবল একটি বৈধ ফাংশন হতে পারে, তাই আমি একটি ফাংশন হিসাবে পুনরায় লিখেছি এবং ছোট করে ফেলেছি, এবং আমার সমাধানের ভূমিকাটি মনে রেখে তা আবার লিখেছি।

সুতরাং, নিজের কাছে চ্যালেঞ্জ হিসাবে আমি ভেবেছিলাম যে আমি সবচেয়ে ছোট জাভা সমাধান চেকার তৈরি করার চেষ্টা করব।

এটি অর্জনের জন্য আমি ধরে নিই যে সুডোকু ধাঁধাটি জাভা বহুমাত্রিক অ্যারে হিসাবে পাস করা হবে:

s(new int[][] {
    {1,2,3,4,5,6,7,8,9},
    {4,5,6,7,8,9,1,2,3},
    {7,8,9,1,2,3,4,5,6},
    {2,3,1,5,6,4,8,9,7},
    {5,6,4,8,9,7,2,3,1},
    {8,9,7,2,3,1,5,6,4},
    {3,1,2,6,4,5,9,7,8},
    {6,4,5,9,7,8,3,1,2},
    {9,7,8,3,1,2,6,4,5}});

তারপরে, আমাদের কাছে আসল দ্রাবক রয়েছে, যা বৈধ সমাধান হিসাবে "0", যদি না হয় তবে "1" প্রদান করে।

সম্পূর্ণ গল্ফড:

int s(int[][] s){int i=0,j,k=1;long[] f=new long[9];long r=0L,c=r,g=r,z=45L,q=r;for(f[0]=1L;k<9;){f[k]=f[k-1]*49;z+=f[k++]*45;}for(;i<9;i++){for(j=0;j<9;){k=s[i][j];r+=k*f[i];c+=k*f[j];g+=k*f[j++/3+3*(i/3)];q+=5*f[k-1];}}return (r==z&&c==z&&g==z&&q==z)?0:1;}

রিডেবল:

    int s(int[][] s) {
        int i=0,j,k=1;
        long[] f=new long[9]; 
        long r=0L,c=r,g=r,z=45L,q=r;
        for(f[0]=1L;k<9;){f[k]=f[k-1]*49;z+=f[k++]*45;}
        for(;i<9;i++) {
            for (j=0;j<9;) {
                k=s[i][j];
                r+=k*f[i];
                c+=k*f[j];
                g+=k*f[j++/3+3*(i/3)];
                q+=5*f[k-1];
            }
        }
        return (r==z&&c==z&&g==z&&q==z)?0:1;
    }

তাহলে এটা কিভাবে কাজ করে? আমি মূলত প্রতিটি অঙ্কে পর্যাপ্ত রেজোলিউশনের সাথে আমার নিজস্ব নম্বর বেজ তৈরি করি যা ধাঁধাটি পেরিয়ে যাওয়ার পরে কেবল তিনটি সংখ্যার তুলনা করতে হবে এটি একবার বৈধ কিনা তা জানতে। এই সমস্যার জন্য আমি বেস 49 পছন্দ করেছি, তবে 45 এর চেয়ে বড় কোনও বেস যথেষ্ট sufficient

এ (আশাবাদী) সুস্পষ্ট উদাহরণ: কল্পনা করুন যে সুডোকু ধাঁধার প্রতিটি "সারি" বেস -৯৯ সংখ্যায় একক অঙ্ক। আমরা বেসিক-49 নম্বরের প্রতিটি অঙ্ককে সরলতার জন্য ভেক্টরে বেস -10 নম্বর হিসাবে উপস্থাপন করব। সুতরাং, যদি সমস্ত সারিগুলি "সঠিক" হয় তবে আমরা নিম্নলিখিত বেস-49 নম্বরটি আশা করি (বেস -10 ভেক্টর হিসাবে):

(45,45,45,45,45,45,45,45,45)

বা একটি একক বেস -10 সংখ্যায় রূপান্তরিত: 1526637748041045

সমস্ত কলামের জন্য অনুরূপ যুক্তি এবং "সাব-গ্রিড" এর জন্য অনুসরণ করুন। চূড়ান্ত বিশ্লেষণে যে মানটির মুখোমুখি হয় যা এই "আদর্শ সংখ্যার" সমান হয় না তার অর্থ ধাঁধা সমাধানটি অবৈধ।

সমস্ত 5s দুর্বলতা এবং অন্যান্য সম্পর্কিত সমস্যাগুলি সমাধান করার জন্য সম্পাদনা করুন: প্রতিটি ধাঁধাতে প্রতিটি সংখ্যার 9 টি হওয়া উচিত এই ধারণার ভিত্তিতে আমি একটি চতুর্থ বেস-49 নম্বর যুক্ত করি। সুতরাং, আমি বেস -10 সংখ্যার প্রতিটি সংখ্যার জন্য বেস-49 নম্বরে প্রতিটি সংখ্যায় 5 যুক্ত করে যা সংখ্যার সূচকটি উপস্থাপন করে। উদাহরণস্বরূপ, যদি 10 9 এবং 9 8, 9 7, 8 6, এবং অন্য সকলের 9 হয় তবে আপনি একটি বেস-49 নম্বর পাবেন (ওভারফ্লো মোকাবেলায় 10-আকারের বেস -10 ভেক্টর হিসাবে):

(1, 1, 45, 45, 40, 45, 45, 45, 45, 45)

যা আমাদের "আদর্শ" বেস -৯৯ সংখ্যার সাথে তুলনা করলে ব্যর্থ হবে।

যতটা সম্ভব লুপিং এবং তুলনা করা এড়াতে আমার সমাধান এই গাণিতিক সমাধানটির সুবিধা গ্রহণ করে। আমি longপ্রতিটি বেস -৯৯ নম্বরটি বেস -10 নম্বর হিসাবে সংরক্ষণ করার জন্য সহজভাবে একটি মান ব্যবহার করি এবং কলাম / সারি / সাবগ্রিড চেক মান গণনার সময় প্রতিটি বেস -৯৯ সংখ্যার জন্য "ফ্যাক্টর" পেতে একটি অনুসন্ধান অ্যারে ব্যবহার করি।

জাভা সংক্ষিপ্ত হওয়ার জন্য ডিজাইন করা হয়নি বলে, গাণিতিক নির্মাণে সতর্কতা অবলম্বন করা কেবলমাত্র আমি বুঝতে পারি যে আমি সংক্ষিপ্ত পরীক্ষক তৈরি করতে পারি।

আমার সম্পর্কে আপনি কী মনে করেন জানি।


1
প্রকৃতপক্ষে, এটি @ স্টিভ-ভেরিল দ্বারা উল্লিখিত একই দুর্বলতায় ভুগছে - সমস্ত 5 বা সংখ্যার যে কোনও সংখ্যার সংখ্যার পরিমাণ 45, এটি সমাধানকারীকে "কৌশল" দেবে। আমি সংশোধন করতে যাচ্ছি। আমি কিভাবে এটি বীট করতে একটি ধারণা আছে।
প্রোগ্রামারডান

আমি আমার সর্বশেষ আপডেটে এই দুর্বলতাটিকে সম্বোধন করেছি। এখন সেই কেসটি সম্বোধন করা হয়েছে, এবং এর ধরণের সমস্ত অন্যান্য। মূলত, বেস -10 সংখ্যার প্রতিটি ধরণের "গণনা" না করার জন্য এটি গুরুতর তদারকি ছিল। আমি এখন সরাসরি এই চেকটি সম্পাদন করি তবে একই গাণিতিক পদ্ধতির (বেস-49 নম্বর) ব্যবহার করছি।
প্রোগ্রামারডান

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

আহা, এটি ব্যাখ্যা করে। ধন্যবাদ @ স্টেভেভারল - আমি এখনও স্ট্যাকেক্সচেঞ্জের জিনিসগুলিতে অভ্যস্ত হয়ে যাচ্ছি। এটি বলেছিল, আপনার যোগফল -45 নীতিটির সংক্ষিপ্ত শোষণটি উজ্জ্বলভাবে বলা হয়েছিল। এটিকে কাটিয়ে উঠতে আমার সমাধানটি দীর্ঘায়িত করেছে, তবে এটিই জীবন!
প্রোগ্রামারডান

3

আর 145

function(x)colSums(do.call(rbind,lapply(list(R<-row(b<-matrix(1,9,9)),C<-col(b),(R-1)%/%3+1+3*(C-1)%/%3),sapply,`==`,1:9))%*%c(2^(x-1))==511)==27

ডি-গল্ফ কোড (কম বা বেশি) এখানে পাওয়া যাবে /programming//a/21691541/1201032


আপনি কি কোনও সাইটে আর-ফিডলের মতো কাজের উদাহরণ প্রদান করতে পারেন? r-food.org/#
ডেভিড উইলকিন্স

3

হাস্কেল (ল্যাম্বডাবোট), 65 বাইট

k x=and$(all$([1..9]==).sort)<$>[x,transpose x,join$chunksOf 3 x]

2

পার্ল, 193 বাইট

for(@x=1..9){$i=$_-1;@y=();push@y,$a[$i][$_-1]for@x;@y=sort@y;$r+=@y~~@x;@y=();push@y,$a[3*int($i/3)+$_/3][3*($i%3)+$_%3]for 0..8;@y=sort@y;$r+=@y~~@x}for(@a){@y=sort@$_;$r+=@y~~@x}exit($r!=27)

অ্যারে আকারে ইনপুট প্রত্যাশিত:

@a=(
    [1,2,3,4,5,6,7,8,9],
    [4,5,6,7,8,9,1,2,3],
    [7,8,9,1,2,3,4,5,6],
    [2,3,1,5,6,4,8,9,7],
    [5,6,4,8,9,7,2,3,1],
    [8,9,7,2,3,1,5,6,4],
    [3,1,2,6,4,5,9,7,8],
    [6,4,5,9,7,8,3,1,2],
    [9,7,8,3,1,2,6,4,5]
);

প্রস্থান কোড 0 হয়, যদি @aসমাধান হয়, অন্যথায় 1ফিরে আসে is

অবরুদ্ধ সংস্করণ:

@x = (1..9);
for (@x) {
    $i = $_ - 1;
    # columns
    @y = ();
    for (@x) {
        push @y, $a[$i][$_-1];
    }
    @y = sort @y;
    $r += @y ~~ @x;
    # sub arrays
    @y = ();
    for (0..8) {
        push @y, $a[ 3 * int($i / 3) + $_ / 3 ][ 3 * ($i % 3) + $_ % 3 ];
    }
    @y = sort @y;
    $r += @y ~~ @x
}
# rows
for (@a) {
    @y = sort @$_;
    $r += @y ~~ @x
}
exit ($r != 27);

9 টি সারি, 9 টি কলাম এবং 9 টি সাব অ্যারে সাজানো অ্যারেতে রেখে চেক করা হয়, এটি অ্যারের সাথে মেলে কিনা (1..9)$rপ্রতিটি সফল ম্যাচের জন্য সংখ্যাটি বাড়ানো হয় যা একটি বৈধ সমাধানের জন্য অবশ্যই 27 টি যোগ করতে হবে।


2

জে 52 54

-.*/,(9=#)@~.@,"2(0 3 16 A.i.4)&|:(4#3)($,)".;._2]0 :0

কমান্ড লাইনে এটি যুক্তি আটকানো হবে, ক) দিয়ে শেষ হবে:

1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 1 5 6 4 8 9 7
5 6 4 8 9 7 2 3 1
8 9 7 2 3 1 5 6 4
3 1 2 6 4 5 9 7 8
6 4 5 9 7 8 3 1 2
9 7 8 3 1 2 6 4 5
)

পাস হলে 1, যদি না হয় তবে 0 প্রদান করে।

অভ্যন্তরীণভাবে, এটি 9x9 গ্রিডটিকে একটি 3x3x3x3 গ্রিডে রূপান্তর করে এবং শেষ 2 মাত্রায় ওয়ান্ড ইউনিট (সারি, রেখা এবং বাক্স) পেতে অক্ষের উপরে কিছু অনুক্রম করে।

এটি করার পরে, এটি প্রতিটি ইউনিটের 9 টি অনন্য মান রয়েছে তা পরীক্ষা করা হয়।

সম্ভবত নিখুঁত থেকে অনেক দূরে, তবে ইতিমধ্যে সংখ্যাগরিষ্ঠকে পরাজিত করে ;-)


প্রথম নজরে, আপনি অন্যদের মতো একই প্রয়োজনীয়তার দ্বারা ধরা পড়েছেন .... আপনার রিটার্নগুলি অবশ্যই উল্টে দেওয়া উচিত ... পাসের জন্য 0, ব্যর্থতার জন্য শূন্য নয়
ডেভিড উইলকিন্স

পাসের জন্য 0 বোকামি। এর একটি কারণ রয়েছে যে বুলে সত্যের জন্য 1 এবং মিথ্যাটির জন্য 0 বেছে নিয়েছিল। তবে আপনি ঠিক বলেছেন। 2 টি অক্ষর যুক্ত করে।
jpjacobs

এটিকে একটি বাহ্যিক স্থিতি হিসাবে মনে করুন, কোনও বুলিয়ান মান নয়
ডেভিড উইলকিনস

আমি আপনার উত্তরটি বেছে নিচ্ছি কারণ এটি কার্যকর। আপনি নিয়ম অনুসরণ করেছেন এবং আপনার প্রোগ্রামটি খুব ছোট। ধন্যবাদ!
ডেভিড উইলকিনস

আচ্ছা আমি ফাইব্বড করেছিলাম ... সত্যিকার অর্থে আমি গল্ফস্ক্রিপ্টের উত্তরটি নিজের চেয়ে কম সংখ্যক বেছে নেওয়ার পক্ষে ন্যায়সঙ্গত হতে পারি না ... তবে দ্বিতীয় স্থানের জন্য কুডোস
ডেভিড উইলকিন্স

2

গণিত, 84 79 টি চর

f=Tr[Norm[Sort@#-Range@9]&/@Join[#,Thread@#,Flatten/@Join@@#~Partition~{3,3}]]&

উদাহরণ:

f[{{1,2,3,4,5,6,7,8,9},
   {4,5,6,7,8,9,1,2,3},
   {7,8,9,1,2,3,4,5,6},
   {2,3,1,5,6,4,8,9,7},
   {5,6,4,8,9,7,2,3,1},
   {8,9,7,2,3,1,5,6,4},
   {3,1,2,6,4,5,9,7,8},
   {6,4,5,9,7,8,3,1,2},
   {9,7,8,3,1,2,6,4,5}}]

0

f[{{2,1,3,4,5,6,7,8,9},
   {4,5,6,7,8,9,1,2,3},
   {7,8,9,1,2,3,4,5,6},
   {2,3,1,5,6,4,8,9,7},
   {5,6,4,8,9,7,2,3,1},
   {8,9,7,2,3,1,5,6,4},
   {3,1,2,6,4,5,9,7,8},
   {6,4,5,9,7,8,3,1,2},
   {9,7,8,3,1,2,6,4,5}}]

2

f[{{0,2,3,4,5,6,7,8,9},
   {4,5,6,7,8,9,1,2,3},
   {7,8,9,1,2,3,4,5,6},
   {2,3,1,5,6,4,8,9,7},
   {5,6,4,8,9,7,2,3,1},
   {8,9,7,2,3,1,5,6,4},
   {3,1,2,6,4,5,9,7,8},
   {6,4,5,9,7,8,3,1,2},
   {9,7,8,3,1,2,6,4,5}}]

3


আপনার তৃতীয় আউটপুট উদাহরণ: 3সর্বদা অবৈধ ইনপুটটির পরিচায়ক, বা এটি কখনও কখনও কোনও ব্যর্থ সমাধানের প্রতিক্রিয়া হয়?
ডেভিড উইলকিনস

2

জাভাস্ক্রিপ্ট ES6, 150 অক্ষর

কোনও ডেলিমিটার ছাড়াই 81-চর স্ট্রিং হিসাবে ইনপুট নেয়।

s=>s.match("^(?=(#.{0,8}#.{9})+$)(?=(#(.{9}){0,8}#.){9})((#.?.?(.{9}){0,2}#...){3}.{18})+$".replace(/#(.*?)#/g,"123456789".replace(/./g,"(?=$$1$&)")))

ফাংশনটি nullইতিবাচক হিসাবে প্রথম মৌলের মূল স্ট্রিং সহ নেতিবাচক উত্তর হিসাবে এবং একটি অ্যারের হিসাবে প্রত্যাবর্তন করে । !!ভিক্ষা শুরু করে ফাংশনে যোগ করে বিলে পরিবর্তন হতে পারে ।

পরীক্ষা ( আরও ডিটাসের জন্য সম্পর্কিত চ্যালেঞ্জ দেখুন):

f=s=>s.match("^(?=(#.{0,8}#.{9})+$)(?=(#(.{9}){0,8}#.){9})((#.?.?(.{9}){0,2}#...){3}.{18})+$".replace(/#(.*?)#/g,"123456789".replace(/./g,"(?=$$1$&)")))
;`123456789456789123789123456231564897564897231897231564312645978645978312978312645
725893461841657392396142758473516829168429537952378146234761985687935214519284673
395412678824376591671589243156928437249735186738641925983164752412857369567293814
679543182158926473432817659567381294914265738283479561345792816896154327721638945
867539142324167859159482736275398614936241587481756923592873461743615298618924375
954217683861453729372968145516832497249675318783149256437581962695324871128796534
271459386435168927986273541518734269769821435342596178194387652657942813823615794
237541896186927345495386721743269158569178432812435679378652914924813567651794283
168279435459863271273415986821354769734692518596781342615947823387526194942138657
863459712415273869279168354526387941947615238138942576781596423354821697692734185
768593142423176859951428736184765923572389614639214587816942375295837461347651298`
.split`
`.every(f)
&&
`519284673725893461841657392396142758473516829168429537952378146234761985687935214
839541267182437659367158924715692843624973518573864192298316475941285736456729381
679543182158926473432817659567381294914256738283479561345792816896154327721638945
867539142324167859159482736275398684936241517481756923592873461743615298618924375
754219683861453729372968145516832497249675318983147256437581962695324871128796534
271459386435168927986273541518734269769828435342596178194387652657942813823615794
237541896186927345378652914743269158569178432812435679495386721924813567651794283
168759432459613278273165984821594763734982516596821347615437829387246195942378651
869887283619214453457338664548525781275424668379969727517385163319223917621449519
894158578962859187461322315913849812241742157275462973384219294849882291119423759
123456789456789123564897231231564897789123456897231564312645978645978312978312645
145278369256389147364197258478512693589623471697431582712845936823956714931764825`
.split`
`.every(s => !f(s))

এটি একটি হাস্যকর রেজেক্স ... আশ্চর্যজনক কাজ।
ETH প্রোডাকশনস

2

আর, 63 50 বাইট

ধরে নিই ইনপুটটি m9x9 সংখ্যার ম্যাট্রিক্স।

all(apply(m,1,match,x=1:9),apply(m,2,match,x=1:9))

আমি ঠিক ছিলাম যে আরও গল্ফিং সম্ভব ছিল।

ব্যাখ্যা:

    apply(m,1,match,x=1:9),

নিন mএবং প্রতিটি সারির জন্য, matchফাংশনটি প্রয়োগ করুন । আমরা x=1:9পাস করার জন্য আরও একটি যুক্তি নির্দিষ্ট করি matchxডিফল্ট প্রথম অবস্থানের যুক্তি, এবং তাই প্রতিটি সারিটি দ্বিতীয় আর্গুমেন্ট অবস্থানে স্থাপন করা হয় যা হয় table। ফাংশনটি ইন-এর matchউদাহরণগুলির xসন্ধান করে table। এই ক্ষেত্রে, তারপর, এটি 1:9প্রতিটি সারিতে (1 থেকে 9 টি সংখ্যা) সন্ধান করছে। প্রত্যেকের জন্য 1:9, যদি সেই নম্বরটি পাওয়া যায় (বা না) তবে এটি TRUE(বা FALSE) ফিরে আসবে ।

সুতরাং, এটি 81 টি বুলিয়ান মানগুলির একটি সিরিজ দেয়।

                           apply(m,2,match,x=1:9)

ইনপুটটির প্রতিটি কলামের জন্য উপরেরটি পুনরাবৃত্তি করুন।

all(                                             )

অবশেষে, allবুলিয়ানগুলির তালিকার প্রতিটি উপাদান রয়েছে কিনা তা পরীক্ষা করে দেখুন TRUE। সমাধানটি সঠিক হলে এবং শুধুমাত্র যদি এটি হয় তবে (যেমন প্রতিটি সংখ্যা 1:9প্রতিটি কলামে এবং প্রতিটি সারিতে কেবল একবার উপস্থিত থাকে)।

পুরানো পদ্ধতির:

for(i in 1:2)F=F+apply(m,i,function(x)sort(x)==1:9);sum(F)==162

এটি প্রতিটি সারি লাগে, এটি সাজায় এবং তারপরে এটি তুলনা করে [1, 2, ... 9]। একটি সঠিক সারিটি ঠিক মিলবে। তারপরে এটি প্রতিটি কলামের জন্য একই কাজ করে। মোট, আমাদের 162 সঠিক ম্যাচ হওয়া উচিত, যা চূড়ান্ত অংশটি চেক করে। এখানে আরও গল্ফ করার জন্য সম্ভবত কিছু সুযোগ রয়েছে ...


দেখে মনে হচ্ছে আপনি কলাম এবং সারি সন্ধান করছেন, কিন্তু বাক্সগুলির জন্য নয় ...
জেইসি

1

হাস্কেল - 175

import Data.List
c=concat
m=map
q=[1..9]
w=length.c.m (\x->(x\\q)++(q\\x))
b x=c.m(take 3.drop(3*mod x 3)).take 3.drop(3*div x 3)
v i=sum$m(w)[i,transpose i,[b x i|x<-[0..8]]]

ফাংশনটি vকল করার জন্য। এটি তালিকার বিপরীতে প্রতিটি সারি, কলাম এবং ব্লকের পার্থক্য পেয়ে [1..9]এবং সেই পার্থক তালিকার দৈর্ঘ্য যোগ করে কাজ করে।

ডেমো উদাহরণটি সুডোকু ব্যবহার করে:

*Main> :l so-22443.hs 
[1 of 1] Compiling Main             ( so-22443.hs, interpreted )
Ok, modules loaded: Main.
*Main> v [[1,2,3,4,5,6,7,8,9],[4,5,6,7,8,9,1,2,3],[7,8,9,1,2,3,4,5,6],[2,3,1,5,6,4,8,9,7],[5,6,4,8,9,7,2,3,1],[8,9,7,2,3,1,5,6,4],[3,1,2,6,4,5,9,7,8],[6,4,5,9,7,8,3,1,2],[9,7,8,3,1,2,6,4,5]]
0

1

জাভাস্ক্রিপ্ট - 149 অক্ষর

r=[];c=[];g=[];for(i=9;i;)r[o=--i]=c[i]=g[i]=36;for(x in a)for(y in z=a[x]){r[v=z[y]-1]-=y;c[v]-=x;g[v]-=3*(x/3|0)+y/3|0}for(i in r)o|=r[i]|c[i]|g[i]

কোনও অ্যারের উপস্থিতি প্রত্যাশা aকরে এবং oআউটপুটটির জন্য একটি পরিবর্তনশীল তৈরি করে যা 0সাফল্যে এবং অন্যথায় শূন্য নয়।

প্রতিটি সারি, কলাম এবং 3 * 3 গ্রিডের জন্য প্রতিটি মানের যে পজিশনের সমষ্টি হয় তার পরিমাণের যোগফল 36 (0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8) সমীক্ষা করে কাজ করে।

পরীক্ষামূলক

a=[
    [1,2,3, 4,5,6, 7,8,9],
    [4,5,6, 7,8,9, 1,2,3],
    [7,8,9, 1,2,3, 4,5,6],

    [2,3,1, 5,6,4, 8,9,7],
    [5,6,4, 8,9,7, 2,3,1],
    [8,9,7, 2,3,1, 5,6,4],

    [3,1,2, 6,4,5, 9,7,8],
    [6,4,5, 9,7,8, 3,1,2],
    [9,7,8, 3,1,2, 6,4,5]
  ];

'O = 0' দেয়

a=[
    [1,2,3, 4,5,6, 7,8,9],
    [4,5,6, 7,8,9, 1,2,3],
    [7,8,9, 1,2,3, 4,5,6],

    [2,3,1, 5,6,4, 8,9,7],
    [5,6,4, 8,9,7, 2,3,1],
    [8,9,7, 2,3,1, 5,6,4],

    [3,1,2, 6,4,5, 9,7,8],
    [6,4,5, 9,7,8, 3,1,2],
    [9,7,8, 3,1,2, 6,5,4]
  ];

(শেষ 2 টি অদলবদল হয়েছে)

দেয় o=-1

a=[
    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5],

    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5],

    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5],
    [5,5,5, 5,5,5, 5,5,5]
  ];

দেয় o=-284


1

হাস্কেল, 121 130 127 বাইট (87 ল্যাম্বডাবোট)

import Data.List
import Data.List.Split
c=concat
t=transpose
k=chunksOf
p x=all(==[1..9])$(sort<$>)=<<[x,t x,k 9.c.c.t$k 3<$>x]

ব্যবহারসমূহ:

-- k 9.c.c.t$k 3<$> x = chunksOf 9 $ concat $ concat $ transpose $ map chunksOf 3 x

let ts = k 9$[10*a+b|a<-[1..9],b<-[1..9]] --yep, this is ugly
in k 9.c.c.t$k 3<$>ts
-- prints:
--[[11,12,13,21,22,23,31,32,33],[41,42,43,51,52,53,61,62,63],[71,72,73,81,82,83,91,92,93],[14,15,16,24,25,26,34,35,36],[44,45,46,54,55,56,64,65,66],[74,75,76,84,85,86,94,95,96],[17,18,19,27,28,29,37,38,39],[47,48,49,57,58,59,67,68,69],[77,78,79,87,88,89,97,98,99]]

ল্যাম্বডাবট ডেটা.লিস্ট এবং ডেটা.লিস্ট.স্প্লিট ডিফল্ট অনুসারে (আমার মনে হয় না ব্ল্যাকক্যাপের সমাধান বাক্সগুলি পরীক্ষা করে)।

উন্নতির জন্য ধারণা স্বাগত

// সম্পাদনা: আমি গোলযোগ করেছি :)
// সম্পাদনা করুন: ব্ল্যাকক্যাপ দ্বারা 3 টি বাইট সংরক্ষণ করা হয়েছে


আপনি ঠিক বলেছেন, আমি সারি এবং কলামগুলি পরীক্ষা করা যথেষ্ট নয় তা লক্ষ্য করতে ব্যর্থ হয়েছি ..
ব্ল্যাকক্যাপ

ঠিক আছে, আমিও
গণ্ডগোল

1
আপনি প্রতিস্থাপন করতে পারেন (map sort)সঙ্গে(sort<$>)
BlackCap

1
এবং .c$(sort<$>)<$>সহ$(sort<$>)=<<
ব্ল্যাকক্যাপ

ওহ আমার, তাদের 2
michi7x7


0

ক্লোজার, 151 বাইট

বেশ দীর্ঘ, তবে অন্যরাও ঠিক তেমন বলে মনে হচ্ছে। এছাড়াও বিরক্তিকর যে সেটগুলির ইউনিয়নটির জন্য একটি প্রয়োজন require, তাই আমি পরিবর্তে ভেক্টরগুলির একটি কনক্যাট ব্যবহার করেছি।

প্রতিটি সারি এবং কলামের উপরে আইট্রেট করা হয় এবং মানটি 1 থেকে 9 এর মধ্যে হয় তবে এটি সারি, কর্ন এবং 3x3 কক্ষের জন্য একটি তিনটি ভেক্টর নির্গত করে। সাফল্যে 0 প্রদান করে এবং nilঅন্যথায় দুটি অতিরিক্ত অক্ষর ব্যর্থ হলে 1টি ফিরে আসতে পারে। ফিরে আসার মাধ্যমে 1 - 9 এর বাইরে সংখ্যাগুলি পরিচালনা করে nilতবে অন্যান্য ব্যতিক্রমগুলিতে যেমন ক্রম-সংখ্যার মানগুলিতে ক্রাশ হবে। কোটারিয়েন্টগুলি 0 - 2 হয় সুতরাং এটি মানগুলি ব্যবহার করা 8এবং 9সারি এবং কলামগুলি থেকে সেল মানগুলি পৃথক করতে নিরাপদ ।

(fn[s](if(= 243(count(set(apply concat(for[i(range 9)j(range 9)](let[v(nth(nth s i)j)q #(quot % 3)](if(<= 1 v 9)[[8 v i][9 v j][(q i)(q j)v]])))))))0))

ইনপুট ভেক্টরগুলির একটি নেস্টেড ভেক্টর (যাতে nthকাজ করে):

(def sudoku [[1 2 3 4 5 6 7 8 9]
             [4 5 6 7 8 9 1 2 3] 
             [7 8 9 1 2 3 4 5 6] 
             [2 3 1 5 6 4 8 9 7] 
             [5 6 4 8 9 7 2 3 1] 
             [8 9 7 2 3 1 5 6 4] 
             [3 1 2 6 4 5 9 7 8] 
             [6 4 5 9 7 8 3 1 2] 
             [9 7 8 3 1 2 6 4 5]])

Ungolfed:

(defn f [s]
  (->> (for [i (range 9) j (range 9)]
         (let [v (-> s (nth i) (nth j)) q #(quot % 3)]
           (if (<= 1 v 9)
             [[:row v i] [:col v j] [:cell [(q i) (q j)] v]])))
    (apply concat)
    set
    count
    (#(if (= 243 %) :pass :fail))))

0

পিএইচপি, 196 190 বাইট

while($i<9){for($b=$c=$k=$y="";$y++<9;)$b.=($a=$argv)[$y][$i];for(;$k<3;)$c.=substr($a[++$k+$i-$i%3],$i%3*3,3);if(($u=count_chars)($a[++$i],3)<($d=123456789)|$u($b,3)<$d|$u($c,3)<$d)die(1);}

প্রোগ্রামে 9 টি পৃথক কমান্ড লাইন আর্গুমেন্ট লাগে (গ্রিডের প্রতিটি লাইনের জন্য অঙ্কের একটি স্ট্রিং); অবৈধ (ভুল) এর
সাথে 1(ত্রুটি) সহ প্রস্থান করে 0

সাথে চালাও php -nr '<code>' <row1> <row2> ...

ভাঙ্গন

while($i<9)
{
    for($b=$c=$k=$y="";$y++<9;)$b.=($a=$argv)[$y][$i];  // column to string
    for(;$k++<3;)$c.=substr($a[$i-$i%3+$k],$i%3*3,3);   // sub-grid to string
    if(($u=count_chars)($a[++$i],3)<($d=123456789)      // check row
        |$u($b,3)<$d                                    // check column
        |$u($c,3)<$d                                    // check sub-grid
    )die(1);                                            // test failed: exit with 1
}

ব্যাখ্যা

count_charsএকটি স্ট্রিং-এ অক্ষর গণনা করে এবং সাধারণত ascii কোড সহ একটি অ্যারে তৈরি করে যা কী হিসাবে এবং অক্ষরকে মান হিসাবে গণনা করে; তবে 3মোড প্যারামিটার হিসাবে এটি অক্ষরগুলি থেকে সাজানো স্ট্রিং তৈরি করে; এবং এটি সহজেই চেয়েছিল সংখ্যাগুলির সাথে সংখ্যার সাথে তুলনা করা যেতে পারে।

তুলনাটি কেবল অনুলিপিগুলির জন্য পরীক্ষা করে না, তবে অবৈধ অক্ষরগুলির জন্য চেক অন্তর্ভুক্ত করে। এবং এটি কেবল প্রয়োজন <, না !=, কারণ এটি সংখ্যার তুলনা: পিএইচপি যতটা সম্ভব স্ট্রিংটিকে একটি সংখ্যা হিসাবে ব্যাখ্যা করবে। 123e56789,0x3456789 বা অনুরূপ উপস্থিত হতে পারে না, কারণ অক্ষরগুলি বাছাই করা হয়; এবং কোনও অঙ্ক অনুপস্থিত বিশুদ্ধ পূর্ণসংখ্যাটি অবশ্যই 123456789... এর চেয়ে ছোট এবং .23456789অবশ্যই,

$a=$argvএকটি বাইট $d=123456789সংরক্ষণ করে, নয়টি $u=count_charsসাশ্রয় করে এবং 13 টি সাশ্রয় করে।


-1

সি # - 306 298 288 টি অক্ষর

নিম্নলিখিত কনসোল প্রোগ্রামটি চেকিং ফাংশনটিতে কল করতে ব্যবহৃত হয়েছিল;

static void Main(string[] args)
    {
        int[,] i={{1,2,3,4,5,6,7,8,9},
             {4,5,6,7,8,9,1,2,3},
             {7,8,9,1,2,3,4,5,6},
             {2,3,1,5,6,4,8,9,7},
             {5,6,4,8,9,7,2,3,1},
             {8,9,7,2,3,1,5,6,4},
             {3,1,2,6,4,5,9,7,8},
             {6,4,5,9,7,8,3,1,2},
             {9,7,8,3,1,2,6,4,5}
            };

            Console.Write(P(i).ToString());
    }

এই সমস্ত কাজটি অ্যারের সূচনা এবং এটি চেকিং ফাংশন পি তে প্রেরণ করা is

চেকিং ফাংশনটি নীচে (গল্ফযুক্ত আকারে);

private static int P(int[,]i){int[]r=new int[9],c=new int[9],g=new int[9];for(int p=0;p<9;p++){r[p]=45;c[p]=45;g[p]=45;}for(int y=0;y<9;y++){for(int x=0;x<9;x++){r[y]-=i[x,y];c[x]-=i[x,y];int k=(x/3)+((y/3)*3);g[k]-=i[x,y];}}for(int p=0;p<9;p++)if(r[p]>0|c[p]>0|g[p]>0)return 1;return 0;}

বা পুরোপুরি নির্ধারিত আকারে;

    private static int P(int[,] i)
    {
        int[] r = new int[9],c = new int[9],g = new int[9];
        for (int p = 0; p < 9; p++)
        {
            r[p] = 45;
            c[p] = 45;
            g[p] = 45;
        }

        for (int y = 0; y < 9; y++)
        {
            for (int x = 0; x < 9; x++)
            {
                r[y] -= i[x, y];

                c[x] -= i[x, y];

                int k = (x / 3) + ((y / 3) * 3);
                g[k] -= i[x, y];
            }
        }

        for (int p = 0; p < 9; p++)
            if (r[p] > 0 | c[p] > 0 | g[p] > 0) return 1;

        return 0;
    }

এটি এই ধারণাটি ব্যবহার করে যে সমস্ত কলাম, সারি এবং সাব-গ্রিডগুলি 45 টির বেশি যোগ করা উচিত It এটি ইনপুট অ্যারের মাধ্যমে কাজ করে এবং এর সারি, কলাম এবং সাব-গ্রিড থেকে প্রতিটি অবস্থানের মান বিয়োগ করে। একবার এটি সম্পন্ন করে পরীক্ষা করে দেখুন যে সারি, কলাম বা সাব-গ্রিডগুলির কোনওটিরই এখনও মূল্য নেই।

অনুরোধ অনুসারে একটি 0 প্রদান করে যদি অ্যারেটি একটি বৈধ সুডোকু সমাধান এবং শূন্য নয় (1) যেখানে এটি নয়।


আমি মনে করি private static int P(int[,]i){int[]r=new int[9],c=new int[9],g=new int[9];পরিবর্তে ব্যবহার করে আপনি কিছু অক্ষর সংরক্ষণ করতে পারেন । (বন্ধ বর্গাকার বন্ধনী পরে জায়গা অপসারণের দ্রষ্টব্য ]।) এছাড়াও, আমি নিশ্চিত নই কিন্তু আমি মনে করি আপনি পরিত্রাণ পেতে পারেন private static
ব্যবহারকারী 12205

এছাড়াও, শেষ অংশের জন্য, সিতে আমরা কিছু ধনুর্বন্ধনী অপসারণ for(int p=0;p<9;p++)if(r[p]>0|c[p]>0|g[p]>0)return 1;return 0;}করতে পারি, যদিও এটি সি # তে কাজ করে কিনা তা নিশ্চিত নয়। (আমি আসলে সি # জানি না)
ব্যবহারকারীর 12205

@ace - আপনার পরামর্শের ভিত্তিতে আমি বেশ কিছু বর্ধন করেছি। এখন ডাউন 298 অক্ষরে।
উইল

@ স্পেসের মন্তব্যের ভিত্তিতে আরও 10 টি চর ছাঁটা হয়েছে।
উইল

1
5 নম্বরের পূর্ণ অ্যারের সাথে কী ঘটে? সকল সারি, কলাম এবং স্কোয়ার 45. পর্যন্ত যোগ
শ্রেনী নদী সেন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.