3
什么可以分配给什么?
有关 什么可以分配给什么? 在本次挑战中,您将获得两种类型,A并B确定A是可分配给B,B可分配给A还是都不分配。 类型系统 (我将t用来表示任何类型) 基本类型 基本类型用单个大写字母表示,例如X。它们基本上是类。 X是分配给Y如果Y是任一相同,或父类X。 交叉点类型 交集类型由表示intersect<X, Y>,并且在之间可以具有任意数量的类型<(例如intersect<X, Y, Z, D, E>)。 t可以分配给intersect<X1, X2... Xn>if t可以分配给all X。 intersect<X1, X2... Xn>是分配给t如有X可分配给t。 联合类型 联合类型由表示,union<X, Y>并且之间可以有任意多种类型<(例如union<X, Y, Z, D, E>)。 t可分配给union<X1, X2... Xn>if t,可分配给any 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, …