আরও কাউবেল…!


42

ব্রুস ডিকেনসন একটি ব্লু-আইস্টার কাল্ট রেকর্ডিং সেশন তৈরি করার কারণে আপনি প্রযুক্তি সহায়তা সরবরাহ করছেন । যখন তিনি আরও কাউবেল চাইবেন , আপনি এটি তাকে দিতে পারেন।

তোমার কাজ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা স্ট্রিংটি (বা আপনার ভাষায় সমতুল্য) ইনপুট হিসাবে নেয় এবং আরও একটি কাউবেলযুক্ত সম্পর্কিত স্ট্রিং আউটপুট দেয়।

একটি স্ট্রিং কয়টি কাউবেল থাকে?

স্ট্রিংয়ের মধ্যে থাকা কাউউবেলগুলির সংখ্যা "কাউবেল" এর স্বতন্ত্র অনুলিপিগুলির সর্বাধিক সংখ্যার সমান যা স্ট্রিংয়ের অক্ষরগুলিকে অনুমতি দিয়ে পাওয়া যায়। উদাহরণস্বরূপ, "bbbccceeellllllooowwwwwwwww"3 টি কাউবেল রয়েছে "bbccceeellllllooowwwwwwwww"এবং "bbbccceeelllllooowwwwwwwww"প্রত্যেকটিতে 2 টি কাউবেল "cowbel"রয়েছে এবং এতে 0 টি কাউউবেল রয়েছে।

আউটপুট কীভাবে ইনপুট সম্পর্কিত হতে হবে?

আউটপুটটি এই ক্রম অনুসারে, ইনপুট স্ট্রিং এবং কাউবেলের সংখ্যা বাড়ানোর জন্য প্রয়োজনীয় ইনপুট স্ট্রিংয়ের সংক্ষিপ্ত উপসর্গ নিয়ে গঠিত উচিত।

উদাহরণস্বরূপ, "bbbccceeelllllooowwwwwwwww"কেবলমাত্র "l"2 টির পরিবর্তে 3 টি কাউবেল থাকতে কেবল অতিরিক্ত অতিরিক্ত প্রয়োজন ; সবচেয়ে কম উপসর্গ যে রয়েছে "l"হয় "bbbccceeel"। সুতরাং, যদি ইনপুট হয় "bbbccceeelllllooowwwwwwwww"তবে আউটপুটটি হওয়া উচিত "bbbccceeelllllooowwwwwwwwwbbbccceeel"

পরিভাষা

  • আপনি ধরে নিতে পারেন যে ইনপুটটিতে কেবল প্রিন্টযোগ্য ASCII অক্ষর রয়েছে। যদি আপনার ভাষার স্ট্রিং প্রসেসিং (যেমন নিউলাইনস বা \) এর জন্য দু'একটি অক্ষর বিরক্তিকর হয় তবে আপনি ধরে নিতে পারেন ইনপুটটিতে সেগুলি নেই — কেবলমাত্র এই সীমাবদ্ধতার কথা উল্লেখ করুন।
  • আপনি আরও ধরে নিতে পারেন যে ইনপুটটির বর্ণমালা বর্ণগুলি সমস্ত ছোট হাতের বা সমস্ত বড় হাতের are আপনি যদি এগুলির একটি অনুমান না করা বেছে নেন তবে কাউবেল কেস-সংবেদনশীলতার সাথে গণনা করুন।
  • আপনি আরও অনুমান হতে পারে যে ইনপুট অক্ষর প্রতিটি অন্তত একটি কপি রয়েছে b, c, e, l, o, এবং w। এটি ধরে নেওয়ার সমতুল্য যে স্ট্রিংয়ের কিছু উপসর্গ এর সাথে আরও স্ট্রের উত্পাদন করতে স্ট্রিংটির উপসর্গ যুক্ত করা যেতে পারে যার মধ্যে আরও কাউল রয়েছে। (নোট করুন যে ইনপুট স্ট্রিংয়ে নিজেই কোনও কাউলযুক্ত থাকা দরকার না))
  • যদি আপনার ভাষার কোনও বিল্টিন থাকে যা এই সমস্যাটি সমাধান করে ... তবে সম্পূর্ণরূপে এটি ব্যবহার করুন, গুরুত্ব সহকারে, এটি কতটা ভয়ঙ্কর।

সোনার ধাতুপট্টাবৃত ডায়াপার

যেহেতু রেকর্ডিং স্টুডিওর সময় ব্যয়বহুল, আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হতে হবে। সবচেয়ে কম বাইটের সাথে এন্ট্রিটিই বিজয়ী!

পরীক্ষার মামলা

( সহজ অনুলিপি / পেস্ট করার জন্য পেস্টবিন লিঙ্ক )

পরীক্ষার ইনপুট # 1: "christopher walken begs for more cowbell!"

পরীক্ষার আউটপুট # 1: "christopher walken begs for more cowbell!christopher wal"

পরীক্ষার ইনপুট # 2: "the quick brown fox jumps over the lazy dog"

পরীক্ষার আউটপুট # 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"

পরীক্ষার ইনপুট # 3: "cowbell"

পরীক্ষার আউটপুট # 3: "cowbellcowbell"

পরীক্ষার ইনপুট # 4: "cowbell cowbell cowbell"

পরীক্ষার ফলাফল # 4: "cowbell cowbell cowbellcowbell"

পরীক্ষার ইনপুট # 5: "cowbell cowbell cowbel"

পরীক্ষার ফলাফল # 5: "cowbell cowbell cowbelcowbel"

পরীক্ষার ইনপুট # 6: "bcelow"

পরীক্ষার ফলাফল # 6: "bcelowbcel"

পরীক্ষার ইনপুট # 7: "abcdefghijklmnopqrstuvwxyz"

পরীক্ষার ফলাফল # 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"

পরীক্ষার ইনপুট # 8: "cccowwwwbbeeeeelllll"

পরীক্ষার ফলাফল # 8: "cccowwwwbbeeeeelllllccco"

পরীক্ষার ইনপুট # 9: "be well, programming puzzles & code golf"

পরীক্ষার ফলাফল # 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"

পরীক্ষার ইনপুট # 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"

পরীক্ষার ফলাফল # 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"

পরীক্ষার ইনপুট # 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!
"

পরীক্ষার ফলাফল # 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
যে কেউ সিওডাব্লুতে উত্তর দেয় সে দশটি ইন্টারনেট পয়েন্ট অর্জন করে।
পাভেল

3
আমি মনে করি আপনি যদি কোনও একক কোড ব্লকে ফর্ম্যাট করে থাকেন তবে লোকেরা ইনপুট / আউটপুট কেসগুলি পরিচালনা করতে অনেক সহজ হবে। যেহেতু এটি দাঁড়ায় এটি অনেক বেশি জায়গা নেয় এবং এটি খুব বেশি কপি পেস্টের মতো নয়।
FryAmTheEggman 30'17

অনুলিপি / আটকানোর জন্য পেস্টবিন লিঙ্ক যুক্ত করা হয়েছে। যদি এই পোস্টে পরীক্ষার কেসগুলি লুকিয়ে / ধসে / দেখানোর উপায় থাকে তবে এভাবে উল্লম্ব স্থানটি সংরক্ষণ করা যায়, আমি এটি শিখতে পছন্দ করব।
গ্রেগ মার্টিন

2
test case -> resultবেশিরভাগ ক্ষেত্রেই লোকেরা একটি বৃহত পূর্বরূপিত কোড ব্লক ব্যবহার করে। এটি নান্দনিকভাবে এবং পেস্ট অনুলিপি করা খুব সুন্দর।
ফ্লিপট্যাক

1
@ ম্যাথেরহোহ এই কথাটি বাদ দিয়ে যে Lশব্দটিতে দুটি শব্দ রয়েছে, এটি চ্যালেঞ্জটি জিজ্ঞাসা করে না।
মার্টিন এেন্ডার

উত্তর:


13

পিপ , 50 42 38 বাইট

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

কমান্ড-লাইন আর্গুমেন্ট হিসাবে স্ট্রিংটি পাস করুন, প্রয়োজনে উদ্ধৃত করুন। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমি এটি দুটি ভাগে ব্যাখ্যা করতে যাচ্ছি: কাউবেল ফাংশন এবং সম্পূর্ণ প্রোগ্রাম। প্রথমে, এখানে ফাংশনটি যা স্ট্রিংয়ে কাউবেলের পরিমাণকে গণনা করে:

MN{_NaM"lcowbe"}//^2

{...}একটি ফাংশন সংজ্ঞায়িত করে অনেক পিপ অপারেটর, যখন কোনও ফাংশনে প্রয়োগ হয়, অন্য ফাংশনটি ফিরিয়ে দেয়; উদাহরণস্বরূপ, -{a+1}হিসাবে একই {-(a+1)}। সুতরাং উপরের সমতুল্য

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

যা নিম্নলিখিত হিসাবে কাজ করে:

{                    }  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

এখন আমাদের যে এটি আছে, এখানে সম্পূর্ণ প্রোগ্রামটি রয়েছে:

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)

আমি প্রবেশ করলাম cowbell cowbell cowbeeএবং আউটপুটটি ছিল cowbellcowbelcowbelকিন্তু আমি আইডিই ভুল (পিআইপি-তে নতুন) ব্যবহার করছি
অ্যালবার্ট রেনশো

@ অ্যালবার্ট রেনশা আমি পেয়েছি cowbell cowbell cowbeecowbell( এটি অনলাইনে চেষ্টা করুন )। আপনি কি টিআইও বা একটি স্থানীয় অনুলিপি ব্যবহার করছেন?
DLosc

ওহ্ দারুণ! আমি এটি আর্গুমেন্ট অ্যাডের আওতায় নয় "ইনপুট" ফিল্ডের আওতায় রেখেছি। +1
অ্যালবার্ট রেনশওয়া

সত্যিই শীর্ষ শ্রেণি। আমি এটি জাভাস্ক্রিপ্টে পোর্ট করেছি।
edc65

6

সি, 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));}

এটি অনলাইনে চেষ্টা করুন


পঠনযোগ্য ফর্ম্যাট + ব্যাখ্যা:

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)

}

কিছু মজাদার কৌশল ব্যবহৃত:

Characters চরিত্রগুলি যাচাই করার সময় আমি লেখার 'w'জন্য টাইপ করব চার ডাব্লু যা 3 বাইট, তবে অক্ষরগুলির জন্য 'c'এবং 'b'আমি প্রতিবার একটি বাইট সংরক্ষণ করতে যথাক্রমে তাদের ASCII মান 99 এবং 98 টাইপ করতে পারি। (সম্পাদনা করুন: @ টিটাসকে ধন্যবাদ আমি জানি যে এটি কেবল দুটি বড় বাইটের সংখ্যাসূচক এসেসি মানগুলির মধ্যে বড় হাতের ইনপুট ব্যবহার করে সমস্ত COWBELL বর্ণের সাথে করা)

r=~-l/2হয় r=(l-1)/2bitshifts ব্যবহার

Index a[++i]আমি সূচীতে অক্ষরটি পাচ্ছি (i) এবং একই সময়ে সূচকে পুনরাবৃত্তি করছি। আমি শুধু শুরু ii=-1পরিবর্তে i=0(আমি একইভাবে কাজ zএবং এটি শুরু z=iঅন্য বাইট সংরক্ষণ করার জন্য)


1
বড় হাতের ইনপুট সহ 8 বাইট সংরক্ষণ করুন: 100 এর নীচে সমস্ত ASCII কোড
টিটাস

@ টিটাস ব্রিলিয়ান্ট! আপনাকে ধন্যবাদ টিটাস, এখন সম্পাদনা করছেন
অ্যালবার্ট রেনশো

1
আপনার বিবৃতি সম্পর্কিত বর্তমানে আমাদের একটি প্রশ্ন রয়েছে "দ্বিতীয় সংজ্ঞায়িত আন্ত (এই ক্ষেত্রে c) সর্বদা 1 হিসাবে সেট করা হয় [...]"। আপনি কেন এমন ভাবছেন সে বিষয়ে আপনার বক্তব্যটি পেয়ে আমরা আনন্দিত হব কারণ এটি আমাদের কারও কাছেই অদ্ভুত বলে মনে হচ্ছে।
ক্যাডানিলুক

@ অ্যালবার্ট কি এমন হতে পারে যে আপনার প্রোগ্রামটি c,o,w,b,e1 এর পরিবর্তে কেবল একই মানকে আরম্ভ করার জন্য নির্ভর করবে? কারণ আপনার ইঙ্গিত # 2 সত্য বলে মনে হচ্ছে, সিআই এর পক্ষে কমপক্ষে জানা নেই। আপনি কি স্পষ্ট করতে পারেন? এসও প্রশ্ন
ফেলিক্স ডমব্যাক

1
@ ফেলিক্সডমবাকও এটি দেখানোর জন্য ধন্যবাদ! এটি ডিএফ। অপরিবর্তিত আচরণ, আমি কেবল এটি অনেকগুলি আইডিইতে (লুপযুক্ত) সিমুলেটেড করেছি এবং মনে হয় এটি সর্বদা 0 হিসাবে প্রারম্ভিক হয় I আমি সম্ভবত এটি পরে ছেড়ে যেতে পারতাম, যদিও আমার যুক্তিটি সেগুলি 1 এ সেট করার জন্য ডিজাইন করা হয়েছিল; 0 টিতে পরীক্ষার কেসগুলি এটির সাথে কাজ করছে তা আমি মনে করি কাকতালীয়। চিয়ার্স
অ্যালবার্ট রেনশওয়া

5

পাইথন 2, 125 113 112 বাইট

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 কাউবেল সংখ্যা গণনা করে


-১২ বাইটস @ রডকে
ধন্যবাদ -১ টাইটাসকে বাইট ধন্যবাদ


আপনি []তালিকা বোধের প্রয়োজন হবে না যখন এটি একমাত্র পরামিতি, enumeratemin(s.count(c)/-~(c=='l')for c in"cowbel")-~(n=='l')1+(n=='l')
রড

1
এর >>চেয়ে খাটো হবে না /-~?
তিতাস

@ টিটাস আপনি ঠিক বলেছেন
ওভস

একটি চেষ্টা করার সম্পাদনা ছিল যা একটি একক সেমিকোলন দিয়ে সর্বশেষ নিউলাইন স্পেসটি প্রতিস্থাপন করে একটি বাইট সরিয়ে ফেলত।
গম উইজার্ড

@ এমবিয়াস কি returnতখন লুপে থাকবেন না?
ovs

5

পার্ল 6 , 91 বাইট

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

লোয়ার-কেস ইনপুট ধরে নেয়।

কিভাবে এটা কাজ করে

ল্যাম্বদার ভিতরে, একটি স্ট্রিংয়ের কাউবেলের সংখ্যা গণনা করার জন্য আরেকটি ল্যাম্বডাকে সংজ্ঞায়িত করা হয়:

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.

বাকি কোডগুলি এই ফলাফলটির &cজন্য এই অভ্যন্তরীণ ল্যাম্বডাকে ব্যবহার করে:

                     [\,](.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

এমএটিএল , 38 37 বাইট

1 টি বাইট অফ করুন lcowbeপরিবর্তে টেমপ্লেট স্ট্রিংটি ব্যবহার করার জন্য @ ডিএলসকের ধারণার জন্য ধন্যবাদcowbel

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

ইনপুট অক্ষরগুলি সমস্ত ছোট ছোট। যদি ইনপুটটিতে নিউলাইনগুলি থাকে, তবে নতুন লাইন চরিত্রটি তার ASCII কোড হিসাবে স্বাভাবিক অক্ষরের সাথে একত্রে প্রবেশ করানো দরকার (সমস্ত পরীক্ষার কেসের সাথে লিঙ্কে শেষ ইনপুট দেখুন)।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন


3

জাভাস্ক্রিপ্ট (ES6), 106 107 113 126 141

@DLosc দ্বারা পিপ উত্তরের জাভাস্ক্রিপ্টে একটি পোর্টিং। এটি পুরোপুরি বুঝতে আমার কিছুটা সময় প্রয়োজন, এবং এটি প্রতিভা।

@ টিটাস দ্বারা ইঙ্গিত অনুসরণ করে -15 বাইট সম্পাদনা করুন , সরাসরি ইনপুট স্ট্রিং-এ অক্ষর যুক্ত করা aএবং তাড়াতাড়ি রিটার্ন এড়ানো (তাই না for/if)

ন্যূনতম ফাংশনের 6 মান গণনা সম্পাদনা 2 অন্যান্য 13 বাইট সংরক্ষণ করে

3 আবার সি ফাংশন পরিবর্তন করুন । আমি ভেরুবোজ ভেবেছিলাম lengthএবং splitখুব দীর্ঘ হবে। আমি ভৃল ছিলাম.

ছোট হাতের ইনপুট ধরে নিচ্ছি

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

কম গল্ফড

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

পরীক্ষা

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


আমি অনুমান করি যে k[x]++কারণে ব্যর্থ হবে undefined। তবে আমি বেশ নিশ্চিত যে for(i=0;c(a)==c(a+=a[i++]);),aকাজ করে।
তিতাস

টাইটাস আমি বুঝতে নিশ্চিত নই আমি এটি দিয়ে চেষ্টা করব
edc65

@ টিটাস ওয়াহ 15 বাইট সংরক্ষিত হয়েছে, ধন্যবাদ অনেক
edc65

>>!i3 বাইট সঞ্চয় আপনি কেন ব্যবহার c(a+=z)করবেন না ?
তিতাস

@Titus আমি ব্যবহার c(a+=z)। নেই কম golfed সংস্করণ, যেমন হয়, তাহলে আপনি দেখুন, কম golfed। ব্যবহার >>!iসংরক্ষণ করে 1 বাইট (golfed সংস্করণে)। আবার ধন্যবাদ
edc65

2

বাশ + ইউনিক্স ইউটিলিটিস, 184 বাইট

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

এটি অনলাইন চেষ্টা করুন!

2 বাইট বন্ধ রেখে গল্ফ করার জন্য @ অ্যালবার্ট রেনশাকে ধন্যবাদ।


এটি আরও গল্ফ করা যেতে পারে উদাহরণস্বরূপ কেবল তার আগে এবং পরে শূন্যস্থানগুলি সরিয়ে ফেলুন!=
অ্যালবার্ট রেনশওয়া

1
@ অ্যালবার্ট রেইনশা আপনাকে ধন্যবাদ - আমি ভেবেছিলাম আমি এটি চেষ্টা করেছি এবং একটি বাক্য গঠন ত্রুটি অর্জন করেছি, তবে আপনি ঠিক বলেছেন। অজানা অংশটি আরও গল্ফযোগ্য হতে পারে; আমি অ্যাজকের সাথে খুব বেশি পরিচিত নই।
মিচেল স্পেক্টর

হ্যাঁ আমি নির্লজ্জভাবে আপনার কোডে অন্যান্য স্পেস এবং লাইনব্রেকগুলি মুছে ফেলার চেষ্টা করেছি এবং সিনট্যাক্স ত্রুটিগুলি পেয়েছিলাম তবে সেটিতে এটি কাজ করেছে ¯_ (ツ) _ / ¯
অ্যালবার্ট

2

জাভাস্ক্রিপ্ট (ES6), 124 114 বাইট

কয়েকটা বাইট সংরক্ষণের জন্য নীলকে ধন্যবাদ জানাই

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

যেহেতু এটি ইতিমধ্যে বিদ্যমান জাভাস্ক্রিপ্ট উত্তরের থেকে একেবারেই আলাদা এবং আমি এটিতে বেশ কিছুটা সময় রেখেছি, আমি নিজেই একটি উত্তর তৈরি করার সিদ্ধান্ত নিয়েছি।

ব্যবহার

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

আউটপুট

"cowbellcowbell"

.sort()[0]একটি দুর্দান্ত ধারণা। evalমন্দ। : ডি
তিতাস

ধন্যবাদ ;-) আমি প্রথমে ব্যবহার করেছি Math.min(), তবে এর জন্য অনেকগুলি অক্ষর ব্যয় হয়েছে এবং আমি অনুভব করেছি যে এখানে একটি ছোট উপায় হবে। এবং হ্যাঁ, evalগল্ফ করার জন্য সত্যিই দুর্দান্ত।
লুক

যদি কেবলমাত্র .sort()[0]কাজ করা হয় তবে এটির জন্য কেবল 10 বাইট লাগবে, তবে এটির .sort((a,b)=>a-b)[0]ব্যয় হয় না এবং 20 বাইট Math.min(...)ব্যয় হয় তবে 13 খরচ হয়
নীল

2

অক্টাভা, 80 87 97 বাইট

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

এটি অনলাইন চেষ্টা করুন!


1
lঅতিরিক্ত কাউবেল সম্পূর্ণ করার জন্য যখন আমাদের দু'জনের প্রয়োজন হয় এটি কাজ করে না । উদাহরণস্বরূপ, ইনপুট এ cowbell, এটি ভুল cowbellcowbelপরিবর্তে ফিরে আসে cowbellcowbell। (আমি আশা করি আপনি এটি ঠিক করতে পারবেন — আমি এটপিক্যাল অ্যালগরিদম পছন্দ করি!)
গ্রেগ মার্টিন

@ গ্রেগমার্টিন ধন্যবাদ! আমি এটা চেক করব!
rahnema1

2

সিজেম, 37

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

এটি অনলাইনে চেষ্টা করুন

আমি যদি "এবং \অক্ষরগুলি বাদ দিতে পারি তবে…

35 বাইট

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

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা

কোডটি ধারাবাহিকভাবে স্ট্রিংয়ের প্রতিটি অক্ষরকে প্রাথমিক স্ট্রিংয়ের সাথে সংযুক্ত করে (মূল থেকে দ্বিগুণ হয়ে যাওয়া) প্রতিটি স্ট্রিংয়ের জন্য কাউবেলের সংখ্যা নির্ধারণ করে ("কাউবেল" এর প্রতিটি অক্ষরের সংখ্যার সংখ্যা গণনা করে এবং 'এল' এর জন্য একটিকে বিভাজন করে) 2 দ্বারা, তারপরে সর্বনিম্ন গ্রহণ করে), প্রথম স্ট্রিংয়ের অবস্থানটি খুঁজে পায় যেখানে কাউবেলের সংখ্যা 1 দ্বারা বৃদ্ধি পায়, তারপরে ইনপুটটির সংশ্লিষ্ট উপসর্গ গ্রহণ করে এবং ইনপুট স্ট্রিংয়ের পরে রাখে।

মূল স্ট্রিংটিও অন্তর্ভুক্ত করার জন্য (কোনও অক্ষর যুক্ত করা হয়নি), কোডটি পুনরাবৃত্ত হওয়া স্ট্রিংয়ের জন্য একটি নিরপেক্ষ অক্ষরকে সংযোজন করে। প্রথম সংস্করণটি একটি স্থানকে পূর্বে যুক্ত করে এবং দ্বিতীয় সংস্করণটি স্ট্রিং উপস্থাপনা ব্যবহার করে, অর্থাৎ ডাবল উদ্ধৃতিগুলির মধ্যে স্ট্রিং।

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

"এবং \ চরিত্রগুলি বাদ দিয়ে আমি আপনার সাথে ভাল আছি!
গ্রেগ মার্টিন

1

পিএইচপি, 133 বাইট

@ এডসি 65 এর একটি পিএইচপি পোর্ট DLosc´s পাইপের উত্তরের জাভাস্ক্রিপ্ট পোর্ট।

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;

কমান্ড লাইন আর্গুমেন্ট থেকে নিম্ন কেস ইনপুট নেয়। সাথে চালাও -nr

ভাঙ্গন

// 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.