বাইনারি ধাঁধা সমাধান


10

ভূমিকা

ধাঁধা বিধি:

বাইনারি ( টাকুজু বা সুবিকু নামে পরিচিত ) ধাঁধাটি বোঝার জন্য খুব সহজ, এবং এর কয়েকটি কয়েকটি বিধি রয়েছে:
যেহেতু গেমটির নাম বাইনারি এটি বেশ সুস্পষ্ট, তবে আপনি কেবল শূন্য এবং এটি পূরণ করতে পারেন।

  1. একই অঙ্কের দুটির বেশি আর কোনও একে অপরের সাথে উল্লম্ব বা অনুভূমিকভাবে সংলগ্ন হতে পারে না
  2. প্রতিটি সারি এবং প্রতিটি কলামে অবশ্যই সমান পরিমাণ শূন্য এবং সেগুলি থাকতে হবে (এর অর্থ স্পষ্টভাবে বোঝানো হয় যে প্রতিটি বাইনারি গেমটি সর্বদা এমনকি মাত্রাও রাখে)।
  3. কোনও সদৃশ সারি এবং কোনও সদৃশ কলাম (জিরো এবং একই ঠিক একই ক্রম সহ) থাকতে পারে।

আপনি চাইলে www.binarypਜਨ . com এ গেমটি খেলতে পারেন।

কৌশল:

নিয়ম 1 এর কারণে আমরা সর্বদা একটি অঙ্ক পূরণ করতে পারি যদি:
- ইতিমধ্যে একে অপরের সাথে উল্লম্বভাবে বা অনুভূমিকভাবে সংযুক্ত দুটি একই অঙ্ক রয়েছে, সেক্ষেত্রে আমরা উভয় পক্ষের বিপরীত অঙ্ক পূরণ করতে পারি। অর্থাৎ .11...0110..
- উলম্ব বা অনুভূমিকভাবে একই অঙ্কের দুটি রয়েছে যার মধ্যে একটি মাত্র ফাঁক রয়েছে। অর্থাৎ .1.1...101..

নিয়ম 1 এর কারণে, যখন তিনটি ফাঁক ছেড়ে যায় এবং আমাদের একই অঙ্কের তিনটি সংলগ্ন না থাকতে পারে, তখন আমরা শূন্যস্থানগুলির একটি পূরণ করতে পারি। আই .0.1.010.1.0(আমাদের এখনও দুটি পূরণ করতে হবে, এবং আমাদের মাঝখানে তিনটি সংলগ্ন স্থান থাকতে পারে না, তাই প্রথম ফাঁকটি একটি হতে হবে 1))

বিধি 2 এর কারণে, আমরা সর্বদা বাকী ফাঁকগুলি একটি সারিতে বা কলামে পূরণ করতে পারি যদি এর অর্ধেক ইতিমধ্যে বিপরীত অঙ্ক দিয়ে পূর্ণ হয়। অর্থাৎ .1.011010011

বিধি 3 এর কারণে আমরা সর্বদা বিপরীত সংখ্যাগুলি পূরণ করতে পারি যদি একইভাবে আদেশ করা লাইনে কেবল দু'টি সমাধান করা যায়। অর্থাৎ 101100 & 1..100101100 & 110100

বিধি 3 এর কারণে আমরা মাঝে মাঝে শূন্যস্থান পূরণ করতে পারি যখন তিনটি ফাঁক সমানভাবে অর্ডার করা লাইনে ছেড়ে যায়। অর্থাত 010011 & .1.01.010011 & .1.010(এখানে আমরা একটি পূরণ করতে পারেন না 1শেষে, কারণ যে অর্থ হবে আমরা অন্য দুটি ফাঁক এ শূন্য পূরণ করতে হবে, উপার্জন উভয় লাইন অনুক্রমে সমান।)

উদাহরণ:

আমরা কিছু 6 টি এবং পূর্ণ শূন্যগুলি সহ নিম্নলিখিত 6x6 গ্রিড দিয়ে শুরু করি (এবং বিন্দুগুলি শূন্যস্থানগুলি এখনও আমাদের পূরণ করতে পারে না):

.1....
.10.0.
1.11..
.1....
...1.0
......

নিয়ম 1 এবং 2 এর কারণে আমরা এই সংখ্যাগুলি পূরণ করতে পারি:

.1.01.
.1010.
101100
010011
.0.1.0
.010..

নিয়ম 1 এর কারণে আমরা সারিতে 5, কলাম 1 এ একটি 1 পূরণ করতে পারি:

.1.01.
.1010.
101100
010011
10.1.0
.010..

বিধি 3 এর কারণে আমরা সারি 1, কলাম 6 এ 0 টি পূরণ করতে পারি (যখন সারি 4 দেখুন):

.1.010
.1010.
101100
010011
10.1.0
.010..

বিধি 1 এবং 2 এর কারণে এখন আমরা অঙ্কগুলি দিয়ে শূন্যস্থান পূরণ করতে পারি:

.1.010
010101
101100
010011
10.1.0
.010.1

3 রুলের কারণে এখন আমরা সারি 5 টি শেষ করতে পারি (যখন সারির 3 টি দেখুন):

.1.010
010101
101100
010011
100110
.010.1

এবং তারপরে আমরা নিয়ম 1 এবং 2 এর কারণে ধাঁধাটি শেষ করতে পারি:

011010
010101
101100
010011
100110
101001

চ্যালেঞ্জ:

চ্যালেঞ্জটি সহজভাবে: প্রারম্ভিক গ্রিড দেওয়া, সমাধান ধাঁধা আউটপুট।

দ্রষ্টব্য: আপনাকে উপরের নিয়মগুলি প্রয়োগ করতে হবে না। আপনি অবশ্যই করতে পারেন, এবং এটি আপনাকে কীভাবে এই চ্যালেঞ্জটি বাস্তবায়িত করতে হবে সে সম্পর্কে ইঙ্গিত দেওয়া উচিত, তবে নিয়মগুলি মাথায় রেখে সমাধানটিকে গুরুতর করা পুরোপুরি ঠিক।
আপনি কীভাবে এটি সমাধান করবেন তা আপনার উপর নির্ভর করে তবে সমাধান হওয়া ধাঁধাটি আউটপুট করা চ্যালেঞ্জ।

চ্যালেঞ্জ নিয়ম:

  • গ্রিডের জন্য ইনপুট এবং আউটপুট ফর্ম্যাটটি নমনীয় তবে দয়া করে আপনি কী ব্যবহার করবেন তা জানান। (অর্থাত 2D বাইট-অ্যারে; নতুন লাইনের সাথে স্ট্রিং; ইত্যাদি)
  • এটি উপরে বর্ণিত অক্ষরের ক্ষেত্রেও প্রযোজ্য। উদাহরণ হিসাবে আমি ব্যবহার করেছি 01., তবে আপনি চাইলে ABxপরিবর্তে ব্যবহার করতে পারেন । আপনি কি ইনপুট / আউটপুট ফর্ম্যাট এবং অক্ষর ব্যবহার করেছেন তা দয়া করে বলুন।
  • আপনি শুধুমাত্র নিম্নলিখিত গ্রিড মাপ ব্যবহার করা হবে অনুমান করতে পারেন: 6x6; 8x8; 10x10; 12x12; 14x14; 16x16

সপ্তাহের দিন:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার জন্য যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতিগুলি, সম্পূর্ণ প্রোগ্রামগুলির সাথে STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের জন্য একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন।
  • এছাড়াও, প্রয়োজনে একটি ব্যাখ্যা যোগ করুন।

পরীক্ষার কেস:

বিন্দুগুলি কেবল পঠনযোগ্যতার জন্য যুক্ত করা হয়, শূন্যস্থানগুলির পরিবর্তে ফাঁকা স্থান বা অন্য কোনও কিছু ব্যবহার করতে নির্দ্বিধায় মনে করুন। ইন এবং আউটপুট উভয় বিন্যাস নমনীয়।

Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00

Output:
101010
010011
100101
011010
001101
110100

Input:
.1....
.10.0.
1.11..
.1....
...1.0
......

Output:
011010
010101
101100
010011
100110
101001

Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.

Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011


উত্তর:


4

ব্র্যাচল্যাগ , 34 বাইট

{ℕ<2}ᵐ²&≜{d?ọᵐctᵐ=&{ḅlᵐ⌉<3}ᵐ}&\↰₂&

এটি অনলাইন চেষ্টা করুন!

এটি বেশ জঘন্য ধীর, তাই টিআইওতে পরীক্ষার কেস 4x4। সময় লাগছে কিনা তা দেখতে আমি বর্তমানে আমার কম্পিউটারে 6x6 পরীক্ষার মামলাটি চালাচ্ছি।

এটি ইনপুট হিসাবে তালিকার একটি তালিকা নেয়। অজানা মানগুলি ভেরিয়েবলগুলির সাথে ইঙ্গিত করা উচিত, এটি সর্ব-বড় হাতের স্ট্রিংগুলির সাথে হয় (এবং সেগুলি পৃথক হওয়া উচিত, অন্যথায় আপনি ইঙ্গিত করছেন যে কয়েকটি কোষের একই মান থাকতে হবে)

ব্যাখ্যা

আমরা মানগুলিকে অন্তর্ভুক্ত করতে সীমাবদ্ধ করি {0,1}, তারপরে আমরা সমস্ত 3 টি নিয়মকে সম্মান না করা পর্যন্ত আমরা ভেরিয়েবলগুলির ইনস্ট্যান্টেশন চেষ্টা করি। এ কারণেই এটি এত ধীর (কারণ এটি সন্ধানের আগ পর্যন্ত এটি সকলের চেষ্টা করবে; এবং কারণ ক্ষেত্রে ব্র্যাচ্ল্যাগ যথাযথভাবে প্রয়োগ করা হয়নি যাতে কোনও সম্ভাব্য ম্যাট্রিক্স চেষ্টা করার আগে বাধা আরোপ করা যেতে পারে)।

                                 &  Output = Input
{   }ᵐ²                             Map two levels on the Input (i.e. each cell):
 ℕ<2                                  The cell is either 0 or 1
       &≜                           Assign values to all cells
         {                  }       Define predicate 2:
          d?                          The Input with no duplicates is still the Input
                                        (i.e. all rows are different)
           ?ọᵐctᵐ=                    All occurences of 1s and 0s for each rows are equal
                  &{      }ᵐ          Map on rows:
                    ḅlᵐ                 Get the lengths of runs of equal values
                       ⌉<3              The largest one is strictly less than 3
                             &\↰₂   Apply predicate 2 on the transpose of the Input
                                      (i.e. do the same checks but on columns)

কৌতূহলের বাইরে, ব্র্যাচল্যাগ কীভাবে মূলধনের বর্ণমালা ছাড়িয়ে চলকগুলি নির্দেশ করে? সুতরাং আসুন আমরা বলি যে আপনার সমাধানটি দ্রুত কাজ করবে, এটি একটি 14x14 গ্রিডের Aমাধ্যমে Y( Zআউটপুট-প্যারামিটার হিসাবে) সমস্ত খালি স্থান পূরণ করতে সক্ষম হবে না । এটা চালিয়ে দেয় AA, AB, ইত্যাদি?
কেভিন ক্রুইজসেন 5:55

2
@ কেভিন ক্রুজসেন যে কোনও অল-বড়সেস শনাক্তকারী একটি পরিবর্তনশীল, তাই হ্যাঁ AAএকটি পরিবর্তনশীল এবং KEVINCRUIJSSENএটিও একটি পরিবর্তনশীল।
5:58

3
যেমনটি আমি সন্দেহ করেছি, ব্র্যাচিয়েলগের জন্য তৈরি একটি চ্যালেঞ্জ: ডি
জোনাথন অ্যালান

3

জাভাস্ক্রিপ্ট (ES6), 274 270 বাইট

ইনপুটটিকে 2 ডি অ্যারে হিসাবে নেয়, যেখানে খালি ঘরগুলি চিহ্নিত থাকে 2। কনসোলের সমস্ত সম্ভাব্য সমাধান মুদ্রণ করে।

f=(a,x=0,y=0,w=a.length,p,R=a[y])=>(M=z=>!a.some((r,y)=>/(0|1),\1,\1/.exec(s=r.map((v,x)=>(v=z?v:a[x][y],b-=v&1,c-=!v,m|=v&2,v),b=c=w/2))||b*c<0|o[b*c||s]&(o[s]=1),o={}))(m=0)&M(1)&&(m?R&&[0,1].map(n=>(p=R[x])==n|p>1&&(R[x]=n,f(a,z=(x+1)%w,y+!z),R[x]=p)):console.log(a))

কিভাবে এটা কাজ করে

কোডের প্রথম অংশটি M()বর্তমান বোর্ডের বৈধতা, অনুভূমিকভাবে এবং উল্লম্বভাবে পরীক্ষা করতে ফাংশনটি ব্যবহার করে ।

M = z =>
  !a.some((r, y) =>
    /(0|1),\1,\1/.exec(
      s = r.map((v, x) =>
        (
          v = z ? v : a[x][y],
          b -= v & 1,
          c -= !v,
          m |= v & 2,
          v
        ),
        b = c = w / 2
      )
    ) ||
    b * c < 0 |
    o[b * c || s] &
    (o[s] = 1),
    o = {}
  )

এটা তোলে স্ট্রিং একটি পূর্ণ সারি বা কলাম মানচিত্র গুলি । এটি আসলে একটি স্ট্রিংকে জোর দিয়েছিল এমন একটি অ্যারে, সুতরাং এটির মতো দেখাচ্ছে "1,2,2,0,2,2"

এটি ব্যবহার করে:

  • /(0|1),\1,\1/3 বা ততোধিক পরপর অভিন্ন অঙ্কগুলি সনাক্ত করার জন্য নিয়মিত প্রকাশ
  • কাউন্টারে এবং সংখ্যা ট্র্যাক রাখতে বেশী এবং শূন্য । উভয় কাউন্টারকে ডাব্লু / 2 তে আরম্ভ করা হয় এবং প্রতিবারে এক বা শূন্যের (যথাক্রমে) মুখোমুখি হওয়ার সময় হ্রাস পায় । এটি হয় বাড়ে:
    • B = C = 0 খ * গ = 0 → লাইন সম্পূর্ণ ও সংশোধন (অনেক হিসাবে শূন্য যেমন বেশী )
    • b> এর 0 এবং গ> 0 খ * গ> 0 → লাইন সম্পূর্ণ কিন্তু এতদূর সঠিক নয় (আমরা না চেয়ে বেশি W / 2 শূন্য বেশী বা চেয়ে W / 2 বেশী )
    • b <0 অথবা c <0 b * c <0 → লাইনটি অবৈধ
  • পতাকা মি ( 'নিখোঁজ' এর জন্য) যা নন-জিরো হলে সেখানে অন্তত একটি অবশিষ্ট দুই বোর্ডে।
  • এখনও অবধি সমস্ত লাইন নিদর্শনগুলির মুখোমুখি রাখতে অবজেক্ট o

বোর্ডটি যদি অবৈধ হয় তবে আমরা তত্ক্ষণাত্ থামব। বোর্ডটি বৈধ এবং সম্পূর্ণ হলে, আমরা এটি কনসোলে মুদ্রণ করব। তা না হলে, কোড প্রয়াসের দ্বিতীয় অংশ প্রতিটি প্রতিস্থাপন 2 হয় একটি সঙ্গে শূন্য বা এক recursive কল সঙ্গে

[0, 1].map(n =>
  (p = a[y][x]) == n |
  p > 1 && (
    a[y][x] = n,
    f(a, z = (x + 1) % w, y + !z),
    a[y][x] = p
  )
)

ডেমো


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

1
@ কেভিন ক্রুইজসেন এটি সম্ভবত অনুকূল থেকে অনেক দূরে তবে লেখাটি মজাদার ছিল। দুর্দান্ত চ্যালেঞ্জ!
আর্নৌল্ড

1

জেলি , 53 51 বাইট

ṡ€3ḄFf0,7L
SḤnLṀȯÇ
⁻QȯÇ
Fṣ©2L’0,1ṗż@€®F€s€LÇÐḟZÇ$Ðḟ

গ্রিডের প্রতিনিধিত্বকারী তালিকার একটি তালিকা নেয় 0, এতে রয়েছে 1, এবং 2(স্পেসগুলি)। তালিকাগুলির তালিকাগুলির একটি তালিকা ফেরত দেয়, প্রতিটি তালিকাগুলি একই ফর্ম্যাটে থাকে (যদিও কোনও চিহ্ন ছাড়াই 2) এবং ইনপুটটির একটি সম্ভাব্য সমাধান উপস্থাপন করে।

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

বিশুদ্ধ পাশব বল পদ্ধতি - কার্যকরী নিয়ম এবং প্রতিটি গ্রিড তাদের চেক যে কোন প্রতিস্থাপন দ্বারা গঠিত হতে পারে 2সঙ্গে গুলি 1s অথবা 0সে।

ṡ€3ḄFf0,7L - Link 1, # of runs of 3 1s or 3 0s by row: list of lists
ṡ€3        - all contiguous slices of length 3 for €ach list
   Ḅ       - convert all results from binary
    F      - flatten into one list
     f     - filter keep values in:
      0,7  -   0 paired with 7: [0,7]
         L - length

SḤnLṀȯÇ - Link 2, unequal counts of 1s and 0s by column ...or link 1: list of lists
S       - sum (vectorises, hence "by column", counts 1s since only 1s or 0s appear)
 Ḥ      - double
   L    - length (number of rows - OK since square)
  n     - not equal? (vectorises)
    Ṁ   - maximum (1 if any not equal)
     ȯÇ - ... or last link (1) as a monad

⁻QȯÇ - Link 3, rows are unique ...or link 2: list of lists
 Q   - unique
⁻    - not equal?
  ȯÇ - ... or last link (2) as a monad

Fṣ©2L’0,1ṗż@€®F€s€LÇÐḟZÇ$Ðḟ - Main link: list of lists
F                           - flatten
 ṣ©2                        - split at 2s and copy the result to the register
    L                       - length (# of such slices)
     ’                      - decrement (# of 2s)
      0,1                   - 0 paired with 1
         ṗ                  - Cartesian power (all binary lists of length # of 2s)
             ®              - recall value from register (the flat version split at 2s)
          ż@€               - zip (reversed @rguments) for €ach (1s & 0s where 2s were)
              F€            - flatten €ach
                s€L         - split €ach into chunks of length length(input) (into rows)
                    Ðḟ      - filter discard if:
                   Ç        -   call last link(3) as a monad
                         Ðḟ - filter discard if:
                        $   -   last two links as a monad:
                      Z     -     transpose
                       Ç    -     call last link(3) as a monad
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.