Söylesene, kaç tane kare var?


12

Boşluk olmayan bir 2B diziden oluşan 0ve 14 köşesi olan karelerin sayısını bulun 1. Karelerin "dik" olması gerekmez. Tüm satırların aynı uzunlukta olması garanti edilir.

Makul giriş / çıkış yöntemlerine izin verilir.

testcases:

0001000
1000000
0000000
0000100
0100000

Bu geri döner 1.

10101
00000
10100
00000
10001

Bu geri döner 2.

1111
1111
1111
1111

Bu geri döner 20.

Bu . Bayt cinsinden en kısa cevap kazanır. Standart boşluklar geçerlidir.


Başka bir yorum, niyetini anlıyorsam: 1her 1biri iki komşusundan çevre boyunca eşit uzaklıkta olacak şekilde bir karede 4 s .
feersum

@feersum İkinci koşul her kare için geçerlidir, değil mi?
Wojowu

Yanıtlar:


18

JavaScript (ES6), 127 124 119 bayt

Nderscore sayesinde 3 bayt kaydedildi

m=>(F=(x,y)=>m.map((r,Y)=>r.map((i,X)=>i?1/y?n+=x<X&y<=Y&(g=(a,b)=>(m[b+X-x]||0)[a-Y+y])(x,y)&g(X,Y):F(X,Y):0)))(n=0)|n

Nasıl?

Bu işlev , giriş matrisinin m tüm hücre çiftlerinde (x, y) , (X, Y) yinelenir :

  • m [x, y] = m [X, Y] = 1
  • x <X
  • y ≤ Y

Her eşleşen çift, bir karenin potansiyel kenarının koordinatlarını açıklar. Eşitsizlikler, her bir kenarın sadece bir kez test edilmesini garanti eder.

[X - dy, y + dx] ve [X - dy, Y + dx] 'de bulunan hücreleri test etmek için saat yönünde 90 ° döndürülmüş [dx, dy] = [X - x, Y - y] vektörünü kullanıyoruz . İkisi de 1 içeriyorsa , geçerli bir kare bulduk.

Meydan

Test senaryoları


-2 bayt: g=(a,b)=>(m[b+X-x]||0)[a-Y+y]-1 bayt:|n&&n
nderscore

6

MATL , 20 bayt

&fJ*+4XN!"@&-|un3=vs

Giriş bir matristir.

Çevrimiçi deneyin!

Nasıl çalışır

Bu, giriş ızgarasındaki sıfır olmayan girişlerin tüm koordinatlarını bulur ve bunları satır ve sütun indekslerinin sırasıyla gerçek ve hayali bölümlere karşılık geleceği şekilde karmaşık sayılar olarak temsil eder.

Kod daha sonra bir kerede 4 alınan bu sayıların tüm kombinasyonlarından (sıralaması önemli değil) bir dizi oluşturur. Her kombinasyon bir aday kareyi temsil eder. Her bir kombinasyon için, çift bilge mutlak farkların 4x4 matrisi (yani karmaşık düzlemdeki mesafeler) hesaplanır. Bu, ana diyagonal boyunca sıfırlarla simetrik bir matristir. Geçerli kombinasyon, yalnızca ve eğer matris tam olarak 3 farklı değer içeriyorsa (bunlar kare taraf, kare köşegen ve sıfır olacaksa) bir kare oluşturur:

resim açıklamasını buraya girin

Öte yandan, örneğin, kare olmayan bir dikdörtgen 4 ayrı değere (iki taraf, bir diyagonal değer ve sıfır) neden olur;

resim açıklamasını buraya girin

ve genel bir dörtgen 7 değere kadar olabilir (dört taraf, iki köşegen ve sıfır):

resim açıklamasını buraya girin

&f      % Input (implicit). Push vectors of row and column indices of nonzero entries
J*      % Multiply by imaginary unit
+       % Add the two vectors. Gives a vector of complex coordinates
4XN     % Matrix of combinations of these complex numbers, taken 4 at a time. Each
        % row is a combination
!       % Transpose
"       % For each column
  @     %   Push current column: candidate set of four points
  &-    %   All pair-wise differences
  |     %   Absolute value
  u     %   Unique entries
  n3=   %   Does the number of elements equal 3? Gives true (1) or false (0)
  vs    %   Concatenate vertically with previous accumulated result, and sum
        % End (implicit). Display (implicit)

O nasıl çalışır?
Sızdıran Rahibe

@LeakyNun Açıklama eklendi
Luis Mendo
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.