image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ: 「50%の完成度で世に出す」時代の終わり, コンピュUSAの閉店とアップルストアの盛況, etc... | トップページ | doukaku.org の 自然数の分割 (その2) »

2007-12-15

doukaku.org の 自然数の分割

doukaku.org の 自然数の分割 を読んだ。

java, ruby, swi-prolog ですべて同じ出力を得るようにしてみた。

$ cat PartNumber.java
// See http://ja.doukaku.org/89/lang/java/
//    javac PartNumber.java
//    java -cp . PartNumber 5 3

public class PartNumber {
    public static void main(String[] args) throws Exception {
        part("", Integer.parseInt(args[0]), Integer.parseInt(args[1]));
    }
    private static void part(String s, int n, int m) {
        if (m == 1) {
            System.out.println("[" + s + n + "]");
        } else for (int i = n; i >= 0; i--) {
            part(s + i + ", ", n - i, m - 1);
        }
    }
}

$ cat PartNumber.rb
# http://ja.doukaku.org/89/lang/ruby/
#   ruby PartNumber.rb
#   jruby PartNumber.rb

def divNat(n, m, acc = [])
  if m == 1
    p acc << n
    return
  end
  n.downto(0) {|i|
    divNat(n-i, m-1, acc[0..-1] << i)
  }
end

divNat(5,3)

$ cat PartNumber.pl
% http://ja.doukaku.org/89/lang/prolog/
%   swipl -c PartNumber.pl

partNum(N, 1, [N]).
partNum(N, M, [J|L]) :- M > 1, M1 is M - 1,
    between(0, N, I), J is N - I, partNum(I, M1, L).

solve(N,M) :- forall(partNum(N, M, L), writeln(L)).

:- solve(5, 3).

$ java -cp . PartNumber 5 3
[5, 0, 0]
[4, 1, 0]
[4, 0, 1]
...
ruby PartNumber.rb      
[5, 0, 0]
[4, 1, 0]
[4, 0, 1]
...
$ swipl -s PartNumber.pl
[5, 0, 0]
[4, 1, 0]
[4, 0, 1]
...

erlang 版が、まだ dokkau,org には登録されていないな。
作れるかな?
ここでは、[4,1,0], [4,0,1] など組み合わせ的には同じものを区別している。
これらを同じとみなした場合の組み合わせとしての一覧出力するようにするには
どう書けば良い?

« ピックアップ: 「50%の完成度で世に出す」時代の終わり, コンピュUSAの閉店とアップルストアの盛況, etc... | トップページ | doukaku.org の 自然数の分割 (その2) »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/17375530

この記事へのトラックバック一覧です: doukaku.org の 自然数の分割 :

« ピックアップ: 「50%の完成度で世に出す」時代の終わり, コンピュUSAの閉店とアップルストアの盛況, etc... | トップページ | doukaku.org の 自然数の分割 (その2) »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク