The Name Game: Difference between revisions

(The Name Game en BASIC256)
Line 1,930:
 
=={{header|Ruby}}==
{{works with|Ruby|2.7.1}}
{{trans|D}}
More idiomatic Ruby while not being object-oriented.
<lang ruby>def printVerse(name)
Also, like the Commodore Basic version, we handle consonants at the start of the name using a Regular Expression so we can handle appropriately names like Steve or Chris. Byron is an interesting edge-case because has a "y" and also starts with "b".
x = name.capitalize
<lang ruby>#!/usr/bin/env ruby
y = case x[0]
when 'A','E','I','O','U' then name.downcase
else x[1..-1]
end
b = 'b' + y
f = 'f' + y
m = 'm' + y
case x[0]
when 'B' then b = y
when 'F' then f = y
when 'M' then m = y
end
 
def print_verse(name)
print x, ", ", x, ", bo-", b, "\n"
first_letter_and_consonants_re = /^.[^aeiyou]*/i
print "Banana-fana fo-", f, "\n"
 
print "Fee-fi-mo-", m, "\n"
xfull_name = name.capitalize # X
print x, "!\n\n"
suffixed = case full_name[0] # Y
when 'A','E','I','O','U' then name.downcase
name.downcase
else
full_name.sub(first_letter_and_consonants_re, '')
else x[1..-1] end
 
b_name = "b#{suffixed}"
f_name = "f#{suffixed}"
m_name = "m#{suffixed}"
 
case xfull_name[0]
when 'B' then b = y
b_name = suffixed
when 'F' then f = y
f_name = suffixed
when 'M' then m = y
m_name = suffixed
end
 
puts <<~END_VERSE
#{full_name}, #{full_name}, bo-#{b_name}
print "Banana-fana fo-", f, "\n"#{f_name}
print "Fee-fi-mo-", m, "\n"#{m_name}
#{full_name}!
 
END_VERSE
end
 
%w[Gary Earl Billy Felix Mary Steve Chris Byron].each do |name|
print_verse name
end
 
end</lang>
for name in ["Gary","Earl","Billy","Felix","Mary","Steve"]
printVerse(name)
end</lang>
{{out}}
<pre>Gary, Gary, bo-bary
Line 1,981 ⟶ 1,999:
Mary!
 
Steve, Steve, bo-btevebeve
Banana-fana fo-ftevefeve
Fee-fi-mo-mtevemeve
Steve!</pre>
 
Chris, Chris, bo-bis
Banana-fana fo-fis
Fee-fi-mo-mis
Chris!
 
Byron, Byron, bo-yron
Banana-fana fo-fyron
Fee-fi-mo-myron
Byron!
 
</pre>
 
=={{header|Scala}}==
Anonymous user