Thông số kỹ thuật Mathemania:
Mỗi đoạn mã Mathemania bắt đầu bằng số 2
. Từ 2
, bạn có thể thực hiện các thao tác sau:
e
: Lũy thừa. Mặc định của lệnh này là bình phương số.f
: Yếu tố. Mặc định của lệnh này đang sử dụng giai thừa duy nhất trên số (using f on 2 = 2! = 2
).r
: Nguồn gốc. Mặc định của lệnh này là căn bậc hai số.c
: Chức năng trần.l
: Chức năng sàn.
Để tạo một số trong Mathemania, bạn phải xâu chuỗi các lệnh này, được thực hiện từ trái sang phải trên số đó 2
.
Ví dụ:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
Các e
, f
và r
các lệnh có thể được thay đổi bởi lệnh Mathemania thêm (mà cũng bắt đầu với 2
là "cơ sở" số của nó) để tạo exponentiations khác nhau, giai thừa và rễ bằng cách đặt dấu ngoặc sau khi các chức năng thay đổi và đặt các lệnh Mathemania bên trong nó.
Ví dụ: để lập phương cho một số thay vì bình phương nó, bạn có thể đặt lệnh 3
sau khi e
thích như vậy:
e(efrrc) -> cube a number, "efrrc" = 3
LƯU Ý: với mục đích của chúng tôi, lệnh giai thừa ( f
) bắt đầu bằng 2
một giai thừa. Vì vậy, nếu bạn làm f(efrrc)
, điều đó sẽ được đánh giá thành một nhân tử kép, không phải là một nhân tố ba.
Đối với n
-factorials (ví dụ: nhân đôi kép = 2 nhân tử, nhân tử ba = 3 nhân tố, v.v.), số cơ sở được nhân với số n
nhỏ hơn số đó và n
ít hơn số đó, cho đến khi số cuối cùng không thể bị trừ bởi n
không trở thành 0
hoặc tiêu cực.
Ví dụ:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Để biết thêm thông tin, xem tại đây .
Bạn có thể chèn nó vào bất cứ đâu và nó sẽ được Mathemania coi là một hàm duy nhất:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Bạn cũng được phép lồng những thứ này vào trong nhau:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Đối với một thông dịch viên của mã Mathemania, bấm vào đây (chúc mừng, @ BradGilbertb2gills!)
Bài tập:
Nhiệm vụ của bạn là tạo ra một chương trình, khi được cung cấp một số nguyên dương n
làm đầu vào, sẽ tạo ra một chương trình Mathemania mà khi được thực thi sẽ trả về n
.
Tuy nhiên, các chương trình Mathemania mà bạn tạo phải càng nhỏ (golfed) càng tốt, và điểm số cuối cùng của bạn được xác định bởi tổng số byte trong các chương trình Mathemania tạo của mẫu, đó là những số nguyên 10,000
để 10,100
. Điểm thấp nhất sẽ thắng.
Quy tắc và thông số kỹ thuật:
- Chương trình của bạn phải xuất ra một chương trình Mathemania hợp lệ cho bất kỳ số nguyên dương nào, nhưng chỉ các số giữa
10,000
và10,100
sẽ được kiểm tra. - Bạn không được phép xuất các chương trình Mathemania không dẫn đến số nguyên. Nếu bạn làm như vậy, chương trình của bạn bị loại.
- Đối với các lệnh
e
,f
vàr
, mã Mathemania bên trong những chức năng (ví dụe(efrrc)
, nơiefrrc
là mã bên trong hàm) phải đánh giá một số nguyên dương trên2
. Nếu chương trình của bạn không tuân theo quy tắc này, nó cũng bị loại. - Chương trình của bạn phải trả lại chương trình Mathemania cho bất kỳ một trong 101 số nguyên kiểm tra nào trong tối đa 30 phút trên máy tính xách tay hiện đại.
- Chương trình của bạn phải trả về cùng một giải pháp cho bất kỳ số nguyên nào mỗi khi nó được chạy. Ví dụ, khi một chương trình được cung cấp một đầu vào
5
và nó xuất raefrc
, nó phải xuất ra mỗi khi đầu vào5
được đưa ra. - Bạn không thể mã hóa bất kỳ giải pháp nào cho bất kỳ số nguyên dương nào.
- Để tối đa hóa tiềm năng chơi gôn trong đầu ra của bạn, chương trình của bạn sẽ có thể xử lý các số nguyên lớn tùy ý. Đó không phải là một yêu cầu, mặc dù may mắn nếu ngôn ngữ của bạn không hỗ trợ điều này.
Đây là metagolf , vì vậy điểm số thấp nhất sẽ thắng!
ef
ví dụ, mã có được phép "bỏ qua" không và chỉ xuất kết quả trước khi ef
thao tác?