도전:
부울 값 목록을 승인하고 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를 원하는 상수로 간단하게 변환 할 수 있습니다.
- 편집 : 런타임 IS 동안 eval 또는 이와 유사합니다.
- 입력이 프로그램 / 기능에 전달되는 방법을 설명하고 테스트 케이스에 대한 입력 / 출력을 제공하는 것을 잊지 마십시오.
- 계산되지 않은 원하는 입력 형식으로 변환
- 표준 허점은 허용되지 않습니다
- 귀하의 언어가이를 수행 할 수있는 기능을 가지고 있다면
- 나는 내 자신의 제출을 수락하지 않습니다
- 편집 : 출력 형식이 유연합니다. 목록 또는 이와 유사한 것을 인쇄하지 않는 경우 범위 값은 숫자가 아닌 문자 하나와 별도의 범위로 구분해야합니다.
채점 :
- 언어에 맞지 않는 한 점수는 바이트 단위입니다 (예 : 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)