good chemistry is complicated,and a little bit messy -LW PerlMonks

### fibo's 66 chars

by Oromis92 (Sexton)
 on May 24, 2009 at 11:20 UTC Need Help??

```\$a=shift;@b=(0,1);push@b,\$b[-2]+\$b[-1]while\$#b<\$a;print"\$b[-2]\n";

Replies are listed 'Best First'.
Re: fibo's 66 chars
by TimToady (Parson) on May 28, 2009 at 04:23 UTC
Not much point in golfing fibonacci in Perl 6:
```    0,1...&[+]
Really?! You're making that up! :D
Re: fibo's 66 chars
by pepik_knize (Scribe) on May 26, 2009 at 05:28 UTC
I agree, very nice. If you're golfing this, I have a few reductions for you:

You can save yourself a couple of characters by using pop instead of shift.

Also, if you use -l, you can get rid of the quotes and newline:
\$a=pop;@b=(0,1);push@b,\$b[-2]+\$b[-1]while\$#b<\$a;print\$b[-2]

Then, you can cut down the while\$#b<\$a by using for(2..\$a):
\$a=pop;@b=(0,1);push@b,\$b[-2]+\$b[-1]for(2..\$a);print\$b[-2]

Of all the causes that conspire to blind
Man's erring judgment, and misguide the mind,
What the weak head with strongest bias rules,
Is pride, the never-failing vice of fools.
-- Pope.
Since you only use the parameter once, it's cheaper to just reference it as \$ARGV[0] pop it inline rather than assign it to anything.
```@b=(0,1);push@b,\$b[-2]+\$b[-1]for 2..pop;print\$b[-2]
You can save fourteen more strokes (and, irrelevantly, memory) by not using an array and using convoluted scalar assignment with a variable that is pre-initialized:
```\$b=1;\$?=(\$b+=\$?)-\$?for 2..pop;print\$?

Caution: Contents may have been coded under pressure.
Re: fibo's 66 chars
by CountZero (Bishop) on May 24, 2009 at 15:04 UTC
Very nice! ++

And for a change, without using recursion.

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

Re: fibo's 66 chars
by ambrus (Abbot) on May 27, 2009 at 19:31 UTC
Re: fibo's 66 chars
by Anonymous Monk on May 27, 2009 at 16:06 UTC
Or, without creating a large list:
```@b=(0,1);@b=(\$b[1],\$b[0]+\$b[1])for(2..pop);print\$b[1];
(and there is no reason to assign \$a)

20090727 Janitored by Corion: Added formatting, code tags, as per Writeup Formatting Tips

I starting going down that path too, but noticed that it fails for 1.
```\$ perl -e'@b=(0,1);@b=(\$b[1],\$b[0]+\$b[1])for(2..pop);print\$b[1]' 1
1

Of all the causes that conspire to blind
Man's erring judgment, and misguide the mind,
What the weak head with strongest bias rules,
Is pride, the never-failing vice of fools.
-- Pope.

Create A New User
Node Status?
node history
Node Type: obfuscated [id://765916]
Front-paged by grinder
help
Chatterbox?
 [karlgoethebier]: My perltidy adds a semicolon after .... How can i avoid this? [LanX]: ellipse aka ... aka yadda yadda is a new command [LanX]: sopw! [1nickt]: Sorry kgb can't help there, not a perltidy user.

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (9)
As of 2017-11-18 18:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In order to be able to say "I know Perl", you must have:

Results (277 votes). Check out past polls.

Notices?