Data Update

This commit is contained in:
Ingy döt Net 2023-07-18 13:51:12 -07:00
parent e50b5c3114
commit 633b36288a
206 changed files with 4762 additions and 965 deletions

View file

@ -1,32 +1,36 @@
# FRACTRAN interpreter implemented as an iterable struct
using .Iterators: filter, map, take
import Base: iterate, show
struct Fractran
rs::Vector{Rational{BigInt}}
i₀::BigInt
limit::Int
end
iterate(f::Fractran, i = f.i₀) =
Base.iterate(f::Fractran, i = f.i₀) =
for r in f.rs
if iszero(i % r.den) # faster than isinteger(i*r)
if iszero(i % r.den)
i = i ÷ r.den * r.num
return (i, i)
return i, i
end
end
run(f::Fractran) = map(trailing_zeros, filter(ispow2, f))
interpret(f::Fractran) =
take(
map(trailing_zeros,
filter(ispow2, f))
f.limit)
show(io::IO, f::Fractran) = join(io, take(run(f), 30), ' ')
Base.show(io::IO, f::Fractran) =
join(io, interpret(f), ' ')
macro code_str(s)
eval(Meta.parse("[" * replace(s, "/" => "//") * "]"))
[eval(Meta.parse(replace(t, "/" => "//"))) for t ∈ split(s)]
end
# Example FRACTRAN program generating primes
primes = Fractran(code"17/91, 78/85, 19/51, 23/38, 29/33, 77/29, 95/23,
77/19, 1/17, 11/13, 13/11, 15/14, 15/2, 55/1", 2)
primes = Fractran(code"17/91 78/85 19/51 23/38 29/33 77/29 95/23
77/19 1/17 11/13 13/11 15/14 15/2 55/1", 2, 30)
# Output
println("First 25 iterations of FRACTRAN program 'primes':\n2 ",