Coding Challenge: Arrow-Up Notation
Lâu lắm rồi mình vẫn chưa ra các challenge cho mọi người ở diễn đàn để giải đố cho vui. Thôi, bắt đầu challenge nào! >.< >.<
Đề bài
Các bạn hầu như được dạy học về các phép cộng, trừ, nhân, chia trong toán học từ thời còn mài [spoiler]ass[/spoiler] trên ghế nhà trường rồi phải không nào? Bạn có thể thấy phép cộng lặp lại của sự kế tiếp. Tương tự như thế, phép nhân là lặp lại của phép cộng. Cao hơn nữa, phép lũy thừa là lặp lại của phép nhân. Không chỉ như thế, Knuth’s up-arrow notation còn trên cả lũy thừa nữa. Điểm qua vài ví dụ để các bạn hiểu vấn đề hơn.
phép toán “arrow-up” sử dụng dấu ↑
. Thí dụ:
**dùng ↑
có thể hiểu là một phép lũy thừa bình thường(các phép nhân lặp lại): **
2 ↑ 4 = ?
= 2 * (2 * (2 * 2))
= 2^4
= 16
dùng ↑↑
là để biểu thị lặp lại nhiều lần của ↑
:
2 ↑↑ 4 = ?
= 2 ↑ (2 ↑ (2 ↑ 2))
= 2^2^2^2
= 65536
tương tự khi dùng 3 lần dấu mũi tên:
2 ↑↑↑ 3 = ?
= 2 ↑↑ (2 ↑↑ 2)
= 2 ↑↑ (2 ↑ 2)
= 2 ↑↑ (2 ^ 2)
= 2 ↑↑ 4
= 2 ↑ (2 ↑ (2 ↑ 2))
= 2 ^ 2 ^ 2 ^ 2
= 65536
Hôm nay mình sẽ được các biểu thức sau để challenge:
5 ↑↑↑↑ 5
7 ↑↑↑↑↑ 3
-1 ↑↑↑ 3
1 ↑ 0
1 ↑↑ 0
12 ↑↑↑↑↑↑↑↑↑↑↑ 25
và khuyến khích đưa thêm ra các ví dụ khác
Credit
sauce: [2018-07-09] Challenge #365 [Easy] Up-arrow Notation
Như bình luận tại liên kết bạn đã đưa thì số 1, 2 và 6 hoàn toàn không đủ bộ nhớ để thực thi/lưu trữ phép toán này.
Bài làm bằng Java nhờ có sẵn lớp BigInteger: http://tpcg.io/DiIsb6
Viết bằng C# cũng có lớp BigInteger tương tự.
Javascript cũng có (github) nhưng chưa hoàn thiện.
Nhưng cho dù thế nào thì cũng không thể thực hiện phép toán quá lớn. Nhất là liên quan đến số mũ (pow).