Mèo đi Meow, bò đi Moo


40

Mọi người đều biết rằng mèo đi meo meo, nhưng điều mà nhiều người không nhận ra là caaaats đi meeeeoooow. Trong thực tế, độ dài của các nguyên âm mà con mèo tạo ra phụ thuộc vào độ dài của nguyên âm mà bạn xử lý nó.

Theo cùng một cách, bò đi moo, nhưng coooows đi moooooooo

Thử thách

Bạn phải viết một chương trình lấy đầu vào, một từ có nghĩa là con mèo một từ có nghĩa là con bò, xác định số nguyên âm chính và in một trong các chuỗi sau đây, nếu phù hợp:

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

Trường hợp []viết tắt của nguyên âm, theo các quy tắc sau:

  • Số lượng của e và o trong "Meow" phải khớp với số nguyên âm được tìm thấy trong từ đầu vào.
  • Số lượng o trong "Moo" phải gấp đôi số nguyên âm được tìm thấy trong từ đầu vào.

Chương trình phải nhận ra các từ đầu vào catcow. Đầu vào có thể sử dụng bất kỳ cách viết hoa nào thuận tiện nhất, nhưng đầu ra phải được viết hoa chính xác như được hiển thị ở trên.


42
trò đùa về một con cáo nào đó
Martin Ender

7
Tôi không chắc là tôi hiểu thử thách. Là đầu vào một hoặc hai từ? Bạn có thể đưa ra một số ví dụ cặp đầu vào / đầu ra?
Zgarb

31
@ MartinBüttner Tôi không chắc là tôi có biết bạn đang nói về con cáo nào không. Chạy bộ nhớ của tôi, nó nói gì?
DJMcMayhem

4
Bạn chỉ định số lượng của e và o, nhưng không phải thứ tự của họ. Là Meooeoewmột đầu ra hợp lệ cho Caaat, ví dụ?
Peter Olson

10
Vì lợi ích của con cáo dừng lại với chơi chữ!
Eumel

Câu trả lời:


17

Võng mạc , 57 49 44 43 41 byte

Rất gần ... :) Pyth ...

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

Hãy thử trực tuyến.

Dự kiến ​​đầu vào sẽ được viết hoa như Caaathoặc Coooow.

Giải trình

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

Regex khớp với toàn bộ đầu vào và thu thập các nguyên âm trong nhóm 1(chúng tôi không cần neo, vì trận đấu không thể thất bại và sẽ tham lam khớp với toàn bộ đầu vào). Sự thay thế ghi lại đầu vào đó, và nối thêm s go M, theo sau là hai lần nguyên âm. Đối với đầu vào CaaatCoooow, chúng tôi nhận được:

Caaats go Maaaaaa
Coooows go Moooooooo

Đầu ra cho bò đã chính xác. Chúng ta chỉ cần làm gì đó với những con mèo đó.

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

Việc +bảo Retina lặp lại giai đoạn này thường xuyên nhất có thể. Regex khớp với hai as trong phần cuối của chuỗi (chúng tôi đảm bảo điều này với $neo, để chúng tôi không thay thế những thứ bên trong Caaats). Điều này về cơ bản sẽ phù hợp với mọi thứ sau đó M, miễn là phần đó vẫn có as. Hai as được loại bỏ và toàn bộ hậu tố sau khi nó được bọc trong e...ow:

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

Cuối cùng, có hai wkết quả trong kết quả, vì vậy chúng tôi loại bỏ những cái có trước o(để đảm bảo chúng tôi không làm hỏng wtrong Coooows):

wo
o

Và chúng tôi còn lại với:

Caaats go Meeeooow

11

LabVIEW, 58 LabVIEW Nguyên thủy

tạo ra các chuỗi như thế này là một nỗi đau ...

Vis ngoài cùng bên trái là khớp mẫu, a + và o + tương ứng tìm kiếm số lượng trễ nhất của as và os trong một hàng.

Lấy chiều dài của những cái tôi tạo ra 3 mảng 1 với chiều dài os 1 với chiều dài es và một mảng với 2 lần chiều dài os.

Sau đó tất cả các bộ phận được đặt lại với nhau. Đầu tiên, đầu vào ban đầu, sau đó đi M tất cả các Mảng, cái không sử dụng đều trống nên chúng sẽ bị bỏ qua và cuối cùng là aw nếu đầu vào là con mèo. (Nếu như được tìm thấy sẽ có sau trận đấu, nếu không sau khi trận đấu trống)

Đối với lolz tôi cũng đã triển khai con cáo với 6 kết quả đầu ra khác nhau ^^


Tôi không có cách nào để kiểm tra điều đó, nhưng nếu nó hoạt động như bạn nói thì tôi rất ấn tượng!
Sonic Atom

Bạn có thể đưa ra một lời giải thích ra khỏi quan tâm?
Sonic Atom

giải thích là lên btw, đừng ngần ngại hỏi nếu có bất kỳ câu hỏi nào
Eumel

Code-golfing như một ông chủ. Ồ
Jakuje

7

Bình thường, 50 44 34

Đưa đầu vào theo định dạng ["caat", "coow"].

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

Hãy thử trực tuyến.

Giải thích:

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

Cảm ơn Jakube vì đã giảm đáng kể chiều dài.


Một số điều nhỏ: Bạn có thể thay thế cái thứ nhất jkbằng s, loại bỏ cái thứ hai jk(nó không làm gì cả) và thay thế "w\n"bằng \wb.
Jakube

Ngoài ra, hầu hết các mã của bạn xuất hiện hai lần trong mã của bạn, như r.Q3và các thứ khác. Bạn có thể sử dụng binary_map và lưu thêm 10 ký tự. Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo. Không chắc chắn, nếu bạn đã có kinh nghiệm với bản đồ, nếu bạn có bất kỳ câu hỏi nào tôi có thể giải thích cho bạn trên Trò chuyện Pyth .
Jakube

Tốt đẹp, cảm ơn. Tôi hình dung mình có thể làm điều gì đó như thế nhưng không biết làm thế nào.
Luke

Điều này rất hiệu quả. Nó nên có nhiều upvote.
Sonic Atom


5

Perl, 66 61 55 54 byte

bao gồm +1 cho -p

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

Đầu vào dự kiến ​​sẽ tuân thủ /^C[ao]+[tw]$/(không có dòng mới!)
Cách sử dụng:/bin/echo -n Caaat | perl -p 55.pl

Phá vỡ

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

Phiên bản trước:

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

Đã bình luận :

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

Thí dụ: Caaat

  • Chụp $&như a@lnhư (a,a,a).
  • Đặt $xthành ba lần atheo sau là 3 lần o: aaaooo.
  • Dịch tất cả atrong $xđể e: eeeooo. Số lần thay thế (0 hoặc dương) đóng vai trò là máy dò mèo: được đặt $ythành wnếu có.
  • Thay đổi đầu vào bằng cách nối thêm s go M, eeeooow.

  • cập nhật 61 : Lưu 5 byte bằng cách sử dụng danh sách thay vì chuỗi
  • cập nhật 55 : lưu 6 byte bằng cách nội tuyến, gán $\thay vì s/$/và không yêu cầu dòng mới trong đầu vào.
  • cập nhật 54 : lưu 1 byte bằng cách loại bỏ @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']

Đưa đầu vào

Caaat hoặc là Cooow


2

CJam ( 60 57 55 53 byte)

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

Bản demo trực tuyến . Đầu vào được giả định là trong trường hợp thấp hơn.

Cho cùng một chiều dài:

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

(ngắt dòng được tính giống như dấu chấm phẩy, vì vậy ngắt dòng cho rõ ràng)

Bất ngờ thách thức khó khăn. Và tôi chắc chắn rằng điều này có thể được chơi gôn hơn nữa.

Lấy chuỗi đầu vào là $a$b. Nối chúng và ép chúng thành một mảng char, sau đó dẫn chúng qua một vòng lặp %{}. Mỗi chữ cái sau đó được kiểm tra nếu nó -eqthông thường 'a'và biến bộ đếm liên quan được tăng lên một cách thích hợp. Sau đó chúng tôi trừ 4+$ctừ $dtài khoản cho catcwtrong đầu vào, và tiến tới xây dựng các câu đầu ra, sửa đổi lần nguyên âm đầu ra các quầy tương ứng. (Trong PowerShell, 'e'*3sẽ mang lại 'eee', ví dụ.)


1

Gần giống với câu trả lời của @ omulusnr nhưng điều này tạo ra đầu ra chính xác và đầu vào cũng không phân biệt chữ hoa chữ thường.

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':'';ngắn hơn một chút đến 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" :""))}

Ung dung:

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

Mất mèo hoặc bò bất kỳ viết hoa. Bạn có thể thử nó ở đây:

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


2
Làm thế nào để có đầu vào này?
một spaghetto

Không có đầu vào trong ví dụ này, tôi đã tạo nó để thử nghiệm trên sân chơi, vì vậy không có đầu vào nào ở đó, phải sử dụng vars để kiểm tra
Fidel Eduardo López

1
Tôi nghĩ rằng điều đó làm cho một đoạn trích sau đó. Nó cần phải là một chức năng hoặc chương trình đầy đủ để có hiệu lực. : /
một spaghetto

1
Ok, tôi đã biến nó thành một chức năng ..
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])

Ung dung:

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

Các xét nghiệm:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

PS: Cảm ơn @Kenney vì gợi ý hay (xem bình luận)!


Sẽ disp( (b>0)*[...] + (c>0)*[...] )làm việc ở đây?
Kenney

Gợi ý hay @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')));

có thể đọc được

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

đã thử ngắn hơn nhưng không hoạt động trong 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

Tháng Mười, 126 , 108

Phiên bản đầu tiên với các biến và giải thích, 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}]);

Giải thích: L biết con vật nào chứa chữ cái nào. S biết những gì họ lặp lại. e biết kết thúc. Bạn cần bật "phát sóng tự động" để nó hoạt động, nhưng nó phải được mặc định trong tất cả các Octaves tôi đã sử dụng. Tất nhiên tồn tại những cách ngắn hơn với ví dụ regrecrep (biểu thức chính quy với thay thế), nhưng đã có một số cách tiếp cận như vậy trong câu trả lời, vì vậy điều đó sẽ gây nhàm chán.


Chỉnh sửa: Bỏ qua các biến chỉ xảy ra một lần, sử dụng lập chỉ mục quãng tám (không biết nó được gọi là thực) và thêm "i", biến chuỗi đầu vào:

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

Dùng thử tại đây: https://jsbin.com/guqaxejiha/1/edit?js,console


Không hoạt động trên Caaat, đầu ra 'Caaats go Meoeoeow và phải là' Caaats go Meeeooow
Fidel Eduardo López

@ FidelEduardoLópez thử thách không chỉ định thứ tự: "Số lượng e và o trong" Meow "phải khớp với số nguyên âm tìm thấy trong từ đầu vào."
Pavlo

Chà tôi đoán là bạn đã đúng .. Những chú mèo meo meo vui nhộn bạn có ở đó :)
Fidel Eduardo López

0

Lua, 121 90 byte

121 byte

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

Có đầu vào như 'Caats' hoặc 'Coooows' phân biệt chữ hoa chữ thường. Vì không có yêu cầu nào đối với đầu vào không hợp lệ, nên đầu ra có thể kỳ lạ đối với 'Foxes' hoặc 'Oxen'. : P

Bị đánh cắ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")
      )

Cập nhật lên 90 byte: Cấu trúc if-control được thay thế bằng các toán tử logic, nối chuỗi được tối ưu hóa bằng cách nối thêm dữ liệu vào khai báo i. Đã xóa dấu ngoặc đơn trên i:find("w"). Thật thú vị, lưu trữ "o"vào một biến đã lưu một vài byte khi sử dụng rep, nhưng sẽ phản tác dụng với "w"hoặc "e". Bạn càng biết nhiều.


0

Lua: 115 92 89 byte

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

lấy C[]thoặc C[]wlàm đầu vào; [] = a's hoặc o's. Một đầu vào lowecase sẽ chuyển thành kết quả.

phiên bản dài:

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

Kết quả ví dụ:

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

Chỉnh sửa: đổi if then elsethành and or. loại bỏ TẤT CẢ các không gian chuỗi.

Ngoài ra, bạn hãy thử dùng nó ở đây: Thực thi Lua Online nhưng tôi không thể tìm ra cách sử dụng thiết bị đầu cuối nên tôi đã đặt nó vào một chức năng.

Chỉnh sửa: thay đổi cách sử dụng "o" và loại bỏ () từ :find. tín dụng đến Cyv để tìm những tối ưu hóa. Đã thêm "s" và đổi l=#i-3thànhl=#i-2

Với đầu vào bao gồm "s" chỉ 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))

Đầu vào phải là mèo hoặc bò chứ không phải mèo, bò. Và không viết hoa. 'mèo' đầu ra 'mèo đi Meow' nên là 'Mèo đi Meow'
Fidel Eduardo López

@ FidelEduardoLópez Tôi đồng ý về cái đầu tiên không phải cái thứ hai. Theo từ có nghĩa là mèo, và một từ có nghĩa là mèo được phép nhưng không theo từ đầu vào catcow. Đầu vào có thể sử dụng bất kỳ chữ viết hoa nào và cat hoặc Cat nên hợp lệ.
CHlM3RA

Đồng ý. đầu vào có thể sử dụng bất kỳ chữ viết hoa nào, nhưng đầu ra phải luôn được viết hoa là C [] ts go M [] w, phải không?
Fidel Eduardo López

0

Phi tiêu , 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':'');

Hãy thử trực tuyến!

  • -2 byte: Thay đổi cách tính toán bù u để giảm số lần bổ sung
  • -2 byte: Đã chuyển kiểm tra trên pasdding đầu tiên sang chiều rộng và không phải ký tự
  • -6 byte: Đã thay đổi kiểm tra Cow / Cat
  • -2 byte: Loại bỏ các bài tập biến
  • -2 byte: Giảm số lượng từ gốc trong 2 * (s.length + 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";

    Mất bất kỳ chữ viết hoa nào. CaAaT, sao cũng được coOOOw.

    v2: không thực sự cần [wt] $. cũng đã sửa char ct
    v3: char ct đều sai, cô đọng $ a và $ e gán
    v4: lưu 3 byte trên $ af -> $ a
    v5: lưu 4 byte bằng cách kích hoạt nó (không hiển thị)


    Không downvote, nhưng đầu ra sai: thiếu $argv[0]."s go ". Hãy thử điều này 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";(đầu ra chính xác và 151 byte).
    Kenney
    Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
    Licensed under cc by-sa 3.0 with attribution required.