The Name Game: Difference between revisions
No edit summary |
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add perl 6 example) |
||
Line 47: | Line 47: | ||
Fee-fi-mo-melix |
Fee-fi-mo-melix |
||
Felix! |
Felix! |
||
=={{header|Perl 6}}== |
|||
{{works with|Rakudo|2018.03}} |
|||
Meh. The rules leave out some corner cases (see Steve) but what the heck, technically correct is the best kind of correct. |
|||
<lang perl6>sub mangle ($name, $initial) { |
|||
my $fl = $name.lc.substr(0,1); |
|||
$fl ~~ /<[aeiou]>/ |
|||
?? $initial~$name.lc |
|||
!! $fl eq $initial |
|||
?? $name.substr(1) |
|||
!! $initial~$name.substr(1) |
|||
} |
|||
sub name-game (Str $name) { |
|||
qq:to/NAME-GAME/; |
|||
$name, $name, bo-{ mangle $name, 'b' } |
|||
Banana-fana fo-{ mangle $name, 'f' } |
|||
Fee-fi-mo-{ mangle $name, 'm' } |
|||
$name! |
|||
NAME-GAME |
|||
} |
|||
say name-game $_ for <Gary Billy Felix Mike Steve></lang> |
|||
{{out}} |
|||
<pre>Gary, Gary, bo-bary |
|||
Banana-fana fo-fary |
|||
Fee-fi-mo-mary |
|||
Gary! |
|||
Billy, Billy, bo-illy |
|||
Banana-fana fo-filly |
|||
Fee-fi-mo-milly |
|||
Billy! |
|||
Felix, Felix, bo-belix |
|||
Banana-fana fo-elix |
|||
Fee-fi-mo-melix |
|||
Felix! |
|||
Mike, Mike, bo-bike |
|||
Banana-fana fo-fike |
|||
Fee-fi-mo-ike |
|||
Mike! |
|||
Steve, Steve, bo-bteve |
|||
Banana-fana fo-fteve |
|||
Fee-fi-mo-mteve |
|||
Steve! |
|||
</pre> |
Revision as of 15:38, 24 March 2018
Write a program that accepts a name as input and outputs the lyrics to the Shirley Ellis song "The Name Game"
The regular verse
Unless your name begins with a vowel (A, E, I, O, U), 'B', 'F' or 'M' you don't have to care about special rules. The verse for the name 'Gary' would be like this:
Gary, Gary, bo-bary Banana-fana fo-fary Fee-fi-mo-mary Gary!
At the end of every line, the name gets repeated without the first letter: Gary becomes ary If we take (X) as the full name (Gary) and (Y) as the name without the first letter (ary) the verse would look like this:
(X), (X), bo-b(Y) Banana-fana fo-f(Y) Fee-fi-mo-m(Y) (X)!
Vowel as first letter of the name
If you have a vowel as the first letter of your name (e.g. Earl) you do not truncate the name. The verse looks like this:
Earl, Earl, bo-bearl Banana-fana fo-fearl Fee-fi-mo-mearl Earl!
'B', 'F' or 'M' as first letter of the name
In case of a 'B', an 'F' or an 'M' (e.g. Billy, Felix, Mary) there is a special rule. The line which would 'rebuild' the name (e.g. bo-billy) is sang without the first letter of the name. The verse for the name Billy looks like this:
Billy, Billy, bo-illy Banana-fana fo-filly Fee-fi-mo-milly Billy!
For the name 'Felix', this would be right:
Felix, Felix, bo-belix Banana-fana fo-elix Fee-fi-mo-melix Felix!
Perl 6
Meh. The rules leave out some corner cases (see Steve) but what the heck, technically correct is the best kind of correct.
<lang perl6>sub mangle ($name, $initial) {
my $fl = $name.lc.substr(0,1); $fl ~~ /<[aeiou]>/ ?? $initial~$name.lc !! $fl eq $initial ?? $name.substr(1) !! $initial~$name.substr(1)
}
sub name-game (Str $name) {
qq:to/NAME-GAME/; $name, $name, bo-{ mangle $name, 'b' } Banana-fana fo-{ mangle $name, 'f' } Fee-fi-mo-{ mangle $name, 'm' } $name! NAME-GAME
}
say name-game $_ for <Gary Billy Felix Mike Steve></lang>
- Output:
Gary, Gary, bo-bary Banana-fana fo-fary Fee-fi-mo-mary Gary! Billy, Billy, bo-illy Banana-fana fo-filly Fee-fi-mo-milly Billy! Felix, Felix, bo-belix Banana-fana fo-elix Fee-fi-mo-melix Felix! Mike, Mike, bo-bike Banana-fana fo-fike Fee-fi-mo-ike Mike! Steve, Steve, bo-bteve Banana-fana fo-fteve Fee-fi-mo-mteve Steve!