Wyzwanie:
Napisz funkcję lub program, który akceptuje listę wartości boolowskich i zwraca wszystkie zakresy wartości True.
Przypadki testowe:
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]]
Zasady:
- Możesz wybrać sposób kodowania danych wejściowych, np. Listę, tablicę, ciąg znaków itp.
- Dane wyjściowe muszą być zakodowane jako lista podobnych do list lub ciąg pokazujący takie, więc tablice, listy, krotki, macierze, wektory itp.
- Wartości boolowskie muszą być kodowane jako stałe, ale w przeciwnym razie dozwolona jest dowolna prosta konwersja T / F na pożądane stałe
- EDYCJA: ewaluacja lub podobne w czasie wykonywania jest dozwolone.
- Nie zapomnij wyjaśnić, w jaki sposób dane wejściowe są przekazywane do programu / funkcji i podaj dane wejściowe / wyjściowe dla przypadków testowych
- Konwersja do żądanego formatu wejściowego nie jest liczona
- Standardowe luki są niedozwolone
- Jeśli Twój język ma taką funkcję, jest to niedozwolone
- Nie zaakceptuję własnego zgłoszenia
- EDYCJA: Format wyjściowy jest elastyczny. Jeśli nie jest drukowana lista lub podobne, wartości zakresu muszą być oddzielone jednym znakiem nienumerycznym i oddzielnymi zakresami.
Punktacja:
- Wynik jest w bajtach, chyba że jest niezgodny z Twoim językiem (np. Kodery w języku Piet)
- Najniższy wynik wygrywa
Istnieje duża elastyczność wejścia i wyjścia, ale rozwiązania, w których T / F są zastępowane funkcjami wykonującymi całą pracę, są niedozwolone.
Debugowanie:
Jeśli piszesz swój w Haskell lub możesz wywołać go z Haskell, następujące funkcje sprawdzą twoją funkcję / program:
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)