in reply to Re: Egyptian fractions (Golf Anyone?)
in thread Egyptian fractions

Ah, no, Limbic~Region,

your's ain't golf. No modules, lest I would say

use Junk;do

- 11 chars.. but that could be golfed down to use J;d - 7 chars ;-)

blokhead's solutions look neat, but they hog my cpu... (with 2355/12344 - still not finished in 3/4 hour ;-)

#!/usr/bin/perl -l pop=~m|/|;($f,$g)=($`,$');sub d{int($_[1]/$_[0]+1)}sub g{($x,$y)=@_;($x,$y)=($y,$x% $y)while$y;$x} sub re{($p ,$e,$r,$l)=@_;($p,$l)=($p*$l-$e*$r,$e*$l);$g=g($p,$l); for($p,$l){$_/=$g};($p,$l)}while($f>1){push@o,"1/".d(# $f,$g);($f,$g)=re($f,$g,1,d($f,$g));}print join' + ',# @o,"$f/$g";# ungolfed and thus not for production use!

way too long...

<update> golfed down a bit... (198 chars, counting newlines).

($z,$n)=($_=pop)=~/(.+)\/(.+)/;$s='==';for(;;){$m=int($n/$z+1);$_ .=" $s 1/".($z==1?$n:$m);$z<=1&&last;($z,$n)=($z*$m-$n,$m*$n);($x ,$y)=($z,$n);($x,$y)=($y,$x%$y)while$y;$z/=$x;$n/=$x;$s='+'}print
It computes egyptian fractions like this
qwurx [shmem] ~> perl -l egy.pl 2355/12344 2355/12344 == 1/6 + 1/42 + 1/3282 + 1/15755059 + 1/744665636525384

in no time... </update>

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^3: Egyptian fractions (Golf Anyone?)
by dewey (Pilgrim) on Aug 26, 2006 at 03:04 UTC
    A modification of blokhead's idea... what golf can go without regular expressions? 72 strokes:
    for($_=pop;/\//,$`;$_=$x*$`-$'.'/'.$'*$x){1while++$x<$'/$`;print"1/$x "}
    I counted the line break as one character, is that kosher?
    Update: I see also shmem had a similar thought, I had missed that before posting somehow.
    Update again: Changed the title of this node to not be dumb. Sorry all, thanks for the feedback those who messaged me!
    ~dewey