Czy to ważna tablica Takuzu?


21

Takuzu to gra logiczna, w której musisz wypełnić siatkę komórkami zawierającymi 0s i 1s. Siatka musi spełniać 3 zasady:

  1. Żadne trzy kolejne poziome lub pionowe komórki nie mogą być takie same.
  2. W każdym rzędzie i kolumnie musi znajdować się taka sama liczba 0si 1.
  3. Żadne dwa wiersze nie mogą być takie same i żadne dwie kolumny nie mogą być takie same.

Spójrzmy na gotową siatkę:

0011
1100
0101
1010

Jak widać, ta płyta następująca reguła 1, 2i 3. Nie ma trzech poziomych lub pionowych komórek, które są takie same, wszystkie wiersze i kolumny zawierają taką samą liczbę 0si 1si, i nie ma dwóch wierszy i żadnych dwóch kolumn.

Spójrzmy na niepoprawną siatkę:

110100
010011
011010
101100
100011
001101

Jest wiele problemów z tą siatką. Na przykład wiersz 5ma trzy 0s z rzędu, a kolumna 2ma trzy 1s z rzędu, a następnie trzy 0s. Dlatego nie jest to poprawna siatka.

Zadanie:

Twoim zadaniem jest, aby program, który, biorąc pod uwagę tablicę 2D n* n 0s i 1s weryfikuje planszę, aby zobaczyć, czy jest to poprawny, wykończone deska Takuzu.

Przykłady:

0011
1100
0101
1010

Ta tablica spełnia wszystkie zasady i dlatego jest prawidłową tablicą Takuzu. Musisz zwrócić za to prawdziwą wartość.

11
00

To nie jest prawidłowa tablica - rząd 1nie przestrzega reguły 2. Musisz zwrócić za to wartość falsey.

100110
101001
010101
100110
011010
011001

To nie jest prawidłowa plansza, zawodzi (tylko) z powodu reguły 3 - pierwszy i czwarty rząd są takie same.

110100
001011
010011
101100
100110
011001

To nie jest poprawna plansza, nie powiedzie się (tylko) z powodu reguły 3 - pierwsza i czwarta kolumna są takie same.

011010
010101
101100
010011
100110
101001

To jest ważna tablica.

Zasady i specyfikacje:

  • Możesz założyć, że wszystkie tablice mają kwadratowe wymiary n * n, gdzie ndodatnia liczba parzysta jest liczbą całkowitą.
  • Możesz założyć, że wszystkie tablice są gotowe.
  • Dane wejściowe można traktować jako tablicę 2D zawierającą wartości oznaczające 0i 1lub ciąg znaków.
  • Musisz generować spójne wartości prawdy i falseya dla tablic prawdy i falseya, a wartości reprezentujące „prawdę” i „falsey” nie mogą być takie same.

To jest , więc wygrywa najkrótszy kod w bajtach!



3
Znam to jako 0h h1 ...
— Erik Outgolfer

3
@EriktheOutgolfer Tak, zacząłem tylko wiedzieć, że jest to 0 h h1, ale Takuzu to oryginalna nazwa układanki.
— clismique

@EriktheOutgolfer Zawsze znałem to jako „Binary Puzzle” lub „Subiku”, ale „Takuzu” jest tak, jak Qwerp-Derp wspomniał o oryginalnej nazwie.
— Kevin Cruijssen

2
Przydałoby się jeszcze kilka przypadków testowych (brakuje mi dużych, ważnych tablic.)
— Lynn

Odpowiedzi:


16

Brachylog , 20 18 bajtów

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

Wypróbuj online!

Wyjaśnienie

≠                           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

„ Dołącz listę wierszy do listy kolumn ” inteligentny sposób na golfa! I tutaj myślałem, że twoja 20-bajtowa odpowiedź była trafna i grała w golfa tak bardzo, jak tylko mogła. Widzę, że Brachylog sprawdza się zarówno w sprawdzaniu poprawności macierzy, jak i w ich rozwiązywaniu . :)
— Kevin Cruijssen

1
Czy nie powinno to falsew tym przypadku wynikać ?
— H.PWiz

1
@ H.PWiz Dobre znalezisko, dzięki. Przywrócono do działającej wersji 18-bajtowej.
— Fatalize

@LuisMendo Po prostu umieszczam wszystkie wiersze i wszystkie kolumny na tej samej liście.
— Fatalize

2
@Zgarb Prawidłowo, dzięki. To już trzeci raz, kiedy musiałem cofnąć edycję, rozpaczliwie potrzebuję lepszych przypadków testowych ...
— Fatalize

11

Łuska , 19 18 bajtów

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

Wypróbuj online!

1 bajt zapisany dzięki H.PWiz!

Główną ideą jest zastosowanie serii transformacji do danych wejściowych, które są tożsamościami dla prawidłowej płytki i sprawdzenie, czy końcowy wynik jest taki sam jak oryginalny sygnał wejściowy.

Wyjaśnienie

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
Trochę przetasowań w celu usunięcia)
— H.PWiz

@ H.PWiz to było prawie oczywiste, głupie mnie!
— Leo

7

Galaretka , 17 bajtów

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

Wypróbuj online!

-6 bajtów dzięki milom i Jonathanowi Allanowi .


1
Wierzę, że możesz to skrócić do 21 bajtów. TIO
— mile

@miles ... może nawet 19 bajtów ?
— Jonathan Allan

1
@JonathanAllan to 18 bajtów ... tak, zrobiłeś to µZ$⁺jeszcze raz: p ... i 17 bajtów, zmieniając trochę: D teraz pokonałem Brachylog hehe
— Erik the Outgolfer

@EriktheOutgolfer Już nie, to remis!
— Fatalize

@JonathanAllan Nice. Wierzę też, że po raz pierwszy dodany szybki / prefiks był przydatny.
— mile

5

Mathematica, 143 bajty

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


wkład

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


5

Python 2 , 127 bajtów

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`

Wypróbuj online!

Odczytuje listę n n -tuples jako wejście.

Mógłbym wyprowadzić kod wyjścia, pisząc 1/(…)zamiast, print…ale wydaje mi się, że jest obleśny. Czy powinienem?

Wyjaśnienie

njest wielkością planszy; bto lista kolumn (transpozycja a). Reszta to jedno długie porównanie:

  • [n/2]*n*2==map(sum,a+b) sprawdza regułę 2. Każdy wiersz i kolumna powinna sumować się do n / 2.
  • map(sum,a+b)>len(set(a)) ma zawsze wartość true (list> int).
  • len(set(a))==len(set(b))==n sprawdza zasadę 3.
  • n<'0, 0, 0' jest zawsze prawdziwe (int <str).
  • '0, 0, 0'not in`a+b`>'1, 1, 1'not in`a+b`sprawdza regułę 1. `a+b`to ciąg znaków reprezentujący wszystkie wiersze i kolumny; dla przykładowego wejścia w TIO jest to

    "[(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'W centrum zawsze jest to prawda, ponieważ ten ciąg jest gwarantowana na początek "[", który jest większy niż "1".


Jeśli chcesz wyprowadzać kod wyjściowy, możesz to zrobić [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, który jest o 2 bajty krótszy niż dzielenie i daje NameErrorprawdziwe dane wejściowe.
— ovs

3

Łuska , 27 25 bajtów

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

Dane wejściowe to lista list, a dane wyjściowe są 1dla Truei 0dlaFalse

Wypróbuj online!

Wyjaśnienie

                      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 bajtów

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

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

Wypróbuj online! Wyjścia 0 dla prawidłowego, 1 dla nieprawidłowego. Edycja: Zapisano 4 bajty dzięki @MartinEnder. Wyjaśnienie:

.+
$&,$&

Duplikuj każdy wiersz za pomocą ,separatorów.

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

Transponuj pierwszy duplikat.

.+
$&;$&

Powtórz ponownie, tym razem z ;separatorami.

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

Usuń wszystkie pasujące pary cyfr poprzedzające średnik.

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

Sprawdź, czy jakakolwiek kolumna lub wiersz nie spełnia żadnej z reguł; (.)\1\1sprawdza trzy identyczne cyfry z rzędu, \d,?;sprawdza niesparowaną cyfrę i (\D\d+\b).*\2sprawdza duplikat.


Jeśli celem (...).*jest tylko ostatni etap max(matches,1), możesz zapisać trzy bajty, używając 1zamiast tego w konfiguracji.
— Martin Ender

I .\b\d+\bmoże być \D\d+\b.
— Martin Ender

@MartinEnder Pierwotnie zastąpiłem nieprawidłowe dane wyjściowe bez danych wyjściowych i przetestowałem je na końcu ... W końcu dopracowałem je do pojedynczego testu na końcu i zdałem sobie sprawę, że mogę pominąć wiodące .*, z których wcześniej korzystałem, ale nie pomyślałem o użyciu konfiguracja ograniczająca wynik, dzięki!
— Neil

3

Pyth , 31 bajtów

Wielkie dzięki dla @Leaky Nun .

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

Sprawdź wszystkie przypadki testowe lub wypróbuj tutaj!


Pyth ,  48 46 44  42 bajtów

To jest początkowe rozwiązanie.

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

Sprawdź wszystkie przypadki testowe lub wypróbuj tutaj!

& {IQ & {I.TQ.Am & q / d \ 0 / d \ 1! + / D * 3 \ 0 / d * 3 \ 1sC, .T Pełny program z niejawnym wejściem.

 {IQ Czy dane wejściowe są niezmienne przy deduplikacji?
& {I.TQ A czy transpozycja też jest niezmienna?
                                        .TQ Transpozycja.
                                           Q Wejście.
                                     sC, Zip powyższe, [^, ^^] (i spłaszcz).
    I Czy spełniony jest następujący warunek?
          .Am Wszystkie elementy są zgodne z prawdą podczas mapowania na ^^.
              q / d \ 0 / d \ 1 Jest tyle zer, co 1.
             &! + / d * 3 \ 0 / d * 3 \ 1 I nie ma serii 3 równych elementów.

3

MATL , 27 bajtów

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

Dane wejściowe to macierz zawierająca 0i 1. Wyjście jest 0dla fałszu, 1dla prawdy.

Wypróbuj online! Lub zobacz przypadki testowe: 1 , 2 , 3 , 4 , 5 .

Wyjaśnienie

,       % 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 bajtów

-7 dzięki Giuseppe, wywoływanie niedziałających funkcji i naprawdę kompresowanie warunków

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

Wypróbuj online!

To po prostu stosuje reguły do ​​kolumn macierzy, a następnie do kolumn transpozycji macierzy.

Pobiera dane wejściowe w postaci:

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

Właśnie tak R przyjmuje tablice 2D.

Wyprowadza wartość PRAWDA w przypadku awarii, FALSE w przypadku podań.



Aktualizacje ogólne: stosowane mean(y)-.5w wewnętrznej ffunkcji, aby uzyskać środki zamiast colMeans, wykonane gAnonim. To spowoduje dodanie ostrzeżenia do przekształcania doublesię logicalw zaproszeniu do anyale to jest OK.
— Giuseppe,

@Giuseppe Thanks! Bardzo podoba mi się to połączone zastosowanie, bardzo sprytna zmiana! Miałem to jako 2 osobne zgłoszenia na wczesnym etapie i nie zdawałem sobie sprawy, jak czysto można je połączyć.
— CriminallyVulgar


2

Perl 6 ,100 93 bajty

Skrzyżowania FTW! Oszczędzają 7 bajtów.

Na razie wydaje się, że jest to lepsze niż wszystkie inne artykuły napisane w językach innych niż golf. Yippie!

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

Wypróbuj online!

Objaśnienie : Jest to blok, który bierze tablicę jako listę list. Dokonujemy transpozycji za pomocą [Z] @^a(zmniejsz listę list za pomocą operatora zip). Więc@^a,[Z] @^a jest lista planszy i jej transpozycja. Pętlimy nad nim, dzięki forczemu działa dokładnie tak mapsamo, będąc w tym przypadku o 1 znak tańszy.

Wewnątrz najpierw łączymy listy składające się z wierszy w ciągi, więc mamy listę ciągów zamiast listy list (@(.map(*.join)) ) . Następnie używamy anonimowego bloku na nim ( .&{...}), w którym faktycznie oceniamy reguły. Ocenimy je tylko pod kątem wierszy. (Ponieważ robimy to również dla oryginalnej tablicy i transpozycji.)

Aby zaoszczędzić sporo !, używamy trochę logiki i zamiast testować (NO repeated rows) AND (NO 3 consecutive same symbols) AND (NOT different counts of 0 and 1), testujemy NOT[ (repeated rows) OR (3 consecutive same symbols) OR (different counts) ]. To właśnie robimy w bloku anonimowym: .repeateddaje wszystkie wiersze, które występują więcej niż jeden raz, następnie mapujemy rzędy, próbujemy dopasować 3 kolejne symbole za pomocą wyrażenia regularnego i odejmujemy liczby zer i jedynek. Są OR'red z |. (W rzeczywistości tworzy bardzo potężną rzecz zwaną skrzyżowaniem , ale nie używamy żadnej z jej mocy :)) Po tym wszystkim otrzymujemy listę 2 „bool” (niezakończonych skrzyżowań). W końcu my lub oni (używając max) i negujemy ( !), co daje pożądany rezultat.


2

J, 40 38 55 bajtów

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

Wypróbuj online!

Definiuje funkcję przyjmującą macierz kwadratową jako dane wejściowe.

Przynajmniej bije Pytha (na razie ...) (błędnie). Muszę wrócić do liczenia emoji ukrytych w moim kodzie, ponieważ J również dobrze się do tego nadaje:

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

Wyjaśnienie (nieco nieaktualne)

Wygląda to inaczej niż moja odpowiedź i mogę ją zaktualizować. Części są nadal takie same - po prostu nie sprawdzałem reguły 3 i nie sprawdzałem wcześniej reguły 2.

Podzielony na kilka funkcji i bez golfa:

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

Join_trans

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

To łączy transpozycję macierzy do siebie, tworząc tablicę macierzy.

część_3

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

Sprawdza to sumę partycji z 3 rzędów, aby zobaczyć, czy jest to 3 lub 0 (ponieważ jedna z tych oznacza nieprawidłową tablicę), zwracając 1, jeśli jest, i 0 w przeciwnym razie. Działa zarówno na macierzy, jak i na jej transpozycji, ponieważ ma obie te funkcje.

fa

1 - 2 * ]

Z braku lepszego imienia nazywam to f. Zamienia cyfry 0 na _1 i pozostawia cyfry 1 bez zmian. Ma to pozwolić mi ostatecznie sprawdzić, czy liczba zer i jedynek jest równa w każdym wierszu i kolumnie (suma każdego wiersza powinna wynosić 0).

Główny

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

Zasadniczo wykorzystać fakt, że mam skonfigurować go tak, że f join_transi part_3 join_transoba powinny suma 0 wtw płyta jest ważna. part_3powinny zawierać wszystkie zera dla prawidłowej planszy, a całość fpowinna sumować się do zera dla prawidłowej planszy, co oznacza, że ​​suma ich sum wynosi 0 tylko dla prawidłowej planszy.


Przynajmniej bije Pytha (na razie ...). - Naprawdę muszę
— pograć w

@ Mr.Xcoder haha ​​tak, zawsze wydaje się, że się przeciągasz, dlatego dodałem bit „na razie”. Nie, że moja odpowiedź nie ma miejsca na grę w golfa - po prostu nie wiem, jak to zrobić zbyt dobrze.
— cole


1
Ten kod dla 33 bajtów powinien być równoważny z twoim*/@,@,&(~:,(0~:3|3+/\]),#=2*+/)|:
— milami

2

Haskell , 137 136 127 bajtów

9 bajtów zapisanych dzięki Lynn!

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)

Wypróbuj online!


Rzuć oba alls w jedno 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]
— Lynn

@Lynn Thanks! Przez jakiś czas próbowałem zrolować te dwa. Nie wiem, dlaczego nie mogłem tego rozgryźć.
— Wheat Wizard

1
Czy możesz zmienić j=isSubSequenceOfna j x=isSubSequenceOf[x,x,x]?
— Cyoce,

@Cyoce Wydaje się, że straciłem bajt. Jeśli masz sposób na zrobienie tego, co oszczędza mi bajt, chętnie go wdrożę. Pomysł wydaje się dobry.
— Wheat Wizard

Na telefonie komórkowym, hmmm ... Może zamiast j a bwywoływać (i definiować) jako a#b?
— Cyoce,

2

Java 8, 350 326 325 312 303 299 298 259 255 bajtów

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

Zwroty 0 gdy jest to ważna tablica; 1jeśli jest nieważny dla jednej lub więcej z trzech zasad.

-95 bajtów dzięki @Nevay .

Wyjaśnienie:

Wypróbuj tutaj.

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 bajtów

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

Wypróbuj online!

Wyjaśnienie

Reguła: 3

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

Reguła: 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

Zasada nr 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

Następnie bierzemy iloczyn wyniku wszystkich 3 reguł z P


1

Dyalog APL, 64 52 51 49 48 bajtów

Wymaga ⎕IO←0

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

Wypróbuj online!


1

PHP, 245 + 1 bajtów

ew to jest nieporęczne. podziały wierszy służą wyłącznie do czytania:

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

Zajmuje pojedynczy ciąg bez znaków nowej linii, drukuje 1 dla prawdy, nic dla fałszu.

Uruchom jako potok z -nRlub spróbuj online .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.