23 language-agnostic code-golf rosetta-stone
挑战:
取一个任意长度的输入句子,并将该句子中的所有单词转换为猪拉丁语.如果您不知道猪拉丁语是什么,请阅读维基百科:Pig Latin.
产品规格:
假设所有单词都用空格分隔,所有句子都以感叹号,问号或句号结尾.
不要将变体用于维基百科中提到的元音.
对于像面包和测验这样的单词,他们完全可以接受readbay,uizqay而不是eadbray和izquay.
功能或方法是完全可以接受的.换句话说,您不需要接受用户输入,但必须显示用户输出.
假设没有输入包含复合词.
例:
Input: I am a happy man.
Output: Iway amway away appyhay anmay.
Run Code Online (Sandbox Code Playgroud)
如何取胜:
获胜者是能够编写能够用最少量角色进行挑战的程序的人.
Nab*_*abb 12
使用-r选项(2 + 43):
s/\b[aeiou]\w*/w&/gi;s/\b(\w)(\w*)/\2\1ay/g
Run Code Online (Sandbox Code Playgroud)
没有-r选项(47):
s/\b[aeiou]\w*/w&/gi;s/\b\(\w\)\(\w*\)/\2\1ay/g
Run Code Online (Sandbox Code Playgroud)
Ant*_*ram 11
可读版本:
string.Join(" ",
args.Select(y =>
("aeiouAEIOU".Contains(y[0])
? y + "way"
: y.Substring(1) + y[0] + "ay")
)
);
Run Code Online (Sandbox Code Playgroud)
简明
string.Join(" ",args.Select(y=>("aeiouAEIOU".Contains(y[0])?y+"way":y.Substring(1)+y[0]+"ay")));
Run Code Online (Sandbox Code Playgroud)
输入:
LINQ帮助我写出了很好的高尔夫答案
输出:
INQLay elpshay emay riteway oodgay olfgay答案
)](' '/{1/(."AEIOUaeiou"-!{\119}*"ay "}%));+\+
Run Code Online (Sandbox Code Playgroud)
只是一个快速的答案,可能会缩短更多
p gets.gsub(/\w+/){|e|"#{e=~/^(qu|[^aeiou]+)/i?$'+$&:e+?w}ay"}
Run Code Online (Sandbox Code Playgroud)
它处理qu(question => estionquay)的情况,并以双qoutes打印.还有3个字节可以摆脱它们(我说没有说明这个)
编辑1:如果使用Ruby 1.9保存一个字符(?w),让我们使用它.
与标点符号一起使用.
感谢mobrule.
s/\b[aeiou]\w*/w$&/gi;s/\b(\w)(\w*)/\2\1ay/g
Run Code Online (Sandbox Code Playgroud)
用法:
echo 'I, am; a: happy! man.' | perl -p piglatin.pl
Run Code Online (Sandbox Code Playgroud)
输出:
Iway, amway; away: appyhay! anmay.
Run Code Online (Sandbox Code Playgroud)
为了让球滚动:
while(<>){for(split){s/^([^aeiou]+)(.*)/$2$1ay / or $_.='way ';print}}
Run Code Online (Sandbox Code Playgroud)
我确信它可以在某个地方得到改进。