5,000 を超える名前を含む 46K のテキスト ファイルである names.txt (右クリックして [リンク先を保存/対象を指定して保存]) を使用して、最初にアルファベット順に並べ替えます。次に、各名前のアルファベット値を計算し、この値にリスト内のアルファベット順の位置を掛けて名前スコアを取得します。
たとえば、リストをアルファベット順に並べ替えると、3 + 15 + 12 + 9 + 14 = 53 に相当する COLIN は、リストの 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);
}