Apa yang ditugaskan untuk apa?
Dalam tantangan ini Anda akan diberikan dua jenis, Adan Bdan menentukan apakah Adapat ditugaskan B, Bdapat ditugaskan A, atau tidak.
Sistem Jenis
(Saya akan gunakan tuntuk mewakili jenis apa pun)
Tipe Dasar
Jenis dasar diwakili oleh satu huruf kapital, seperti X. Mereka pada dasarnya adalah kelas.
Xditugaskan untukYapakahYsama dengan, atau kelas induk dariX.
Jenis persimpangan
Tipe titik-temu diwakili oleh intersect<X, Y>, dan dapat memiliki sejumlah tipe di antara titik-titik <(misalnya intersect<X, Y, Z, D, E>).
tditugaskan untukintersect<X1, X2... Xn>jikatditugaskan untuk semuaX.intersect<X1, X2... Xn>ditugaskantjika adaXyang ditugaskant.
Jenis Serikat
Jenis-jenis serikat diwakili oleh union<X, Y>dan dapat memiliki sejumlah jenis antara <(misalnya union<X, Y, Z, D, E>).
tditugaskan untukunion<X1, X2... Xn>jikatditugaskan untukX.union<X1, X2... Xn>ditugaskantjika semuaXditugaskan untukt.
Memasukkan
Anda akan menerima sebagai masukan:
- Hirarki kelas. Anda dapat memilih metode input untuk hirarki kelas. Anda bisa memasukkan representasi pohon, atau setiap jenis dengan daftar orang tuanya, atau apa pun yang secara akurat mewakili hierarki kelas.
- Dua jenis (input fleksibel, selama notasi konsisten, Anda dapat menerima jenis ini sesuka Anda).
Keluaran
Anda akan menampilkan salah satu dari tiga nilai yang konsisten dan berbeda, memanggil mereka X, Ydan Z. Mengingat dua jenis Adan B, keluaran Xjika Aini dialihkan ke B, keluaran Yjika Bini dialihkan ke Adan output Zsebaliknya (Jika Aadalah dialihkan ke Bdan Bmerupakan dialihkan untuk A, Anda mungkin keluaran X, Y, baik, atau nilai keempat).
Uji Kasus
Format:
# 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
Berikut ini tautan ke solusi Java yang tidak dikenali dan berfungsi yang dapat Anda gunakan untuk pengujian (dibutuhkan input dengan cara yang sama dengan kasus pengujian)
Ini adalah kode-golf, jadi paling tidak byte dalam setiap bahasa menang untuk bahasa itu!