Chuỗi câu đố Mondrian


11

Phân vùng một n X nhình vuông thành nhiều hình chữ nhật có số nguyên không đồng nhất. a(n)là sự khác biệt ít nhất có thể giữa khu vực lớn nhất và nhỏ nhất.

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

Hình chữ nhật lớn nhất ( L) có diện tích 2 * 4 = 8và hình chữ nhật nhỏ nhất ( S) có diện tích 1 * 3 = 3. Do đó, sự khác biệt là 8 - 3 = 5.

Cho một số nguyên n>2, đầu ra chênh lệch ít nhất có thể.

Tất cả các giá trị đã biết của chuỗi tại thời điểm đăng:

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

Vì vậy a(3)=2, a(4)=4...

OEIS A276523

Liên quan - thách thức liên quan này cho phép các giải pháp không tối ưu, hạn chế về thời gian và không phải là môn đánh gôn.

Để biết thêm thông tin, hãy xem video này của Numberphile

Câu trả lời:


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<

Hãy thử trực tuyến . Mặc dù vậy, nó rất chậm, tôi không khuyên bạn nên vượt lên trên 6.

Để xác minh rằng nó thực sự đang hoạt động, bạn có thể kiểm tra chương trình được sửa đổi một chút này có in tất cả các phân vùng có thể không (mỗi phân vùng được hiển thị dưới dạng một mảng các cặp kích thước hình chữ nhật).


Wow, thời gian để chạy lên dốc.
mbomb007

@ mbomb007 có, khá mong đợi cho một giải pháp brute-ish. Tôi thực sự bao gồm một loạt các tối ưu hóa để làm cho nó hiệu quả hơn. Nếu tôi loại bỏ chúng, tôi có thể làm cho nó nhỏ hơn một chút (và chậm hơn và hungrier).
aditsu nghỉ việc vì SE là EVIL

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

Hãy thử trực tuyến!

Điều này rõ ràng là sẽ không giành được bất kỳ giải thưởng nào về kích thước, nhưng nó thực sự nhanh chóng khi xem xét nó là một triển khai lực lượng cơ bản trong một ngôn ngữ bí truyền. Trên trình thông dịch tham chiếu Befunge, nó có thể xử lý tối đa n = 6 trong vài giây. Với trình biên dịch, nó có thể xử lý tới n = 8 trước khi bắt đầu chậm chạp; n = 9 mất vài phút và n = 10 đóng sau 2 giờ.

Về lý thuyết, giới hạn trên là n = 11 trước khi chúng ta hết bộ nhớ (nghĩa là không còn đủ không gian trong sân chơi để vừa với một hình vuông lớn hơn). Tuy nhiên, tại thời điểm đó, thời gian để tính toán giải pháp tối ưu có lẽ lâu hơn bất kỳ ai sẵn sàng chờ đợi, ngay cả khi được biên dịch.

Cách tốt nhất để xem thuật toán hoạt động như thế nào là chạy nó trong một trong những "trình gỡ lỗi trực quan" của Befunge. Bằng cách đó bạn có thể xem khi nó cố gắng khớp các kích thước hình chữ nhật khác nhau vào không gian có sẵn. Nếu bạn muốn "chuyển tiếp nhanh" đến điểm có kết quả khớp tốt, bạn có thể đặt một điểm dừng trên 4chuỗi $_40pgần giữa dòng thứ mười (9 nếu không dựa trên). Giá trị ở đầu ngăn xếp tại thời điểm đó là chênh lệch diện tích hiện tại.

Dưới đây là hình ảnh động hiển thị một vài khung hình đầu tiên của quá trình này với n = 5:

Hoạt hình hiển thị quá trình khớp hình chữ nhật

Mỗi hình chữ nhật riêng biệt được đại diện bởi một chữ cái khác nhau của bảng chữ cái. Tuy nhiên, lưu ý rằng hình chữ nhật cuối cùng không bao giờ được viết ra, vì vậy phần của hình vuông sẽ chỉ để trống.

Tôi cũng đã viết một phiên bản gỡ lỗi của mã xuất ra bố cục hiện tại mỗi khi nó tìm thấy một kết quả phù hợp mới nhất ( Thử trực tuyến! ). Đối với các kích thước nhỏ hơn, trận đấu đầu tiên thường là giải pháp tối ưu, nhưng một khi bạn vượt qua n = 6, bạn sẽ có thể thấy một số bố cục hợp lệ nhưng không tối ưu trước khi giải quyết giải pháp cuối cùng.

Bố cục tốt nhất được tìm thấy cho n = 10 trông như thế này:

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
Bạn là một vị thần trong số befunge-rs.
Rɪᴋᴇʀ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.