Скільки там квадратів?


12

Це завдання натхненна картиною , яка часто пересувається на Facebook , який виглядає , як це . За винятком того, що наш базовий квадрат буде виглядати приблизно так:

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

Квадрат складається з n x m1х1 квадрата, ви повинні порахувати, скільки підквадратів (1x1, 2x2, 3x3, 4x4, 5x5 тощо) може вміститися в межах цього квадрата. У квадратах можуть бути відсутні деякі лінії сітки (як у прикладі вище) або бути повними, як у наведеному нижче прикладі. Це означає математична Розбивка НЕ можливо (наскільки я знаю).

Вхідні дані:

  • Кількість рядків ( n) введення для побудови квадрата;
  • Квадрат з наступних символів: |через nрядки введення.

Вихід:

  • Кількість квадратів будь-якого розміру, які можуть вміститися у вхідному квадраті (ми хочемо тут лише одне число, а не число для кожного розміру).

Критерій виграшу:

Найменша відповідь (кількість байтів) виграє.

Випробування:

В:

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

Вихід: 30


В:

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

Вихід: 5


В:

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

Вихід: 7


В:

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

Вихід: 32


В:

2
┌─┐
└─┘

Вихід: 1


В:

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

Вихід: 22


3
Я не рахував більших, але хіба в третьому немає 11 квадратів?
Значення чорнила

@ KevinLau-notKenny Ти маєш рацію, я помилився.
Саймон Лендрі

Я думаю, що це занадто просто, це рахується через комбінаторну форму, ви б краще вважали формат зображення у facebook?
15001

1
Для довідки, прямокутний корпус є A271916 , що дає m*(m+1)*(3*n-m+1)/6для з mдопомогою nпрямокутника з n >= m(розміри зсуву по одному , так як запис говорить про точках , а не самих квадратів)
Sp3000

1
@SimonLandry Я не мав на увазі комбінаторику в чистому сенсі, я думаю, що sp3000 тільки що зазначив, що перша версія вашої головоломки (до редагування) була відкрита для простого математичного прориву
Abr001am

Відповіді:


2

JavaScript (ES6), 292 байти 306 325

Редагувати Я зробив кількість байтів абсолютно неправильно, виправлено зараз thx http://bytesizematters.com/ виправляю востаннє, сподіваюсь, що thx Cᴏɴᴏʀ O'Bʀɪᴇɴ див. Https://goo.gl/LSHC1U (і на 1 байт менше, використовуючи літерал новий рядок '\ n')

(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

Довше, ніж я очікував (напевно, може бути поголений ще кілька байт)

Усі можливі квадрати перевіряються та підраховуються.

rФункція відображення кожного символу в растрове зображення , що має

  • 1: горизонтальна лінія по центру праворуч
  • 2: вертикальна лінія по центру донизу
  • 4: горизонтальна лінія по центру зліва
  • 8: вертикальна лінія по центру до верху

Квадрат будь-якого розміру повинен мати

  • 4 у всіх комірках, крім першої у верхньому та нижньому рядках
  • 1 у всіх клітинках, окрім останнього у верхньому та нижньому рядках
  • 8 у всіх комірках, окрім першої в крайньому лівому та правому колонці
  • 2 у всіх комірках, окрім останньої в крайньому лівому та правому колонці

Тест

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 байт .
Conor O'Brien

@Conor Ok дякую за посилання
edc65
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.