Sfida:
Scrivi una funzione o un programma che accetta un elenco di valori booleani e restituisce tutti gli intervalli di True.
Casi 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]]
Regole:
- È possibile scegliere la modalità di codifica dell'input, ad esempio un elenco, un array, una stringa, ecc.
- L'output deve essere codificato come un elenco simile a elenchi di like o una stringa che mostra tale, quindi matrici, elenchi, tuple, matrici, vettori, ecc.
- I valori booleani devono essere codificati come costanti, ma in caso contrario è consentita qualsiasi conversione semplice di T / F in costanti desiderate
- EDIT: è ammesso l' eval o simili durante il runtime.
- Non dimenticare di spiegare come l'input viene passato al programma / funzione e di fornire il suo input / output per i casi di test
- Conversione nel formato di input desiderato non conteggiato
- Le scappatoie standard non sono ammesse
- Se la tua lingua ha una funzione per farlo, non è permesso
- Non accetterò la mia richiesta
- EDIT: il formato di output è flessibile. Se non si stampa un elenco o simili, i valori di intervallo devono essere separati da un carattere non numerico e anche intervalli separati.
punteggio:
- Il punteggio è in byte, a meno che non sia adatto alla tua lingua (come i codici in Piet)
- Il punteggio più basso vince
C'è una buona flessibilità in input e output, ma le soluzioni in cui il T / F sono sostituite con funzioni che fanno tutto il lavoro sono vietate.
Debug:
Se scrivi il tuo in Haskell o puoi chiamarlo da Haskell, quanto segue controllerà la tua funzione / programma:
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)