Có thể gán cái gì?
Trong thử thách này, bạn sẽ được cung cấp hai loại, A
và B
và xác định xem A
là chuyển nhượng tới B
, B
là có thể chuyển nhượng cho A
, hay không.
Hệ thống loại
(Tôi sẽ sử dụng t
để đại diện cho bất kỳ loại nào)
Các loại cơ bản
Các loại cơ bản được thể hiện bằng một chữ cái viết hoa duy nhất, chẳng hạn như X
. Chúng cơ bản là các lớp học.
X
được gán choY
nếuY
là giống như hoặc một lớp cha củaX
.
Các loại giao lộ
Các loại giao nhau được đại diện bởi intersect<X, Y>
và có thể có bất kỳ số loại nào giữa các <
(ví dụ intersect<X, Y, Z, D, E>
).
t
được gán chointersect<X1, X2... Xn>
nếut
được gán cho tất cảX
.intersect<X1, X2... Xn>
được gán chot
nếuX
có thể gán chot
.
Các loại liên minh
Các loại liên minh được đại diện bởi union<X, Y>
và có thể có bất kỳ số loại giữa các <
(ví dụ union<X, Y, Z, D, E>
).
t
được gán chounion<X1, X2... Xn>
nếut
được gán cho bất kỳX
.union<X1, X2... Xn>
được gán chot
nếu tất cảX
được gán chot
.
Đầu vào
Bạn sẽ nhận được như là đầu vào:
- Hệ thống phân cấp lớp. Bạn có thể chọn phương thức nhập liệu cho hệ thống phân cấp lớp. Bạn có thể nhập một đại diện của một cây, hoặc mỗi loại với một danh sách cha mẹ của nó hoặc bất cứ thứ gì khác thể hiện chính xác hệ thống phân cấp lớp.
- Hai loại (đầu vào là linh hoạt, miễn là ký hiệu phù hợp, bạn có thể nhận được các loại này theo cách bạn muốn).
Đầu ra
Bạn sẽ một đầu ra trong ba giá trị nhất quán và rõ ràng, gọi cho họ X
, Y
và Z
. Với hai loại A
và B
, sản lượng X
nếu A
là chuyển nhượng tới B
, sản lượng Y
nếu B
là chuyển nhượng tới A
và đầu ra Z
khác (Nếu A
là chuyển nhượng tới B
và B
là chuyển nhượng để A
, bạn có thể đầu ra X
, Y
cả hai, hoặc một giá trị thứ tư).
Các trường hợp thử nghiệm
Định dạng:
# 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
Đây là một liên kết đến một giải pháp Java không được làm việc mà bạn có thể sử dụng để thử nghiệm (nó nhận đầu vào giống như các trường hợp thử nghiệm)
Đây là môn đánh gôn, do đó, ít byte nhất trong mỗi ngôn ngữ sẽ giành chiến thắng cho ngôn ngữ đó!