क्या करने योग्य है?
इस चुनौती में आप दो प्रकार दिया जाएगा, 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
यहाँ एक काम कर रहे ungolfed जावा समाधान का एक लिंक है जिसे आप परीक्षण के लिए उपयोग कर सकते हैं (यह परीक्षण मामलों की तरह ही इनपुट लेता है)
यह कोड-गोल्फ है, प्रत्येक भाषा में कम से कम बाइट्स उस भाषा के लिए जीतता है!