23

チャレンジ:

任意の長さの入力文を取得し、その文のすべての単語を豚ラテン語に変換します。豚ラテン語がわからない場合は、ウィキペディア: 豚ラテン語を参照してください。

仕様:

  1. すべての単語がスペースで区切られ、すべての文が感嘆符、疑問符、またはピリオドで終わると仮定します。

  2. ウィキペディアで言及されている母音にはバリアントを使用しないでください。

  3. bread や quiz などの単語については、readbay や uizqay の代わりに eadbray や izquay を使用してもまったく問題ありません。

  4. 関数またはメソッドは完全に受け入れられます。つまり、ユーザー入力を取り込む必要はありませんが、ユーザー出力を表示する必要があります。

  5. 入力に複合語が含まれていないとします。

例:

Input: I am a happy man.
Output: Iway amway away appyhay anmay.

勝つ方法:

勝者は、最小の文字数でチャレンジを行うプログラムを作成できる人です。

4

15 に答える 15

12

sed - 53/55 45/47 文字

-r オプション (2+43) を使用:

s/\b[aeiou]\w*/w&/gi;s/\b(\w)(\w*)/\2\1ay/g

-r オプションなし (47):

s/\b[aeiou]\w*/w&/gi;s/\b\(\w\)\(\w*\)/\2\1ay/g
于 2010-07-07T03:07:07.973 に答える
11

C#25796文字

読み取り可能なバージョン:

string.Join(" ",
    args.Select(y =>
        ("aeiouAEIOU".Contains(y[0])
        ? y + "way"
        : y.Substring(1) + y[0] + "ay")
    )
);

凝縮された

string.Join(" ",args.Select(y=>("aeiouAEIOU".Contains(y[0])?y+"way":y.Substring(1)+y[0]+"ay")));

入力:

LINQ は、良いゴルフの答えを書くのに役立ちます

出力:

INQLay elpshay emay riteway oodgay olfgay Answersway

于 2010-07-07T02:55:17.127 に答える
9

GolfScript - 60 53 52 51 49 46 文字

)](' '/{1/(."AEIOUaeiou"-!{\119}*"ay "}%));+\+
于 2010-07-07T01:30:11.363 に答える
7

Ruby 1.9+: 63 62 文字

簡単な答えですが、おそらくもっと短縮できます

p gets.gsub(/\w+/){|e|"#{e=~/^(qu|[^aeiou]+)/i?$'+$&:e+?w}ay"}

qu(question => estionquay)のケースを処理し、二重引用符で出力します。それらを取り除くためにさらに3バイト(これについては仕様はありません)

編集1:Ruby 1.9を使用すると文字(?w)が保存される場合は、それを使用しましょう。

于 2010-07-07T02:55:28.233 に答える
6

パール8756、47文字

句読点で動作します。

モブルのおかげです。

s/\b[aeiou]\w*/w$&/gi;s/\b(\w)(\w*)/\2\1ay/g

使用法 :

echo 'I, am; a: happy! man.' | perl -p piglatin.pl

出力:

Iway, amway; away: appyhay! anmay.
于 2010-07-07T13:54:10.597 に答える
4

Haskell: 244 199 222 214 文字

ソリューションは、元の大文字化に基づいて、変換された単語に適切な大文字化を与えます。先頭の子音クラスタを適切に処理するようになりました。注: 最終行の末尾に改行は含まれません。

import Data.Char
import Data.List
q(x:y,z)|w x=x%(z++toLower x:y++"ay")|0<1=x:y++z
q(_,z)=z++"way"
x%(y:z)|isUpper x=toUpper y:z|0<1=y:z
w=isAlpha
main=interact$(>>=q.break(`elem`"aeiouAEIOU")).groupBy((.w).(==).w)

テスト入力:

Did the strapping man say: "I am Doctor X!"?

テスト出力:

Idday ethay appingstray anmay aysay: "Iway amway Octorday Xay!"?
于 2010-07-07T02:41:15.217 に答える
4

Groovy、117 100 91 85 83 79 文字

print args[0].replaceAll(/(?i)\b(\w*?)([aeiou]\w*)/,{a,b,c->c+(b?b:'w')+"ay"})

読み取り可能なバージョン:

print args[0]
.replaceAll(
    /(?i)\b(\w*?)([aeiou]\w*)/ ,
    {
        a, b, c ->
        c + ( b ? b : 'w' ) + "ay" 
    })
于 2010-07-07T00:09:37.293 に答える
3

Python3-100103106文字_ _

(KennyTMと同様です。ここでは正規表現が違いを生みます。)

import re;print(re.sub('(?i)(y|qu|\w*?)([aeiouy]\w*)',lambda m:m.group(2)+(m.group(1)or'w')+'ay',input()))

注:「qu」を考慮して正規表現を変更したため、100文字から103文字になりました。

注2:母音に「y」を使用すると、103文字バージョンが失敗することがわかります。ブレ。(一方、母音に「y」を使用すると、KennyTMの106文字バージョンも失敗します。)

于 2010-07-07T14:53:47.957 に答える
3

パイソン3 —107106文字

コメントで許可されているように、大文字を保持しません。ただし、句読点は保持されます。空白と改行は、読みやすくするためにのみ追加されています (したがって、;after import re)。

import re;
print(re.sub('(?i)\\b(qu|[^aeiou\W]*)(\w*)',
             lambda m:m.group(2)+(m.group(1)or'w')+'ay',
             input()))

qu|「qu」単語を処理しない場合、3 文字を削除できます ( )。

使用例:

$ python3.1 x.py
The "quick brown fox" jumps over: the lazy dog.
eThay "ickquay ownbray oxfay" umpsjay overway: ethay azylay ogday.
于 2010-07-07T08:36:37.153 に答える
3

VB.NET: 106 文字

「s」が入力であると仮定しますImports System.Text.RegularExpressions(興味深いことに、@ 文字列リテラル プレフィックスと末尾のセミコロンが必要なため、この VB.NET バージョンは C# 版よりも 3 文字優れています。)

Return Regex.Replace(Regex.Replace(s, "(?i)\b([aeiou]\S*)", "$1way"), "(?i)\b([^aeiou\s])(\S*)", "$2$1ay")
于 2010-07-07T03:49:03.773 に答える
2

ルア、109文字

print((io.read():gsub("(%A*)([^AEIOUaeiou]*)(%a+)",function(a,b,c)return a..c..b..(#b<1 and"way"or"ay")end)))

入力:

To be honest, I would say "No!" to that question.

出力:

oTay ebay onesthay, Iway ouldway aysay "oNay!" otay atthay uestionqay.
于 2010-07-08T00:18:20.697 に答える
2

ブー (.NET): 91 文字

VB.NETの回答と同じ概念で、Booを使用していくつかのキーストロークを節約するだけです。

print /(?i)\b([^aeiou\s])(\S*)/.Replace(/(?i)\b([aeiou]\S*)/.Replace(s, "$1way"), "$2$1ay")

おっと...これは末尾の句読点を処理していないことに気付きました。または本当に句読点。まあ、他の多くのソリューションもそうではありません。

于 2010-07-07T04:03:21.447 に答える
1

パール、70文字

ボールを転がすには:

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

きっとどこかで改善できると思います。

于 2010-07-06T23:44:41.550 に答える
1

PHP 102 バイト

<?foreach(split(~ß,SENTENCE)as$a)echo($b++?~ß:'').(strpos(' aeuio',$a[0])?$a.w:substr($a,1).$a[0]).ay;

preg 80 バイトを使用する PHP

<?=preg_filter('#\b(([aioue]\w*)|(\w)(\w*))\b#ie','"$2"?$2way:$4$3ay',SENTENCE);
于 2011-01-19T21:26:17.037 に答える
1

Python - 107 文字

i=raw_input()
print" ".join(w+"way"if w[0]in"aeiouyAEIOUY"else w[1:]+w[0]+"ay"for w in i[:-1].split())+i[-1]
于 2010-07-07T01:14:08.430 に答える