Neye atanabilir?
Bu meydan size iki tür verilen edilecek A
ve B
ve olmadığını belirlemek A
için atanabilir olan B
, B
atanabilir olan A
veya hiçbiri.
Tip Sistemi
( t
Herhangi 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.
X
atanabilir olupY
olmadığınıY
ya 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 .
t
atanabilir olupintersect<X1, X2... Xn>
olmadığınıt
herkese atanabilir olduğunuX
.intersect<X1, X2... Xn>
atanabilirt
iseX
, 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 .
t
atanabilir olupunion<X1, X2... Xn>
olmadığınıt
herhangi birine atanabilir olduğunuX
.union<X1, X2... Xn>
atanabilir olant
tüm eğerX
gö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
, Y
ve Z
. İki tip göz önüne alındığında A
ve B
çıkış, X
eğer A
atanabilir olduğunu B
, çıkış Y
ise B
atanabilir olduğunu A
ve çıkış Z
aksi (varsa A
atanabilir olduğunu B
ve B
atanabilir olan A
, olabilirsiniz çıktı X
, Y
veya 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!