Kucing pergi Meow, Sapi pergi Moo

40

Semua orang tahu bahwa kucing mengeong, tetapi yang tidak disadari banyak orang adalah bahwa caaaats pergi meeeeoooow. Faktanya, panjang bunyi vokal yang dibuat kucing tergantung pada panjang vokal yang digunakan untuk mengatasinya.

Dengan cara yang sama, sapi pergi moo, tetapi coooow pergi moooooooo

Tantangan

Anda harus menulis sebuah program yang mengambil input, kata yang berarti kucing, dan kata yang berarti sapi, menentukan jumlah vokal utama, dan mencetak salah satu dari string berikut, yang sesuai:

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

Di mana []singkatan vokal, sesuai dengan aturan berikut:

  • Jumlah e dan o dalam "Meow" harus sama dengan jumlah vokal yang ditemukan dalam kata input.
  • Jumlah o dalam "Moo" harus dua kali lipat jumlah vokal yang ditemukan di kata input.

Program harus mengenali kata cat- kata input dan cow. Input dapat menggunakan kapitalisasi apa saja yang paling nyaman, tetapi output harus dikapitalisasi persis seperti yang ditunjukkan di atas.

Atom Sonic
sumber
42
cue bercanda tentang rubah tertentu
Martin Ender
7
Saya tidak yakin saya mengerti tantangannya. Apakah input satu atau dua kata? Bisakah Anda memberikan beberapa contoh input / output pasangan?
Zgarb
31
@ MartinBüttner Saya tidak yakin apakah saya tahu rubah mana yang Anda bicarakan. Jog ingatan saya, apa isinya?
DJMcMayhem
4
Anda menentukan jumlah e dan o, tetapi bukan urutannya. Apakah Meooeoewoutput yang valid untuk Caaat, misalnya?
Peter Olson
10
Demi rubah, berhenti dengan permainan kata-kata!
Eumel

Jawaban:

17

Retina , 57 49 44 43 41 byte

Sangat dekat ... :) Pyth ...

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

Cobalah online.

Diharapkan input dikapitalisasi seperti Caaatatau Coooow.

Penjelasan

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

Regex cocok dengan seluruh input, dan menangkap vokal dalam grup 1(kita tidak perlu jangkar, karena kecocokan tidak dapat gagal dan dengan rakus akan mencocokkan seluruh input). Substitusi menulis kembali input itu, dan menambahkan s go M, diikuti oleh dua kali vokal. Untuk input Caaatdan Coooow, kami mendapatkan:

Caaats go Maaaaaa
Coooows go Moooooooo

Output untuk sapi sudah benar. Kami hanya perlu melakukan sesuatu tentang kucing-kucing itu.

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

The +memberitahu Retina mengulangi tahap ini sesering mungkin. Regex cocok dengan dua as di bagian terakhir dari string (kami memastikan ini dengan $jangkar, sehingga kami tidak mengganti hal-hal di dalamnya Caaats). Ini pada dasarnya akan cocok dengan semuanya setelah M, selama bagian itu masih memiliki as. Keduanya adihapus dan seluruh sufiks setelah dibungkus e...ow:

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

Akhirnya, ada dua ws banyak dalam hasilnya, jadi kami menghapus yang mendahului o(untuk memastikan kami tidak mengacaukan wdi Coooows):

wo
o

Dan kita pergi dengan:

Caaats go Meeeooow
Martin Ender
sumber
11

LabVIEW, 58 LabVIEW Primitif

membuat string seperti ini menyakitkan ...

Vis paling kiri adalah pencocokan pola, a + dan o + masing-masing mencari jumlah paling lambat as dan os dalam satu baris.

Mengambil panjang dari yang saya buat 3 array 1 dengan panjang os 1 dengan panjang es dan satu dengan 2 kali panjang os.

Lalu semua bagian disatukan. Pertama input asli, lalu lanjutkan ke semua Array, yang tidak digunakan kosong sehingga mereka akan diabaikan, dan akhirnya aw jika inputnya adalah kucing. (Jika seperti yang ditemukan akan ada pada setelah pertandingan, jika tidak setelah pertandingan kosong)

Untuk lolz saya juga mengimplementasikan rubah dengan 6 keluaran berbeda ^^

Eumel
sumber
Saya tidak memiliki cara untuk menguji itu, tetapi jika itu berfungsi seperti yang Anda katakan maka saya sangat terkesan!
Sonic Atom
Bisakah Anda memberikan penjelasan karena minat?
Sonic Atom
penjelasannya sudah jelas, jangan ragu untuk bertanya apakah ada pertanyaan
Eumel
Golf kode seperti bos. Wow.
Jakuje
7

Pyth, 50 44 34

Mengambil input dalam format ["caat", "coow"].

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

Cobalah online.

Dijelaskan:

  .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"

Terima kasih kepada Jakube untuk pengurangan panjang yang besar.

Luke
sumber
Beberapa hal kecil: Anda dapat mengganti yang pertama jkdengan s, menghapus yang kedua jk(tidak melakukan apa-apa sama sekali), dan ganti "w\n"dengan \wb.
Jakube
Juga, sebagian besar kode Anda muncul dua kali dalam kode Anda, seperti r.Q3dan hal-hal lainnya. Anda bisa menggunakan binary_map dan menyimpan 10 karakter tambahan. Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo. Tidak yakin, jika Anda sudah memiliki pengalaman dengan peta, jika Anda memiliki pertanyaan saya dapat menjelaskannya kepada Anda di Pyth Chat .
Jakube
Terima kasih banyak. Saya pikir saya bisa melakukan sesuatu seperti itu tetapi tidak tahu caranya.
Luke
Ini sangat efisien. Seharusnya lebih banyak upvotes.
Sonic Atom
2
Jangan lagi.
OldBunny2800
5

Perl, 66 61 55 54 byte

termasuk +1 untuk -p

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

Input diharapkan sesuai dengan /^C[ao]+[tw]$/(tidak ada baris baru!)
Penggunaan:/bin/echo -n Caaat | perl -p 55.pl

Kerusakan

/[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.

Versi sebelumnya:

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

Berkomentar :

@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.

Contoh: Caaat

  • Tangkap $&sebagai adan @lsebagai (a,a,a).
  • Set $xke tiga kali adiikuti oleh 3 kali o: aaaooo.
  • Terjemahkan semua adi $xke e: eeeooo. Jumlah pengganti (0 atau positif) berfungsi sebagai kucing-detektor: set $yuntuk wjika demikian.
  • Ubah input dengan menambahkan s go M, eeeooodan w.

  • perbarui 61 : Hemat 5 byte dengan menggunakan daftar alih-alih string
  • pembaruan 55 : hemat 6 byte dengan cara inlining, menugaskan $\alih-alih s/$/, dan tidak memerlukan tambahan baris baru dalam input.
  • perbarui 54 : simpan 1 byte dengan menghilangkan @l.
Kenney
sumber
4

Python 2, 74 byte

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

Mengambil input

Caaat atau Cooow

TFeld
sumber
2

CJam ( 60 57 55 53 byte)

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

Demo online . Input diasumsikan dalam huruf kecil.

Untuk panjang yang sama:

"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
Peter Taylor
sumber
1

PowerShell, 135 132 byte

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)"

(linebreak dihitung sama dengan titik koma, jadi garis-putus untuk kejelasan)

Tantangan yang sangat sulit. Dan saya cukup yakin ini bisa golf lebih lanjut.

Mengambil string input sebagai $adan $b. Menggabungkan mereka dan melemparkannya sebagai char-array, lalu menyalurkannya melalui loop %{}. Setiap huruf kemudian diperiksa jika itu -eqUAL untuk 'a'dan variabel counter yang terkait bertambah tepat. Kami kemudian mengurangi 4+$cdari $dke akun catcwdalam input, dan melanjutkan untuk merumuskan kalimat output, memodifikasi output vokal dikali counter yang sesuai. (Di PowerShell, 'e'*3akan menghasilkan 'eee', misalnya.)

AdmBorkBork
sumber
1

Hampir mirip dengan jawaban @ omulusnr tetapi ini menghasilkan output yang benar dan juga input tidak sensitif huruf.

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':'';
blackpla9ue
sumber
$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':'';sedikit lebih pendek menjadi 166 byte
Tschallacka
1

Swift 2, 3̶8̶1̶ 333 byte

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" :""))}

Tidak Disatukan:

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" :""))
}

Membawa kapital atau kucing apa pun. Anda dapat mencobanya di sini:

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

Fidel Eduardo López
sumber
2
Bagaimana ini mengambil input?
spaghetto
Tidak ada input dalam contoh ini, saya membuatnya untuk pengujian di taman bermain, jadi tidak ada input di sana, harus menggunakan vars untuk menguji
Fidel Eduardo López
1
Saya pikir itu membuat ini potongan. Perlu fungsi atau program lengkap agar valid. : /
a spaghetto
1
Oke, saya membuatnya berfungsi ..
Fidel Eduardo López
1

MATLAB: 190 152 118 byte

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])

Tidak Disatukan:

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])

Tes:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

PS: Terima kasih kepada @ Kenney untuk saran yang bagus (lihat komentar)!

brainkz
sumber
Akan disp( (b>0)*[...] + (c>0)*[...] )bekerja di sini
Kenney
Saran bagus @ Kenney
brainkz
1

PHP, 138 byte

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')));

dapat dibaca:

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'))
);

mencoba lebih pendek tetapi tidak berfungsi di 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)));

=)

cottton
sumber
1

OCTAVE, 126 , 108

Versi pertama dengan variabel dan penjelasan, 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}]);

Penjelasan: L tahu hewan mana yang berisi surat itu. S tahu apa yang mereka ulangi. e tahu akhirnya. Anda harus mengaktifkan "siaran otomatis" agar ini berfungsi, tetapi harus secara default di semua Oktaf yang saya gunakan. Tentu saja ada cara yang lebih pendek dengan misalnya perintah regexprep (ekspresi reguler dengan penggantian), tetapi sudah ada beberapa pendekatan dalam jawaban sudah, sehingga akan membosankan.


Sunting: Melewati variabel yang hanya terjadi satu kali, menggunakan pengindeksan oktaf saat terbang (tidak tahu apa namanya sebenarnya) dan menambahkan "i", memasukkan variabel string:

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}]);
pembaca matematika
sumber
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':''))

Cobalah di sini: https://jsbin.com/guqaxejiha/1/edit?js,console

Pavlo
sumber
Tidak berfungsi pada Caaat, keluaran 'Caaats pergi Meoeoeow dan pasti' Caaats pergi Meeeooow
Fidel Eduardo López
@ FidelEduardoLópez tantangan tidak menentukan urutan: "Jumlah e dan o dalam" Meow "harus sama dengan jumlah vokal yang ditemukan dalam kata input."
Pavlo
Ya saya kira Anda benar .. Kucing mengeong lucu yang Anda miliki di sana :)
Fidel Eduardo López
0

Lua, 121 90 Bytes

121 Bytes

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 byte

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"))

Mengambil input seperti 'Caats' atau 'Coooows' peka huruf besar-kecil. Karena tidak ada persyaratan untuk input yang tidak valid, output mungkin aneh untuk, katakanlah, 'Rubah' atau 'Lembu'. : P

Tidak disatukan

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")
      )

Pembaruan ke 90 Bytes: Struktur if-control yang diganti dengan operator logis, dioptimalkan rangkaian string dengan menambahkan lebih banyak data dalam deklarasi i. Tanda kurung dihapus pada i:find("w"). Cukup menarik, menyimpan "o"ke variabel menghemat beberapa byte saat menggunakan rep, tetapi akan menjadi kontraproduktif dengan "w"atau "e". Semakin banyak Anda tahu.

Cyv
sumber
0

Lua: 115 92 89 Bytes

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

mengambil C[]tatau C[]wsebagai input; [] = a atau o. Input lowecase akan menerjemahkan hasilnya.

versi panjang:

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

Output contoh:

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

Edit: diubah if then elsemenjadi and or. menghapus SEMUA ruang bukan string.

Anda juga bisa mencobanya di sini: Jalankan Lua Online tapi saya tidak tahu cara menggunakan terminal, jadi saya sudah menjalankannya.

Sunting: perubahan penggunaan "o" dan dihapus () dari :find. kredit diberikan kepada Cyv untuk menemukan optimasi tersebut. Ditambahkan "s" dan diubah l=#i-3menjadil=#i-2

Dengan input termasuk "s" hanya 88 byte:

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))
CHlM3RA
sumber
Masukan harus kucing atau sapi, bukan kucing, sapi. Dan tidak memanfaatkan. 'kucing' keluaran 'kucing pergi Meow' harus 'Kucing pergi Meow'
Fidel Eduardo López
@ FidelEduardoLópez Saya setuju yang pertama bukan yang kedua. Menurut kata yang berarti kucing, dan kata yang berarti kucing diperbolehkan tetapi kucing tidak sesuai dengan kata input catdan cow. Input dapat menggunakan huruf kapital apa pun dan cat atau Cat harus benar valid.
CHlM3RA
Setuju. input dapat menggunakan kapitalisasi apa pun, tetapi output harus selalu dikapitalisasi sebagai C [] ts go M [] w, bukan?
Fidel Eduardo López
0

Dart , 114 112 110 104 102 100 byte

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':'');

Cobalah online!

  • -2 byte: Mengubah cara u offset dihitung untuk mengurangi jumlah penambahan
  • -2 byte: Memindahkan centang pada pasdding pertama dengan lebar dan bukan karakter
  • -6 bytes: Mengubah cek Sapi / Kucing
  • -2 byte: Menyingkirkan penugasan variabel
  • -2 byte: Mengurangi kemudian banyak parentesis pada 2 * (s.panjang + 1)
  • Elcan
    sumber
    -1

    PHP, 170 164 161 157 byte

    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";

    Mengambil kapitalisasi apa pun. CaAaT,, coOOOwterserah.

    v2: tidak benar-benar membutuhkan [wt] $. juga dikoreksi char ct
    v3: char ct itu semua salah, kental $ a dan $ e penugasan
    v4: simpan 3 byte pada $ af -> $ a
    v5: simpan 4 byte dengan onelining itu (tidak ditampilkan)

    romulusnr
    sumber
    Tidak downvote, tetapi hasilnya salah: hilang $argv[0]."s go ". Coba ini 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";(perbaiki keluaran dan 151 byte).
    Kenney