Giới thiệu về bộ
Trước hết, bạn có thể coi điều này giống như bất kỳ thử thách chơi gôn mã nào khác, và trả lời nó mà không phải lo lắng về loạt bài này. Tuy nhiên, có một bảng xếp hạng trên tất cả các thách thức. Bạn có thể tìm thấy bảng xếp hạng cùng với một số thông tin khác về loạt bài trong bài đầu tiên .
Lỗ 8: Xáo trộn một danh sách vô hạn
Bạn nên viết một hàm hoặc chương trình lấy danh sách vô hạn làm đầu vào và trả về một phiên bản được xáo trộn của danh sách đó.
Về vô hạn I / O
Có một số cách bạn có thể lấy đầu vào và tạo đầu ra cho thử thách này:
- Bạn có thể lấy danh sách các số nguyên dương hoặc biểu diễn chuỗi hoặc chuỗi hoặc danh sách các ký tự ASCII có thể in (bao gồm 0x20 đến 0x7E). Định dạng đầu ra phải phù hợp với định dạng đầu vào. Từ giờ trở đi tôi sẽ chỉ xem dữ liệu là "danh sách", bất kể bạn chọn tùy chọn nào.
- Bạn có thể đọc danh sách từ luồng đầu vào tiêu chuẩn vô hạn và ghi đầu ra liên tục vào luồng đầu ra tiêu chuẩn vô hạn. Giải pháp không nên phụ thuộc vào bất kỳ giá trị cụ thể hoặc chuỗi giá trị nào để đảm bảo rằng luồng đầu ra được ghi và xóa thường xuyên (ví dụ: bạn không thể chỉ viết đầu ra bất cứ khi nào có
5
trong danh sách đầu vào). Tất nhiên, nếu bạn đọc một đại diện chuỗi của danh sách, sẽ tốt cho đến khi gặp phải dấu phân cách danh sách. - Trong các ngôn ngữ hỗ trợ chúng, bạn có thể viết một hàm lấy và trả về một danh sách hoặc chuỗi vô hạn lười biếng.
- Trong các ngôn ngữ hỗ trợ chúng, bạn có thể triển khai một trình tạo vô hạn lấy một trình tạo khác làm đầu vào.
- Ngoài ra, bạn có thể viết một hàm không có đối số và trả về một giá trị đầu ra mỗi lần nó được gọi. Trong trường hợp này, bạn có thể giả sử rằng một hàm đã được xác định không có đối số và trả về giá trị đầu vào tiếp theo mỗi lần nó được gọi. Bạn có thể tự do chọn tên của chức năng đó.
Bạn có thể cho rằng chương trình của bạn chạy mãi mãi và bộ nhớ vô hạn có sẵn. (Có thể giải quyết vấn đề này với một lượng bộ nhớ hữu hạn, nhưng điều này có nghĩa là bạn được phép rò rỉ bộ nhớ.)
Về sự ngẫu nhiên
Đối với bất kỳ giá trị v nào được đọc tại vị trí i của đầu vào vô hạn, phải có xác suất dương để nó kết thúc ở bất kỳ vị trí nào i-9 đến i + 9 của đầu ra vô hạn (trừ khi vị trí đó là âm ). Các xác suất này không phải giống nhau cho các vị trí đầu ra khác nhau hoặc thậm chí cho các vị trí đầu vào khác nhau. Thật tốt nếu giải pháp của bạn cũng có thể xáo trộn các giá trị sang vị trí khác ở xa hơn.
Do đó, không cần thiết rằng giải pháp của bạn có thể xáo trộn giá trị đầu tiên rất xa trong danh sách hoặc nó có thể xáo trộn một giá trị rất muộn lên đến vị trí đầu tiên, mặc dù nó vẫn ổn, miễn là tất cả các vị trí cách 9 bước đầu vào là có thể.
Ví dụ: nếu bạn lấy chuỗi sau làm đầu vào, thì ___
chỉ ra tất cả các vị trí X
phải có thể kết thúc ở đầu ra:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Nếu ngôn ngữ của bạn thiếu trình tạo số ngẫu nhiên tích hợp hoặc bạn không muốn sử dụng nó, bạn có thể lấy một giá trị hạt giống bổ sung làm đầu vào và triển khai RNG phù hợp của riêng bạn bằng cách sử dụng hạt giống. Trang này có thể hữu ích cho việc đó.
Bất kể phân phối thực tế mà giải pháp của bạn sử dụng là gì, nó gần như chắc chắn sẽ tạo ra giá trị tiếp theo sau một thời gian hữu hạn (nhưng tùy ý).
Vui lòng bao gồm một lời giải thích ngắn về cách thực hiện của bạn đáp ứng các yêu cầu này.
Chấm điểm
Đây là môn đánh gôn , vì vậy câu trả lời hợp lệ ngắn nhất - được đo bằng byte - 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
(Ngôn ngữ hiện không được hiển thị, nhưng đoạn mã yêu cầu và phân tích nó và tôi có thể thêm bảng xếp hạng ngôn ngữ trong tương lai.)