Sum to 100: Difference between revisions
m
→{{header|Julia}}
Line 3,857:
=={{header|Julia}}==
<lang julia>using Printf, IterTools, DataStructures
expr(p::String...)::String = @sprintf("%s1%s2%s3%s4%s5%s6%s7%s8%s9", p...)
function genexpr()::Vector{String}
op = ["+", "-", ""]
return collect(expr(p...) for (p) in Iterators.product(op, op, op, op, op, op, op, op, op) if p[1] != "+")
end
using DataStructures
function allexpr()::Dict{Int,Int}
rst = DefaultDict{Int,Int}(0)
for e in genexpr()
val = eval(Meta.parse(e))
rst[val] += 1
end
return rst
end
sumto(val::Int)::Vector{String} = filter(e -> eval(Meta.parse(e)) == val, genexpr())
function maxsolve()::Dict{Int,Int}
ae = allexpr()
vmax = maximum(values(ae))
smax = filter(ae) do (v, f)
f == vmax
end
Line 3,897:
return sort!(sums; rev=true)[1:n]
end
const solutions = sumto(100)
const hsums = highestsums(10)
println("100 =")
foreach(println, solutions)
println("\nMax number of solutions:")
for (v, f) in
@printf("%3i -> %2i\n", v, f)
end
println("\nMin number with no solutions: $
println("\nHighest sums representable:")
foreach(println, hsums)
</lang>{{out}}▼
▲{{out}}
<pre>100 =
1+23-4+56+7+8+9
|