Polygram thông thường


16

Cho số lượng đỉnh n ≥ 3và "kích thước bước" 1 ≤ m < n/2 (biểu thị khoảng cách giữa hai đỉnh được kết nối), xuất ra biểu diễn đồ họa của đa giác thông thường tương ứng . Nếu đa giác bao gồm nhiều vòng khép kín, mỗi vòng lặp phải được hiển thị theo màu đường khác nhau. (Nếu điều này nghe có vẻ khó hiểu, các ví dụ dưới đây hy vọng sẽ làm rõ mọi thứ.)

Quy tắc

Bất kỳ giải pháp hợp lý nào cho vấn đề có thể sẽ tự động thỏa mãn các quy tắc này - chúng chỉ ở đó để đặt một số ràng buộc cho các tham số của đầu ra để ngăn các câu trả lời như "Khối đen này hoàn toàn là một đa giác, nhưng bạn không thể thấy nó bởi vì Tôi đặt chiều rộng của dòng là hơn 9000. "

  • Bạn có thể kết xuất đa giác thành một tệp (có thể được ghi vào đĩa hoặc vào luồng đầu ra tiêu chuẩn) hoặc hiển thị nó trên màn hình.
  • Bạn có thể sử dụng đồ họa vector hoặc raster. Nếu đầu ra của bạn được rasterized, hình ảnh của bạn phải có kích thước 400x400 pixel trở lên và bán kính của polygram (khoảng cách từ tâm đến mỗi đỉnh) phải nằm trong khoảng từ 35% đến 50% chiều dài của cạnh.
  • Tỷ lệ khung hình của đa giác phải là 1 (sao cho các đỉnh của nó nằm trên một vòng tròn thích hợp) - khung vẽ của hình ảnh có thể là hình chữ nhật.
  • Các đường của đa giác phải không dày hơn 5% bán kính (và tất nhiên, chúng phải có độ dày khác không để có thể nhìn thấy).
  • Bạn có thể kết xuất trục hoặc khung ngoài đa giác, nhưng không có gì khác.
  • Bạn có thể chọn bất kỳ màu nền (rắn).
  • Đối với các đa giác bao gồm nhiều vòng khép kín, bạn phải hỗ trợ ít nhất 6 màu khác biệt trực quan , tất cả đều phải khác với nền. (Thang màu xám là tốt, miễn là các sắc thái được trải đều qua phổ.) Mã của bạn vẫn phải hoạt động trong hơn 6 vòng, nhưng các màu không phải phân biệt được cho bất kỳ vòng lặp bổ sung nào (ví dụ: bạn cũng có thể sử dụng lại màu sắc từ các vòng trước tại điểm đó).

Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.

Ví dụ

Dưới đây là tất cả các đầu ra tối đa n = 16(trong đó cột tương ứng nvà hàng tới m):

nhập mô tả hình ảnh ở đây Nhấn vào đây để xem phiên bản lớn hơn.

Ví dụ cho lớn hơn n, đây là (n, m) = (29, 11)(30, 12):

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


Điều gì về chống răng cưa và công cụ? (Vì chúng tôi đang xử lý các đường thẳng)
Trình tối ưu hóa

1
@Optimizer Tôi sẽ không quy định một thuật toán khử răng cưa. Các dòng có thể được đặt bí danh hoặc chống răng cưa miễn là chúng có thể nhìn thấy rõ. Sử dụng phán đoán tốt nhất của bạn.
Martin Ender

Câu trả lời:


5

MATLAB, 85 81

Chức năng hiển thị một âm mưu trên màn hình.

function f(n,m)
hold all
axis equal
for k=1:gcd(m,n)
plot(i.^(4*(k:m:n^2)/n))
end

Kết quả cho n = 30, m = 12: f (30,12)


Tôi không chắc chắn công việc này; nếu tôi đã thực hiện đúng, nó sẽ xuất hình ảnh này trong 30, 12. Xem: bit.ly/1GFZni7
durron597

@ durron597 Nó thực sự hoạt động trong Matlab, nhưng chức năng này không thể tái sử dụng ngay lập tức, bởi vì các hold alldẫn đến cốt truyện tiếp theo được vẽ lên trên đầu tiên ... Tôi không biết liệu chúng ta có đồng thuận về khả năng sử dụng lại các chức năng không thật thà.
Martin Ender

@ MartinBüttner Dù sao cũng nên hold onlưu một byte; nếu bạn thêm bốn byte, nó sẽ trở nên có thể sử dụng lại ( clf\n)
durron597

Hóa ra chúng tôi có một sự đồng thuận và tôi thậm chí đã đăng câu hỏi và tự trả lời vài tháng trước. Vì vậy, bởi bài đăng meta đó, điều này sẽ không hợp lệ nếu không có gì để phát hành hold.
Martin Ender

@ MartinBüttner Nếu bạn thay đổi hold allđể clf\nhold onkhắc phục vấn đề?
durron597

3

CJam, 114

"P2"N400:ASAN6N0aA*aA*q~:M;:K{:CK,f{M*+K%P*2*K/_[mc)\ms)]199f*}_+2ew{~1$.-Af/A,\ff*\f.+{:mo~_3$=@C6%)tt}/}/}/Sf*N*

Nó xuất hình ảnh ở định dạng PGM ASCII.

Bạn có thể thử trực tuyến , nhưng đầu ra khá dài. Bạn có thể thay đổi 400199số lượng nhỏ hơn để giảm kích thước hình ảnh.

CJam không có khái niệm về hình ảnh, hình vẽ, đường nét hay hình dạng, vì vậy tôi đã tạo ra hình ảnh trong một ma trận vuông, pixel theo pixel (một số đại diện cho một màu xám cho mỗi pixel).

Đây là kết quả trông như thế nào 30 12:

đa giác


1

Toán học, 70 byte

ListPolarPlot[Table[{2Pi(i+j#2)/#,1},{i,GCD@##},{j,#+1}],Joined->1>0]&

Chà ... đây là triển khai tham chiếu của tôi, đánh bại cả hai bài nộp cho đến nay. Tôi không có ý định chiến thắng thử thách của chính mình, vì vậy tôi hy vọng ai đó sẽ đánh bại điều này.

Đầu ra giống như các âm mưu trong thử thách, ngoại trừ tôi không loại bỏ các trục ở đây:

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

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.