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