Factorions: Difference between revisions

Content added Content deleted
(→‎{{header|Perl}}: added a more efficient version)
m (→‎{{header|Sidef}}: minor code simplifications)
Line 526: Line 526:


=={{header|Sidef}}==
=={{header|Sidef}}==
<lang ruby>func upper_bound(b = 10) {
<lang ruby>func max_power(b = 10) {
var m = 1
var m = 1
var f = (b-1)!
var f = (b-1)!
while (m*f > b**(m-1)) {
while (m*f >= b**(m-1)) {
m += 1
m += 1
}
}
return (b==2 ? 2 : m-1)
return m-1
}
}


Line 538: Line 538:


var result = []
var result = []
var digits = @(^b)
var digits = @^b
var fact = digits.map { _! }
var fact = digits.map { _! }


for k in (1 .. upper_bound(b)) {
for k in (1 .. max_power(b)) {
digits.combinations_with_repetition(k, {|*comb|
digits.combinations_with_repetition(k, {|*comb|
var n = comb.sum_by { fact[_] }
var n = comb.sum_by { fact[_] }
if (n.digits(b).sort == comb.sort) {
if (n.digits(b).sort == comb) {
result << n
result << n
}
}