Numbers with prime digits whose sum is 13: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 41: | Line 41: | ||
Unlucky numbers are: |
Unlucky numbers are: |
||
[337,355,373,535,553,733,2227,2272,2335,2353,2533,2722,3235,3253,3325,3352,3523,3532,5233,5323,5332,7222,22225,22252,22333,22522,23233,23323,23332,25222,32233,32323,32332,33223,33232,33322,52222,222223,222232,222322,223222,232222,322222] |
[337,355,373,535,553,733,2227,2272,2335,2353,2533,2722,3235,3253,3325,3352,3523,3532,5233,5323,5332,7222,22225,22252,22333,22522,23233,23323,23332,25222,32233,32323,32332,33223,33232,33322,52222,222223,222232,222322,223222,232222,322222] |
||
</pre> |
|||
=={{header|Wren}}== |
|||
{{libheader|Wren-math}} |
|||
{{libheader|Wren-seq}} |
|||
{{libheader|Wren-sort}} |
|||
As the only digits which are prime are [2, 3, 5, 7], it is clear that a number must have between 3 and 6 digits for them to sum to 13. |
|||
<lang ecmascript>import "/math" for Nums |
|||
import "/seq" for Lst |
|||
import "/sort" for Sort |
|||
var combrep // recursive |
|||
combrep = Fn.new { |n, lst| |
|||
if (n == 0 ) return [[]] |
|||
if (lst.count == 0) return [] |
|||
System.write("") // guard against VM recursion bug |
|||
var r = combrep.call(n, lst[1..-1]) |
|||
for (x in combrep.call(n-1, lst)) { |
|||
var y = x.toList |
|||
y.add(lst[0]) |
|||
r.add(y) |
|||
} |
|||
return r |
|||
} |
|||
var permute // recursive |
|||
permute = Fn.new { |input| |
|||
if (input.count == 1) return [input] |
|||
var perms = [] |
|||
var toInsert = input[0] |
|||
System.write("") // guard against VM recursion bug |
|||
for (perm in permute.call(input[1..-1])) { |
|||
for (i in 0..perm.count) { |
|||
var newPerm = perm.toList |
|||
newPerm.insert(i, toInsert) |
|||
perms.add(newPerm) |
|||
} |
|||
} |
|||
return perms |
|||
} |
|||
var primes = [2, 3, 5, 7] |
|||
var res = [] |
|||
for (n in 3..6) { |
|||
var reps = combrep.call(n, primes) |
|||
for (rep in reps) { |
|||
if (Nums.sum(rep) == 13) { |
|||
var perms = permute.call(rep) |
|||
for (i in 0...perms.count) perms[i] = Num.fromString(perms[i].join()) |
|||
res.addAll(Lst.distinct(perms)) |
|||
} |
|||
} |
|||
} |
|||
Sort.quick(res) |
|||
System.print("Those numbers whose digits are all prime and sum to 13 are:") |
|||
System.print(res)</lang> |
|||
{{out}} |
|||
<pre> |
|||
Those numbers whose digits are all prime and sum to 13 are: |
|||
[337, 355, 373, 535, 553, 733, 2227, 2272, 2335, 2353, 2533, 2722, 3235, 3253, 3325, 3352, 3523, 3532, 5233, 5323, 5332, 7222, 22225, 22252, 22333, 22522, 23233, 23323, 23332, 25222, 32233, 32323, 32332, 33223, 33232, 33322, 52222, 222223, 222232, 222322, 223222, 232222, 322222] |
|||
</pre> |
</pre> |