พื้นหลัง
อลิซและบ็อบกำลังสร้างภาษากอล์ฟเพื่อชนะการท้าทาย PPCG ทุกครั้ง อลิซต้องการสร้างภาษาสองมิติเช่น> <> แต่บ๊อบชอบไวยากรณ์ prefix-infix เหมือนใน J ในการประนีประนอมพวกเขาตัดสินใจที่จะสร้างภาษา prefix-infix สองมิติ โปรแกรมแยกวิเคราะห์เป็นความเจ็บปวดที่จะเขียนและพวกเขาต้องการความช่วยเหลือจากคุณ!
ข้อกำหนดทางไวยากรณ์
ในภาษาของอลิซและบ๊อบมีตัวแปรซึ่งเป็นตัวแทนจากตัวอักษร ASCII ตัวพิมพ์เล็กa-z
และฟังก์ชั่นA-Z
ซึ่งจะแทนด้วยตัวอักษรตัวพิมพ์ใหญ่ ASCII สามารถเรียกใช้ฟังก์ชันด้วยหนึ่งหรือสองอาร์กิวเมนต์ โปรแกรมเป็นตารางสี่เหลี่ยมของตัวอักษรa-zA-Z
และช่องว่างและมุมบนด้านซ้ายไม่ต้องมีช่องว่าง นี่คือตัวอย่างของโปรแกรมที่ถูกต้อง:
F Gy
H
R x
เมื่อโปรแกรมจะแยกกันก็กลายเป็นแสดงออกของภาษาซี (C, Java, Python ... ) ที่มีตัวแปรตัวเดียวและบริการโทรฟังก์ชั่นในรูปแบบที่หรือ<func>(<arg>)
<func>(<arg1>,<arg2>)
ตัวอย่างเช่นโปรแกรมข้างต้นให้ผลลัพธ์ในนิพจน์นี้:
F(H(R(x)),G(x,y))
รายละเอียดของกระบวนการแยกวิเคราะห์เป็นดังนี้:
- ช่องว่างเป็นเพียงฟิลเลอร์ดังนั้นพวกเขาจึงไม่แยกวิเคราะห์
- ตัวแปรทุกตัว
a-z
จะถูกวิเคราะห์คำเหมือนตัวเองเสมอ - ทุกฟังก์ชั่น
A-Z
จะถูกแยกวิเคราะห์เป็นการเรียกใช้ฟังก์ชัน อาร์กิวเมนต์ของมันคือนิพจน์ที่ใกล้เคียงที่สุดที่อยู่ด้านล่างและทางขวาในกริดตามลำดับนี้ หากมีสิ่งใดสิ่งหนึ่งเหล่านี้อยู่ก็จะได้รับเป็นอาร์กิวเมนต์เพียงอย่างเดียว คุณสามารถสันนิษฐานได้ว่าฟังก์ชั่นทั้งหมดมีอาร์กิวเมนต์อย่างน้อยหนึ่งรายการในตาราง
ในตัวอย่างข้างต้นตัวแปรx
และการy
แยกวิเคราะห์เป็นตัวเอง ฟังก์ชันR
ไม่มีอะไรด้านล่างและx
ทางด้านขวาดังนั้นจึงแยกวิเคราะห์เป็นการเรียกใช้อาร์กิวเมนต์R(x)
เดียว ในทำนองเดียวกันH
จะแยกเป็นH(R(x))
เพราะมันมีR
ด้านล่าง ฟังก์ชั่นG
ที่มีx
อยู่ด้านล่างและy
ไปทางขวาของตนเพื่อให้มันแยกวิเคราะห์เป็นและในทำนองเดียวกันสำหรับG(x,y)
F
การแยกวิเคราะห์นิพจน์ที่มุมซ้ายบนเป็นผลลัพธ์ของกระบวนการแยกวิเคราะห์
อินพุตและเอาต์พุต
การป้อนข้อมูลของคุณเป็นอาร์เรย์อักขระที่ไม่ว่างเปล่า มันจะเป็นโปรแกรมที่ถูกต้องในภาษาของ Alice และ Bob แต่อาจมีนิพจน์ที่ไม่ได้ใช้ในผลลัพธ์ ผลลัพธ์ของคุณจะต้องมีการแยกวิเคราะห์การแสดงออกที่เกิดจากกระบวนการข้างต้น
กฎและการให้คะแนน
คุณสามารถเขียนโปรแกรมเต็มรูปแบบของฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต
กรณีทดสอบ
สิ่งเหล่านี้ถูกกำหนดในรูปแบบgrid <newline> expression
โดยมีเครื่องหมายขีดคั่น---
ระหว่างเคส รูปแบบ SE ปล่อยให้บางบรรทัดว่าง แต่ควรเติมด้วยช่องว่าง
x
x
---
x y
z
x
---
Fx
F(x)
---
Fx
y
F(y,x)
---
ABu
A(B(u))
---
G
H
k
G(H(k))
---
ABCA
x xs
DFk
A(x,B(D(F(k)),C(x,A(s))))
---
A B
C D x
A(C(D(x)),B(D(x)))
---
RT Hq
I xR k
R(I(x),T(H(R(k),q)))
---
A A A a
S A b
B C Dx
d X u f
A(B(d,C(D(f,x))),A(X(u),A(u,a)))
(A (B (D x)) (C (D x)))
ได้จะมีความเหมาะสมหรือมีการแก้ไขรูปแบบหรือไม่?