Talk:Zeckendorf number representation: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎Consensus on the sequence: no duplicate 1s, no required method)
Line 12: Line 12:
This is me asking for help. Help!<br>
This is me asking for help. Help!<br>
Anyone care to suggest a rework of the task that would be better. Or would a re-wording allowing different starting conditions so long as they were stated suffice? Technically the task is still draft but it would be good if any change meant minor or no change to the existing solutions of others. P.S. Thanks Sonia, Ledrug, TimToady for the comments so far. --[[User:Paddy3118|Paddy3118]] 20:02, 11 October 2012 (UTC)
Anyone care to suggest a rework of the task that would be better. Or would a re-wording allowing different starting conditions so long as they were stated suffice? Technically the task is still draft but it would be good if any change meant minor or no change to the existing solutions of others. P.S. Thanks Sonia, Ledrug, TimToady for the comments so far. --[[User:Paddy3118|Paddy3118]] 20:02, 11 October 2012 (UTC)

: The sequence should be specified as 1,2,3,5,8..., and a Zeckendorf representation of a non-negative integer n is n expressed as the sum of non-consecutive terms in that sequence. This is sufficient and unambiguous: every n >= 0 has a unique such representation, and vice versa. I don't think the task should specify ''how'' one derives such a summation from n; listing a method as a hint, fine, putting it in the spec as if it's required, no. --[[User:Ledrug|Ledrug]] 23:47, 11 October 2012 (UTC)


==Perl 6, wrong fib sequence==
==Perl 6, wrong fib sequence==

Revision as of 23:47, 11 October 2012

Consensus on the sequence

Googling around, there seems to be a lack of consensus on the sequence of Fibonacci numbers used and how the sequence is indexed. If you include both F(1) = 1 and F(2) = 1, then the representation 1 is not unique. Similarly, if you include F(0) = 0, then the representation of 0 is not unique.

Mathworld's page on Zeckendorf's theorem mentions that it applies to {F-1}, that is, the Fibonacci sequence with one of the 1s removed, and presumably without the 0. —Sonia 22:39, 10 October 2012 (UTC)

There simply can't be two 1s, otherwise a lot of numbers won't have unique summation: anything in for form of big_fib + 3 can also be written as big_fib + 2 + 1 (that's using the first one; the second one would be next to 2, if that makes sense -- well if it doesn't, it sort of proves the point also.) --Ledrug 01:27, 11 October 2012 (UTC)
I will modify the task description to specify an algorithm to use that can only give a unique sequence. Thanks for the heads-up. --Paddy3118 12:08, 11 October 2012 (UTC)
Task specific 2 is still ambiguous for the case of ZR(1). The sequences {1} and {1, 1} both satisfy the criterion of the greatest of the sequence being a number less than or equal to the number for conversion, but the greedy rule leads the first to produce ZR(1) = 1 and the second ZR(1) = 10. —Sonia 17:51, 11 October 2012 (UTC)

This is me asking for help. Help!
Anyone care to suggest a rework of the task that would be better. Or would a re-wording allowing different starting conditions so long as they were stated suffice? Technically the task is still draft but it would be good if any change meant minor or no change to the existing solutions of others. P.S. Thanks Sonia, Ledrug, TimToady for the comments so far. --Paddy3118 20:02, 11 October 2012 (UTC)

The sequence should be specified as 1,2,3,5,8..., and a Zeckendorf representation of a non-negative integer n is n expressed as the sum of non-consecutive terms in that sequence. This is sufficient and unambiguous: every n >= 0 has a unique such representation, and vice versa. I don't think the task should specify how one derives such a summation from n; listing a method as a hint, fine, putting it in the spec as if it's required, no. --Ledrug 23:47, 11 October 2012 (UTC)

Perl 6, wrong fib sequence

Could there also be a submission for Perl6 that used the sequence starting 1, 1, 2, ... The present example could be put second as an alternative, with the present description of how it differs from the task description if you like. --Paddy3118 12:14, 11 October 2012 (UTC)

If you're going to mandate the 1,1 sequence, then there's no point in having alternatives. On the other hand, you could mandate that the initial sequence must be specified by the user, perhaps defaulting to 1,1. But 0,1 and 1,2 are also sane, the latter because it eliminates the useless 0 on the end of every result, and the former because that's also a common way to define Fibonacci sequences. The 1,2 version is also appropriate under the notion that you're just using all the positive Fibonacci numbers in order, not the sequence itself. But as my grandmother-in-law used to say, this is all a tempest in a teabag. :-) --TimToady
By the way, according to your own criteria, the Python solutions are incorrect for 1, since using the 1,1 in the reversed order greedily should produce '10', not '1'. You shouldn't have to special-case 1 like that. --17:59, 11 October 2012 (UTC)
More to the point, if you don't introduce a special discontinuity like that at 1, then the 1,1 and 1,2 solutions are isomorphic modulo the presence or absence of a trailing 0. Though I should probably not have said "incorrect" above; as Sonia points out, it's ambiguously specified. But I'd very much prefer to disambiguate the rule by saying something like "Using all the numbers in the sequence less than or equal to the number." This is in keeping with the greediness and the reversal of the sequence. Alternately I would not be adverse to going back to a formulation that uses "All the positive Fibonacci numbers in order." That is, the 1,2 solution. Which most of the implementations chose back when it was still unspecified as 1,1... --TimToady 18:11, 11 October 2012 (UTC)