道順を数えるどう書く?org 2番煎じ

Groovy

Re:道順を数える – No Programming, No Lifeを見て、僕もこの問題を解いてみた。

・・・で、早速挫折。文字列ではあるけれど、図形の解析、難しいですね。

問題文に「パターン数が分かれば、データ構造は何でもいいよ」とあるので木構造でといてみました。

def x = 3
def y = 4
def LEFT = 0
def DOWN = 1

def list = []
(x+y).times{
    list << [LEFT, DOWN]
}
def all = list.combinations().unique().findAll{ it.count(LEFT) == x }
def part = all.findAll{
    !(it[0..1].count(LEFT) == 1 && it[2] == DOWN)
}.findAll{
    !(it[0..3].count(LEFT) == 1 && it[4] == LEFT)
}.findAll{
    !(it[0..3].count(LEFT) == 2 && it[4] == LEFT)
}
println all.size()
println part.size()

これでいいのだ。

Groovy