Mondrian Puzzle Sequence


11

Partisi n X npersegi menjadi beberapa persegi panjang bilangan bulat non-kongruen. a(n)adalah perbedaan paling tidak mungkin antara area terbesar dan terkecil.

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

Kotak terbesar ( L) memiliki luas 2 * 4 = 8, dan kotak terkecil ( S) memiliki luas 1 * 3 = 3. Karena itu, perbedaannya adalah8 - 3 = 5 .

Diberi bilangan bulat n>2 , menghasilkan perbedaan sekecil mungkin.

Semua nilai urutan yang diketahui pada saat posting:

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

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

OEIS A276523

Terkait - tantangan terkait ini memungkinkan solusi yang tidak optimal, memiliki kendala waktu, dan bukan kode-golf.

Untuk informasi lebih lanjut, tonton video ini dengan Numberphile

Jawaban:


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<

Cobalah online . Ini sangat lambat meskipun, saya tidak akan merekomendasikan pergi di atas 6.

Untuk memverifikasi bahwa itu benar-benar berfungsi, Anda dapat memeriksa program yang sedikit dimodifikasi ini yang mencetak semua partisi yang mungkin (setiap partisi ditampilkan sebagai array pasangan dimensi persegi panjang).


Wow, waktu untuk berlari naik tajam.
mbomb007

@ mbomb007 ya, cukup diharapkan untuk solusi brute-ish. Saya sebenarnya memasukkan banyak optimasi untuk membuatnya lebih efisien. Jika saya menghapusnya, saya bisa membuatnya sedikit lebih kecil (dan lebih lambat dan lebih lapar).
Aditsu berhenti karena SE adalah JAHAT

6

Befunge, 708 byte

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

Cobalah online!

Ini jelas tidak akan memenangkan penghargaan untuk ukuran, tetapi sebenarnya cukup cepat mengingat ini adalah implementasi kekuatan bruce dasar dalam bahasa esoterik. Pada juru bahasa referensi Befunge dapat menangani hingga n = 6 dalam beberapa detik. Dengan kompiler, ia dapat menangani hingga n = 8 sebelum mulai lamban; n = 9 membutuhkan beberapa menit dan n = 10 tutup pada 2 jam.

Secara teori, batas atas adalah n = 11 sebelum kita kehabisan memori (yaitu tidak ada ruang yang cukup di playfield agar sesuai dengan kotak yang lebih besar). Namun, pada saat itu, waktu yang dibutuhkan untuk menghitung solusi optimal mungkin lebih lama daripada siapa pun yang mau menunggu, bahkan ketika dikompilasi.

Cara terbaik untuk melihat bagaimana algoritma bekerja adalah dengan menjalankannya di salah satu "pengalih perhatian" Befunge. Dengan begitu Anda dapat menonton karena berupaya menyesuaikan berbagai ukuran persegi panjang ke ruang yang tersedia. Jika Anda ingin "memajukan" ke titik di mana ia memiliki kecocokan yang baik, Anda dapat menempatkan breakpoint di 4dalam urutan$_40p dekat tengah garis kesepuluh (9 jika berbasis nol). Nilai di atas tumpukan pada titik itu adalah perbedaan area saat ini.

Di bawah ini adalah animasi yang menunjukkan beberapa frame pertama dari proses ini untuk n = 5:

Animasi yang menunjukkan proses pemasangan persegi panjang

Setiap persegi panjang yang berbeda diwakili oleh huruf alfabet yang berbeda. Namun, perhatikan bahwa persegi panjang terakhir tidak pernah ditulis, sehingga bagian dari persegi hanya akan kosong.

Saya juga menulis versi debug dari kode yang menampilkan tata letak saat ini setiap kali menemukan kecocokan terbaik baru ( Coba online! ). Untuk ukuran yang lebih kecil, kecocokan pertama seringkali merupakan solusi optimal, tetapi setelah Anda melewati n = 6 Anda mungkin akan melihat beberapa tata letak yang valid tetapi tidak optimal sebelum diselesaikan pada solusi akhir.

Tata letak terbaik yang ditemukan untuk n = 10 terlihat seperti ini:

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
Anda adalah dewa di antara befunge-rs.
Rɪᴋᴇʀ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.