-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnumbers_with_digitsum.sf
34 lines (23 loc) · 1.01 KB
/
numbers_with_digitsum.sf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/ruby
# Daniel "Trizen" Șuteu
# Date: 06 July 2021
# https://github.com/trizen
# Generate numbers with prime digits and with a given digit-sum (in a given base).
# See also:
# https://rosettacode.org/wiki/Numbers_with_prime_digits_whose_sum_is_13
func generate_from_prefix(digitsum, p, base, digits, t=p) {
var seq = [p]
for d in (digits) {
t+d <= digitsum || return seq
seq << __FUNC__(digitsum, p*base + d, base, digits, t+d)...
}
return seq
}
func numbers_with_digitsum(digitsum, base = 10, digits = (base-1 -> primes)) {
digits.map { generate_from_prefix(digitsum, _, base, digits)... }\
.grep { .sumdigits(base) == digitsum }\
.sort
}
say numbers_with_digitsum(13)
__END__
[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]