Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,100 @@
|
|||
Module Module1
|
||||
|
||||
ReadOnly STX As Char = Chr(&H2)
|
||||
ReadOnly ETX As Char = Chr(&H3)
|
||||
|
||||
Sub Rotate(Of T)(a As T())
|
||||
Dim o = a.Last
|
||||
For i = a.Length - 1 To 1 Step -1
|
||||
a(i) = a(i - 1)
|
||||
Next
|
||||
a(0) = o
|
||||
End Sub
|
||||
|
||||
Private Function Compare(s1 As String, s2 As String) As Integer
|
||||
Dim i = 0
|
||||
While i < s1.Length AndAlso i < s2.Length
|
||||
Dim a = s1(i)
|
||||
Dim b = s2(i)
|
||||
If a < b Then
|
||||
Return -1
|
||||
End If
|
||||
If b < a Then
|
||||
Return 1
|
||||
End If
|
||||
i += 1
|
||||
End While
|
||||
If s1.Length < s2.Length Then
|
||||
Return -1
|
||||
End If
|
||||
If s2.Length < s1.Length Then
|
||||
Return 1
|
||||
End If
|
||||
Return 0
|
||||
End Function
|
||||
|
||||
Function Bwt(s As String) As String
|
||||
If s.Any(Function(c) c = STX OrElse c = ETX) Then
|
||||
Throw New ArgumentException("Input can't contain STX or ETX")
|
||||
End If
|
||||
Dim ss = (STX + s + ETX).ToCharArray
|
||||
Dim table As New List(Of String)
|
||||
For i = 0 To ss.Length - 1
|
||||
table.Add(New String(ss))
|
||||
Rotate(ss)
|
||||
Next
|
||||
table.Sort(Function(a As String, b As String) Compare(a, b))
|
||||
Return New String(table.Select(Function(a) a.Last).ToArray)
|
||||
End Function
|
||||
|
||||
Function Ibwt(r As String) As String
|
||||
Dim len = r.Length
|
||||
Dim sa(len - 1) As String
|
||||
Dim table As New List(Of String)(sa)
|
||||
For i = 0 To len - 1
|
||||
For j = 0 To len - 1
|
||||
table(j) = r(j) + table(j)
|
||||
Next
|
||||
table.Sort(Function(a As String, b As String) Compare(a, b))
|
||||
Next
|
||||
For Each row In table
|
||||
If row.Last = ETX Then
|
||||
Return row.Substring(1, len - 2)
|
||||
End If
|
||||
Next
|
||||
Return ""
|
||||
End Function
|
||||
|
||||
Function MakePrintable(s As String) As String
|
||||
Return s.Replace(STX, "^").Replace(ETX, "|")
|
||||
End Function
|
||||
|
||||
Sub Main()
|
||||
Dim tests As String() = {
|
||||
"banana",
|
||||
"appellee",
|
||||
"dogwood",
|
||||
"TO BE OR NOT TO BE OR WANT TO BE OR NOT?",
|
||||
"SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES",
|
||||
STX + "ABC" + ETX
|
||||
}
|
||||
|
||||
For Each test In tests
|
||||
Console.WriteLine(MakePrintable(test))
|
||||
Console.Write(" --> ")
|
||||
|
||||
Dim t = ""
|
||||
Try
|
||||
t = Bwt(test)
|
||||
Console.WriteLine(MakePrintable(t))
|
||||
Catch ex As Exception
|
||||
Console.WriteLine("ERROR: {0}", ex.Message)
|
||||
End Try
|
||||
|
||||
Dim r = Ibwt(t)
|
||||
Console.WriteLine(" --> {0}", r)
|
||||
Console.WriteLine()
|
||||
Next
|
||||
End Sub
|
||||
|
||||
End Module
|
||||
Loading…
Add table
Add a link
Reference in a new issue