Fibonacci products
Python, 54 bytes
f=lambda n,a=1,b=1:n<1or b>n and a*f(n-a)or f(n,b,a+b)
Just some good old recursion.
Perl, 69 63 + 4 (-pl61
flag) = 67 bytes
#!perl -pl61
while($_){$n=$m=1;($n,$m)=($m,$n+$m)until$m>$_;$_-=$n;$\*=$n}}{
Using:
> echo 42 | perl -pl61e 'while($_){$n=$m=1;($n,$m)=($m,$n+$m)until$m>$_;$_-=$n;$\*=$n}}{'
Ungolfed:
while (<>) {
# code above added by -p
# $_ has input value
# $\ = 1 by -l61
while ($_ != 0) {
my $n = 1;
my $m = 1;
while ($m <= $_) {
($n, $m) = ($m, $n + $m);
}
$_ -= $n;
$\ *= $n;
}
} {
# code below added by -p
print; # prints $_ (undef here) and $\
}
Ideone.
Jelly, 16 15 bytes
Rf1+С¤ṪạµÐĿIAP
Not particularly fast or memory friendly, but efficient enough for all test cases. Try it online!
How it works
Rf1+С¤ṪạµÐĿIAP Main link. Argument: n (integer)
µ Combine the chain to the left into a link.
ÐĿ Apply that link until the results are no longer unique.
Return the list of unique results.
¤ Combine the two links to the left into a niladic chain.
1 Set the left (and right) argument to 1.
+D¡ Apply + to the left and right argument, updating the left
argument with the sum, and the right argument with the
previous value of the left one. Return the list of results.
Repeat this process n times.
This yields n + 1 Fibonacci numbers, starting with 1, 2.
R Range; map k to [1, ..., k].
f Filter; keep the items in the range that are Fibonacci numbers.
Ṫ Tail; yield the last one or 0 if the list is empty.
ạ Absolute difference with k.
This is the argument of the next iteration.
I Compute the increments of the arguments to the loop, yielding
the selected Fibonacci numbers (with changed sign).
A Apply absolute value to each.
P Compute their product.