Apa yang ditugaskan untuk apa?
Dalam tantangan ini Anda akan diberikan dua jenis, A
dan B
dan menentukan apakah A
dapat ditugaskan B
, B
dapat ditugaskan A
, atau tidak.
Sistem Jenis
(Saya akan gunakan t
untuk mewakili jenis apa pun)
Tipe Dasar
Jenis dasar diwakili oleh satu huruf kapital, seperti X
. Mereka pada dasarnya adalah kelas.
X
ditugaskan untukY
apakahY
sama 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>
).
t
ditugaskan untukintersect<X1, X2... Xn>
jikat
ditugaskan untuk semuaX
.intersect<X1, X2... Xn>
ditugaskant
jika adaX
yang ditugaskant
.
Jenis Serikat
Jenis-jenis serikat diwakili oleh union<X, Y>
dan dapat memiliki sejumlah jenis antara <
(misalnya union<X, Y, Z, D, E>
).
t
ditugaskan untukunion<X1, X2... Xn>
jikat
ditugaskan untukX
.union<X1, X2... Xn>
ditugaskant
jika semuaX
ditugaskan 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
, Y
dan Z
. Mengingat dua jenis A
dan B
, keluaran X
jika A
ini dialihkan ke B
, keluaran Y
jika B
ini dialihkan ke A
dan output Z
sebaliknya (Jika A
adalah dialihkan ke B
dan B
merupakan 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!