ব্যাপ্তিগুলি মেরামত করুন


30

কিছু প্রতিস্থাপনের সাথে ইতিবাচক পূর্ণসংখ্যার তালিকার একটি ইনপুট দেওয়া হয়েছে 0, অনুপস্থিত সংখ্যাগুলির সাথে তালিকাটি আউটপুট করুন যা পরিবর্তিত হয়েছে 0

ইনপুট তালিকার বৈশিষ্ট্য:

  • তালিকার সর্বদা কমপক্ষে 2 এর দৈর্ঘ্য থাকবে।

  • আসুন aএবং "আসল তালিকা" 0হিসাবে সংখ্যার ইনপুট তালিকাটি সংজ্ঞায়িত করা যাক (অর্থাত্ সংখ্যাগুলির সাথে সংখ্যার পরিবর্তে প্রতিস্থাপনের তালিকাটি ) হিসাবে তৈরি করা যাক b। কোন n, a[n]পারেন হয় b[n]বা 0

  • কোন n, b[n]পারেন হয় b[n-1] + 1বা b[n-1] - 1। এটি হ'ল এর সংখ্যাগুলি bসর্বদা 1প্রতিটি আগের সূচকে তার আগের থেকে পরিবর্তন হবে । প্রথম উপাদানটি অবশ্যই এই বিধি থেকে অব্যাহতিপ্রাপ্ত।

  • মধ্যে শূন্যর প্রত্যেক চালানোর জন্য a(যেমন, পরপর দিয়ে প্রতিস্থাপিত উপাদান 0) সঙ্গে, xরান শুরুর সূচক প্রতিনিধিত্বমূলক এবং y , শেষ প্রতিনিধিত্বমূলক a[x-1]থেকে a[y+1]সবসময় পারেন একমাত্র বৃদ্ধি হবে বা শুধুমাত্র কমছে। অতএব, শূন্যস্থান পূরণের একমাত্র সম্ভাব্য উপায় থাকবে।

    • এর অর্থ এটিও হ'ল অ্যারের প্রথম বা শেষ উপাদান দুটিই জিরো হতে পারে না।

সহজ শর্তে, একটি শূন্য রানের ভরাট করতে, কেবল এটির আগে সংখ্যার আগে একটি সংখ্যা অনুসরণ করে এটি অনুসরণ করে number উদাহরণস্বরূপ, এর একটি ইনপুট

1 2 0 0 0 6 7

আউটপুট অবশ্যই

1 2 3 4 5 6 7

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেস:

In                      Out
-----------------------------------------------------
1 0 0 0 5 6 0 4 0 0 1 | 1 2 3 4 5 6 5 4 3 2 1
7 6 0 0 3 0 0 0 7 0 5 | 7 6 5 4 3 4 5 6 7 6 5
1 0 3 0 5 0 3 0 5 0 7 | 1 2 3 4 5 4 3 4 5 6 7
14 0 0 0 0 0 0 0 0 23 | 14 15 16 17 18 19 20 21 22 23

পরিবর্তে 0আমাদের প্রোগ্রাম যেমন অন্য মান নিতে পারে null?
ডাউনগোট

@ ডাউনগোট নং, অনুপস্থিত নম্বরগুলি অবশ্যই দেওয়া উচিত 0
ডুরকনব

উত্তর:


15

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

সংরক্ষিত 12 বাইট @ নীলকে ধন্যবাদ!

@ ইসমাইল মিগুয়েলকে 1 বাইট সংরক্ষণ করা হয়েছে

a=>a.map((l,i)=>l?b=l:b+=a.find((q,r)=>r>i&&q)>b||-1)

জাভাস্ক্রিপ্ট জন্য খুব ভাল।


এটি অনলাইনে ব্যবহার করে দেখুন (সমস্ত ব্রাউজার কাজ করে)

ব্যাখ্যা

a=>  // Function with arg `a`
  a.map((l,i)=>  // Loop through input
    l?             // If nonzero
      b=l          // Set `b` to current number
    :a.find((q,r)=>r>i&q) // Otherwise look for the next nonzero number
     >b?           // If it's increased since nonzero last number   
       ++b:--b)    // Increasing? increase `b` (the previous nonzero number)
                   // otherwise decrease `b`

1
আমি মনে করি a.find((q,r)=>r>i&&q)>b?++b:--bএটি একইb+=a.find((q,r)=>r>i&&q)>b||-1
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল যে স্মার্ট, ধন্যবাদ!
ডাউনগোট

আপনাকে স্বাগতম. আমি আনন্দিত এটি আপনার জন্য কাজ করেছে।
ইসমাইল মিগুয়েল

আমি মনে করি আপনি & ওকে প্রতিস্থাপন করতে পারেন ঠিক & এর সাথে ((কেবলমাত্র লক্ষ্য করেছেন যে আপনার একটিতে রয়েছে এবং এর দুটি জবাব আছে)
চার্লি ওয়েন

7

এমএটিএল , 11 12 বাইট

fGXzGn:3$Yn

সঙ্গে কাজ করে বর্তমান রিলিজ (13.0.0) ভাষা / কম্পাইলার করুন।

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

f        % implicitly input array. Indices of nonzero elements (*)
GXz      % push input and get its nonzero elements (**)
Gn:      % vector [1,2,...,n], where n is input length (***)
3$Yn     % interpolate at positions (***) from data (**) defined at positions (*)

7

হাস্কেল, 68 61 58 বাইট

g(a:b:r)=[a..b-1]++[a,a-1..b+1]++g(b:r)
g x=x
g.filter(>0)

ব্যবহারের উদাহরণ: g.filter(>0) $ [7,6,0,0,3,0,0,0,7,0,5]-> [7,6,5,4,3,4,5,6,7,6,5]

এটি কীভাবে কাজ করে: ইনপুট থেকে শূন্যগুলি সরিয়ে ফেলুন, তারপরে কল করুন g। বাকি তালিকার aপ্রথম এবং bতারপরে দ্বিতীয় উপাদান হওয়া যাক । aউপরে b-1থেকে aনীচে থেকে নীচে থেকে তালিকাগুলি সংযুক্ত করুন b+1(এর মধ্যে একটি শূন্য হবে) এবং aবাদ পড়ার সাথে একটি পুনরাবৃত্ত কল call

সম্পাদনা করুন: @ জগারব 3 টি বাইট সংরক্ষণ করেছেন ধন্যবাদ!


6

গণিত, 59 বাইট

#//.{a___,x_,0..,y_,b___}:>{a,##&@@Range[x,y,Sign[y-x]],b}&

পরীক্ষা ক্ষেত্রে

%[{1,0,3,0,5,0,3,0,5,0,7}]
(* {1,2,3,4,5,4,3,4,5,6,7} *)

4

পার্ল, 47 45 44 39 37 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

s%\S+%$p+=/\G(0 )+/?$'<=>$p:$&-$p%eg

স্টিডিনে তালিকাটি আশা করে। উদাহরণ: প্রতিধ্বনি 1 0 3 0 1 | perl -p file.pl


আমি এখানে কিছু অনুলিপি আটকানো দেখতে পাচ্ছি .. ;-) ভালভাবে বিটিডব্লিউ করেছেন।
কেনে

3

জেলি, 12 11 বাইট

ḢWW;ḟ0Ṫr¥\F

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

বিকল্প সংস্করণ, 8 বাইট (প্রতিযোগী নয়)

দুর্ভাগ্যক্রমে, জেলি এর popচ্যালেঞ্জটির পূর্বাভাসকারী সর্বশেষতম সংস্করণে পুনরাবৃত্তিযোগ্য হতে পারে না। এটি স্থির করা হয়েছে এবং নিম্নলিখিত সংস্করণে নিম্নলিখিতটি কাজ করে।

ḟ0Ṫr¥\FḊ

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

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

ḢWW;ḟ0Ṫr¥\F  Main link. Input: A (list)

Ḣ            Pop the first element of A. Let's call it a.
 WW          Yield [[a]].
   ;         Concatenate with the popped A.
             This wraps the first element of A in an array.
    ḟ0       Filter; remove all zeroes.
        ¥    Create a dyadic chain:
      Ṫ        Pop the last element of the left argument.
       r       Call range on the popped element and the right argument.
         \   Reduce the modified A by this chain.
          F  Flatten the resulting list of ranges.

বিকল্প সংস্করণে, ḢWW;অপ্রয়োজনীয় হয়ে ওঠে। যাইহোক, যেহেতু প্রথম উপাদানটি পপিংয়ের আগে পুনরাবৃত্তিতে ফেলে দেওয়া হয়, এটি আসলে পরিবর্তিত হয় না। চূড়ান্ত প্রথম উপাদানটির সদৃশ অপসারণ করে।


3

রেটিনা, 39 34 31 বাইট

3 মার্টিনকে ধন্যবাদ 3 বাইট সংরক্ষণ করা হয়েছে।

+`1(1*) (?= +((1)\1)?)
$0$1$3$3

ইনপুট নেয় এবং অ্যানারিতে আউটপুট দেয়।

কোডটি প্রতিটি খালি জায়গা (0 এর) সাথে পুনরাবৃত্তভাবে পূরণ করে previous_number - 1 + 2 * if_next_nonzero_number_biggerprevious_number - 1হয় $1এবং if_next_nonzero_number_biggerহয় $3

দশমিক আই / ও-র সাথে কোডটি 51 বাইট হয় যতক্ষণ না আপনি সমস্ত পরীক্ষার ক্ষেত্রে অনলাইনে ইন্টারপ্রেটারে দেখতে পারেন ।


আপনি 1লুকের হেডে প্রথমটি বাদ দিয়ে অন্য একটি বাইট সংরক্ষণ করতে পারেন ।
মার্টিন এন্ডার

@ মার্টিনব্যাটনার রাইট, সম্পাদিত।
এলোমেলো

2

জিএনইউ শেড ( execব্যাশ ব্যবহার করে এক্সটেনশন সহ ), 61

স্কোরের জন্য -rবিকল্পগুলির জন্য +1 অন্তর্ভুক্ত ।

:
s/( 0)+ /../
s/\w+..\w+/{&}/
s/.*/bash -c 'echo &'/e
/ 0/b
  • এর রান খুঁজে 0এবং তাদের প্রতিস্থাপন..
  • {1..4}স্থানীয় শেষ পয়েন্টগুলির মতো ব্যাশ ব্রেস সম্প্রসারণ তৈরি করতে শেষ পয়েন্ট সংখ্যার চারদিকে বন্ধনী রাখুন । এখানে বাশ ব্রেস সম্প্রসারণের সৌন্দর্যটি হ'ল উত্পন্ন ক্রমটি সর্বদা সঠিক পথে চলবে, শুরু বা শেষটি বড় হোক না কেন।
  • এই ধনুর্বন্ধনী প্রসারকে মূল্যায়নের জন্য বশ করতে কল eকরতে sকমান্ডের বিকল্পটি ব্যবহার করুন
  • যদি আরও 0কোনও সন্ধান পাওয়া যায় তবে শুরুতে ফিরে যান।

Ideone।


2

পাইথন 2, 195 111 বাইট (ধন্যবাদ অ্যালেক্স !)

t=input()
z=0
for i,e in enumerate(t):
 if e:
  while z:t[i-z]=e+z if l>e else e-z;z-=1
  l=e
 else:z+=1
print t

ইনপুট: অবশ্যই [list]ints এর একটি হতে হবে
আউটপুট: [list]ints এর


এর জন্যে দুঃখিত! সংশোধন করা হয়েছে। সতর্ক থাকুন জন্য ধন্যবাদ।
ওয়াগেলি

কোন চিন্তা করো না. সুন্দর সমাধান। :) আপনি এটি ব্যবহার 112 বাইট নিচে পেতে পারেন এই যা আপনার একই পন্থা,, শুধু একটি বিট আরো golfed। পাইথনে গল্ফ করার জন্য আমাদের টিপসের সংগ্রহও রয়েছে এখানে
অ্যালেক্স এ।

1

পার্ল, 85 82 বাইট

+1 এর জন্য অন্তর্ভুক্ত -p

s/(\d+)(( 0)+) (\d+)/$s=$1;$e=$4;$_=$2;$c=$s;s!0!$c+=$e<=>$s!eg;"$s$_ $e"/e&&redo

স্টিডিনে তালিকাটি আশা করে। উদাহরণ: echo 1 0 3 0 1 | perl -p file.pl

এটি নেস্টেড রিজেক্সট ব্যবহার করে। কিছুটা পঠনযোগ্য:

s/(\d+)(( 0)+) (\d+)                  # match number, sequence of 0, number
 /
    $s=$1;                            # start number
    $e=$4;                            # end number
    $_=$2;                            # sequence of ' 0'
    $c=$s;                            # initialize counter with start number
    s!0! $c += $s <=> $e !eg          # replace all 0 with (in|de)cremented counter
    "$s$_ $e"                         # return replacement
 /e
&& redo                               # repeat until no more changes.

1

পাইথন 2, 92 88 বাইট

(সরানো মধ্যবর্তী পরিবর্তনশীল)

t=filter(bool,input())
print sum([range(o,p,cmp(p,o))for o,p in zip(t,t[1:])],[])+t[-1:]

1

পাইথ, 17 বাইট

u+G+treGHHfTtQ[hQ

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

u                 reduce
              [hQ     seed: the first element of input, in a list
                      iterable:
          tQ              all except the first element of input
        fT                remove if 0
                      lambda: G is the list to be returned, H is the current item
 +G                       append to return list
    reGH                  a range from the last element of the return list and the current item
   +                      concatenated with
        H                 the last item (this step forms a bidirectional inclusive list)

অন্য কথায়: সমস্ত শূন্যগুলি ইনপুট থেকে সরানো হয়, তারপরে প্রতিটি উপাদানগুলির মধ্যে একটি একচেটিয়া পরিসর rangeোকানো হয়। এই পরিসীমাটি কেবলমাত্র পৃথক পৃথক উপাদানের শূন্য দৈর্ঘ্য।


1

05 এ বি 1 , 3 বাইট (প্রতিযোগী নয়)

চ্যালেঞ্জের পরে এটি একটি বৈশিষ্ট্য যুক্ত হয়েছিল। কোড:

0KŸ

ব্যাখ্যা:

0K   # Remove all zeroes from the input list
  Ÿ  # Rangify, [1, 4, 1] would result into [1, 2, 3, 4, 3, 2, 1]

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন!


1

ভিম: 231 কী কমান্ড

নোট করুন যে কোনও চরিত্রের আগের means অর্থ হ'ল চরিত্রটি টাইপ করার সময় আপনার নিয়ন্ত্রণ রাখা উচিত

mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e 

পদক্ষেপ যাতে আপনি এটি চালাতে পারেন!

  1. ভিমে লাইনটি অনুলিপি করুন
  2. লিখুন :s/\^V/<Ctrl-V><Ctrl-V>/gএবং এন্টার টিপুন (দু'জন আপনাকে নীল ^ ভি দেওয়া উচিত)
  3. লিখুন :s/\^R/<Ctrl-V><Ctrl-R>/gএবং এন্টার টিপুন (আপনার এখন নীল ^ Rs দেখতে হবে)
  4. লিখুন :s/\^X/<Ctrl-V><Ctrl-X>/gএবং এন্টার টিপুন (আপনার এখন নীল xs দেখতে হবে)
  5. লিখুন :s/\^O/<Ctrl-V><Ctrl-O>/gএবং এন্টার টিপুন
  6. লিখুন :s/\^A/<Ctrl-V><Ctrl-A>/gএবং এন্টার টিপুন
  7. টাইপ করুন :s/\^\[/<Ctrl-V><Ctrl-[>/gএবং এন্টার চাপুন (এই কমান্ড কিছুটা ভিন্ন, কারণ আমি অব্যাহতি প্রয়োজন [)
  8. প্রকার 0"yy$। কমান্ডটি এখন y রেজিস্টারে সংরক্ষিত আছে
  9. একটি লাইনে ইনপুট সেট আপ করুন এবং সাথে চালান @y

যদি কেউ আদেশটি ভাগ করে নেওয়ার আরও ভাল উপায় জানেন তবে দয়া করে আমাকে জানান। আমি জানি এটি দীর্ঘ, তবে এটিই আমার পক্ষে সেরা।

ইনপুট আউটপুট

ইনপুট স্ট্রিংটি ফাইলের যে কোনও লাইনে একা থাকতে হবে। 1 0 0 4 3 0 0 0 7

আউটপুট কেবল ইনপুট স্ট্রিং 1 2 3 4 3 4 5 6 7 ওভাররাইট করে

ব্যাখ্যা

অ্যালগরিদম

  1. অ-শূন্য নম্বর থেকে শুরু করুন, নিশ্চিত করুন এটি শেষ সংখ্যা নয়
  2. পরবর্তী শূন্য নম্বরটি সন্ধান করুন
  3. তাদের পার্থক্য নিন। উত্তরটি যদি নেতিবাচক হয় তবে আপনার ব্যাপ্তিটি মেরামত করতে হ্রাস করা উচিত, অন্যথায়, পরিসীমা মেরামত করার জন্য বৃদ্ধি করা উচিত।
  4. প্রথম অক্ষরে ফিরে যান এবং পূর্ববর্তী সংখ্যাটি বাড়িয়ে / হ্রাস করে প্রতিটি শূন্য প্রতিস্থাপন করুন।
  5. আপনি শেষ চরিত্রটি না পাওয়া পর্যন্ত পুনরাবৃত্তি করুন

ম্যাক্রোজ ব্যবহৃত

@e - শেষের জন্য পরীক্ষা করুন। শেষ সংখ্যাটিতে এটিতে একটি ই সংযুক্ত থাকবে। কার্সারের নীচে সংখ্যার শেষে যদি একটি ই থাকে তবে ই মুছুন এবং সম্পাদন বন্ধ করুন। অন্যথায় @ বি দিয়ে একটি আন্তঃবিবাহ চক্র শুরু করুন।

mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t

@ বি - বিরতি চক্র শুরু করুন। বিয়োগ অপারেশন (@ গুলি) এর জন্য কার্সারের নীচে নম্বরটি সংরক্ষণ করুন এবং তারপরে পরবর্তী অ-শূন্য শব্দ (@ ফ) সন্ধান করুন

mayiwo^R"^V^X ^["sy0dd`a@f

@s - @ d তে ব্যবহার করতে বিয়োগের কমান্ডটি সঞ্চয় করে। এটি কেবল (val)^Xযেখানে (val)ইন্টারপোলেশন পদক্ষেপের শুরুতে সংখ্যাটি রয়েছে। এটি @ বি কমান্ড দ্বারা সেট করা হয়েছে।

@f - পরবর্তী শূন্য শর্তটি সন্ধান করুন। বর্তমান নামটি নামবিহীন নিবন্ধে লিখুন, তারপরে @f @dপরবর্তী লাইনে লিখুন এবং তারপরে @z চালান। সংখ্যাটি শূন্য হলে এটি এই আদেশটি পুনরাবৃত্তি করবে এবং @ d না থাকলে কার্যকর করবে।

wmbyiwo@f @d^[@z

@ জেড - নামবিহীন নিবন্ধক হলে শর্তসাপেক্ষ কার্যকর করুন 0 এই কমান্ডটি বিন্যাসে একটি নতুন লাইনে দুটি কমান্ড প্রত্যাশা করে command1 command2। নামবিহীন নিবন্ধটি যদি 0 command1হয় তবে মৃত্যুদন্ড কার্যকর করা হয়, অন্যথায় command2কার্যকর করা হয়। মনে রাখবেন যে কমান্ডের কোনও ফাঁকা জায়গা থাকতে পারে না।

 IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`

@t - অস্থায়ী কমান্ড নিবন্ধক। বিভিন্ন কমান্ড কার্যকর করার আগে অল্প সময়ের জন্য সংরক্ষণ করে। প্রাথমিকভাবে যদি বিবৃতি ব্যবহৃত হয়।

@ d - অন্তরোলনের দিক নির্ধারণ করুন। কার্সারের নীচে নম্বর থেকে ক্রমানুসারে প্রথম সংখ্যাটি বিয়োগ করে (@ গুলি ব্যবহার করে)। যদি ফলাফলটি নেতিবাচক হয় তবে ইন্টারপোলেশনটি হ্রাস করতে হবে তাই ^ এক্স @a এ সংরক্ষণ করা হবে। অন্যথায়, আমাদের বৃদ্ধি করা উচিত যাতে ^ A @a এ সংরক্ষণ করা হয়। এটি সংরক্ষণ করা হয়ে গেলে, এই ইন্টারপোলেট চক্রের শুরুতে ফিরে যান এবং প্রকৃতপক্ষে বিভক্ত করতে @ i চালান

yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i

@a - দোকান পারেন ^Aবা ^Xক্ষেপক পদক্ষেপ সময় বৃদ্ধি বা হ্রাস করা। এটি @d কমান্ড দ্বারা সেট করা হয়েছে।

@ i - ইন্টারপোলেট বর্তমান অবস্থানে নম্বরটি @x এ অনুলিপি করুন এবং পরবর্তী নম্বরটিতে যান। যদি নম্বরটি শূন্য হয় তবে এটি @ x এর সাথে প্রতিস্থাপন করুন এবং এটি উপরে বা নীচে সঠিকভাবে সংশোধন করতে @a চালান, তারপরে এই আদেশটি পুনরাবৃত্তি করুন। যদি সংখ্যাটি শূন্য না হয়, তবে আমরা এই আন্তঃবিবর্তন চক্রের শেষে পৌঁছেছি। নতুন হিসাবে শুরুতে এই সংখ্যাটি দিয়ে শুরু করা উচিত, তাই শেষের জন্য পরীক্ষা করতে আবার চালাতে @e চালনা করুন।

"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z

@ x - অস্থায়ী স্টোরেজ রেজিস্টার। ইন্টারপোলেট কমান্ড (@ i) তে ব্যবহৃত

কীস্ট্রোকগুলি ভেঙে ফেলা হচ্ছে

mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line

yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line

mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line

wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line

"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line

IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line

dd`b :Delete this line and move cursor back to original line

Ae^[ :Append an e to the last number

0@e  :Move to the beginning of the line and run

0

পাইথন 3.5, 159 বাইট

একটি পুনরাবৃত্তি সমাধান

def f(s):
 h=s[0]
 g=lambda s,h,v:h*(h[-1]==s[0])if len(s)==1else(g(s[1:],h+[h[-1]-v],-v)+g(s[1:],h+[h[-1]+v],+v))*(s[0]==0 or h[-1]==s[0])
 return g(s,[h],1)

Ungolfed

def f(s):
    h=s[0]
    def g(s,h,v):
        if len(s)==1:
            if h[-1]!=s[0]:
                r=[]
            else:
                r=h
        else:
            if s[0]==0:
                r=g(s[1:],h+[h[-1]+v],v)
            elif h[-1]!=s[0]:
                r=[]
            else:
                r=g(s[1:],h+[h[-1]-v],-v)+g(s[1:],h+[h[-1]+v],+v)
        return r
return g(s,[h],1)

গল্ফযুক্ত সমাধানে, আমি h*True=hএবং সেই সাথে ব্যবহার করে শর্তগুলি প্রতিস্থাপন করিh*False=[]

ফল

>>> f([7, 6, 0, 0, 3, 0, 0, 0, 7, 0, 5])
[7, 6, 5, 4, 3, 4, 5, 6, 7, 6, 5]


0

ম্যাটল্যাব, 39 38 37 বাইট

@(a)interp1(find(a),a(a>0),find(a/0))

অজ্ঞাতনামা ফাংশন যা লাইন বিন্দুতে বিন্দুগুলির মধ্যে বিভক্ত হয় afind(a)হ'ল শূন্য উপাদানগুলির সূচকগুলির একটি অ্যারে aএবং a(a>0)এটি ইতিবাচক মান। এক বন্ধু পরামর্শ সংরক্ষণ 1 বাইট ধন্যবাদ >বদলে ~=

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