Sum to 100: Difference between revisions

m
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)
max const smax = maxsolve()
minconst smin = minsolve()
const hsums = highestsums(10)
 
println("100 =")
foreach(println, solutions)
 
println("\nMax number of solutions:")
for (v, f) in maxsmax
@printf("%3i -> %2i\n", v, f)
end
 
println("\nMin number with no solutions: $minsmin")
 
println("\nHighest sums representable:")
foreach(println, hsums)</lang>
</lang>{{out}}
 
{{out}}
<pre>100 =
1+23-4+56+7+8+9
4,102

edits