チャレンジ:
ブール値のリストを受け入れ、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が許可されます。
- 入力がプログラム/関数にどのように渡されるかを説明し、テストケースの入力/出力を与えることを忘れないでください
- カウントされない目的の入力形式への変換
- 標準的な抜け穴は許可されていません
- 言語にこれを行う機能がある場合、許可されていません
- 私は自分の提出を受け入れません
- 編集:出力形式は柔軟です。リストなどを印刷しない場合は、範囲の値を1つの数字以外の文字で区切り、範囲も区切る必要があります。
得点:
- 言語に合わない場合を除き、スコアはバイト単位です(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)