Điều này thật thú vị! Tuy nhiên, chỉ với ba chữ số, cuộc vui đã kết thúc quá sớm. Thử thách này cũng tương tự, nhưng chúng tôi sẽ tiếp tục vui vẻ.
Các thách thức
In càng nhiều chữ số của Tỷ lệ vàng φ càng tốt. Tỷ lệ vàng được định nghĩa là số thỏa mãn φ = (+ 1) / và 100 chữ số đầu tiên được đưa ra bởi:
1.618033988749894848204586834365638117720309179805762862135448622705260462818902449707207204189391111375 ...
Thách thức này không phải là về điện toán! Đó là về việc in càng nhiều chữ số càng tốt mà không cần sử dụng bất kỳ phương pháp nào để thực hiện điều đó hai lần. Vì vậy, tìm nhiều cách sáng tạo để có được chữ số của bạn như bạn có thể!
Hạn chế
Chính nó, việc in các chữ số của sẽ hơi đơn giản, vì vậy đây là các quy tắc:
- Bạn phải xây dựng số theo thứ tự từ trái sang phải , bằng cách in từng mảnh hoặc bằng cách xây dựng một chuỗi từ trái sang phải và in nó ở cuối - bạn thậm chí có thể tạo ra một mảng các ký tự chữ số và sau đó nối nó và in nó, miễn là bạn làm theo thứ tự. Trong các quy tắc sau đây, "in" và "đầu ra" có thể đề cập đến bất kỳ quy trình nào trong số đó (ví dụ: nếu bạn đang xây dựng một chuỗi và chuỗi chứa
1.6
đó được tính là1.6
đã in). - Đối với mã của bạn, bạn nhận được ngân sách 15 ký tự cho mỗi chữ số . Thời gian không được tính vào ngân sách đó, nhưng cũng phải được in. Lưu ý rằng hạn chế chỉ trên tổng kích thước mã: bạn có thể sử dụng hơn 15 ký tự cho bất kỳ chữ số nào miễn là bạn không sử dụng nhiều hơn trung bình. Trên thực tế, bạn có thể tạo ra một "khoản nợ" bằng các ký tự và "trả hết" sau đó. Ví dụ để in
1.618
bạn có 60 ký tự. - Thư viện chuẩn bao gồm / nhập không được tính vào kích thước mã. Nhưng bạn không thể cung cấp cho những người bao gồm các bí danh tốc ký miễn phí!
- Bạn không được sử dụng chữ số bạn đang tạo, cũng như bất kỳ chữ số nào bạn đã in. Ví dụ,
1
có thể không xuất hiện trong mã nguồn của bạn, bởi vì đó là chữ số đầu tiên. Mã xuất ra8
trong1.618
có thể sử dụng bất kỳ hoặc tất cả các chữ số[0234579]
, nhưng không có[168]
. Với mục đích này, tất cả các chữ đó là tương đương với một đơn chữ số được đối xử như con số đó . Vì vậy, nếu ngôn ngữ của bạn có thể đại diện9
như'\t'
bạn không được phép sử dụng ở bất cứ đâu, nơi bạn không thể sử dụng9
thay thế. - Bạn không được tạo ra nhiều chữ số cùng một lúc. Có thể phân chia rõ ràng mã của bạn thành các khối tạo ra một chữ số một lần.
Bạn không được tham khảo bất kỳ hàm dựng sẵn nào , toán tử / boolean / bit-khôn ngoan / chuỗi, biến hoặc hằng mà bạn đã sử dụng trong mã tạo ra một chữ số trước đó. Các ngoại lệ là chuyển đổi số nguyên thành chuỗi, nối chuỗi và các chức năng in mà bạn có thể cần cho mỗi chữ số. Lưu ý rằng việc bạn đề cập đến bất kỳ tên tích hợp nào không quan trọng : chỉ vì bạn đặt bí danh
PI
cho cả haip
vàq
không có nghĩa là bạn có thể sử dụngp
một lần vàq
một lần. Tương tự như vậy, bạn được phép sử dụng tên hai lần nếu nó đề cập đến hai phần dựng sẵn khác nhau, như chuỗilength
và mảnglength
.Nếu ngôn ngữ lập trình của bạn không có chức năng, hãy sử dụng phán đoán tốt nhất của bạn về tương đương - ví dụ như đối với kịch bản bash, việc gọi các chương trình khác phải tuân theo các quy tắc áp đặt cho các chức năng
- Trình của bạn phải được viết bằng một ngôn ngữ duy nhất. Vì vậy, không thực thi trình thông dịch của ngôn ngữ khác để có quyền truy cập vào ngôn ngữ được tích hợp sẵn.
Hàm ý
Tất cả các điểm sau đây đều được ngụ ý bởi các quy tắc trên, nhưng tôi thêm chúng vào đây để tránh các câu hỏi đã xuất hiện trong hộp cát ::
- Bạn không được phép ghi đè lên các phần của đầu ra bằng cách in một số khoảng trống (thường
'\b'
) ở giữa. - Các vòng lặp tạo / xuất nhiều chữ số đều bị cấm. (Tuy nhiên, các vòng lặp tính toán một chữ số là tốt.)
- Sử dụng một phiên bản bị xáo trộn
(1 + √5)/2
hoặc chia các số Fibonacci để thu được nhiều hơn một chữ số đều bị cấm. - Bạn không thể xác định trước 10 chữ số và lưu trữ chúng trong 10 biến và sau đó chỉ tham chiếu đến các biến đó, bởi vì các tham chiếu biến đó không tạo ra chữ số - mã điền vào biến đó, vì vậy đây là vi phạm quy tắc 6.
- Thực tế, bạn không thể sử dụng lại bất kỳ kết quả nào trước đó (hoặc kết quả trung gian), vì điều đó có nghĩa là hai chữ số sẽ chia sẻ mã để được tạo .
- Mặt khác, bạn có thể sử dụng bất kỳ phương tiện nào (không phải hoàn toàn là toán học) để tạo ra các chữ số. (Và bạn nên!)
- Trong thực tế, không cần phải tính toán bất cứ điều gì, nếu bạn có thể rút ra các chữ số chính xác từ nhiều nơi khác nhau bằng thư viện tiêu chuẩn của mình.
- Bạn có thể sử dụng một toán tử nhiều lần trong khi tạo một chữ số, do đó,
2+2+2
trò chơi công bằng để tạo lần đầu tiên6
(mặc dù không chắc là ngắn nhất). - Bạn có thể sử dụng bất kỳ nghĩa đen nào thường xuyên như bạn muốn, bởi vì chúng không phải là hằng số tích hợp. Vì vậy, miễn là bạn không phải in
5
, bạn có thể có bao nhiêu5
mã trong mã của mình như bạn muốn. - Bạn không thể mã hóa đầu ra, vì điều đó sẽ liên quan đến việc sử dụng các chữ số bạn xuất ra.
Tóm lại: không sử dụng bất kỳ phương pháp tạo chữ số nào hai lần và không sử dụng chữ số bạn hiện đang xuất hoặc bất kỳ đã được in.
Nếu bạn phát hiện ra một lỗ hổng cho phép bạn có được một số điểm vô hạn (gần như), xin đừng phá hỏng thử thách bằng cách khai thác nó, nhưng hãy cho tôi biết để tôi có thể sửa lỗ hổng này mà không phá vỡ bất cứ điều gì.
Chấm điểm
Chương trình in số chữ số cao nhất sẽ thắng chính xác. Trong trường hợp hòa, mã ngắn hơn phá vỡ cà vạt.
Vui lòng thêm một phiên bản nhận xét không được xác định để xác định phần nào trong mã của bạn tạo ra chữ số nào.
PS: Nếu bất cứ ai đánh bại 100 chữ số ở trên, đây là một số chi tiết .
x = (x+1)/x
(hoặc x^2 = x+1
) (hoặc x^2-x+1
).