Một đại diện chính xác kép của một số thập phân chỉ có thể đảm bảo độ chính xác của 15 chữ số thập phân, do đó pi được tính gần đúng như sau:
3.141592653589793
Bạn có thể thấy rằng chữ số 3
ở vị trí 1, 10, 16
, chữ số 1
ở vị trí, 2, 4
v.v.
Thử thách
Nhiệm vụ của bạn là tạo một chương trình hoặc hàm tạo một số kép ngẫu nhiên trong khoảng từ 0 đến 1 và ánh xạ các giá trị của số đó lên giá trị của pi. Bạn làm điều này bằng cách đặt các chữ số khác nhau trong các số ngẫu nhiên ở vị trí mà chữ số có trong pi. Nếu không tìm thấy chữ số trong số pi, bạn sẽ bỏ qua nó và mỗi chữ số trong số pi không có trong số ngẫu nhiên sẽ được đại diện bởi một x
. Mỗi giá trị chỉ có thể được sử dụng một lần, bắt đầu từ bên trái.
Một vài ví dụ có thể sẽ làm cho điều này rõ ràng hơn. Trong các ví dụ sau, số đầu tiên là pi, số thứ hai là số ngẫu nhiên và số cuối cùng là đầu ra mong muốn.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Quy tắc:
- Hàm không được nhận bất kỳ đầu vào nào (một ngoại lệ có thể được giải thích trong dấu đầu dòng 3)
- Đầu ra chỉ bao gồm chuỗi đầu ra, với một dòng mới tùy chọn (một khoảng trống duy nhất cũng được chấp nhận)
- Nếu chương trình của bạn không có giá trị Pi tích hợp và / hoặc RNG thì bạn có thể mã hóa Pi và lấy số ngẫu nhiên làm đầu vào. Bạn không thể mã hóa số ngẫu nhiên hoặc lấy Pi làm đầu vào.
- Cả giá trị được mã hóa cứng cho Pi và 15 chữ số ngẫu nhiên (bạn có thể bỏ qua
0.
vì bạn biết nó sẽ nằm trong khoảng từ 0 đến 1), sẽ được bao gồm trong số byte. - Nếu ngôn ngữ của bạn không có độ chính xác cần thiết, bạn có thể sử dụng ít độ chính xác hơn theo các hạn chế sau
- Các chữ số của Pi phải chính xác đến độ chính xác mà bạn có
- Bạn không thể xuất nhiều giá trị hơn mức bạn đảm bảo có chính xác, tức là bạn không thể xuất 15 chữ số nếu độ chính xác chỉ cho phép 8 số thập phân chính xác.
- Giá trị được mã hóa cứng của Pi sẽ được tính là 16 byte (bạn không cần dấu thập phân), ngay cả khi chương trình của bạn chỉ hỗ trợ 8 chữ số.
- Giá trị đầu vào cho số ngẫu nhiên sẽ được tính là 15 byte (bạn không cần
0.
. Điều này là do các ngôn ngữ có độ chính xác thấp nên không có lợi thế không công bằng. - Chương trình phải hỗ trợ 5 số thập phân chính xác (ít nhất).
- Chỉnh sửa: Để xác thực câu trả lời: Số ngẫu nhiên phải được in bằng cách nào đó, nhưng thao tác này không phải được bao gồm trong số byte. Vì vậy, ví dụ, nếu có thể chèn
print r
phần cuối của tập lệnh, phần đó sẽ không tăng điểm. - Bạn không thể trừ các byte nếu nó là một phần của hoạt động cần thiết khác. Tức là nếu mã là
print pi, r
, sau đó bạn chỉ có thể trừ, r
. - Nếu bạn phải chèn một số vị trí trong mã, vui lòng bao gồm cả hai phiên bản (phiên bản in số ngẫu nhiên và phiên bản không có nhận xét như:
_p
và_oNo
cần thiết để in số ngẫu nhiên._p
Xxx và_oNo
không yyy._p
và_oNo
sẽ không được bao gồm trong số byte.
Mã ngắn nhất trong byte thắng.
Bảng xếp hạng
Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một 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
Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:
## Perl, 43 + 2 (-p flag) = 45 bytes
Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
hay 0 <= random <= 1
?