Một dòng chảy rắn, còn được gọi là một đường cong Gosper , là một đường cong fractal, phát triển theo cấp số nhân trong kích thước với mỗi đơn hàng / lần lặp của một quá trình đơn giản. Dưới đây là các chi tiết về việc xây dựng và một vài ví dụ cho các đơn đặt hàng khác nhau:
Đặt hàng 1 con rắn :
____
\__ \
__/
Đặt hàng 2 con rắn chảy :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Đặt hàng 3 con rắn :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Xây dựng
Hãy xem xét thứ tự 1 Flow Snake được xây dựng theo một đường dẫn chứa 7 cạnh và 8 đỉnh (được dán nhãn bên dưới. Mở rộng cho tính khả thi):
4____5____6
\ \
3\____2 7\
/
0____1/
Bây giờ cho mỗi đơn hàng tiếp theo, bạn chỉ cần thay thế các cạnh bằng một phiên bản xoay của mẫu 1 đơn hàng ban đầu này. Sử dụng 3 quy tắc sau để thay thế các cạnh:
1 Đối với cạnh ngang, thay thế nó bằng hình dạng ban đầu như sau:
________
\ \
\____ \
/
____/
2 Đối với /
cạnh ( 12
trong cấu trúc trên), thay thế nó bằng phiên bản xoay sau:
/
/ ____
\ / /
\/ /
/
____/
3 Đối với \
cạnh ( 34
và 67
ở trên), thay thế nó bằng phiên bản xoay sau:
/
/ ____
\ \ \
\ \ \
\ /
\/
Vì vậy, ví dụ, thứ tự 2 với các đỉnh từ thứ tự 1 được dán nhãn sẽ trông giống như
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Bây giờ đối với bất kỳ thứ tự cao hơn nào, bạn chỉ cần chia mức hiện tại thành các cạnh có độ dài 1 /
, 1 \
hoặc 2 _
và lặp lại quy trình. Xin lưu ý rằng ngay cả sau khi thay thế, các đỉnh chung giữa hai cạnh liên tiếp bất kỳ vẫn trùng nhau.
Thử thách
- Bạn phải viết một hàm của một chương trình đầy đủ nhận một số nguyên duy nhất
N
thông qua đối số hàm STDIN / ARGV / hoặc tương đương gần nhất và in lệnhN
Flow Snake trên STDOUT. - Số nguyên đầu vào luôn lớn hơn
0
. - Không nên có bất kỳ không gian hàng đầu nào không phải là một phần của mẫu.
- Không nên có không gian dấu hoặc đủ khoảng trống để đệm mẫu để điền hoàn toàn hình chữ nhật giới hạn tối thiểu.
- Trailing newline là tùy chọn.
Những điều lý thú
- Flow Snakes là một trò chơi chữ của Snow Flakes, mô hình này giống với thứ tự 2 trở lên
- Flow và Rắn thực sự đóng một phần trong mô hình khi mô hình được tạo thành từ một con đường duy nhất chảy xuyên suốt.
- Nếu bạn chú ý cẩn thận, mẫu thứ tự 2 (và cao hơn nữa) bao gồm các phép quay của mẫu thứ tự 1 được xoay trên đỉnh chung của cạnh hiện tại và cạnh trước.
- Có một biến thể Non ASCII của Flow Snakes có thể được tìm thấy ở đây và tại một số địa điểm khác.
Đây là mã golf để mã ngắn nhất trong byte giành chiến thắng!
Bảng xếp hạng
Bài đầu tiên của loạt bài tạo ra một bảng thành tích.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu mọi câu trả lời bằng tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:
# Ruby, <s>104</s> <s>101</s> 96 bytes