「CodeIQ 7 を数える」を任意の数字の個数を数えることができるように,再帰関数として定義した。
count2 = function(s, n) {
if (nchar(s) == 1) {
return((as.integer(s) >= n)+0)
} else {
left = as.integer(substring(s, 1, 1))
s = substring(s, 2, nchar(s))
count = left*nchar(s)*10^(nchar(s)-1) - (n == 0)*10^(nchar(s))
if (left == n) {
count = count + as.integer(s)+1
} else if (left > n) {
count = count + 10^nchar(s)
}
return(count + Recall(s, n))
}
}
count = function(s, n) {
sum(unlist(strsplit(as.character(0:as.integer(s)), "")) == n)
}
> count2("649", 1)
[1] 235
> count("649", 1)
[1] 235
> count2("3649", 0)
[1] 1025
> count("3649", 0)
[1] 1025
これをベースにして他の問題を解こう。
※コメント投稿者のブログIDはブログ作成者のみに通知されます