同じものを含む順列の問題をVisual Basicで解いてみた。

 同じものを含む順列の問題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で解いてみた。

かんたんVisualBasic (プログラミングの教科書)

かんたんVisualBasic (プログラミングの教科書)

Visual Basic 2012/2013入門

Visual Basic 2012/2013入門

基礎Visual Basic 2012 (IMPRESS KISO SERIES)

基礎Visual Basic 2012 (IMPRESS KISO SERIES)