numbers_with_digitsum.sf 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 06 July 2021
  4. # https://github.com/trizen
  5. # Generate numbers with prime digits and with a given digit-sum (in a given base).
  6. # See also:
  7. # https://rosettacode.org/wiki/Numbers_with_prime_digits_whose_sum_is_13
  8. func generate_from_prefix(digitsum, p, base, digits, t=p) {
  9. var seq = [p]
  10. for d in (digits) {
  11. t+d <= digitsum || return seq
  12. seq << __FUNC__(digitsum, p*base + d, base, digits, t+d)...
  13. }
  14. return seq
  15. }
  16. func numbers_with_digitsum(digitsum, base = 10, digits = (base-1 -> primes)) {
  17. digits.map { generate_from_prefix(digitsum, _, base, digits)... }\
  18. .grep { .sumdigits(base) == digitsum }\
  19. .sort
  20. }
  21. say numbers_with_digitsum(13)
  22. __END__
  23. [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]