lambdaway
::
factorions
6
|
list
|
login
|
load
|
|
_h1 factorions _p Following [[rosettacode|https://rosettacode.org/wiki/Factorions]], a factorion is a natural number that equals the sum of the factorials of its digits. Example: {b 1! + 4! + 5! = 1 + 24 + 120 = 145} {prewrap ;; {def fact {lambda {:n} {if {= :n 0} then 1 else {* {S.serie 1 :n}}}}} '{def facts {S.first {S.map {{lambda {:a :i} {A.addlast! {* {A.get {- :i 1} :a} :i} :a} } {A.new 1}} {S.serie 1 11}}}} -> {def facts {S.first {S.map {{lambda {:a :i} {A.addlast! {* {A.get {- :i 1} :a} :i} :a} } {A.new 1}} {S.serie 1 11}}}} '{def sumfacts {def sumfacts.r {lambda {:base :sum :i} {if {> :i 0} then {sumfacts.r :base {+ :sum {A.get {% :i :base} {facts}}} {floor {/ :i :base}}} else :sum }}} {lambda {:b :n} {sumfacts.r :b 0 :n}}} -> {def sumfacts {def sumfacts.r {lambda {:base :sum :i} {if {> :i 0} then {sumfacts.r :base {+ :sum {A.get {% :i :base} {facts}}} {floor {/ :i :base}}} else :sum }}} {lambda {:b :n} {sumfacts.r :b 0 :n}}} '{def show {lambda {:base} {S.replace \s by space in {S.map {{lambda {:base :i} {if {= {sumfacts :base :i} :i} then :i else} } :base} {S.serie 1 50000}}}}} -> {def show {lambda {:b} {S.replace \s by space in {S.map {{lambda {:b :i} {if {= {sumfacts :b :i} :i} then :i else}} :b} {S.serie 1 50000}}}}} '{S.map {lambda {:base} {div}factorions for base :base: {show :base}} 9 10 11 12} -> factorions for base 9: 1 2 41282 factorions for base 10: 1 2 145 40585 factorions for base 11: 1 2 26 48 40472 factorions for base 12: 1 2 }
lambdaway v.20211111