อะไรที่กำหนดให้กับอะไร
ในความท้าทายนี้คุณจะได้รับสองประเภทA
และB
และตรวจสอบว่าA
เป็นไปมอบหมายB
, B
ย่อมโอนไปA
หรือไม่
ระบบประเภท
(ฉันจะใช้t
เพื่อเป็นตัวแทนประเภทใด ๆ )
ประเภทพื้นฐาน
X
ประเภทพื้นฐานจะถูกแทนด้วยอักษรตัวใหญ่เดียวเช่น พวกเขาเป็นชั้นเรียนโดยทั่วไป
X
ย่อมโอนไปY
ถ้าเป็นอย่างใดอย่างหนึ่งเช่นเดียวกับหรือระดับผู้ปกครองของY
X
ประเภทแยก
ประเภทการแยกจะถูกแทนด้วยintersect<X, Y>
และสามารถมีประเภทจำนวนเท่าใดก็ได้ระหว่าง<
's (เช่นintersect<X, Y, Z, D, E>
)
t
สามารถมอบหมายได้intersect<X1, X2... Xn>
หากt
สามารถมอบหมายให้กับทุกคนX
ได้intersect<X1, X2... Xn>
ย่อมโอนไปt
ถ้าเป็นไปมอบหมายX
t
ประเภทสหภาพ
ประเภทสหภาพถูกแสดงโดยunion<X, Y>
และสามารถมีจำนวนประเภทใดก็ได้ระหว่าง<
's (เช่นunion<X, Y, Z, D, E>
)
t
ย่อมโอนไปunion<X1, X2... Xn>
ถ้าเป็นมอบหมายใด ๆt
X
union<X1, X2... Xn>
สามารถมอบหมายให้ได้t
หากทุกอย่างX
สามารถมอบหมายt
ได้
อินพุต
คุณจะได้รับเป็นอินพุต:
- ลำดับชั้นของชั้นเรียน คุณสามารถเลือกวิธีการป้อนข้อมูลสำหรับลำดับชั้นของคลาส คุณสามารถป้อนการแสดงทรีหรือแต่ละชนิดด้วยรายการของพาเรนต์หรือสิ่งอื่นที่แสดงถึงลำดับชั้นของคลาสได้อย่างถูกต้อง
- สองประเภท (อินพุตมีความยืดหยุ่นตราบใดที่สัญกรณ์สอดคล้องกันคุณอาจได้รับประเภทเหล่านี้ตามที่คุณต้องการ)
เอาท์พุต
คุณจะเป็นหนึ่งในการส่งออกของสามค่าที่สอดคล้องกันและแตกต่างกันเรียกพวกเขาX
, และY
Z
ป.ร. ให้ไว้สองประเภทA
และB
เอาท์พุทX
ถ้าA
เป็นมอบหมายเพื่อB
การส่งออกY
ถ้าB
เป็นไปมอบหมายA
และการส่งออกZ
เป็นอย่างอื่น (ถ้าA
เป็นไปมอบหมายB
และB
เป็นมอบหมายไปA
คุณอาจเอาท์พุทX
, Y
ทั้งสองหรือค่าสี่)
กรณีทดสอบ
รูปแบบ:
# of types
[type, parents...]
[type, parents...]
Type a
Type b
2
[A,B]
[B]
A
B
--
A is assignable to B
3
[A,B,C]
[B,C]
[C]
intersect<A,C>
A
--
A is assignable to intersect<A,C>
3
[A,B,C]
[B,C]
[C]
union<A,C>
A
--
A is assignable to union<A,C>
3
[A,B,C]
[B,C]
[C]
intersect<B,C>
A
--
A is assignable to intersect<B,C>
3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<union<A,T,X>,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<union<A,T,X>,intersect<A,B>,Y> are not assignable to each other
1
[A]
A
A
--
A is assignable to A
3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<A,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<A,intersect<A,B>,Y> are not assignable to each other
2
[A]
[B]
A
B
--
B and A are not assignable to each other
3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<union<A,X>,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<union<A,X>,intersect<A,B>,Y> are not assignable to each other
นี่คือลิงก์ไปยังโซลูชัน Java ที่ไม่ได้ทำงานซึ่งคุณสามารถใช้สำหรับการทดสอบ (ใช้อินพุตในแบบเดียวกับกรณีทดสอบ)
นี่คือโค้ดกอล์ฟอย่างน้อยไบต์ในแต่ละภาษาชนะสำหรับภาษานั้น!