giulienk has asked for the wisdom of the Perl Monks concerning the following question:
I need to work out a bunch of data with an algorithm i didn't choose. The algorithm has nothing to do with the "real" soundex algorithm (see Text::Soundex), even though it was called like that where i read it. So from now on i will baptize this algorithm Weirdex; this is described to receive a string in input and then:
- Strip chars outside [a-zA-Z] range
- Take all consonants except doubles (that should be reduced to one)
- Take just the first vowel
Examples:
Original | Weirdex |
---|---|
giulienk | gilnk |
larry wall | larywl |
etheroskedasticity | ethrskdstcty |
My first coding of Weirdex is
sub weirdex { local $_ = shift; my ($weirdex, $vowel) = ('', 0); s/[^a-zA-Z]//g; for (split '') { if (/[aeiou]/i) { $vowel++ or $weirdex .= $_; } else { $weirdex .= $_ if substr($weirdex, -1, 1) ne $_; } } return $weirdex; }
I'm interested in more elegant/efficient solutions, only regexp solutions and even Golf/Obfu ones.
Thank you.
$|=$_="1g2i1u1l2i4e2n0k",map{print"\7",chop;select$,,$,,$,,$_/7}m{..}g
Back to
Seekers of Perl Wisdom