몇 개의 사각형이 있습니까?


12

이 문제는 종종처럼 페이스 북에서 그 모습을 배회 그림에서 영감을 . 기본 사각형을 제외하면 다음과 같이 보일 것입니다.

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

정사각형은 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 당신이 맞아 내가 실수를했다
Simon Landry

나는 너무 간단하다고 생각합니다. 조합 형식으로 계산됩니다. 페이스 북의 그림 형식을 고려하고 싶습니까?
Abr001am

1
참고로, 직사각형 인 경우 A271916 부여 m*(m+1)*(3*n-m+1)/6위한 m의해 n으로 구형 n >= m(엔트리 포인트보다는 정사각형 자체 말한다 이후 측정 한 오프셋)
SP3000

1
@SimonLandry 나는 순수한 감각의 조합론을 의미하지 않았다. sp3000은 이미 퍼즐의 첫 번째 버전 (편집 전)이 간단한 수학적 혁신을 위해 열려 있다고 지적했다
Abr001am

답변:


2

자바 스크립트 (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>



@Conor Ok 링크에 감사드립니다
edc65
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.