以前購入して積ん読書になっていた以下の書籍に取り掛かった。
- 作者: 坪崎誠司
- 出版社/メーカー: 株式会社プレスティージ
- 発売日: 2010/07/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
最初の問題は順列の出力。
順列というのは、特定のモノを並べる順番が何種類あるかを求めるもの。
1個なら1とおり。
2個なら2とおり。
3個なら6とおりある。
まずは自分の頭で考えてみるが、、
やめた。
答えを見よう。。
とりあえず丸写しして動かしてみようかと思ったけれど、コードが結構長くて面倒くさい。
ソースからロジックの肝だけ読み取って、自分で書くことにした。
出来たのがこれ。
Sub MyPerm1() For i = 1 To 3 For j = 1 To 3 For k = 1 To 3 If i <> j And j <> k And i <> k Then Debug.Print i, j, k End If Next k, j, i End Sub
イミディエイトウインドウに以下のように出力される。
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
上のやり方だと、4個にしようと思ったらコードを書き直す必要があるが、とりあえず初回なのでそこは無視無視。
ロジックとしては、全パターンまわしてそのうち同じ値が登場するものを省くだけの簡単なものだ。
数字以外にも対応させてみた。
Sub MyPerm2() Dim arr() As String: arr = Split("A B C", " ") Dim x, y, z For Each x In arr For Each y In arr For Each z In arr If x <> y And x <> z And y <> z Then Debug.Print x, y, z End If Next z, y, x End Sub
次は、個数が増えても汎用的に使える方法を学ぶ予定である。