ローマ数字を書き直し、文字数をどれだけ減らせるかという問題。
390ms。Problem 88に比べたら全然簡単。
roman <- read.table(file="roman.txt",stringsAs=F)[[1]] roman.t <- c(CM = "900 ", CD = "400 ", M = "1000 ", D = "500 ", XC = "90 ", XL = "40 ", C = "100 ", L = "50 ", IX = "9 ", IV = "4 ", X = "10 ", V = "5 ", I = "1 ") r2n <- function(ro){ for(i in 1:13) ro <- gsub(names(roman.t[i]), roman.t[i], ro) sum(as.numeric(unlist(strsplit(ro, " ")))) } rom.min <- c(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) rom.chc <- c( 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1) n2cc <- function(n){ cc <- 0 for(i in 1:13){ while(n >= rom.min[i]){ n <- n - rom.min[i] cc <- cc+rom.chc[i] } } cc } cutcn <- function(ro){ ori <- length(unlist(strsplit(ro, ""))) newr <- n2cc(r2n(ro)) ori - newr } sum(mapply(cutcn, roman))
まあ多少強引な気もするけど。