몬드리안 퍼즐 시퀀스


11

n X n정사각형을 일치하지 않는 정수면 사각형으로 분할하십시오 . a(n)가장 큰 영역과 가장 작은 영역의 차이가 가장 적습니다.

 ___________
| |S|_______|
| | |   L   |
| |_|_______|
| |     |   |
| |_____|___|
|_|_________| (fig. I)

가장 큰 사각형 ( L)의 면적은 2 * 4 = 8이고 가장 작은 사각형 ( S)의 면적은 1 * 3 = 3입니다. 따라서 차이점은 8 - 3 = 5입니다.

integer가 주어지면 n>2가능한 가장 작은 차이를 출력하십시오.

게시시 시퀀스의 모든 알려진 값 :

2, 4, 4, 5, 5, 6, 6, 8, 6, 7, 8, 6, 8, 8, 8, 8, 8, 9, 9, 9, 8, 9, 10, 9, 10, 9, 9, 11, 11, 10, 12, 12, 11, 12, 11, 10, 11, 12, 13, 12, 12, 12

그래서 a(3)=2, a(4)=4...

OEIS A276523

관련 -이 관련 과제는 비 최적 솔루션을 허용하고 시간 제약이 있으며 코드 골프가 아닙니다.

자세한 내용 은 Numberphile의이 비디오를보십시오.

답변:


4

CJam, 178

ri_1a*a*L{_:+1&{_[3{_\zW%}*]{_z}%:e<_@={:A0=_1#:X0<{;A1>j}{X>0+0#AzX=0+0#,\,m*1ff+{[_$\~1a*0aX*\+a*A\..-_])s'-&{;}&}%{~j\:X;{Xa&!},Xaf+:$~}%_&}?}{j}?}{;La}?}j{,(},{::*$)\0=-}%:e<

온라인으로 사용해보십시오 . 그것은 veeery 느리다, 나는 6을 넘지 않는 것을 권장하지 않을 것이다.

그것이 실제로 작업하고 있는지 확인하기 위해 가능한 모든 파티션을 인쇄하는 약간 수정 된이 프로그램 을 확인할 수 있습니다 (각 파티션은 사각형 차원 쌍의 배열로 표시됩니다).


와, 달리는 시간이 가파르게 올라갑니다.
mbomb007

@ mbomb007 예, 무차별 한 해결책이 기대됩니다. 실제로 더 효율적으로 만들기 위해 많은 최적화를 포함 시켰습니다. 그것들을 제거하면 상당히 작게 만들 수 있습니다 (더 느리고 배고프다).
SE가 EVIL이기 때문에 Aditsu 종료

6

펀드, 708 바이트

p&>:10p1-:>20p10g:20g\`v`\g02:-1\p00+1g<>g-#v_10g:*30p"~":40p50p060p070p$>^
1#+\#1<\1_^# !`0::-1$  _:00g3p\:00g2p00^^00:>#:


>>:2-#v_$30p50p60p70g1-70p
^<<<<<:#<<<<<<$$$_v#:!g87g78g79$  _v#!\-1:g88$<_ 98p87g97g*00 v:+!\`*84g++7<
^>$1-:77p1g:2g\3g1>78p97p87p10g97g->88p10g87g-0^!\-1:g89_v#-!\_$1-:v>/88g+7^
^|!-3$<   >\87g/88g+77++p:#v_$
^>:5->v   ^+g89%g78:\g77:-1<>98g88g48*577g387g97g98g88v ^>77g87g97v:^g78\+g<
^ v-4:_$77p88p98p:97p\:87p*^^g79g7>#8\#$_40pv5+"A"g77g< ^14g88g89g<>:87g%98^
^v_$88p98p97p87p:77p60g50g-:40g\`#^_$$>>>>>>>
 >#4!_::80p2g\3g*:90p30g`!v>>>#@>#.>#g^#0
^v:g06p03:-g09\2:g03g05g06_^^_7#<0#<g#<3#<1#<<`g04_$00g1->:#-8#10#\g#1`#:_>$
^>90g\-:0`*+:60p50g:90g-:0`*-:50p-80g70g:1+70p1p\!^

온라인으로 사용해보십시오!

이것은 분명히 규모의 상을 수상하지는 않지만 밀교 언어로 기본 브루스 포스 구현이라고 생각하면 실제로 상당히 빠릅니다. Befunge 참조 인터프리터에서는 몇 초 안에 최대 n = 6을 처리 할 수 ​​있습니다. 컴파일러를 사용하면 느려지기 전에 최대 n = 8까지 처리 할 수 ​​있습니다. n = 9는 몇 분이 걸리고 n = 10은 2 시간에 가깝습니다.

이론적으로 메모리가 부족하기 전에 상한은 n = 11입니다 (즉, 더 큰 사각형에 맞도록 경기장에 충분한 공간이 남아 있지 않습니다). 그러나이 시점에서 최적의 솔루션을 계산하는 데 걸리는 시간은 컴파일 된 경우에도 누군가가 기꺼이 기다릴 수있는 시간보다 길어질 수 있습니다.

알고리즘의 작동 방식을 확인하는 가장 좋은 방법은 Befunge "시각 디버거"중 하나에서 알고리즘을 실행하는 것입니다. 이렇게하면 다양한 사각형 크기를 사용 가능한 공간에 맞추려고 할 때 볼 수 있습니다. 일치하는 지점으로 "빨리 감기"하려는 경우 10 번째 줄의 중간 근처에 4시퀀스 에 중단 점을 둘 수 있습니다 $_40p(0부터 시작하는 경우 9). 해당 지점의 스택 맨 위에있는 값은 현재 영역 차이입니다.

다음은 n = 5에 대한이 프로세스의 처음 몇 프레임을 보여주는 애니메이션입니다.

사각형 피팅 과정을 보여주는 애니메이션

각각의 별개의 직사각형은 알파벳의 다른 문자로 표시됩니다. 그러나 마지막 사각형은 절대로 쓰여지지 않으므로 사각형의 섹션은 비어 있습니다.

또한 새로운 일치 항목을 찾을 때마다 현재 레이아웃을 출력하는 코드의 디버그 버전을 작성 했습니다 (온라인으로 시도하십시오! ). 더 작은 크기의 경우 첫 번째 일치가 종종 최적의 솔루션이지만 n = 6을 초과하면 최종 솔루션에 정착하기 전에 여러 가지 유효하지만 최적이 아닌 레이아웃이 표시 될 수 있습니다.

n = 10에 가장 적합한 레이아웃은 다음과 같습니다.

H F F F A A A C C I
H F F F A A A C C I
H J G G A A A C C I
H J G G A A A C C I
H J D D D D D C C I
H J D D D D D C C I
H J K K K K K K K I
H J B B B E E E E I
H J B B B E E E E I
H J B B B L L L L L

12 - 4 = 8

1
당신은 befunge-rs의 신입니다.
Rɪᴋᴇʀ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.