যথাসম্ভব সংখ্যা সহ একটি ক্রমবর্ধমান ক্রম পূরণ করুন


29

সংখ্যার একটি তালিকা বলা হয় একঘেয়েভাবে বৃদ্ধি (বা ননডেক্রেসিং) প্রতিটি উপাদান তার আগে উপাদানের চেয়ে বড় বা সমান।

উদাহরণস্বরূপ, 1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14একঘেয়েমি বৃদ্ধি পাচ্ছে।

ইতিবাচক পূর্ণসংখ্যার এক মনোটোনিকভাবে বর্ধমান তালিকা দেওয়া হয়েছে যার দ্বারা ?নির্ধারিত খালি দাগগুলির একটি নির্বিচারে সংখ্যা রয়েছে , ধনাত্মক পূর্ণসংখ্যার সাথে খালি দাগগুলি পূরণ করুন যেমন যথাসম্ভব অনন্য পূর্ণসংখ্যার তালিকায় উপস্থিত রয়েছে, তবুও এটি মনোোটোনিকভাবে বাড়ছে remains

এটি সম্পন্ন করার একাধিক উপায় থাকতে পারে। যে কোনও বৈধ।

ফলাফলের তালিকাটি আউটপুট করুন।

উদাহরণস্বরূপ , যদি ইনপুট হয়

?, 1, ?, 1, 2, ?, 4, 5, 5, 5, ?, ?, ?, ?, 8, 10, 11, ?, 14, 14, ?, ?

এটি গ্যারান্টিযুক্ত যে খালি দাগগুলি ছাড়াই তালিকাটি একঘেয়েভাবে বাড়বে

1, 1, 2, 4, 5, 5, 5, 8, 10, 11, 14, 14

এবং আপনার কাজ হ'ল ?তালিকার আলাদা আলাদা পূর্ণসংখ্যার সংখ্যাকে সর্বাধিক করে তোলার জন্য প্রত্যেককে ইতিবাচক পূর্ণসংখ্যার নির্ধারণ করা ond

বৈধ নয় এমন একটি অ্যাসাইনমেন্ট

1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 8, 10, 11, 14, 14, 14, 14, 14

কারণ এটি ননড্রিক্র্যাসিংয়ের সময়, এর ইনপুটটির চেয়ে আরও একটি অনন্য পূর্ণসংখ্যা রয়েছে, যথা 3

এই উদাহরণে ছয়টি অনন্য ধনাত্মক পূর্ণসংখ্যার সন্নিবেশ করা এবং তালিকাটি দুদৃশ্য করা সম্ভব।
কয়েকটি সম্ভাব্য উপায় হ'ল:

1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 8, 8, 10, 11, 12, 14, 14, 15, 16

1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 5, 6, 6, 7, 8, 10, 11, 13, 14, 14, 20, 200

এর মধ্যে (এবং আরও অনেক) বৈধ আউটপুট হবে।

সমস্ত খালি দাগগুলি অবশ্যই পূরণ করতে হবে।

Inteোকানো যেতে পারে পূর্ণসংখ্যার উপর কোন উচ্চতর সীমা নেই। খুব বড় পূর্ণসংখ্যাটি যদি বৈজ্ঞানিক স্বরলিপিতে মুদ্রিত হয় তবে তা ঠিক।

শূন্য একটি ধনাত্মক পূর্ণসংখ্যার নয় এবং এটি কখনই .োকানো উচিত নয়।

পরিবর্তে ?যদি আপনি কোন সামঞ্জস্যপূর্ণ মান একটি ধনাত্মক পূর্ণসংখ্যা নয়, যেমন ব্যবহার করতে পারেন 0, -1, null, False, অথবা ""

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

আরও উদাহরণ

[input]
[one possible output] (a "*" means it is the only possible output)

2, 4, 10
2, 4, 10 *

1, ?, 3
1, 2, 3 *

1, ?, 4
1, 2, 4

{empty list}
{empty list} *

8
8 *

?
42

?, ?, ?
271, 828, 1729

?, 1
1, 1 *

?, 2
1, 2 *

?, 3
1, 3

45, ?
45, 314159265359

1, ?, ?, ?, 1
1, 1, 1, 1, 1 *

3, ?, ?, ?, ?, 30
3, 7, 10, 23, 29, 30 

1, ?, 2, ?, 3, ?, 4
1, 1, 2, 3, 3, 3, 4

1, ?, 3, ?, 5, ?, 7
1, 2, 3, 4, 5, 6, 7 *

1, ?, 3, ?, 5, ?, ?, 7
1, 2, 3, 4, 5, 6, 7, 7

1, ?, ?, ?, ?, 2, ?, ?, ?, ?, 4, ?, 4, ?, ?, 6
1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 6

98, ?, ?, ?, 102, ?, 104
98, 99, 100, 101, 102, 103, 104 *

সম্ভবত এই সমস্যার বাক্যাংশের আরও ভাল উপায় যা একটি কঠোর ইনপুট, যাচাইকরণের জন্য আউটপুট জোড়া, "সিক্যুয়েন্সে পৃথক সংখ্যার সর্বোচ্চ সম্ভাব্য সংখ্যার সংখ্যা" What এইভাবে সমস্ত উত্তর একই সংখ্যা আউটপুট দেবে এবং পরীক্ষার কেসগুলি মূল্যায়ন করা আরও সহজ করে তোলে
ক্রাঙ্কার

@ স্টেভিগ্রিফিন আপনি তালিকা মান এবং দৈর্ঘ্য যথারীতি সর্বোচ্চ সর্বোচ্চের নিচে ধরে নিতে পারেন। আমি কেবল বোঝাতে চাইছিলাম যে যদি আপনার অ্যালগরিদমটি এইভাবে কাজ করে তবে শেষ পর্যন্ত খুব বড় পূর্ণসংখ্যা সন্নিবেশ করা ঠিক আছে।
ক্যালভিনের

উত্তর:


11

হাস্কেল , 41 বাইট

f0 টি উপস্থাপন করে একটি তালিকা নেয় এবং একটি তালিকা ফেরত দেয় ?

f=scanr1 min.tail.scanl(#)0
m#0=m+1
_#n=n

মূলত, বাম দিক থেকে প্রথম স্ক্যানের তালিকাটি আগের উপাদানগুলির (বা শুরুতে 0) ​​এর চেয়ে 0 দ্বারা প্রতিস্থাপিত করে; তারপরে ডানদিকের সমান করতে খুব বড় উপাদান হ্রাস করতে ডান থেকে স্ক্যান করুন।

এটি অনলাইন চেষ্টা করুন! (র্যাপার সাথে ?এস রূপান্তর করতে ।)


4

গণিত, 84 বাইট

Rest[{0,##}&@@#//.{a___,b_,,c___}:>{a,b,b+1,c}//.{a___,b_,c_,d___}/;b>c:>{a,c,c,d}]&

খাঁটি দাগগুলি আর্গুমেন্ট হিসাবে একটি তালিকা গ্রহণ করা, যেখানে খালি দাগগুলি Null(যেমন হিসাবে {1, Null, Null, 2, Null}) দ্বারা চিহ্নিত করা হয় বা পুরোপুরি মুছে ফেলা হয় (যেমন হিসাবে {1, , , 2, }) এবং একটি উপযুক্ত তালিকা (এই ক্ষেত্রে, {1, 2, 2, 2, 3}) ফিরে আসবে ।

দেখা যাচ্ছে আমি আরজান জোহানসেনের হাস্কেল উত্তরের মতো একই অ্যালগরিদম ব্যবহার করছি : প্রথমে Nullতার বামে ( //.{a___,b_,,c___}:>{a,b,b+1,c}) এর সংখ্যার চেয়ে আরও একটি করে প্রতিস্থাপন করুন , তারপরে কোনও ডান সংখ্যায় খুব বড় সংখ্যাকে প্রতিস্থাপন করুন ( //.{a___,b_,c_,d___}/;b>c:>{a,c,c,d})। Nullতালিকার শুরুতে সম্ভবগুলি মোকাবেলা করার জন্য , আমরা একটি 0( {0,##}&@@#)) প্রিপেন্ডিং দিয়ে শুরু করি , অ্যালগরিদম করে, এবং তারপর প্রাথমিকটি মুছে ফেলি0 ( Rest) ।

হ্যাঁ, কোডের আক্ষরিকভাবে একটি বাইট সংরক্ষণ করার জন্য আমি এর Nullপরিবর্তে Xবা এর মতো কিছু বেছে নিয়েছি (অন্যটি কমাতে হবে b_,,c___))


এইচএম, প্রিপেন্ডিং 1 আপনি বলছেন? আমি 0 ব্যবহার করেছি, কারণগুলির মতো ?, 2। আমি সন্দেহ করি আপনি তখন 2, 2সঠিক পরিবর্তে উত্পাদন করতে হবে 1, 2
janrjan জোহানসেন

দুর্দান্ত পয়েন্ট! ভাগ্যক্রমে ফিক্স সহজ।
গ্রেগ মার্টিন


3

05 এ বি 1 ই , 31 23 13 বাইট

গ্রিমে ধন্যবাদ 10 বাইট সংরক্ষণ করা

ε®X:D>U].sR€ß

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

ব্যাখ্যা

ε      ]       # apply to each number in input
 ®X:           # replace -1 with X (initially 1)
    D>U        # store current_number+1 in X
        .s     # get a list of suffixes
          R    # reverse
           ۧ  # take the minimum of each

কেন এটি কেবল আউটপুট অংশ মুদ্রণ করে? আপনার টিআইও উদাহরণে প্রথম 1 টি অনুপস্থিত।
13

আমি জানি এটি কিছুক্ষণ হয়ে গেছে, এবং সম্ভবত এটি আরও কিছুটা গল্ফ করা যেতে পারে, তবে -3 বাইট কিছু সহজ গল্ফ সহ: উভয়ই 2 বাইট সংরক্ষণ }}করতে পারে ]; এবং একটি অতিরিক্ত বাইট সংরক্ষণ করা õ-)Rযেতে পারে )˜R
কেভিন ক্রুইজসেন

2
@ কেভিন ক্রুজসেন: সত্যই এটি হতে পারে :)
এমিগানা

1
এটা এখনও করতে পারেন! 16 , 15 , 13
গ্রিমি

@ গ্রিমি: বাহ, ধন্যবাদ! সেই প্রত্যয়টি কৌশলটি সত্যিই স্মার্ট ছিল!
এমিগিনা

2

পিপ , 25 23 21 বাইট

Y{Y+a|y+1}MgW PMNyPOy

একাধিক স্পেস-বিভাজিত কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়। ফলাফলের তালিকাকে প্রতি লাইনে এক নম্বর আউটপুট দেয়।এটি অনলাইন চেষ্টা করুন! (আমি একাধিক কমান্ড-লাইন আরগস জিনিসটিকে ত্রুটিযুক্ত করেছিলাম কারণ টিআইওতে 25 টি যুক্তি যুক্ত করা ব্যথা হবে তবে এটি বিজ্ঞাপন হিসাবেও কার্যকর হবে))

ব্যাখ্যা

আমরা দুটি পাসে এগিয়ে যান। প্রথমত, আমরা ইনপুটটিতে প্রতিটি রানকে প্রতিস্থাপিত করে ?তালিকার আগের নম্বর থেকে শুরু করে এবং প্রতিবারে এক করে বাড়িয়ে থাকি :

? 1 ? 1 2 ? 4 5 5 5 ? ? ? ? 8 10 11 ?  14 14 ?  ?
1 1 2 1 2 3 4 5 5 5 6 7 8 9 8 10 11 12 14 14 15 16

তারপরে আমরা আবার লুপ করব; প্রতিটি সংখ্যার জন্য, আমরা এর সর্বনিম্ন এবং সমস্ত ডানদিকে এটি ডানদিকে প্রিন্ট করি। একঘেয়েত্ব বজায় রাখতে এটি উচ্চ-উচ্চ সংখ্যাকে নীচে নিয়ে আসে।

                      y is initially "", which is 0 in numeric contexts
                      Stage 1:
 {       }Mg           Map this function to list of cmdline args g:
   +a                  Convert item to number: 0 (falsey) if ?, else nonzero (truthy)
     |                 Logical OR
      y+1              Previous number +1
  Y                    Yank that value into y (it is also returned for the map operation)
Y                      After the map operation, yank the whole result list into y
                      Stage 2:
            W          While loop, with the condition:
               MNy      min(y)
              P         printed (when y is empty, MN returns nil, which produces no output)
                  POy  Inside the loop, pop the leftmost item from y

2

পাইপথন 2 নুমপি, 163 বাইট সহ

@ ওয়াথাগোরাসকে 8 টি বাইট সংরক্ষণ করা হয়েছে

শূন্যস্থানগুলি খালি দাগগুলি চিহ্নিত করতে ব্যবহৃত হত

import numpy
l=[1]+input()
z=numpy.nonzero(l)[0]
def f(a,b):
 while b-a-1:a+=1;l[a]=l[a-1]+1;l[a]=min(l[a],l[b])
i=1
while len(z)-i:f(z[i-1],z[i]);i+=1
print l[1:]

মন্তব্য সহ আরও পাঠযোগ্য:

import numpy
l=[1]+input()           # add 1 to the begining of list to handle leading zeros
z=numpy.nonzero(l)[0]   # get indices of all non-zero values
def f(a,b):             # function to fill gap, between indices a and b
    while b-a-1:
        a+=1
        l[a]=l[a-1]+1   # set each element value 1 larger than previous element
        l[a]=min(l[a],l[b])   # caps it by value at index b
i=1
while len(z)-i:       
    f(z[i-1],z[i])      # call function for every gap
    i+=1
print l[1:]             # print result, excluding first element, added at the begining

1
কয়েকটি উন্নতি: if l[a]>l[b]:l[a]=l[b]হতে পারে l[a]=min(l[a],l[b])এবং তারপরে এটি আগে হওয়া উচিত be এছাড়াও, এর অর্থ এই যে পুরো লাইনটি পরে করা যেতে পারে while। এবং আমি মনে করি l=input()এবং l=[1]+lএটিও হতে পারে l=[1]+input()(এছাড়াও, সাধারণভাবে: আপনি যদি দুটি স্তরের ইনডেন্টেশন ব্যবহার করেন তবে আপনি পাইথন 2 এ একটি স্পেস এবং দুটি স্পেসের পরিবর্তে একটি স্পেস এবং একটি ট্যাব ব্যবহার করতে পারেন ( কোডগল্ফ.স্ট্যাকেক্সেঞ্জারএইচএ /58 দেখুন )) )
উইথাগোরাস

1
এছাড়াও, len(z)-i:f(z[i-1],z[i]);i+=1i = 1 দিয়ে শুরু করার সময় শেষ লাইনের পাশে থাকতে পারে ।
উইথাগোরাস

@ উইথাগোরাস ধন্যবাদ, ভাল পরামর্শ। আমি
ডেড পসসাম

দুর্দান্ত, তবে এটি কেবল 163 বাইট।
উইথাগোরাস

@ উইথাগোরাস ওহ, আমি বাইট গণনা আপডেট করতে ভুলে গেছি
ডেড

1

পিএইচপি, 95 77 71 69 68 বাইট

for($p=1;$n=$argv[++$i];)echo$p=$n>0?$n:++$p-in_array($p,$argv)," ";

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়, স্থান পৃথকীকরণ তালিকা মুদ্রণ করে। সাথে চালাও -nr

ভাঙ্গন

for($p=1;$n=$argv[++$i];)   # loop through arguments
    echo$p=                     # print and copy to $p:
    $n>0                            # if positive number
        ?$n                             # then argument
        :++$p                           # else $p+1 ...
            -in_array($p,$argv)         # ... -1 if $p+1 is in input values
    ," ";                       # print space

$nযে কোনও স্ট্রিংয়ের জন্য সত্য তবে খালি স্ট্রিং এবং "0"
$n>0ধনাত্মক সংখ্যার জন্য সত্য - এবং এতে স্ট্রিং রয়েছে।


1

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

{my $p;~S:g/(\d+' ')?<(('?')+%%' ')>(\d*)/{flat(+($0||$p)^..(+$2||*),(+$2 xx*,($p=$2)))[^+@1]} /}

ইনপুট হয় মানগুলির একটি তালিকা, বা একটি স্থান পৃথক স্ট্রিং, যেখানে ? মানগুলি প্রতিস্থাপনের জন্য দাঁড়ানোর জন্য ব্যবহৃত হয়।

আউটপুট একটি স্থানের স্থান সহ একটি স্থান পৃথক স্ট্রিং।

চেষ্টা করে দেখুন

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

{                       # bare block lambda with implicit parameter 「$_」

    my $p;              # holds the previous value of 「$2」 in cases where
                        # a number is sandwiched between two replacements

    ~                   # stringify (may not be necessary)
    S                   # replace
    :global
    /
        ( \d+ ' ' )?    # a number followed by a space optionally ($0)

        <(              # start of replacement

          ( '?' )+      # a list of question marks
          %%            # separated by (with optional trailing)
          ' '           # a space

        )>              # end of replacement

        (\d*)           # an optional number ($2)

    /{                  # replace with the result of:

        flat(

          +( $0 || $p ) # previous value or 0
          ^..           # a range that excludes the first value
          ( +$2 || * ), # the next value, or a Whatever star

          (
            +$2 xx *,   # the next value repeated endlessly

            ( $p = $2 ) # store the next value in 「$p」
          )

        )[ ^ +@1 ]      # get as many values as there are replacement chars
    } /                 # add a space afterwards
}

আমি পার্ল 6 জানি না, তবে পার্ল 5 এ আপনি বাইট শেভ করার $"পরিবর্তে ব্যবহার করতে পারেন ' '। এখানে কি কাজ করে?
এমএস 210

@ msh210 প্রায় সবগুলি ভেরিয়েবল চলে গেছে, বা এর দীর্ঘ নাম রয়েছে। এখনও একমাত্র বিদ্যমান যা এখনও বিদ্যমান এবং একই উদ্দেশ্য $!। ( $/বিদ্যমান কিন্তু জন্য ব্যবহার করা হয় $1$/[1]এবং $<a>$/{ qw< a > })
ব্র্যাড গিলবার্ট b2gills

1

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

a=>a.map(e=>a=e||-~a).reduceRight((r,l)=>[r[0]<l?r[0]:l,...r],[])

কারণ আমি ব্যবহার করতে চেয়েছিলাম reduceRight। ব্যাখ্যা: mapপ্রতিটি মিথ্যা মানটিকে পূর্বের মানের তুলনায় আরও একটি দিয়ে প্রতিস্থাপন করে, তারপরে reduceRightশেষ থেকে কাজগুলি নিশ্চিত করে যে কোনও মান নীচের মানের চেয়ে বেশি নয়।


1

প্রশ্ন, 63 বাইট

{1_(|){if[y>min x;y-:1];x,y}/[(|){if[y=0;y:1+-1#x];x,y}/[0,x]]}

মূলত Ørjan জোহানসেনের হাস্কেল উত্তর হিসাবে একই অ্যালগরিদম ।

  • ধরে নিলাম? = 0
  • ক্ষেত্রে অ্যারে শুরুতে একটি 0 প্রবেশ করান? শুরুতে
  • 1 টি পূর্ববর্তী উপাদান দিয়ে 0 এর পরিবর্তে অ্যারে স্ক্যান করে।
  • অ্যারের বিপরীত হয় এবং আবার স্ক্যান করে, পূর্ববর্তী উপাদানগুলির সাথে আগের উপাদানগুলির চেয়ে বড় উপাদানগুলিকে প্রতিস্থাপন করে।
  • প্রথম উপাদানটিকে বিপরীত করে এবং কাটায় (শুরু থেকে যুক্ত 0)।

সর্বনিম্ন বনাম সর্বশেষের ব্যবহারটি একটি বাইট সংরক্ষণ করার জন্য ব্যবহৃত হয়েছিল, যেহেতু শেষ উপাদানটি অ্যারের অবরোহিত সাজানোর ভিত্তিতে সর্বনিম্ন উপাদান হবে ume


দুর্দান্ত উত্তর, সাইটে আপনাকে স্বাগতম! :)
ডিজেএমসিএমহেম

1

টিআই-বেসিক (টিআই -৪৮ প্লাস সিই), ৮১ বাইট

not(L1(1))+L1(1→L1(1
For(X,2,dim(L1
If not(L1(X
1+L1(X-1→L1(X
End
For(X,dim(L1)-1,1,-1
If L1(X)>L1(X+1
L1(X+1→L1(X
End
L1

টিআর -বেসিকের কাছে অর্জান জোহানসেনের হাস্কেল জবাবের একটি সহজ বন্দর । নাল মান হিসাবে 0 ব্যবহার করে। এল 1 থেকে ইনপুট নেয়

ব্যাখ্যা:

not(L1(1))+L1(1→L1(1 # if it starts with 0, change it to a 1
For(X,2,dim(L1     # starting at element 2:
If not(L1(X              # if the element is zero
1+L1(X-1→L1(X            # change the element to one plus the previous element
End
For(X,dim(L1)-1,1,-1 # starting at the second-last element and working backwards
If L1(X)>L1(X+1           # if the element is greater than the next
L1(X+1→L1(X               # set it equal to the next
End
L1                   # implicitly return

1

জাভা 8, 199 164 বাইট

a->{for(int l=a.length,n,j,x,i=0;i<l;)if(a[i++]<1){for(n=j=i;j<l;j++)if(a[j]>0){n=j;j=l;}for(j=i-3;++j<n-1;)if(j<l)a[j+1]=j<0?1:a[j]+(l==n||a[n]>a[j]|a[n]<1?1:0);}}

বাইটগুলি সংরক্ষণ করতে কোনও নতুন ফেরতের পরিবর্তে ইনপুট-অ্যারে পরিবর্তন করে। পরিবর্তে
ব্যবহার 0করে?

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

ব্যাখ্যা:

a->{                      // Method with integer-array parameter and no return-type
  for(int l=a.length,     //  Length of the input-array
      n,j,x,              //  Temp integers
      i=0;i<l;)           //  Loop `i` over the input-array, in the range [0, length):
    if(a[i++]<1){         //   If the `i`'th number of the array is 0:
                          //   (And increase `i` to the next cell with `i++`)
      for(n=j=i;          //    Set both `n` and `j` to (the new) `i`
          j<l;j++)        //    Loop `j` in the range [`i`, length):
        if(a[j]>0){       //     If the `j`'th number of the array is not 0:
          n=j;            //      Set `n` to `j`
          j=l;}           //      And set `j` to the length to stop the loop
                          //    (`n` is now set to the index of the first non-0 number 
                          //     after the `i-1`'th number 0)
      for(j=i-3;++j<n-1;) //    Loop `j` in the range (`i`-3, `n-1`):
        if(j<l)           //     If `j` is still within bounds (smaller than the length)
          a[j+1]=         //      Set the `j+1`'th position to:
            j<0?          //       If `j` is a 'position' before the first number
             1            //        Set the first cell of the array to 1
            :             //       Else:
             a[j]+        //        Set it to the `j`'th number, plus:
              (l==n       //        If `n` is out of bounds bounds (length or larger)
               ||a[n]>a[j]//        Or the `n`'th number is larger than the `j`'th number
               |a[n]<1?   //        Or the `n`'th number is a 0
                1         //         Add 1
               :          //        Else:
                0);}}     //         Leave it unchanged by adding 0

0

পাইথন 2 , 144 124 119 বাইট

l=input()
for n in range(len(l)):a=max(l[:n]+[0]);b=filter(abs,l[n:]);b=len(b)and b[0]or-~a;l[n]=l[n]or a+(b>a)
print l

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


0পরিবর্তে ব্যবহার করে?


b=filter(abs,l[n:])সমান হয় না b=l[n:] ?
ডেড পসসাম

@ ডেডপসাম ফিল্টার (অ্যাবস ... সমস্ত 0 এর ফিল্টারগুলি
ওভস

ওহ, এটি শূন্যগুলি সরিয়ে দেয়, আমি এটি পেয়েছি
মৃত পসসাম

0

জাভাস্ক্রিপ্ট (ES6), 59

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

a=>a.map((v,i)=>v?w=v:(a.slice(i).find(x=>x)<=w?w:++w),w=0)

পরীক্ষা

var F=
a=>a.map((v,i)=>v?w=v:(a.slice(i).find(x=>x)<=w?w:++w),w=0)

;[[2, 4, 10]
,[1, 0, 3]
,[1, 0, 4]
,[]
,[8]
,[0]
,[0, 0, 0]
,[0, 1]
,[0, 2]
,[0, 3]
,[45, 0]
,[1, 0, 0, 0, 1]
,[3, 0, 0, 0, 0, 30]
,[1, 0, 2, 0, 3, 0, 4]
,[1, 0, 3, 0, 5, 0, 7]
,[1, 0, 3, 0, 5, 0, 0, 7]
,[1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 4, 0, 0, 6]
,[98, 0, 0, 0, 102, 0, 104]]
.forEach(a=>{
  console.log(a+'\n'+F(a))
})


0

সি # (.নেট কোর) , 182 বাইট

Janrjan জোহানসেনের মতো একই কৌশল ব্যবহার করে।

অজানা var চিহ্নিত করতে ইনপুট তালিকায় 0 ব্যবহার করে।

l=>{if(l[0]<1)l[0]=1;int j;for(j=0;j<l.Length;j++)l[j]=l[j]==0?l[j-1]+1:l[j];for(j=l.Length-2;j>=0;j--)l[j]=l[j]>l[j+1]?l[j+1]:l[j];foreach(var m in l) System.Console.Write(m+" ");};

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


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