อะไรที่กำหนดให้กับอะไร
ในความท้าทายนี้คุณจะได้รับสองประเภทAและBและตรวจสอบว่าAเป็นไปมอบหมายB, Bย่อมโอนไปAหรือไม่
ระบบประเภท
(ฉันจะใช้tเพื่อเป็นตัวแทนประเภทใด ๆ )
ประเภทพื้นฐาน
Xประเภทพื้นฐานจะถูกแทนด้วยอักษรตัวใหญ่เดียวเช่น พวกเขาเป็นชั้นเรียนโดยทั่วไป
Xย่อมโอนไปYถ้าเป็นอย่างใดอย่างหนึ่งเช่นเดียวกับหรือระดับผู้ปกครองของYX
ประเภทแยก
ประเภทการแยกจะถูกแทนด้วยintersect<X, Y>และสามารถมีประเภทจำนวนเท่าใดก็ได้ระหว่าง<'s (เช่นintersect<X, Y, Z, D, E>)
tสามารถมอบหมายได้intersect<X1, X2... Xn>หากtสามารถมอบหมายให้กับทุกคนXได้intersect<X1, X2... Xn>ย่อมโอนไปtถ้าเป็นไปมอบหมายXt
ประเภทสหภาพ
ประเภทสหภาพถูกแสดงโดยunion<X, Y>และสามารถมีจำนวนประเภทใดก็ได้ระหว่าง<'s (เช่นunion<X, Y, Z, D, E>)
tย่อมโอนไปunion<X1, X2... Xn>ถ้าเป็นมอบหมายใด ๆtXunion<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 ที่ไม่ได้ทำงานซึ่งคุณสามารถใช้สำหรับการทดสอบ (ใช้อินพุตในแบบเดียวกับกรณีทดสอบ)
นี่คือโค้ดกอล์ฟอย่างน้อยไบต์ในแต่ละภาษาชนะสำหรับภาษานั้น!