সর্বাধিক ক্রম দৈর্ঘ্য সন্ধান করুন


29

ধরে নিন আমাদের কাছে একটি স্ট্রিং রয়েছে এবং আমরা প্রতিটি বর্ণের সর্বাধিক পুনরাবৃত্তি ক্রম সন্ধান করতে চাই।

উদাহরণস্বরূপ, নমুনা ইনপুট দেওয়া:

"acbaabbbaaaaacc"

নমুনা ইনপুট জন্য আউটপুট হতে পারে:

a=5
c=2
b=3

নিয়মাবলী:

  • আপনার কোডটি ফাংশন বা কোনও প্রোগ্রাম হতে পারে - আপনার চয়ন করার জন্য
  • ইনপুট স্টিডিন, ফাইল বা ফাংশন পরামিতি দ্বারা হতে পারে
  • আউটপুটে কেবলমাত্র অক্ষর থাকা উচিত যা ইনপুটটিতে উপস্থিত হয়
  • ইনপুট সর্বাধিক দৈর্ঘ্য 1024
  • আউটপুট ক্রমটি কোনও ব্যাপার নয়, তবে এটি [চর] = [সর্বাধিক পুনরাবৃত্ত ক্রম] [ডিলিমিটার] আকারে মুদ্রণ করতে হবে
  • স্ট্রিংয়ে কোনও অক্ষর থাকতে পারে

প্রতিযোগিতাটি বৃহস্পতিবার 3 য় 23:59 ইউটিসিতে শেষ হবে।


ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের সর্বোচ্চ কি আছে?
সিগমা

2
আউটপুট ঠিক মত দেওয়া আছে? প্রদর্শিত না হওয়া অক্ষরের জন্য আমরা কি 0 বলতে পারি? সর্বোচ্চ চিঠি পর্যন্ত প্রতিটি অক্ষর অন্তত একবার উপস্থিত হবে?
xnor

1
আপনার প্রশ্নের উদাহরণ হিসাবে আউটপুট হুবহু বিন্যাস করতে হবে কিনা তা দয়া করে স্পষ্ট করুন। বর্তমান 16 টির মধ্যে কমপক্ষে 10 টি উত্তর আলাদা ফর্ম্যাট ব্যবহার করে, অন্য তিন জন দুটি ভিন্ন সংস্করণ উপস্থাপন করে।
ডেনিস

1
@ জো আপনি গল্ফ করার জন্য সম্ভবত শাস্তি দেওয়া উচিত। আপনি এটিকে সমবেদনা জানিয়ে, আমি l:S_&{'=L{2$+_S\#)}g,(N}/উত্পাদন সিস্টেমে শেষ পর্যন্ত যাচ্ছি ! আমি তোমার নামে অভিশাপ দেব।
ক্রানচার

উত্তর:


22

8086 মেশিন কোড, 82 80

x.comফাইলের বিষয়বস্তু :

B7 3D 89 DF B1 80 F3 AA 0D 0A 24 B4 01 CD 21 42
38 D8 74 F7 38 17 77 02 88 17 88 C3 31 D2 3C 0D
75 E9 BF 21 3D B1 5E 31 C0 F3 AE E3 EE 4F BB 04
01 8A 05 D4 0A 86 E0 0D 30 30 89 47 02 3C 30 77
04 88 67 03 43 89 3F 89 DA B4 09 CD 21 47 EB D7

এটি কেবলমাত্র 99 টি পর্যন্ত অক্ষরের পুনরাবৃত্তি সমর্থন করে।

সোর্স কোড ( debug.comএসেম্বলারের ইনপুট হিসাবে পরিবেশন করা হয়েছে ), মন্তব্য সহ!

a
    mov bh, 3d         ; storage of 128 bytes at address 3d00
    mov di, bx
    mov cl, 80
    rep stosb          ; zero the array
    db 0d 0a 24
; 10b
    mov ah, 1
    int 21             ; input a char
    inc dx             ; calculate the run length
    cmp al, bl         ; is it a repeated character?
    je  10b
    cmp [bx], dl       ; is the new run length greater than previous?
    ja  11a
    mov [bx], dl       ; store the new run length
; 11a
    mov bl, al         ; remember current repeating character
    xor dx, dx         ; initialize run length to 0
    cmp al, d          ; end of input?
    jne 10b            ; no - repeat
    mov di, 3d21       ; start printing run lengths with char 21
    mov cl, 5e         ; num of iterations = num of printable characters
; 127
    xor ax, ax
    repe scasb         ; look for a nonzero run length
    jcxz 11b           ; no nonzero length - exit
    dec di
    mov bx, 104        ; address of output string
    mov al, [di]       ; read the run length
    aam                ; convert to decimal
    xchg al, ah
    or  ax, 3030
    mov [bx+2], ax
    cmp al, 30         ; was it less than 10?
    ja  145
    mov [bx+3], ah     ; output only one digit
    inc bx             ; adjust for shorter string
; 145
    mov [bx], di       ; store "x=" into output string
    mov dx, bx         ; print it
    mov ah, 9
    int 21
    inc di
    jmp 127            ; repeat
; 150

rcx 50
n my.com
w
q

এখানে কিছু গল্ফিং কৌশল ব্যবহার করা হয়েছে যা আমার মনে হয় মজাদার ছিল:

  • অ্যারের ঠিকানা 3d00, যেখানে3d আসকি-কোড রয়েছে =। এই ভাবে, অক্ষরের জন্য অ্যারে এর এন্ট্রির জন্য ঠিকানা xহল 3d78। যখন 2-অক্ষরের স্ট্রিং হিসাবে ব্যাখ্যা করা হয়, এটি x=
  • আউটপুট বাফার ঠিকানা আছে 104; এটি আরম্ভের কোডটি ওভাররাইট করে যা আর প্রয়োজন হয় না। শেষের-লাইন ক্রমটি 0D 0A 24ক্ষতিকারক কোড হিসাবে কার্যকর করা হয়।
  • এখানে aamনির্দেশাবলী কোনও গল্ফিং সরবরাহ করে না, যদিও এটি হতে পারে ...
  • সংখ্যাটি দু'বার লিখে প্রথমে ধরে নিচ্ছি যে এটি 10 ​​এর চেয়ে বেশি, এবং তারপরে এটি আরও ছোট হলে সংশোধন করুন।
  • প্রস্থান নির্দেশটি একটি অস্পষ্ট ঠিকানায় 11b, যা C3ভাগ্যের দ্বারা প্রয়োজনীয় মেশিন কোড ধারণ করে ।

আকর্ষণীয় পদ্ধতির। তবে, 99 টি পুনরাবৃত্তির সীমাবদ্ধতা সহ 1024 আআ'র ইনপুট সরবরাহ করা হয় এমন ক্ষেত্রে এটি পরিচালনা করবে না।
হোমার 6

14

সিজেম, 27 26 25 বাইট

l:S_&{'=L{2$+_S\#)}g,(N}/

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

উদাহরণ

$ cjam maxseq.cjam <<< "acbaabbbaaaaacc"
a=5
c=2
b=3

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

l:S       " Read one line from STDIN and store the result in “S”.                   ";
_&        " Intersect the string with itself to remove duplicate characters.        ";
{         " For each unique character “C” in “S”:                                   ";
  '=L     " Push '=' and ''.                                                        ";
  {       "                                                                         ";
    2$+_  " Append “C” and duplicate.                                               ";
    S\#)  " Get the index of the modified string in “S” and increment it.           ";
  }g      " If the result is positive, there is a match; repeat the loop.           ";
  ,       " Retrieve the length of the string.                                      ";
  (       " Decrement to obtain the highest value that did result in a match.       ";
  N       " Push a linefeed.                                                        ";
}/        "                                                                         ";

9

জে - 52 বাইট

ঠিক আছে, আবার একটি সহজ পদ্ধতির।

f=:([,'=',m=:":@<:@#@[`(]m~[,{.@[)@.(+./@E.))"0 1~~.

ব্যাখ্যা:

f=:([,'=',m=:":@<:@#@[`(]m~[,{.@[)@.(+./@E.))"0 1~~.
                                                 ~~. Create a set of the input and apply it as the left argument to the following.
   ([,'=',m=:":@<:@#@[`(]m~[,{.@[)@.(+./@E.))"0 1    The function that does the work
                                             "0 1    Apply every element from the left argument (letters) with the whole right argument (text).
                                  @.(+./@E.)         Check if the left string is in right string.
                       (]m~[,{.@[)                   If yes, add one letter to the left string and recurse.
             ":@<:@#@[                               If not, return (length of the left string - 1), stringified.
    [,'=',                                           Append it to the letter + '='

উদাহরণ:

   f 'acbaabbbaaaaacc'
a=5
c=2
b=3
   f 'aaaabaa'
a=4
b=1

যদি ফ্রি-ফর্ম আউটপুটটির অনুমতি দেওয়া হয় (অন্য অনেক উত্তর হিসাবে), আমার কাছেও একটি 45 বাইট সংস্করণ রয়েছে। এই বাক্সগুলি বাক্সগুলির একটি তালিকা উপস্থাপন করে (হ্যাঁ, সেগুলি প্রিন্ট করা হয়, যদিও এসই-র লাইনের উচ্চতা এগুলি ভেঙে দেয়)।

   f=:([;m=:<:@#@[`(]m~[,{.@[)@.(+./@E.))"0 1~~.
   f 'acbaabbbaaaaacc'
┌─┬─┐
│a│5│
├─┼─┤
│c│2│
├─┼─┤
│b│3│
└─┴─┘
   f 'aaaabaabba'
┌─┬─┐
│a│4│
├─┼─┤
│b│2│
└─┴─┘

8

রুবি, 72

(a=$*[0]).chars.uniq.map{|b|puts [b,a.scan(/#{b}+/).map(&:size).max]*?=}

এটি কমান্ড লাইন আর্গুমেন্ট এবং স্টপআউট আউটপুট থেকে ইনপুট নেয়।


charsচেয়ে একটু খাটো split("")
ভেন্টোরো

@ ভেন্তোরো আমি চেষ্টা করেছিলাম তবে charsঅ্যারের পরিবর্তে একটি গণক দিয়েছি । আমি 1.9.3 এ আছি, তাই এটি 2.0 এর জিনিস কি?
সুস্পষ্ট

হ্যাঁ, ২.০ এ charsএকটি অ্যারে ফেরত দেয়।
ভেন্টোরো

এটি নিয়মগুলি কিছুটা প্রসারিত হতে পারে, তবে সম্ভবত এটির pপরিবর্তে ব্যবহার করবেন puts?
শেলভাকু

1
আমি দেখি. যদিও এটি এটি কম সুন্দর করে তোলে, আমি দেখতে পাচ্ছি না যে এটি কোনও নিয়ম ভেঙে দেবে।
দানিরো

7

গল্ফস্ক্রিপ্ট, 26 বাইট

:s.&{61{2$=}s%1,/$-1=,n+}%

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

ব্যাখ্যা:

  • :ssপরে ব্যবহারের জন্য ভেরিয়েবলের ইনপুট স্ট্রিং সংরক্ষণ করে ।
  • .&ইনপুটটিতে অনন্য অক্ষরগুলি বের করে, যা { }%লুপের বাকী কোডটি আবার পুনরাবৃত্তি করে।
  • 61 আউটপুট ডিলিমিটার হিসাবে কাজ করতে, স্ট্যাকের বর্তমান অক্ষরের শীর্ষে 61 নম্বর (সমান চিহ্নের জন্য ASCII কোড) চাপায়।
  • {2$=}s%স্ট্রিংটি নেয় sএবং এর অক্ষরগুলিকে 1 এর সাথে প্রতিস্থাপন করে যদি তারা বর্তমান অক্ষরটির পুনরাবৃত্তি হচ্ছে, বা 0 না করে তবে এটি সমান হয়। (এটি আউটপুট জন্য স্ট্যাকের উপরের বর্তমান অক্ষরটি ফেলে দেয়))
  • 1,/ এই স্ট্রিংগুলিকে এবং শূন্যগুলি নেয় এবং এটি জিরোতে বিভক্ত হয়।
  • $ফলস্বরূপ সাবস্ট্রিংগুলি বাছাই করে, -1=সর্বশেষের স্ট্রিংগুলি বের করে (যেহেতু তারা সকলেই একই চরিত্রের পুনরাবৃত্তি নিয়ে গঠিত, এটি দীর্ঘতম), এবং ,এই স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে।
  • n+ দৈর্ঘ্যকে শক্তিশালী করে এবং এতে একটি নতুন লাইন যুক্ত করে।

গীত। যদি আউটপুটে সমান চিহ্নগুলি alচ্ছিক হয় তবে মোট 24 বাইটের দৈর্ঘ্যের জন্য 61বাদ দেওয়া যাবে (এবং 2$প্রতিস্থাপন করা যাবে 1$) :

:s.&{{1$=}s%1,/$-1=,n+}%

1
যদি আপনি ধাক্কা আপনি সোয়াপ সংরক্ষণ করতে পারবেন 61প্রথম: :s.&{61{2$=}s%1,/$-1=,n+}%
হাওয়ার্ড

@ হাওয়ার্ড: ধন্যবাদ!
ইলমারি করোনেন

6

কফিস্ক্রিপ্ট, 109 বাইট

আমি রেজেক্স পছন্দ করি

f=(s)->a={};a[t[0]]=t.length for t in s.match(/((.)\2*)(?!.*\1)/g).reverse();(k+'='+v for k,v of a).join '\n'

এখানে সংকলিত জাভাস্ক্রিপ্ট আপনি নিজের ব্রাউজারের কনসোলে চেষ্টা করতে পারেন

f = function(s) {
  var a, t, _i, _len, _ref;
  a = {};
  _ref = s.match(/((.)\2*)(?!.*\1)/g).reverse();
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    t = _ref[_i];
    a[t[0]] = t.length;
  }
  return a;
};

তারপরে আপনি কল করতে পারেন

f("acbaabbbaaaaacc")

পেতে

c=2
a=5
b=3

এটি দেখে মনে হচ্ছে ইনপুটগুলির মতো ভুল ফলাফল তৈরি হয়েছে aaaabaa
ভেন্টোরো

@ ভেন্টো আপনি ঠিক বলেছেন, দুটি সমস্যা আছে। একটি সহজেই স্থির হয়ে গেছে তবে আমার অন্যটির বিষয়ে চিন্তা করা দরকার।
মার্টিন ইন্ডার

@ ভেন্টো স্থির
মার্টিন ইন্ডার

5

পাইথ , 24 25 26 (বা 29)

=ZwFY{Z=bkW'bZ~bY)p(Yltb

পরীক্ষা এখানে করা যেতে পারে: লিঙ্ক

বিন্যাসে আউটপুট:

('a', 5)
('c', 2)
('b', 3)

ব্যাখ্যা:

=Zw              Store one line of stdin in Z
FY{Z             For Y in set(Z):
=bk              b=''
W'bZ             while b in Z:
~bY              b+=Y
)                end while
p(Yltb           print (Y, len(b)-1)

পাইথন:

k=""
Z=copy(input())
for Y in set(Z):
 b=copy(k)
 while (b in Z):
  b+=Y
 print(_tuple(Y,len(tail(b))))

যথাযথ (a = 5) আউটপুট জন্য, ব্যবহার করুন:

=ZwFY{Z=bkW'bZ~bY)p++Y"="`ltb

29 টি অক্ষর


দেখে মনে হচ্ছে আপনার ঠিক একই ধারণা ছিল। তার জন্য একটি +1 রাখুন।
seequ

@ রেয়ার হ্যাঁ, এটি করার খুব ভাল উপায় বলে মনে হচ্ছে।
isaacg

আপনার অ্যালগরিদমের সাথে সত্যিই সম্পর্কিত নয়, তবে পাইথনের আউটপুটটি বিভ্রান্তিকর, কারণ k=''এটি অন্য কোথাও সংজ্ঞায়িত হয়েছে।
gggg

হ্যাঁ, দুঃখিত। আমি এটির উন্নতিতে কাজ করব। আমি এটি সম্পাদনা করব।
isaacg

5

সি, 126 125 119 বাইট

l,n,c[256];main(p){while(~(p=getchar()))n*=p==l,c[l=p]=c[p]>++n?c[p]:n;for(l=256;--l;)c[l]&&printf("%c=%d\n",l,c[l]);}

চলমান:

$ gcc seq.c 2>& /dev/null
$ echo -n 'acbaabbbaaaaacc' | ./a.out
c=2
b=3
a=5

আপনি এই উত্তরের মতো getchar()>0করে প্রতিস্থাপন করতে ~getchar()পারেন
আনাতোলিগ

@নাটোলিও ইওএফ ঠিক -1 হওয়ার নিশ্চয়তা আছে? আমি ভেবেছিলাম এটি কেবল <0 টি হিসাবে নির্দিষ্ট করা হয়েছে।
ফ্লাফি

আমি মনে করি -1 যথেষ্ট সাধারণ (যেমন উইন্ডোজ এবং লিনাক্স) তাই আপনি কোড গল্ফের জন্য ধরে নিতে পারেন। উত্পাদন কোডের জন্য, less than zeroপুরোপুরি ঠিক আছে, তবে == EOFএটি আরও স্পষ্ট clear
অ্যানাটলিগ

@anatolyg নিশ্চিত, এবং আসলে আমি বৈশিষ্ট ফাইলের শেষে দৃশ্যত এমনকি <0 হতে নিশ্চিত করা হয় না প্রতি অনুমান - এটি পারে হতে, উদাহরণস্বরূপ, 256. আমি শুধু একক বাইট সংরক্ষণ করব তাই। :)
ফ্লফি

2
EOFনেতিবাচক হওয়ার গ্যারান্টিযুক্ত, এবং -1 charস্বাক্ষরিত হলেও ব্যবহৃত হয়; দেখতে এখানে
anatolyg

4

গণিত , 74 72 69

Print[#[[1,1]],"=",Max[Tr/@(#^0)]]&/@Split@Characters@#~GatherBy~Max&

% @ "acbaabbbaaaaacc"
a=5
c=2
b=3

খুব ভাল না তবে স্ট্রিংগুলি ম্যাথমেটিকার সেরা অঞ্চল নয়। যদিও ভাল হচ্ছে। :-)


এটি বেশ চিত্তাকর্ষক গল্ফিং (এটি চেষ্টা করার পরে এটি বলার জন্য ...)
Szabolcs

v10, একটি সম্পূর্ণ সমাধান নয়: First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] & কমপক্ষে এটি বেশ সহজবোধ্য এবং পাঠযোগ্য।
স্যাজাবলাকস

@ জাজাবলস ধন্যবাদ! মধ্যে পার্থক্য কি GroupByএবং GatherBy?
মিঃ উইজার্ড

মূল পার্থক্য হ'ল GroupByএকটি Association। আমি অন্যান্য পার্থক্যগুলি এখনও বিশদভাবে অধ্যয়ন করি নি। রেফারেন্স.ওয়লফ্রাম.com/ংলজ / রেফ / গ্রুপপাই.ইচটিএমএল এটি একটি নিখরচায় অ্যাকাউন্টের সাথে মেঘের মধ্যে চেষ্টা করতে পারেন (আমি এইগুলির সাথে এভাবেই খেলছি)।
সাজ্জাবলস

3

সি # (লিনকিউপ্যাড)

146

এটি tsavino এর উত্তর কিন্তু সংক্ষিপ্ত। এখানে, আমি Distinct()পরিবর্তে ব্যবহার করেছি GroupBy(c=>c)। এছাড়াও এর কোঁকড়ানো ধনুর্বন্ধনী বন্ধ foreach-loopরেখে গেছে:

void v(string i){foreach(var c in i.Distinct())Console.WriteLine(c+"="+(from Match m in Regex.Matches(i,"["+c+"]+")select m.Value.Length).Max());}

136

আমি lambda expressionসাধারন কোয়েরি সিনট্যাক্সের পরিবর্তে ব্যবহার করার চেষ্টা করেছি তবে যেহেতু আমার Cast<Match>প্রথম প্রয়োজন ছিল তাই কোডটি 1 অক্ষর দীর্ঘ হয়ে গেল ... যাইহোক, যেহেতু এটি লিনকিপ্যাডে কার্যকর করা যায়, আপনি এর Dump()পরিবর্তে ব্যবহার করতে পারেন Console.WriteLine():

void v(string i){foreach(var c in i.Distinct())(c+"="+(from Match m in Regex.Matches(i,"["+c+"]+")select m.Value.Length).Max()).Dump();}

কোডটির আরও অধ্যয়ন আমাকে সম্পর্কে ভেবে দেখেছিল Max()। এই ফাংশন এছাড়াও একটি গ্রহণ করে FuncSelectল্যাম্বদা এক্সপ্রেশন ব্যবহার করার সময় আমি এই অংশটি এড়িয়ে যেতে পারি:

void v(string i){foreach(var c in i.Distinct())(c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();}

সুতরাং, চূড়ান্ত ফলাফল:

128

হালনাগাদ:

ড্যান পুজির টিপসটির জন্য ধন্যবাদ, আমি আরও 6 টি চরিত্র সংরক্ষণ করতে পেরেছি:

void v(string i){i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m‌​.Value.Length)).Dump();}

দৈর্ঘ্য:

122


আপনার উন্নতির জন্য আপনাকে ধন্যবাদ, আমি লিনকপ্যাডে .ডাম্প () দিয়ে কৌশলটি সম্পর্কে জানতাম না। সত্যি কথা বলতে, আমি ভিজ্যুয়াল স্টুডিওতে কোডটি বিকাশ করেছি এবং কিছু অক্ষর সংরক্ষণ করতে লিনকপ্যাডে এটি অনুলিপি করেছি কারণ লিনকপ্যাড একটি মূল পদ্ধতির প্রয়োজন নেই।
tsavinho

ধন্যবাদ! আমি Dump()সম্প্রতি এই পদ্ধতিটিও জানতে পেরেছি , প্রতিবার আপনাকে 10+ চর বাঁচায় :) কোঁকড়া ধনুর্বন্ধনী সহজ ছিল এবং বাকিগুলি কিছুটা ব্রেইনক্র্যাকিং ছিল: ডি
আব্বাস

1
আপনি যদি লিনকপ্যাডের IEnumerableপ্রদর্শন শৈলীটি ব্যবহার করে খুশি হন তবে আপনি আরও 8 টি অক্ষর সংরক্ষণ করতে পারেন, এটি আপনার দেহ হিসাবে:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
ড্যান পুজে

3

পাইথন 3 (70)

s=input()
for c in set(s):
 i=1
 while c*i in s:i+=1
 print(c,'=',i-1)

এমনকি গল্ফ পাইথন খুব পঠনযোগ্য হতে পারে। আমি মনে করি যে এই কোডটি একক-বর্ণের ভেরিয়েবল এবং লুপের সময় একটি এক-লাইন ব্যতীত পুরোপুরি মুশকিল।

উদাহরণ রান:

>>> helloworld
e = 1
d = 1
h = 1
l = 2
o = 1
r = 1
w = 1
>>> acbaabbbaaaaacc
a = 5
c = 2
b = 3

এটি একটি আকর্ষণীয় সমাধান
ক্রুনচার

1
আপনি যদি সেটগুলি (গুলি) কেবলমাত্র s এ পরিবর্তন করেন আমি মনে করি এটি এখনও প্রয়োজনীয়তা পূরণ করে। কোথাও এটি বলা হয় না যে প্রতিটি চর অবশ্যই একবার মুদ্রিত হবে।
ক্রંચার

@ ক্রাঙ্কার আমি সম্মতি জানাই যে ওপি প্রতিটি চিঠি একবার নির্দিষ্ট করে না, তবে অন্য পাইথন উত্তরগুলি এটি ধরে নিয়েছে বলে মনে হয়, তাই আমি তুলনামূলক হতে থাকব। যদিও আউটপুট ফর্ম্যাটগুলি এখনও বেমানান। আমি চাই ওপি স্পষ্ট করে দেওয়ার অনুরোধগুলিতে প্রতিক্রিয়া জানায়।
xnor

2

রুবি, 58

h={}
gets.scan(/(.)\1*/){h[$1]=[h[$1]||0,$&.size].max}
p h

STDIN থেকে ইনপুট নেয়, ফর্মটি এটিকে STDOUT এ আউটপুট করে {"a"=>5, "c"=>2, "b"=>3}


2

লিংকপ্যাডে সি # - 159 বাইট

ঠিক আছে, কমপক্ষে আমি টি-এসকিউএলকে পরাজিত করেছি; পি অন্য কাউকে পরাজিত করবে না, তবে আমি ভেবেছিলাম এটি যেভাবেই ভাগ করে নেব।

void v(string i){foreach(var c in i.GroupBy(c=>c)){Console.WriteLine(c.Key+"="+(from Match m in Regex.Matches(i,"["+c.Key+"]+")select m.Value.Length).Max());}}

ব্যবহার:

v("acbaabbbaaaaacc");

পরামর্শ সর্বদা স্বাগত!


দুর্দান্ত উত্তর! আমি কিছু পরামর্শ পেয়েছি তবে এটি একটি মন্তব্যের জন্য দীর্ঘ ছিল তাই আমার উত্তরের জন্য এখানে ক্লিক করুন । :)
আব্বাস

2

পাওয়ারশেল 80 77 72

$x=$args;[char[]]"$x"|sort -u|%{"$_="+($x-split"[^$_]"|sort)[-1].length}

আপনার এটি কনসোলে চালানো দরকার ...


1
$xঅতিশয় হয়। আপনি তিনটি বাইট খাটো এটি ব্যবহার করছেন না। এছাড়াও sort -uযথেষ্ট। সম্পূর্ণ প্যারামিটারের নামগুলি খুব কমই বানানের প্রয়োজন হয়। এটি অবশ্য রেগেক্সে অনির্বাচিত ব্যবহারের কারণে নির্দিষ্ট অক্ষরের জন্য ব্যর্থ হবে। কীভাবে »স্ট্রিংটিতে কোনও অক্ষর থাকতে পারে on তা বোঝার জন্য, এটি একটি সমস্যা হতে পারে।
জোয়

@ জো বাছাইয়ের জন্য টিপটির জন্য ধন্যবাদ, তবে $ x সম্পর্কে আমি এটির মতো কাজ করতে পারিনি [char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}, মনে হয় এটি দ্বিতীয় $ টি খালি খালি আসে ... - ডার্কাজ্যাক্স 17 মিনিট আগে
ডারাকআজাক্স

হ্যাঁ, হ্যাঁ দুঃখিত। এটি কারণ এটি একটি স্ক্রিপ্ট ব্লকে রয়েছে যার নিজস্ব যুক্তি রয়েছে ( $argsস্ক্রিপ্টটির আর একটি নেই)।
জোয়

2

পার্ল - 65 71 76 টি অক্ষর

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

প্রতিটি উত্তরের জন্য, গল্ফ.পিএল-এ অনুলিপি করুন এবং এটি চালান:

echo acbaabbbaaaaacc | perl golf.pl

আমার সংক্ষিপ্ততম সমাধানটি প্রতিটি চরিত্রের যতবার প্রদর্শিত হয় ততবার মুদ্রণ করে, কারণ এটি নিয়ম দ্বারা নিষিদ্ধ নয়।

$_=$i=<>;for(/./g){$l=length((sort$i=~/$_*/g)[-1]);print"$_=$l
"}

আমার পরবর্তী সংক্ষিপ্ততম সমাধান (85 90 টি অক্ষর) কেবলমাত্র প্রতিটি অক্ষর একবার মুদ্রণ করে:

<>=~s/((.)\2*)(?{$l=length$1;$h{$2}=$l if$l>$h{$2}})//rg;print"$_=$h{$_}
"for keys %h

1

এফ # - 106

let f s=
 let m=ref(Map.ofList[for c in 'a'..'z'->c,0])
 String.iter(fun c->m:=(!m).Add(c,(!m).[c]+1))s;m

এফএসআইতে, কল করা

f "acbaabbbaaaaacc"

দেয়

val it : Map<char,int> ref =
  {contents =
    map
      [('a', 8); ('b', 4); ('c', 3); ('d', 0); ('e', 0); ('f', 0); ('g', 0);
       ('h', 0); ('i', 0); ...];}

তবে অতিরিক্ত তথ্য ছাড়াই এটি মুদ্রণের জন্য এটিকে কল করুন:

f "acbaabbbaaaaacc" |> (!) |> Map.filter (fun _ n -> n > 0)

যা দেয়

val it : Map<char,int> = map [('a', 8); ('b', 4); ('c', 3)]

1

জাভাস্ক্রিপ্ট, 116 বাইট

y=x=prompt();while(y)r=RegExp(y[0]+'+','g'),alert(y[0]+'='+x.match(r).sort().reverse()[0].length),y=y.replace(r,'')

নমুনা আউটপুট:

lollolllollollllollolllooollo
l=4
o=3

acbaabbbaaaaacc
a=5
c=2
b=3

helloworld
h=1
e=1
l=2
o=1
w=1
r=1
d=1 

1

টি-এসকিউএল (2012) 189 171

সম্পাদনা: সরানো হয়েছে ORDER BY কারণ বিধিগুলি যে কোনও আউটপুট আদেশ দেয়।

একটি CHAR ভেরিয়েবল থেকে ইনপুট নেয় @aএবং একটি পুনরাবৃত্ত সিটিই ব্যবহার করে স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য একটি সারি তৈরি করতে ক্রমবর্ধমান ব্যবহার করে এবং অনুক্রমিক ঘটনাগুলি নির্ধারণ করে।

এর পরে, এটি একটি সহজ SELECTএবংGROUP BY আউটপুট ক্রমের জন্য এটি বিবেচনা সহ।

এসকিউএল ফিডল এ চেষ্টা করে দেখুন

WITH x AS(
    SELECT @a i,''c,''d,0r,1n
    UNION ALL 
    SELECT i,SUBSTRING(i,n,1),c,IIF(d=c,r+1,1),n+1
    FROM x
    WHERE n<LEN(i)+2
)
SELECT d+'='+LTRIM(MAX(r))
FROM x
WHERE n>2
GROUP BY d

চলক বরাদ্দ করা:

DECLARE @a CHAR(99) = 'acbaabbbaaaaacc';

নমুনা আউটপুট:

a=5
c=2
b=3

আমি এখানে আগে একটি এসকিউএল সমাধান দেখেছি বলে মনে হয় না। মজাদার.
সেয়ারিয়া

strপরিবর্তে, ফাংশন বিবেচনা করুন ltrim@একটি চর সংরক্ষণ করার জন্য আপনি নিজের ভেরিয়েবলের নামও রাখতে পারেন । এটি আপনাকে iআরসিটিতে পরিবর্তনশীল হারাতে সহায়তা করে । আমি মনে করি আপনি বেশ কয়েকটি অক্ষর শেভ করতে পারেন। আপনি উইন্ডোটিং ফাংশনটি সারিগুলির চেয়েও আগের সারি বা পিছনের পিছনে যোগফলের সাহায্যে ক্যোয়ারীটি পুনরায় লিখতে সক্ষম হতে পারেন। আমি এখনও আপনি কিছু মনে করেনি কিভাবে গঠন করেনি।
মাইকেল বি

@ মিশেলবি পরামর্শের জন্য ধন্যবাদ। টিআর () এর সাথে আমার যে সমস্যাটি হ'ল তা হ'ল এটি অতিরিক্ত স্থানের একগুচ্ছ ফলাফল দেয়। আমি অবশ্যই @ পরিবর্তনশীল হিসাবে ব্যবহার শুরু করব!
comfortablydrei

এটি সত্য যে strসর্বদা 10 টি অক্ষরকে আউটপুট করে তবে এটি গল্ফ করে: পি
মাইকেল বি

1

হাস্কেল - 113 120 বাইট

import Data.List
main=interact$show.map(\s@(c:_)->(c,length s)).sort.nubBy(\(a:_)(b:_)->a==b).reverse.sort.group

পরীক্ষিত

$ printf "acbaabbbaaaaacc" | ./sl
[('a',5),('b',3),('c',2)]

.ল্যাম্বডা তৈরি করা এড়ানোর জন্য আপনি (রচনা) ফাংশনটি ব্যবহার করতে পারেন যেখানে $সংযুক্ত ফাংশনগুলির একটি শৃঙ্খলের সমাপ্তির পরে প্যারামিটারটি কেবল উপস্থিত হয় । এটি করার জন্য, কেবল সব পরিবর্তন $করতে গুলি .: S (উদাহরণস্বরূপ (\i->reverse$sort$group i)মধ্যে সক্রিয় reverse.sort.group
YawarRaza7349

1

জাভাস্ক্রিপ্ট [৮৩ বাইট]

prompt().match(/(.)\1*/g).sort().reduce(function(a,b){return a[b[0]]=b.length,a},{})

ব্রাউজার কনসোলে এই কোডটি চালান।

ইনপুট করার জন্য " acbaabbbaaaaacc" কনসোলের আউটপুট "হওয়া উচিত Object {a: 5, b: 3, c: 2}


1

জাভাস্ক্রিপ্ট - 91

for(i=0,s=(t=prompt()).match(/(.)\1*/g);c=s[i++];)t.match(c+c[0])||alert(c[0]+'='+c.length)

সম্পাদনা: আমার প্রথম সমাধানটি বিধিগুলি মান্য করে, তবে এটি abab=> এর মতো একাধিকবার একক অক্ষরের ছাপে a=1,b=1,a=1,b=1তাই আমার প্রথমটির সাথে সন্তুষ্ট নয় তাদের জন্য আমি এই ( 101 টি অক্ষর) নিয়ে এসেছি:

for(i=0,s=(t=prompt()).match(/((.)\2*)(?!.*\1)/g);c=s[i++];)t.match(c+c[0])||alert(c[0]+'='+c.length)

0

জুলিয়া, 85

f(s)=(l=0;n=1;a=Dict();[c==l?n+=1:(n>get(a,l,1)&&(a[l]=n);n=1;l=c) for c in s*" "];a)
julia> f("acbaabbbaaaaacc")
{'a'=>5,'c'=>2,'b'=>3}

0

পাইথন 3 - 111, 126, 115 114 111 বাইট

কার্যকরযোগ্য কোড যা ১ টি লাইন পড়বে (কেবলমাত্র ছোট অক্ষর এজে ব্যবহার করবে)

d={}.fromkeys(map(chr,range(97,123)),0)
for c in input():d[c]+=1
[print("%s=%d"%(p,d[p]))for p in d if d[p]>0]

সম্পাদনা: @ থেরের অনুরোধে অপ্রয়োজনীয় আউটপুট বাদ দেওয়া হয়েছে

আউটপুট সুন্দর দেখাচ্ছে

~/codegolf $ python3 maxseq.py 
helloworld
l=3
o=2
h=1
e=1
d=1
w=1
r=1

আপনার সত্যই অপ্রয়োজনীয় আউটপুট বাদ দেওয়া উচিত। (আমি মনে করি)
seequ


আপনি ধনুর্বন্ধনী, সংখ্যা এবং যেমন কীওয়ার্ড, মধ্যে শূণ্যস্থান অপসারণ করতে পারেন forবা if
seequ

3
আমি মনে করি আপনি প্রশ্নগুলি ভুলভাবে পড়েছেন। l=2এবং o=1"
হেলিওর্ল্ড

4
আপনি সর্বাধিক পরপর উপস্থিতির পরিবর্তে মোট উপস্থিতি গণনা করছেন।
xnor

0

জাভাস্ক্রিপ্ট - 141 137 125

আমি রেইগেক্স পছন্দ করি না :)

function g(a){i=o=[],a=a.split('');for(s=1;i<a.length;){l=a[i++];if(b=l==a[i])s++;if(!b|!i){o[l]=o[l]>s?o[l]:s;s=1}}return o}

চালান

console.log(g("acbaabbbaaaaacc"));

আউটপুট

[ c: 2, a: 5, b: 3 ]

0

জাভাস্ক্রিপ্ট, 109 104 100 98 বাইট

function c(s){q=l={};s.split('').map(function(k){q[k]=Math.max(n=k==l?n+1:1,q[l=k]|0)});return q}

ব্যবহারের উদাহরণ:

console.log(c("aaaaaddfffabbbbdb"))

আউটপুট:

{ a: 5, d: 2, f: 3, b: 4 }

0

পিএইচপি, 104 102 96

<?php function _($s){while($n=$s[$i++]){$a[$n]=max($a[$n],$n!=$s[$i-2]?$v=1:++$v);}print_r($a);}

ব্যবহার

_('asdaaaadddscc');

মুদ্রিত

Array ( [a] => 4 [s] => 1 [d] => 3 [c] => 2 )

0

জাভা 247

import java.util.*;public class a{public static void main(String[]a){Map<Character, Integer> m = new HashMap<>();for(char c:a[0].toCharArray()){Integer v=m.get(c);m.put(c,v==null?1:v+1);}for(char c:m.keySet())System.out.println(c+"="+m.get(c));}}

কি import java.util.*;জাভা কাজ করে?
seequ

হ্যাঁ এবং আমি পুরানো কোডটি পেস্ট করেছি
user902383

ওপি জানিয়েছে এটি কেবল একটি ফাংশন / পদ্ধতি হতে পারে যাতে আপনি এটিকে সহজ পদ্ধতিতে সংক্ষিপ্ত করতে পারেন।
রুডি কারশওয়া

এটি স্ট্রিং-এর চরিত্রের সমস্ত উপস্থিতিকে ছাড়িয়ে যায়, চরিত্রটি নিয়ে দীর্ঘতম সাবস্ট্রিংগুলি নয়। উদাহরণস্বরূপ, এর পরিবর্তে acbaabbbaaaaaccআউটপুট । a=8; b=4; c=3a=5; b=3; c=2
কেভিন ক্রুইজসেন

0

সি 169

ASCII টেবিলের প্রতিটি মুদ্রণযোগ্য অক্ষরকে চিহ্নিত করে এবং ইনপুট স্ট্রিং থেকে সর্বাধিক গণনা করে।

#define N 128
int c,i,n;
char Y[N],*p;
int main(){gets(Y);
for(c=33;c<127;c++){p=Y;n=0,i=0;while(*p){if(*p==c){i++;}else{n=(i>n)?i:n;i=0;}p++;}
if(n>0) printf("%c=%d\n",c,n);}
}

আপনি কি এটি পরীক্ষা করেছেন? দেখে মনে হচ্ছে না এটি অনেকগুলি স্ট্রিংয়ের উপর সঠিক আউটপুট তৈরি করে, এবং সেই অনুমানের সাথেও মিলছে না যে বলে যে ইনপুট 1024 দীর্ঘ পর্যন্ত হতে পারে ... আরও অনেকগুলি সহজ গল্ফিং কৌশল রয়েছে যা আপনি মিস করেছি। :)
ফ্লাফি

0

জাভাস্ক্রিপ্ট 116

prompt(x={}).replace(/(.)\1*/g,function(m,l){n=m.length
if(!x[l]||x[l]<n)x[l]=n})
for(k in x)console.log(k+'='+x[k])

0

গ্রোভি - 80 টি অক্ষর

উপর ভিত্তি করে এই চালাক উত্তর দ্বারা xnor :

t=args[0];t.toSet().each{i=0;
while(t.contains(it*++i));
println "${it}=${i-1}"}

আউটপুট:

$ groovy Golf.groovy abbcccdddd
d=4
b=2
c=3
a=1

Ungolfed:

t=args[0]

t.toSet().each { c ->
    i=0
    s=c

    // repeat the char c with length i
    // e.g. "b", "bb", "bbb", etc
    // stop when we find a length that is not in t:
    // this is the max + 1
    while (t.contains(s)) {
        i++
        s=c*i
    }
    println "${c}=${i-1}"
}

এটি কি সর্বাধিক ক্রম দৈর্ঘ্য গণনা করে? আমি দেখতে পাচ্ছি না যে কীভাবে এটি "আবাব্ব্বাআআআববিবিবা" এর মতো স্ট্রিংয়ের জন্য সঠিকভাবে কাজ করবে যদিও আমি গ্রোভিকেও জানি না।
ফ্লফি

এটি আপনার উদাহরণের জন্য কাজ করে। আমি অবারিত সংস্করণ আপডেট করেছি। নোট করুন যে "এ" * 4 == "আআআআ"।
মাইকেল ইস্টার

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