Défi:
Écrivez une fonction ou un programme qui accepte une liste de valeurs booléennes et retourne toutes les plages de True.
Cas de test:
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]]
Règles:
- Vous pouvez choisir la façon dont l'entrée est codée, par exemple une liste, un tableau, une chaîne, etc.
- La sortie doit être codée comme une liste de listes ou comme une chaîne qui les affiche, donc des tableaux, des listes, des tuples, des matrices, des vecteurs, etc.
- Les valeurs booléennes doivent être codées sous forme de constantes, mais sinon, toute simple conversion de T / F en constantes souhaitées est autorisée
- EDIT: eval ou similaire pendant l'exécution EST autorisé.
- N'oubliez pas d'expliquer comment l'entrée est transmise au programme / fonction et donnez son entrée / sortie pour les cas de test
- Conversion au format d'entrée souhaité non compté
- Les failles standard sont interdites
- Si votre langue a une fonction pour ce faire, ce n'est pas autorisé
- Je n'accepterai pas ma propre soumission
- EDIT: le format de sortie est flexible. Si vous n'imprimez pas de liste ou similaire, les valeurs de plage doivent être séparées par un caractère non numérique et des plages distinctes également.
Notation:
- Le score est en octets, sauf s'il ne convient pas à votre langue (comme les codels dans Piet)
- Le score le plus bas gagne
Il y a une bonne flexibilité en entrée et en sortie, mais les solutions où T / F sont remplacées par des fonctions qui font tout le travail sont interdites.
Débogage:
Si vous écrivez le vôtre dans Haskell ou si vous pouvez l'appeler depuis Haskell, ce qui suit vérifiera votre fonction / programme:
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)