Code Golf:Pig Latin

23 language-agnostic code-golf rosetta-stone

挑战:

取一个任意长度的输入句子,并将该句子中的所有单词转换为猪拉丁语.如果您不知道猪拉丁语是什么,请阅读维基百科:Pig Latin.

产品规格:

  1. 假设所有单词都用空格分隔,所有句子都以感叹号,问号或句号结尾.

  2. 不要将变体用于维基百科中提到的元音.

  3. 对于像面包和测验这样的单词,他们完全可以接受readbay,uizqay而不是eadbray和izquay.

  4. 功能或方法是完全可以接受的.换句话说,您不需要接受用户输入,但必须显示用户输出.

  5. 假设没有输入包含复合词.

例:

Input: I am a happy man.
Output: Iway amway away appyhay anmay.
Run Code Online (Sandbox Code Playgroud)

如何取胜:

获胜者是能够编写能够用最少量角色进行挑战的程序的人.

Nab*_*abb 12

sed - 53/55 45/47字符

使用-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

C# 257 96个字符

可读版本:

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答案

  • @Maulrus:那是因为这个错过了使它成为一个程序的一切.也就是说,你需要把`class A {static void Main(string [] a){`放在所有那些之前(当然,用"a`"替换"`args`".为什么他们使用多字母变量名是实际上,超越我. (14认同)
  • 使用LINQ削减了约2/3的解决方案. (3认同)
  • @Johannes:哦,这是有道理的.如果它不是一个完整的计划,我将撤回我的投票. (2认同)

Nab*_*abb 9

GolfScript - 60 53 52 51 49 46个字符

)](' '/{1/(."AEIOUaeiou"-!{\119}*"ay "}%));+\+
Run Code Online (Sandbox Code Playgroud)

  • @KennyTM输入以"!"结尾的规格 "?" 要么 ".".它没有说它们可以以".\n"结尾 (7认同)

Chu*_*bas 7

Ruby 1.9+:63 62个字符

只是一个快速的答案,可能会缩短更多

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),让我们使用它.


Tot*_*oto 6

Perl的 87, 56,47个字符

与标点符号一起使用.

感谢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)


Ano*_*on. 1

Perl,70 个字符

为了让球滚动:

while(<>){for(split){s/^([^aeiou]+)(.*)/$2$1ay / or $_.='way ';print}}
Run Code Online (Sandbox Code Playgroud)

我确信它可以在某个地方得到改进。