Project Euler Problem 22

Problem 22 - PukiWiki

  • 名前のリストが入ったテキストファイルを読み込み、ソートする。
  • アルファベットを1から26までの整数に対応付けてその和を計算し、さらに名前の順位を乗ずることで「名前のスコア」を算出する。
  • 例えばCOLINなら3 + 15 + 12 + 9 + 14 = 53で、順位は938なので、53*938=49714がCOLINのスコアになる。
  • 全ての名前のスコアの和を求めよ。

解答

データの読み込みと基本的な文字列操作と演算ができれば特に問題はない…。

ただ、"NA"がリスト中にあったので若干ハマった。

library(stringi)
f <- function(){
  s <- scan("Problem22/p022_names.txt", what = character(), sep = ",",
            na.strings = "")
  s <- sort(s)
  
  letters_table <- seq_along(LETTERS)
  names(letters_table) <- LETTERS
  
  result <- 0
  for(i in 1:length(s)){
    result <- result +
      sum(letters_table[stri_split_boundaries(s[i], type="character")[[1]]])*i
  }
  result
}
f()
microbenchmark::microbenchmark(f())
Unit: milliseconds
 expr      min       lq     mean   median       uq      max neval
  f() 137.1232 144.7277 148.5334 148.5202 152.1012 165.7678   100