লোভী কাটার


27

আইবুগ সাম্প্রতিক, এখনও মূল্যবান উপকরণ দিয়ে তৈরি একটি দীর্ঘ বার পেয়েছে। বারটি এত দীর্ঘ যে আইবুগ সহজেই ক্রেডিটগুলির জন্য এটি বিক্রি করতে পারে না, তাই তিনি এটি কাটতে চান। বারটি এমন ভঙ্গুর এবং যাদুযুক্ত উপাদানের দ্বারা তৈরি যা যদি কোনও অংশটি ভাঙা হয় তবে একই উপাদান দিয়ে তৈরি বারের সমস্ত অংশও ভেঙে যায়, ফলে নির্বিচারে কাটা শক্ত হয়ে যায়।

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

আইবুগের ম্যাজিক বারটি স্ট্রিং হিসাবে উপস্থাপিত হয় (বা একটি অ্যারে বা আপনি যদি পছন্দ করেন তবে অক্ষরের অনুক্রম), এর মতো:

aaabbccccccbbbaaacccccaabbbaaaaa

স্ট্রিংয়ের প্রতিটি অক্ষর একটি যাদু উপাদান প্রতিনিধিত্ব করে। বারটি সর্বদা RegEx এর সাথে মিলে যায় ^\w*$তাই বারে 63৩ টি পর্যন্ত সামগ্রী থাকতে পারে। একটি "অংশ" কোনও অক্ষরের ক্রমাগত ক্রম যা স্পেস দ্বারা পৃথক নয় ence

iBug আপনাকে এমন একটি প্রোগ্রাম লিখতে চায় যা সে পেতে পারে এমন সর্বাধিক অংশ গণনা করে, যদি শূন্য বা আরও বেশি অক্ষর সেটগুলি পুরোপুরি সরিয়ে ফেলা হয় (স্পেস দ্বারা প্রতিস্থাপিত), এবং সেই নম্বরটি iBug কে বলুন।


উদাহরণ 1:

In:  aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4

বিবরণ: যদি bবার থেকে পুরোপুরি সরানো হয় তবে আইব্যাগ 4 টি অংশ পেতে পারে। তিনি অপসারণ করে bএবং 4 টি অংশ পেতে পারেন c, যেমন নীচে দেখানো হয়েছে

aaabbccccccbbbaaacccccaabbbaaaaa  # Original string
aaa  cccccc   aaacccccaa   aaaaa  # Remove 'b'
aaa           aaa     aa   aaaaa  # Remove 'b' and 'c'

এবং এই বারটি থেকে আইব্যাগটি সর্বাধিক সংখ্যক অংশ পেতে পারে

উদাহরণ 2:

In:     111aa___9999____aaa99111__11_a_aa999
Result: 111aa   9999    aaa99111  11 a aa999
Out:    6

বিবরণ: কেবল আন্ডারস্কোরটি সরিয়ে আইবুগ বার থেকে 6 টি অংশ পেতে পারে এবং এটি সর্বোচ্চ।

উদাহরণ 3:

In:  __________
Out: 1

বর্ণনা: কি? আপনি এই কাটা চান? আপনি যদি এটি একেবারে কাটা না করেন তবে 1 অংশ পাওয়া সম্ভব possible

উদাহরণ 4:

In:  
Out: 0

বর্ণনা: কাটার কিছুই নেই, তাই শূন্য।


কিছু নিয়ম রয়েছে যা আইবুগ প্রোগ্রামগুলি মান্য করতে চায়:

  1. আইবুগ স্ট্যান্ডার্ড লুফোলগুলি অপছন্দ করে এবং সেগুলি নিষিদ্ধ।

  2. যতক্ষণ না এটি কাজ করে, ততক্ষণ পুরো প্রোগ্রাম হওয়ার দরকার নেই। একটি ফাংশন যা প্যারামিটার থেকে ইনপুট নেয় এবং রিটার্ন মান দিয়ে আউটপুট দেয় তাও গ্রহণযোগ্য accepted

  3. নমনীয় ইনপুট এবং আউটপুট অনুমোদিত। আপনার প্রোগ্রাম বা ফাংশনটি স্ট্রিং, বা অক্ষরের একটি অ্যারে বা আপনি যেটিকে মোকাবেলা করতে সবচেয়ে সহজ মনে করেন তা নিতে পারে। আপনি সংখ্যাটি মুদ্রণ করে বা এটি ফেরত দিয়ে আউটপুট দিতে পারেন।


নমুনা পরীক্ষার কেসগুলি (তবে এগুলিতে সীমাবদ্ধ নয়)

aaabbbaaa           = 2
123456789           = 5
AaAaAaAa            = 4
aaabcccdedaaabefda  = 6
________            = 1
(empty)             = 0

যেহেতু এটি একটি , তাই প্রতিটি ভাষার মধ্যে সংক্ষিপ্ততম প্রোগ্রাম (বাইটে) জিতে!


অতিরিক্ত

আপনি যদি আপনার প্রোগ্রামটির জন্য ব্যাখ্যা সরবরাহ করতে পারেন তবে এটি আপনার স্কোরিংকে প্রভাবিত করে না (যদিও এটি এখনও বাইটে দৈর্ঘ্য) iBug আপনাকে অত্যন্ত প্রশংসা করে।


2
কিভাবে 123456789ফলন হয় 5? এবং কিভাবে aaabcccdedaaabefdaফলন 6? এই দুটি পরীক্ষার ক্ষেত্রে আমি যথাক্রমে 2 এবং 4 পাই get
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার প্রথমটির জন্য, অপসারণ করুন 2468, দ্বিতীয়টির জন্য, সরান bd
মার্টিন এন্ডার

@MartinEnder ওহ তাই কোনো subsequence ফেলা যায়? যদি কোনও চরিত্র সম্পূর্ণরূপে অপসারণ করা হয় অন্যথায় প্রস্তাবিত।
মিঃ এক্সকোডার 10

1
@ মিঃ এক্সকোডার, যদি আমি চ্যালেঞ্জটি সঠিকভাবে বুঝতে পারি তবে আপনি 2,4,6,8প্রথম b,d,fথেকে দ্বিতীয়টি সরিয়ে ফেলবেন ।
শেগি

2
@ মিঃ এক্সকোডার এর অর্থ অক্ষরের কোনও সেটের সমস্ত অনুলিপি অপসারণ করা। আমি মনে করি কাজের উদাহরণটি এটি বেশ ভালভাবে দেখায়।
মার্টিন এন্ডার

উত্তর:


8

হাস্কেল , 73 71 70 বাইট

x#z|z==x=' '|1<2=z
f x=maximum$length(words x):[f$(c#)<$>x|c<-x,c>' ']

লাইকনি ধন্যবাদ 1 বাইট সংরক্ষণ করার জন্য!

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


1
maximum$(length$words x):সংক্ষিপ্ত করা যেতে পারে maximum$length(words x):
লাইকনি

6

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

f=s=>Math.max((s.match(/\s+/g)||[]).length,...[...s].map(c=>c>` `&&f(s.split(c).join` `)))
<input oninput=o.textContent=/\s/.test(this.value)?``:f(this.value)><pre id=o>0

123456789পরীক্ষার ক্ষেত্রে কিছুটা ধীর গতিতে । পূর্ববর্তী 109-বাইট উত্তর সীমাবদ্ধ ছিল না !/\s/:

f=
s=>(g=a=>Math.max(a.filter(s=>s).length,...[...a.join``].map(c=>g([].concat(...a.map(s=>s.split(c)))))))([s])
<input oninput=o.textContent=f(this.value)><pre id=o>0



@ অ্যাসুনটুইহিদ ওহ, আমি চরিত্রের সেটটিতে বিধিনিষেধটি দেখিনি; আমার কোড মোটেও কোনও স্ট্রিংয়ের জন্য কাজ করে।
নীল

একমাত্র চরিত্রের জন্য এটি কাজ করতে হবে না এটি স্থান নয়?
অসোন তুহিদ

@ অ্যাসোনটিহিড আপনার পোর্টটি কেবল সেই চরিত্রগুলির জন্যই কাজ করে যা এর জন্য কাজ করা দরকার; আপনার আসলটি স্পেস ব্যতীত অন্য কোনও কিছুর জন্য কাজ করে বলে মনে হচ্ছে।
নীল

আপনার মূল উত্তরটি কোনটি নয় এমনটির জন্য নতুন অক্ষরগুলি কাজ করে?
অসোন তুহিদ

4

পাইথন 2 , 111 93 72 বাইট

-21 বাইট ধন্যবাদ ক্যারিল এল।

f=lambda s:max([len(s.split())]+[f(s.replace(c,' '))for c in s if'/'<c])

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


দেখে মনে হচ্ছে যে বর্তমানে জেএস এবং রুবি ব্যবহার করেছেন এটি পাইথনের পক্ষেও বেশ ভাল কাজ করে: 73 বাইট
ক্যারিল এল

@KirillL। সুপারিশের জন্য ধন্যবাদ
ovs

3

জেলি ,  13  11 বাইট

অনেকগুলি 2 বাইট নির্দেশাবলী
-2 Zgarb কে ধন্যবাদ (বাইরের পণ্যটি দ্রুত ব্যবহার করুনþ> <<)

eþŒPŒr¬S€ṀḢ

একটি মোনাডিক লিঙ্ক অক্ষরগুলির একটি তালিকা গ্রহণ করে এবং অ-নেতিবাচক পূর্ণসংখ্যাকে প্রত্যাবর্তন করে।

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

কিভাবে?

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

eþŒPŒr¬S€ṀḢ - Link: list of characters        e.g. "aabcde"
  ŒP        - power-set - gets all subsequences    ["","a","a","b",...,"bd",...,"aabcde"]
 þ          - outer-product with:
e           -   exists in?                         [[0,0,0,0,0,0],[1,1,0,0,0,0],[1,1,0,0,0,0],[0,0,1,0,0,0],..,[0,0,1,0,1,0]...,[1,1,1,1,1,1]]
    Œr      - run-length encode                    [[[0,6]],[[1,2],[0,4]],[[1,2],[0,4]],[[0,2],[1,1],[0,3]],...,[[0,2],[1,1],[0,1],[1,1],[0,1]],...,[[1,6]]]
      ¬     - NOT                                  [[[1,0]],[[0,0],[1,0]],[[0,0],[1,0]],[[1,0],[0,0],[1,0]],...,[[1,0],[0,0],[1,0],[0,0],[1,0]],...,[[0,0]]]
        €   - for €ach:
       S    -   sum                                [[1,0],[1,0],[1,0],[2,0],...,[3,0],...,[0,0]]
         Ṁ  - maximum                              [3,0]
          Ḣ - head                                 3

আমার মনে হয় €Đ€হতে পারে þ
জাগারব

3

রুবি , 98 89 75 64 61 বাইট

f=->s{[s.split.size,*s.scan(/\w/).map{|c|f[s.tr c,' ']}].max}

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

আগের চেয়ে ছোট আর ধীর!

মূলত @ নীলের জাভাস্ক্রিপ্ট উত্তরের একটি বন্দর

অবহেলিত এবং এ্যানোটেটেড

def f(input_string)
    # splits by / +/ by default
    size0 = input_string.split.size
    # an array of all non-space characters in input_string
    characters = input_string.scan(/\w/)
    size1 = characters.map {|i|
        # all letters and digits and _ are "bigger" than /, space isn't
        if i > '/'
            # tr replaces every occurrence of i in input_string with space
            next_string = input_string.tr(i, ' ')
            f(next_string) # recursive call
        else
            0
        end
    }
    # max value between size0 and any element in size1
    return [size0, *size1].max
end

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


2

হুশ , 12 11 বাইট

▲mȯ#€0gM€¹Ṗ

এটি অনলাইন চেষ্টা করুন! এটি নিষ্ঠুর শক্তি দ্বারা কাজ করে এবং বেশ ধীর। যোগ uডান শেষ এটি দ্রুত চালানোর জন্য, করতে শব্দার্থবিদ্যা পরিবর্তন না করে।

ব্যাখ্যা

▲mȯ#€0gM€¹Ṗ  Implicit input, say S = "abddccbdcaab"
          Ṗ  Powerset of S: P = ["","a","b","ab","d","ad"...,"abddccbdcaab"]
 m           Map this function over P:
              Argument is a subsequence, say R = "acc"
       M ¹    Map over S
        €     index of first occurrence in R: [1,0,0,0,2,2,0,0,2,1,1,0]
      g       Group equal elements: [[1],[0,0,0],[2,2],[0,0],[2],[1,1],[0]]
  ȯ#          Count the number of groups
    €0        that contain 0: 3
▲            Take maximum of the results: 4

2

পার্ল 5 , (পুরানো সংস্করণ) -p -I., 52 49 43 বাইট

পুরানো শৈলীর গণনা: এর +3জন্য -p: 46বাইটস (কারণ এটি অবশ্যই কোনও প্রোগ্রামে থাকা উচিত , এটি ব্যবহার করে চালানো যায় না -e)

barsplit.pl:

#!/usr/bin/perl -pI.
$G[split]+=s%\S%do$0for s/$&/ /rg%eg;$_=$#G

STDIN এ স্ট্রিং সহ চালান:

echo aaabcccdedaaabefda | ./barsplit.pl; echo

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

-I.বিকল্প সাম্প্রতিক perls এই এছাড়াও কাজ যেখানে ডিফল্টরূপে সেখানে করা হয় .মধ্যে আর নেই @INC। পার্লের পুরানো সংস্করণগুলিতে সেই বিকল্পটির প্রয়োজন নেই। আমি এটি পরীক্ষা করেছিলাম যে এখনও পুরানো মেশিনে এখনও রয়েছে perl 5.20, সুতরাং স্কোরটি এর উপর ভিত্তি করে তৈরি করা হয়েছে (অন্যথায় আমার পক্ষে .যুক্তিও গণনা করা উচিত -I)

দ্রুত সংস্করণ ( 49বাইট):

#!/usr/bin/perl -pI.
$G[split]+=s%.%$$_++||do$0for s/$&/ /rg%eg;$_=$#G

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