Neye atanabilir?
Bu meydan size iki tür verilen edilecek Ave Bve olmadığını belirlemek Aiçin atanabilir olan B, Batanabilir olan Aveya hiçbiri.
Tip Sistemi
( tHerhangi bir türü temsil etmek için kullanacağım )
Temel tipler
Temel türler, tek bir büyük harfle gösterilir X. Temelde sınıflardır.
Xatanabilir olupYolmadığınıYya da aynı ya da bir ebeveyn sınıfıdırX.
Kavşak Çeşitleri
Kavşak tipleri 'ile temsil edilir intersect<X, Y>ve <' ler (örneğin intersect<X, Y, Z, D, E>) arasında herhangi bir sayıda tipe sahip olabilir .
tatanabilir olupintersect<X1, X2... Xn>olmadığınıtherkese atanabilir olduğunuX.intersect<X1, X2... Xn>atanabilirtiseX, olarak atanabilirt.
Birlik Türleri
Birlik türleri 'ile temsil edilir union<X, Y>ve <' s (örneğin union<X, Y, Z, D, E>) arasında herhangi bir sayıda türe sahip olabilir .
tatanabilir olupunion<X1, X2... Xn>olmadığınıtherhangi birine atanabilir olduğunuX.union<X1, X2... Xn>atanabilir olanttüm eğerXgöre atanabilirt.
Giriş
Giriş olarak alacaksınız:
- Sınıf hiyerarşisi. Sınıf hiyerarşisi için giriş yöntemini seçebilirsiniz. Bir ağacın temsilini veya her bir türü üst öğe listesiyle veya sınıf hiyerarşisini doğru bir şekilde temsil eden başka bir şeyle girebilirsiniz.
- İki tür (giriş esnektir, gösterim tutarlı olduğu sürece bu türleri istediğiniz gibi alabilirsiniz).
Çıktı
Üç tutarlı ve farklı değerlerin çıkış birini olacak, onları aramak X, Yve Z. İki tip göz önüne alındığında Ave Bçıkış, Xeğer Aatanabilir olduğunu B, çıkış Yise Batanabilir olduğunu Ave çıkış Zaksi (varsa Aatanabilir olduğunu Bve Batanabilir olan A, olabilirsiniz çıktı X, Yveya her ikisine birden dördüncü değer).
Test Durumları
Biçim:
# 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
İşte test için kullanabileceğiniz çalışmamış bir Java çözümünün bağlantısı (girişi test senaryolarıyla aynı şekilde alır)
Bu kod golf, bu yüzden her dilde en az bayt o dil için kazanır!