モンドリアンパズルシーケンス


11

n X n正方形を複数の一致しない整数側の長方形に分割します。a(n)は、最大面積と最小面積の最小差です。

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

最大の長方形(L)の面積は2 * 4 = 8で、最小の長方形(S)の面積は1 * 3 = 3です。したがって、違いは8 - 3 = 5です。

整数を指定すると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)=2a(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<

オンラインでお試しください。しかし、非常に遅いので、6を超えることはお勧めしません。

実際に作業を行っていることを確認するために、考えられるすべてのパーティションを印刷するわずかに変更されたこのプログラムをチェックできます(各パーティションは、長方形の寸法ペアの配列として表示されます)。


うわー、実行する時間が急に上がります。
mbomb007

@ mbomb007はい、ブルートっぽい解決策として非常に期待されています。実際には、より効率的にするために最適化の束を含めました。それらを削除すると、かなり小さくすることができます(そして、遅くて空腹になります)。
SEがEVILであるため、aditsuは終了します

6

Befunge、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の「ビジュアルデバッガー」のいずれかで実行することです。そうすれば、さまざまな長方形のサイズを使用可能なスペースに収めようとするのを見ることができます。あなたが「早送り」、それは良い試合を持ってポイントにしたい場合は、上のブレークポイントを置くことができる4シーケンスの$_40p(ゼロベースの場合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
あなたはファンファンの神です。
Rɪᴋᴇʀ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.