ลำดับปริศนา Mondrian


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)=2, a(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 ใช่คาดว่าจะเป็นวิธีการแก้ปัญหา brute-ish ฉันรวมการเพิ่มประสิทธิภาพเข้าด้วยกันเพื่อให้มีประสิทธิภาพมากขึ้น หากฉันลบพวกเขาฉันสามารถทำให้มันเล็กลงเล็กน้อย (และช้าลงและหิวโหย)
aditsu ออกจากเพราะ SE นั้นชั่วร้าย

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 ก่อนที่เราจะมีหน่วยความจำไม่เพียงพอ (เช่นมีพื้นที่เหลือไม่เพียงพอในสนามเด็กเล่น อย่างไรก็ตาม ณ จุดนั้นเวลาที่ใช้ในการคำนวณทางออกที่ดีที่สุดอาจนานกว่าใครก็ตามที่เต็มใจรอแม้กระทั่งเมื่อรวบรวม

วิธีที่ดีที่สุดในการดูว่าอัลกอริทึมทำงานอย่างไรโดยเรียกใช้ในหนึ่งใน "visual debuggers" ของ Befunge ด้วยวิธีนี้คุณสามารถรับชมได้ในขณะที่พยายามปรับขนาดสี่เหลี่ยมผืนผ้าให้พอดีกับพื้นที่ว่าง หากคุณต้องการ "กรอไปข้างหน้า" ไปยังจุดที่มีการจับคู่ที่ดีคุณสามารถวางเบรกพอยต์4ในลำดับ$_40pใกล้กับกึ่งกลางของบรรทัดที่สิบ (9 ถ้าเป็นศูนย์) ค่าที่ด้านบนของสแต็ก ณ จุดนั้นคือความแตกต่างของพื้นที่ปัจจุบัน

ด้านล่างนี้เป็นภาพเคลื่อนไหวที่แสดงเฟรมสองสามเฟรมแรกของกระบวนการนี้สำหรับ n = 5:

แอนิเมชันที่แสดงกระบวนการปรับรูปสี่เหลี่ยมผืนผ้า

แต่ละรูปสี่เหลี่ยมผืนผ้าที่แตกต่างกันแสดงด้วยตัวอักษรที่แตกต่างกัน อย่างไรก็ตามโปรดทราบว่าสี่เหลี่ยมสุดท้ายจะไม่ถูกเขียนออกมาดังนั้นส่วนของตารางจะว่างเปล่า

ฉันได้เขียนโค้ด debug เวอร์ชันที่แสดงเลย์เอาท์ปัจจุบันทุกครั้งที่พบการจับคู่ที่ดีที่สุด ( ลองออนไลน์! ) สำหรับขนาดที่เล็กกว่าการจับคู่ครั้งแรกมักจะเป็นทางออกที่ดีที่สุด แต่เมื่อคุณผ่านมา 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.