Bu geçerli bir Takuzu kurulu mu?


21

Takuzu, 0s ve 1s içeren hücreleri içeren bir tabloyu tamamlamanız gereken bir mantık oyunudur . Şebeke 3 kuralı takip etmelidir:

  1. Hiçbir üç yatay veya dikey ardışık hücre aynı olamaz.
  2. Her satır ve sütunda eşit sayıda 0s ve 1s olmalıdır .
  3. İki satır aynı olamaz ve iki sütun aynı olamaz.

Bitmiş bir şebekeye bakalım:

0011
1100
0101
1010

Gördüğünüz gibi, bu tahta kuralı izler 1, 2ve 3. Aynı üç yatay veya dikey hücre yok, tüm satırlar ve sütunlar eşit sayıda 0s ve 1s içeriyor ve iki satır yok ve iki sütun aynı değil.

Geçerli olmayan bir tabloya bakalım:

110100
010011
011010
101100
100011
001101

Bu şebekeyle ilgili bir sürü sorun var. Örneğin, satırın arka arkaya 5üç 0sn, sütununun arka arkaya 2üç 1sn, ardından üç 0sn. Bu nedenle, bu geçerli bir ızgara değil.

Görev:

Göreviniz, 2B n* n 0s ve 1s dizileri verilen ve geçerli bir bitmiş Takuzu kurulu olup olmadığını görmek için tahtayı doğrulayan bir program yapmaktır.

Örnekler:

0011
1100
0101
1010

Bu kurul tüm kuralları takip eder ve bu nedenle geçerli bir Takuzu kurulu. Bunun için gerçek bir değer döndürmelisiniz.

11
00

Bu geçerli bir tahta değil - satır 1kurallara uymuyor 2. Bunun için bir falsey değeri döndürmelisiniz.

100110
101001
010101
100110
011010
011001

Bu geçerli bir tahta değil, kural 3 nedeniyle başarısız oluyor (ilk ve dördüncü sıralar aynı.

110100
001011
010011
101100
100110
011001

Bu geçerli bir tahta değil, kural 3 nedeniyle başarısız oluyor (ilk ve dördüncü sütunlar aynı.

011010
010101
101100
010011
100110
101001

Bu geçerli bir kurul.

Kurallar ve Özellikler:

  • Tüm panoların boyutların kare olduğunu ve pozitif bir tamsayı n * nolduğu varsayılabilir n.
  • Tüm panoların bittiğini varsayabilirsiniz.
  • Sen anlamına değerlerini içeren bir 2D dizi olarak girdi alabilir 0ve 1ya bir dize olarak.
  • Truthy ve falsey panoları için tutarlı truthy ve falsey değerleri vermelisiniz ve "truthy" ve "falsey" yi temsil eden değerler aynı olamaz.

Bu , bayt cinsinden en kısa kod kazanır!



3
Bunu 0h h1 olarak biliyorum ...
Outgolfer Erik 11: 12'de

3
@EriktheOutgolfer Evet, bunu sadece 0h h1 olarak bilmeye başladım, ancak Takuzu bulmacanın orijinal adı.
clismique

@EriktheOutgolfer Ben her zaman "İkili Bulmaca" veya "Subiku" olarak biliyordum, ancak "Takuzu" Qwerp-Derp'nin orijinal adından da bahsettiği gibi.
Kevin Cruijssen

2
Bazı test sınavları daha iyi olurdu (büyük, geçerli panoları özlüyorum.)
Lynn

Yanıtlar:


16

Brachylog , 20 18 bayt

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

Çevrimiçi deneyin!

açıklama

≠                           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

" Golf yolu için" satır listesini sütun listesine ekle "akıllı yol! Ve burada 20 baytlık cevabın o noktaya geldiğini düşündüm ve olabildiğince golf oynadım. Brachylog'un matrisleri doğrulamada onları çözmede olduğu kadar iyi olduğunu görüyorum . :)
Kevin Cruijssen

1
O çıkış olmamalı falseiçin bu ?
H.PWiz

1
@ H.PWiz İyi bul, teşekkürler. Çalışan 18 baytlık sürüme döndürüldü.
Eylül’de

@LuisMendo Ben sadece tüm satırları ve tüm sütunları temelde aynı listeye koyuyorum.
17'de

2
@Zgarb Doğru, teşekkürler. Bu, bir düzenlemeyi geri almak zorunda kaldığım üçüncü
seferdi

11

Husk , 19 18 bayt

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

Çevrimiçi deneyin!

H.PWiz sayesinde 1 bayt kurtarıldı!

Ana fikir, geçerli bir pano için kimliğe sahip olan girdilere bir dizi dönüşüm uygulamak ve nihai sonucun orijinal girdiyle aynı olup olmadığını kontrol etmektir.

açıklama

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


@ H.PWiz neredeyse belliydi, beni aptal!
Leo,

7

Jöle , 17 bayt

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

Çevrimiçi deneyin!

-6 byte mil ve Jonathan Allan sayesinde .


1
Bunu 21 bayta kadar kısaltabileceğine inanıyorum. TIO
mil

@miles ... belki 19 bayt ?
Jonathan Allan,

1
@JonathanAllan 18 bayt ... evet µZ$⁺yine bir şey yaptın : p ... ve biraz değiştirerek 17 bayt: D şimdi ben brakilog hehe yedim
Outgolfer Erik 9

@EriktheOutgolfer Artık değil, bu bir kravat!
Eylül’de

@ JonathanAllan Güzel. Ayrıca bunun eklediğim ilk önek / hızlı hızlı komutun faydalı olduğuna inanıyorum.
mil

5

Mathematica, 143 bayt

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


giriş

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


5

Python 2 , 127 bayt

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`

Çevrimiçi deneyin!

N n -tuples listesini girdi olarak okur .

Çıkış kodunu 1/(…)yerine yazarak print…yazdırabilirim ama kabarık hissettiriyor. Yapmalımıyım?

açıklama

ntahtanın büyüklüğü; bsütunların listesi (devrik a). Gerisi bir uzun zincirli karşılaştırma:

  • [n/2]*n*2==map(sum,a+b) 2. kuralı kontrol eder. Her satır ve sütun n / 2'ye eşit olmalıdır.
  • map(sum,a+b)>len(set(a)) her zaman doğrudur (list> int).
  • len(set(a))==len(set(b))==n kontrol kuralı 3.
  • n<'0, 0, 0' her zaman doğrudur (int <str).
  • '0, 0, 0'not in`a+b`>'1, 1, 1'not in`a+b`kontrol kuralı 1. `a+b`tüm satır ve sütunların dizgi gösterimidir; TIO’daki örnek giriş için

    "[(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'Bu dize ile başlamak garanti beri merkezinde her zaman doğrudur "["ve daha fazla olan, "1".


Çıkış koduyla çıktı almak istiyorsanız [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, bölmeden 2 bayt daha kısa olan ve bir NameErrortruthy girdisi ile sonuçlanan bunu yapabilirsiniz .
ovs

3

Husk , 27 25 bayt

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

Girdi listelerinin bir listesi ve çıkış olduğu 1için Trueve 0içinFalse

Çevrimiçi deneyin!

Açıklama

                      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

Test 1

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

Test 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

Test 3

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

3

Retina , 129 89 85 bayt

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

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

Çevrimiçi deneyin! Geçerli için 0, geçersiz için 1 çıktılar. Düzenleme: @ Martininder sayesinde 4 bayt kaydedildi. Açıklama:

.+
$&,$&

Her satırı ,ayırıcılarla çoğaltın .

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

İlk kopyayı devret.

.+
$&;$&

;Ayırıcılarla bu kez tekrarlayın .

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

Noktalı virgüllerden önceki tüm eşleşen çiftleri silin.

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

Herhangi bir sütun veya satırın kurallardan herhangi birinde başarısız olup olmadığını kontrol edin; (.)\1\1arka arkaya üç aynı basamağı \d,?;kontrol eder, eşleştirilmemiş bir basamağı kontrol eder ve bir kopyayı (\D\d+\b).*\2kontrol eder.


(...).*Son aşamadaki amaç sadece max(matches,1)yapmaksa 1, yapılandırmada a kullanarak üç bayttan tasarruf edebilirsiniz .
Martin Ender

Ve .\b\d+\bolabilir \D\d+\b.
Martin Ender

@MartinEnder Başlangıçta geçersiz çıktıyı çıktı olmadan değiştirdim ve sonunda test ettim ... Sonunda tek bir teste düşürdüm ve daha önce kullanmış olduğum önceliği ihmal edebileceğimi .*ancak kullanmayı düşünmedim sonucu sınırlamak için bir yapılandırma, teşekkürler!
Neil

3

Pyth , 31 bayt

Çok teşekkür ederim @ Leaky Nun'a .

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

Tüm test durumlarını doğrulayın veya burada deneyin!


Pyth ,  48 46 44  42 bayt

Bu ilk çözümdür.

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

Tüm test durumlarını doğrulayın veya burada deneyin!

& {IQ & {I.TQ.Am & q / d \ 0 / d \ 1! + / D * 3 \ 0 / d * 3 \ 1sC, .T Örtülü girişi olan tam program.

 {IQ Girdi tekilleştirme altında değişmez mi?
& {I.TQ Ve devrik değişmez mi?
                                        .TQ Transpose.
                                           Q Giriş.
                                     sC, Yukarıdakileri sıkıştır, [^, ^^] (ve düzleştir).
    & Aşağıdaki koşul karşılandı mı?
          .Am ^^ üzerinden eşleme yaparken tüm elemanlar gerçeğe yakındır.
              q / d \ 0 / d \ 1 1s kadar 0s var.
             &! + / d * 3 \ 0 / d * 3 \ 1 Ve 3 eşit elementten oluşan bir çalışma yoktur.

3

MATL , 27 bayt

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

Giriş 0ve içeren bir matristir 1. Çıktı 0sahtekarlık, 1sahtekarlık içindir.

Çevrimiçi deneyin! Veya test durumlarına bakınız: 1 , 2 , 3 , 4 , 5 .

açıklama

,       % 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

R , 114 107 bayt

-7 Giuseppe sayesinde işlevsellikten uzak durmak ve koşulları gerçekten azaltmak

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))

Çevrimiçi deneyin!

Bu sadece kuralları matrisin sütunlarına, ardından matrisin devri sütunlarına uygular.

Formda girdi alır:

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

Bu sadece R'nin 2D dizilerini nasıl aldığıdır.

Hatalar için TRUE, geçer için FALSE çıkışı verir.



Genel güncellemeler: mean(y)-.5fişlev içinde değil, aracı elde etmek için kullanılır colMeansve gisimsiz yapılır . Çağrıda dönüştürmek doubleiçin uyarılar ekleyecektir logical, anyancak sorun değil.
Giuseppe

@Giuseppe Teşekkürler! Bu birleşik başvuruyu gerçekten çok seviyorum, çok akıllıca bir değişiklik! 2 ayrı uygulamanın erken bir aşamada uygulandığını ve bunları ne kadar temiz bir şekilde birleştirebileceğinizi anlamadım.
CriminallyVulgar


2

Perl 6 ,100 93 bayt

Kavşaklar FTW! 7 bayt kurtarıyorlar.

Şu an için, bu golf-olmayan dillerde yazılmış tüm diğer ilanları atıyor gibi görünüyor. Yippie!

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

Çevrimiçi deneyin!

Açıklama : Tahtayı liste halinde alan bir bloktur. İle geçiş yapma işlemi yapıyoruz [Z] @^a(fermuar operatörü ile listelerin listesini azaltın). Yani @^a,[Z] @^ayönetim kurulu ve devrik bir listesi. İle bitti Biz döngü foraynen gibi çalışır hangi mapsadece bu durumda 1 karakter daha ucuz olması.

İçinde, ilk olarak satırları oluşturan listelerde dizgilere katılırız, bu yüzden liste ( @(.map(*.join))) yerine dizgelerin listesine sahibiz . Sonra .&{...}, üzerinde kuralları anonim bir blok kullanarak kullanırız . Onları sadece satır başı değerlendireceğiz. (Orijinal dizi ve devrik için de yaptığımızdan beri.)

Bazılarını kurtarmak !için biraz mantık kullanıyoruz ve test etmek yerine test (NO repeated rows) AND (NO 3 consecutive same symbols) AND (NOT different counts of 0 and 1)ediyoruz NOT[ (repeated rows) OR (3 consecutive same symbols) OR (different counts) ]. Anonim blokta yaptığımız şey şu: bir .repeatedkereden fazla gerçekleşen tüm satırları veriyor, sonra sıraların üzerinde eşleştiriyoruz, bir regex kullanarak ardışık 3 sembolü eşleştirmeye çalışıyoruz ve 0 ve 1'in sayılarını çıkarıyoruz. Bunlar OR'red ile |. (Aslında birleşme adı verilen çok güçlü bir şey yaratır , ancak güçlerinin hiçbirini kullanmıyoruz :)) Tüm bunlardan sonra, 2 adet "bool" (çökmemiş birleşme) listesi alıyoruz. Sonunda ya da onlar (kullanarak max) ve negate ( !), ki istenen sonucu verir.


2

J, 40 38 55 bayt

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

Çevrimiçi deneyin!

Kare matris alan bir girişi girdi olarak tanımlar.

En azından Pyth'i dövüyor (şimdilik ...) (hatalı). J de kendine iyi borç verdiğinden, kodumda saklı emojiyi saymaya geri dönmeliyim:

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

Açıklama (biraz eski)

Bu benim cevabımdan farklı gözüküyor ve güncellemeye başlayabilirim. Bölümleri hala aynı - Ben sadece kural 3'ü kontrol etmiyordum ve kural 2'yi daha önce de kontrol etmiyordum.

Birkaç fonksiyona bölün ve asılmamış:

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

join_trans

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

Bu, bir matris dizisi yaratarak matrisin kendisinin transpozisyonunu birleştirir.

part_3

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

Bu, 3 ya da 0 olup olmadığını görmek için 3 satırlı bölümlerin toplamını kontrol eder (çünkü bunlardan herhangi biri geçersiz bir tahta anlamına gelir), 1 ise geri döndürür ve 0 olur. Her ikisine de verildiğinden beri hem matris hem de transpozisyonu üzerinde çalışır.

f

1 - 2 * ]

Daha iyi bir isim olmadığı için buna seslenirim f. 0'ları _1 ile değiştirir ve 1'leri değiştirmez. Bu, sonunda her satır ve sütunda 0 ve 1 sayısının eşit olup olmadığını kontrol etmeme izin verecek (satırların her birinin toplamı 0 olmalıdır).

ana

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

Temelde, ben böylece Bunu ayarladıktan gerçeğini kaldıraç f join_transve part_3 join_transtahta geçerlidir IFF hem 0'a özetlemek gerekir. part_3geçerli bir kurul için tümü sıfır olmalıdır ve geçerli bir kurul için tamamının fsıfıra eşit olması gerekir; bu, toplamlarının toplamının yalnızca geçerli bir kurul için 0 olduğu anlamına gelir.


En azından Pyth'i dövüyor (şimdilik ...). - Cevabımı gerçekten golf oynamalıyım
atmam

@ Mr.Xcoder haha ​​evet, her zaman içeri girmiş gibisiniz, bu yüzden "şimdilik" bitini ekledim. Cevabımın golf oynamak için yeri olmadığı için değil - nasıl yapılacağını çok iyi bilmiyorum.
cole


1
Bu 33 baytlık kod sizinkilerle aynı olmalıdır */@,@,&(~:,(0~:3|3+/\]),#=2*+/)|:
mil

2

Haskell , 137 136 127 bayt

Lynn sayesinde 9 byte kurtarıldı!

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)

Çevrimiçi deneyin!


Her ikisini de allbirer birer andl x=x==nub x&&and[sum y*2==length x&&not(j[0,0,0]y||j[1,1,1]y)|y<-x]
Lynn

@Lynn Teşekkürler! Bir süre bu ikisini bir araya getirmeye çalışıyordum. Bunu neden çözemediğimi bilmiyorum.
Buğday Sihirbazı,

1
Değiştirmek Could j=isSubSequenceOfiçin j x=isSubSequenceOf[x,x,x]?
Cyoce

@Cyoce Beni bir bayt kaybetmek gibi görünüyor. Bana bir bayt kazandıran bir yolu varsa, onu uygulamaktan mutluluk duyarım. Fikir iyi bir fikir gibi gözüküyor.
Buğday Sihirbazı

Cep telefonunda, hmmm ... Belki j a bonu çağırmak (ve tanımlamak yerine ) olarak a#b?
Cyoce

2

Java 8, 350 326 325 312 303 299 298 259 255 bayt

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];}

İade 0geçerli bir tahta olduğunda; 1Üç kuraldan biri veya daha fazlası için geçersizse.

-95 bayt sayesinde @Nevay .

Açıklama:

Burada dene.

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

05AB1E , 29 bayt

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

Çevrimiçi deneyin!

açıklama

Kural: 3

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

Kural: 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

Kural 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

Sonra 3 kuralın sonucunun ürününü de alıyoruz. P


1

Dyalog APL, 64 52 51 49 48 bayt

gerektirir ⎕IO←0

{⍲/{(∨/∊⍷∘⍵¨3/¨⍳2)∧((⊢≡∪)↓⍵)∧∧/(≢=2×+/)⍵}¨⍵(⍉⍵)}

Çevrimiçi deneyin!


1

PHP, 245 + 1 bayt

ew bu hantal. satır vuruşları yalnızca okuma rahatlığı içindir:

$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;

Yeni çizgiler olmadan tek bir dize alır, yazdırır 1 alır, gerçeğe uygun , sahte değil.

Pipe ile çalıştırın -nRveya çevrimiçi deneyin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.