Có thể gán cái gì?
Trong thử thách này, bạn sẽ được cung cấp hai loại, Avà Bvà xác định xem Alà chuyển nhượng tới B, Blà 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 choYnếuYlà 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 chotnếuXcó 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 chotnế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, Yvà Z. Với hai loại Avà B, sản lượng Xnếu Alà chuyển nhượng tới B, sản lượng Ynếu Blà chuyển nhượng tới Avà đầu ra Zkhác (Nếu Alà chuyển nhượng tới Bvà Blà chuyển nhượng để A, bạn có thể đầu ra X, Ycả 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ữ đó!