Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -34,7 +34,7 @@ F validate(db)
|
|||
I s.is_digit()
|
||||
found[Int(s)]++
|
||||
|
||||
L(i) 10'000
|
||||
L(i) 0.<10'000
|
||||
I found[i] == 0
|
||||
errs [+]= ‘ PIN number #04 missing’.format(i)
|
||||
E I found[i] > 1
|
||||
|
|
|
|||
|
|
@ -1,126 +0,0 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Strings.Fixed; use Ada.Strings;
|
||||
with Ada.Strings.Unbounded;
|
||||
|
||||
procedure De_Bruijn_Sequences is
|
||||
|
||||
function De_Bruijn (K, N : Positive) return String
|
||||
is
|
||||
use Ada.Strings.Unbounded;
|
||||
|
||||
Alphabet : constant String := "0123456789";
|
||||
|
||||
subtype Decimal is Integer range 0 .. 9;
|
||||
type Decimal_Array is array (Natural range <>) of Decimal;
|
||||
|
||||
A : Decimal_Array (0 .. K * N - 1) := (others => 0);
|
||||
Seq : Unbounded_String;
|
||||
|
||||
procedure Db (T, P : Positive) is
|
||||
begin
|
||||
if T > N then
|
||||
if N mod P = 0 then
|
||||
for E of A (1 .. P) loop
|
||||
Append (Seq, Alphabet (Alphabet'First + E));
|
||||
end loop;
|
||||
end if;
|
||||
else
|
||||
A (T) := A (T - P);
|
||||
Db (T + 1, P);
|
||||
for J in A (T - P) + 1 .. K - 1 loop
|
||||
A (T) := J;
|
||||
Db (T + 1, T);
|
||||
end loop;
|
||||
end if;
|
||||
end Db;
|
||||
|
||||
begin
|
||||
Db (1, 1);
|
||||
return To_String (Seq) & Slice (Seq, 1, N - 1);
|
||||
end De_Bruijn;
|
||||
|
||||
function Image (Value : Integer) return String
|
||||
is (Fixed.Trim (Value'Image, Left));
|
||||
|
||||
function PIN_Image (Value : Integer) return String
|
||||
is (Fixed.Tail (Image (Value), Count => 4, Pad => '0'));
|
||||
|
||||
procedure Validate (Db : String)
|
||||
is
|
||||
Found : array (0 .. 9_999) of Natural := (others => 0);
|
||||
Errors : Natural := 0;
|
||||
begin
|
||||
|
||||
-- Check all strings of 4 consecutive digits within 'db'
|
||||
-- to see if all 10,000 combinations occur without duplication.
|
||||
for A in Db'First .. Db'Last - 3 loop
|
||||
declare
|
||||
PIN : String renames Db (A .. A + 4 - 1);
|
||||
begin
|
||||
if (for all Char of PIN => Char in '0' .. '9') then
|
||||
declare
|
||||
N : constant Integer := Integer'Value (PIN);
|
||||
F : Natural renames Found (N);
|
||||
begin
|
||||
F := F + 1;
|
||||
end;
|
||||
end if;
|
||||
end;
|
||||
end loop;
|
||||
|
||||
for I in 0_000 .. 9_999 loop
|
||||
if Found (I) = 0 then
|
||||
Put_Line (" PIN number " & PIN_Image (I) & " missing");
|
||||
Errors := Errors + 1;
|
||||
elsif Found (I) > 1 then
|
||||
Put_Line (" PIN number " & PIN_Image (I) & " occurs "
|
||||
& Image (Found (I)) & " times");
|
||||
Errors := Errors + 1;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
case Errors is
|
||||
when 0 => Put_Line (" No errors found");
|
||||
when 1 => Put_Line (" 1 error found");
|
||||
when others =>
|
||||
Put_Line (" " & Image (Errors) & " errors found");
|
||||
end case;
|
||||
end Validate;
|
||||
|
||||
function Backwards (S : String) return String is
|
||||
R : String (S'Range);
|
||||
begin
|
||||
for A in 0 .. S'Length - 1 loop
|
||||
R (R'Last - A) := S (S'First + A);
|
||||
end loop;
|
||||
return R;
|
||||
end Backwards;
|
||||
|
||||
DB : constant String := De_Bruijn (K => 10, N => 4);
|
||||
Rev : constant String := Backwards (DB);
|
||||
Ovl : String := DB;
|
||||
begin
|
||||
Put_Line ("The length of the de Bruijn sequence is " & DB'Length'Image);
|
||||
New_Line;
|
||||
|
||||
Put_Line ("The first 130 digits of the de Bruijn sequence are: ");
|
||||
Put_Line (" " & Fixed.Head (DB, 130));
|
||||
New_Line;
|
||||
|
||||
Put_Line ("The last 130 digits of the de Bruijn sequence are: ");
|
||||
Put_Line (" " & Fixed.Tail (DB, 130));
|
||||
New_Line;
|
||||
|
||||
Put_Line ("Validating the deBruijn sequence:");
|
||||
Validate (DB);
|
||||
New_Line;
|
||||
|
||||
Put_Line ("Validating the reversed deBruijn sequence:");
|
||||
Validate (Rev);
|
||||
New_Line;
|
||||
|
||||
Ovl (4444) := '.';
|
||||
Put_Line ("Validating the overlaid deBruijn sequence:");
|
||||
Validate (Ovl);
|
||||
New_Line;
|
||||
end De_Bruijn_Sequences;
|
||||
|
|
@ -64,7 +64,7 @@ proc main .
|
|||
print substr db$ 1 130
|
||||
print ""
|
||||
write "The last 130 digits of the de Bruijn sequence are: "
|
||||
print substr db$ -130 130
|
||||
print substr db$ (len db$ - 129) 130
|
||||
print ""
|
||||
print "Validating the de Bruijn sequence:"
|
||||
validate db$
|
||||
|
|
@ -75,7 +75,7 @@ proc main .
|
|||
.
|
||||
validate dbr$
|
||||
print ""
|
||||
db$ = substr db$ 1 4443 & "." & substr db$ 4445 (1 / 0)
|
||||
db$ = substr db$ 1 4443 & "." & substr db$ 4445 9999999
|
||||
print "Validating the overlaid de Bruijn sequence:"
|
||||
validate db$
|
||||
print ""
|
||||
|
|
|
|||
|
|
@ -1,73 +0,0 @@
|
|||
def deBruijn(k, n)
|
||||
alphabet = "0123456789"
|
||||
@a = Array.new(k * n, 0)
|
||||
@seq = []
|
||||
|
||||
def db(k, n, t, p)
|
||||
if t > n then
|
||||
if n % p == 0 then
|
||||
temp = @a[1 .. p]
|
||||
@seq.concat temp
|
||||
end
|
||||
else
|
||||
@a[t] = @a[t - p]
|
||||
db(k, n, t + 1, p)
|
||||
j = @a[t - p] + 1
|
||||
while j < k do
|
||||
@a[t] = j # & 0xFF
|
||||
db(k, n, t + 1, t)
|
||||
j = j + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
db(k, n, 1, 1)
|
||||
|
||||
buf = ""
|
||||
for i in @seq
|
||||
buf <<= alphabet[i]
|
||||
end
|
||||
return buf + buf[0 .. n-2]
|
||||
end
|
||||
|
||||
def validate(db)
|
||||
le = db.length
|
||||
found = Array.new(10000, 0)
|
||||
errs = []
|
||||
# Check all strings of 4 consecutive digits within 'db'
|
||||
# to see if all 10,000 combinations occur without duplication.
|
||||
for i in 0 .. le-4
|
||||
s = db[i .. i+3]
|
||||
if s.scan(/\D/).empty? then
|
||||
found[s.to_i] += 1
|
||||
end
|
||||
end
|
||||
for i in 0 .. found.length - 1
|
||||
if found[i] == 0 then
|
||||
errs <<= (" PIN number %04d missing" % [i])
|
||||
elsif found[i] > 1 then
|
||||
errs <<= (" PIN number %04d occurs %d times" % [i, found[i]])
|
||||
end
|
||||
end
|
||||
if errs.length == 0 then
|
||||
print " No errors found\n"
|
||||
else
|
||||
pl = (errs.length == 1) ? "" : "s"
|
||||
print " ", errs.length, " error", pl, " found:\n"
|
||||
for err in errs
|
||||
print err, "\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
db = deBruijn(10, 4)
|
||||
print "The length of the de Bruijn sequence is ", db.length, "\n\n"
|
||||
print "The first 130 digits of the de Bruijn sequence are: ", db[0 .. 129], "\n\n"
|
||||
print "The last 130 digits of the de Bruijn sequence are: ", db[-130 .. db.length], "\n\n"
|
||||
|
||||
print "Validating the de Bruijn sequence:\n"
|
||||
validate(db)
|
||||
print "\n"
|
||||
|
||||
db[4443] = '.'
|
||||
print "Validating the overlaid de Bruijn sequence:\n"
|
||||
validate(db)
|
||||
Loading…
Add table
Add a link
Reference in a new issue