Meydan okuma:
Boole değerlerinin listesini kabul eden ve True'in tüm aralıklarını döndüren bir işlev veya program yazın.
Test Durumları:
f [F] = []
f [T] = [[0,0]]
f [T,T,F,T] = [[0,1],[3,3]]
f [F,T,T,F,F,T,T,T] = [[1,2],[5,7]]
f [F,T,T,F,F,F,T,T,T,T] = [[1,2],[6,9]]
f [T,T,F,F,F,T,T,T,T,T,T,T,T,T,T,F] = [[0,1],[5,14]]
f [F,F,T,T,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T] = [[2,3],[12,19],[33,54],[93,94]]
Kurallar:
- Girişin nasıl kodlanacağını seçebilirsiniz, örneğin bir liste, dizi, dize vb.
- Çıktı, liste benzerlerine benzer bir liste veya böyle bir diziyi, listeyi, ipucunu, matrisi, vektörü, vb. Gösteren bir dize olarak kodlanmalıdır.
- Boole değerleri sabit olarak kodlanmalıdır, ancak aksi takdirde T / F'nin istenen sabitlere basit bir şekilde dönüştürülmesine izin verilir
- EDIT: çalışma zamanı IS izin verilirken eval veya benzeri.
- Girdilerin programa / işleve nasıl iletildiğini açıklamayı ve test durumlarında girdi / çıktı vermeyi unutmayınız.
- İstenilen giriş formatına dönüşüm sayılmaz
- Standart boşluklara izin verilmez
- Dilinizin bunu yapacak bir işlevi varsa, buna izin verilmez.
- Kendi gönderimi kabul etmeyeceğim
- EDIT: Çıkış formatı esnektir. Liste veya benzeri bir şey yazdırılmıyorsa, aralık değerleri sayısal olmayan bir karakterle ve ayrı aralıklarla ayrılmalıdır.
puanlama:
- Dilinize uygun olmadığı sürece puan bayt cinsindendir (Piet'deki kodlayıcılar gibi)
- En düşük puan kazanır
Girdi ve çıktıda bir miktar esneklik var, ancak T / F'nin yerine tüm işleri yapan işlevlerle değiştirilen çözümlere izin verilmiyor.
Hata ayıklama:
Sizinkini Haskell'e yazarsanız veya Haskell'den arayabilirseniz, işlevinizi / programınızı kontrol eder:
import Test.QuickCheck
tf = cycle [True,False]
gen l = foldl (++) [] $ map (\i -> [tf!!i | x<-[1..i]]) l
putIn (a,b) l = zipWith (||) l [(a <= p) && (p <= b) | p <- [0..length l]]
putAllIn rs len = foldr putIn [False|i<-[1..len]] rs
main = print $ quickCheck (check functionNameGoesHere)