Mondrian Bulmaca Sırası


11

Bir n X nkareyi, uyumlu olmayan tamsayı taraflı dikdörtgenlere bölün. a(n)en büyük ve en küçük alan arasındaki olası en küçük farktır.

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

En büyük dikdörtgen ( L) bir alana sahiptir 2 * 4 = 8ve en küçük dikdörtgen ( S) bir alana sahiptir 1 * 3 = 3. Bu nedenle, fark budur 8 - 3 = 5.

Bir tamsayı verildiğinde n>2, mümkün olan en düşük farkı girin.

Kayıt sırasında dizinin bilinen tüm değerleri:

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

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

OEIS A276523

İlgili - bu ilgili zorluk optimal olmayan çözümlere izin verir, zaman kısıtlamaları vardır ve kod golfü değildir.

Daha fazla bilgi için bu videoyu Numberphile ile izleyin

Yanıtlar:


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<

Çevrimiçi deneyin . Veeery yavaş olsa da, 6 yukarıda gidiş tavsiye etmem.

İşin gerçekten işe yaradığını doğrulamak için , olası tüm bölümleri yazdıran bu biraz değiştirilmiş programı kontrol edebilirsiniz (her bölüm bir dikdörtgen boyut çiftleri dizisi olarak gösterilir).


Vay be, kaçma zamanı dik gidiyor.
mbomb007

@ mbomb007 evet, kaba bir çözüm için oldukça bekleniyor. Aslında daha verimli hale getirmek için bir dizi optimizasyon ekledim. Onları kaldırırsam, biraz daha küçük (ve daha yavaş ve açlık) yapabilirim.
aditsu bıraktı çünkü SE EVIL

6

Befunge, 708 bayt

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

Çevrimiçi deneyin!

Bu açıkça boyut için ödül kazanmayacak, ancak ezoterik bir dilde temel bir çürük kuvveti uygulaması olduğu göz önüne alındığında oldukça hızlı. Befunge referans yorumlayıcıda birkaç saniye içinde n = 6'ya kadar işleyebilir. Derleyici ile yavaşlamaya başlamadan önce n = 8'e kadar işleyebilir; n = 9 birkaç dakika alır ve n = 10 2 saatte kapanır.

Teorik olarak, hafızamız tükenmeden üst sınır n = 11'dir (yani, oyun alanında daha büyük bir kareye sığacak kadar yer kalmamıştır). Bununla birlikte, bu noktada, optimum çözümü hesaplamak için harcanan zaman, derlendiğinde bile herkesin beklemek isteyebileceğinden daha uzundur.

Algoritmanın nasıl çalıştığını görmenin en iyi yolu, onu Befunge "görsel hata ayıklayıcılarından" birinde çalıştırmaktır. Bu şekilde, çeşitli dikdörtgen boyutlarını kullanılabilir alana sığdırmaya çalışırken izleyebilirsiniz. Eğer "hızlı ileri" iyi bir eşleşme vardır noktaya istiyorsanız, size bir kesme noktası koyabilirsiniz 4sırayla $_40ponuncu hattının ortasına yakın (9 eğer sıfır tabanlı). Bu noktada yığının en üstündeki değer, geçerli alan farkıdır.

Aşağıda, n = 5 için bu işlemin ilk birkaç karesini gösteren bir animasyon yer almaktadır:

Dikdörtgen montaj işlemini gösteren animasyon

Her farklı dikdörtgen, alfabenin farklı bir harfi ile temsil edilir. Bununla birlikte, son dikdörtgenin asla yazılmadığına dikkat edin, böylece karenin bölümü boş olacaktır.

Ayrıca, yeni bir en iyi eşleşme bulduğunda geçerli düzeni çıkaran kodun hata ayıklama sürümünü yazdım ( çevrimiçi deneyin! ). Daha küçük boyutlar için, ilk eşleşme genellikle en uygun çözümdür, ancak n = 6'yı geçtikten sonra, nihai çözüme yerleşmeden önce birkaç geçerli ancak optimal olmayan düzen göreceksiniz.

N = 10 için bulunan en iyi düzen şöyle görünür:

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-r'ler arasında bir tanrısınız.
Rɪᴋᴇʀ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.