Mondrian Puzzle-Sequenz

11

Partitionieren Sie ein n X nQuadrat in mehrere nicht kongruente ganzzahlige Rechtecke. a(n)ist der kleinstmögliche Unterschied zwischen der größten und der kleinsten Fläche.

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

Das größte Rechteck ( L) hat eine Fläche von 2 * 4 = 8und das kleinste Rechteck ( S) hat eine Fläche von 1 * 3 = 3. Daher ist der Unterschied 8 - 3 = 5.

Geben Sie bei einer gegebenen Ganzzahl n>2die kleinstmögliche Differenz aus.

Alle bekannten Werte der Sequenz zum Zeitpunkt der Veröffentlichung:

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

Also a(3)=2, a(4)=4...

OEIS A276523

Verwandte - Diese verwandte Herausforderung ermöglicht nicht optimale Lösungen, hat zeitliche Einschränkungen und ist kein Code-Golf.

Weitere Informationen finden Sie in diesem Video von Numberphile

mbomb007
quelle

Antworten:

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<

Probieren Sie es online aus . Es ist sehr langsam, ich würde nicht empfehlen, über 6 zu gehen.

Um zu überprüfen, ob es wirklich funktioniert, können Sie dieses leicht modifizierte Programm überprüfen , das alle möglichen Partitionen druckt (jede Partition wird als Array von Rechteck-Dimensionspaaren angezeigt).

Aditsu beenden, weil SE böse ist
quelle
Wow, die Zeit zum Laufen steigt steil an.
mbomb007
@ mbomb007 ja, für eine brutale lösung durchaus zu erwarten. Ich habe tatsächlich eine Reihe von Optimierungen hinzugefügt, um es effizienter zu machen. Wenn ich sie entferne, könnte ich sie etwas kleiner machen (und langsamer und hungriger).
Aditsu beendet, weil SE am
6

Befunge, 708 Bytes

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\!^

Probieren Sie es online aus!

Dies wird natürlich keine Preise für Größe gewinnen, aber es ist tatsächlich ziemlich schnell, wenn man bedenkt, dass es sich um eine grundlegende Implementierung von Bruce Force in einer esoterischen Sprache handelt. Auf dem Befunge-Referenzinterpreter kann er in wenigen Sekunden bis zu n = 6 verarbeiten. Mit einem Compiler kann er bis zu n = 8 verarbeiten, bevor er träge wird. n = 9 dauert ein paar Minuten und n = 10 ist knapp 2 Stunden.

Theoretisch ist die Obergrenze n = 11, bevor uns der Speicher ausgeht (dh es ist nicht mehr genügend Platz auf dem Spielfeld vorhanden, um auf ein größeres Quadrat zu passen). Zu diesem Zeitpunkt ist die Zeit, die zur Berechnung der optimalen Lösung benötigt wird, wahrscheinlich länger, als irgendjemand bereit wäre zu warten, selbst wenn er kompiliert wurde.

Der beste Weg, um zu sehen, wie der Algorithmus funktioniert, besteht darin, ihn in einem der Befunge "Visual Debugger" auszuführen. Auf diese Weise können Sie beobachten, wie versucht wird, die verschiedenen Rechteckgrößen in den verfügbaren Platz einzupassen. Wenn Sie bis zu dem Punkt "schnell vorspulen" möchten, an dem eine gute Übereinstimmung vorliegt, können Sie einen Haltepunkt 4in der Sequenz $_40pnahe der Mitte der zehnten Zeile setzen (9, wenn nullbasiert). Der Wert am oberen Rand des Stapels an diesem Punkt ist die aktuelle Flächendifferenz.

Unten sehen Sie eine Animation, die die ersten Frames dieses Prozesses für n = 5 zeigt:

Animation, die den Rechteckanpassungsprozess zeigt

Jedes einzelne Rechteck wird durch einen anderen Buchstaben des Alphabets dargestellt. Beachten Sie jedoch, dass das endgültige Rechteck niemals ausgeschrieben wird, sodass der Abschnitt des Quadrats nur leer ist.

Ich habe auch eine Debug-Version des Codes geschrieben, die jedes Mal das aktuelle Layout ausgibt, wenn eine neue beste Übereinstimmung gefunden wird ( Online testen! ). Für die kleineren Größen ist die erste Übereinstimmung oft die optimale Lösung, aber sobald Sie n = 6 überschritten haben, werden Sie wahrscheinlich mehrere gültige, aber nicht optimale Layouts sehen, bevor Sie sich für die endgültige Lösung entscheiden.

Das beste Layout für n = 10 sieht folgendermaßen aus:

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
James Holderness
quelle
1
Du bist ein Gott unter den Betroffenen.
Rɪᴋᴇʀ