java - Java 中的 Project Euler #22(关闭 7 364 934)

标签 java regex string

使用 names.txt(右键单击并“将链接/目标另存为...”),一个包含 5000 多个名字的 46K 文本文件,首先将其按字母顺序排序。然后计算出每个名称的字母值,将此值乘以其在列表中的字母位置以获得名称分数。

例如,当列表按字母顺序排序时,COLIN 的值为 3 + 15 + 12 + 9 + 14 = 53,是列表中的第 938 个名称。因此,COLIN 将获得 938 53 = 49714 的分数。

文件中所有姓名分数的总和是多少?

我得到的是 863833348,但正确答案是 871198282。我不确定哪里出了问题,我已经尝试了所有方法但无法找出问题所在。

代码:

public static void main(String args[]) throws IOException {

    String alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Pattern testRegEx=Pattern.compile("[^\\\"]\\w+[^\\\",]");

    String line;
    String filePath="//Users//painkillerfff//Documents//names.txt";
    BufferedReader readTextFile=new BufferedReader(new FileReader(filePath));

    List<String> nameList=new ArrayList<String>();
    while((line=readTextFile.readLine())!=null){
        //System.out.println(line);
        Matcher matcher=testRegEx.matcher(line);
        while(matcher.find()){
            nameList.add(matcher.group());
            //System.out.println(matcher.group());
        }
    }
    Collections.sort(nameList);

    long sumOfWords=0;
    long namePoint=0;
    long nameRank=1;
    for(String name: nameList){
        namePoint=0;
        for(int i=0;i<name.length();i++){
            namePoint+=alphabet.indexOf(name.charAt(i))+1;
        }
        namePoint=namePoint*nameRank;
        sumOfWords+=namePoint;
        nameRank++;
    }
    System.out.println("The Total Points is: "+sumOfWords);
}

最佳答案

您的正则表达式存在某种缺陷。逗号数显示有 5163 个名字,但你发布的有 5130 个。

帮助我理解正则表达式,我们可能会弄明白。

这是我的版本——不需要正则表达式。

    while ((line = readTextFile.readLine()) != null) {
        sb.append(line);
    }
    line = sb.toString();
    line = line.replace("\"", "");
    String[] a = line.split(",");
    System.out.println(a.length);

当然你应该使用真正的变量名,而不是a ;-)

编辑 - 我将您的正则表达式更改为

    Pattern testRegEx = Pattern.compile("\\w+");

它返回了 5163 个名字。

关于java - Java 中的 Project Euler #22(关闭 7 364 934),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463435/

相关文章:

java - 内存屏障和 java.util.concurrent.locks.Condition 示例

regex - JavaScript : split doesn't work in IE?

c - 初始化为空字符串的字符数组元素的值

java - 按位 & 0x3FF 有什么作用?

java - 如果java中的链接是404,如何不显示按钮?

regex - 如何使用Regex搜索不以另一个字符串开头的字符串

c++ - 字符串声明

Java - 公共(public)字符串(字符 [] 值)

java - 休息 API : Using @QueryParam to load data from MongoDB

Python 正则表达式 - 使用大量匹配项匹配换行符