Nếu bạn đã đọc cuốn sách Liên hệ của Carl Sagan, thử thách này có vẻ quen thuộc với bạn.
Cho đầu vào của một tập hợp các phương trình toán học bao gồm một số, một toán tử chưa biết, một số khác và kết quả, suy ra toán tử nào biểu diễn phép cộng, phép trừ, phép nhân hoặc phép chia.
Mỗi phương trình đầu vào sẽ luôn bao gồm
- một số nguyên không âm
- một trong các chữ cái
A
,B
,C
, hoặcD
- một số nguyên không âm khác
- nhân vật
=
- một số nguyên không âm cuối cùng
liên kết với nhau. Ví dụ, một đầu vào có thể là 1A2=3
, từ đó bạn có thể suy ra A
đại diện cho bổ sung. Mỗi số nguyên sẽ thỏa mãn 0 ≤ x ≤ 1,000
.
Tuy nhiên, nó không phải lúc nào cũng đơn giản như vậy. Có thể có sự mơ hồ giữa:
5A0=5
: cộng / trừ1A1=1
: nhân / chia0A5=0
: nhân / chia2A2=4
: cộng / nhân4A2=2
: phép trừ / chia0A0=0
: cộng / trừ / nhân
và như thế. Thách thức là sử dụng khả năng này để thu hẹp các lựa chọn, kết hợp với quá trình loại bỏ, để tìm ra toán tử mà mỗi chữ cái thể hiện. (Sẽ luôn có ít nhất một phương trình đầu vào và sẽ luôn luôn có thể khớp một cách rõ ràng, duy nhất khớp từng chữ cái được sử dụng trong đầu vào với một toán tử duy nhất.)
Ví dụ: giả sử đầu vào là các phương trình sau:
0A0=0
: điều này thu hẹp A xuống phép cộng, phép trừ hoặc phép nhân (không thể chia cho 0).10B0=10
: B phải là phép cộng hoặc phép trừ.5C5=10
: C rõ ràng là phép cộng, làm cho phép trừ B, tạo ra phép nhân A.
Do đó, đầu ra cho các phương trình đầu vào này phải khớp A
với *
, B
với -
và C
với +
.
Đầu vào có thể được cung cấp dưới dạng một chuỗi được phân tách bằng khoảng trắng / dấu phẩy hoặc một chuỗi các chuỗi, mỗi chuỗi đại diện cho một phương trình. Đầu ra có thể là một chuỗi đơn ( "A*B-C+"
), một mảng ( ["A*", "B-", "C+"]
) hoặc một mảng 2D từ điển / giống như chính tả ( {"A": "*", ...}
hoặc [["A", "*"], ...]
).
Bạn có thể cho rằng một số sẽ không bao giờ được chia cho một số khác mà nó không chia hết cho (vì vậy, bạn không cần phải lo lắng về việc phân chia nên là dấu phẩy động hay bị cắt cụt).
Vì đây là mã golf , mã ngắn nhất tính bằng byte sẽ thắng.
Các trường hợp thử nghiệm:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/