分隔我的整数


21

介绍

在称为拓扑的数学领域中,有一些东西称为分离公理。直观地,您有的集合X和子集的集合X,我们可以将其视为属性。如果一个人可以X根据其属性来区分所有项目,则该系统可以很好地分开。分离公理正式化了这个想法。在此挑战中,您的任务是检查给定的三个分离公理X和属性列表。

输入项

您的输入是一个integer n ≥ 2,以及一个整数列表的列表T。中的整数T来自X = [0, 1, ..., n-1]。中的列表T可能为空且未排序,但不会包含重复项。

输出量

您的输出是由三个分离公理确定的四个字符串之一,每个公理都强于最后一个。还有其他公理,但是为了简单起见,我们坚持使用这些公理。

  • 假设对于in 中的所有unique x和,存在一个列表,其中恰好包含其中一个。然后和满足公理T0yXTXT
  • 假设对于所有in xyin X,都有两个列表T,其中一个包含x但不包含y,另一个包含y但不包含x。然后XT满足公理T1
  • 假设上面的两个列表也不包含公共元素。然后XT满足公理T2

你的输出中的一个T2T1T0TS,这取决于上述条件成立(TS手段它们都不做)。请注意,T2比T1强,T1比T0强,并且您应始终输出尽可能强的公理。

规则和计分

您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。

测试用例

2 [] -> TS
2 [[],[1]] -> T0
2 [[0],[1]] -> T2
3 [[0],[0,1,2],[1,2]] -> TS
3 [[],[0],[0,1],[2]] -> T0
3 [[0],[0,1],[2,1],[0,1,2]] -> T0
3 [[0],[0,1],[2,1],[2,0]] -> T1
6 [[0,2,4],[0,3,5],[1,2],[3,4,5]] -> TS
6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,4,5]] -> T0
6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,1],[3,4,5]] -> T1
6 [[0,1],[0,2,3],[1,4],[2,4],[2,3,5],[1,3],[4,5]] -> T2

输入n多余吗?在其余的挑战中,我没有看到它仅用于定义可以包含的元素T,所以它只是提供的快捷方式T.Maximum()吗?
AdmBorkBork '16

@TimmyD,不。请参阅第一个测试用例。0 []应该给T2
彼得·泰勒

@PeterTaylor Aaaahhhhhhhh。谢谢,这很有帮助。
AdmBorkBork,2016年

关于可分离性的重要解释!
路易斯·门多

@LuisMendo Weird术语警告:这些是分离公理,有时将满足T2的拓扑空间称为分离,但可分离性完全是另外一回事。
丹尼斯

Answers:


9

Haskell中,317个 209 174 168字节

函数f完成了任务。

(#)=elem
x?y=[1|a<-x,b<-y,not$any(#a)b]
f n l|t(++)="TS"|t zip="T0"|t(?)="T1"|1>0="T2"where
    t p=any null[p(x%y)(y%x)|x<-[0..n-1],y<-[0..x-1]]
    x%y=[z|z<-l,x#z,not$y#z]

测试:

main=do
    putStrLn $ f 2 []
    putStrLn $ f 2 [[],[1]]
    putStrLn $ f 2 [[0],[1]]
    putStrLn $ f 3 [[0],[0,1,2],[1,2]]
    putStrLn $ f 3 [[],[0],[0,1],[2]]
    putStrLn $ f 3 [[0],[0,1],[2,1],[0,1,2]]
    putStrLn $ f 3 [[0],[0,1],[2,1],[2,0]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[3,4,5]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,4,5]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,1],[3,4,5]]
    putStrLn $ f 6 [[0,1],[0,2,3],[1,4],[2,4],[2,3,5],[1,3],[4,5]]

输出:

TS
T0
T2
TS
T0
T0
T1
TS
T0
T1
T2

提供t功能作为输入是一个聪明的把戏!
Zgarb

在没有竞争的情况下,这笔赏金将归您所有。恭喜你!
Zgarb '16

一些免费字节-取代f由运营商名称,并替换p(x%y)(x%y)p(x%y)$x%y。顺便说一句,好工作!
骄傲的haskeller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.