Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -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;
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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.
|
||||
|
|
@ -27,7 +27,7 @@ isHappy(int n)
|
|||
^ true
|
||||
}
|
||||
|
||||
public program()
|
||||
public Program()
|
||||
{
|
||||
auto happynums := new List<int>(8);
|
||||
int num := 1;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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 ','
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
happy(8)
|
||||
7,10,13,19,23,28,31,32
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue