http://www.perlmonks.org?node_id=76095


in reply to Golf: Embedded In Order

Here's mine. It's très cool.
# 37 chars (between the {...}) sub seq{shift=~join'.*',map"\Q$_",split//,pop}
Update -- after seeing chipmunk's code, which beats mine, I offer one minor adjustment:
sub seq{($t=pop)=~s/./$&.*/sg;pop=~/$t/s}
Although, should the $t by my()ed? I'm all for strict-compliant golf. Anyway, I changed the @_ access to pop, and added a needed /s modifier to both regexes. It makes it longer than chipmunk's, but doesn't break on cases involving newlines.

japhy -- Perl and Regex Hacker

Replies are listed 'Best First'.
Re: Re: Golf: Embedded In Order
by chipmunk (Parson) on Apr 30, 2001 at 09:08 UTC
    Since the goal of Perl Golf is to make the code as short as possible, it seems to me that making the code strict-compliant is a waste of characters. Especially since one could just do something like:
    sub seq{ ($~=pop)=~s/./$&.*/sg;pop=~/$~/s }
    :)

    I do try to avoid warnings in my Golf solutions, though.

Re: Re: Golf: Embedded In Order
by petral (Curate) on May 26, 2001 at 01:41 UTC
    But you don't need the $t! 27 chars:
    seq{shift=~join".*",split//,pop}
    Or 25 using /./g:
    seq{shift=~join".*",pop=~/./g}
    Or 33 with pathological protection:
    seq{shift=~join"\E.*\Q","",pop=~/./gs}
      p