Co można przypisać do czego?
W tym wyzwaniu otrzymasz dwa typy A
i określisz, B
czy A
można je przypisać B
, czy B
można przypisać A
, czy nie.
System typów
(Użyję t
do reprezentowania dowolnego typu)
Podstawowe typy
Typy podstawowe są reprezentowane przez jedną wielką literę, na przykład X
. Są to w zasadzie klasy.
X
można przypisać,Y
jeśliY
jest to ta sama klasa lub klasa nadrzędnaX
.
Rodzaje skrzyżowań
Typy skrzyżowań są reprezentowane przez intersect<X, Y>
i mogą mieć dowolną liczbę typów między <
znakami (np intersect<X, Y, Z, D, E>
.).
t
można przypisać,intersect<X1, X2... Xn>
jeślit
można przypisać wszystkimX
.intersect<X1, X2... Xn>
można przypisać,t
jeśli którykolwiekX
jest przypisanyt
.
Rodzaje Unii
Typy Unii są reprezentowane przez union<X, Y>
i mogą mieć dowolną liczbę typów między <
znakami (np union<X, Y, Z, D, E>
.).
t
można przypisać,union<X1, X2... Xn>
jeślit
można przypisać do dowolnegoX
.union<X1, X2... Xn>
można przypisać,t
jeśli wszyscyX
są przypisanit
.
Wejście
Otrzymasz jako dane wejściowe:
- Hierarchia klas. Możesz wybrać metodę wprowadzania danych dla hierarchii klas. Możesz wprowadzić reprezentację drzewa lub każdego typu z listą jego rodziców lub cokolwiek innego, co dokładnie reprezentuje hierarchię klas.
- Dwa typy (dane wejściowe są elastyczne, o ile notacja jest spójna, możesz otrzymywać te typy w dowolny sposób).
Wynik
Będziesz jedno wyjście z trzech spójnych i wyraźnych wartości, nazywamy je X
, Y
i Z
. Biorąc pod uwagę dwa rodzaje A
i B
wyjście X
, jeżeli A
jest przypisane do B
wyjście Y
, jeżeli B
jest przypisane do A
i wyjście Z
inaczej (jeżeli A
jest przypisane do B
i B
jest przypisane do A
, możesz wyjścia X
, Y
zarówno, lub wartość czwarty).
Przypadki testowe
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
Oto link do działającego nieakolowanego rozwiązania Java, którego można użyć do testowania (pobiera dane wejściowe w taki sam sposób jak przypadki testowe)
To jest golf golfowy, więc najmniej bajtów w każdym języku wygrywa dla tego języka!