Magic numbers: Difference between revisions

Added Wren
(New draft task and Raku example)
 
(Added Wren)
Line 85:
 
All magic numbers that are pan-digital in 0 through 9 with no repeats: 3816547290</pre>
 
=={{header|Wren}}==
{{libheader|Wren-big}}
{{libheader|Wren-fmt}}
This is based on the Python code in the Wikipedia article.
<syntaxhighlight lang="ecmascript">import "./big" for BigInt
import "./fmt" for Fmt
 
var polydivisible = Fn.new {
var numbers = []
var previous = (1..9).toList
var new = []
var digits = 2
while (previous.count > 0) {
numbers.add(previous)
for (n in previous) {
for (j in 0..9) {
var number = BigInt.ten * n + j
if (number % digits == 0) new.add(number)
}
}
previous = new
new = []
digits = digits + 1
}
return numbers
}
 
var numbers = polydivisible.call()
numbers[0].add(BigInt.zero) // include zero
var total = numbers.reduce(0) { |acc, number| acc + number.count }
Fmt.print("There are $,d magic numbers in total.", total)
 
var largest = numbers[-1][-1]
Fmt.print("\nThe largest is $,i.", largest)
 
System.print("\nThere are:")
for (i in 0...numbers.count) {
Fmt.print("$,5d with $2d digit$s", numbers[i].count, i+1, (i == 0) ? "" : "s")
}
 
var pd19 = []
for (n in numbers[8]) {
var s = n.toString
var pandigital = true
for (i in 1..9) {
if (!s.contains(i.toString)) {
pandigital = false
break
}
}
if (pandigital) pd19.add(n)
}
System.print("\nAll magic numbers that are pan-digital in 1 through 9 with no repeats: ")
Fmt.print("$,i", pd19)
 
var pd09 = []
for (n in numbers[9]) {
var s = n.toString
var pandigital = true
for (i in 0..9) {
if (!s.contains(i.toString)) {
pandigital = false
break
}
}
if (pandigital) pd09.add(n)
}
System.print("\nAll magic numbers that are pan-digital in 0 through 9 with no repeats: ")
Fmt.print("$,i", pd09)</syntaxhighlight>
 
{{out}}
<pre>
There are 20,457 magic numbers in total.
 
The largest is 3,608,528,850,368,400,786,036,725.
 
There are:
10 with 1 digit
45 with 2 digits
150 with 3 digits
375 with 4 digits
750 with 5 digits
1,200 with 6 digits
1,713 with 7 digits
2,227 with 8 digits
2,492 with 9 digits
2,492 with 10 digits
2,225 with 11 digits
2,041 with 12 digits
1,575 with 13 digits
1,132 with 14 digits
770 with 15 digits
571 with 16 digits
335 with 17 digits
180 with 18 digits
90 with 19 digits
44 with 20 digits
18 with 21 digits
12 with 22 digits
6 with 23 digits
3 with 24 digits
1 with 25 digits
 
All magic numbers that are pan-digital in 1 through 9 with no repeats:
381,654,729
 
All magic numbers that are pan-digital in 0 through 9 with no repeats:
3,816,547,290
</pre>
9,476

edits