⚠️ Warning: This is a draft ⚠️
This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.
If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.
{{task}} 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!
Ada
{{works with|Ada|Ada|2012}}
with Ada.Characters.Handling;
with Ada.Strings.Unbounded;
with Ada.Text_IO;
procedure The_Name_Game
is
package ACH renames Ada.Characters.Handling;
package ASU renames Ada.Strings.Unbounded;
function "+"(input : in String) return ASU.Unbounded_String renames ASU.To_Unbounded_String;
function "+"(input : in ASU.Unbounded_String) return String renames ASU.To_String;
function Normalize_Case(input : in String) return String is
begin
return ACH.To_Upper(input(input'First))
& ACH.To_Lower(input(input'First + 1 .. input'Last));
end Normalize_Case;
function Transform(input : in String; letter : in Character) return String is
begin
case input(input'First) is
when 'A' | 'E' | 'I' | 'O' | 'U' =>
return letter & ACH.To_Lower(input);
when others =>
if ACH.To_Lower(input(input'First)) = letter then
return input(input'First + 1 .. input'Last);
else
return letter & input(input'First + 1 .. input'Last);
end if;
end case;
end Transform;
procedure Lyrics(name : in String)
is
normalized : constant String := Normalize_Case(name);
begin
Ada.Text_IO.Put_Line(normalized & ", " & normalized & ", bo-" & Transform(normalized, 'b'));
Ada.Text_IO.Put_Line("Banana-fana, fo-" & Transform(normalized, 'f'));
Ada.Text_IO.Put_Line("fi-fee-mo-" & Transform(normalized, 'm'));
Ada.Text_IO.Put_Line(normalized & '!');
Ada.Text_IO.New_Line;
end Lyrics;
names : constant array(1 .. 5) of ASU.Unbounded_String :=
(+"Gary",
+"EARL",
+"billy",
+"FeLiX",
+"Mary");
begin
for name of names loop
Lyrics(+name);
end loop;
end The_Name_Game;
{{out}}
Gary, Gary, bo-bary
Banana-fana, fo-fary
fi-fee-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana, fo-fearl
fi-fee-mo-mearl
Earl!
Billy, Billy, bo-illy
Banana-fana, fo-filly
fi-fee-mo-milly
Billy!
Felix, Felix, bo-belix
Banana-fana, fo-elix
fi-fee-mo-melix
Felix!
Mary, Mary, bo-bary
Banana-fana, fo-fary
fi-fee-mo-ary
Mary!
ALGOL 68
{{works with|ALGOL 68G}}
main:(
PROC print lyrics = (STRING name) VOID:
BEGIN
PROC change name = (STRING name, CHAR initial) STRING:
BEGIN
CHAR lower first = to lower(name[1]);
IF char in string(lower first, NIL, "aeiou") THEN
lower first + name[2:]
ELIF lower first = initial THEN
name[2:]
ELSE
initial + name[2:]
FI
END;
print((name, ", ", name, ", bo-", change name(name, "b"), new line,
"Banana-fana fo-", change name(name, "f"), new line,
"Fee-fi-mo-", change name(name, "m"), new line,
name, "!", new line))
END;
[]STRING names = ("Gary", "Earl", "Billy", "Felix", "Mary");
FOR i FROM LWB names TO UPB names DO
print lyrics(names[i]);
print(new line)
OD
)
AWK
# syntax: GAWK -f THE_NAME_GAME.AWK
BEGIN {
n = split("gary,earl,billy,felix,mary,shirley",arr,",")
for (i=1; i<=n; i++) {
print_verse(arr[i])
}
exit(0)
}
function print_verse(name, c,x,y) {
x = toupper(substr(name,1,1)) tolower(substr(name,2))
y = (x ~ /^[AEIOU]/) ? tolower(x) : substr(x,2)
c = substr(x,1,1)
printf("%s, %s, bo-%s%s\n",x,x,(c~/B/)?"":"b",y)
printf("Banana-fana fo-%s%s\n",(c~/F/)?"":"f",y)
printf("Fee-fi-mo-%s%s\n",(c~/M/)?"":"m",y)
printf("%s!\n\n",x)
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Shirley, Shirley, bo-bhirley
Banana-fana fo-fhirley
Fee-fi-mo-mhirley
Shirley!
C
{{trans|Kotlin}}
#include <stdio.h>
#include <string.h>
void print_verse(const char *name) {
char *x, *y;
int b = 1, f = 1, m = 1, i = 1;
/* ensure name is in title-case */
x = strdup(name);
x[0] = toupper(x[0]);
for (; x[i]; ++i) x[i] = tolower(x[i]);
if (strchr("AEIOU", x[0])) {
y = strdup(x);
y[0] = tolower(y[0]);
}
else {
y = x + 1;
}
switch(x[0]) {
case 'B': b = 0; break;
case 'F': f = 0; break;
case 'M': m = 0; break;
default : break;
}
printf("%s, %s, bo-%s%s\n", x, x, (b) ? "b" : "", y);
printf("Banana-fana fo-%s%s\n", (f) ? "f" : "", y);
printf("Fee-fi-mo-%s%s\n", (m) ? "m" : "", y);
printf("%s!\n\n", x);
}
int main() {
int i;
const char *names[6] = {"gARY", "Earl", "Billy", "Felix", "Mary", "sHIRley"};
for (i = 0; i < 6; ++i) print_verse(names[i]);
return 0;
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Shirley, Shirley, bo-bhirley
Banana-fana fo-fhirley
Fee-fi-mo-mhirley
Shirley!
C++
{{trans|C#}}
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
static void printVerse(const std::string& name) {
std::string x = name;
std::transform(x.begin(), x.end(), x.begin(), ::tolower);
x[0] = toupper(x[0]);
std::string y;
switch (x[0]) {
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
y = x;
std::transform(y.begin(), y.end(), y.begin(), ::tolower);
break;
default:
y = x.substr(1);
break;
}
std::string b("b" + y);
std::string f("f" + y);
std::string m("m" + y);
switch (x[0]) {
case 'B':
b = y;
break;
case 'F':
f = y;
break;
case 'M':
m = y;
break;
default:
break;
}
printf("%s, %s, bo-%s\n", x.c_str(), x.c_str(), b.c_str());
printf("Banana-fana fo-%s\n", f.c_str());
printf("Fee-fi-mo-%s\n", m.c_str());
printf("%s!\n\n", x.c_str());
}
int main() {
using namespace std;
vector<string> nameList{ "Gary", "Earl", "Billy", "Felix", "Mary", "Steve" };
for (auto& name : nameList) {
printVerse(name);
}
return 0;
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
C#
{{trans|Java}}
using System;
using System.Collections.Generic;
using System.Text;
namespace TheNameGame {
class Program {
static void PrintVerse(string name) {
StringBuilder sb = new StringBuilder(name.ToLower());
sb[0] = Char.ToUpper(sb[0]);
string x = sb.ToString();
string y = "AEIOU".IndexOf(x[0]) > -1 ? x.ToLower() : x.Substring(1);
string b = "b" + y;
string f = "f" + y;
string m = "m" + y;
switch (x[0]) {
case 'B':
b = y;
break;
case 'F':
f = y;
break;
case 'M':
m = y;
break;
}
Console.WriteLine("{0}, {0}, bo-{1}", x, b);
Console.WriteLine("Banana-fana fo-{0}", f);
Console.WriteLine("Fee-fi-mo-{0}", m);
Console.WriteLine("{0}!", x);
Console.WriteLine();
}
static void Main(string[] args) {
List<string> nameList = new List<string>() { "Gary", "Earl", "Billy", "Felix", "Mary", "Steve" };
nameList.ForEach(PrintVerse);
}
}
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
D
import std.algorithm;
import std.array;
import std.conv;
import std.stdio;
import std.uni;
void printVerse(string name) {
auto sb = name.map!toLower.array;
sb[0] = sb[0].toUpper;
string x = sb.to!string;
string y;
switch(sb[0]) {
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
y = x.map!toLower.to!string;
break;
default:
y = x[1..$];
break;
}
string b = "b" ~ y;
string f = "f" ~ y;
string m = "m" ~ y;
switch (x[0]) {
case 'B':
b = y;
break;
case 'F':
f = y;
break;
case 'M':
m = y;
break;
default:
// no adjustment needed
break;
}
writeln(x, ", ", x, ", bo-", b);
writeln("Banana-fana fo-", f);
writeln("Fee-fi-mo-", m);
writeln(x, "!\n");
}
void main() {
foreach (name; ["Gary","Earl","Billy","Felix","Mary","steve"]) {
printVerse(name);
}
}
=={{header|F_Sharp|F#}}==
The function
// The Name Game. Nigel Galloway: March 28th., 2018
let fN g =
let fG α β γ = printfn "%s, %s, bo-%s\nBanana-fana fo-%s\nFee-fi-mo-%s\n%s!" g g α β γ g
match g.ToLower().[0] with
|'a'|'e'|'i'|'o'|'u' as n -> fG ("b"+(string n)+g.[1..]) ("f"+(string n)+g.[1..]) ("m"+(string n)+g.[1..])
|'b' -> fG (g.[1..]) ("f"+g.[1..]) ("m"+g.[1..])
|'f' -> fG ("b"+g.[1..]) (g.[1..]) ("m"+g.[1..])
|'m' -> fG ("b"+g.[1..]) ("f"+g.[1..]) (g.[1..])
|_ -> fG ("b"+g.[1..]) ("f"+g.[1..]) ("m"+g.[1..])
The Task
fN "Nigel"
{{out}}
Nigel, Nigel, bo-bigel
Banana-fana fo-figel
Fee-fi-mo-migel
Nigel!
fN "Earl"
{{out}}
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
fN "Billy"
{{out}}
Billy, Billy, bo-illy
Banana-fana fo-filly
Fee-fi-mo-milly
Billy!
fN "Fred"
{{out}}
Fred, Fred, bo-bred
Banana-fana fo-red
Fee-fi-mo-mred
Fred!
fN "Mum"
{{out}}
Mum, Mum, bo-bum
Banana-fana fo-fum
Fee-fi-mo-um
Mum!
Factor
{{trans|Kotlin}} {{works with|Factor|0.98}}
USING: ascii combinators interpolate io kernel locals
pair-rocket qw sequences ;
IN: rosetta-code.name-game
: vowel? ( char -- ? ) "AEIOU" member? ;
:: name-game ( Name -- )
Name first :> L
Name >lower :> name! L vowel? [ name rest name! ] unless
"b" :> B!
"f" :> F!
"m" :> M!
L { CHAR: B => [ "" B! ]
CHAR: F => [ "" F! ]
CHAR: M => [ "" M! ] [ drop ] } case
[I ${Name}, ${Name}, bo-${B}${name}
Banana-fana fo-${F}${name}
Fee-fi-mo-${M}${name}
${Name}!I] nl nl ;
qw{ Gary Earl Billy Felix Milton Steve } [ name-game ] each
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Milton, Milton, bo-bilton
Banana-fana fo-filton
Fee-fi-mo-ilton
Milton!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
Go
{{trans|Kotlin}}
package main
import (
"fmt"
"strings"
)
func printVerse(name string) {
x := strings.Title(strings.ToLower(name))
y := x[1:]
if strings.Contains("AEIOU", x[:1]) {
y = strings.ToLower(x)
}
b := "b" + y
f := "f" + y
m := "m" + y
switch x[0] {
case 'B':
b = y
case 'F':
f = y
case 'M':
m = y
}
fmt.Printf("%s, %s, bo-%s\n", x, x, b)
fmt.Printf("Banana-fana fo-%s\n", f)
fmt.Printf("Fee-fi-mo-%s\n", m)
fmt.Printf("%s!\n\n", x)
}
func main() {
names := [6]string{"gARY", "Earl", "Billy", "Felix", "Mary", "SHIRley"}
for _, name := range names {
printVerse(name)
}
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Shirley, Shirley, bo-bhirley
Banana-fana fo-fhirley
Fee-fi-mo-mhirley
Shirley!
Haskell
-- The Name Game, Ethan Riley, 22nd May 2018
import Data.Char
isVowel :: Char -> Bool
isVowel c
| char == 'A' = True
| char == 'E' = True
| char == 'I' = True
| char == 'O' = True
| char == 'U' = True
| otherwise = False
where char = toUpper c
isSpecial :: Char -> Bool
isSpecial c
| char == 'B' = True
| char == 'F' = True
| char == 'M' = True
| otherwise = False
where char = toUpper c
shorten :: String -> String
shorten name
| isVowel $ head name = map toLower name
| otherwise = map toLower $ tail name
line :: String -> Char -> String -> String
line prefix letter name
| letter == char = prefix ++ shorten name ++ "\n"
| otherwise = prefix ++ letter:[] ++ shorten name ++ "\n"
where char = toLower $ head name
theNameGame :: String -> String
theNameGame name =
line (name ++ ", " ++ name ++ ", bo-") 'b' name ++
line "Banana-fana fo-" 'f' name ++
line "Fee-fi-mo-" 'm' name ++
name ++ "!\n"
main =
mapM_ (putStrLn . theNameGame) ["Gary", "Earl", "Billy", "Felix", "Mike", "Steve"]
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Java
{{trans|Kotlin}}
import java.util.stream.Stream;
public class NameGame {
private static void printVerse(String name) {
StringBuilder sb = new StringBuilder(name.toLowerCase());
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
String x = sb.toString();
String y = "AEIOU".indexOf(x.charAt(0)) > -1 ? x.toLowerCase() : x.substring(1);
String b = "b" + y;
String f = "f" + y;
String m = "m" + y;
switch (x.charAt(0)) {
case 'B':
b = y;
break;
case 'F':
f = y;
break;
case 'M':
m = y;
break;
default:
// no adjustment needed
break;
}
System.out.printf("%s, %s, bo-%s\n", x, x, b);
System.out.printf("Banana-fana fo-%s\n", f);
System.out.printf("Fee-fi-mo-%s\n", m);
System.out.printf("%s!\n\n", x);
}
public static void main(String[] args) {
Stream.of("Gary", "Earl", "Billy", "Felix", "Mary", "Steve").forEach(NameGame::printVerse);
}
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
Julia
import Compat: uppercasefirst
function printverse(name::AbstractString)
X = uppercasefirst(lowercase(name))
Y = X[1] ∈ ('A', 'E', 'I', 'O', 'U') ? X : SubString(X, 2)
b = X[1] == 'B' ? "" : "b"
f = X[1] == 'F' ? "" : "f"
m = X[1] == 'M' ? "" : "m"
println("""\
$(X), $(X), bo-$b$(Y)
Banana-fana fo-$f$(Y)
Fee-fi-mo-$m$(Y)
$(X)!
""")
return nothing
end
foreach(TheNameGame.printverse, ("gARY", "Earl", "Billy", "Felix", "Mary", "sHIRley"))
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bEarl
Banana-fana fo-fEarl
Fee-fi-mo-mEarl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Shirley, Shirley, bo-bhirley
Banana-fana fo-fhirley
Fee-fi-mo-mhirley
Shirley!
Kotlin
// version 1.2.31
fun printVerse(name: String) {
val x = name.toLowerCase().capitalize()
val y = if (x[0] in "AEIOU") x.toLowerCase() else x.substring(1)
var b = "b$y"
var f = "f$y"
var m = "m$y"
when (x[0]) {
'B' -> b = "$y"
'F' -> f = "$y"
'M' -> m = "$y"
else -> {} // no adjustment needed
}
println("$x, $x, bo-$b")
println("Banana-fana fo-$f")
println("Fee-fi-mo-$m")
println("$x!\n")
}
fun main(args: Array<String>) {
listOf("Gary", "Earl", "Billy", "Felix", "Mary", "Steve").forEach { printVerse(it) }
}
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
Lua
{{trans|C#}}
function printVerse(name)
local sb = string.lower(name)
sb = sb:gsub("^%l", string.upper)
local x = sb
local x0 = x:sub(1,1)
local y
if x0 == 'A' or x0 == 'E' or x0 == 'I' or x0 == 'O' or x0 == 'U' then
y = string.lower(x)
else
y = x:sub(2)
end
local b = "b" .. y
local f = "f" .. y
local m = "m" .. y
if x0 == 'B' then
b = y
elseif x0 == 'F' then
f = y
elseif x0 == 'M' then
m = y
end
print(x .. ", " .. x .. ", bo-" .. b)
print("Banana-fana fo-" .. f)
print("Fee-fi-mo-" .. m)
print(x .. "!")
print()
return nil
end
local nameList = { "Gary", "Earl", "Billy", "Felix", "Mary", "Steve" }
for _,name in pairs(nameList) do
printVerse(name)
end
{{out}}
Gary, Gary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-mary
Gary!
Earl, Earl, bo-bearl
Banana-fana fo-fearl
Fee-fi-mo-mearl
Earl!
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!
Mary, Mary, bo-bary
Banana-fana fo-fary
Fee-fi-mo-ary
Mary!
Steve, Steve, bo-bteve
Banana-fana fo-fteve
Fee-fi-mo-mteve
Steve!
M2000 Interpreter
Function format$ with one parameter (a string) process escape codes so we can alter line song$ ... song$=format$("\r\n{0}, {0}, bo-{2}{1}\r\nBanana-fana fo-{3}{1}\r\nFee-fi-mo-{4}{1}\r\n{0}!\r\n")
Module The.Name.Game {
Flush
Data "Gary", "Earl","Billy","Felix"
Document doc$="The Name Game"+{
}
Report doc$
song$={
{0}, {0}, bo-{2}{1}
Banana-fana fo-{3}{1}
Fee-fi-mo-{4}{1}
{0}!
}
While not empty {
Read x$
x$=ucase$(left$(x$,1))+lcase$(mid$(x$,2))
b$=if$(x$ ~ "B*"->"", "b")
f$=if$(x$ ~ "F*"->"", "f")
m$=if$(x$ ~ "M*"->"", "m")
y$=if$(x$ ~ "[AEIOU]*"->lcase$(x$),Mid$(x$, 2))
toprint$=format$(song$, x$, y$, b$, f$, m$)
doc$=toprint$
report toprint$
}
Clipboard doc$
}
The.Name.Game
{{out}}
The Name Game Gary, Gary, bo-bary Banana-fana fo-fary Fee-fi-mo-mary Gary! Earl, Earl, bo-bearl Banana-fana fo-fearl Fee-fi-mo-mearl Earl! 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!## min {{works with|min|0.19.3}} {{trans|Factor}} ```min ("AEIOU" "" split swap in?) :vowel? ( :Name Name "" split first :L Name lowercase :name (L vowel?) (name "" split rest "" join @name) unless "b" :B "f" :F "m" :M ( ((L "B" ==) ("" @B)) ((L "F" ==) ("" @F)) ((L "M" ==) ("" @M)) ) case "$1, $1, bo-$3$2\nBanana-fana fo-$4$2\nFee-fi-mo-$5$2\n$1!\n" (Name name B F M) => % puts! ) :name-game ("Gary" "Earl" "Billy" "Felix" "Milton" "Steve") 'name-game foreach ``` {{out}} ```txt Gary, Gary, bo-bary Banana-fana fo-fary Fee-fi-mo-mary Gary! Earl, Earl, bo-bearl Banana-fana fo-fearl Fee-fi-mo-mearl Earl! 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! Milton, Milton, bo-bilton Banana-fana fo-filton Fee-fi-mo-ilton Milton! Steve, Steve, bo-bteve Banana-fana fo-fteve Fee-fi-mo-mteve Steve! ``` =={{header|Modula-2}}== ```modula2 MODULE NameGame; FROM Strings IMPORT Concat; FROM ExStrings IMPORT Lowercase; FROM Terminal IMPORT WriteString, WriteLn, ReadChar; PROCEDURE PrintVerse(name : ARRAY OF CHAR); TYPE String = ARRAY[0..64] OF CHAR; VAR y,b,f,m : String; BEGIN Lowercase(name); CASE name[0] OF 'a','e','i','o','u' : y := name; ELSE y := name[1..LENGTH(name)]; END; Concat("b", y, b); Concat("f", y, f); Concat("m", y, m); CASE name[0] OF 'b' : b := y; | 'f' : f := y; | 'm' : m := y; ELSE END; name[0] := CAP(name[0]); (* Line 1 *) WriteString(name); WriteString(", "); WriteString(name); WriteString(", bo-"); WriteString(b); WriteLn; (* Line 2 *) WriteString("Banana-fana fo-"); WriteString(f); WriteLn; (* Line 3 *) WriteString("Fee-fi-mo-"); WriteString(m); WriteLn; (* Line 4 *) WriteString(name); WriteString("!"); WriteLn; WriteLn; END PrintVerse; BEGIN PrintVerse("Gary"); PrintVerse("Earl"); PrintVerse("Billy"); PrintVerse("Felix"); PrintVerse("Mary"); PrintVerse("Steve"); ReadChar; END NameGame. ``` ## Perl {{trans|Lua}} ```perl sub printVerse { $x = ucfirst lc shift; $x0 = substr $x, 0, 1; $y = $x0 =~ /[AEIOU]/ ? lc $x : substr $x, 1; $b = $x0 eq 'B' ? $y : 'b' . $y; $f = $x0 eq 'F' ? $y : 'f' . $y; $m = $x0 eq 'M' ? $y : 'm' . $y; print "$x, $x, bo-$b\n" . "Banana-fana fo-$f\n" . "Fee-fi-mo-$m\n" . "$x!\n\n"; } printVerse($_) for
Gary, Gary, bo-bary Banana-fana fo-fary Fee-fi-mo-mary Gary! Earl, Earl, bo-bearl Banana-fana fo-fearl Fee-fi-mo-mearl Earl! 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! Mary, Mary, bo-bary Banana-fana fo-fary Fee-fi-mo-ary Mary! Steve, Steve, bo-bteve Banana-fana fo-fteve Fee-fi-mo-mteve Steve! ```