Що можна віднести до чого?
У цих проблемах ви отримаєте два типи, A
а B
й визначити, A
є присвоюється B
, B
є присвоюється A
або ні.
Система типу
(Я буду використовувати t
для представлення будь-якого типу)
Основні типи
Основні типи представлені однією великою літерою, наприклад X
. Вони в основному є класами.
X
присвоюється,Y
якщоY
є або тим самим, або батьківський класX
.
Типи перетину
Типи перетину представлені intersect<X, Y>
і можуть мати будь-яку кількість типів між <
's (наприклад intersect<X, Y, Z, D, E>
).
t
присвоюється,intersect<X1, X2... Xn>
якщоt
призначається всімX
.intersect<X1, X2... Xn>
присвоюється,t
якщо такі можутьX
бути віднесеніt
.
Типи союзів
Типи союзів представлені union<X, Y>
і можуть мати будь-яку кількість типів між <
's (наприклад union<X, Y, Z, D, E>
).
t
присвоюється,union<X1, X2... Xn>
якщоt
присвоюється будь-якомуX
.union<X1, X2... Xn>
присвоюється,t
якщо всіX
призначеніt
.
Вхідні дані
Ви отримаєте як вхід:
- Ієрархія класів. Ви можете вибрати метод введення для ієрархії класів. Ви можете ввести подання дерева або кожного типу зі списком його батьків, або будь-чого іншого, що точно представляє ієрархію класів.
- Два типи (введення є гнучким, якщо позначення є послідовними, ви можете отримувати ці типи, як би не хотілося).
Вихідні дані
Ви виведе один з трьох послідовних і різних значень, називають їх X
, Y
і Z
. З огляду на два типу A
і B
, вихід , X
якщо A
це привласнюється B
, вихід , Y
якщо B
це привласнюється A
і вихід в Z
іншому випадку (якщо A
це присвоюється B
і B
є присвоюється A
, ви можете виводити X
, Y
як, або четверте значення).
Випробування
Формат:
# 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
Ось посилання на робоче Java-рішення, яке не використовується для тестування, яке ви можете використовувати для тестування (воно вимагає введення так само, як і тестові випадки)
Це код-гольф, тому найменше байт у кожній мові виграє за цю мову!