01/10/2018, 16:57

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

Trương Tấn Phát viết 19:03 ngày 01/10/2018

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).

Bài liên quan
0