我已经开始在Project Euler上提出有关名称列表的问题,这些名称需要替换为字母表中的相应位置。在Problem 22我需要替换,带有数字的字母:
names = ["MARY","PATRICIA","LINDA"....
replace = ??????
char2num a = map replace a
score (a,b) = a * (sum $ map char2num b)
answer = sum $ map score (zip [1..] (sort names))
我找不到的是如何将字符替换为字母表中的位置。我怎样才能做一些替换功能(最好不是正则表达式)?
答案 0 :(得分:11)
ord
模块中的Data.Char
函数为每个字符提供整数代码。鉴于此,这将是您正在寻找的功能:
import Data.Char
replace :: Char -> Int
replace c = ord c - ord 'A' + 1
我不确定ord c
是否会返回字符或unicode代码点的ASCII代码,或者结果是否依赖于机器。要从中抽象出来,我们只需从结果中减去'A'
的代码,然后添加1
,因为我们希望字母表从1
而不是0
开始。
找到找到这样一个函数的简单方法是Hoogle
在那里,您可以通过输入其类型来搜索标准Haskell包中的函数。在这种情况下,ord
是搜索Char -> Int
时的第二个结果。