同じものを含む順列の問題をVisual Basicで解いてみました。(^_^;
前回、Javaから十進BASICに翻訳してみましたが、今回は、ついでに、Visual Basic (2008)に翻訳してみました。
Visual Basicは、toCharArray()やArray.Sort()などの小道具も揃っていて、十進BASICよりもCやJavaに近いものになっていて翻訳が楽でした。
● PermSame1.vb
Module Module1 Function nextPerm(ByVal p() As Char, ByVal n As Integer, ByVal r As Integer) As Boolean Dim i, j As Integer Dim t As Char If r <= 0 Or n < r Then Return False For i = r + 1 To n - 1 For j = i To r + 1 Step -1 If p(j - 1) >= p(j) Then Exit For t = p(j) : p(j) = p(j - 1) : p(j - 1) = t ' swap(p,j,j-1) Next j Next i For i = n - 1 To 1 Step -1 If p(i - 1) < p(i) Then Exit For Next i If I = 0 Then Return False For j = n - 1 To i + 1 Step -1 If p(i - 1) < p(j) Then Exit For Next j t = p(j) : p(j) = p(i - 1) : p(i - 1) = t ' swap(p,j,i-1) j = n - 1 Do While i < j t = p(i) : p(i) = p(j) : p(j) = t ' swap(p,i,j) i += 1 : j -= 1 Loop Return True End Function Sub Main() Const S As String = "MATHEMATICS" Dim N As Integer = Len(S) Const R As Integer = 4 Dim p() As Char = S.ToCharArray() '順列生成用 Dim tm As Double = Timer ' Timer Start Dim count As Integer = 0 Array.Sort(p) Do 'Dim t As String = New String(p) 'Console.WriteLine(Mid(t, 1, R)) count += 1 Loop While nextPerm(p, N, R) Console.WriteLine("計: {0}", count) tm = Timer - tm Console.WriteLine("Runtime : {0} [sec]", Math.Round(tm, 3)) Console.ReadLine() End Sub End Module
●実行結果
計: 2454 Runtime : 0.016 [sec]
※参考URL
●同じものを含む順列をJavaで解いてみた。(2)
●同じものを含む順列の問題をPythonで解いてみた。
●同じものを含む順列の問題をPythonで解いてみた。(2)
●同じものを含む順列の問題を十進BASICで解いてみた。
- 作者: 高橋広樹,techbank.jp
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/21
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 7回
- この商品を含むブログ (6件) を見る
- 作者: 笠原一浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/09/25
- メディア: 単行本
- この商品を含むブログ (2件) を見る
基礎Visual Basic 2012 (IMPRESS KISO SERIES)
- 作者: 羽山博
- 出版社/メーカー: インプレス
- 発売日: 2013/03/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る