Problem 114

最低3の長さを持つブロックを長さ50のユニット内に入れる方法は何通りあるか,という問題.ブロック同士の間は最低でも長さ1分あける必要があり,使用するブロックの長さは異なっていてもいい.
紙使ってパターンを列挙して考えたら割と簡単だった.1ms.

plus.block <- function(pat){
  new.pat <- rep(0, 51)
  new.pat[1] <- sum(pat[c(1, 4:51)])    # 0 & 2 over => 0
  new.pat[2:3] <- pat[1:2]              # 0 => 1 & 1 => 2
  new.pat[4:51] <- pat[3:50]            # 2:49 => 3:50
  return(new.pat)
}

block <- rep(0, 51)
block[c(1, 4)] <- 1

for(i in 4:50){
  block <- plus.block(block)
}
sum(block)