Tam sayılarımı ayır


21

Giriş

Topoloji olarak bilinen matematik alanında, ayırma aksiyomları adı verilen şeyler vardır . Sezgisel olarak, özellikleri olarak düşünebileceğimiz bir küme Xve alt kümeleriniz var X. Sistem, Xözelliklerine göre tüm öğeleri ayırt edebiliyorsa iyi bir şekilde ayrılmıştır . Ayırma aksiyomları bu fikri biçimlendirir. Bu zorlu görevde sizin göreviniz verilen üç Xözellik ve aksiyom listesini kontrol etmektir.

Giriş

Girişleriniz bir tamsayı n ≥ 2ve bir tamsayı listesidir T. İçindeki tamsayılar Tçizilir X = [0, 1, ..., n-1]. İçindeki listeler Tboş ve sıralanmamış olabilir, ancak çoğaltmalar içermez.

Çıktı

Çıktınız, her biri öncekinden daha güçlü olan üç ayırma aksiyomu tarafından belirlenen dört diziden biridir. Başka aksiyomlar da var, ama basitlik için bunlara bağlıyız.

  • Diyelim ki herkes için xve yiçinde X, Ttam olarak bir tanesini içeren bir liste var . Sonra Xve Ttatmin aksiyomu T0 .
  • Diyelim ki hepsi için xve yiçinde X, Tbirinin içerdiği xancak içermeyen y, diğeri içerdiği yancak içermeyen iki liste bulunduğunu varsayalım x. Daha sonra Xve Ttatmin aksiyomu T1 .
  • Yukarıdaki iki listenin de ortak bir unsur içermediğini varsayalım. Daha sonra Xve Ttatmin aksiyomu T2 .

Çıktınız biridir T2, T1, T0veya TSyukarıdaki koşulların hangi (tutan bağlı olarak TSyapmak onları vasıta hiçbiri). T2'nin T1'den daha güçlü olduğunu, T0'dan daha güçlü olduğunu ve her zaman mümkün olan en güçlü aksiyomu çıkarmanız gerektiğini unutmayın.

Kurallar ve puanlama

Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez.

Test durumları

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

Giriş ngereksiz mi? Meselenin geri kalanında, hangi öğelerin olabileceğini tanımlamanın ötesinde kullanıldığını görmüyorum T, bu sadece kısaca öngörülen bir kısayol T.Maximum()mu?
AdmBorkBork

@TimmyD, hayır. İlk test senaryosuna bakınız. 0 []vermelisin T2.
Peter Taylor,

@ PeterTaylor Aaaahhhhhhhh. Teşekkürler, bu muazzam yardımcı olur.
AdmBorkBork

Ayrılabilirliğin ne anlama geldiğinin harika bir açıklaması!
Luis Mendo

@LuisMendo Garip terminoloji uyarı: Bu ayırma belitleri ve T2 kimi kez adlandırıldığı tatmin ayrılmış bir topolojik alanlarda ama ayrılabilirlik tamamen başka bir şeydir.
Dennis

Yanıtlar:


9

Haskell, 317 209 174 168 bayt

F işlevi işi yapar.

(#)=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]

testler:

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]]

çıktı:

TS
T0
T2
TS
T0
T0
T1
TS
T0
T1
T2

tGiriş olarak bir işlev vermek akıllıca bir numaradır!
Zgarb

Rekabet yoksa, bu ödül cevabınıza gider. Tebrikler!
Zgarb

bazı ücretsiz bayt - yerine fbir operatör adına göre ve yerine p(x%y)(x%y)göre p(x%y)$x%y. ve bu arada, iyi iş!
Gurur haskeller 12:16
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.