গল্ফ আমার অ্যাডা অ্যারে


10

পটভূমি

অ্যাডা এমন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা একেবারে স্বচ্ছতার জন্য পরিচিত নয়।

তবে, এর অ্যারে আক্ষরিক বাক্য গঠন তাত্ত্বিকভাবে মোটামুটি সংশ্লেষ অ্যারে স্পেসিফিকেশনগুলির জন্য অনুমতি দিতে পারে। অ্যারে আক্ষরিক সিনট্যাক্সের একটি সহজ EBNF বর্ণনা এখানে রয়েছে ( বোতলোক্যাপস.ডে পাসযোগ্য :

array ::= positional_array | named_array
positional_array ::= expression ',' expression (',' expression)*
                   | expression (',' expression)* ',' 'others' '=>' expression
named_array ::= component_association (',' component_association)*
component_association ::= discrete_choice_list '=>' expression
discrete_choice_list ::= discrete_choice ('|' discrete_choice)*
discrete_choice ::= expression ('..' expression)? | 'others'

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

এখানে স্পষ্টতার জন্য অ্যাডা অ্যারে আক্ষরিক এবং পাইথন-এস্কু সমতুল্য উপস্থাপনের কয়েকটি উদাহরণ রয়েছে:

(1, 2, 3) = [1, 2, 3]
(1, others => 2) = [1, 2, 2, ..., 2]
(others => 1) = [1, 1, ..., 1]
(1 => 1, 2 => 3) = [1, 3]
(1|2 => 1, 3 => 2) = [1, 1, 2]
(1 => 1, 3 => 2, others => 3) = [1, 3, 2, 3, 3, ..., 3]

চ্যালেঞ্জ

এই চ্যালেঞ্জের লক্ষ্যটি প্রদত্ত ইনপুট অ্যারের জন্য স্বল্পতম বাইট-কাউন্ট অ্যাডা অ্যারে আক্ষরিক আউটপুট দেওয়া। নোট করুন যে অ্যাডা অ্যারেগুলি যা যা সূচকের পছন্দসই থেকে শুরু করতে পারে, তাই আপনি প্রতিটি সূচক যথাক্রমে লম্বা হওয়া সূচনা সূচকটি চান তা চয়ন করতে পারেন। এই উদাহরণে আমি 1 এ শুরু করা বেছে নিয়েছি, যা আদার পক্ষে মূর্তিমান, তবে আপনি অন্য কোনও পূর্ণসংখ্যার সাথে শুরু করতে বেছে নিতে পারেন।

ইনপুট

আপনার ইনপুটটিতে যে কোনও আকারে সুবিধাজনক হিসাবে পূর্ণসংখ্যার একটি তালিকা থাকবে।

আউটপুট

আপনার আউটপুটটি সংক্ষিপ্ত বৈধ অ্যাডা অ্যারে আক্ষরিক প্রতিনিধিত্বকারী পাঠ্যের একটি স্ট্রিং হবে যা ইনপুট পূর্ণসংখ্যার তালিকার প্রতিনিধিত্ব করে। আপনি এই অ্যারেটিতে যে কোনও প্রারম্ভিক সূচকটি চান তা ব্যবহার করতে পারেন, তবে আপনার পছন্দ (যা তা যাই হোক না কেন) অবশ্যই আপনার উত্তরে নির্দিষ্ট করা উচিত (প্রারম্ভিক সূচকটিও গতিশীল হতে পারে)।

উদাহরণস্বরূপ, পূর্ণসংখ্যাগুলি স্বাক্ষরিত দশমিক সংখ্যা হিসাবে প্রতিনিধিত্ব করা হয়। এই চ্যালেঞ্জটি পূর্ণসংখ্যার মানগুলিকে গল্ফ করে না।

উদাহরণ

এখানে কিছু উদাহরন:

Simple: [1, 2, 3] -> (1,2,3)
Range: [1, 1, 1, 1, 1, 1, 1,] -> (1..7=>1)
Others: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] -> (6=>2,others=>1)
Multiple Ranges: [1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1] -> (6..10|16..20=>2,others=>1)
Tiny Ranges: [1,1,2,2,1,1,1,1,1] -> (3|4=>2,others=>1)
Far Range: [[1]*5, [2]*100, [3]*5] -> (1..5=>1,6..105=>2,others=>3)
Alternation: [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2] -> (1|3|5|7|9|11|13|15|17=>1,others=>2)
Big Number: [1234567890,1,1234567890] -> (2=>1,1|3=>1234567890)
Big-ish Number: [1234567,1,1234567] -> (1234567,1,1234567)
Solo: [-1] -> (1=>-1)
Huge Input: [[0],[1]*1000000000] -> (0,others=>1)
Positional Others: [1, 2, 3, 3, 3, 3, 3, 3] -> (1,2,others=>3)
Range and Choice, no Others: [1,1,1,12,12,3,3,3,3,3,3,3,3,3,3,4] -> (1..3=>1,4|5=>12,6..15=>3,16=>4)

সর্বনিম্ন প্রয়োজনীয়তা

  • কমপক্ষে 100 নম্বর এবং দৈর্ঘ্যে কমপক্ষে 256 সংখ্যার ইনপুট সমর্থন করুন Support

  • এই জাতীয় সমস্ত ইনপুটগুলির জন্য সঠিক ফলাফল উত্পন্ন করুন

    • শেষে 'অন্য' লাগানো অন্তর্ভুক্ত
    • একক আইটেম অ্যারে জন্য একটি সূচক স্থাপন অন্তর্ভুক্ত
  • উপরের প্রতিটি ইনপুটগুলির জন্য এক মিনিটের মধ্যে অবসান করুন (পছন্দসই টিআইওতে)।

বাইটের মধ্যে সংক্ষিপ্ত সমাধান!

রেফারেন্স বাস্তবায়ন

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

এই প্রয়োগটি ইনপুটটিকে তার অ্যারে হিসাবে ব্যবহার করে প্রতিটি অক্ষর একটি সংখ্যা হিসাবে। বড় মূল্যের জন্য বড় বড় অক্ষরগুলি বিশেষ ধ্রুবক। প্রোগ্রাম আর্গুমেন্টটি ব্যবহারের জন্য 'সূচনা সূচনা'।

টিআইও লিঙ্কের "কোড" বিভাগটি সমস্যার সঠিক সমাধান, যখন "শিরোনাম" এবং "পাদচরণ" পরীক্ষার কাঠামো বাস্তবায়ন করে।


3
"ফার বিন্যাস" কেস থাকবেই কেবল ইঙ্গিত করে যে আমরা যে বিন্যাসে ইনপুট নিতে যদি আমরা করতে পারে চয়ন বা হাইলাইট আমরা যে আছে হিসাবে ভাল যে ইনপুট বিন্যাস হ্যান্ডেল পাবে স্বাভাবিক অ্যারে হিসেবে? এছাড়াও, শেষ পরীক্ষার কেসটি কেবল আউটপুট করা উচিত নয় (-1)?
শেগি

3
"দূরবর্তী পরিসর" কেসটি কেবল স্থান সংরক্ষণের জন্যই এইভাবে লেখা হয়েছে, আসল ইনপুটটি 110 টি সংখ্যার সমন্বিত একটি সমতল অ্যারে হবে তবে আউটপুটটি সঠিক। এর উদ্দেশ্য হল এমন ঘটনাগুলি প্রদর্শন করা যেখানে 'অন্যের' কীওয়ার্ডটি আরও দীর্ঘ উপস্থাপনের জন্য একটি ছোট পরিসরে যেতে হবে। ( 106..110=>3,others=>2দীর্ঘতর হবে) সর্বশেষ ক্ষেত্রে একটি সূচক থাকা দরকার, কারণ ব্যাকরণটি একক উপাদান positional_array ::= expression ',' expression (',' expression)*
অবস্থানিক

1
1(1=>1,others=>1)(1..100000000=>1)

2
আপনি দয়া করে নিশ্চিত করতে পারেন যে (1|3=>1234567,2=>1)এটি অন্য বৈধ আউটপুট [1234567,1,1234567]?
আর্নল্ড

1
আমাদের পছন্দের ভাষা হিসাবে আমাদের কী অ্যাডা ব্যবহার করার অনুমতি রয়েছে?
বেনজামিন আরউখার্ট

উত্তর:


5

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

@ কেভিন ক্রুজসেনকে 2 বাইট সংরক্ষণ করা হয়েছে

এটি বিব্রতকরভাবে দীর্ঘ ...

a=>[b=([...a,m=''].map(o=(v,i)=>(i?p==v?!++n:m=o[(o[p]=[o[p]&&o[p]+'|']+(n?i-n+(n>1?'..':'|')+i:i))[m.length]?(x=i-n,j=p):j]:1)&&(p=v,M=n=0)),Object.keys(o).map(k=>j-k|!m[6]?o[k]+'=>'+k:O,O='others=>'+j).sort()),1/a[1]?[...a]:b,j-a.pop()?b:a.slice(0,x-1)+[,O]].map(a=>M=M[(s=`(${a})`).length]||!M?s:M)&&M

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


305 বাইট (-2) সদৃশ জন্য একটি ভেরিয়েবল তৈরি করে 'others=>'
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! (এনবি: আপনার সংস্করণে, tএটি সংজ্ঞায়িত করার আগে ব্যবহার করা হয়েছে; এটি ক্রাশ না হওয়ার কারণ এটি হ'ল প্রথম 2 টি পরীক্ষার ক্ষেত্রে এটি মোটেও ব্যবহার না করা; এটি সহজেই কোনও মূল্যে নির্ধারণ করা যেতে পারে))
আর্নল্ড

আহ, ঠিক আছে. কোথায় ব্যবহার করা হয়েছে তা দেখার জন্য আমি আপনার উত্তরটি সত্যই সত্যই রক্ষা করতে পারি নি। আমি কেবল লক্ষ্য করেছি যে আপনার 'others'দু'বার সময় এসেছে এবং আউটপুট পরিবর্তন না করে এর জন্য একটি ভেরিয়েবল তৈরি করার চেষ্টা করেছি। ;) যদিও এটি ব্যাখ্যা করার জন্য এবং কমাটির দুর্দান্ত গল্ফ ব্যবহার করে ধন্যবাদ [,O]। :)
কেভিন ক্রুইজসেন

2

05 এ বি 1 ই , 136 134 132 বাইট

"',ý'(ì')«ˆ"©.V"θ…ˆ†=>쪮.V"Uγ¨D€gPi˜IX.V}\ÙεQƶ0KDāαγ€g£}D2Fε¾iεнyg≠iyθyg<i'|ë„..}ý}}ë˜}'|ý„=>«Iyнн<è«}Ю.VgFDN._ć'>¡X.V}\¼}¯éIgi¦}н

সম্পাদনা: এখন সব পরীক্ষার ক্ষেত্রে স্থির।

এটি অনলাইনে চেষ্টা করুন বা সব পরীক্ষার কেস যাচাই করুন ('বিশাল ইনপুট' বাদে এটি খুব বড়)।

ব্যাখ্যা:

"',ý'(ì')«ˆ"       # Push this string (function 1), which does:
 ',ý              '#  Join a list by ","
    '(ì           '#  Prepend a "("
       ')«        '#  Append a ")"
          ˆ        #  Pop and add it to the global array
            ©      # Store this string in the register (without popping)
             .V    # And execute it as 05AB1E code on the (implicit) input-list
"θ…ˆ†=>쪮.V"      # Push this string (function 2), which does:
 θ                 #  Pop and push the last element of the list
  …ˆ†=>ì           #  Prepend dictionary string "others=>"
        ª          #  Append that to the list which is at the top of the stack
         ®.V       #  And execute function 1 from the register     
             U     # Pop and store this string in variable `X`
γ                  # Get the chunks of equal elements in the (implicit) input-list
 ¨                 # Remove the last chunk
  D                # Duplicate the list of remaining chunks
   g              # Get the length of each
     Pi     }      # If all chunk-lengths are 1:
       ˜           #  Flatten the list of remaining chunks
        I          #  Push the input-list
         X.V       #  Execute function 2 from variable `X`
             \     # Discard the top of the stack (in case we didn't enter the if-statement)
Ù                  # Uniquify the (implicit) input-list
 ε                 # Map each unique value `y` to:
  Q                #  Check for each value in the (implicit) input-list if it's equal to `y`
                   #  (1 if truthy; 0 if falsey)
   ƶ               #  Multiply each by its 1-based index
    0K             #  Remove all 0s
      D            #  Duplicate it
       ā           #  Push a list [1, length] without popping the list itself
        α          #  Get the absolute difference at the same indices
         γ         #  Split it into chunks of the same values
          g       #  Get the length of each
            £      #  And split the duplicated indices-list into those parts
                   # (this map basically groups 1-based indices per value.
                   #  i.e. input [1,1,2,1,1,2,2,1,1] becomes [[[1,2],[4,5],[8,9]],[[3],[6,7]]])
 }D                # After the map: duplicate the mapped 3D list
   2F              # Loop 2 times:
     ε             #  Map the 3D list of indices to:
      ¾i           #   If the counter_variable is 1:
        ε          #    Map each list `y` in the 2D inner list to:
         н         #     Leave the first value
         ygi      #     And if there is more than one index:
             yθ    #      Push the last value as well
             yg<i  #      If there are exactly two indices:
              '|  '#       Push string "|"
             ë     #      Else (there are more than two indices)
              „..  #       Push string ".."
                 #      And join the first and last value by this string
        }}         #    Close the if-statement and map
      ë            #   Else:
       ˜           #    Flatten the 2D list
      }'|ý        '#   After the if-else: join by "|"
          „=>«     #   Append "=>"
       yнн         #   Get the very first index of this 2D list
          <        #   Decrease it by 1 to make it 0-based
      I    è       #   And index it into the input-list to get its value again
            «      #   Which is also appended after the "=>"
                 #  After the map: triplicate the result
       ®.V         #  Execute function 1 from the register
       g           #  Get the amount of items in the triplicated list
        F          #  Loop that many times:
         D         #   Duplicate the list
          N._      #   Rotate it the index amount of times
          ć        #   Extract the head; pop and push remainder and head
           '>¡    '#   Split this head by ">"
              X.V  #   And then function 2 is executed again from variable `X`
        }\         #  After the loop: discard the list that is still on the stack
          ¼        #  And increase the counter_variable by 1
                 # After looping twice: push the global array
     é             # Sort it by length
      Igi }        # If the input only contained a single item:
         ¦         #  Remove the very first item
           н       # And then only leave the first item
                   # (which is output implicitly as result)

আমার এই 05AB1E টিপটি দেখুন (বিভাগটি কীভাবে স্ট্রিংগুলি সংকোচিত করবেন? ) কেন …ˆ†=>তা বোঝার জন্য "others=>"

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