Left factorials: Difference between revisions

m
→‎{{header|Sidef}}: minor code updates
m (→‎{{header|Sidef}}: minor code updates)
Line 3,208:
 
=={{header|Sidef}}==
Built-in:
<lang ruby>say 20.of { .left_factorial }</lang>
 
Straightforward:
<lang ruby>func left_factleft_factorial(kn) {
^kn -> mapsum {|n| n_! } -> sum
}</lang>
 
MemoryAlternatively, efficient withusing ''Range.reduce()'':
<lang ruby>func left_factleft_factorial(kn) {
^kn -> reduce({ |a,b| a + b! }, 0)
}</lang>
 
A much faster approach:
<lang ruby>func left_factleft_factorial(n) {
static cached = 0
static factorial = 1
static leftfact = 0
 
 
if (n < cached) {
cached = 0
Line 3,229 ⟶ 3,232:
leftfact = 0
}
 
 
while (n > cached) {
leftfact += factorial
factorial *= ++cached
}
 
 
leftfact
}</lang>
 
Completing the task:
<lang ruby>for in in (0..10, 20..110 `by` 10) {
printf("!%d = %s\n", in, left_factleft_factorial(in))
}
 
for in in (1000..10000 `by` 1000) {
printf("!%d has %d digits.\n", in, left_factleft_factorial(in).len)
}</lang>
 
2,747

edits