Tôi đã duyệt esolang và tình cờ thấy ngôn ngữ này: https://github.com/catseye/Quylthulg .
Một điều thú vị về ngôn ngữ này là nó không sử dụng tiền tố, hậu tố hoặc infix, nó sử dụng cả ba từ này , gọi đó là ký hiệu "panfix".
Đây là một ví dụ. Để thể hiện infix bình thường 1+2
trong panfix, nó trở thành : +1+2+
. Lưu ý cách toán tử là cả trước, giữa và sau toán hạng. Một ví dụ khác là (1+2)*3
. Điều này trở thành *+1+2+*3*
. Lưu ý một lần nữa làm thế nào *
là ở cả ba nơi đối với toán hạng +1+2+
và 3
.
Các thách thức
Như bạn có thể đoán, nhiệm vụ của bạn trong thử thách này là chuyển đổi một biểu thức từ infix sang panfix.
Một vài điều rõ ràng:
- Bạn chỉ phải đối phó với bốn thao tác cơ bản:
+-*/
- Bạn sẽ không phải đối phó với các phiên bản đơn nhất của những phiên bản đó, chỉ là nhị phân
- Bạn phải đối phó với dấu ngoặc đơn
- Giả sử các quy tắc ưu tiên bình thường của
*/
sau đó+-
và tính kết hợp trái cho tất cả chúng. - Các số sẽ là số nguyên không âm
- Bạn có thể có một khoảng trắng ở cả đầu vào và đầu ra
Các trường hợp thử nghiệm
1+2 -> +1+2+
1+2+3 -> ++1+2++3+
(1+2)*3 -> *+1+2+*3*
10/2*5 -> */10/2/*5*
(5+3)*((9+18)/4-1) -> *+5+3+*-/+9+18+/4/-1-*
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!
S.split``
nên[...S]
, mặc dù nó thực sự có thể giúp phù hợp với/\d+|./g
mặt trận và thay vào đó làm việc trên đó.