• 締切済み

パターン抽出

a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = [a, b, c, d] 上記みたいな配列があったとして1a, 1bみたいな組み合わせのすべてのパターンを取り出すアルゴリズムを考えています。 1配列内の数は不定、配列自体の数も不定という条件です。 たとえばここにc = [z, y, x]という配列が加わると 1az, 1ay, 1ax みたいな感じで抽出します。 ですが、あまりいい方法が浮かびません。再帰を使えばいいというのはわかるのですが数が不定というのが複雑でイメージがわきません。 いいパターン抽出のやりかたがあれば教えてください。 お願いします。

  • Ruby
  • 回答数1
  • ありがとう数9

みんなの回答

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.1

こんな感じでどうでしょうか。 def foo(array, idx = 0, pre_str = "") unless first = array[idx] puts pre_str return end first.each do |i| str = pre_str + i foo(array, idx+1, str) end end a = ["1","2","3","4"] b = ["a","b","c"] c = ["x","y","z"] ary = [] ary.push(a) ary.push(b) ary.push(c) foo(ary)

関連するQ&A

  • Excelで、数字の組み合わせの合計が一定数になるパターンの抽出

    Excelで、数字の組み合わせの合計が一定数になるパターンの抽出 たとえば、つぎの配列があるとします。 A(5){10,20,30,40,50}要素数が5つ1..5、{}は内容 このなかで二つ以上の組み合わせで和が60になる組み合わせを出したいとします 答えは パタン1:1,2,3  /* 10+20+30 */ パタン2:1,5 /* 10+50 */ パタン3:2,4 /* 20+40 */ 同じような処理をExcelの関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • アクセス フォーム内で、パターン名から複数条件の組み合わせにて自動抽出

    アクセス フォーム内で、パターン名から複数条件の組み合わせにて自動抽出を行い。 その後さらにそこから条件抽出を行う方法について教えてください。 条件項目はパターン(個別条件の組み合わせ)、a,b,c,d(個別条件)とあるとして パターン=1:a=1,c=3,d=4 a=1,c=2,d=2 a=2,b=3,c=5 パターン=2:a=3,c=3,c=3 a=2,c=4,d=1 のような場合、1つのフォームでパターン、a,b,c,dを選択し条件抽出を行う方法を教えてください。 ☆なるべく複数クエリを使用したくはないです。できればパターン表テーブルを利用したいです。 以上、よろしくお願いします!

  • 複数の配列の全ての組み合わせを表示する方法

    複数の配列が定義されており、その各々から一つづつ要素を選んで出来る組み合わせの全てを表示したいのですが、その際に、foreachを単にネストするのではなく、より効率的方法や関数は何かありませんでしょうか。 たとえば、 @list_a = qw(1 2 3 4) @list_b = qw(a b c d) @list_c = qw(x y z) の3つの配列の全て組み合わせ、例えば、 1ax 1ay 1az 1bx 1by 1bz 1cz ... 4dy 4dzを全て表示させるプログラムを作成したいと思っています。 foreach $a (@list_a){ foreach $b (@list_b){ foreach $c (@list_c){ ... のようにforeachをネストすればよいのですが、配列の数がとても多い場合を考えています。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • ベクトル

    違いが分からなくて困っています。ベクトルA=ax+(-7)ay+5az、ベクトルB=(-4)ax+(-2)ay+2azがあったとしてAのB方向成分の大きさとAのB方向のベクトルはどのように違い、どうやって計算すればよいのでしょうか?

  • 偏微分(外積)

    ベクトルA(Ax,Ay,Az)があったとします。 ∇×Aの場合:(∂Az/∂y)-(∂Ay/∂z),(∂Ax/∂z)-(∂Az/∂x), (∂Ay/∂x)-(∂Ax-∂y)になるとおもいます。 逆にA×∇の場合:Ay(∂/∂z)-Az(∂/∂y), Az(∂/∂z)-Ax(∂/∂z), Ax(∂/∂y)-Ay(∂/∂x)になるとおもいます。 要するに、∇とAをかける順番によって、前者の形であれば Aは中にはいり、後者の形であれば外にでるという形でいいでしょうか?? よろしくお願いします。

  • ∇とベクトルの積の表現形式について

    演算子∇とベクトル関数Aが∇Aと書かれている場合、これはテンソルとなりますね。(スカラ―関数φだと∇φはベクトルでシンプルでなじみがあります。) このテンソルですが、表現の形式はマトリックスとなりますね。ベクトルの演算子∇とベクトルAで作るマトリックスには2通りの表記法が考えられます。 ∂Ax/∂x ∂Ay/∂x, ∂Az/∂x ∂Ax/∂y ∂Ay/∂y, ∂Az/∂y ∂Ax/∂z ∂Ay/∂z, ∂Az/∂z か ∂Ax/∂x ∂Ax/∂y, ∂Ax/∂z ∂Ay/∂x ∂Ay/∂y, ∂Ay/∂z ∂Az/∂x ∂Az/∂y, ∂Az/∂z です。 どちらになるのか決まっているでしょうか。∇Aと表記しただけではどちらになっているか示すことができないと思いますが。あるいはどちらでも同じことになるとか、でしょうか。 よろしくお願いします。

  • 条件付でのパターン抽出がわかりません

    以下のような条件でのパターンで作成される文字列を抽出したいと思い、 処理を考えるのですがわかりません。 ヒントでも結構ですので、ご教授願います。 条件1  ○={a,b,c,d}  △={e,f,g}  □={h,i} 条件2  ○2つ、△2つ、□1つを選択。   ex.)○○△□△, ○△□○△, ○△△□○, ... 条件3  ○から重複しない2文字、△から重複しない2文字、□からは重複しない1文字を選択。   ex.)○={a,b}△={e,g}□={h}... 上記条件により作成される5文字の全てのパターンを抽出したい場合、 どのように考えればよいでしょうか? (条件2の全パターン)*(条件3の全パターン)で抽出可能?? よろしくお願いします。

  • ベクトルの解析について

    ベクトルA、Bに対して div(A×B)=BrotA-ArotBを示せという問題で、 div(A×B)=det[(∂/∂x, ∂/∂y, ∂/∂z), (Ax, Ay, Az), (Bx, By, Bz)] BrotA=det[(Bx, By, Bz), (∂/∂x, ∂/∂y, ∂/∂z), (Ax, Ay, Az)] ArotB=det[(Ax, Ay, Az), (∂/∂x, ∂/∂y, ∂/∂z), (Bx, By, Bz)] というところまでは分かったのですが、サラスで展開してもイコールになりません。どうすればイコールになるんですか? どなたか教えていただけないでしょうか?

  • 組み合わせのパターンを作成する関数

    組み合わせのパターンを作成する関数を作成したいと思っています。 仕様は以下のような感じです。 引数 ・list:材料となる文字の配列 ・len:作成する文字列の数(2以上) 戻り値 ・組合わせた文字列の配列 例 (["a", "b", "c"], 2)→["aa", "ab", "ac", "ba", "bb", "bc", "ca", "cb", "cc"] (["a", "b"], 3)→["aaa", "aab", "aba", "abb", "baa", "bab", "bba", "bbb"] 私はとりあえず作成する総パターン数(Math.pow(list.length, len))回ループでまわし、indexをtoStrungでn進数にし(ゼロパディングし)、最後に数字と対応する文字を置換するという方法で実装しました。とりあえず動いています。 しかし他にもいろいろなアルゴリズムが考えられそうなので、他の実装・よりよい方法を知りたいと思いまして質問させていただくことにしました。 できれば具体的なコードを教えていただきたいです。 よろしくお願いします。

  • 「○○通りのパターンがある」の計算のしかた

    よくこの組み合わせは全部で1万通りのパターンが存在するというようなことを聞きますが、 あれの方程式などはあるのでしょうか。 以下の例で説明をお願いします。 1. [a,b,c]の3つだけの文字列を作った時のパターン数 2. 英数字のみのパスワード4桁のパターン数 3. [a,b,c,d,e,f,g]の中から4文字をつかった文字列のパターン数。

専門家に質問してみよう