내 정수를 분리


21

소개

토폴로지 라고 알려진 수학 분야에는 분리 공리 라고 불리는 것들이 있습니다. 직관적 으로의 속성 X집합으로 X생각할 수있는 의 하위 집합 모음과 집합이 있습니다. X속성 에 따라 모든 항목을 구분할 수 있으면 시스템이 잘 분리 됩니다. 분리 공리가이 아이디어를 공식화합니다. 이 과제에서는 주어진 세 가지 분리 공리 X와 속성 목록을 확인해야합니다.

입력

입력 값은 integer 이고 정수 n ≥ 2목록 T입니다. 의 정수는 T에서 가져옵니다 X = [0, 1, ..., n-1]. 의 목록 T이 비어 있거나 정렬되지 않았을 수 있지만 중복 항목은 포함되지 않습니다.

산출

출력은 3 개의 분리 공리에 의해 결정되는 4 개의 현 중 하나이며, 각각은 마지막보다 강합니다. 다른 공리가 있지만 단순성을 위해 이것들을 고수합니다.

  • 모든 distinct xyin에 대해 정확히 하나를 포함 X하는 목록이 있다고 가정하십시오 T. 다음 XT충족의 공리 T0 .
  • 모든 구분에 대한 것을 가정 x하고 yX, 거기에 두 개의리스트가 존재 T포함 하나가, x하지만를 y, 다른 하나는 포함 y하지만 x. 그런 XT충족 된 공리 T1 .
  • 위의 두 목록에도 공통 요소가 없다고 가정하십시오. 다음 XT충족의 공리 T2 .

출력에서의 하나이며 T2, T1, T0또는 TS위의 조건 중 어느 것이 (보유하지에 따라 TS수행 이들 수단 없음). T2는 T0보다 강한 T1보다 강력하므로 항상 가능한 가장 강한 공리를 출력해야합니다.

규칙과 득점

전체 프로그램이나 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점은 허용되지 않습니다.

테스트 사례

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

@TimmyD, 아니 첫 번째 테스트 사례를 참조하십시오. 0 []제공해야합니다 T2.
피터 테일러

@PeterTaylor Aaaahhhhhhhh. 고마워요.
AdmBorkBork

분리 가능성의 의미에 대한 훌륭한 설명!
Luis Mendo 2016 년

@LuisMendo 이상한 용어 경고 : 이들은 분리 공리이며, T2를 만족하는 토폴로지 공간은 분리 된 것으로 불리기도하지만 분리 성은 완전히 다른 것입니다.
데니스

답변:


9

하스켈 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

일부 사용 가능한 바이트- f연산자 이름으로 바꾸고 p(x%y)(x%y)로 바꿉니다 p(x%y)$x%y. 그건 그렇고, 좋은 일입니다!
자랑스런 Haskeller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.