有多少个正方形?


12

这种挑战是由经常漫游在Facebook上一样,看起来画面灵感。除了我们的基本广场看起来像这样:

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

该正方形由n x m1x1正方形组成,您必须计算该正方形内可以容纳多少个子正方形(1x1、2x2、3x3、4x4、5x5等)。正方形可能会丢失一些网格线(例如上例),也可能像下面的例子中那样完整。这意味着数学分析是没有可能(据我所知)。

输入:

  • n建立正方形的输入的线数();
  • 由以下字符组成的正方形: |n输入行。

输出:

  • 可以容纳在输入正方形内的任何大小的正方形数量(我们在这里只需要一个数字,而每个大小都不需要一个数字)。

获奖标准:

最小的答案(字节数)获胜。

测试用例:

在:

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

出: 30


在:

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

出: 5


在:

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

出: 7


在:

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

出: 32


在:

2
┌─┐
└─┘

出: 1


在:

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

出: 22


3
我没有算大一点,但是第三个没有11个正方形吗?
价值墨水

@ KevinLau-notKenny你是对的,我弄错了。
西蒙·兰德里

我认为这太简单了,它是通过组合形式计算的,您宁愿考虑使用facebook的图片格式吗?
2016年

1
作为参考,矩形的情况是A271916,它给出m*(m+1)*(3*n-m+1)/6了一个带有mn矩形n >= m(由于条目说点而不是正方形本身,所以尺寸偏移了一个)
Sp3000

1
@SimonLandry我在纯SENS didnt平均组合学,我觉得SP3000只是指出这一点已经,您的难题的第一个版本(前编辑)开放供一个简单的数学突破
Abr001am

Answers:


2

JavaScript(ES6),292个字节306325

编辑我的字节数完全错误,现在更正了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 Ok,谢谢您的链接
edc65 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.