Giới thiệu
Forte là một ngôn ngữ bí truyền rất đặc biệt dựa trên khái niệm sửa đổi các giá trị của các con số. Trong số Forte không phải là hằng số mà là biến, bạn có thể sử dụng LET
hướng dẫn để gán giá trị mới cho chúng.
Ví dụ, sau khi thực hiện LET 2=4-1
từ bây giờ, 2
giả sử giá trị của 3
, điều đó có nghĩa là bất cứ khi nào giá trị 2
xuất hiện trong một biểu thức, nó sẽ được "thay thế" bằng 3
. Các biểu thức (1+1)*2
bây giờ sẽ đánh giá để 9
.
Hướng dẫn này trong Forte được sử dụng cả để lưu trữ thông tin và kiểm soát luồng (các dòng được đánh số và bằng cách thay đổi giá trị số của chúng, bạn có thể xác định thứ tự thực hiện của chúng). Trong thử thách này, chúng tôi sẽ không đối phó với khía cạnh thứ hai này.
Các thách thức
Bạn được yêu cầu viết một trình thông dịch cho một tập hợp con đơn giản của các LET
biểu thức của Forte .
Bạn sẽ nhận được như là một loạt các dòng theo ngữ pháp này:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Lưu ý: ngữ pháp này không hợp lệ Forte vì nó thiếu số dòng, LET và dấu ngoặc đơn (luôn luôn bắt buộc)
Đó là, bạn sẽ chỉ cần xử lý các phép tính tổng và gán giá trị cho các số. Dấu ngoặc đơn sẽ không xuất hiện trong đầu vào và mỗi biểu thức sẽ cần được đánh giá từ trái sang phải: coi chừng kết quả một phần bị ảnh hưởng bởi các định nghĩa lại!
Các số sẽ luôn là số nguyên không âm, tối đa giới hạn của kiểu số nguyên gốc của ngôn ngữ của bạn (hoặc 2 ^ 32, tùy theo giá trị nào cao hơn).
Đối với mỗi dòng, bạn nên xuất kết quả của biểu thức và gán kết quả này cho giá trị (có thể được gán lại) của số đầu tiên, điều này sẽ ảnh hưởng đến cách các dòng sau sẽ được diễn giải.
Đây là code-golf , mã ngắn nhất (tính bằng byte) sẽ thắng!
Các quy tắc khác
- Định dạng đầu vào rất linh hoạt, ví dụ bạn có thể lấy một chuỗi có dòng mới, danh sách các chuỗi, danh sách các số ... Tương tự với đầu ra, miễn là kết quả của từng biểu thức trong đó là gì đầu vào.
- Bạn có thể gửi một chức năng, một chương trình đầy đủ hoặc một giải pháp để được chạy trong môi trường REPL gọi nó một lần cho mỗi dòng.
- Các lỗ hổng tiêu chuẩn bị cấm, đặc biệt bạn không thể gọi một trình thông dịch Forte bên ngoài trong mã của mình.
Ví dụ
Đây là tất cả các phần của cùng một đầu vào. Sau mỗi dòng, đầu ra dự kiến liên quan đến dòng đó được hiển thị, đôi khi với một nhận xét cho biết việc gán lại có liên quan (không phải là một phần của đầu ra cần thiết).
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
là hợp lệ ("Số sẽ luôn là số nguyên không âm")
0
một số hợp lệ?