Thử thách này được lấy cảm hứng từ câu trả lời này tại Ask Ubuntu Stack Exchange.
Giới thiệu
Ghi nhớ trình bảo vệ màn hình Windows ME với các đường ống ? Thời gian để mang nỗi nhớ trở lại!
Thử thách
Bạn nên viết một chương trình hoặc chức năng sẽ tạo ra một đại diện ASCII của trình bảo vệ màn hình. Trong trình bảo vệ màn hình nên có một đường ống duy nhất sẽ phát triển theo hướng bán ngẫu nhiên.
Điểm bắt đầu của đường ống sẽ được đặt ngẫu nhiên tại bất kỳ đường viền nào của màn hình và đoạn ống phải vuông góc với đường viền (góc đầu tiên - đường ống có thể là ngang hoặc dọc). Mỗi đánh dấu đường ống sẽ phát triển theo hướng nó đang đối mặt (ngang / dọc) một cách 80%
tình cờ hoặc có một góc ở một 20%
cơ hội.
Đại diện ống
Để tạo đường ống, 6 ký tự unicode sẽ được sử dụng
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
Đầu vào
Chương trình / chức năng sẽ lấy 3 giá trị đầu vào, có thể được tập hợp thông qua các tham số chức năng hoặc được nhắc cho người dùng.
- Số lượng bọ ve
- Độ rộng màn hình
- Chiều cao màn hình
Số lượng bọ ve
Đối với mỗi đánh dấu, một đoạn ống sẽ được thêm vào màn hình. Ống sẽ ghi đè lên các mảnh ống cũ nếu chúng sinh ra ở cùng một vị trí.
Ví dụ: chụp màn hình kích thước 3x3
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
Bất cứ khi nào một đường ống thoát khỏi màn hình, như trong ví dụ cuối cùng ở mức 5 tick, thì một đường ống mới sẽ sinh ra ở một đường viền ngẫu nhiên. Ví dụ:
ticks == 6
│┐
└┘
─
Các đường ống mới nên có 50% cơ hội là ngang hoặc dọc.
Chiều rộng / chiều cao màn hình
Chiều rộng và chiều cao màn hình có thể được kết hợp thành một giá trị nếu điều đó phù hợp với ngôn ngữ bạn chọn. Chiều rộng và chiều cao màn hình sẽ luôn có giá trị tối thiểu là 1 và giá trị tối đa là 255. Nếu ngôn ngữ bạn chọn hỗ trợ màn hình điều khiển hoặc màn hình đầu ra nhỏ hơn lưới 255x255 thì bạn có thể cho rằng chiều rộng và chiều cao sẽ không bao giờ vượt quá ranh giới của giao diện điều khiển của bạn. (Ví dụ: cửa sổ Windows 80x25 cmd)
Đầu ra
Đầu ra của chương trình / chức năng của bạn phải được in ra màn hình hoặc được trả về từ một chức năng. Đối với mỗi lần chạy chương trình của bạn, một bộ ống khác nhau sẽ được tạo.
Các trường hợp thử nghiệm
Các trường hợp kiểm tra sau đây là tất cả các ví dụ ngẫu nhiên về đầu ra hợp lệ
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
Rõ ràng, càng nhiều dấu vết đã xảy ra, càng khó chứng minh tính hợp lệ của chương trình của bạn. Do đó, đăng một gif của đầu ra của bạn đang chạy sẽ được ưu tiên. Nếu điều này là không thể, xin vui lòng gửi một phiên bản mã của bạn bao gồm in đầu ra. Rõ ràng, điều này sẽ không được tính vào điểm số của bạn.
Quy tắc
- Đây là môn đánh gôn , số lượng byte chiến thắng ngắn nhất
- Áp dụng sơ hở tiêu chuẩn
- Nếu bạn sử dụng các ký tự ống unicode trong mã nguồn của mình, bạn có thể tính chúng là một byte đơn
Đây là một thử thách khá khó có thể giải quyết bằng nhiều cách sáng tạo, bạn được khuyến khích viết câu trả lời bằng ngôn ngữ dài dòng hơn mặc dù đã có câu trả lời bằng esolang ngắn. Điều này sẽ tạo ra một danh mục các câu trả lời ngắn nhất cho mỗi ngôn ngữ. Thưởng upvote cho gifs màu ưa thích;)
Chúc bạn chơi golf vui vẻ!
Tuyên bố miễn trừ trách nhiệm: Tôi biết rằng các ký tự Unicode không phải là ASCII, nhưng vì không có tên hay hơn nên tôi chỉ gọi nó là nghệ thuật ASCII. Đề xuất được chào đón :)