猫はニャー、牛はムーに行く


40

猫が鳴くのは誰もが知っていますが、多くの人が気付いていないのは、caaaatがmeeeeooooowに行くことです。実際、猫が発する母音の長さは、あなたがそれに対応する母音の長さに依存します。

同じように、牛はモーになりますが、クーはムーになります。

チャレンジ

入力として猫を意味する単語牛を意味する単語を受け取り、主母音の数を決定し、必要に応じて次の文字列のいずれかを出力するプログラムを作成します。

  • C[]ts go M[]w
  • C[]ws go M[]

[]以下は、母音を表す場所です。

  • 「ニャー」のeとoの数は、両方とも入力語で見つかった母音の数と一致する必要があります。
  • 「Moo」のoの数は、入力語で見つかった母音の数の2倍でなければなりません。

プログラムは入力語catとを認識しなければなりませんcow。入力には最も便利な大文字を使用できますが、出力は上記のとおり正確に大文字にする必要があります。


42
特定のキツネについてのジョークのキュー
マーティンエンダー

7
課題を理解したかどうかはわかりません。入力は1語か2語ですか?いくつかの入力/出力ペアの例を挙げていただけますか?
ズガルブ

31
@MartinBüttnerどのキツネが話しているのか知っているかどうかわかりません。私の記憶をジョグします、それは何と言いますか?
DJMcMayhem

4
eとoの数を指定しますが、順序は指定しません。たとえばMeooeoew、の有効な出力はありますCaaatか?
ピーターオルソン

10
キツネのために、駄洒落で停止します!
ユーメル

回答:


17

網膜57 49 44 43 41バイト

とても近い... :) Pyth ...

.(.+).
$0s go M$1$1
+`aa(\w*$)
e$1ow
wo
o

オンラインでお試しください。

Caaatまたはのように入力が大文字になることを期待しますCoooow

説明

.(.+).
$0s go M$1$1

正規表現は入力全体に一致し、グループ内の母音をキャプチャします1(一致が失敗することはなく、入力全体に貪欲に一致するため、アンカーは不要です)。置換はその入力を書き戻し、追加しs go M、その後に母音を2回追加します。入力CaaatおよびのCoooow場合、次のようになります。

Caaats go Maaaaaa
Coooows go Moooooooo

牛の出力はすでに正しいです。それらの猫について何かする必要があります。

+`aa(\w*$)
e$1ow

は、+このステージをできるだけ頻繁に繰り返すようRetinaに指示します。正規表現aは、文字列の最後の部分の2つのsに一致します($アンカーでこれを確認し、内部のものを置き換えないようにしますCaaats)。これはM、その部分にまだがある限り、本質的にの後のすべてに一致しますa。2つaのsが削除され、サフィックス全体がラップされた後e...ow

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

最後wに、結果には2つのがあります。そのため、前にあるものを削除しoます(winを台無しにしないようにするためCoooows)。

wo
o

そして、次のようになります。

Caaats go Meeeooow

11

LabVIEW、58 LabVIEWプリミティブ

このような文字列を作成するのは苦痛です...

左端のvisはパターンマッチングです。a+とo +はそれぞれ、連続してasとosの最大量を検索します。

それらの長さを取ると、長さosを持つ3つの配列1と長さesを持つ1つの配列と、長さosの2倍の配列を作成します。

その後、すべての部品が組み立てられます。最初に元の入力、次にすべての配列にMを使用します。未使用の配列は空であるため無視され、入力が猫の場合は最後にawになります。(見つかった場合に一致後があり、一致しない場合は一致が空になります)

lolzの場合は、6つの異なる出力でキツネも実装しました^^


私はそれをテストする方法はありませんが、あなたが言うようにそれが機能するなら、私はとても感銘を受けました!
ソニックアトム

興味のない説明をしてもらえますか?
ソニックアトム


ボスのようなコードゴルフ。ワオ。
Jakuje

7

ピス、50 44 34

形式で入力を取ります["caat", "coow"]

Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo

オンラインでお試しください。

説明:

  .b                                  Map a lambda across two lists in parallel:
                              Q       The input, e.g. ["caat", "coow"]
                               "eo    The string "eo"
    s[                       )            Create and concatenate a list of:
      rN3                                 - The item N in title caps (e.g. "Caat")
         "s go M"                         - The string "s go M"
                 S                        - The sorted version of:
                       +Y\o                   The item Y + "o" ("eo" or "oo")
                  *-lN2                       Times the length of N - 2 (number of vowels)
                           \w             - The string "w"
Pj                                    Join the result on \n and drop the final "w"

長さが大幅に短縮されたJakubeに感謝します。


いくつかのささいなこと:あなたが最初に取って代わることができjks、第二の除去jk(それがすべてでは何もしない)、そして置き換える"w\n"\wb
ジャクベ

また、コードの大部分は、コード内に2回表示されます(r.Q3他のものなど)。binary_mapを使用して、さらに10文字を保存できます。Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo。わからない、すでにマップの経験がある場合、質問がある場合は、Pyth Chatで説明できます。
ジャクベ

よかった、ありがとう。私はそのようなことをすることができると思ったが、どのようによく知らなかった。
ルーク

これは非常に効率的です。より多くの賛成票があるはずです。
ソニックアトム


5

Perl、66 61 55 54バイト

+1を含む -p

/[ao]+/;$\="s go M".$&=~y/a/e/r.o x($+[0]-1).(w)[/w/]

入力はに適合することが期待される/^C[ao]+[tw]$/(末尾には改行文字!)
使用法:/bin/echo -n Caaat | perl -p 55.pl

壊す

/[ao]+/;
$\= "s go M"        # assign to $OUTPUT_RECORD_SEPARATOR, normally `\n`. Saves 1 vs `$_.=`
   . $&             # the matched vowels
     =~ y/a/e/r     # translate `a` to `e`; `/r` returns a copy.
   . o x($+[0]-1)   # append 'o', repeated. $+[0] is string position of last match end.
   . (w)[/w/]       # returns 'w' if there is no /w/ in the input, nothing if there is.

前のバージョン:

@l=/[ao]/g;$x=$&x@l.o x@l;$y=$x=~y/a/e/?w:'';s/$/s go M$x$y/

コメント

@l = /[ao]/g;               # captures $& as vowel and @l as list of vowels
$x = $& x @l .o x @l;       # construct the output vowels
$y = $x =~ y/a/e/ ? w : ''; # correct vowel string for cats (aaaooo->eeeooo); $y='w' if cat.
s/$/s go M$x$y/             # construct the desired output.

例: Caaat

  • およびとしてキャプチャ$&します。a@l(a,a,a)
  • 設定し$x3回にa3回続きますoaaaooo
  • すべてaに翻訳し$xてくださいeeeeooo。置換(0または正のいずれか)の番号がcat-検出器として機能する:セット$ywそうであれば。
  • 追加することによって入力を変更してs go Meeeoooそしてw

  • 更新61:文字列の代わりにリストを使用して5バイトを保存
  • 更新55:インライン化、割り当て$\ではなく割り当てにより6バイトを節約しs/$/、入力に末尾の改行を必要としません。
  • 更新54:@lを削除して1バイトを節約します。

4

Python 2、74バイト

i=input()
l=len(i)-2
print i+'s go M'+['e'*l+'o'*l+'w','o'*l*2][i[-1]>'v']

入力を受け取ります

Caaat または Cooow


2

CJam(60 57 55 53バイト)

"C%s%ss go M%sw
"2*-2<q"ctw"-S/"teowoo"3/.{(2$,@*$}e%

オンラインデモ。入力は小文字であると想定されます。

同じ長さの場合:

"C

s go M"N/_]"w
"a*q"ctw"-S/"teowoo"3/.{(2$,@*$M}]z

'CM"s go M"]2*q"ctw"-S/"teowoo"3/.{(2$,@*$}[MM"w
"]]z

1

PowerShellの、135の 132バイト

param($a,$b)
[char[]]"$a$b"|%{if($_-eq'a'){$c++}$d++}
$d-=4+$c
"C$("a"*$c)ts go M$("e"*$c)$("o"*$c)w"
"C$("o"*$d)ws go M$("o"*2*$d)"

(改行はセミコロンと同じなので、明確にするために改行されています)

驚くほど難しい挑戦。そして、これはさらにゴルフができると合理的に確信しています。

$aおよびとして入力文字列を取ります$b。それらを連結してchar-arrayとしてキャストし、それをループにパイプします%{}。次に、各文字が-eq正しいかどうかがチェックさ'a'れ、関連するカウンター変数が適切にインクリメントされます。次に、入力を考慮して4+$cから減算し、出力文の定式化に進み、母音の出力と対応するカウンタを修正します。(PowerShellでは、たとえばを生成します。)$dcatcw'e'*3'eee'


1

@omulusnrの答えとほぼ同じですが、これは正しい出力を生成し、入力も大文字と小文字を区別しません。

PHP、172

$p=$argv[1];
preg_match("/c([ao]+)/i",$p,$e);
$l=strlen($e[1]);
$s=($k=strcmp($e[0][1],'o'))?'eo':'oo';
echo $p,' go M',str_repeat($s[0],$l),str_repeat($s[1],$l),$k?'w':'';

$p=$argv[1];preg_match("/c([ao]+)/i",$p,$e);$l=strlen($e[1]);$s=$k=strcmp($e[0][1],'o')?'eo':'oo';$r='str_repeat';echo $p,' go M',$r($s[0],$l),$r($s[1],$l),$k?'w':'';166バイトに少し短く
Tschallacka

1

Swift 2、3̶8̶1̶ 333バイト

func f(i:String)->String{var s=i.lowercaseString;s.replaceRange(s.startIndex...s.startIndex,with:String(s[s.startIndex]).uppercaseString);let c=i.characters.count-2;let l=s.characters.last;return(s+"s go M"+String(count:c,repeatedValue:l=="t" ?"e" :"o" as Character)+String(count:c,repeatedValue:"o" as Character)+(l=="t" ?"w" :""))}

ゴルフをしていない:

func f(i:String)->String{
    var s = i.lowercaseString
    s.replaceRange(s.startIndex...s.startIndex,with:String(s[s.startIndex]).uppercaseString)
    let c = i.characters.count-2
    let l = s.characters.last
    return(s+"s go M"+String(count:c,repeatedValue:l=="t" ?"e" :"o" as Character)+String(count:c,repeatedValue:"o" as Character)+(l=="t" ?"w" :""))
}

大文字でも猫でも牛でもかまいません。ここで試すことができます:

http://swiftlang.ng.bluemix.net/#/repl/3f79a5335cb745bf0ba7698804ae5da166dcee6663f1de4b045e3b8fa7e48415


2
これはどのように入力を取りますか?
spaghetto

この例では未入力、私は遊び場でテストのためにそれをしなかったので、そこには何の入力は、必須の使用がテストにvarsのない
フィデル・エドゥアルド・ロペス

1
それで、これがスニペットになると思います。有効にするには、関数または完全なプログラムである必要があります。:/
spaghetto

1
[OK]を、私は...それ機能作られた
フィデル・エドゥアルド・ロペス

1

MATLAB:190の 152 118バイト

i=input('','s');b=sum(i=='a');c=sum(i=='o');d=b>c;disp(['C',i(2:2+b+c),'s go M',i(2:1+b)+4,repmat('o',1,b+2*c),'w'*d])

ゴルフをしていない:

i=input('','s');
b=sum(i=='a');
c=sum(i=='o');
d=b>c;
disp(['C',i(2:2+b+c),'s go M',i(2:1+b)+4,repmat('o',1,b+2*c),'w'*d])

テスト:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

PS:良い提案をしてくれた@Kenneyに感謝します(コメントを参照)!


だろうdisp( (b>0)*[...] + (c>0)*[...] )ここで働い?
ケニー

良い提案@Kenney
brainkz

1

PHP、138バイト

echo ucfirst($a=$argv[1]).'s go M'.(($n=substr_count($a,'a'))?str_repeat('e',$n).str_repeat('o',$n).'w':str_repeat('oo',substr_count($a,'o')));

読みやすい:

echo ucfirst($a = $argv[1]) . 's go M'. (
    ($n = substr_count($a, 'a'))
        ? str_repeat('e', $n) . str_repeat('o', $n) . 'w'
        : str_repeat('oo', substr_count($a, 'o'))
);

短くしてみましたが、PHPでは動作しません:

#too long -- echo ucfirst($s=$argv[1]).'s go M'.(($o='o'and$n=substr_count($s,'a'))?str_repeat('e',$n).str_repeat($o,$n).'w':str_repeat('oo',substr_count($s,$o)));
#too long -- echo ucfirst($s=$argv[1]).'s go M'.(($o='o'and$f=function($s,$n){return str_repeat($s,$n);}and$n=substr_count($s,'a'))?$f('e',$n).$f($o,$n).'w':$f('oo',substr_count($s,$o)));

=)


1

OCTAVE、126、108

変数と説明を含む最初のバージョン、126:

L="ao"';S={'eo','oo'},e={'w',' '};a=sum(argv(){1}==L,2);b=find(a);disp([argv(){1},' goes m',vec(ones(sum(a),1)*S{b})',e{b}]);

説明:Lは、どの動物にどの文字が含まれているかを知っています。Sは何を繰り返すかを知っています。eは終わりを知っています。これを機能させるには「自動ブロードキャスト」をオンにする必要がありますが、これまで使用したすべてのオクターブでデフォルトになっているはずです。もちろん、コマンドregexprep(置換を伴う正規表現)などの短い方法もありますが、すでにいくつかのそのようなアプローチが答えに既にあるので、それは退屈でしょう。


編集: 1回だけ発生する変数をスキップし、オクターブオンザフライインデックスを使用して(実際の名前がわからない)、入力文字列変数 "i"を追加します。

i=argv(){1};a=sum(i=="ao"',2);b=find(a);disp([i,' goes m',vec(ones(sum(a),1)*{'eo','oo'}{b})',{'w',''}{b}]);

1

JavaScript(ES2015)、 78 77

s=>s+'s go M'+(l=s.length-1,w=s[l]<'u',Array(l).join(w?'eo':'oo')+(w?'w':''))

ここで試してください:https : //jsbin.com/guqaxejiha/1/edit?js,console


Caaatでは機能せず、「Caaats go Meoeoeow and must must 'Caaats go Meeeooow
Fidel

@FidelEduardoLópezチャレンジでは順序が指定されていません。「「ニャー」のeとoの数は両方とも、入力語で見つかった母音の数と一致する必要があります。」
パブロ

まあ私はあなたが正しいと思う..あなたがそこにいる面白いニャー猫:)
フィデルエドゥアルドロペス

0

Lua、121 90バイト

121バイト

i=...r="M"o="o"s=i:len()-3if(i:find("w"))then r=r..o:rep(s*2)else r=r..("e"):rep(s)..o:rep(s).."w"end print(i.." go "..r)

90バイト

i=....." go M"o="o"s=#i-7 print(i..(i:find"w"and o:rep(s*2)or("e"):rep(s)..o:rep(s).."w"))

「Caats」や「Coooows」などの大文字と小文字を区別する入力を受け取ります。無効な入力に対する要件はないため、出力は、たとえば「Foxes」または「Oxen」にとって奇妙な場合があります。:P

非ゴルフ

i=... .. " go M"
o="o"
s=#i-7
print(i..
         (i:find"w"and o:rep(s*2) or 
         ("e"):rep(s)..o:rep(s).."w")
      )

90バイトへの更新: if-control構造を論理演算子に置き換え、の宣言により多くのデータを追加することにより、文字列の連結を最適化しましたi。の括弧を削除しましたi:find("w")。興味深いことに、保存する"o"変数には、使用するときにカップルのバイトを保存しrepますが、と逆になります"w""e"。あなたが知っているほど。


0

Lua:115 92 89バイト

i=...l=#i-2o="o"io.write(i,"s go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2))

かかるC[]t又はC[]w入力として。[] = aまたはo。小文字の入力は結果に変換されます。

ロングバージョン:

i=...   --"C[]t" or "C[]w"
l=#i-2  --length of input -2
o="o"   --shorten usage of "o"
io.write(i,"s go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2)) 

-- if it's a C"a"t concat "s go M" then repeat  --> Cats/Cows go M
-- "e" and then "o" l times and concat else     --> Cats go Meo
-- repeat "o" l*2 times and concat              --> Cows go Moo
-- concat "w" and output evrything              --> Cats go Meow

出力例:

Caaat --> Caaats go Meeeooow
Cat   --> Cats go Meow
Cow   --> Cows go Moo

編集:に変更されif then elseましたand or。すべての非文字列スペースを削除しました。

また、ここで試してみてください:Lua Onlineを実行しますが、ターミナルの使用方法がわからなかったため、関数に入れました。

編集:「o」の使用法を変更し、から()を削除し:findました これらの最適化を見つけたのは、Cyvの功績です。「s」を追加し、変更l=#i-3しましたl=#i-2

「s」を含む入力が88バイトのみの場合:

i=...l=#i-3o="o"io.write(i," go M",i:find"a"and("e"):rep(l)..o:rep(l).."w"or o:rep(l*2))

入力は、猫ではなく、猫または牛でなければなりません。そして大文字ではありません。「猫の出力「猫がニャーに行く」「猫がニャーに行く」されなければならない
フィデル・エドゥアルド・ロペス

@FidelEduardoLópez2番目ではなく1番目に同意します。catを意味する単語と、catsを意味する単語によると、入力された単語catとではありcowません入力には大文字が使用され、ボルトまたはキャットは有効である必要があります。
CHlM3RA

同意する。入力では大文字を使用できますが、出力は常にC [] ts go M [] wのように大文字にする必要がありますよね。
フィデルエドゥアルドロペス

0

Dart114 112 110 104102100バイト

f(s)=>s+'s go M'.padRight(s[1]=='a'?s.length+4:0,'e').padRight(2*s.length+2,'o')+(s[1]=='a'?'w':'');

オンラインでお試しください!

  • -2バイト:追加の数を減らすためにuオフセットの計算方法を変更しました
  • -2バイト:最初のパディングのチェックを文字ではなく幅に移動しました
  • -6バイト:Cow / Catチェックを変更しました
  • -2バイト:変数の割り当てを取り除きました
  • -2バイト:2 *(s.length + 1)の括弧の数を減らしてから

  • -1

    PHP、170の 164 161 157バイト

    preg_match("/(?i)c([ao]+)/",$argv[1],$e);
    $n=strlen($e[1]);
    $c=$e[1][0];
    $a=($c=="a"?("ew"):("o"));
    echo "M".str_repeat($a[0],$n).str_repeat("o",$n).$a[1]."\n";

    すべての大文字を使用します。CaAaTcoOOOw何でも。

    v2:[wt] $は本当に必要ありません。また、char ct
    v3を修正しました:char ctはすべて間違っていました、$ aと$ eの割り当てを凝縮しました
    v4:$ af- > $ aに3バイトを保存します
    v5:1行で4バイトを保存します(表示されていません)


    ダウン投票しませんでしたが、出力が間違っています:missing $argv[0]."s go "。これを試してくださいpreg_match("/(?i)c([ao]+)/",$x=$argv[1],$e);$a=$e[1][0]=="a"?"ew":"o";echo$x."s go M".str_repeat($a[0],$n=strlen($e[1])).str_repeat("o",$n).$a[1]."\n";(正しい出力と151バイト)。
    ケニー
    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.