Сколько здесь квадратов?


12

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

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

Квадрат состоит из n x mквадрата 1x1, вы должны посчитать, сколько подквадрат (1x1, 2x2, 3x3, 4x4, 5x5 и т. Д.) Может поместиться в этом квадрате. В квадратах могут отсутствовать некоторые линии сетки (как в примере выше) или быть завершенными, как в примере ниже. Это означает математическая Разбивка не возможно (насколько я знаю).

Входы:

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

Выход:

  • Количество квадратов любого размера, которое может вписаться во входной квадрат (здесь мы хотим только одно число, а не число для каждого размера).

Критерий победы:

Наименьший ответ (количество байтов) выигрывает.

Тестовые случаи:

В:

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

Out: 30


В:

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

Out: 5


В:

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

Out: 7


В:

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

Out: 32


В:

2
┌─┐
└─┘

Out: 1


В:

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

Out: 22


3
Я не считал более крупные, но разве у третьего нет 11 квадратов?
Value Ink

@ KevinLau-notKenny Ты прав, я ошибся.
Саймон Лэндри

Я думаю, что это слишком просто, это подсчитывается с помощью комбинаторной формы, вы бы предпочли рассмотреть формат изображения Facebook?
Abr001am

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/ в последний раз, надеюсь, спасибо 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>



@Conor Хорошо, спасибо за ссылку
edc65
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.