Magic numbers: Difference between revisions

→‎F#: Add count of Magic numbers
m (→‎Python: some code cleanup)
(→‎F#: Add count of Magic numbers)
Line 171:
=={{header|F_Sharp|F#}}==
<syntaxhighlight lang="fsharp">
// Magic numbers. Nigel Galloway: February 1010th., 2023
let digs=[|0..10|]|>Array.map(System.UInt128.CreateChecked)
let fN n g=n|>List.collect(fun n->let n=n*digs[10] in [for g in digs[0..9]->n+g]|>List.filter(fun n->n%g=digs[0]))
let fG (n:int []) g=let rec fN g=if g<digs[10] then n[int g]<-n[int g]-1 else n[int(g%digs[10])]<-n[int(g%digs[10])]-1; fN (g/digs[10])
fN g; Array.forall ((=)0) n
//let magic=Array.unfold(fun(n,g)->match n with []->None |n->let n=fN n g in Some(n,(n,g+digs[1])))([digs[1]..digs[9]],digs[2])
let magic=Array.append [|[digs[0]..digs[9]]|] (Array.unfold(fun(n,g)->match n with []->None |n->let n=fN n g in Some(n,(n,g+digs[1])))([digs[1]..digs[9]],digs[2]))
magic|>Array.iteri(fun n g->printfn "There are %d magic numbers of length %d" (List.length g) (n+2))
printfn $"There are %d{magic|>Array.sumBy(List.length)} Magic numbers"
magic|>Array.iteri(fun n g->printfn "There are %d magic numbers of length %d" (List.length g) (n+21))
printfn $"Largest magic number is %A{magic.[magic.Length-2]|>List.max}"
let fG=fG [|0;1;1;1;1;1;1;1;1;1|] in printf "Minimally pan-digital(1..9) magic numbers are: "; magic[78]|>List.filter(fun n->fG [|0;1;1;1;1;1;1;1;1;1|] n)|>List.iter(printf "%A ");printfn ""
let fG=fG [|1;1;1;1;1;1;1;1;1;1|] in printf "Minimally pan-digital(01..9) magic numbers are: "; magic[89]|>List.filter(fun n->fG [|1;1;1;1;1;1;1;1;1;1|] n)|>List.iter(printf "%A ");printfn ""9
</syntaxhighlight>
{{out}}
Line 213 ⟶ 215:
Minimally pan-digital(0..9) magic numbers are: 3816547290
</pre>
 
=={{header|jq}}==
'''Adapted from [[#Wren|Wren]]'''
2,172

edits