Problem:
整数の和

0 から 9 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。n 個の数はおのおの 0 から 9 までとし、１つの組み合わせに同じ数字は使えません。たとえば、n が 3 で s が 6 のとき、3 個の数字の合計が 6 になる組み合わせは、

1 + 2 + 3 = 6

0 + 1 + 5 = 6

0 + 2 + 4 = 6

の 3 通りとなります。

Input

複数のデータセットが与えられます。各データセットに n (1 ≤ n ≤ 9) と s (0 ≤ s ≤ 100) が１つのスペースで区切られて１行に与えられます。n と s が共に 0 のとき入力の最後とします（この場合は処理せずにプログラムを終了する）。

データセットの数は 50 を超えません。

Output

各データセットに対して、n 個の整数の和が s になる組み合わせの数を１行に出力して下さい。

Sample Input

3 6
3 1
0 0

Output for the Sample Input

3
0

Solution in Ruby (judge verdict: Accepted)

class Integers
  def initialize
    @count = 0
    @sum = 0
    @digit = 0
    @results = []
    while val = $stdin.gets do
      n, sum = val.chomp.split(' ').map(&:to_i)
      if n == 0 && sum == 0 
        break
      end
      calc(n,sum)
    end

    @results.each do |s|
      puts s
    end
  end

  def calc(n, sum)
    @sum = sum
    @digit = n
    @count = 0
    0.upto(9) do |num|
      array = []
      array[array.size] = num
      value = sum_array(array)
      if value == @sum && 1 == @digit
        @count += 1
        break
      end
      tree(array.dup)
    end
    @results.push(@count)
  end

  def tree(array)
    size = array.size
    if size < @digit
      (array[-1]+1).upto(9) do |num|
        array[size] = num
        value = sum_array(array)
        break if value > @sum
        if value == @sum && array.size == @digit
          @count += 1
          break
        else
          tree(array.dup)
        end
      end
    end
  end

  def sum_array(array)
    array.inject(:+)
  end
end

i = Integers.new