স্ট্রিংয়ের একটি অক্ষরের দীর্ঘতম রান


19

আপনার চ্যালেঞ্জ: একটি ফাংশন লিখুন যা একটি স্ট্রিং s, একটি অক্ষর নেয় cএবং দীর্ঘতম cইন এর দৈর্ঘ্য খুঁজে পায় s। রানের দৈর্ঘ্য হবে l

বিধি :

পরীক্ষার কেস :

s,c --> l
"Hello, World!",'l'  -->  2
"Foobar",'o'         -->  2
"abcdef",'e'         -->  1
"three   spaces",' ' -->  3
"xxx xxxx xx",'x'    -->  4
"xxxx xx xxx",'x'    -->  4
"",'a'               -->  0
"anything",''        -->  0

বিজয়ী :

সঙ্গে প্রতিটি ভাষার সংক্ষিপ্ত উত্তর ধিক্কার জানাই।



আপনি কি খালি এর প্রান্তের কেসগুলিতে অন্তর্ভুক্ত করতে পারেন sএবং cযা sপরীক্ষার ক্ষেত্রে খালি নেই ?
মার্টিন ইন্ডার

s/ এর মধ্যে কতগুলি অক্ষর উপস্থিত হতে পারে c?
মার্টিন ইন্ডার

6
cখালি থাকতে পারে? অনেক ভাষায়, একটি চরিত্রটি বিশেষ শব্দার্থবিজ্ঞানের সাথে কেবল একটি পূর্ণসংখ্যা এবং আপনার সত্যিই খালি পূর্ণসংখ্যা থাকতে পারে না।
মার্টিন ইন্ডার

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

উত্তর:


12

05 এ বি 1 ই , 5 বাইট

কোড:

SQγOM

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

SQ      # Check for each character if it is equal to the second input
  γ     # Split the list of zeros and ones into groups
   O    # Sum each array in the arrays
    M   # Get the maximum

2
চমৎকার সমাধান! আমি জানতাম এটির মতো করার একটি উপায় আছে, আমি কেবল এটি ভাবতে পারি না।
রিলে

γ¢Mআমি ভেবেছিলাম এমনভাবে পারফর্ম করছে না, ভেবেছিলাম 3 বাইট হবে।
ম্যাজিক অক্টোপাস উরন

8

গণিত, 35 বাইট

Max[Tr/@Split@Boole@Thread[#==#2]]&

খাঁটি ফাংশন অক্ষরগুলির একটি তালিকা এবং অন্য একটি চরিত্রকে ইনপুট হিসাবে গ্রহণ করে এবং একটি অব্যক্তিক পূর্ণসংখ্যা ফেরত দেয়। আদনানের পর্যবেক্ষণ (আপভোট করুন!) ব্যবহার করে আমার প্রথম প্রচেষ্টায় উন্নত হয়েছে যে অ্যারের বিভাজনের আগে বিশেষ চরিত্রের সমান হওয়ার জন্য পরীক্ষা করা উচিত।

Thread[#==#2]প্রথম আর্গুমেন্টের প্রতিটি ইনপুট অক্ষর দ্বিতীয় আর্গুমেন্ট হিসাবে দেওয়া অক্ষরের সমান কিনা তা পরীক্ষা করে। Booleফলাফলগুলি Trues এবং Falsesকে 1s এবং 0s এ রূপান্তর করে । Splitধারাবাহিক উপাদানগুলির রানগুলিতে তালিকাটি বিভক্ত করে; Tr/@প্রতিটি সাবলিস্টের যোগফল দেয় এবং Maxবিজয়ীর সন্ধান করে। (কীভাবে Maxকাজ করে তার কারণে , যদি প্রথম যুক্তিটি খালি তালিকা হয় তবে এই ফাংশনটি ফিরে আসে -∞So সুতরাং, আপনি জানেন, এটি করবেন না))

প্রথম জমা (51 বাইট)

Max[Split@#/.a:{c_String..}:>Boole[c==#2]Length@a]&

Split@#{{"t"}, {"h"}, {"r"}, {"e", "e"}, {" ", " ", " "}, {"s"}, {"p"}, {"a"}, {"c"}, {"e"}, {"s"}}চতুর্থ পরীক্ষার ক্ষেত্রে যেমন ক্রমাগত অক্ষরগুলির রানগুলিতে ইনপুট বিভক্ত হয় । /.a:{c_String..}:>প্রতিটি subexpression প্রতিস্থাপন aকরে একটি পুনরাবৃত্তি চরিত্র একটি তালিকা রয়েছে cদ্বারা Length@aদ্বারা গুন Boole[c==#2], যা 1যদি cইনপুট অক্ষর সমান এবং 0অন্যথায়। তারপরে Maxউত্তরটি বের করে।


7

জাপট , 20 18 15 বাইট

fV+Vî+)ª0)n o l

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

ওবারাকন এবং ইটিএইচ প্রডাকশনগুলির জন্য 5 বাইট সংরক্ষণ করা


1
আমি কিছু সময়ের জন্য আমার নিজের সমাধানের সাথে প্রায় খেলেছি এবং প্রায় আপনার, তবে সংক্ষিপ্ততর দিয়ে শেষ করেছি। আপনি যদি ব্যবহার করেন fV+Vî+)... আমি আপনাকে
বাকীটি

@ উচ্চতর প্রোডাকশনস "If s is of length 0 or c is empty, l should be 0", আমি সম্ভবত এটি আক্ষরিকভাবে নিচ্ছি
টম

ওহ, আমি বুঝতে পারি নি যে যখনই sকোনও উদাহরণ থাকে না তখন ব্যর্থ হয় c
ইটিএইচ প্রডাকশনগুলি

7

পাইথন , 38 বাইট

f=lambda s,c:+(c in s)and-~f(s,c+c[0])

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

ডেনিস 3 টি বাইট সংরক্ষণ করে cডুপ্লিকেট অক্ষরগুলির একটি স্ট্রিংয়ে আপডেট করার পরিবর্তে পুনরাবৃত্তভাবে একটি সংখ্যা cদ্বারা গুণিত করার জন্য আপডেট করে।


1
f=lambda s,c:c in s and-~f(s,c+c[0])6 বাইট সংরক্ষণ করে (3 যদি মিথ্যা অনুমতি না দেওয়া হয়)।
ডেনিস

5

05 এ বি 1 , 11 6 বাইট

কারুসোমপুটিংয়ের জন্য -5 বাইট ধন্যবাদ thanks

γvy²¢M

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

γ      # split into chunks of consecutive equal elements
 vy    # For each chunk...
   ²¢  #  Count the number of input characters in this chunk
     M #  Push the largest count so far

γvy²¢M6-বাইট জন্য, একই ধারণা।
ম্যাজিক অক্টোপাস উরন

4

হাস্কেল, 43 39 বাইট

f c=maximum.scanl(\n k->sum[n+1|c==k])0

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

স্ট্রিংটির মাধ্যমে চলুন এবং বর্তমান চরটিকে এমন কাউন্টারে প্রতিস্থাপন করুন যা বাড়ানো হয় যখনই এটি সমান হয় cবা 0না হলে পুনরায় সেট করে । তালিকার সর্বাধিক গ্রহণ করুন।

@ এক্সনোরকে 4 বাইটের জন্য ধন্যবাদ


আপনি করতে পারেন sum[n+1|c==k]
xnor

@ এক্সনর: চমৎকার! আমি *fromEnum(c==k)উভয় পয়েন্টফ্রি এবং ল্যাম্বদা নিয়ে পরীক্ষা করেছি , তবে এটি সর্বদা 2 বা 3 বাইট দীর্ঘ হয়।
নিমি

4

সি # 116 115 বাইট

আমার প্রথম কোড গল্ফ

সম্পাদিত কারণ প্রাথমিক জমাটি একটি স্নিপেট ছিল এবং রেগেক্সের জন্য প্রয়োজনীয় নাম স্থানটি অনুপস্থিত

বিশেষ রেজেক্স অর্থ সহ অক্ষরগুলিকে সমর্থন করতে # 2 সম্পূর্ণ পুনর্লিখন সম্পাদনা করুন

System.Linq; s => c => System.Text.RegularExpressions.Regex.Replace (s, "[^" + c + "]", ++ c + "") স্প্লিট (সি) .ম্যাক্স (x =>) x.Length);

using System.Linq;s=>c=>{var r=(char)(c-1);return string.Join("",s.Select(x=>x==c?c:r)).Split(r).Max(x=>x.Length)};

3
আমি সি # জানি না তবে মনে হচ্ছে আপনার কোডটি ভেরিয়েবল cএবং sপূর্বনির্ধারিত হওয়ার প্রত্যাশা করে । আমরা এটিকে একটি "কোড-স্নিপেট" বলি এবং এটি অনুমোদিত নয়। আপনি সম্ভবত একটি অনামী ফাংশন হিসাবে বা আপনার ভেরিয়েবলগুলি ইনপুটতে সেট করতে আপনার কোডটিকে পুনর্গঠন করতে পারেন। উভয় অনুমোদিত।
গম উইজার্ড

ওইটা কি কাজ করে? (উপরের সম্পাদনাটি দেখুন)
ব্রূম

1
আবার আমি সি # জানি না, তবে দেখে মনে হচ্ছে এটি ঠিক আছে। সি # তে আরও অভিজ্ঞ পরামর্শের জন্য আপনি এখানে সি # তে গল্ফ করার জন্য আমাদের টিপসটি চেকআউট করতে চাইতে পারেন ।
গম উইজার্ড

লিঙ্কগুলির জন্য ধন্যবাদ! আমি অবশ্যই সি # টিপসটি
ব্রুম

3
হাই # কেবল সি # তে গল্ফ করার জন্য কিছু সাধারণ মন্তব্য, আপনি নিজের ফাংশনটিকে সংজ্ঞায়িত করতে পারেন (s,c)=>System.Text.RegularExpressions.Regexআপনার হয় ফাংশন এর ঠিক আগে আপনি একটি ব্যবহার বিবৃতি ব্যবহার বা যুক্ত করতে হবে।
LiefdeWen

4

জাভাস্ক্রিপ্ট (ES6), 54 53 51 বাইট

-2 বাইটস @ নিল
-1 বাইটকে @ অ্যাপসিলারকে ধন্যবাদ

s=>c=>[...s].map(x=>j=(i=x==c&&i+1)>j?i:j,i=j=0)&&j

সংবাহন সিনট্যাক্স ইনপুট লাগে: f("foobar")("o")

পরীক্ষার স্নিপেট

f=
s=>c=>[...s].map(x=>j=(i=x==c&&i+1)>j?i:j,i=j=0)&&j
String: <input id=I> Letter: <input id=J maxlength=1 size=1> <button onclick='O.innerHTML+=`f("${I.value}")("${J.value}") = ${f(I.value)(J.value)}\n`'>Run</button><pre id="O"></pre>

ব্যবহার করে অন্য একটি বিকল্প evalএবং for(54 বাইট)

s=>c=>eval("i=j=0;for(x of s)i=x==c&&i+1,i>j?j=i:0;j")

রিজেক্স (85 বাইট) ব্যবহার করে পুরানো উত্তর

s=>c=>c?Math.max(...s.match(eval(`/${/\w/.test(c)?c:"\\"+c}*/g`)).map(x=>x.length)):0

1
আমি মনে করি x==c?i++:i=0শুধু হতে পারে i=x==c&&i+1সাল থেকে falseউপর ফলাফলের x==cতুলনা একটি হিসাবে গণ্য করা হবে 0(তত্সহ, এবং ফেরত মান হতে হবে না কোন সংখ্যা সাল থেকে সংখ্যাসূচক তুলনা এবং বাড়তি জন্য 0, ইন jসবসময় বেশি শূন্য মত অগ্রাধিকার নেবে falseমধ্যে i)
apsillers

@ অ্যাপসিলারস ধন্যবাদ, আপডেট হয়েছে তবে এটি কখনই ফেরতের মান হবে না এর অর্থ কী?
জাস্টিন মেরিনার

বিভ্রান্তির জন্য দুঃখিত; আমি কেবল ব্যাখ্যা করছিলাম যে পরিবর্তনটি কখনই আপনার প্রোগ্রামকে ফিরে আসবে না false(যেহেতু চ্যালেঞ্জের পক্ষে সর্বদা এটির একটি নম্বর ফেরত দেওয়া দরকার)
অ্যাপসিলার্স

1
s=>c=>[...s].map(x=>j=(x!=c?i=0:++i)>j?i:j,i=j=0)&&jদেখে মনে হচ্ছে কয়েকটা বাইট
নিল

1
দুঃখিত, আমি ভুল কোড পোস্ট করেছি, আমি পোস্ট করতে f=s=>c=>[...s].map(x=>j=(i=x==c&&i+1)>j?i:j,i=j=0)&&jচাইছিলাম যা একটি বাইট সংক্ষিপ্ত।
নিল

4

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 75 72 বাইট

(s,c)=>Math.max(0,...(for(s of s.split(/((.)\2*)/))if(s[0]==c)s.length))

ES6 সামঞ্জস্যপূর্ণ স্নিপেট:

f=
(s,c)=>Math.max(0,...s.split(/((.)\2*)/).filter(s=>s[0]==c).map(s=>s.length))
<div oninput=o.textContent=f(s.value,c.value)><input id=s><input id=c maxlength=1 size=1><pre id=o>0

split খালি স্ট্রিং এবং একক অক্ষর পাশাপাশি রানগুলিও দেয় কিন্তু ফলাফলটি প্রভাবিত করে না।




2

পার্ল 6 ,  45 43  42 বাইট

->$_,$c {$c&&$_??.comb(/$c+/)».chars.max!!0}

এটা পরীক্ষা করো

->$_,$c {$c&&$_??.comb(/$c+/).max.chars!!0}

এটা পরীক্ষা করো

->$_,$c {$c&$_??.comb(/$c+/).max.chars!!0}

এটা পরীক্ষা করো

সম্প্রসারিত:

-> $_, $c {       # pointy block lambda

    $c & $_       # AND junction of $c and $_
                  #   empty $c would run forever
                  #   empty $_ would return 4 ( "-Inf".chars )

  ??              # if True (neither are empty)

    .comb(/$c+/)  # find all the substrings
    .max          # find the max
    .chars        # get the length

  !!              # if False (either is empty)

    0             # return 0
}

2

জাভাস্ক্রিপ্ট, ES6, 52

পুনরাবৃত্ত সমাধান যা স্ট্রিং ইনপুটটিকে অ্যারের হিসাবে বিবেচনা করে (দ্রষ্টব্য: প্রাথমিক ইনপুটটি এখনও একটি স্ট্রিং) এবং বাম থেকে ডান অক্ষরে অক্ষর গ্রহণ করে C:

f=([C,...s],c,t=0,T=0)=>C?f(s,c,C==c&&++t,t>T?t:T):T

বর্তমান চলমান tএবং বিশ্বব্যাপী সেরা ট্র্যাক T

ব্যাখ্যা:

f=            // function is stored in `f` (for recursion)
  ([C,...s],  // turn input string in first-char `C` and the rest in `s`
   c,         // argument `c` to search for
   t=0,T=0)   // current total `t`, best total `T`
     =>
        C?             // if there is still any char left in the string
          f(s,c,       // recursively call `f`
            C==c&&++t, // increment `t` if char is match, or set `t` to `false`
            t>T?t:T)   // set global `T` to max of `t` and `T`
          :T           // when string is depleted, return `T`

অ-মিলের কাজগুলিতে সেট tকরা falseকারণ যখনই tবাড়ানো হয়, (যেমন, হয় ) falseহিসাবে গণ্য হয় এবং গ্লোবাল-ম্যাক্সের কোনও মানের তুলনায় কখনই গ্রেটার তুলনা করতে পারে না ।0false + 11falseT


1
ভাল সমাধান, আমি [C,...s]সিনট্যাক্সের সাথে অপরিচিত ছিলাম । slice()আমার নিজের পোস্টগুলি থেকে আমাকে বাইটস বন্ধ করতে সহায়তা করা উচিত ।
রিক হিচকক

2

জেলি , 5 বাইট

=ŒgṀS

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

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

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

=ŒgṀS  Main link. Left argument: s (string). Right argument: c (character)

=      Compare all characters in s with c, yielding 1 for c and 0 otherwise.
 Œg    Group adjacent, equal Booleans in the resulting array.
   Ṁ   Take the maximum. Note that any array of 1's will be greater than any array
       of 0's, while two arrays of the same Booleans are compared by length.
    S  Take the sum, yielding the length for an array of 1's and 0 otherwise.


2

এপিএল (ডায়ালগ) , 18 11 বাইট

সোয়াপিং প্রয়োজন সঙ্গে সংস্করণ 16.0 অথবা থাকার ⎕ML←3(অনেক সিস্টেমে ডিফল্ট)।

⌈/0,≢¨⊂⍨⎕=⎕

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

⎕=⎕ দুটি ইনপুটগুলির মধ্যে সমতার জন্য বুলিয়ান

⊂⍨ স্ব-বিভাজন (পার্টিশনগুলি শুরু করুন যেখানে কোনও শূন্য-পূর্ব উপাদান পূর্বসূরীর চেয়ে বেশি)

≢¨ ট্যালি প্রতিটি

0, একটি শূন্য প্রিপেন্ড করুন (খালি ইনপুট ক্ষেত্রে)

⌈/ তাদের সর্বাধিক


পুরানো সমাধান

প্রথমে s এর জন্য প্রম্পট দেয় , তারপরে সি

⌈/0,(⎕,¨'+')⎕S 1⊢⎕

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

 জন্য অনুরোধ জানানো

 যে জন্য

(… ঘটনার দৈর্ঘ্যের জন্য )⎕S 1পিসিআরই এস

'+' একটি প্লাস প্রতীক (অর্থ এক বা একাধিক)

 প্রতিটি উপাদান যুক্ত

 অনুরোধ জানানো জন্য-

0, একটি শূন্য প্রিপেন্ড করুন (খালি ইনপুট ক্ষেত্রে)

⌈/ তাদের সর্বাধিক

যদি এটা পলায়নের প্রয়োজন একটি ঘিরা স্ট্রিং এর একটি 1-উপাদানের বাহক হিসেবে দিতে হবে।


2

পিএইচপি, 70 67 বাইট

তিনটি সংস্করণ:

while(~$c=$argv[1][$i++])$x=max($x,$n=($c==$argv[2])*++$n);echo+$x;
while(~$c=$argv[1][$i++])$x=max($x,$n=$c==$argv[2]?++$n:0);echo+$x;
for(;++$n&&~$c=$argv[1][$i++];)$x=max($x,$n*=$c==$argv[2]);echo+$x;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; তাদের সাথে চালান -rবা অনলাইনে পরীক্ষা করুন


2

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

for(;~$c=$argv[1][$i++];)$r[]=$argv[2]==$c?++$n:$n=0;echo$r?max($r):0;

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

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

for(;~$s=substr($argv[1],$i++);)$r[]=strspn($s,$argv[2]);echo max($r?:[0]);

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

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

<?=@preg_match_all("<".preg_quote($argv[2])."+>",$argv[1],$t)?strlen(max($t[0])):0;

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

+8 এড়াতে বাইট @

<?=($a=$argv[2])&&preg_match_all("<".preg_quote($a)."+>",$argv[1],$t)?strlen(max($t[0])):0;

67 বাইট সংস্করণ কোনও রেগেক্স বিশেষ চরের জন্য ব্যর্থ হবে (এবং #অবশ্যই)।
তিতাস

... এবং এর ~জন্য ব্যর্থ হতে পারে chr(207)
তিতাস

@ টিটাস ডোন এবং ইনপুট কেবল
আসকি

ভাল চোখ ++$n! আপনি মুদ্রণযোগ্য আসকি মানে। ;)
তিতাস

1
echo$r?max($r):0;একটি বাইট সংরক্ষণ করে
টাইটাস

2

জাভাস্ক্রিপ্ট (ES6), 47 40 38 বাইট

(@ নীলকে 7 টি বাইট সংরক্ষণ করা এবং @ হারমানলাউনস্টেইনকে 2 বাইট ধন্যবাদ জানানো হয়েছে।)

s=>g=c=>c&&s.includes(c)?1+g(c+c[0]):0

ব্যাখ্যা:

কোনটি না পাওয়া পর্যন্ত পুনরাবৃত্তভাবে দীর্ঘকাল অনুসন্ধান চালায়।

স্নিপেট:


1
খুবই সোজা! উজ্জ্বল!
অ্যাপসিলারস

আপনি কি করতে পারবেন না f=(s,c)=>c&&s.includes(c)&&1+f(s,c+c[0])?
নিল

বা আরও ভাল এখনও, এটি করতে কারি s=>g=c=>c&&s.includes(c)&&1+g(c+c[0])
নিল

এটি প্রায়শই কার্যকর, তবে এটি "মিথ্যা" এবং শেষ দুটি ক্ষেত্রে নাল স্ট্রিং দেয়। এটি সংযোজন দ্বারা স্থির করা হয়েছে ||0, যা এখনও আমার সমাধানের চেয়ে কম।
রিক হিচকক

কার্ড f=সংস্করণের অংশ নয়, কারণ কেবলমাত্র অভ্যন্তরীণ ফাংশনটি পুনরাবৃত্ত।
নিল

2

জেলি, 10 9 বাইট

f⁴L
ŒgÇ€Ṁ

ব্যাখ্যা:

f⁴L
f⁴      -Filter by the character argument.
  L     -Return Length of filtered String.

ŒgÇ€»/
Œg      -Group string by runs of characters.
  ǀ    -Run above function on each group.
    Ṁ   -Return the largest in the list.

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


আপনি এর সাথে কয়েকটা বাইট সংরক্ষণ করতে পারেন Œgf€L€Ṁ
ডেনিস


1

হাস্কেল , 66 বাইট

import Data.List
((maximum.(0:).map length).).(.group).filter.elem

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

সংস্করণ পড়তে কিছুটা সহজ - পয়েন্টফ্রি নয়:

f c s = maximum (0:(map length (filter (elem c) (group s))))

অক্ষর দ্বারা স্ট্রিংকে গোষ্ঠীভূত করে, তারপরে সেই গোষ্ঠীগুলিতে ফিল্টার করে যা সঠিক চরিত্রটি ধারণ করে, তারপরে দৈর্ঘ্যগুলি সন্ধান করে, উপস্থিত না হওয়ার ক্ষেত্রে দৈর্ঘ্যের তালিকায় 0 যুক্ত করে এবং শেষ পর্যন্ত সর্বাধিক মান সন্ধান করে।


1

গণিত, 109 বাইট

(s=Differences[First/@StringPosition[#,#2]];k=t=0;Table[If[s[[i]]==1,t++;If[k<t,k=t],t=0],{i,Length@s}];k+1)&


ইনপুট

["এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স এক্সএক্স", "এক্স"]



1

সিজেম , 20 19 18 16 বাইট

0q~e`f{~@=*}$+W=

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

ব্যাখ্যা

0                 e# Push 0. We'll need it later.
 q~               e# Read and eval input. Pushes c and s to the stack.
   e`             e# Run-length encode s: turns it into an array of [length, char] pairs.
     f{           e# Map over these pairs using c an extra parameter:
       ~          e#  Dump the pair to the stack.
        @=        e#  Bring c to the top, check equality with the char, pushing 0 or 1.
          *       e#  Multiply the length by the result.
           }      e# (end map)
            $     e# Sort the resulting list in ascending order.
             +    e# Prepend the 0 from before, in case it's empty.
              W=  e# Get the last element.

1

এক্সেল, 56 বাইট

{=MAX(IFERROR(FIND(REPT(A2,ROW(A:A)),A1)^0*ROW(A:A),0))}

sইনপুট হওয়া উচিত A1
cইনপুট হওয়া উচিত A2
সূত্র অবশ্যই একটি অ্যারে সূত্র ( Ctrl+ Shift+ Enter) হওয়া উচিত যা কোঁকড়া বন্ধনী যুক্ত করে { }

প্রযুক্তিগতভাবে, এটি কেবলমাত্র হ্যান্ডেল করতে পারে যেখানে দীর্ঘতম রান 1,048,576 এর চেয়ে কম (যা 2 ^ 20) কম হয় কারণ এটি বর্তমান এক্সেলকে সারি করে কীভাবে আপনাকে একটি ওয়ার্কশিটে রাখতে দেয়। যেহেতু এটি মিলিয়ন + মানগুলিকে মেমরিতে লোড করে যখনই এটি পুনরায় গণনা করে, এটি কোনও দ্রুত সূত্র নয়।


1

এমএটিএল , 15 বাইট

0i0v=dfd1L)0hX>

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

বেসিক অ্যালগরিদম খুব সহজ (বিভক্তির কোনও ব্যবহার নেই!), তবে আমাকে নিক্ষেপ করতে হয়েছিল 0i0vএবং 0hপ্রান্তের ক্ষেত্রে অনুমতি দিতে হয়েছিল। তবুও, আমি ভেবেছিলাম অ্যাপ্রোচটি দুর্দান্ত ছিল, এবং সম্ভবত এখনও প্রান্তের কেসগুলি পরিচালনা করার জন্য আমি আরও একটি কৌশল খুঁজে পেতে পারি: অ্যালগরিদম একটি স্ট্রিংয়ের মাঝখানে সবচেয়ে দীর্ঘতম রান খুঁজে পায়, তবে একক অক্ষর বা খালি স্ট্রিংয়ের জন্য নয়; আমি আরও ভাল ফলাফলের জন্য আরও ভাল জায়গায় ভেরিয়েবলগুলি 'প্যাড' করতে পারি কিনা তা আমি এখনও পরীক্ষণ করছি।

0i0v % Prepends and appends a zero to the (implicit) input.
   = % Element-wise equality with the desired char (implicit input)
   d % Pairwise difference. Results in a 1 at the start of a run, and -1 at the end.
   f % Get indices of 1's and -1's.
   d % Difference to get length of the runs (as well as length of non-runs)
 1L) % Only select runs, throw out non-runs. We now have an array of all run lengths.
  0h % 'Find' (`f`) returns empty if no run is found, so append a zero to the previous array.
  X> % Maximum value.

খালি কাজ করে না c। তারপরে আবার, আমি মনে করি প্রতিটি স্ট্রিংয়ে প্রতিটি চরিত্রের মধ্যে খালি স্ট্রিংগুলির অসীম রান রয়েছে :)


1

আর , 66 58 বাইট

-8 বাইট বিএলটি এবং মিকিটি ধন্যবাদ

function(s,c)max((r=rle(el(strsplit(s,''))))$l*(r$v==c),0)

একটি বেনামি ফাংশন প্রদান করে। টিআইও-তে 1-বাইট পার্থক্য রয়েছে কারণ elঅনর্থক কারণে সেখানে কাজ করে না।

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


একটি বাইট সংরক্ষণ করুনr=rle(el(strsplit(s,'')))
বিএলটি

1
আপনি যদি আমার পূর্ববর্তী মন্তব্যটি দেখে থাকেন তবে তা উপেক্ষা করুন। আপনার জন্য আরও ভাল একটি পেয়েছেনfunction(s,c)max((r=rle(el(strsplit(s,''))))$l*(r$v==c),0)
মিকিটি

@ বিএলটি elটিআইও-তে কাজ করে না (কেন কোনও ধারণা নেই) এবং আমি কেবল এটি সেখানে ওয়ার্কিং কোড থেকে অনুলিপি করে আটকিয়েছি যাতে আমাকে এটি @ মিকটিতে খুব চালাকের মধ্যে রাখতে হবে তা মনে রাখতে হবে! ধন্যবাদ!
জিউসেপ

1

জাভা 8, 67 65 বাইট

s->c->{int t=0,m=0;for(char x:s)m=m>(t=x==c?t+1:0)?m:t;return m;}

-২ বাইট @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ

sএকটি হিসাবে char[]এবং ইনপুট নেয় Tcchar

ব্যাখ্যা:

এখানে চেষ্টা করুন।

s->c->{          // Method with char[] and char parameters and int return-type
  int t=0,       //  Temp counter-integer
      m=0;       //  Max integer
  for(char a:s)  //  Loop over the characters of the input
    m=m>(
     t=x==c?     //   If the current character equals the input-character:
      t+1        //    Raise `t` by 1
      :          //   Else:
       0)        //    Reset `t` to 0
    ?m:t;        //   If `t` is now larger than `m`, put `t` as new max into `m`
                 //  End of loop (implicit / single-line body)
  return m;      //  Return the resulting max
}                // End of method

1
m=m>(t=x==c?t+1:0)?m:t;তুলনায় খাটো {t=x==c?t+1:0;m=m>t?m:t;}
অলিভিয়ের গ্রাগোয়ার

যদিও এটি দীর্ঘ সময়ের মতো দীর্ঘ, তবুও আমি আমার প্রথম চিন্তাটি পছন্দ করি:; s->c->java.util.Arrays.stream(s.split("[^"+c+"]")).mapToInt(z->z.length()).max().orElse(0))
অলিভিয়ার গ্রোগোয়ার

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