무엇에 할당 할 수 있습니까?
이 문제에서 당신은 두 가지 유형 주어진 것이다 A및 B및 있는지 확인 A에 할당 할 것입니다 B, B에 할당 할 A, 또는 둘 다.
타입 시스템
( t모든 유형을 나타내는 데 사용 합니다)
기본 유형
기본 유형은과 같은 단일 대문자로 표시됩니다 X. 그들은 기본적으로 수업입니다.
XYif 가와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 솔루션에 대한 링크입니다 (테스트 케이스와 동일한 방식으로 입력이 필요함 ).
이것은 코드 골프이므로 각 언어의 최소 바이트가 해당 언어에서 승리합니다!