正方形はいくつありますか?


12

この課題は、のように見えることが多いFacebook上でローミングする絵に触発され、この。ベーススクエアが次のようになることを除きます。

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

正方形はn x m1x1の正方形で構成されているため、その正方形に収まるサブ正方形(1x1、2x2、3x3、4x4、5x5など)の数を数える必要があります。正方形には、いくつかのグリッド線が欠落している場合があります(上記の例のように)か、下の例のように完全になります。これは数学的な故障があることを意味しません(私の知る限り)可能。

入力:

  • n正方形を構築するための入力の行数()。
  • :次の文字から作られた正方形の |間でnの入力のライン。

出力:

  • 入力正方形に収まる任意のサイズの正方形の量(ここでは、各サイズの数値ではなく、1つの数値のみが必要です)。

受賞基準:

最小の回答(バイト数)が優先されます。

テストケース:

に:

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

アウト: 30


に:

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

アウト: 5


に:

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

アウト: 7


に:

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

アウト: 32


に:

2
┌─┐
└─┘

アウト: 1


に:

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

アウト: 22


3
大きなものは数えませんでしたが、3番目のものには11個の正方形がありませんか?
バリューインク

@ 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/最後に修正します thxCᴏɴᴏʀ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>



@コナーOKリンクへの感謝
-edc65
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.