最低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)