問
- 名前のリストが入ったテキストファイルを読み込み、ソートする。
- アルファベットを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