나는 Project Euler 문제 59를 해결하려고합니다. 여기서는 3 자 키 (모두 소문자)를 가진 메시지를 xor-decrypt해야합니다. 내가하려고 키를 계속 기본적으로Haskell Integer 및 Int 유형; 변환이 작동하지 않습니다
decrypt :: [Int] -> [Int] -> [Char]
decrypt msg xs = map chr $ zipWith xor msg $ (concat . repeat) xs
try :: [[Int]] -> [Int] -> [Char]
try kys msg = head $ filter (isInfixOf "the") $ map (decrypt msg) kys
을 그들 중 하나가 메시지를 해독 할 때까지 : ASCII에서이 모든 키 세트가
let keys = [[a, b, c] | a <- [97..122], b <- [97..122], c <- [97..122]]
이며, 다음과 같은 기능을 함께 경험적 암호를 해독 할 의미 그 안에 "the"이 있습니다 (나는 메시지에 공통된 영어 단어가 있음을 압니다). 내가 try keys message
을 keys
및 message
을 결합하고 실행하지만 난 여전히 그것을 입력이 말한다 let keys = [map fromIntegral [a, b, c] | a <- [97..122], b <- 97..122],, c <- [97..122]]
말을해도, 지금
Couldn't match expected type `Int' with actual type `Integer'
Expected type: [[Int]]
Actual type: [[Integer]]
In the first argument of `try', namely `keys'
In the expression: try keys message
를 얻을 수 Integer
하지 Int
또한 내가 let keys = map (map fromIntegral) keys
을하려고 할 때, 나는 fromInteger
을도를 사용하는 경우. 무슨 일이야?
미래에이 질문을 읽는다면'let keys = [[a, b, c] | a Intral [97..122] :: [Int], b <-지도 fromIntegral [97..122] :: [Int], c <-지도 fromIntegral [97..122] :: [Int] ]'정확한 코드는 그것을 고쳤다. 또한, 고마워 함마, 나는이 형태의 형형 변환을 알지 못했습니다. – jclancy
@jclancy 리터럴 중 하나 이상에 대해 'Int'유형을 지정하거나'[97 .. 122]'목록 중 (적어도) 하나에 대해'[Int]'를 지정하면'[[ Int]]''keys'의 경우, fromIntegral은 필요 없습니다. –
아, 전에는 저에게 맞지 않는 어떤 이유로 오타 일 수도 있습니다. 그러면 가장 좋은 해결책은'let keys = [[a, b, c] | a <- [97..122], b <- [97..122], c <- [97..122]] :: [[Int]]' – jclancy