Вызов:
Напишите функцию или программу, которая принимает список логических значений и возвращает все диапазоны True.
Тестовые случаи:
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]]
Правила:
- Вы можете выбрать способ кодирования ввода, например, список, массив, строку и т. Д.
- Выходные данные должны быть закодированы в виде списков подобных списков или строк, показывающих их, поэтому массивы, списки, кортежи, матрицы, векторы и т. Д.
- Логические значения должны быть закодированы как константы, но в противном случае допускается любое простое преобразование T / F в требуемые константы.
- РЕДАКТИРОВАТЬ: Eval или подобное во время выполнения IS разрешено.
- Не забудьте объяснить, как ввод передается программе / функции, и дать его ввод / вывод для тестовых случаев.
- Преобразование в желаемый формат ввода не учитывается
- Стандартные лазейки запрещены
- Если у вашего языка есть функция для этого, это не разрешено
- Я не приму мое собственное представление
- РЕДАКТИРОВАТЬ: Формат вывода является гибким. Если список не распечатывается и т. П., Значения диапазона должны быть разделены одним нечисловым символом, а также отдельными диапазонами.
Подсчет очков:
- Оценка в байтах, если не подходит для вашего языка (например, кодов в Piet)
- Наименьшее количество побед
Существует большая гибкость ввода и вывода, но решения, в которых T / F заменены функциями, выполняющими всю работу, запрещены.
Отладка:
Если вы пишете свой язык на Haskell или можете позвонить с него на Haskell, ваша функция / программа проверит следующее:
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)