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,41 +0,0 @@
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Containers.Ordered_Sets;
procedure Test_Happy_Digits is
function Is_Happy (N : Positive) return Boolean is
package Sets_Of_Positive is new Ada.Containers.Ordered_Sets (Positive);
use Sets_Of_Positive;
function Next (N : Positive) return Natural is
Sum : Natural := 0;
Accum : Natural := N;
begin
while Accum > 0 loop
Sum := Sum + (Accum mod 10) ** 2;
Accum := Accum / 10;
end loop;
return Sum;
end Next;
Current : Positive := N;
Visited : Set;
begin
loop
if Current = 1 then
return True;
elsif Visited.Contains (Current) then
return False;
else
Visited.Insert (Current);
Current := Next (Current);
end if;
end loop;
end Is_Happy;
Found : Natural := 0;
begin
for N in Positive'Range loop
if Is_Happy (N) then
Put (Integer'Image (N));
Found := Found + 1;
exit when Found = 8;
end if;
end loop;
end Test_Happy_Digits;

View file

@ -1,7 +1,7 @@
ord0: to :integer `0`
ord0: to :integer '0'
happy?: function [x][
n: x
past: new []
past: []
while [n <> 1][
s: to :string n

View file

@ -1,22 +0,0 @@
$c = 0
$k = 0
While $c < 8
$k += 1
$n = $k
While $n <> 1
$s = StringSplit($n, "")
$t = 0
For $i = 1 To $s[0]
$t += $s[$i] ^ 2
Next
$n = $t
Switch $n
Case 4,16,37,58,89,145,42,20
ExitLoop
EndSwitch
WEnd
If $n = 1 Then
ConsoleWrite($k & " is Happy" & @CRLF)
$c += 1
EndIf
WEnd

View file

@ -1,24 +0,0 @@
$c = 0
$k = 0
While $c < 8
$a = ObjCreate("System.Collections.ArrayList")
$k += 1
$n = $k
While $n <> 1
If $a.Contains($n) Then
ExitLoop
EndIf
$a.add($n)
$s = StringSplit($n, "")
$t = 0
For $i = 1 To $s[0]
$t += $s[$i] ^ 2
Next
$n = $t
WEnd
If $n = 1 Then
ConsoleWrite($k & " is Happy" & @CRLF)
$c += 1
EndIf
$a.Clear
WEnd

View file

@ -1,56 +0,0 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. HAPPY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIABLES.
03 CANDIDATE PIC 9(4).
03 SQSUM-IN PIC 9(4).
03 FILLER REDEFINES SQSUM-IN.
05 DIGITS PIC 9 OCCURS 4 TIMES.
03 SQUARE PIC 9(4).
03 SUM-OF-SQUARES PIC 9(4).
03 N PIC 9.
03 TORTOISE PIC 9(4).
03 HARE PIC 9(4).
88 HAPPY VALUE 1.
03 SEEN PIC 9 VALUE ZERO.
03 OUT-FMT PIC ZZZ9.
PROCEDURE DIVISION.
BEGIN.
PERFORM DISPLAY-IF-HAPPY VARYING CANDIDATE FROM 1 BY 1
UNTIL SEEN IS EQUAL TO 8.
STOP RUN.
DISPLAY-IF-HAPPY.
PERFORM CHECK-HAPPY.
IF HAPPY,
MOVE CANDIDATE TO OUT-FMT,
DISPLAY OUT-FMT,
ADD 1 TO SEEN.
CHECK-HAPPY.
MOVE CANDIDATE TO TORTOISE, SQSUM-IN.
PERFORM CALC-SUM-OF-SQUARES.
MOVE SUM-OF-SQUARES TO HARE.
PERFORM CHECK-HAPPY-STEP UNTIL TORTOISE IS EQUAL TO HARE.
CHECK-HAPPY-STEP.
MOVE TORTOISE TO SQSUM-IN.
PERFORM CALC-SUM-OF-SQUARES.
MOVE SUM-OF-SQUARES TO TORTOISE.
MOVE HARE TO SQSUM-IN.
PERFORM CALC-SUM-OF-SQUARES.
MOVE SUM-OF-SQUARES TO SQSUM-IN.
PERFORM CALC-SUM-OF-SQUARES.
MOVE SUM-OF-SQUARES TO HARE.
CALC-SUM-OF-SQUARES.
MOVE ZERO TO SUM-OF-SQUARES.
PERFORM ADD-DIGIT-SQUARE VARYING N FROM 1 BY 1
UNTIL N IS GREATER THAN 4.
ADD-DIGIT-SQUARE.
MULTIPLY DIGITS(N) BY DIGITS(N) GIVING SQUARE.
ADD SQUARE TO SUM-OF-SQUARES.

View file

@ -27,7 +27,7 @@ isHappy(int n)
^ true
}
public program()
public Program()
{
auto happynums := new List<int>(8);
int num := 1;

View file

@ -1,29 +0,0 @@
function is_happy(integer n)
sequence seen
integer k
seen = {}
while n > 1 do
seen &= n
k = 0
while n > 0 do
k += power(remainder(n,10),2)
n = floor(n/10)
end while
n = k
if find(n,seen) then
return 0
end if
end while
return 1
end function
integer n,count
n = 1
count = 0
while count < 8 do
if is_happy(n) then
? n
count += 1
end if
n += 1
end while

View file

@ -1,20 +0,0 @@
function happy([int] $n) {
$a=@()
for($i=2;$a.count -lt $n;$i++) {
$sum=$i
$hist=@{}
while( $hist[$sum] -eq $null ) {
if($sum -eq 1) {
$a+=$i
}
$hist[$sum]=$sum
$sum2=0
foreach($j in $sum.ToString().ToCharArray()) {
$k=([int]$j)-0x30
$sum2+=$k*$k
}
$sum=$sum2
}
}
$a -join ','
}

View file

@ -1,2 +0,0 @@
happy(8)
7,10,13,19,23,28,31,32

View file

@ -1,16 +1,15 @@
-- 7 Aug 2025
include Settings
-- 23 Aug 2025
include Setting
say 'HAPPY NUMBERS'
say version
say
say 'Process first 8...'
call HappyS -8
call HappyS 8
call ShowFirst8
call Timer 'r'
say
say 'Process first 10 million...'
call Happys -1e7
call Timer 'r'
call HappyS 1e7
call ShowNth 1e1
call ShowNth 1e2
call ShowNth 1e3
@ -18,16 +17,81 @@ call ShowNth 1e4
call ShowNth 1e5
call ShowNth 1e6
call ShowNth 1e7
call Timer 'r'
say
call Timer 'R'
exit
HappyS:
procedure expose Happ. Flag.
arg xx
-- Preset squares for digital sum
do i = 0 to 9
Pow2.i=i*i
end
-- Collect happy numbers <= 1000
Flag.=0; Happ.=0; n=0
do i = 1 while n < xx
h=i; ll=''
do forever
-- Squared digital sum
ss=0
do Length(h)
parse var h d +1 h; ss=ss+Pow2.d
end
select
-- Unhappy? Flag sad sums, next number
when Flag.ss then do
do while ll <> ''
parse var ll s ll; Flag.s=1
end
iterate i
end
-- Repeating? Flag sad sums, next number
when WordPos(ss,ll) > 0 then do
do while ll <> ''
parse var ll s ll; Flag.s=1
end
iterate i
end
-- Happy? Bump, next number
when ss = 1 then do
n=n+1; Happ.n=i
iterate i
end
-- Next sum
otherwise do
ll=ll ss; h=ss
end
end
end
end i
-- Flag happy numbers <= 1000
Flag.=0
do i = 1 to n
h=Happ.i; Flag.h=1
end
-- Collect happy numbers > 1000 using flagged numbers
do i = 1001 while n < xx
h=i
-- Squared digital sum
ss=0
do Length(h)
parse var h d +1 h; ss=ss+Pow2.d
end
-- Happy? Bump
if Flag.ss then do
n=n+1; Happ.n=i
end
end i
-- Count
Happ.0=n
return n
ShowFirst8:
procedure expose Happ.
say 'First 8 Happy numbers are'
do i = 1 to 8
call Charout ,Right(Happ.i,3)
if i//20 = 0 then
say
end
say
return

View file

@ -1,23 +1,24 @@
#![feature(core)]
fn sumsqd(mut n: i32) -> i32 {
let mut sq = 0;
while n > 0 {
let d = n % 10;
sq += d*d;
n /= 10
sq += d * d;
n /= 10;
}
sq
}
use std::num::Int;
fn cycle<T: Int>(a: T, f: fn(T) -> T) -> T {
fn cycle<T, F>(a: T, f: F) -> T
where
T: Copy + PartialEq,
F: Fn(T) -> T,
{
let mut t = a;
let mut h = f(a);
while t != h {
t = f(t);
h = f(f(h))
h = f(f(h));
}
t
}
@ -27,10 +28,10 @@ fn ishappy(n: i32) -> bool {
}
fn main() {
let happy = std::iter::count(1, 1)
.filter(|&n| ishappy(n))
.take(8)
.collect::<Vec<i32>>();
let happy: Vec<i32> = (1..)
.filter(|&n| ishappy(n))
.take(8)
.collect();
println!("{:?}", happy)
println!("{:?}", happy);
}

View file

@ -1,10 +1,3 @@
HC ← /+ⁿ2≡⋕°⋕ # Happiness calc = sum of squares of digits
IH ← |2 memo⟨IH ⊙⊂.|=1⟩∊,, HC # Apply HC until seen value recurs
Happy ← ⟨0◌|∘⟩IH : [1] . # Pre-load `seen` with 1. Return start number or 0
# Brute force approach isn't too bad with memoisation even for high bounds.
↙8⊚>0≡Happy⇡10000
# But iterative approach is still much faster
NH ← |1 ⟨NH|∘⟩≠0Happy.+1 # Find next Happy number
⇌[⍥(NH.) 7 1]
HC ← /+ⁿ2⊥₁₀ # Happiness = sum of squares of digits.
Happy ← memo(=1⊢⍢(⊂HC⊸⊢|¬˜∊°⊂)[∘]) # Apply HC until it repeats or = 1.
↙8▽⊸≡Happy⇡40

View file

@ -1,30 +0,0 @@
count = 0
firsteigth=""
For i = 1 To 100
If IsHappy(CInt(i)) Then
firsteight = firsteight & i & ","
count = count + 1
End If
If count = 8 Then
Exit For
End If
Next
WScript.Echo firsteight
Function IsHappy(n)
IsHappy = False
m = 0
Do Until m = 60
sum = 0
For j = 1 To Len(n)
sum = sum + (Mid(n,j,1))^2
Next
If sum = 1 Then
IsHappy = True
Exit Do
Else
n = sum
m = m + 1
End If
Loop
End Function