Tantangan:
Tulis fungsi atau program yang menerima daftar nilai boolean dan kembalikan semua rentang True.
Kasus uji:
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]]
Aturan:
- Anda dapat memilih bagaimana input dikodekan, misalnya daftar, array, string, dll.
- Keluaran harus dikodekan sebagai suka-suka daftar-suka atau string yang menunjukkan seperti itu, jadi array, daftar, tupel, matriks, vektor, dll.
- Nilai boolean harus dikodekan sebagai konstanta, tetapi jika tidak konversi sederhana T / F ke konstanta yang diinginkan diperbolehkan
- EDIT: eval atau serupa selama runtime IS diizinkan.
- Jangan lupa untuk menjelaskan bagaimana input diteruskan ke program / fungsi dan berikan input / output untuk kasus uji
- Konversi ke format input yang diinginkan tidak dihitung
- Celah standar tidak diijinkan
- Jika bahasa Anda memiliki fungsi untuk melakukan ini, itu tidak diizinkan
- Saya tidak akan menerima kiriman saya sendiri
- EDIT: Format output fleksibel. Jika tidak mencetak daftar atau serupa, nilai rentang harus dipisahkan oleh satu karakter non-numerik dan rentang terpisah juga.
Mencetak:
- Skor dalam byte, kecuali tidak sesuai dengan bahasa Anda (seperti codels di Piet)
- Skor terendah menang
Ada sedikit fleksibilitas dalam input dan output, tetapi solusi di mana T / F diganti dengan fungsi yang melakukan semua pekerjaan tidak diizinkan.
Debugging:
Jika Anda menulis milik Anda di Haskell atau dapat memanggilnya dari Haskell, berikut ini akan memeriksa fungsi / program Anda:
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)