এটি কি বৈধ তাকুজু বোর্ড?


21

টাকুজু একটি যুক্তিযুক্ত গেম যেখানে আপনাকে 0এস এবং 1এস সমন্বিত কোষ সহ একটি গ্রিড সম্পূর্ণ করতে হবে । গ্রিডটি অবশ্যই 3 টি বিধি অনুসরণ করবে:

  1. কোনও তিনটি অনুভূমিক বা উল্লম্ব ক্রমাগত কক্ষগুলি একই হতে পারে না।
  2. প্রতিটি সারি এবং কলামে সমান সংখ্যক 0s এবং 1s থাকতে হবে ।
  3. কোনও দুটি সারি একই হতে পারে না এবং কোনও দুটি কলামও একই হতে পারে না।

একটি সমাপ্ত গ্রিড তাকান:

0011
1100
0101
1010

যেহেতু আপনি দেখতে পারেন, এই বোর্ডের নিয়ম অনুসরণ করে 1, 2এবং 3। তিনটি অনুভূমিক বা উল্লম্ব কক্ষগুলি একই, সমস্ত সারি এবং কলামগুলিতে সমান সংখ্যক 0s এবং 1s থাকে এবং কোনও দুটি সারি এবং কোনও দুটি কলাম একই নয়।

আসুন এমন গ্রিডটি দেখুন যা বৈধ নয়:

110100
010011
011010
101100
100011
001101

এই গ্রিডে সমস্যা রয়েছে। উদাহরণ হিসেবে বলা যায়, সারি 5তিনটি হয়েছে 0পরপর s, এবং কলাম 2তিন রয়েছে 1একটি সারিতে গুলি, তিনটি দ্বারা অনুসরণ 0গুলি। অতএব, এটি কোনও বৈধ গ্রিড নয়।

টাস্ক:

আপনার টাস্ক একটি প্রোগ্রাম যা, একটি 2D অ্যারের দেওয়া করা হয় n* n 0s এবং 1গুলি, বোর্ড যাচাই যদি এটি একটি বৈধ, সমাপ্ত Takuzu বোর্ডের দেখতে।

উদাহরণ:

0011
1100
0101
1010

এই বোর্ডটি সমস্ত নিয়ম অনুসরণ করে এবং তাই একটি বৈধ তাকুজু বোর্ড। এর জন্য আপনাকে অবশ্যই সত্যবাদী মানটি ফিরিয়ে দিতে হবে।

11
00

এটি কোনও বৈধ বোর্ড নয় - সারিটি 1নিয়ম অনুসরণ করে না 2। এর জন্য আপনাকে অবশ্যই একটি মিথ্যা মান প্রদান করতে হবে।

100110
101001
010101
100110
011010
011001

এটি কোনও বৈধ বোর্ড নয়, বিধি 3 এর কারণে এটি ব্যর্থ (কেবল) - প্রথম এবং চতুর্থ সারি একই are

110100
001011
010011
101100
100110
011001

এটি কোনও বৈধ বোর্ড নয়, নিয়ম 3 এর কারণে এটি ব্যর্থ (কেবল) - প্রথম এবং চতুর্থ কলামগুলি একই।

011010
010101
101100
010011
100110
101001

এটি একটি বৈধ বোর্ড।

বিধি এবং চশমা:

  • আপনি ধরে নিতে পারেন যে সমস্ত বোর্ডগুলি মাত্রার বর্গ n * n, যেখানে nএকটি ধনাত্মক এমনকি পূর্ণসংখ্যা।
  • আপনি ধরে নিতে পারেন যে সমস্ত বোর্ড শেষ হয়েছে।
  • আপনি ইনপুটটি 2D অ্যারে হিসাবে মানগুলি বোঝায় 0এবং এবং 1একটি স্ট্রিং হিসাবে নিতে পারেন।
  • সত্য এবং মিথ্যা বোর্ডগুলির জন্য আপনাকে অবশ্যই ধারাবাহিক সত্য এবং মিথ্যা মানগুলি আউটপুট করতে হবে এবং "সত্যবাদী" এবং "মিথ্যা" প্রতিনিধিত্বকারী মানগুলি একই হতে পারে না।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!



3
আমি এটি 0 ঘন্টা এইচ
এরিক দ্য আউটগল্ফার

3
@ এরিকথ আউটগল্ফার হ্যাঁ, আমি এটি কেবল 0 এইচ 1 হিসাবে জেনেও শুরু করেছিলাম, তবে টাকুজু ধাঁধার মূল নাম।
ক্লিষ্টিক

@ এরিকথ আউটগল্ফার আমি সর্বদা এটি "বাইনারি ধাঁধা" বা "সুবিকু" হিসাবে জানতাম, তবে "তাকুজু" হ'ল কিওয়ার্প-ডের্প মূল নামটি উল্লেখ করেছেন।
কেভিন ক্রুইজসেন

2
আরও কিছু পরীক্ষার কেস চমৎকার হবে (আমি বড়, বৈধ বোর্ডগুলি অনুপস্থিত))
লিন

উত্তর:


16

ব্র্যাচল্যাগ , 20 18 বাইট

≠\≠,?¬{∋s₃=|∋ọtᵐ≠}

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

ব্যাখ্যা

≠                           All rows are different
 \                          Transpose
  ≠                         All columns are different
   ,?                       Append the list of rows to the list of columns
     ¬{          }          It is impossible that:
       ∋                      A row/column of the matrix…
        s₃=                   …contains a substring of 3 equal elements
           |                Or that:
            ∋ọ                The occurences of 1s and 0s in a row/column…
              tᵐ≠             …are not equal

" কলামগুলির তালিকায় সারিগুলির তালিকা যুক্ত করুন " এটি গল্ফ করার স্মার্ট উপায়! এবং এখানে আমি ভেবেছিলাম আপনার 20-বাইট উত্তরটি বিন্দুতে ছিল এবং যতটা সম্ভব গল্ফ করে। আমি দেখতে Brachylog ম্যাট্রিক্স যাচাই যেমন হয় ভাল হিসাবে তাদের সমাধানে । :)
কেভিন ক্রুইজসেন

1
এটা আউটপুট করা উচিত নয় falseজন্য এই ?
এইচ.পি.উইজ

1
@ এইচ.পি.উইজ ভাল সন্ধান করুন, ধন্যবাদ কাজ করেছে যে 18 বাইট সংস্করণ ফিরে।
লা

@ লুইসমেডো আমি কেবলমাত্র সমস্ত সারি এবং সমস্ত কলাম একই তালিকায় রাখছি মূলত।
২৩ শে

2
@ জগারব সঠিক, ধন্যবাদ তৃতীয়বারের মতো আমাকে সম্পাদনাটি রোলব্যাক করতে হবে, শুরুর পোস্টটি আরও ভাল পরীক্ষার জন্য মরিয়া হওয়া দরকার ...
২৮ শে

11

হুশ , 19 18 বাইট

S=‼(Tf§=LṁDum(ṁ↑2g

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

এইচপিউইজকে ধন্যবাদ 1 বাইট!

মূল ধারণাটি ইনপুটগুলিতে একটি ধারাবাহিক রূপান্তর প্রয়োগ করছে যা কোনও বৈধ বোর্ডের জন্য পরিচয় এবং চূড়ান্ত ফলাফলটি মূল ইনপুটের মতো কিনা তা খতিয়ে দেখছে।

ব্যাখ্যা

S=‼(Tf§=LṁDum(ṁ↑2g
            m(ṁ↑2g    in each line, take at most two items for each sequence of equal items
           u          remove duplicate lines
     f§=LṁD          keep only those lines where the sum of each element doubled is equal to the length of the line
    T                 transpose the matrix (swap rows with columns)
  ‼                   do all the previous operations again
S=                    check if the final result is equal to the original input

2

@ এইচ.পি.উইজ যা প্রায় স্পষ্ট ছিল, আমাকে বোবা!
লিও

7

জেলি , 17 বাইট

-*S;E3Ƥ€F$TȯQZµ⁺⁼

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

মাইল এবং জোনাথন অ্যালান -6 বাইট ধন্যবাদ ।


1
আমি বিশ্বাস করি আপনি এটি 21 বাইটে সংক্ষিপ্ত করতে পারবেন। টিআইও
মাইল

@ মাইলস ... সম্ভবত 19 বাইট ?
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান যে 18 বাইট ... হ্যাঁ আপনি µZ$⁺আবার কাজটি করেছেন: পি ... এবং 17 বাইট কিছুটা অদলবদল করে: ডি এখন আমি
ব্র্যাচল্যাগ হিহকে

পুনঃটুইট
শে

@ জোনাথান অ্যালান নিস এছাড়াও আমি বিশ্বাস করি যে এই প্রথম আমি যুক্ত করা উপসর্গ / ইনফিক্সটি কার্যকর হয়েছে।
মাইল 23

5

গণিত, 143 বাইট

And@@Flatten@(((s=#;Equal@@(Count[s,#]&/@{0,1})&&FreeQ[Subsequences@s,#]&/@{{1,1,1},{0,0,0}})&/@#)&&(DeleteDuplicates@#==#)&/@{#,Transpose@#})&


ইনপুট

[{{0, 0, 1, 1}, {1, 1, 0, 0}, {0, 1, 0, 1}, {1, 0, 1, 0}}]


5

পাইথন 2 , 127 বাইট

a=input()
n=len(a)
b=zip(*a)
print[n/2]*n*2==map(sum,a+b)>len(set(a))==len(set(b))==n<'0, 0, 0'not in`a+b`>'1, 1, 1'not in`a+b`

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

এন এন এর একটি তালিকা পড়েইনপুট হিসাবে টিপলগুলির ।

আমি 1/(…)পরিবর্তে লিখে প্রস্থান কোড দ্বারা আউটপুট পারেprint… তবে এটি চিটচিটে মনে হয়। আমি কি?

ব্যাখ্যা

nবোর্ডের আকার; bকলামগুলির একটি তালিকা (স্থানান্তর a) ose বাকিগুলি একটি দীর্ঘ শৃঙ্খলিত তুলনা:

  • [n/2]*n*2==map(sum,a+b) চেক বিধি 2. প্রতিটি সারি এবং কলামের যোগফল n / 2 হবে।
  • map(sum,a+b)>len(set(a)) সর্বদা সত্য (তালিকা> অন্তর্নিহিত)।
  • len(set(a))==len(set(b))==n চেক বিধি 3।
  • n<'0, 0, 0' সর্বদা সত্য (int <str)।
  • '0, 0, 0'not in`a+b`>'1, 1, 1'not in`a+b`চেক বিধি 1. `a+b`সমস্ত সারি এবং কলামের স্ট্রিং প্রতিনিধিত্ব; টিআইওতে উদাহরণ ইনপুটটির জন্য এটি

    "[(0, 0, 1, 1), (1, 1, 0, 0), (0, 1, 0, 1), (1, 0, 1, 0), (0, 1, 0, 1), (0, 1, 1, 0), (1, 0, 0, 1), (1, 0, 1, 0)]"

    `a+b`>'1, 1, 1'কেন্দ্রে যেহেতু এই স্ট্রিং দিয়ে শুরু করতে নিশ্চিত করা হয় সবসময় সত্য "[", যা তার চেয়ে অনেক বেশী "1"


আপনি যদি প্রস্থান কোডের মাধ্যমে আউটপুট দিতে চান তবে আপনি এটি করতে পারেন [n/2]*n*2==map(sum,a+b)>len(set(a))==len(set(b))==n<'0, 0, 0'not in`a+b`>'1, 1, 1'not in`a+b`>xযা বিভাগের চেয়ে 2 বাইট কম এবং NameErrorসত্যবাদী ইনপুটগুলির ফলস্বরূপ।
ovs

3

হুশ , 27 25 বাইট

Λ§&Λȯ¬VEX3§&Λ§=#0#1S=uSeT

ইনপুট হল তালিকার একটি তালিকা এবং আউটপুট এর 1জন্য Trueএবং এর 0জন্যFalse

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

Explaination

                      SeT    Create a list with the input and itself transposed
Λ                            Is the following function true for all in the list
 §&                          And the results of the following functions
   Λȯ¬VEX3                     Test for rule 1
          §&                   The and of:
            Λ§=#0#1                Test for rule 2
                   S=u             Test for rule 3

পরীক্ষা 1

Λȯ¬VEX3
Λ         Is it True for all ...
   V      Are any of the ...
     X3   Substrings of length 3 ...
    E     All equal
 ȯ¬       Logical not

পরীক্ষা 2

Λ§=#0#1
Λ         Is it true for all that ...
 §=       The results of the two functions are equal
   #0         Number of 0s
     #1       Number of 1s

পরীক্ষা 3

S=u
S=    Is the result of the following function equal two its argument
  u   Remove duplicates

3

রেটিনা , 129 89 85 বাইট

.+
$&,$&
O#$`.(?=.*,)
$.%`
.+
$&;$&
+`(01|10)(?=.*;)

1ms`(.)\1\1|\d,?;|(\D\d+\b).*\2

এটি অনলাইন চেষ্টা করুন! আউটপুট 0 বৈধ জন্য, 1 অবৈধ। সম্পাদনা করুন: @ মার্টিনইেন্ডারে ধন্যবাদ 4 টি বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

.+
$&,$&

,বিভাজকগুলির সাথে প্রতিটি সারির সদৃশ করুন ।

O#$`.(?=.*,)
$.%`

প্রথম সদৃশ স্থানান্তর করুন।

.+
$&;$&

আবার নকল, এবার ;বিভাজক সঙ্গে ।

+`(01|10)(?=.*;)

সেমিকোলনের পূর্ববর্তী সমস্ত সংখ্যার মিলের জোড়া মুছুন।

1ms`(.)\1\1|\d,?;|(\D\d+\b).*\2

কোনও কলাম বা সারি কোনও নিয়মকে ব্যর্থ করে কিনা তা পরীক্ষা করে দেখুন; (.)\1\1একটি সারিতে তিনটি অভিন্ন অঙ্কের \d,?;জন্য চেকস , একটি অযৌক্তিক অঙ্কের (\D\d+\b).*\2জন্য পরীক্ষা করে এবং একটি সদৃশ পরীক্ষা করে।


যদি (...).*শেষ পর্যায়েটির উদ্দেশ্যটি কেবলমাত্র কাজটি করতে হয় max(matches,1)তবে আপনি 1পরিবর্তে কনফিগারেশনে একটি ব্যবহার করে তিনটি বাইট সংরক্ষণ করতে পারবেন ।
মার্টিন এণ্ডার

এবং .\b\d+\bহতে পারে \D\d+\b
মার্টিন এন্ডার

@ মার্টিনএেন্ডার মূলত আমি কোনও আউটপুট ছাড়াই অবৈধ আউটপুট প্রতিস্থাপন করেছি এবং শেষ পর্যন্ত এটি পরীক্ষা করেছি ... অবশেষে আমি এটিকে শেষের দিকে একক পরীক্ষায় নামিয়ে দিয়েছি এবং বুঝতে পেরেছি যে আমি .*আগে যে ব্যবহার করে আসছি তা বাদ দিতে পারব তবে ব্যবহার করার কথা ভাবিনি ফলাফল সীমিত করার জন্য একটি কনফিগারেশন, ধন্যবাদ!
নিল

3

Pyth , 31 বাইট

অনেক ধন্যবাদ @Leaky নূনের

.Asm++mqy/k\0lQdm<hk3srL8d{Id,C

সমস্ত পরীক্ষার কেস যাচাই করুন বা এটি এখানে চেষ্টা করুন!


পাইথ ,  48 46 44  42 বাইট

এটি প্রাথমিক সমাধান।

&{IQ&{I.TQ.Am&q/d\0/d\1!+/d*3\0/d*3\1sC,.T

সমস্ত পরীক্ষার কেস যাচাই করুন বা এটি এখানে চেষ্টা করুন!

& {IQ & {I.TQ.Am & q / d \ 0 / d \ 1! + / D * 3 \ 0 / d * 3 \ 1sC, .T সম্পূর্ণ প্রোগ্রাম অন্তর্নিহিত ইনপুট সহ।

 {আইকিউ কি অনুলিপি অধীনে ইনপুট?
& {I.TQ এবং এটির ট্রান্সপোসও আক্রমণকারী?
                                        .TQ ট্রান্সপোজ।
                                           প্রশ্ন ইনপুট।
                                     এসসি, উপরের জিপ, [^, ^^] (এবং সমতল)।
    & এবং নিম্নলিখিত শর্ত পূরণ করা হয়?
          M উপরের ম্যাপিংয়ের সময় সমস্ত উপাদান সত্যবাদী ^^
              q / d \ 0 / d \ 1 এর মতো 0 টি রয়েছে 0
             &! + / d * 3 \ 0 / d * 3 \ 1 এবং 3 টি সমান উপাদানের রান নেই।

3

এমএটিএল , 27 বাইট

,G@?!]tEqts~w7BZ+|3<bXBSdvA

ইনপুট একটি ম্যাট্রিক্সযুক্ত 0এবং 1। আউটপুট 0মিথ্যা, 1সত্যের জন্য।

এটি অনলাইন চেষ্টা করুন! বা পরীক্ষার কেসগুলি দেখুন: 1 , 2 , 3 , 4 , 5

ব্যাখ্যা

,       % Do twice. First iteration will use the input, second its transpose
  G     %   Push input
  @     %   Push iteration index: first 0, then 1
  ?     %   If nonzero
    !   %     Transpose
  ]     %   End
  t     %   The top of the stack contains the input or its transpose. Duplicate
  Eq    %   Convert to bipolar form, i.e. replace 0 by -1
  t     %   Duplicate
  s     %   Sum of each column
  ~     %   Negate. If all results are true, condition 2 is fulfilled
  w     %   Swap. Moves copy of bipolar input/transposed input to top
  7B    %   Push [1 1 1], obtained as 7 converted to binary
  Z+    %   2D convolution. Gives a matrix of the same size as the input
  |3<   %   Is each entry less than 3 in absolute value? If all results are true,
        %   condition 1 is fulfilled
  b     %   Bubble up. Moves copy of input/transposed input to top
  XB    %   Convert each row from binary to a number
  Sd    %   Sort, consecutive differences. If all results are nonzero, condition 3
        %   is fulfilled
  v     %   Concatenate all results so far into a column vector
  A     %   True if all entries are nonzero
        % End (implicit). Display (implicit)

2

আর , 114 107 বাইট

-7 জিউস্প্পকে ধন্যবাদ, ক্রিয়াকলাপকে কল করে এবং সত্যিই শর্তটি সঙ্কুচিত করে

function(x)any(f(x),f(t(x)))
f=function(x)c(apply(x,1,function(y)max(rle(y)$l)>2+mean(y)-.5),duplicated(x))

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

এটি কেবল ম্যাট্রিক্সের কলামগুলিতে, তারপরে ম্যাট্রিক্সের ট্রান্সপোজের কলামগুলিতে প্রয়োগ করে।

ফর্ম ইনপুট নেয়:

matrix(c(0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,0), ncol=4)

যা ঠিক কিভাবে 2 ডি অ্যারে নেয়।

ব্যর্থতার জন্য আউটপুট সত্য, পাসের জন্য মিথ্যা।



সাধারণ আপডেটগুলি: mean(y)-.5অভ্যন্তরীণ fফাংশনের অভ্যন্তরের পরিবর্তে উপায় অর্জনের জন্য ব্যবহৃত হয় colMeansএবং gবেনামে তৈরি করা হয়। এটি কলটিতে রূপান্তর doubleকরার জন্য সতর্কতা যুক্ত করবে তবে তা ঠিক। logicalany
জিউসেপে

@ জিউসেপ ধন্যবাদ! আমি সত্যিই যে সম্মিলিত প্রয়োগ পছন্দ, খুব চালাক পরিবর্তন! আমার কাছে এটি প্রথম পর্যায়ে 2 পৃথক প্রয়োগ হিসাবে প্রয়োগ হয়েছে এবং আপনি কীভাবে পরিষ্কারভাবে তাদের একত্রিত করতে পারেন তা বুঝতে পারি নি।
ক্রিমিনালিভালগার


2

পার্ল 6 ,100 93 বাইট

জংশন এফটিডব্লিউ! তারা 7 বাইট সংরক্ষণ করুন।

আপাতত, মনে হচ্ছে এটি অ-গল্ফ ভাষায় লিখিত অন্য সমস্ত জমাগুলিকে মারছে। কেয়াবাত্!

{!max (@(.map(*.join)).&{.repeated| |.map:{$_~~/000|111/|.comb(0)-.comb(1)}}for @^a,[Z] @^a)}

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

ব্যাখ্যা : এটি এমন একটি ব্লক যা বোর্ডকে তালিকার তালিকা হিসাবে গ্রহণ করে as আমরা একটি ট্রান্সপোজ তৈরি করি [Z] @^a(জিপ অপারেটরের সাথে তালিকার তালিকাকে হ্রাস করুন)। তাই @^a,[Z] @^aবোর্ড এবং তার TRANSPOSE একটি তালিকা রয়েছে। এক্ষেত্রে 1 টি সস্তা সস্তা হয়ে আমরা forঠিক এটির মতো কাজ করে আমাদের সাথে লুপ করি map

এর অভ্যন্তরে, আমরা প্রথমে স্ট্রিংগুলিতে সারি গঠনের তালিকায় যোগদান করি, সুতরাং আমাদের তালিকাগুলির তালিকার পরিবর্তে স্ট্রিংগুলির তালিকা রয়েছে ( @(.map(*.join)))। তারপরে আমরা এটিতে একটি বেনামে ব্লক ব্যবহার করি ( .&{...}), যেখানে আমরা আসলে নিয়মগুলি মূল্যায়ন করি ate আমরা তাদের কেবল সারি অনুসারে মূল্যায়ন করব। (যেহেতু আমরা এটি মূল অ্যারে এবং ট্রান্সপোসের জন্যও করি))

বেশ কয়েকটি সংরক্ষণ করতে !আমরা কিছুটা যুক্তি ব্যবহার করি এবং পরীক্ষার পরিবর্তে (NO repeated rows) AND (NO 3 consecutive same symbols) AND (NOT different counts of 0 and 1)আমরা পরীক্ষা করি NOT[ (repeated rows) OR (3 consecutive same symbols) OR (different counts) ]। আমরা বেনামে থাকা ব্লকে এটিই করি: .repeatedএকাধিকবার উপস্থিত সমস্ত সারি দেয়, তারপরে আমরা সারিগুলিতে মানচিত্র তৈরি করি, একটি রেজেক্স ব্যবহার করে টানা 3 টি প্রতীক মিলানোর চেষ্টা করি এবং 0 এবং 1 এর সংখ্যা বিয়োগ করে। এগুলি এর সাথে OR'red |। (প্রকৃতপক্ষে এটি একটি শক্তিশালী জিনিস তৈরি করে যার নাম একটি জংশন , তবে আমরা এর কোনও শক্তি ব্যবহার করি না :)) এত কিছুর পরেও আমরা 2 টি "বুল" (কলঙ্কিত জংশন) এর একটি তালিকা পাই। আমরা শেষ পর্যন্ত বা সেগুলি (ব্যবহার করে max) এবং !উপেক্ষা ( ), যা পছন্দসই ফলাফল দেয়।


2

জে, 40 38 55 বাইট

0=[:([:+/^:_(3(0=3|+/)\"1 ]),:-.@~:,:#=[:+/"1+:@])|:,:]

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

বর্গ ম্যাট্রিক্সকে ইনপুট হিসাবে গ্রহণ করে একটি ফাংশন সংজ্ঞায়িত করে।

কমপক্ষে এটি পাইথকে মারছে (আপাতত ...) (ভুল করে)। আমার কোডে লুকানো ইমোজিগুলি গণনা করাতে আমার ফিরে যাওয়া উচিত, যেহেতু জে নিজেও এটিকে ভাল ধার দেয়:

[: /^: :1 |: :] :-.@ :# :@] :~@

ব্যাখ্যা (কিছুটা পুরানো)

এটি আমার উত্তর থেকে আলাদা দেখায় এবং আমি এটি আপডেট করতে পারি। এর অংশগুলি এখনও একইরকম - আমি কেবল নিয়ম 3 এর জন্য পরীক্ষা করছিলাম না এবং এর আগে 2 টি নিয়মের জন্য যথাযথভাবে চেক করছিলাম না।

কয়েকটি ফাংশনে বিভক্ত করুন এবং অবরুদ্ধ:

join_trans  =. |: ,: ]
part_3      =. 3 (0 = 3 | +/)\"1 ]
f           =. 1 - 2 * ]
main        =. 0 = [: ([: +/^:_ part_3 , f) join_trans

join_trans

|: ,: ]
|:       Transpose
   ,:    Laminated to
      ]  Input

এটি ম্যাট্রিক্সের ট্রান্সপোজকে নিজের সাথে যোগ দেয়, ম্যাট্রিক্সের একটি অ্যারে তৈরি করে।

part_3

3 (0 = 3 | +/)\"1 ]
                  ]  Input (matrix and transpose)

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

1 - 2 * ]

আরও ভাল নামের অভাবের জন্য, আমি এটি কল করি f। এটি 0 এর স্থান _1 এর সাথে প্রতিস্থাপন করে এবং 1 টি অপরিবর্তিত রেখে দেয়। এটি আমাকে প্রতিটি সারি এবং কলামে 0 ও 1 এর সংখ্যা সমান কিনা তা অবশেষে যাচাইয়ের অনুমতি দেওয়ার জন্য (প্রতিটি সারিটির যোগফল 0 হওয়া উচিত)।

প্রধান

0 = [: ([: +/^:_ part_3 , f) join_trans
                             join_trans  Join transpose to input
                 part_3 , f              Apply the validity checks and join them
           +/^:_                         Sum until it converges
0 =                                      Equate to 0

মূলত, আমি সত্যটি উত্থাপন করেছি যে আমি এটি সেট আপ করেছি যাতে f join_transএবং part_3 join_transবোর্ডটি বৈধ হলে উভয়কেই 0 এর সমষ্টি করতে হবে। part_3একটি বৈধ বোর্ডের জন্য সমস্ত শূন্য হতে হবে এবং একটি বৈধ বোর্ডের জন্য সম্পূর্ণরূপে fশূন্য হতে হবে, অর্থাত্ তাদের যোগফলগুলি যোগফল কেবলমাত্র একটি বৈধ বোর্ডের জন্য is


কমপক্ষে এটি পাইথকে মারছে (আপাতত ...)। - আমার উত্তরটি আমার সত্যিই গল্ফ করা দরকার
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার হাহ হ্যাঁ, আপনি সবসময়ই টানতে পারেন বলেই আমি "আপাতত" কিছুটা যুক্ত করেছি। আমার উত্তরে গল্ফ করার কোনও জায়গা নেই - এটি কীভাবে খুব ভালভাবে করা যায় তা আমি জানি না।
কোলে


1
33 বাইটের জন্য এই কোডটি আপনার সমতুল্য হওয়া উচিত*/@,@,&(~:,(0~:3|3+/\]),#=2*+/)|:
মাইল মাইল

2

হাস্কেল , 137 136 127 বাইট

9 টি বাইট সংরক্ষণ করেছেন লিনকে ধন্যবাদ!

import Data.List
j=isSubsequenceOf
l x=x==nub x&&and[sum y*2==length x&&not(j[0,0,0]y||j[1,1,1]y)|y<-x]
g x=l x&&l(transpose x)

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


উভয়কে allএকটিতে রোল করুন and: l x=x==nub x&&and[sum y*2==length x&&not(j[0,0,0]y||j[1,1,1]y)|y<-x]
লিন

@ লিন ধন্যবাদ! আমি এই দুজনকে কিছুক্ষণ একসাথে রোল করার চেষ্টা করছিলাম। কেন আমি বুঝতে পারছিলাম না।
গম উইজার্ড

1
আপনি কি পরিবর্তন j=isSubSequenceOfকরতে পারেন j x=isSubSequenceOf[x,x,x]?
সাইয়েস

@ কোয়েস আমার কাছে একটি বাইট হারিয়েছে বলে মনে হচ্ছে। আপনার যদি এমন কোনও উপায় থাকে যা আমাকে একটি বাইট বাঁচায় আমি এটি প্রয়োগ করে খুশি হব। ধারণাটি একটি ভাল মত মনে হচ্ছে।
গম উইজার্ড

মোবাইলে, হুমম ... সম্ভবত এটি চাওয়ার পরিবর্তে j a b(এবং সংজ্ঞায়িত) a#b?
সাইওস

2

জাভা 8, 350 326 325 312 303 299 298 259 255 বাইট

int r,z,c,p,i,j,k,d,u,v=1;int c(int[][]b){v(b);k=v-=u=1;v(b);return r;}void v(int[][]b){String m="",x;for(d=b.length;j<d|k<d;k+=u,j+=v,r=m.contains(x)|z!=0?1:r,m+=x)for(x="#",c=0,k*=u,j*=v;j<d&k<d;z+=i|i-1,c*=i^p^1,x+=p=i,r=++c>2?1:r,k+=v,j+=u)i=b[k][j];}

ফেরত পাঠায় 0যখন এটি একটি বৈধ বোর্ডের; 1যদি এটি তিনটি নিয়মের এক বা একাধিকের জন্য অবৈধ হয়।

-95 বাইট @ নেভায়ে ধন্যবাদ ।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

int r,z,c,p,i,j,k,d,u,v=1;
                     // Temp integers on class-level

int c(int[][]b){     // Method (1) with int-matrix parameter and int return-type
  v(b);              //  Validate the rows
  k=v-=u=1;          //  Switch rows with columns, and reset `u` to 1
  v(b);              //  Validate the columns
  return r;          //  Return the result
}                    // End of method (1)

void v(int[][]b){    // Separated method (2) with int-matrix parameter and no return-type
  String m="",s;     //  Two temp Strings to validate uniqueness of rows
  for(d=b.length;    //  Set the dimension of the matrix to `d`
      j<d|k<d        //  Loop (1) as long as either `j` or `k` is smaller than `d`
    ;                //   After every iteration:
     k+=u,j+=v       //    Increase the loop-indexes
     r=m.contains(s) //    If we've found a duplicated row,
     |z!=0?          //    or if the amount of zeroes and ones on this row aren't equal
      1:r,           //     Set `r` to 1 (invalid due to either rule 2 or 3)
     m+=s)           //    Append the current row to the String `m`
    for(s=",",       //   Set String `x` to a separator-character
        c=0,         //   Reset the counter to 0
        k*=u,j*=v,   //   Increase the loop-indexes
        j<d&k<d      //   Inner loop (2) as long as both `j` and `k` are smaller than `d`
     ;               //    After every iteration:
      z+=i|i-1,      //     Increase or decrease `z` depending on whether it's a 0 or 1
      c*=i^p^1,      //     Reset `c` if current digit `i` does not equal previous `p`
      s+=p=i,        //     Set previous `p` to current digit, and append it to String `s`
      r=++c>2?       //     If three of the same adjacent digits are found:
         1:r;        //      Set `r` to 1 (invalid due to rule 1)
        k+=v,j+=u)   //      Increase the loop-indexes
      i=b[k][j];     //    Set `i` to the current item in the matrix
                     //   End of inner loop (2) (implicit / single-line body)
                     //  End of loop (2) (implicit / single-line body)
}                    // End of separated method (2)

1

পাইথন 3, 187 বাইট

lambda m,c=lambda m:all([len({*m})==len(m),sum(~-("000"in x)*~-("111"in x)and x.count("1")==x.count("0")for x in m)==len(m)]):c(["".join(x[i]for x in m)for i in range(len(m[0]))])and c(m)

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

লাইনের তালিকা হিসাবে ইনপুট নেয়।




@ মিঃ এক্সকোডারের পরামর্শের ভিত্তিতে 147 বাইট
ovs

1

05 এ বি 1 ই , 29 বাইট

ø‚D€ÙQIDøì©O·IgQP®εŒ3ù€Ë_P}PP

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

ব্যাখ্যা

বিধি: 3

ø‚        # pair the input with the zipped input
  D       # duplicate
   €Ù     # deduplicate each
     Q    # check for equality with the unmodified copy

বিধি: 2

IDøì          # prepend zipped input to input
    ©         # store a copy in register for rule 1
     O        # sum each row/column
      ·       # double
       IgQ    # check each for equality to length of input
          P   # product

বিধি: 1

®ε            # apply to each row/column in register
  Œ3ù         # get sublists of length 3
     €Ë       # check each if all elements are equal
       _      # logical not
        P     # product
         }    # end apply
          P   # product

তারপরে আমরা সমস্ত 3 টি নিয়মের ফলাফলের পণ্যটি গ্রহণ করি P



1

পিএইচপি, 245 + 1 বাইট

এটা বড় লাইন ব্রেকগুলি কেবল পড়ার সুবিধার জন্য:

$t=_;foreach($a=($i=str_split)($s=$argn)as$i=>$c)$t[$i/($e=strlen($s)**.5)+$i%$e*$e]=$c;
for(;$k++<2;$s=$t)$x|=preg_match("#000|111|(\d{"."$e}).*\\1#s",chunk_split($s,$e))
|($m=array_map)(array_sum,$m($i,$i($s,$e)))!=array_fill(0,$e,$e/2);echo!$x;

1নিউলাইন ছাড়া একক স্ট্রিং নেয়, সত্যের জন্য মুদ্রণ করে, মিথ্যা বলার জন্য কিছুই না।

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন

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