স্ট্রিং প্রতিরূপকারী


15

ভিমে আপনি কোনও কমান্ডের সংখ্যার সাথে পূর্ববর্তী করে পুনরাবৃত্তি করতে পারেন, এর 3ddসমতুল্য dd dd dd। ভাল, এই পুনরাবৃত্তি প্যাটার্নটি Vim কমান্ডগুলির মধ্যে সীমাবদ্ধ নয়। স্ট্রিংটিও এইভাবে প্রতিলিপি করা যেতে পারে।

স্পেসিফিকেশন:

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

  • প্রতিটি "শব্দ" এর মধ্যে অঙ্ক এবং বর্ণমালা থাকে। কোনও বর্ণের আগে যদি কোনও সংখ্যার আগে থাকে (কোনও সংখ্যায় একাধিক সংখ্যা হতে পারে, বা সংখ্যাটি শূন্য হয়), নির্দিষ্ট সময়ের জন্য সেই চিঠিটি পুনরাবৃত্তি করুন। উদাহরণ স্বরূপ:

    a2bc -> abbc
    3xx1yz -> xxxxyz
    10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero
    2A2a2A2a -> AAaaAAaa
    
  • শব্দ স্পেস দ্বারা পৃথক করা হয়। প্রতি দুটি সংলগ্ন শব্দের মধ্যে সর্বাধিক এক স্পেস রয়েছে।

সহজ, তাই না? অতিরিক্ত জিনিস এখানে:

  • জায়গার আগে যদি সংখ্যা থাকে তবে প্রদত্ত সময়ের জন্য পরবর্তী শব্দটি পুনরাবৃত্তি করুন। নম্বরটি সর্বদা পূর্ববর্তী শব্দের শেষে বা স্ট্রিংয়ের শুরুতে সংযুক্ত থাকবে। উদাহরণ:

    a2bc3 2d -> abbc dd dd dd
    3 3a -> aaa aaa aaa
    33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    0 abcd0 efgh3 2x -> xx xx xx
    a3 0xc b -> a c c c b
    
  • যদি খালি শব্দের পুনরাবৃত্তি করা উচিত তবে এক সারি একাধিক স্পেস আউটপুট করবেন না। তাদের স্কোয়াশ:

    a3 0x2 b -> a b b   # NOT 'a    b b'
    

    অন্য কথায়, আপনার প্রোগ্রামটি কখনই দুটি স্থান একসাথে আউটপুট করা উচিত নয়।

  • ইনপুট কখনই খালি থাকে না, তবে আউটপুটটি খালি খালি হওয়া প্রয়োজন হয় না:

    0 3x -> (empty)
    
  • ইনপুট এবং আউটপুট যে কোনও পছন্দসই পদ্ধতিতে নেওয়া যেতে পারে। আর্গুমেন্ট থেকে ইনপুট নেওয়া এবং রিটার্ন মানগুলির মাধ্যমে আউটপুট প্রদান করা একটি ফাংশনও গ্রহণযোগ্য।

    যদি এটি কোনও প্রোগ্রাম হয় তবে এটি ত্রুটি সহ প্রস্থান করতে হবে না (অর্থাত্ ফেরতের মান শূন্য)।

  • সংখ্যাগুলি সর্বদা দশমিক হয়, এবং কখনই শূন্যের সাথে শুরু হয় না, যদি না সংখ্যাটি নিজেই শূন্য হয়, এক্ষেত্রে কেবল একটি শূন্য থাকে। অর্থাৎ আপনাকে ইনপুট হিসাবে বিবেচনা করার 077aবা দেওয়ার দরকার নেই 000a

  • সমস্ত সংখ্যা 2 ^ 31 (2,147,483,648) এর নীচে। সর্বাধিক আউটপুট দৈর্ঘ্য 2 ^ 32 (4,294,967,296) বাইটের নিচে।

  • প্রোগ্রামটি optionচ্ছিকভাবে একটি ট্রেলিং স্পেস এবং / অথবা একটি ট্রেলিং নতুন লাইনের আউটপুট দিতে পারে। এই স্থান এবং নিউলাইন আউটপুট এর বৈধতা প্রভাবিত করে না। এমনকি সঠিক আউটপুট খালি হওয়া উচিত, একটি নতুন লাইনের পরে একটি স্থানের আউটপুট যোগ্যতা অর্জন করবে।

সংক্ষেপে, একটি বৈধ ইনপুট এই নিয়মিত প্রকাশের সাথে মেলে:

([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)

এবং একটি বৈধ আউটপুট জন্য:

([A-Za-z]+)( [A-Za-z]+)*( ?\n?)

নমুনা পরীক্ষার কেস:

abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc

এটি একটি , তাই প্রতিটি ভাষার বাইটে সংক্ষিপ্ততম প্রোগ্রামটি জিততে পারে!


3
.... "প্রোগ্রাম ত্রুটি সহ প্রস্থান করতে হবে না" "ইনপুট অবশ্যই চরিত্রের তালিকা হিসাবে দেওয়া উচিত নয় ..." কোনও বিশেষ কারণ? (যেমন আপনি আগেই জানতেন) আমরা সাধারণত নমনীয় আই / ও ফর্ম্যাটটিকে অনুমতি দিই।
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 আমি উত্তরোত্তরগুলি সরিয়ে নেওয়ার বিষয়টি বিবেচনা করছি। প্রোগ্রামের প্রস্থান ফলাফলের জন্য আমি এটি রাখতে চাই। সম্পাদনা : সম্পন্ন
আইবুগ



আমি মনে করি a3 0xc b-> এর মতো একটি পরীক্ষা a c c c bযুক্ত করা উচিত, কারণ আমার কাছে প্রাথমিকভাবে এমন কোড ছিল যা উপরের সমস্ত পরীক্ষার ক্ষেত্রে কাজ করেছিল, তবে সেটির জন্য সঠিকভাবে কাজ করে নি।
ব্র্যাড গিলবার্ট বিবিগিল

উত্তর:



2

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

{$_=$^a;s:g/(\d+):(\w)/{$1 x$0||'_'}/;s:g/(\d+)\s([\w& \D]+)/ {$1 xx$0}/;~S:g/_//.words}

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

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

{ # bare block lambda with placeholder parameter 「$a」

  # store a copy of the argument in 「$_」
  # (shorter than 「-> $_ is copy {…}」)
  $_ = $^a;
  # note that 「$_」 is the default scalar,
  # and many things operate on it by default (like 「s///」)


  # do the character repeats
  s :global
  /

    (\d+)           # repeat count
    :               # don't backtrack (prevents it from matching word repeats)
    (\w)            # character to repeat

  /{

    $1 x $0         # do the repeat

    || '_'          # replace with 「_」 if the repeat was 0 (matched by [\w & \D])
                    # this is so “words” don't get removed yet

  }/;


  # do the word repeats
  s :global
  /

    (\d+)           # repeat count

    \s              # shortest way to match a space

    ([
      \w & \D       # word character and not a digit (doesn't match next repeat)
    ]+)             # match that at least once

  / {               # add a space (as we removed it by matching it)

    $1 xx $0        # list repeat (adds a space between values when stringified)

  }/;


  # the following is the result
  ~                 # stringify (adds spaces between values in a list) # (3)
    S :global /_//  # remove all _ not in-place                        # (1)
    .words          # get a list of words                              # (2)
}

~(…).wordsসমন্বয় বিদেশী স্পেস, যা দরকারী হলে একটি "শব্দ" সরানো সরিয়ে ফেলা হয়।


1

পাইথন 2, 286 275 260 257 238 বাইট

-19 বাইটস ovs ধন্যবাদ

def f(s,j=' '.join):exec"s=s.split(%s[-1]):s[i]=s[i][:-1];s[i-1]=j([s[i-1]]*int(w[-1]))\ns=list(j(s[::-1])%s):s[i]='';s[i-1]*=int(w)\nprint j(''.join(s[::-1]).strip().split())"%((')[::-1]\nfor i,w in enumerate(s):\n if str.isdigit(w',)*2)

f আর্গুমেন্ট হিসাবে একটি স্ট্রিং নেয় এবং বিন্যাসিত স্ট্রিংটি মুদ্রণ করে।

পরীক্ষার ক্ষেত্রে একটি repl.it এখানে

অবরুদ্ধ কোড:

def f(s, j=' '.join):
    s = s.split()[::-1]
    for i, w in enumerate(s):
        if str.isdigit(w[-1]):
            s[i] = s[i][:-1]
            s[i - 1] = j([s[i - 1]] * int(w[-1]))
    s = list(j(s[::-1]))[::-1]
    for i, w in enumerate(s):
        if str.isdigit(w):
            s[i] = ''
            s[i - 1] *= int(w)
    print j(''.join(s[::-1]).strip().split())

এখনও উন্নতি নিয়ে কাজ করছি।



ধন্যবাদ @ ধন্যবাদ বিশ্বাস করতে পারি না যে আমি নতুন execলাইনটি পরিত্রাণ পাওয়ার কথা ভাবিনি এবং এর জন্য ইনডেন্ট , কারণ এটি ফাংশনের একমাত্র লাইন।
nog642



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