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 .
Mặc dù tôi có một loạt các ý tưởng được xếp hàng cho loạt bài này, những thách thức trong tương lai vẫn chưa được đặt ra. Nếu bạn có bất kỳ đề xuất nào, xin vui lòng cho tôi biết trên bài đăng hộp cát có liên quan .
Lỗ 4: Nghịch lý Bertrand
Các Bertrand nghịch lý là một vấn đề thú vị, trong đó cho thấy phương pháp cách khác nhau để chọn hợp âm ngẫu nhiên trong một vòng tròn có thể mang lại các bản phân phối khác nhau của hợp âm, trung điểm của họ và độ dài của họ.
Trong thử thách này, bạn phải tạo ra các hợp âm ngẫu nhiên của vòng tròn đơn vị, sử dụng phương thức "đúng", tức là tạo ra một phân phối các hợp âm bất biến theo tỷ lệ và dịch mã. Trong bài viết Wikipedia được liên kết, "Phương pháp 2" là một phương pháp như vậy.
Dưới đây là các quy tắc chính xác:
- Bạn nên lấy một số nguyên dương
N
xác định số lượng hợp âm sẽ được trả về. Đầu ra phải là một danh sách cácN
hợp âm, mỗi hợp âm được chỉ định là hai điểm trên vòng tròn đơn vị, được cho bởi góc cực của chúng theo radian. - Mã của bạn sẽ có thể trả về ít nhất 2 20 giá trị khác nhau cho mỗi hai góc . Nếu RNG khả dụng của bạn có phạm vi nhỏ hơn, trước tiên bạn phải xây dựng RNG với phạm vi đủ lớn trên đầu trang có sẵn hoặc bạn phải triển khai RNG phù hợp của riêng mình . Trang này có thể hữu ích cho việc đó.
- Việc phân phối các hợp âm phải không thể phân biệt được với hợp âm được tạo ra bởi "Phương pháp 2" trong bài viết Wikipedia được liên kết. Nếu bạn thực hiện một thuật toán khác để chọn hợp âm, vui lòng bao gồm bằng chứng về tính chính xác. Bất kỳ thuật toán nào bạn chọn để thực hiện, về mặt lý thuyết , nó phải có khả năng tạo ra bất kỳ hợp âm hợp lệ nào trong vòng tròn đơn vị (hạn chế các giới hạn của PRNG cơ bản hoặc các loại dữ liệu có độ chính xác giới hạn).
- Việc triển khai của bạn nên sử dụng và trả về các số có dấu phẩy động (rộng tối thiểu 32 bit) hoặc số điểm cố định (rộng tối thiểu 24 bit) và tất cả các phép toán số học phải chính xác trong tối đa 16 ulp .
Bạn có thể viết một chương trình đầy đủ hoặc một hàm và nhận đầu vào thông qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và tạo đầu ra thông qua STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Đầu ra có thể ở bất kỳ định dạng chuỗi hoặc danh sách thuận tiện, miễn là các số riêng biệt có thể phân biệt rõ ràng và tổng số của chúng luôn luôn là số chẵn.
Đây là mã golf, vì vậy bài nộp ngắn nhất (tính bằng byte) sẽ thắng. Và tất nhiên, lần gửi ngắn nhất cho mỗi người dùng cũng sẽ tham gia vào bảng xếp hạng tổng thể của loạt bài.
Hình dung
Bạn có thể sử dụng đoạn mã sau để kết xuất các dòng được tạo và kiểm tra phân phối của chúng. Đơn giản chỉ cần dán một danh sách các cặp góc vào vùng văn bản. Đoạn mã có thể xử lý hầu hết mọi định dạng danh sách, miễn là các số đó là số thập phân đơn giản (không có ký hiệu khoa học). Tôi khuyên bạn nên sử dụng ít nhất 1000 dòng để có ý tưởng tốt về phân phối. Tôi cũng đã cung cấp một số dữ liệu mẫu cho các phương pháp khác nhau được trình bày trong bài viết dưới đây.
Dữ liệu ví dụ được tạo bằng phương pháp 1.
Dữ liệu ví dụ được tạo bằng phương pháp 2.
Dữ liệu ví dụ được tạo bằng phương pháp 3.
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.)