Data update

This commit is contained in:
Ingy döt Net 2026-02-01 16:33:20 -08:00
parent 5150844a7d
commit 4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions

View file

@ -1,35 +0,0 @@
with Ada.Text_IO;
procedure Van_Eck_Sequence is
Sequence : array (Natural range 1 .. 1_000) of Natural;
procedure Calculate_Sequence is
begin
Sequence (Sequence'First) := 0;
for Index in Sequence'First .. Sequence'Last - 1 loop
Sequence (Index + 1) := 0;
for I in reverse Sequence'First .. Index - 1 loop
if Sequence (I) = Sequence (Index) then
Sequence (Index + 1) := Index - I;
exit;
end if;
end loop;
end loop;
end Calculate_Sequence;
procedure Show (First, Last : in Positive) is
use Ada.Text_IO;
begin
Put ("Element" & First'Image & " .." & Last'Image & " of Van Eck sequence: ");
for I in First .. Last loop
Put (Sequence (I)'Image);
end loop;
New_Line;
end Show;
begin
Calculate_Sequence;
Show (First => 1, Last => 10);
Show (First => 991, Last => 1_000);
end Van_Eck_Sequence;

View file

@ -2,7 +2,7 @@ scope # find elements of the Van Eck Sequence - first term is 0, following
# terms are 0 if the previous was the first appearance of the element
# or how far back in the sequence the last element appeared otherwise
local procedure VanEck( n :: number ) :: sequence # returns the first n elements of the Van Eck sequence
local proc VanEck( n :: number ) :: sequence # returns the first n elements of the Van Eck sequence
local constant result := seq(); for i to n do result[ i ] := 0 od;
local constant pos := seq(); for i to n + 1 do pos[ i ] := 0 od;
for i from 2 to n do

View file

@ -1,46 +0,0 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. VAN-ECK.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CALCULATION.
02 ECK PIC 999 OCCURS 1000 TIMES.
02 I PIC 9999.
02 J PIC 9999.
01 OUTPUT-FORMAT.
02 ITEM PIC ZZ9.
02 IDX PIC ZZZ9.
PROCEDURE DIVISION.
B. PERFORM GENERATE-ECK.
PERFORM SHOW VARYING I FROM 1 BY 1 UNTIL I = 11.
PERFORM SHOW VARYING I FROM 991 BY 1 UNTIL I = 1001.
STOP RUN.
SHOW.
MOVE I TO IDX.
MOVE ECK(I) TO ITEM.
DISPLAY 'ECK(' IDX ') = ' ITEM.
GENERATE-ECK SECTION.
B. SET ECK(1) TO 0.
SET I TO 1.
PERFORM GENERATE-TERM
VARYING I FROM 2 BY 1 UNTIL I = 1001.
GENERATE-TERM SECTION.
B. SUBTRACT 2 FROM I GIVING J.
LOOP.
IF J IS LESS THAN 1 GO TO TERM-IS-NEW.
IF ECK(J) = ECK(I - 1) GO TO TERM-IS-OLD.
SUBTRACT 1 FROM J.
GO TO LOOP.
TERM-IS-NEW.
SET ECK(I) TO 0.
GO TO DONE.
TERM-IS-OLD.
COMPUTE ECK(I) = (I - J) - 1.
DONE. EXIT.

View file

@ -1,3 +1,7 @@
F ← ⊂⟨0◌|+1⟩>⊙(-1⧻),,⊗⊃⊢(↘1). # Generator function (prepends).
⇌⍥F999 [0] # Generate 1000 terms and flip.
⊃(&p↙¯)(&p↙∘)10 # Print first and last 10 terms.
# Generate Van Eck sequence.
F ← (
◡<⊙⊙◌⊃(⋅⧻|⊸˜⨂)°⊂. # Check where/if first digit already appeared.
⊂⨬(⋅⋅0|⋅+₁) # If new, prepend zero, else last index it was in.
)
⇌⍥F999 [0] # Generate 1000 terms and reverse.
⊃(&p↙¯)(&p↙∘)10 # Print first and last 10 terms.