Herausforderung:
Schreiben Sie eine Funktion oder ein Programm, das eine Liste von Booleschen Werten akzeptiert und alle Bereiche von True zurückgibt.
Testfälle:
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]]
Regeln:
- Sie können auswählen, wie die Eingabe codiert werden soll, z. B. eine Liste, ein Array, eine Zeichenfolge usw.
- Die Ausgabe muss in Form einer Liste oder einer Zeichenfolge codiert werden, die eine Liste enthält, also in Form von Arrays, Listen, Tupeln, Matrizen, Vektoren usw.
- Die Booleschen Werte müssen als Konstanten codiert werden, ansonsten ist jede einfache Konvertierung von T / F in gewünschte Konstanten zulässig
- EDIT: eval oder ähnliches zur Laufzeit ist erlaubt.
- Vergessen Sie nicht zu erklären, wie die Eingabe an das Programm / die Funktion übergeben wird, und geben Sie die Eingabe / Ausgabe für die Testfälle an
- Konvertierung in gewünschtes Eingabeformat nicht mitgezählt
- Standardlücken sind nicht zulässig
- Wenn Ihre Sprache dazu eine Funktion hat, ist dies nicht zulässig
- Ich werde meine eigene Vorlage nicht akzeptieren
- EDIT: Ausgabeformat ist flexibel. Wenn Sie keine Liste oder Ähnliches drucken, müssen die Bereichswerte durch ein nicht numerisches Zeichen und separate Bereiche getrennt werden.
Wertung:
- Die Bewertung erfolgt in Bytes, sofern dies nicht für Ihre Sprache ungeeignet ist (z. B. Codels in Piet).
- Die niedrigste Punktzahl gewinnt
Es gibt ein gutes Maß an Flexibilität bei der Eingabe und Ausgabe, aber Lösungen, bei denen T / F durch Funktionen ersetzt werden, die die gesamte Arbeit erledigen, sind nicht zulässig.
Debugging:
Wenn Sie in Haskell schreiben oder es von Haskell aus aufrufen können, überprüft Folgendes Ihre Funktion / Ihr Programm:
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)