Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: (Golf) Fragment Reassembly

by MeowChow (Vicar)
on May 03, 2001 at 10:55 UTC ( #77591=note: print w/replies, xml ) Need Help??

in reply to (Golf) Fragment Reassembly

Ok, here's my current solution at 192 chars.
sub a{$#_?(sort{length$a<=>length$b}map{my$s=$_;my@l=grep{$s ne $_}@_; +map{my$t=$_;my@m=grep{$t ne $_}@l;a(i($s,$t),@m)}@l}@_)[0]:pop} sub i{($_,$t)=@_;chop$t while!s/\Q$t\E$/$_[1]/&&''ne$t;$_;} print a qw(logger gerbil log analog); print "\n"; print a qw(GATTACA ATTACA GATT AAGAT CCC);
update1: trimmed another 4 chars from the i sub, and stopped clobbering globals:
sub i{my($s,$t)=@_;chop$t while$s!~s/\Q$t\E$/$_[1]/;$s}
... if we're clobbering $_, we can trim another 5:
sub i{($_,$t)=@_;chop$t while!s/\Q$t\E$/$_[1]/;$_}
update2: 163 chars, strict and global-clean, all in one sub, named assemble (or 156 if it's named a):
sub assemble{$#_?(sort{length$a<=>length$b}map{my$s=$_;my@l=grep$s ne$ +_,@_;map{my($t,$u)=($s,$_);my@m=grep$u ne$_,@l;chop$u while$t!~s/\Q$u +\E$/$_/;assemble($t,@m)}@l}@_)[0]:pop}
               s aamecha.s a..a\u$&owag.print

Replies are listed 'Best First'.
Re: Re: (Golf) Fragment Reassembly
by dws (Chancellor) on May 03, 2001 at 11:11 UTC
    Ok, here's my current solution at 192 chars.

    If we're only counting inside of sub assemble { ... } then I count 185 characters (and it passes my stress tests). Though if you use "assemble", as the problem statement suggests, you're up back up to 192 characters. Still, that's excellent.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://77591]
and the grasshoppers chirp...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2017-03-25 19:46 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (313 votes). Check out past polls.