2009-03-23

1~4の数字が書かれたカードを並べるとき

以下のようにして総ての並べ方を列挙できる。

arr = [1,2,3,4]

arr.each do |a|
  (arr - [a]).each do |b|
    (arr - [a,b]).each do |c|
      (arr - [a,b,c]).each do |d|
        p [a,b,c,d]
      end
    end
  end
end

↑これを一般化したい。

1~Nのカードを与えられたときに

並べ方を列挙する関数スマートに書けないか。

再帰を使えば簡単にできそうなんだが……

  • javaで、しかも全然スマートじゃないけど、出来たぜ! public static void main(String[] args) { int nums=new int{1,2,3,4}; for(int i=0;i<nums.length*nums.length;i++)</p> { int[]...

  • def every_case(arr, *args) if(arr.length>1) arr.each do |elm| every_case(arr-[elm], args.push(elm)) args.pop end else p args.push(arr).flatten end end sample = (1..8).to_a every_case(sample)

  • できた。 def every_case(arr, *args) if(arr.length>1) arr.each do |elm| #

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん