Kediler Miyav'a gider, İnekler Moo'ya gider


40

Herkes kedilerin miyavla gittiğini bilir, fakat pek çoğunun farketmediği şey, kaaaatların benim için sıkıntıya girdiğidir. Aslında, kedinin yaptığı sesli harflerin uzunluğu, kulağınız ile ünlü olan harfin uzunluğuna bağlıdır.

Aynı şekilde, inekler moo, ama coooows moooooooo gider

Meydan okuma

Girdi, kedi anlamına gelen bir kelime ve inek anlamına gelen bir kelime, ana ünlülerin sayısını belirleyen ve uygun olarak aşağıdaki dizelerden birini basan bir program yazmalısınız :

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

Ünlülerin []kısaltması, aşağıdaki kurallara göre:

  • "Miyav" daki e ve o sayısının her ikisinin de, giriş kelimesinde bulunan ünlü harf sayısı ile eşleşmesi gerekir.
  • "Moo" daki o sayısı, girilen kelimede bulunan ünlü harflerin iki katı olmalıdır.

Program giriş kelimeleri tanıması gerekir catve cow. Girdi, en uygun olan herhangi bir büyük / küçük harf kullanabilir, ancak çıktı tam olarak yukarıda gösterildiği gibi büyük harfle yazılmalıdır.


42
belirli bir tilki hakkında işaret şaka
Martin Ender

7
Meydan okumayı anladığımdan emin değilim. Giriş bir veya iki kelime mi? Bazı giriş / çıkış çiftleri verebilir misiniz?
Zgarb

31
@ MartinBüttner Hangi tilki hakkında konuştuğunuzu bildiğimden emin değilim. Hafızamı dürtün, ne diyor?
DJMcMayhem

4
E ve o'ların sayısını belirtirsiniz ancak sıralarını belirtmezsiniz. Örneğin Meooeoewgeçerli bir çıktı mı Caaat?
Peter Olson

10
Tilki aşkına püf noktalarıyla dur!
Eumel

Yanıtlar:


17

Retina , 57 49 44 43 41 bayt

Çok yakın ... :) Pyth ...

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

Çevrimiçi deneyin.

Girdinin Caaatveya gibi büyük harfle yazılmasını bekler Coooow.

açıklama

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

Regex girişin tamamı ile eşleşir ve gruptaki ünlü harfleri yakalar (çapalara 1ihtiyacımız yok, çünkü eşleşme başarısız olamaz ve girişte tüm girişe yavaşça eşleşir). İkame bu girişi geri yazar ve ekler s go M, ardından iki kere sesli harfleri takip eder. Girdiler için Caaatve Coooowşunları alırız:

Caaats go Maaaaaa
Coooows go Moooooooo

İnekler için çıktı zaten doğru. Sadece bu kediler hakkında bir şeyler yapmamız gerekiyor.

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

+Retina mümkün olduğunca sık bu aşamada tekrarlamak söyler. Regex adizenin son kısmındaki iki saniye ile eşleşir (bunu $çapa ile sağlıyoruz, böylece içindeki şeyleri değiştirmeyiz Caaats). Bu, esasen M, o kısım hala sahip olduğu sürece, her şeyden sonra eşleşecektir a. İki as kaldırılır ve sarıldıktan sonra tüm son ekler e...ow:

Caaats go Meaaaaow
Caaats go Meeaaowow
Caaats go Meeeowowow

Son olarak, iki çok var wbiz önce olanlar kaldırmak böylece sonucu ler, o(emin olmak için biz çıkmasını değiliz win Coooows):

wo
o

Ve biz ayrıldık:

Caaats go Meeeooow

11

LabVIEW, 58 LabVIEW İlkelleri

böyle dizeler yaratmak bir acıdır ...

En soldaki vis desen eşleşmesidir, sırasıyla a + ve o +, arka arkaya as ve os değerlerini ararlar.

Bunların uzunluğunu alarak, uzunlukları 1 ile os, diğeri 2 kez os olan 3 dizi oluşturur.

Sonra bütün parçalar bir araya getirildi. Önce orijinal girdi, sonra tüm M diziler, kullanılmayanlar boş, bu yüzden yoksayılacaklar ve eğer girdi kedi ise son olarak aw. (Keşfedildiği gibi, maçtan sonra boş olacaksa, maçtan sonra olacaktır.)

Lolz için ayrıca 6 farklı çıktıya sahip tilkiyi de kullandım ^^


Bunu test etmenin bir yolu yok, ama söylediğiniz gibi çalışırsa o zaman çok etkilendim!
Sonic Atom

İlgi alanı dışında bir açıklama yapabilir misiniz?
Sonic Atom

açıklama btw kadar, herhangi bir sorunuz var mı diye sormakta tereddüt etmeyin
Eumel

Bir patron gibi kod-golf. Vay.
Jakuje

7

Pyth, 50 44 34

Biçiminde giriş alır ["caat", "coow"].

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

Çevrimiçi deneyin.

Açıklaması:

  .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'ye , uzunluktaki büyük düşüşler için teşekkür ederiz .


Bazı küçük şeyler: İlk yerini alabilir jkile sikinci kaldırmak, jk(o hiç bir şey yapmaz), ve değiştirme "w\n"ile \wb.
Jakube

Ayrıca, kodunuzun çoğu, sizin gibi r.Q3ve diğer şeylerde kodunuzda iki kez görünür . Bir binary_map kullanabilir ve 10 ilave karakter kaydedebilirsiniz. Pj.bs[rN3"s go M"S*-lN2+Y\o\w)Q"eo. Emin değilim, zaten haritalarla deneyimliyseniz, herhangi bir sorunuz varsa Pyth Chat'de size açıklayabilirim .
Jakube,

Güzel, teşekkürler. Böyle bir şey yapabileceğimi düşündüm ama nasıl olduğunu bilmiyordum.
Luke

Bu çok verimli. Daha fazla oy almalı.
Sonic Atom


5

Perl, 66 61 55 54 bayt

için +1 içerir -p

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

Girişin uyması bekleniyor /^C[ao]+[tw]$/(takip eden yeni satır yok!)
Kullanım:/bin/echo -n Caaat | perl -p 55.pl

Yıkmak

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

Önceki versiyon:

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

Yorum yaptı :

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

Örnek: Caaat

  • Yakalama $&olarak ave @lsıra (a,a,a).
  • Set $xüç kez a3 kez izledi o: aaaooo.
  • Tüm Çevir aiçinde $xiçin e: eeeooo. Değiştirmeleri (0 ya da pozitif) sayısı bir kedi-dedektörü olarak hizmet eder: grubu $yiçin weğer varsa.
  • Ekleyerek girişi değiştirin s go M, eeeooove w.

  • güncelleme 61 : Dizge yerine listeyi kullanarak 5 bayt kaydet
  • 55 güncelleme : Inlining atayarak 6 byte kaydetmek $\yerine s/$/, ve giriş no arka yeni satır gerektirir.
  • güncelleme 54 : l'yi ortadan kaldırarak 1 byte tasarruf edin.

4

Python 2,74 bayt

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

Giriş alır

Caaat veya Cooow


2

CJam ( 60 57 55 53 bayt)

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

Çevrimiçi demo . Giriş küçük harf olarak kabul edilir.

Aynı uzunluk için:

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

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

(satır başlıkları noktalı virgüllerle aynı sayılır, bu nedenle netlik için satır sonu)

Şaşırtıcı derecede zorlu bir mücadele. Ve bunun daha fazla golf oynayabileceğinden eminim.

Giriş dizelerini $ave olarak alır $b. Onları birleştirir ve karakter dizisi olarak yayınlar, sonra bunu bir döngüden geçirir %{}. Her harf normal olup olmadığını kontrol -eqeder 'a've ilişkili sayaç değişkeni uygun şekilde artırılır. Daha sonra çıkarma 4+$cgelen $diçin hesaba catcwünlüler çıkış saatleri de ilgili sayaçları değiştirerek, girişte ve çıkış cümleler formüle geçin. (Örneğin, PowerShell'de 'e'*3verim elde edilir 'eee'.)


1

@ Omulusnr'ın cevabına neredeyse benzer, ancak bu doğru çıktı üretir ve ayrıca girdi büyük / küçük harf duyarsızdır.

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 bayta biraz daha kısa
Tschallacka

1

Swift 2, 3̶8̶1̶ 333 bayt

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

Ungolfed:

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

Herhangi bir büyük harfle kedi veya inek alır. Burada deneyebilirsiniz:

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


2
Bu nasıl girdi alıyor?
Bir spaghetto

Bu örnekte girdi yok, oyun alanında test yapmak için yaptım, bu yüzden orada girdi yok, test etmek için değişkenleri kullanmalı
Fidel Eduardo López

1
Bunun bir pasajı yaptığını düşünüyorum. Geçerli olması için bir işlev veya tam program olması gerekir. : /
Bir spaghetto

1
Tamam, bir işlev yaptım ..
Fidel Eduardo López

1

MATLAB: 190 152 118 bayt

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

Ungolfed:

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

Testler:

caaaaaaaats
Caaaaaaaats go Meeeeeeeeoooooooow

cooooows
Cooooows go Moooooooooo

Not: Güzel öneri için @Kenney'e teşekkürler (Yorumlara bakınız)!


Misiniz disp( (b>0)*[...] + (c>0)*[...] )burada çalışıyor?
Kenney,

İyi öneri @Kenney
brainkz

1

PHP, 138 bayt

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

okunabilir:

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

kısa çalıştı ama PHP'de çalışmayacak:

#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

EKİM, 126 , 108

Değişkenler ve açıklama içeren ilk versiyon, 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}]);

Açıklama: L hangi hayvanın hangi harfi içerdiğini bilir. Ne tekrar ettiklerini biliyor. e bittiğini biliyor. Bunun çalışması için "otomatik yayın" özelliğini açmanız gerekir, ancak kullandığım tüm Oktavlarda varsayılan olarak olması gerekir. Tabii ki, örneğin regexprep komutuyla daha kısa yollar var (değişimli düzenli ifadeler), ama zaten cevaplarda bu tür birkaç yaklaşım mevcuttu, bu yüzden sıkıcı olurdu.


Düzenleme: octave-on-the-indexed index kullanarak (gerçekte ne dendiğini bilmiyorum) ve "i" ekleyerek, string dizgisi değişkenini:

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

Burada deneyin: https://jsbin.com/guqaxejiha/1/edit?js,console


Caaat üzerinde çalışmıyor, Caaats Meoeow'a ​​gidiyor ve Caaats Meeeooow'a gidiyor
Fidel Eduardo López

@ FidelEduardoLópez mücadelesi şu sırayı belirtmiyor: "" Miyav "daki e ve o sayıları hem giriş kelimesinde bulunan ünlü sayılarla eşleşmelidir."
Pavlo

Sanırım haklısın .. Orada komik miyavlayan kediler var :)
Fidel Eduardo López

0

Lua, 121 90 Bayt

121 Bayt

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 bayt

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' veya 'Coooows' gibi büyük / küçük harf duyarlı girişler yapar. Geçersiz girdiler için gereklilik olmadığından, çıktı 'Foxes' veya 'Oxen' için tuhaf olabilir. : P

Ungolfed

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 Bayta Güncelleştir: if-control yapısını mantıksal işleçlerle değiştirdi, bildiriminde daha fazla veri ekleyerek en iyi dizge birleştirme i. Kaldırılan parantez açık i:find("w"). İlginçtir ki, "o"bir değişkeni saklamak , kullanırken birkaç baytlık bir tasarruf sağladı rep, ancak "w"ya da ile verimsiz olurdu "e". Daha fazla bilirsen.


0

Lua: 115 92 89 Bayt

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

alır C[]tveya C[]wgirdi olarak; [] = a veya o's. Lowecase girişi sonuca dönecektir.

uzun versiyon:

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

Örnek çıktılar:

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

Düzenleme: değişmiş if then elseiçin and or. TÜM olmayan dize alanı 's kaldırıldı.

Ayrıca kediyi burada deneyin: Lua Online'ı yürütün ancak terminalin nasıl kullanılacağını çözemedim, böylece bir fonksiyona başladım.

Düzenleme: "o" kullanımı değiştirildi ve kaldırıldı () den :find. kredi bu optimizasyonları bulmak için Cyv'e gidiyor . "S" eklendi ve değiştirilmesi l=#i-3içinl=#i-2

"S" girişini içeren sadece 88 bayt:

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

Girdi kedi olmalı ya da inek olmalı, inek değil. Ve büyük harf yapmaz. 'kedilerin çıktı 'Kediler Miyav git' olmalıdır 'kediler Miyav git'
Fidel Eduardo López

@ FidelEduardoLópez İkincisi değil ikincisini kabul ediyorum. Göre kelime kedi anlamına gelen ve inek anlamına gelen bir sözcük Cats izin verilir, ancak uygun olmayan giriş kelimeler catve cow. Girdi herhangi bir büyük harf kullanabilir ve kedinin veya Cat'in genişlemesi geçerli olmalıdır.
CHIM3RA

Anlaşmak. girdi herhangi bir büyük harf kullanabilir, ancak çıktı her zaman C [] 'nin gideceği gibi büyük harf olmalıdır, değil mi?
Fidel Eduardo López,

0

Dart , 114 112 110 104 102 100 bayt

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

Çevrimiçi deneyin!

  • -2 bayt: Ekleme sayısını azaltmak için u ofsetinin hesaplanma şeklini değiştirdi
  • -2 bayt: İlk geçişteki onay karakterine değil genişliğe taşındı
  • -6 bayt: İnek / Kedi kontrolünü değiştirdi
  • -2 bayt: Değişken atamalarından kurtuldum
  • -2 bayt: 2 * 'de azalan ve sonra parantez sayılmaz.

  • -1

    PHP, 170 164 161 157 bayt

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

    Herhangi bir şekilde büyük harf kullanımı alır. CaAaT, coOOOwher neyse.

    v2: [wt] $ 'a gerçekten ihtiyacım yok. ayrıca düzeltildi char ct
    v3: char ct tamamen yanlıştı, $ a ve $ e tahsisi
    v4: $ af 3 bayt
    kaydet


    Oy vermedi, ancak çıktı yanlış: eksik $argv[0]."s go ". Bunu deneyin 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";(doğru çıkış ve 151 bayt).
    Kenney,
    Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
    Licensed under cc by-sa 3.0 with attribution required.