整数を分離する


21

前書き

トポロジーとして知られる数学の分野では、分離公理と呼ばれるものがあります。直感的に、のセットXとサブセットのコレクションがありX、これらをプロパティと考えることができます。Xプロパティに基づいてすべてのアイテムを区別できる場合、システムは十分に分離されています。分離公理はこの考えを形式化します。この課題でのタスクは、指定された3つの分離公理Xとプロパティのリストを確認することです。

入力

入力は整数n ≥ 2であり、整数のリストのリストTです。の整数はTから描画されX = [0, 1, ..., n-1]ます。のリストはT空でソートされていない場合がありますが、重複は含まれません。

出力

出力は4つの文字列の1つであり、3つの分離公理によって決定され、それぞれが最後のものよりも強力です。他の公理もありますが、簡単にするためにこれらを使用します。

  • すべてのdistinct xおよびyinについてXTそのうちの1つだけを含むリストが存在するとします。次にX公理T0T満たします。
  • すべての明確なためと仮定xし、yX、そこに二つのリストが存在してT含まれているの一つ、xではなくy、その他に含まれていyますがありませんx。次にX公理T1T満たします。
  • 上記の2つのリストにも共通の要素が含まれていないとします。次にX公理T2T満たします。

あなたの出力は次のいずれかであるT2T1T0またはTS、(保持している上記の条件のどれに応じて、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

@TimmyD、いいえ。最初のテストケースを参照してください。0 []与える必要がありますT2
ピーターテイラー

@PeterTaylor Aaaahhhhhhhh。おかげで、それは非常に役立ちます。
AdmBorkBork

分離可能性の意味のすばらしい説明!
ルイスメンドー

@LuisMendo奇妙な用語アラート:これらは分離公理であり、T2を満たすトポロジ空間は分離と呼ばれることもありますが、分離可能性は完全に別のものです。
デニス

回答:


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

競争がない場合、この賞金はあなたの答えになります。おめでとうございます!
ズガルブ

いくつかの空きバイト-交換するfオペレータ名によって、および置換p(x%y)(x%y)によってp(x%y)$x%y。ところで、いい仕事です!
誇りに思ってhaskeller
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.