Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,104 @@
|
|||
Imports System.Text
|
||||
|
||||
Module Module1
|
||||
|
||||
ReadOnly DIGITS As String = "0123456789"
|
||||
|
||||
Function DeBruijn(k As Integer, n As Integer) As String
|
||||
Dim alphabet = DIGITS.Substring(0, k)
|
||||
Dim a(k * n) As Byte
|
||||
Dim seq As New List(Of Byte)
|
||||
Dim db As Action(Of Integer, Integer) = Sub(t As Integer, p As Integer)
|
||||
If t > n Then
|
||||
If n Mod p = 0 Then
|
||||
Dim seg = New ArraySegment(Of Byte)(a, 1, p)
|
||||
seq.AddRange(seg)
|
||||
End If
|
||||
Else
|
||||
a(t) = a(t - p)
|
||||
db(t + 1, p)
|
||||
Dim j = a(t - p) + 1
|
||||
While j < k
|
||||
a(t) = j
|
||||
db(t + 1, t)
|
||||
j += 1
|
||||
End While
|
||||
End If
|
||||
End Sub
|
||||
db(1, 1)
|
||||
Dim buf As New StringBuilder
|
||||
For Each i In seq
|
||||
buf.Append(alphabet(i))
|
||||
Next
|
||||
Dim b = buf.ToString
|
||||
Return b + b.Substring(0, n - 1)
|
||||
End Function
|
||||
|
||||
Function AllDigits(s As String) As Boolean
|
||||
For Each c In s
|
||||
If c < "0" OrElse "9" < c Then
|
||||
Return False
|
||||
End If
|
||||
Next
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Sub Validate(db As String)
|
||||
Dim le = db.Length
|
||||
Dim found(10000) As Integer
|
||||
Dim errs As New List(Of String)
|
||||
' Check all strings of 4 consecutive digits within 'db'
|
||||
' to see if all 10,000 combinations occur without duplication.
|
||||
For i = 1 To le - 3
|
||||
Dim s = db.Substring(i - 1, 4)
|
||||
If (AllDigits(s)) Then
|
||||
Dim n As Integer = Nothing
|
||||
Integer.TryParse(s, n)
|
||||
found(n) += 1
|
||||
End If
|
||||
Next
|
||||
For i = 1 To 10000
|
||||
If found(i - 1) = 0 Then
|
||||
errs.Add(String.Format(" PIN number {0,4} missing", i - 1))
|
||||
ElseIf found(i - 1) > 1 Then
|
||||
errs.Add(String.Format(" PIN number {0,4} occurs {1} times", i - 1, found(i - 1)))
|
||||
End If
|
||||
Next
|
||||
Dim lerr = errs.Count
|
||||
If lerr = 0 Then
|
||||
Console.WriteLine(" No errors found")
|
||||
Else
|
||||
Dim pl = If(lerr = 1, "", "s")
|
||||
Console.WriteLine(" {0} error{1} found:", lerr, pl)
|
||||
errs.ForEach(Sub(x) Console.WriteLine(x))
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Function Reverse(s As String) As String
|
||||
Dim arr = s.ToCharArray
|
||||
Array.Reverse(arr)
|
||||
Return New String(arr)
|
||||
End Function
|
||||
|
||||
Sub Main()
|
||||
Dim db = DeBruijn(10, 4)
|
||||
Dim le = db.Length
|
||||
|
||||
Console.WriteLine("The length of the de Bruijn sequence is {0}", le)
|
||||
Console.WriteLine(vbNewLine + "The first 130 digits of the de Bruijn sequence are: {0}", db.Substring(0, 130))
|
||||
Console.WriteLine(vbNewLine + "The last 130 digits of the de Bruijn sequence are: {0}", db.Substring(le - 130, 130))
|
||||
|
||||
Console.WriteLine(vbNewLine + "Validating the deBruijn sequence:")
|
||||
Validate(db)
|
||||
|
||||
Console.WriteLine(vbNewLine + "Validating the reversed deBruijn sequence:")
|
||||
Validate(Reverse(db))
|
||||
|
||||
Dim bytes = db.ToCharArray
|
||||
bytes(4443) = "."
|
||||
db = New String(bytes)
|
||||
Console.WriteLine(vbNewLine + "Validating the overlaid deBruijn sequence:")
|
||||
Validate(db)
|
||||
End Sub
|
||||
|
||||
End Module
|
||||
Loading…
Add table
Add a link
Reference in a new issue