Co można przypisać do czego?
W tym wyzwaniu otrzymasz dwa typy Ai określisz, Bczy Amożna je przypisać B, czy Bmożna przypisać A, czy nie.
System typów
(Użyję tdo reprezentowania dowolnego typu)
Podstawowe typy
Typy podstawowe są reprezentowane przez jedną wielką literę, na przykład X. Są to w zasadzie klasy.
Xmożna przypisać,YjeśliYjest 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>.).
tmożna przypisać,intersect<X1, X2... Xn>jeślitmożna przypisać wszystkimX.intersect<X1, X2... Xn>można przypisać,tjeśli którykolwiekXjest 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>.).
tmożna przypisać,union<X1, X2... Xn>jeślitmożna przypisać do dowolnegoX.union<X1, X2... Xn>można przypisać,tjeśli wszyscyXsą 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, Yi Z. Biorąc pod uwagę dwa rodzaje Ai Bwyjście X, jeżeli Ajest przypisane do Bwyjście Y, jeżeli Bjest przypisane do Ai wyjście Zinaczej (jeżeli Ajest przypisane do Bi Bjest przypisane do A, możesz wyjścia X, Yzaró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!