Hoa golf của cuộc sống


19

Thách thức ở đây là mô tả chính xác bông hoa của sự sống (vốn là một nhân vật hình học thiêng liêng theo một số người) bằng ngôn ngữ bạn chọn.

hoa của cuộc sống

Thiết kế bao gồm một sự sắp xếp các vòng tròn và một phần vòng tròn bán kính 1 như thể hiện các tâm của chúng được sắp xếp trên một lưới tam giác của sân 1, cộng với một vòng tròn lớn hơn bán kính 3 bao quanh chúng.

Thiết kế có thể được thu nhỏ tùy ý, nhưng cho phép sai số tối đa là 2% so với toán học chính xác. Nếu sử dụng đồ họa raster, điều này giới hạn hiệu quả đường kính của các vòng tròn nhỏ ở mức tối thiểu khoảng 100 pixel.

Vì đây là mã golf, mã ngắn nhất (byte) sẽ thắng.


10
Chào mừng đến với trang web! Để bạn biết, thông thường nên chờ một lúc trước khi chấp nhận câu trả lời, theo cách đó, những người dùng khác sẽ không xem cuộc thi là "kết thúc", và sẽ có nhiều sự tham gia và cạnh tranh hơn.
DJMcMayhem

2
"Trực quan, dễ nhận biết và chính xác" không rõ ràng cũng không khách quan. Không thể xác định liệu một bài nộp có hợp lệ hay không mà không có tiêu chí hợp lệ khách quan. Chúng tôi khuyến khích sử dụng Sandbox để giải quyết mọi vấn đề tiềm ẩn với các thách thức trước khi đăng chúng lên trang web chính.
Mego

Ngoài quy tắc trừu tượng như như nhận biết được, có thể nhận ra kích thước tối thiểu.
manatwork

Vì chưa có ai cắm nó, chúng tôi có một hộp cát ở meta được thiết kế để giúp những thách thức mới nhận được phản hồi. Bạn có thể tìm thấy nó ở đây: meta.codegolf.stackexchange.com/questions/2140/ Kẻ
tuskiomi

1
Đó thực sự không chỉ là 19 vòng tròn. Có một số cung tròn ở các cạnh là tốt. (6 trong số chúng bao gồm một góc 2π / 3, 12 bao gồm π, 18 bao gồm π / 6)
Martin Ender

Câu trả lời:


23

Toán học, 177 173 128 124 120 byte

c=Circle;Graphics@{{0,0}~c~3,Rotate[Table[If[-3<x-y<4,c[{√3x,-x+2y}/2,1,Pi/{6,2}]],{x,-3,2},{y,-4,2}],Pi/3#]&~Array~6}

nhập mô tả hình ảnh ở đây

Ý tưởng chính là tổng hợp kết quả từ sáu phiên bản xoay vòng này:

nhập mô tả hình ảnh ở đây

Lần lượt là một bảng hình chữ nhật của các vòng cung giống hệt nhau với hai góc bị cắt đi. Nếu chúng ta loại bỏ sự cắt và đại diện cho mỗi tâm vòng tròn bằng a #, về cơ bản chúng ta muốn phân phối các vòng tròn theo mẫu này:

####
#####
######
######
 #####
  ####

Các cạnh này bị cắt bằng cách áp đặt điều kiện -3 < x-y < 4trên các chỉ số 2D (vì giá trị x-ylà không đổi dọc theo các đường chéo) và sự cắt xén xuất phát từ việc nhân chúng xycác vectơ cơ sở không trực giao trải qua lưới mà chúng ta đang tìm kiếm.

Hướng đặc biệt này của các cung không được bảo vệ hóa ra là ngắn nhất vì cả hai đầu của cung đều chia đều Piđể cung có thể được biểu thị là Pi/{6,2}(tất cả các cung khác sẽ yêu cầu và thêm dấu trừ hoặc số nguyên trong tử số).


Sử dụng √3 để lưu 2 ký tự & 0 byte, đồng thời loại bỏ nguồn lỗi số.
Kelly Lowder

@KellyLowder Điểm tốt, cố định.
Martin Ender

8

OpenSCAD, 228 byte

$fn=99;module o(a=9){difference(){circle(a);circle(a-1);}}function x(n)=9*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o();q(g-1);}}else{intersection(){translate(x(i))o();circle(9);}}}q(2);o(27);

Dưới đây là phiên bản cho phép ai đó đặt tham số r (bán kính) và w (chiều rộng của các vòng).

r=1;w=.1;$fn=99;module o(n){difference(){circle(n);circle(n-w);}}function x(n)=(r-w/2)*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o(r);q(g-1);}}else{intersection(){translate(x(i))o(r);circle(r);}}}q(2);o(3*r-w);

Phiên bản này là xactly 246 ký tự.
Một số mã này là không cần thiết về mặt kỹ thuật nhưng làm cho nó trông giống như hình ảnh.


Tôi đang gặp lỗi này trên OpenSCAD.net (Firefox 47): Error: Error: Parse error on line 1: ...x(k))o();circle(9);};}}}q(2);o(27); -----------------------^ Expecting 'TOK_ID', '}', 'TOK_IF', '!', '#', '%', '*', got ';'
HyperNeutrino

@AlexL. Tôi không gặp phải lỗi đó khi tôi sử dụng máy khách OpenSCAD thực tế trên máy mac của mình. Tuy nhiên tôi đã có thể sao chép lỗi đó trên OpenSCAD.net bằng chrome, điều này thật đáng thất vọng. Nó nghĩ rằng đó là một vấn đề với dịch vụ của họ. Bạn có thể thử ứng dụng máy tính để bàn không?
Henry Wildermuth

1
Làm việc cho tôi trên phiên bản máy tính để bàn (Ubuntu 14.04 LTS).
Benjamin Spector

1
Tôi nhận thấy mẫu};} trong mã của bạn. Tôi nghĩ rằng bạn có thể thay thế một cách an toàn bằng}} sẽ cạo một ký tự cho cả hai phiên bản. Tự kiểm tra và dường như làm việc.
Benjamin Spector

6

Toán học 263 byte

Không thực sự cạnh tranh với đệ trình của @ MartinEnder nhưng dù sao tôi cũng rất vui với điều này. Tôi để những cánh hoa làm một bước đi ngẫu nhiên! Cánh hoa đi bằng cách xoay 60 độ ngẫu nhiên về một trong những điểm cuối cũng được chọn ngẫu nhiên. Tôi kiểm tra xem đầu xoay của cánh hoa có nằm ngoài đĩa lớn không, và nếu vậy, vòng quay đi theo hướng khác.

c=Circle;a=√3;v={e=0{,},{0,2}};f=RandomChoice;Graphics@{e~c~6,Table[q=f@{1,2};t=f@{p=Pi/3,-p};r=RotationTransform[#,v[[q]]]&;v=r[If[r[t]@v[[-q]]∈e~Disk~6,t,-t]]@v;Translate[Rotate[{c[{1,a},2,p{4,5}],c[{1,-a},2,p{1,2}]},ArcTan@@(#-#2)&@@v,e],v[[2]]],{5^5}]}

Đây là đoạn mã tiếp theo tôi sử dụng cho hình ảnh động.

Export[NotebookDirectory[]<>"flower.gif", Table[Graphics[Join[{c[e,6]},(List@@%)[[1,2,1;;n-1]],{Thick,Red,(List@@%)[[1,2,n]]}]],{n,1,3^4,1}]]

Cánh hoa ngẫu nhiên

Tôi đọc ở đâu đó rằng đi bộ ngẫu nhiên 2 chiều cuối cùng phải trở về nguồn gốc. Có vẻ như một vài ngàn bước đảm bảo lấp đầy đĩa lớn.


Đây là một ý tưởng thực sự hay, nhưng với số lần lặp hữu hạn, cũng có một xác suất khác không là không lấp đầy toàn bộ bông hoa. Bạn có thể nên thêm một điều kiện chấm dứt khi bạn đã vẽ 30 ​​cánh hoa (đó có vẻ là cách ngắn nhất để xác định xem bạn đã thực sự hoàn thành chưa). Sau đó, bạn sẽ biết bản vẽ được thực hiện khi bạn chấm dứt và xác suất không chấm dứt sẽ bằng không.
Martin Ender

Độc lập với điều đó, có rất nhiều byte bạn có thể lưu: Sqrt[3]3^.5. Bạn không cần xác định echo đến khi sử dụng lần đầu tiên và bạn có thể sử dụng thủ thuật này để lưu một byte trên đó, vì vậy v={e=0{,},{0,2}}. Bạn cũng có thể sử dụng một số ký hiệu infix như e~c~6hoặc e~Disk~6, và ArcTan@@Subtract@@vnên tương đương với ArcTan@@(#-#2)&@@v.
Martin Ender

Đã sử dụng infix và cũng là toán tử to để loại bỏ 15 byte. Cảm ơn những lời khuyên @MartinEnder. Đã loại bỏ / 2 và 2 * đã hủy. Có 180 cánh hoa nên 4 ^ 4 lần lặp thường chiếm khoảng một nửa đĩa và 5 ^ 5 thực hiện công việc. Xác suất 9 ^ 9 không bao gồm đĩa là ~ 1 trên 10 ^ 400.000, ít hơn 2% lỗi, do đó không đáng để các byte bị lãng phí để kiểm tra.
Kelly Lowder

3

JavaScript (ES6) / SVG, 299 byte

with(document){write(`<svg height=250 width=250><circle${b=` fill=none stroke=black `}cx=125 cy=125 r=120 />`);for(i=0;i<24;i++)write(`<path${b}d=M5,125${`${a=`a60,60,0,0,1,`}40,0`.repeat(i%4+3)+`${a}-40,0`.repeat(i%4+3)} transform=${`rotate(60,125,125)`.repeat(i>>2)}rotate(-60,${i%4*4}5,125) />`)}

Hoạt động bằng cách tạo ra nhiều cặp cung có độ dài khác nhau sau đó xoay chúng vào vị trí.

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.