Numbers with prime digits whose sum is 13: Difference between revisions

From Rosetta Code
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>

Revision as of 10:55, 29 September 2020

Numbers with prime digits whose sum is 13 is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Find all the numbers vhich digits are primes and sum of them is 13.

Ring

<lang ring> load "stdlib.ring"

sum = 0 limit = 1000000 aPrimes = []

for n = 1 to limit

   sum = 0
   st = string(n)
   for m = 1 to len(st)
       num = number(st[m])
       if isprime(num)
          sum = sum + num
          flag = 1
       else
          flag = 0
          exit
       ok
    next
    if flag = 1 and sum = 13
       add(aPrimes,n)
    ok

next

see "Unlucky numbers are:" + nl see showArray(aPrimes)

func showarray vect

    svect = ""
    for n in vect
        svect += "" + n + ","
    next
    ? "[" + left(svect, len(svect) - 1) + "]"

</lang>

Output:
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]

Wren

Library: Wren-math
Library: Wren-seq
Library: 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>

Output:
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]