Daha fazla inek çanı…!


42

Sen hiç teknik destek sağlıyor o Blue Oyster Cult kayıt oturumu üretir olarak Bruce Dickenson'dan. Daha fazla inek çanı istediğinde, ona verebilirsin.

Senin görevin

Girdi olarak bir dize (veya kendi dilinizde eşdeğeri) alan ve bir tane daha çıngırak içeren ilgili bir dize çıkaran bir program veya işlev yazın.

Bir dize kaç tane zil içerir?

Bir dizgenin içerdiği inek zillerinin sayısı, dizginin karakterlerine izin verilerek elde edilebilecek "cowbell" in maksimum sayıda farklı kopyasına eşittir. Örneğin, "bbbccceeellllllooowwwwwwwww"3 iken, cowbells içerir "bbccceeellllllooowwwwwwwww"ve "bbbccceeelllllooowwwwwwwww"her biri 2 cowbells içerir ve "cowbel"0 cowbells içerir.

Çıktı girdiyle nasıl ilişkili olmalıdır?

Çıktı, bu sırayla, giriş dizgisinin birleştirilmesinden ve inek zillerinin sayısını artırmak için gereken giriş dizgisinin en kısa önekinden oluşmalıdır.

Örneğin, "bbbccceeelllllooowwwwwwwww"sadece "l"2 yerine 3 inek çanı içerecek bir ek gerekir; Bu içeren kısa öneki "l"olan "bbbccceeel". Bu nedenle, eğer giriş ise "bbbccceeelllllooowwwwwwwww", çıkış olmalıdır "bbbccceeelllllooowwwwwwwwwbbbccceeel".

teknik ayrıntıların

  • Girişin yalnızca yazdırılabilir ASCII karakterleri içerdiğini varsayabilirsiniz. Dilinizin dize işlemesi için can sıkıcı bir veya iki karakter varsa (örneğin yeni satırlar veya \), girişin bunları içermediğini varsayabilirsiniz - bu kısıtlamayı belirtin.
  • Girdideki alfabetik karakterlerin tümünün küçük harf veya tümünün büyük harf olduğunu da varsayabilirsiniz. Bunlardan birini almamaya karar verirseniz, cowbell'ları büyük küçük harf duyarlı olarak sayın.
  • Sen ayrıca, girdi karakterlerinin her birinin en az bir kopyasını içeren varsayalım olabilir b, c, e, l, o, ve w. Bu, daha fazla cowbell içeren bir dize üretmek için dizenin bazı öneklerinin birleştirilebileceğini varsaymakla eşdeğerdir. (Giriş dizesinin kendisinin bir çıngırak içermesi gerekmediğine dikkat edin.)
  • Dilinizde bu sorunu çözen bir yapı varsa, o zaman onu tamamen ciddiye alın, bu ne kadar harika.

Altın kaplama çocuk bezi

Kayıt stüdyosu süresi pahalı olduğundan, kodunuz mümkün olduğu kadar kısa olmalıdır. En az bayt ile giriş kazanır!

Test durumları

( kolay kopyalama / yapıştırma için pastebin linki )

Test girişi # 1: "christopher walken begs for more cowbell!"

Test çıkışı # 1: "christopher walken begs for more cowbell!christopher wal"

Test girişi # 2: "the quick brown fox jumps over the lazy dog"

Test çıkışı # 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"

Test girişi # 3: "cowbell"

Test çıkışı # 3: "cowbellcowbell"

Test girişi # 4: "cowbell cowbell cowbell"

Test çıkışı # 4: "cowbell cowbell cowbellcowbell"

Test girişi # 5: "cowbell cowbell cowbel"

Test çıkışı # 5: "cowbell cowbell cowbelcowbel"

Test girişi # 6: "bcelow"

Test çıkışı # 6: "bcelowbcel"

Test girişi # 7: "abcdefghijklmnopqrstuvwxyz"

Test çıkışı # 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"

Test girişi # 8: "cccowwwwbbeeeeelllll"

Test çıkışı # 8: "cccowwwwbbeeeeelllllccco"

Test girişi # 9: "be well, programming puzzles & code golf"

Test çıkışı # 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"

Test girişi # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"

Test çıkışı # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"

Test girişi # 11:

"c-c-b-c

i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!

bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"

Test çıkışı # 11:

"c-c-b-c

i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!

bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c

i have a cow, i have a bell"

23
İçinde cevap herkes COW on internet noktaları kazanır.
Pavel

3
İnsanların giriş / çıkış durumlarını tek bir kod bloğunda biçimlendirdiyseniz ele almaları daha kolay olacağını düşünüyorum. Ayağa kalktığı için çok fazla yer kaplıyor ve kopya yapıştırıcı dostu değil.
FryAmTheEggman,

Kopyalama / yapıştırma için pastebin bağlantısı eklendi. Bu yazıda test durumlarını gizlemenin / daraltmanın / göstermenin bir yolu varsa, böylece dikey alanı koruyacaksa, öğrenmek isterim.
Greg Martin

2
Normalde insanlar test case -> resultönceden biçimlendirilmiş büyük bir kod bloğunda kullanırlar. Estetik açıdan çok daha hoş ve kopyalamak için yapıştırmak daha kolay.
FlipTack,

1
@MatthewRoh Sözcüğü iki Ls vardır gerçeği dışında, sorduğu şey bu değil.
Martin Ender

Yanıtlar:


13

Pip , 50 42 38 bayt

T$<(MN{_NaM"lcowbe"}//^2M[aYa@<i])++iy

Dizeyi, gerekirse alıntı olarak verilen bir komut satırı argümanı olarak iletin. Çevrimiçi deneyin!

açıklama

Bunu iki kısımda açıklayacağım: çıngırak işlevi ve tam program. İlk olarak, işte bir dizede çıngırak miktarını hesaplayan fonksiyon:

MN{_NaM"lcowbe"}//^2

{...}bir işlevi tanımlar. Birçok Pip operatörü, bir fonksiyona uygulandığında, başka bir fonksiyon döndürür; örneğin, -{a+1}aynıdır {-(a+1)}. Yani yukarıdaki eşittir

{MN(_NaM"lcowbe")//^2}

aşağıdaki gibi çalışır:

{                    }  Function, in which a is the 1st argument (the string)
    _Na                 Lambda fn: returns number of times its argument occurs in a
       M"lcowbe"        Map that function to the characters of "lcowbe"
                   ^2   A devious way to get [2]: split the scalar 2 into characters
   (            )//     Int-divide the list of character counts by [2]
                        Since the lists are not the same length, this divides the first
                          element (# of l's) by 2 and leaves the others alone
 MN                     Take the min of the resulting list

Şimdi buna sahibiz, işte tam program:

T$<(MN{_NaM"lcowbe"}//^2M[aYa@<i])++iy
                                        a is 1st cmdline arg, i is 0 (implicit)
T                                       Loop till condition is true:
                            a@<i        Slice leftmost i characters of a
                           Y            Yank that into y variable
                         [a     ]       List containing a and that value
                        M               To that list, map...
    MN{_NaM"lcowbe"}//^2                ... the cowbell function
                                        Result: a list containing the amount of cowbell
                                        in the original string and the amount in the slice
 $<(                             )      Fold on less-than: true if the first element is
                                        less than the second, otherwise false
                                  ++i   In the loop, increment i
                                     y  Once the loop exits, print y (the latest slice)

Girdim cowbell cowbell cowbeeve çıktı cowbellcowbelcowbelancak IDE’yi yanlış kullanıyor olabilirim (
PIP’e

@AlbertRenshaw Anladım cowbell cowbell cowbeecowbell( çevrimiçi deneyin ). TIO mu yoksa yerel bir kopya mı kullanıyorsunuz?
DLosc

Oh iyi! Add argümanı altında değil, "input" alanının altına yapıştırıyordum. +1
Albert Renshaw,

Gerçekten birinci sınıf. Javascript'e aktardım.
edc65,

6

C, 511 488 474 470 463 454

void f(char*a){char*s;int i=-1,c,o,w,b,e=b=w=o=c=1,l=3,n,r,z=i;for(;s=a[++i];c+=s==67,o+=s==79,w+=s==87,b+=s==66,e+=s==69,l+=s==76);r=~-l/2;n=c<o?c:o;n=w<n?w:n;n=b<n?b:n;n=e<n?e:n;n=r<n?r:n;c=c==n;o=o==n;w=w==n;b=b==n;e=e==n;if(l=r==n?l:0)if(l%2)l=2;else l=1,c=o=w=b=e=0;else l+=l%2;n=c+o+w+b+e+l;for(printf("%s",a);s=n?a[++z]:0;s==67&&c?n--,c--:0,s==79&&o?n--,o--:0,s==87&&w?n--,w--:0,s==66&&b?n--,b--:0,s==69&&e?n--,e--:0,s==76&&l?n--,l--:0,putchar(s));}

Çevrimiçi deneyin


Okunabilir format + açıklama:

void f(char*a){
//a = input

    char*s;

    int i=-1,c,o,w,b,e=b=w=o=c=1,l=3,n,r,z=i;//c,o,w,b,e all start at 1; L starts at 3

    for(;s=a[++i];c+=s==67,o+=s==79,w+=s==87,b+=s==66,e+=s==69,l+=s==76);
    //loop to obtain number of times each character C,O,W,B,E,L is found in string (using the ASCII numeric values of each letter)

    //to get an extra cowbell we need to increment C,O,W,B,E by 1 and L by 2 (two Ls in cowbell); except we don't have to because we already did that by starting them at c=1, o=1, w=1, b=1, e=1, L=3 when we declared them. 

    r=~-l/2;
    //r is half of (1 less the number of times L is in string (+ init value))

    n=c<o?c:o;n=w<n?w:n;n=b<n?b:n;n=e<n?e:n;n=r<n?r:n;
    //n is the number of times that the least occouring character appears in the string, (use R instead of L since cowbell has two L's in it and we just need ~-l/2)

    c=c==n;o=o==n;w=w==n;b=b==n;e=e==n;
    //convert c,o,w,b,e to BOOL of whether or not we need 1 more of that letter to create one more cowbell (logic for L handled below since it's trickier)

    if(l=r==n?l:0)//if L-1/2 is [or is tied for] least occurring character do below logic, else set l to 0 and skip to `else`
        if(l%2)//if l is divisible by 2 then we need 2 more Ls
            l=2;
        else //otherwise we just need 1 more l and no other letters
            l=1,c=o=w=b=e=0;
    else //add 1 to L if it's divisible by 2 (meaning just 1 more L is needed in addition to possibly other C,O,W,B,E letters) (*Note: L count started at 3, so a count of 4 would be divisible by 2 and there is only 1 L in the string)
        l+=l%2;

    n=c+o+w+b+e+l;
    //n = number of specific characters we need before we reach 1 more cowbell

    for(printf("%s",a);s=n?a[++z]:0;s==67&&c?n--,c--:0,s==79&&o?n--,o--:0,s==87&&w?n--,w--:0,s==66&&b?n--,b--:0,s==69&&e?n--,e--:0,s==76&&l?n--,l--:0,putchar(s));
    //loop starts by printing the original string, then starts printing it again one character at a time until the required number of C,O,W,B,E,L letters are reached, then break (s=n?a[++z]:0) will return 0 when n is 0. Each letter subtracts from n only when it still requires letters of its type (e.g. b?n--,b--:0)

}

Kullanılan Bazı Eğlenceli Püf Noktaları:

• Karakterleri kontrol ederken 'w', 3 bayt olan karakter için yazarım, ancak karakterler 'c've 'b'her seferinde bir bayt kaydetmek için sırasıyla ASCII değerlerini 99 ve 98 yazabilirim. (Düzenleme: @Titus sayesinde bunu yalnızca 2 bayt sayısal ascii değeri olan büyük harf girişini kullanarak tüm COWBELL harfleri ile biliyorum)

r=~-l/2olduğu r=(l-1)/2bitshifts kullanarak

a[++i](i) dizinindeki karakteri alıyorum ve aynı anda dizini yineliyorum. Sadece başlangıç iat i=-1yerine i=0(ben aynı şeyi zgibi başlatın z=ibaşka byte tasarrufu için)


1
Büyük harf girişi ile 8 bayt tasarruf edin: 100'ün altındaki tüm ASCII kodları.
Titus

@Titus Brilliant! Teşekkür ederim Titus, şimdi düzenleme
Albert Renshaw

1
Şu anda ifadenizle ilgili bir sorumuz var "İkinci tanımlı int (bu durumda c) her zaman 1 [...] olarak ayarlanır." Orada neden böyle düşündüğünüzü açıklamaktan memnuniyet duyarız çünkü bazılarımız için garip görünüyor.
cadaniluk

@Albert, programınızın sadece c,o,w,b,e1 yerine aynı değere başlatılmaya dayanabileceği konusunda olabilir mi? Çünkü 2. ipucunuz doğru görünmüyor, CI için en azından bilmiyor. Açıklayabilir misin? SO soru
Felix Dombek,

1
@FelixDombek de gösterdiğiniz için teşekkürler! Def. tanımsız davranış, sadece birçok IDE'de onu simüle ettim (döngüye soktum) ve her zaman int'yi 0 olarak başlattığım görülüyor. Muhtemelen hepsinden sonra bırakabilirim, ancak mantığım hepsinin 1 olarak ayarlanması için tasarlanmıştı; Test vakalarının 0'da çalıştığı gerçeği, tesadüf olduğunu düşünüyorum. Şerefe
Albert Renshaw

5

Python 2, 125 113 112 bayt

n=lambda s:min(s.count(c)>>(c=='l')for c in "cowbel")
def f(s,i=0):
 while n(s)==n(s+s[:i]):i+=1
 return s+s[:i]

n ineklerin sayısını sayar


@Titus sayesinde @Rod
-1 byte sayesinde -12 bayt


[]tek parametre olduğunda listenin anlaşılmasına gerek yok , ayrıca bırakabilirsiniz enumerate: min(s.count(c)/-~(c=='l')for c in"cowbel")nereye -~(n=='l')yazmanın daha kısa bir yolu1+(n=='l')
Rod

1
Daha >>kısa olmaz /-~mıydı?
Titus,

Yaptıkları anda size @Titus
ovs

Son yeni satır boşluğunu tek bir noktalı virgülle değiştirerek bir baytı kaldıracak bir düzenleme yapıldı.
Buğday Sihirbazı

@ Möbius O returnsırada while-döngüsünde olmaz mıydı?
ovs

5

Perl 6 , 91 bayt

{my &c={.comb.Bag.&{|.<c o w b e>,.<l>div 2}.min}
first *.&c>.&c,($_ X~[\,](.comb)».join)}

Küçük harf girişi yapar.

Nasıl çalışır

Lamda içinde, bir ipteki inek zillerinin sayımına yönelik bir başka lambda şöyle tanımlanır:

my &c={                                        }  # Lambda, assigned to a variable.
       .comb                                      # Split the string into characters.
            .Bag                                  # Create a Bag (maps items to counts).
                .&{                       }       # Transform it into:
                   |.<c o w b e>,                 #   The counts of those letters, and
                                 .<l>div 2        #   half the count of "l" rounded down.
                                           .min   # Take the minimum count.

Kodun geri kalanı &csonucu bulmak için bu iç lambdayı kullanır , şöyle:

                     [\,](.comb)».join   # All prefixes of the input,
               ($_ X~                 )  # each appended to the input.
first         ,                          # Return the first one for which:
      *.&c>                              #   The cowbell count is greater than
           .&c                           #   the cowbell count of the input.

4

MATL , 38 37 bayt

@ DLosc'un şablon dizesini lcowbekullanmak yerine şablon dizesini kullanma fikri sayesinde 1 bayt kapalıcowbel

n`Gt@q:)hXK!'lcowbe'=s32BQ/kX<wy-Q]xK

Giriş karakterlerinin tümü küçük harfdir. Girdi yeni satırlar içeriyorsa, yeni satır karakterinin normal karakterlerle birleştirilmiş ASCII kodu olarak girilmesi gerekir (tüm sınama durumlarında bağlantıdaki son girişe bakın).

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın .


3

JavaScript (ES6), 106 107 113 126 141

Pip cevabının javascript'ine @DLosc tarafından taşınması. Tamamen anlamak için biraz zamana ihtiyacım vardı ve bu dahi.

Düzenleme -15 doğrudan giriş dizeye karakter ekleyerek, @Titus tarafından ipucunu takip bayt ave erken dönüşü kaçınarak (hiçbir for/if)

Min işlevi için 6 değerini sıralayan düzenleme 2 diğer 13 bayttan tasarruf sağlar

3 değiştirildi c fonksiyonu tekrar düzenleyin. Ayrıntılı lengthve splitçok uzun olacağını düşündüm . Ben hatalıydım.

Küçük harfli giriş varsayımı

a=>[...a].some(z=>c(a+=z)>b,c=a=>Math.min(...[...'lcowbe'].map((c,i)=>~-a.split(c).length>>!i)),b=c(a))&&a

Daha az golf oynadı

a=>{
  c=a=>{ // cowbell functions - count cowbells
    k = [... 'lcowbe'].map((c,i) => 
          (a.split(c).length - 1) // count occurrences of c in a
           / (!i + 1) // divide by 2 if first in list ('l')
    );
    return Math.min(...k);
  };
  b = c(a); // starting number of cowbells
  [...a].some(z => ( // iterate for all chars of a until true
    a += z,
    c(a) > b // exit when I have more cowbells
  ));
  return a;
}

Ölçek

f=
a=>[...a].some(z=>c(a+=z)>b,c=a=>Math.min(...[...'lcowbe'].map((c,i)=>~-a.split(c).length>>!i)),b=c(a))&&a

;["christopher walken begs for more cowbell!"
,"the quick brown fox jumps over the lazy dog"
,"cowbell"
,"cowbell cowbell cowbell"
,"cowbell cowbell cowbel"
,"bcelow"
,"abcdefghijklmnopqrstuvwxyz"
,"cccowwwwbbeeeeelllll"
,"be well, programming puzzles & code golf"
,"lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
,`c-c-b-c
 
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
 
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
`].forEach(x=>console.log(x+'\n\n'+f(x)))


Sanırım bu k[x]++yüzünden başarısız olur undefined. Ama for(i=0;c(a)==c(a+=a[i++]);),aişe yarayacağından eminim .
Titus,

@Titus anladığımdan emin değilim. Bir deneyeyim
edc65

@Titus wow 15 byte kaydedildi, çok teşekkürler
edc65

>>!i3 bayt kaydeder. Neden kullanmak Sakın c(a+=z)?
Titus,

@Titus kullanıyorum c(a+=z). Daha az golf versiyonunda değil, gördüğünüz gibi, daha az golf oynamıştır. Kullanma >>!i1 bayt (golf sürümünde) kaydeder. Tekrar teşekkürler
edc65

2

Bash + Unix yardımcı programları, 184 bayt

f()(tr -cd cowbel<<<"$1"|sed 's/\(.\)/\1\
/g'|sort|uniq -c|awk '{print int($1/(($2=="l")?2:1))}'|sort -n|head -1)
for((m=1;`f "$1${1:0:m}"`!=$[`f "$1"`+1];m++)){ :;}
echo "$1${1:0:$m}"

Çevrimiçi deneyin!

2 baytlık golf oynamak için @AlbertRenshaw'a teşekkürler.


Bu, örneğin sadece, önce ve sonraki boşlukları kaldırmak için golf oynayabilir!=
Albert Renshaw,

1
@AlbertRenshaw Teşekkürler - Bunu denediğimi ve bir sözdizimi hatası aldığımı sanıyordum, ama haklısın. Garip kısım da daha fazla golf oynayabilir; Awk ile pek aşina değilim.
Mitchell Spector

Evet, sizin kodunuzdaki diğer boşlukları ve satır izlerini kaldırmayı denedim ve sözdizimi hataları alıyordum, ancak bunun üzerinde ¯_ (ツ) _ / ¯
Albert Renshaw

2

JavaScript (ES6), 124 114 bayt

Birkaç baytı kurtardığı için Neil'e teşekkürler.

a=>eval("for(c=0,d=a;(A=$=>Math.min([...'cowbel'].map(_=>($.split(_).length-1)>>(_=='l'))))(a)==A(d+=a[c++]););d")

Bu zaten mevcut olan JavaScript yanıtından oldukça farklı olduğundan ve buna oldukça zaman ayırdığım için kendim bir cevap oluşturmaya karar verdim.

kullanım

f=a=>eval("for(c=0,d=a;(A=$=>Math.min([...'cowbel'].map(_=>($.split(_).length-1)>>(_=='l'))))(a)==A(d+=a[c++]););d")
f("cowbell")

Çıktı

"cowbellcowbell"

.sort()[0]muhteşem bir fikir. evalkötüdür. : D
Titus

Thanks ;-) İlk önce kullandım Math.min(), ama bu çok fazla karaktere mal oldu ve daha kısa bir yol olacağını düşündüm. Ve evet, evalgolf oynamak için gerçekten güzel.
Luke

Sadece .sort()[0]çalışmış olsaydı, sadece 10 bayta malolacaktı, ama .sort((a,b)=>a-b)[0]20 bayta mal olacak, ancak Math.min(...)13'e mal olacak.
Neil

2

Octave, 80 87 97 bayt

s=input('');k=1;do;until(x=@(A)min(fix(sum('cowbel'==A')./('111112'-48))))(b=[s s(1:++k)])>x(s);b

Çevrimiçi Deneyin!


1
lEk çıngırağı tamamlamak için iki saniyeye ihtiyacımız olduğunda bu işe yaramaz . Örneğin, girdi üzerinde cowbell, hatalı geri cowbellcowbelyerine cowbellcowbell. (Umarım düzeltebilirsin
Greg Martin

@GregMartin Teşekkürler! Chek yapacağım!
rahnema1

2

CJam, 37

q___S\+{+"cowbel"1$fe=)2/+:e<\}%()#)<

Çevrimiçi deneyin

"Ve \karakterleri hariç tutabilirsem , o zaman ...

35 bayt

q___`{+"cowbel"1$fe=)2/+:e<\}%()#)<

Çevrimiçi deneyin

açıklama

Kod art arda dizginin her karakterini ilk dizgeye ekler (orijinalden iki katına çıkar), her dize için cowbells sayısını belirler ("cowbel" deki her karakterin oluşum sayısını sayarak ve 'l' için birini böler) 2'ye göre, daha sonra minimum değeri alır), ilk dizenin, inek boynuzu sayısının 1 ile arttığı konumunu bulur, daha sonra girişin karşılık gelen önekini alır ve giriş dizesinden sonra koyar.

Orijinal dizeyi de dahil etmek için (karakter eklenmemiş), kod yinelenen dizeye nötr bir karakter hazırlar. İlk sürüm bir boşluk hazırlar ve 2. sürüm, dize gösterimini kullanır, yani çift tırnaklar arasındaki dize.

q___          read input and make 3 more copies: one for output, one for prefix,
               one for appending and one for iterating
S\+           prepend a space to the iterating string
              or
`             get the string representation
{…}%          map each character of the string
  +           append the character to the previous string
  "cowbel"    push this string
  1$          copy the appended string
  fe=         get the number of occurrences of each "cowbel" character
  )2/+        take out the last number, divide by 2 and put it back
  :e<         find the minimum
  \           swap with the appended string
(             take out the first number (cowbells in the initial string)
)#            increment and find the index of this value in the array
)             increment the index (compensating for taking out one element before)
<             get the corresponding prefix
              another copy of the input is still on the stack
              and they are both printed at the end

"Ve \ karakterleri hariç tuttuğunuzda size iyiyim
Greg Martin

1

PHP, 133 bayt

@ edc65'in JavaScript bağlantı noktası, DLosc'un Pip yanıtının JavaScript bağlantı noktası.

function f($s){for(;$c=lcowbe[$i];)$a[$c]=substr_count($s,$c)>>!$i++;return min($a);}for($s=$argv[1];f($s)==f($s.=$s[$i++]););echo$s;

komut satırı argümanından küçük harfli giriş alır. İle koş -nr.

Yıkmak

// function to count the cowbells:
function f($s)
{
    for(;$c=lcowbe[$i];)            # loop through "cowbel" characters
        $a[$c]=substr_count($s,$c)  # count occurences in $s
            >>!$i++;                # divide by 2 if character is "l" (first position)
        return min($a);             # return minimum value
}
for($s=$argv[1];    # copy input to $s, loop:
    f($s)               # 1. count cowbells in $s
    ==                  # 3. keep looping while cowbell counts are equal
    f($s.=$s[$i++])     # 2. append $i-th character of $s to $s, count cowbells
;);
echo$s;             # print $s
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.