编写一个程序来播放名字游戏。
您的程序应该以某种方式接受单个名称作为来自用户的输入(例如从标准输入读取或作为命令行参数)。您可以假设名称是一个单词,由一个大写字母和一个或多个小写字母组成。
您的程序必须按照歌曲中的说明,通过填写以下模板来打印给定名称的押韵:
(X), (X), bo-b(Y)
Banana-fana fo-f(Y)
Fee-fi-mo-m(Y)
(X)!在这里,(X)是最初的名称,(Y)是小写的名称,任何初始辅音都去掉了。
然而,有一个例外。如果原名以m、f或b开头,则应在相应的行中不使用此字母。例如,如果名称为Bob,则"b“行应以bo-ob结尾。请注意,在这种情况下,任何其他辅音都是保留的,所以对于Fred,它是fo-red,而不是fo-ed。
雪莉:
Shirley, Shirley, bo-birley
Banana-fana fo-firley
Fee-fi-mo-mirley
Shirley!阿诺德:
Arnold, Arnold, bo-barnold
Banana-fana fo-farnold
Fee-fi-mo-marnold
Arnold!鲍勃:
Bob, Bob, bo-ob
Banana-fana fo-fob
Fee-fi-mo-mob
Bob!弗雷德:
Fred, Fred, bo-bed
Banana-fana fo-red
Fee-fi-mo-med
Fred!最短代码获胜。
发布于 2011-11-07 06:35:11
1!:2&2>|.(n,'!');('Fee-fi-mo-';'Banana-fana fo-';n,', ',n,', bo-'),&.>;/'mfb'(,`(}.@])`($:}.)@.((=+.2*5='aeiou'i.]){.)"0 _)a.{~32(23 b.)a.i.n=.1!:1]3发布于 2011-11-07 20:49:39
后的292个字符
这是我的第一次尝试,几乎是积极的,我可以进一步扩大它:
(defn name-game
[n]
(let [[b f m] (map (fn [x] (if (some #(= % (first n) (last x)) "bfm")
(str (apply str (butlast x)) (apply str (rest n)))
(str x (apply str (drop-while (fn [x] (not (some #(= % x) "aeiou"))) n))))) [", bo-b" "\nBanana-fana-fo-f" "\nFee-fi-mo-m"])]
(str n ", " n b f m "\n" n "!")))我只是在学习clojure,并认为尝试一下会很有趣。这是我的推理:
(drop-while (fn [x] (not (some #(= % x) "aeiou"))) name) --为了处理"b“、"f”和"m“的额外规则,我将文本分解为短语列表:[", bo-b" "\nBanana-fana-fo-f" "\nFee-fi-mo-m"] -然后,我应用了一个函数,询问短语是否以名称开头的字母结尾,并使用该函数根据拼图规则 的规则转换这3个短语--最后一步是构建一个具有结果的字符串。发布于 2011-11-10 02:04:16
x=raw_input('')
a,b,c=x[0],x[1:],'bfm'
if b[0] in c:b=b[1:]
d="X, X, bo-@\nBanana-fana fo-@\nFee-fi-mo-@\nX!".replace('X',a)
for y in c:d=d.replace('@',y+b,1)
print d刚刚意识到我的代码失败了..。
这是我得到的最远的,也许有人能完成它。
https://codegolf.stackexchange.com/questions/3878
复制相似问题