Mục tiêu của thử thách này là sản xuất một hình ảnh động của hệ thống truyền động dây chuyền , bao gồm một bộ bánh răng xích được nối với nhau bằng một chuỗi .
yêu câu chung
Chương trình của bạn sẽ được cung cấp một danh sách các con quay , được chỉ định là (x, y, radius)
bộ ba. Các kết quả hệ thống ổ đĩa chuỗi gồm những sprockets, kết nối với nhau bởi một chuỗi căng thẳng khép kín đi qua mỗi trong số họ, theo thứ tự . Mục tiêu của bạn là tạo ra một hình ảnh động vô hạn , hiển thị hệ thống đang chuyển động. Ví dụ, đưa ra đầu vào
(0, 0, 16), (100, 0, 16), (100, 100, 12), (50, 50, 24), (0, 100, 12)
, đầu ra sẽ trông giống như
.
Hệ tọa độ phải sao cho trục x đúng, và trục y hướng lên. Bạn có thể giả sử rằng bán kính là các số chẵn lớn hơn hoặc bằng 8 (chúng ta sẽ thấy lý do tại sao điều này lại quan trọng sau này.) Bạn cũng có thể giả sử rằng có ít nhất hai con quay và các con quay không giao nhau. Các đơn vịcủa đầu vào không quá quan trọng. Tất cả các ví dụ và trường hợp thử nghiệm trong bài đăng này sử dụng pixel làm đơn vị đầu vào (vì vậy, ví dụ, bán kính của bánh xích giữa trong hình trước là 24 pixel;) cố gắng không đi quá nhiều so với các đơn vị này. Trong phần còn lại của thử thách, số lượng không gian được hiểu là được đưa ra trong cùng đơn vị với đầu vào, đảm bảo giữ đúng tỷ lệ! Các kích thước của đầu ra nên hơi lớn hơn so với khung giới hạn của tất cả các sprockets, đủ lớn để toàn bộ hệ thống là có thể nhìn thấy. Đặc biệt, các vị trí tuyệt đối của các con quay không được ảnh hưởng đến đầu ra; chỉ các vị trí tương đối của chúng nên (vì vậy, ví dụ, nếu chúng ta thay đổi tất cả các con quay trong ví dụ trên với cùng một lượng, thì đầu ra sẽ giữ nguyên.)
Chuỗi phải được tiếp xúc với các con quay mà nó đi qua tại tất cả các điểm tiếp xúc, và thẳng ở mọi nơi khác. Chuỗi phải vượt qua các đĩa xích sao cho các phân đoạn chuỗi liền kề (nghĩa là các phần của chuỗi giữa hai đĩa xích, gặp nhau tại cùng một bánh xích) không giao nhau.
.
Ví dụ, trong khi hệ thống bên trái ở trên là hợp lệ, thì hệ thống ở giữa thì không, vì hai phân đoạn chuỗi liền kề đi qua bánh xích bên trái phía dưới giao nhau. Tuy nhiên, lưu ý rằng hệ thống bên phải là hợp lệ, vì hai phân đoạn chuỗi giao nhau không liền kề (mặc dù hệ thống này được sản xuất bởi một đầu vào khác với hai hệ thống còn lại.)
Để giữ cho mọi thứ đơn giản (r), bạn có thể giả sử rằng không có bánh xích nào giao với vỏ lồi của hai con quay lân cận của nó, hoặc vỏ lồi của mỗi hàng xóm của nó và hàng xóm khác của chúng. Nói cách khác, bánh xích trên cùng trong sơ đồ bên dưới có thể không giao nhau với bất kỳ khu vực bóng mờ nào.
Các phân đoạn chuỗi có thể giao nhau với các đĩa xích khác với các chuỗi mà chúng đi qua (chẳng hạn như trong trường hợp thử nghiệm cuối cùng). Trong trường hợp này, chuỗi phải luôn xuất hiện ở phía trước các con quay.
Yêu cầu trực quan
Chuỗi nên bao gồm một loạt các liên kết có chiều rộng xen kẽ. Chiều rộng của liên kết hẹp nên khoảng 2 và chiều rộng của liên kết rộng nên khoảng 5. Độ dài của cả hai loại liên kết nên bằng nhau. Thời kỳcủa chuỗi, nghĩa là tổng chiều dài của một cặp liên kết rộng / hẹp, phải là số gần nhất với 4π phù hợp với số nguyên lần của độ dài của chuỗi. Ví dụ: nếu độ dài của chuỗi là 1.000, thì chu kỳ của nó phải là 12,5, là số gần nhất với 4π (12,566 ...) phù hợp với số nguyên lần (80) trong 1.000. Điều quan trọng đối với giai đoạn phù hợp với số nguyên lần trong độ dài của chuỗi, do đó không có tạo tác nào tại điểm mà chuỗi quấn quanh.
Một bánh răng có bán kính R nên bao gồm ba phần đồng tâm: một trục trung tâm , phải là một vòng tròn bán kính khoảng 3; các cơ thể của Sprocket , xung quanh trục, mà phải là một vòng tròn bán kính khoảng R - 4,5; và vành của bánh xích , xung quanh thân, phải là một vòng tròn bán kính khoảng
R - 1,5. Vành cũng phải chứa răng của bánh xích , có chiều rộng khoảng 4; kích thước và khoảng cách của răng phải khớp với kích thước của các liên kết chuỗi, sao cho chúng gọn gàng.
Thời kỳ răng của bánh xích, nghĩa là khoảng cách giữa hai răng liên tiếp dọc theo chu vi của bánh xích, phải khớp với thời gian của chuỗi. Vì khoảng thời gian là khoảng 4π và vì bán kính của bánh xích được đảm bảo là chẵn, nên khoảng thời gian phải vừa với chu vi của bánh xích một số lần gần như nguyên, do đó không nên có bất kỳ tạo tác đáng chú ý nào tại điểm bánh xích quấn quanh.
Bạn có thể sử dụng bất kỳ sự kết hợp màu sắc nào cho chuỗi, các phần khác nhau của bánh xích và nền, miễn là chúng có thể dễ dàng phân biệt . Nền có thể trong suốt. Các ví dụ trong bài này sử dụng #202020
cho chuỗi, #868481
cho trục và vành của bánh xích, và #646361
cho thân của bánh xích.
Yêu cầu hoạt hình
Các xích đầu tiên trong danh sách đầu vào nên xoay chiều kim đồng hồ ; phần còn lại của đĩa xích nên xoay tương ứng. Chuỗi phải di chuyển với tốc độ khoảng 16π (khoảng 50) đơn vị mỗi giây; tốc độ khung hình tùy thuộc vào bạn, nhưng hình ảnh động sẽ trông đủ mượt mà.
Các hình ảnh động nên lặp lại liền mạch .
Sự phù hợp
Một số thuộc tính và tỷ lệ hình ảnh được chỉ định một cách có chủ ý chỉ bằng cách bạn không cần phải khớp chính xác với chúng . Đầu ra của chương trình của bạn không phải là bản sao pixel-pixel của các ví dụ được đưa ra ở đây, nhưng nó sẽ trông tương tự. Cụ thể, tỷ lệ chính xác của chuỗi và xích, và hình dạng chính xác của các liên kết và răng của xích, là linh hoạt.
Những điểm quan trọng nhất cần tuân theo là:
- Chuỗi phải vượt qua các con quay, theo thứ tự đầu vào, từ hướng chính xác.
- Chuỗi phải được tiếp xúc với các con quay tại tất cả các điểm tiếp xúc.
- Các liên kết của chuỗi và răng của các con quay cần được sắp xếp gọn gàng, ít nhất là để điều chỉnh khoảng cách và pha.
- Khoảng cách giữa các liên kết của chuỗi và răng của các con quay, phải sao cho không có các tạo tác đáng chú ý tại điểm mà chúng quấn quanh.
- Các con quay cần quay đúng hướng.
- Các hình ảnh động nên lặp lại liền mạch.
Như một lưu ý cuối cùng, trong khi, về mặt kỹ thuật, mục tiêu của thử thách này là viết mã ngắn nhất, nếu bạn cảm thấy muốn sáng tạo và tạo ra một đầu ra phức tạp hơn, bằng mọi cách, hãy thực hiện nó!
Thử thách
Viết chương trình hoặc hàm , lấy danh sách các con quay và tạo ra một hình ảnh động hệ thống ổ đĩa chuỗi tương ứng, như được mô tả ở trên.
Đầu vào và đầu ra
Bạn có thể lấy đầu vào thông qua dòng lệnh , thông qua STDIN , làm đối số chức năng hoặc sử dụng một phương thức tương đương . Bạn có thể sử dụng bất kỳ định dạng thuận tiện cho đầu vào, nhưng hãy đảm bảo chỉ định nó trong bài viết của bạn.
Là đầu ra , bạn có thể hiển thị hình ảnh động trực tiếp , tạo tệp hoạt hình (ví dụ: GIF hoạt hình) hoặc tạo một chuỗi các tệp khung (tuy nhiên, có một hình phạt nhỏ trong trường hợp này; xem bên dưới.) Nếu bạn sử dụng đầu ra tệp, đảm bảo số lượng khung hình hợp lý (ví dụ trong bài đăng này sử dụng rất ít khung hình;) số lượng khung hình không nhất thiết phải tối thiểu, nhưng bạn không nên tạo quá nhiều khung hình thừa. Nếu bạn xuất một chuỗi các khung, hãy đảm bảo chỉ định tốc độ khung hình trong bài đăng của bạn.
Ghi bàn
Đây là mã golf . Các câu trả lời ngắn nhất , tính bằng byte, thắng.
+ Hình phạt 10% Nếu chương trình của bạn tạo ra một chuỗi các khung làm đầu ra, thay vì hiển thị trực tiếp hoạt hình hoặc tạo một tệp hoạt hình duy nhất, hãy thêm 10% vào điểm số của bạn.
Các trường hợp thử nghiệm
Kiểm tra 1
(0, 0, 26), (120, 0, 26)
Kiểm tra 2
(100, 100, 60), (220, 100, 14)
Bài kiểm tra 3
(100, 100, 16), (100, 0, 24), (0, 100, 24), (0, 0, 16)
Kiểm tra 4
(0, 0, 60), (44, 140, 16), (-204, 140, 16), (-160, 0, 60), (-112, 188, 12),
(-190, 300, 30), (30, 300, 30), (-48, 188, 12)
Kiểm tra 5
(0, 128, 14), (46.17, 63.55, 10), (121.74, 39.55, 14), (74.71, -24.28, 10),
(75.24, -103.55, 14), (0, -78.56, 10), (-75.24, -103.55, 14), (-74.71, -24.28, 10),
(-121.74, 39.55, 14), (-46.17, 63.55, 10)
Kiểm tra 6
(367, 151, 12), (210, 75, 36), (57, 286, 38), (14, 181, 32), (91, 124, 18),
(298, 366, 38), (141, 3, 52), (80, 179, 26), (313, 32, 26), (146, 280, 10),
(126, 253, 8), (220, 184, 24), (135, 332, 8), (365, 296, 50), (248, 217, 8),
(218, 392, 30)