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.


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

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


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.


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


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=$&x@l.o 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.

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


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

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


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

$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


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


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

=)


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

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


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.


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

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)

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


    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
    Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
    Licensed under cc by-sa 3.0 with attribution required.