সমস্ত "উদ্ধৃত" অক্ষরের মোট দৈর্ঘ্য মুদ্রণ করুন


13

বিধি

এই চ্যালেঞ্জে, আমি "উদ্ধৃতি" এর সংজ্ঞাটি কিছুটা নতুনভাবে সংজ্ঞায়িত করতে যাচ্ছি।

  • উদ্ধৃতি চিহ্ন (একেএ কোটস ) হ'ল প্রত্যক্ষ বক্তৃতা, একটি উদ্ধৃতি বা একটি বাক্যাংশ স্থাপনের জন্য বিভিন্ন লেখার সিস্টেমে জোড়ায় ব্যবহৃত কোনও একই অক্ষর । এই জুটিতে একটি খোলার উদ্ধৃতি চিহ্ন এবং একটি সমাপ্ত উদ্ধৃতি চিহ্ন থাকে, যা একই অক্ষর (কেস-সংবেদনশীল)।

  • যদি কোট-জুটি একে অপরকে ওভারল্যাপ করে থাকে,

    • যদি একটি জুড়ি অন্যকে বাসা বেঁধে রাখে তবে উভয় জোড়া বৈধ।
    • যদি একটি জুটি অন্যকে বাসা বাঁধে না, তবে প্রথম শুরুর জুটিটি বৈধ থাকবে। অন্যটিকে আর জুড়ি হিসাবে বিবেচনা করা হয় না।
  • উদ্ধৃতিযুক্ত অক্ষর (উদ্ধৃতিগুলির এক জোড়া দৈর্ঘ্য) গণনা করার সময়,

    • উদ্ধৃতিগুলি তাদের গণনা করা হয় না।
    • প্রতিটি জোড়ের দৈর্ঘ্য স্বাধীনভাবে গণনা করা হয়। ওভারল্যাপিং অন্যটিকে প্রভাবিত করে না।

লক্ষ্য

আপনার লক্ষ্য হ'ল সমস্ত বৈধ উদ্ধৃতিগুলির মোট দৈর্ঘ্য মুদ্রণ করা। এটি কোড গল্ফ, অতএব সবচেয়ে কম বাইটের সাথে কোডটি জয়ী।

উদাহরণ

Legend:
    <foo>: Valid quotes
    ^    : Cannot be paired character

Input   : ABCDDCBA
`A`  (6): <BCDDCB>
`B`  (4):  <CDDC>
`C`  (2):   <DD>
`D`  (0):    <>
Output  : 12

Input   : ABCDABCD
`A`  (3): <BCD>
`B`  (0):  ^   ^
`C`  (0):   ^   ^
`D`  (0):    ^   ^
Output  : 3

Input   : AABBBBAAAABA
`A`  (0): <>    <><> ^
`B`  (0):   <><>    ^
Output  : 0

Input   : ABCDE
Output  : 0

Input   : Print the total length of all "quoted" characters
`r` (40):  <int the total length of all "quoted" cha>
`n` (14):    <t the total le>
`t` (15):     < >   <o>       <h of all "quo>
` `  (7):      ^   <total>      <of>   ^        ^
`h`  (0):        ^             ^                  ^
`e`  (8):         < total l>                 ^          ^
`o`  (0):            ^           ^         ^
`a`  (0):              ^            ^              ^ ^
`l`  (0):               ^ ^          <>
`"`  (0):                               ^      ^
`c`  (0):                                        ^    ^
Output  : 84

Input   : Peter Piper picked a peck of pickled peppers
`P`  (5): <eter >
`e`  (9):  <t>     ^      <d a p>           <d p>  ^
`r`  (0):     ^     ^
` `  (3):      ^     ^      <a>    <of>       ^
`i`  (5):        <per p>
`p`  (3):         <er >        ^       ^       ^ <>
`c`  (8):               <ked a pe>       ^
`k`  (7):                ^        < of pic>
`d`  (0):                  ^                 ^
Output  : 40

Input   : https://www.youtube.com/watch?v=dQw4w9WgXcQ
`h` (27): <ttps://www.youtube.com/watc>
`t`  (0):  <>            ^          ^
`/`  (0):       <>               ^
`w` (14):         <><.youtube.com/>         <4>
`.`  (7):            <youtube>
`o`  (0):              ^       ^
`u`  (1):               <t>
`c`  (0):                     ^      ^             ^
`Q`  (8):                                  <w4w9WgXc>
Output  : 57

পছন্দ করুন আমি মনে করি এটিই আপনি প্রত্যাশা করেছিলেন। আপনি কি এটি পর্যালোচনা করতে পারেন?
ব্যবহারকারী2652379

1
ভাল লাগছে! আমার প্রতিক্রিয়া শোনার জন্য ধন্যবাদ।
নিক কেনেডি

উত্তর:



4

এপিএল (ডায়ালগ ইউনিকোড) , 36 বাইট এসবিসিএস

পুরো প্রোগ্রাম। স্টিডিন থেকে ইনপুট দেওয়ার জন্য অনুরোধ জানানো হয়।

≢∊t⊣{t,←'(.)(.*?)\1'S'\2'⊢⍵}⍣≡⍞⊣t←⍬

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

t←⍬ একটি সঁচায়ক সেট আপ t(জন্য টি otal)

⍞⊣ স্টিডিন থেকে স্ট্রিং ইনপুটের পক্ষে এটি বাতিল করুন (প্রতীক: কনসোলে উদ্ধৃতি)

{}⍣≡ স্থিতিশীল না হওয়া পর্যন্ত নিম্নলিখিত বেনামে ল্যাম্বডা প্রয়োগ করুন (ফিক্স-পয়েন্ট; পূর্ববর্তী ≡ পরবর্তী)

⊢⍵ তর্ক উপর

 … নিম্নলিখিত ⎕S'\2' পিসিআর এস এরচ , প্রতিটি ম্যাচের জন্য গ্রুপ 2 ফেরত:

  (.) যে কোনও চরিত্র (আমরা এই গ্রুপটিকে 1 বলব)
  (.*?) যতটা সম্ভব অক্ষর (আমরা এই গ্রুপটি 2 বলব)
  \1 গ্রুপ 1 অক্ষর

t,←tএটি tবর্তমান মান হিসাবে সংযোজন দ্বারা  আপডেট করুন

t⊣ এর পক্ষে (কোনও মিলের চূড়ান্ত তালিকা) বাতিল করুন t

 যে অক্ষরের সংখ্যা গণনা করুন


2

রুবি , 49 বাইট

পুনরাবৃত্তির সমাধান। উদ্ধৃতি গোষ্ঠীগুলি সন্ধান করুন, তাদের দৈর্ঘ্যগুলি গণনা করুন এবং তারপরে পুনরাবৃত্তভাবে উপ-গ্রুপের দৈর্ঘ্যের সন্ধান করুন এবং একসাথে সমস্ত কিছু যোগ করুন।

f=->s{s.scan(/(.)(.*?)\1/).sum{|a,b|b.size+f[b]}}

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


1

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

f=([c,...a],i=a.indexOf(c))=>c?(~i&&i+f(a.splice(0,i+1)))+f(a):0

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

মন্তব্য

f = (                       // f is a recursive function taking either the input string
                            // or an array of characters, split into
  [c, ...a],                // c = next character and a[] = all remaining characters
  i = a.indexOf(c)          // i = index of the 1st occurrence of c in a[] (-1 if not found)
) =>                        //
  c ?                       // if c is defined:
    ( ~i &&                 //   if i is not equal to -1:
      i +                   //     add i to the final result
      f(a.splice(0, i + 1)) //     remove the left part of a[] up to i (included) and
    )                       //     do a recursive call on it
    + f(a)                  //   add the result of a recursive call on a[]
  :                         // else:
    0                       //   stop recursion

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 65 64 62 বাইট

f=s=>(s=/(.)(.*?)\1(.*)/.exec(s))?f(s[3])+f(s=s[2])+s.length:0

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

আসল পদ্ধতির (by৪ বাইট):

f=(s,r=/(.)(.*?)\1/g,t=r.exec(s))=>t?f(t=t[2])+t.length+f(s,r):0

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

f=s=>                              // Main function:
 (s=/(.)(.*?)\1(.*)/.exec(s))?     //  If a "quoted" segment can be found:
  f(s[3])                          //   Return the recursive result outside this segment,
  +f(s=s[2])                       //   plus the recursive result of this segment,
  +s.length                        //   plus the length of this segment
 :0                                //  If not: no quoted segment, return 0.

1

ব্রেন-ফ্লাক , 100 বাইট

({{<({}<>)<>(({<>(({}({})<>[({}<>)]))(){[{}()](<>)}{}}{}){(<>)})<>{}>{<>({}<<>({}<>)>)<>}<>[{}]}{}})

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

মন্তব্য

# Loop over each character in input and sum iterations:
({{

  # Evaluate matching quote search as zero
  <

    # Move opening "quote" to right stack
    ({}<>)<>

    # Until match or end of search string found:
    # Note that the character to search for is stored as the sum of the top two entries in the right stack.
    (

      ({

        <>((

          # Character to search for
          {}({})

          # Subtract and move next character
          <>[({}<>)]

        # Push difference twice
        ))

        # Add 1 to evaluation of this loop
        ()

        # If no match, cancel out both 1 and pushed difference to evaluate iteration as zero (keep one copy of difference for next iteration)
        # (compare to the standard "not" snippet, ((){[()](<{}>)}{}) )
        # Then move to other stack
        {[{}()](<>)}{}

        # If a match was found, this will instead pop a single zero and leave a zero to terminate the loop, evaluating this iteration as 0+1=1.

      # Push 1 if match found, 0 otherwise
      }{})

      # If match found, move to left stack and push 0 denote end of "quoted" area.
      {(<>)}

    # Push the same 1 or 0 as before
    )

    # Remove representation of opening "quote" searched for
    # The closing quote is *not* removed if there is a match, but this is not a problem because it will never match anything.
    <>{}

  >

  # Move searched text back to left stack, evaluating each iteration as either the 1 or 0 from before.
  # This counts characters enclosed in "quotes" if a match is found, and evaluates as 0 otherwise.
  {<>({}<<>({}<>)>)<>}

  # Remove 0/1 from stack; if 1, cancel out the 1 added by the closing "quote"
  <>[{}]

# Repeat until two consecutive zeroes show up, denoting the end of the stack.
# (Because closing quotes are not removed, it can be shown that all other zeroes are isolated on the stack.)
}{}})

1

জেলি , 17 বাইট

œṡḢẈṖ$Ḣ+ɼṛƲ)Ẏ$F¿®

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

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

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