Partisi n X n
persegi 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
...
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
Befunge, 708 byte
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
4
dalam 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:
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:
sumber