• ベストアンサー

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

以下のような条件でのパターンで作成される文字列を抽出したいと思い、 処理を考えるのですがわかりません。 ヒントでも結構ですので、ご教授願います。 条件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の全パターン)で抽出可能?? よろしくお願いします。

  • tkeno
  • お礼率100% (5/5)

質問者が選んだベストアンサー

  • ベストアンサー
noname#94461
noname#94461
回答No.2

○2つ△2つが各々相互に区別出来ないと考えた場合のパターン数が30個、 異なった文字ペアの数が36種となります。 但し2文字ペアのものは相互に入れ替えたら2種の別の5文字パターンとなります。 その結果4000種前後の文字パターンになるはずです。 以上は途中/最終結果を略していますので、略さないで計算してください。

tkeno
質問者

お礼

回答ありがとうございます。 以下のように解釈しましたが、いかがでしょうか? > ○2つ△2つが各々相互に区別出来ないと考えた場合のパターン数が30個、 5P2/2*3P2/2 = 30  ※Pはパーミュテーション > 異なった文字ペアの数が36種となります。 4C2*3C2*2C1 =36   ※Cはコンビネーション > 但し2文字ペアのものは相互に入れ替えたら2種の別の5文字パターンとなります。 これは○○、△△ということでしょうか?? 理解できません。 上記より、パターン数としては30*36=1080通りにはならないのでしょうか?

その他の回答 (3)

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.4

ANo.1です。 プログラムで作るということで良いのでしょうか? 大雑把に作るなら次のようになるでしょう。 <処理1> まず適当な大きさの配列patternを作り、 「○2つ、△2つ、□1つからなる文字列」を格納します。 この時、i ≠ jならpattern[i] ≠ pattern[j]となるように 格納してください。 次のような感じです。 pattern[0] = "○○△△□" pattern[1] = "○○△□△" pattern[2] = "○○□△△" ・ ・ ・ pattern[N] = "□△△○○" (ここが末尾) <処理2> 各patternについて、 ○、△、□に文字を当てはめます。

tkeno
質問者

お礼

回答ありがとうございます。 処理で考えてるので、そのPattern[x]、および○、△、□それぞれの パターンが必要になりそうです。 重複しないパターンの実際の文字列作成を処理で行おうとすれば、 (全通りパターン)-(重複パターン)しかないんですかね。 ○であれば、4文字の中から2文字を作成するので、16文字を 作成しながら、2文字同じものを除外する形でしょうかね。

noname#94461
noname#94461
回答No.3

>上記より、パターン数としては30*36=1080通りにはならないのでしょうか? ここまでは正しいです。 但し、(ab),(ef),hの文字ペアを選んだ時、作成できる文字パターンはたとえば ab,ef,h; ab,fe,h; ba,ef,h; ba,fe,h の4種が作成できます。 従って全部で1080*4=4320通りになります。 

tkeno
質問者

お礼

重ねてありがとうございます。 納得できました。 もしくはパーミュテーションで○、△はそれぞれ異なる○、△ であるという考えでもいいのかもしれないですね。

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

文字列を抽出したい文章のコピーを作成します。 コピー文章のa, b, c, dを全て○に置換し、 e, f, g全てを△、h, i全てを□に置換します。 そして「○2つ、△2つ、□1つからなる文字列」を全て探します。 この時、条件を満たす文字列の位置情報をどこかに記録します。 後は先ほどの位置情報を利用して 元の文章中から「○2つ、△2つ、□1つからなる文字列」を抽出し、 条件3を満たすかどうかチェックしていけば良いと思います。

tkeno
質問者

お礼

回答ありがとうございます。 しかしながら、質問内容の曖昧さにより、誤解させてしまいました。 申し訳ありません。 質問文にて、正しくは「抽出」ではなく「作成」になります。 ですので、条件を全て満たした「abeif」「aghce」「defhc」...といった 文字列を作成するパターン処理をどう考えればよいかということでした。 わかりますでしょうか?

関連するQ&A

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

    アクセス フォーム内で、パターン名から複数条件の組み合わせにて自動抽出を行い。 その後さらにそこから条件抽出を行う方法について教えてください。 条件項目はパターン(個別条件の組み合わせ)、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を選択し条件抽出を行う方法を教えてください。 ☆なるべく複数クエリを使用したくはないです。できればパターン表テーブルを利用したいです。 以上、よろしくお願いします!

  • エクセルの関数で抽出

    EXCELで単語テストを簡単に作れないかと試行錯誤しているのですが、 A1 番号   1~2569まで B1 英単語 C1 日本語訳 D1 順位 =RANK(E2,$E$2:$E$2570) E1 乱数 =RAND() F1 選択範囲 F2 選択番号始め F3 選択番号終わり G1 抽出番号(A1~の抽出したもの) H1 選択英単語(B1~の抽出したもの) I1 選択日本語(C1~の抽出したもの) こういうデータがあり、H1~I1にF2とF3で選択した範囲(たとえば10~30等)を入力するとG1~I1にその範囲でランダムに重複ない選択範囲内の問題が抽出されるようなものを作りたいのですが、うまく出来ません。 やり方を教えていただけないでしょうか。よろしくお願いします。

  • パターン抽出

    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 みたいな感じで抽出します。 ですが、あまりいい方法が浮かびません。再帰を使えばいいというのはわかるのですが数が不定というのが複雑でイメージがわきません。 いいパターン抽出のやりかたがあれば教えてください。 お願いします。

  • エクセルの条件文で抽出したセルに改行を入れたい

    条件文で作成した文字列内に改行を入れる方法を教えてください。 下記のようなエクセル(以後、数百行あります)があり、○がついているところの1行目にある文字をK2セルに入力したいと思います。   A  B  C  D  E  F  G  H  I  J K  1 あ い う  え  お  か  き  く け  こ   2 ○       ○       ○    ○  ○ 3   ○      ○    ○  ○ K2セルには、○印のついている あ え き け こ と改行して出力されるように関数を組むにはどうしたらいいのでしょうか? =IF(A2=○,A1&"","")&IF(B2=○,B1,"")&IF(C2=○,C1,"")&IF(D2=○, D1,"")&IF(E2=○,E1,"")&IF(F2=○,F1,"")&IF(G2=○,G1,"")&IF(H2=○,H1,"")&IF(I2=○,I1,"")&IF(J2=○,J1,"") と入力してみましたがうまくいかず、これではうまくいったとしても 改行なしで あえきけこ と出てしまう気がします・・・。 一晩悩みましたがどうしてもうまくいかないのでどなたか教えてください。 よろしくお願いいたします。

  • エクセルの検索?抽出で質問があります。

    エクセルの値を抽出したいのですが、重複してしまい抽出できません。 抽出したい内容は以下です。  E   F    G   H 1味  辛い 辛い 2味  辛い 甘い  3味  甘い 辛い  4味  甘い 甘い 5味  辛い 辛い  6味  甘い 辛い  7味  辛い 甘い 8味  辛い 辛い このような感じで入力してあります。 オートフィルタを使用しています。 A~Dには色々な項目が入力されています。 FとGには辛い・甘いが入力されています。 この状態から「辛い」だけを残したいです。 オートフィルタで抽出した場合 Fで選択した場合はFだけ。 Gで選択した場合はGだけ。 を抽出してしまします。 この状態から「辛い」だけを残すことは出来るのでしょうか? Hに何か関数を入れて、Hから抽出出来るような関数などはあるのでしょうか? 余りうまく説明できなくてすみません。 どなたかわかる方がおりましたらよろしくお願致します。

  • A~H 4桁 組み合わせパターン 全件リスト

    A, B, C, D, E, F, G, Hのうち4桁(桁数固定, 文字重複可)の組み合わせパターンをExcelなどでリスト化する方法を教えてください。 例 AAAA ABCD

  • 条件1つで複数の値を抽出することはできませんか。

    エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。

  • 抽出条件に応じてテーブルを作り分ける方法

    抽出条件テーブル(a)があり、抽出条件が参照するテーブル(b)がある。(a)には複数の抽出条件が登録され、(a)を参照しつつ、(b)から抽出されるテーブル(c)を抽出条件に応じて複数作成したい。つまり、(a)に登録された抽出条件の数だけテーブル(c)が作成される。 これをクエリで実行できる方法をご教示願いたい。 なお、(b)からデータを抽出する場合、上記の抽出条件テーブル(a)に代えて、クエリ内に抽出条件を20~30個記述する方法でも可。 Access2010を使用しています。VBAは使用しません。

  • 条件一致セルの抽出について

    こんにちは。 VBA超初心者ですが、アドバイスをお願い致します。 仕事で使用するリストがあるのですが、 A=選択欄 B=分類 C=メーカー D=品名 E=品番 となっている表があります。(1000行程で、これからも追加予定) Aで○等を入力(選択)すると、K列に○を入力した行を抽出したいのです。 Sub Adfilter2() Range("A3:H17").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Range("K2"), _ CopyToRange:=Range("K3"), _ Unique:=False End Sub ※K2に○を入力しています。 といったコードを作ってみたのですが、実行すると表全てがコピーされてしまいます・・・。 どこがおかしくて、どこを変えれば○をつけた行のみを抽出できるのでしょうか・・・。 ご教授を宜しくお願い致します。

  • 抽出した表でデータをカウントしたいのですが・・・

    タイトルにあるとおり、あるデータをオートフィルで抽出した状態で、その抽出結果からデータをカウントしたいのです。 以下のような表があったとします。    A  B  C  D  E   F  G  H  I 1  ○           ○  ○  ○ 2     ○  ○     ○        ○ 3        ○  ○  ○  ○ 4  ○  ○     ○     ○ 5     ○            ○  ○    ○ 6     ○  ○     ○        ○ 7  ○        ○        ○     ○ 8     ○  ○     ○        ○ 9  ○        ○  ○     ○ この表では、仮に各行○が4つとして、ランダムに各列に○が振り分けられています。 A列・4個、B列・5個、C列・4個、D列・4個、E列・6個、F列・4個、G列・4個、H列・3個、I列・2個 という状態です。    A  B  C  D  E   F  G  H  I 1  ○           ○  ○  ○ 2     ○  ○     ○        ○ 3        ○  ○  ○  ○ 4  ○  ○     ○     ○ 5     ○            ○  ○    ○ 8     ○  ○     ○        ○ 9  ○        ○  ○     ○ ある条件でオートフィルによって、抽出した結果が上の表です。 今回の例では6,7行が消えた状態だったとします。 それぞれ、A列・3個、B列・4個、C列・3個、D列・3個、E列・5個、F列・4個、G列・3個、H列・2個、I列・1個 と、いう結果になりました。 このような状態になった表で最下段、この場合9から上に向かって3行分の○をカウントするような方法、または便利な関数はありますでしょうか? 今回の例ですと、最下段から、3行分、5、8、9のそれぞれの列の○をカウントするという感じです。 A列・1個、B列・2個、C列・1個、D列・1個、E列・2個、F列・1個、G列・2個、H列・1個、I列・1個 これが今回の例における求めたい結果です。 抽出してない状態でしたら、OFFSET関数でいけるのですが、抽出した状態からだと私のスキルでは解決できません。 どなたか、ご存知の方ご教示よろしくお願いします^^;