Kaç tane kare var?


12

Bu zorluk genellikle gibi Facebook'ta olduğu görünüyor dolaşan bir resim esinlenerek bu . Bizim kare hariç daha böyle görünecek:

┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘

Kare n x m1x1 kareden oluşur, bu kareye kaç alt karenin (1x1, 2x2, 3x3, 4x4, 5x5 vb.) Sığabileceğini saymanız gerekir. Karelerde bazı ızgara çizgileri eksik olabilir (yukarıdaki örnekte olduğu gibi) veya aşağıdaki örnekte olduğu gibi tam olabilir. Yani matematiksel bir bozulma mümkün değil (bildiğim kadarıyla).

girişler:

  • nKareyi oluşturmak için girdi satırlarının ( ) miktarı ;
  • Aşağıdaki karakterlerden oluşan bir kare: giriş satırları |boyunca n.

Çıktı:

  • Giriş karesine sığabilecek herhangi bir boyuttaki karelerin miktarı (burada her boyut için bir sayı değil, sadece tek bir sayı istiyoruz).

Kazanan kriter:

En küçük cevap (bayt sayısı) kazanır.

Test Durumları:

İçinde:

5
┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘

Çıkan: 30


İçinde:

3
┌─┬─┐
├─┼─┤
└─┴─┘

Çıkan: 5


İçinde:

5
┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘

Çıkan: 7


İçinde:

4
┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘

Çıkan: 32


İçinde:

2
┌─┐
└─┘

Çıkan: 1


İçinde:

4
┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘

Çıkan: 22


3
Büyük olanları saymadım, ama üçüncüsünde 11 kare yok mu?
Değer Mürekkebi

@ KevinLau-notKenny Haklısın Bir hata yaptım.
Simon Landry

Bence çok basit, birleştirici bir formla sayılıyor, facebook'un resim formatını düşünmeyi tercih eder misiniz?
Abr001am

1
Referans için, dikdörtgen kasa A271916'dır , bu m*(m+1)*(3*n-m+1)/6bir mile bir ndikdörtgen verir n >= m(girişler karelerin kendisinden ziyade noktalardan bahsettiğinden boyutlar bir tarafından kaydırılır)
Sp3000

1
@SimonLandry saf anlamda kombinatorik demek istemedim, sanırım sp3000, bulmacanızın ilk versiyonunun (düzenlemeden önce) basit bir matematiksel atılım için açık olduğunu belirtti
Abr001am

Yanıtlar:


2

JavaScript (ES6), 292 bayt 306 325

Düzenleme Bayt sayısı tamamen yanlış yaptım, şimdi düzeltildi thx http://bytesizematters.com/ son kez doğru umarım thx Cᴏɴᴏʀ O'Bʀɪᴇɴ https://goo.gl/LSHC1U (ve bir literal kullanarak 1 bayt daha az umuyoruz) yeni satır '\ n' sorguluyor)

(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n|=i<s&(!(r(t+y)&r(t+y+s*o)&1)|!(r(x+u)&r(x+u+s*2)&2))|i>0&(!(r(t+y)&r(t+y+s*o)&4)|!(r(x+u)&r(x+u+s*2)&8))})(-~z.search`
`)|q

Beklediğimden daha uzun (muhtemelen birkaç bayt daha tıraş edilebilir)

Tüm olası kareler kontrol edilir ve sayılır.

rFonksiyon sahip bir bitmap'e her karakter haritası

  • 1: yatay çizgi merkezden sağa
  • 2: dikey çizgi merkezden alta
  • 4: yatay çizgi merkezden sola
  • 8: dikey çizgi merkezden üste

Herhangi bir boyutta bir kare olmalıdır

  • Üst ve alt sıradaki ilk hücrenin dışındaki tüm hücrelerde 4 adet
  • Üst ve alt sıradaki son hariç tüm hücrelerde 1
  • En soldaki ve en sağdaki ilk sütun dışındaki tüm hücrelerde 8
  • En soldaki ve en sağdaki sütunda son hariç tüm hücrelerde 2 adet

Ölçek

f=(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);k=(p,d,m)=>r(p)&r(p+s*d)&m;for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n=n|i<s&(!k(t+y,o,1)|!k(x+u,2,2))|i>0&(!k(t+y,o,4)|!k(x+u,2,8));})(-~z.search`
`)|q

console.log=(...x)=>O.textContent+=x+'\n'

// Less golfed

Uf=(h,z)=>{
  o=-~z.search`\n`;
  w=o/2;
  r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);
  k=(p,d,m)=>r(p)&r(p+s*d)&m;
  for(q=s=0;++s<w&s<h;)
    for(y=0;y<(h-s)*o;y+=o)
      for(x=0;x<(w-s)*2;q+=!n,x+=2)
        for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)
          n|=i<s&(!k(t+y,o,1)|!k(x+u,2,2))
          |i>0&(!k(t+y,o,4)|!k(x+u,2,8));
  return q
}

;[[5,`┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘`,20]
,[5,`┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,30]
,[3,`┌─┬─┐
├─┼─┤
└─┴─┘`,5]
,[5,`┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘`,7]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘`,32]
,[2,`┌─┐
└─┘`,1]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘`,22],
,[6,`┌─┬─────┐
├─┼─┬─┐ 
 ├─┼─┼─┤
 └─┼─┼─┤
   └─┼─┤
└─────┴─┘`,12],  
,[6,`┌─┬─┬─┬─┐
├─┴─┼─┼─┤
   └─┼─┤
├─┬─┬─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,23]]  
.forEach(t=>{
  var r=t[0],a=t[1],k=t[2],x=f(r,a)
  console.log(x==k?'OK '+x:'KO '+x+' Expected '+k,'\n'+a)
})
<pre id=O></pre>


307 bayt sayıyorum .
Conor O'Brien

@Conor Tamam bağlantı için teşekkürler
edc65
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.