무엇에 할당 할 수 있습니까?
이 문제에서 당신은 두 가지 유형 주어진 것이다 A
및 B
및 있는지 확인 A
에 할당 할 것입니다 B
, B
에 할당 할 A
, 또는 둘 다.
타입 시스템
( t
모든 유형을 나타내는 데 사용 합니다)
기본 유형
기본 유형은과 같은 단일 대문자로 표시됩니다 X
. 그들은 기본적으로 수업입니다.
X
Y
if 가와Y
같거나 부모 클래스 인에 할당 할 수 있습니다X
.
교차로 유형
교차점 유형은로 표시되며 intersect<X, Y>
의 사이 <
(예 :) 사이에 여러 유형이있을 수 있습니다 intersect<X, Y, Z, D, E>
.
t
에 할당 할intersect<X1, X2... Xn>
경우t
모든 할당입니다X
.intersect<X1, X2... Xn>
에 할당 할t
수있는 경우X
에 할당 할 수t
있습니다.
연합 유형
공용체 유형은로 표시되며 union<X, Y>
사이에 임의의 수의 유형을 가질 수 있습니다 <
(예 :) 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 솔루션에 대한 링크입니다 (테스트 케이스와 동일한 방식으로 입력이 필요함 ).
이것은 코드 골프이므로 각 언어의 최소 바이트가 해당 언어에서 승리합니다!