একটি তালিকা আউট মসৃণ


12

আপনি একটি প্রোগ্রাম বা ফাংশন যা অ নেতিবাচক পূর্ণসংখ্যা লাগে লিখতে হবে kএবং একটি সাজানো পূর্ণসংখ্যা তালিকা Lইনপুট এবং আউটপুট বা আয় একটি মসৃণ তালিকা হিসাবে M

Mতালিকাটিকে সাজানো রেখে Lবেশিরভাগ kপূর্ণসংখ্যার উপাদান সন্নিবেশ করে আরোহী তালিকা থেকে তৈরি করা হয় । সন্নিবেশিত পূর্ণসংখ্যাগুলি এমনভাবে বাছাই করা উচিত যাতে সর্বোচ্চ ফরোয়ার্ড পার্থক্য Mযতটা সম্ভব ছোট হয়। আমরা এই ক্ষুদ্রতম মানটিকে "মসৃণতা" বলব।

তালিকার এগিয়ে পার্থক্য -1 3 8 11 15হয় 4 5 3 4এবং সর্বোচ্চ এগিয়ে পার্থক্য নেই 5

সঙ্গে 2সন্নিবেশ এর স্নিগ্ধতা 2 10 15হয় 4এবং একটি সম্ভাব্য আউটপুট 2 6 10 11 15এগিয়ে পার্থক্য 4 4 1 4

ইনপুট

  • একটি অ-নেতিবাচক পূর্ণসংখ্যা k
  • Lকমপক্ষে 2 টি উপাদান সহ একটি আরোহণের পূর্ণসংখ্যা তালিকা ।

আউটপুট

  • আরোহী পূর্ণসংখ্যার তালিকা M
  • একাধিক সঠিক উত্তর যদি সেগুলির মধ্যে একটির আউটপুট উপস্থিত থাকে তবে (যে কোনও একটিই যথেষ্ট)।
  • আপনার সমাধানটি আমার কম্পিউটারে এক মিনিটের মধ্যে যে কোনও উদাহরণ পরীক্ষার কেস সমাধান করতে হবে (আমি কেবল নিকটবর্তী কেসগুলি পরীক্ষা করব I আমার নীচে গড় পিসি রয়েছে))

উদাহরণ

ইনপুট ( k, L) => প্রথম বন্ধনীতে একটি সম্ভাব্য আউটপুট এবং সর্বাধিক ফরোয়ার্ড পার্থক্য (যা আউটপুটের অংশ নয়)

0, 10 20 => 10 20 (10)

2, 1 10 => 1 4 7 10 (3)

2, 2 10 15 => 2 6 10 11 15 (4)

3, 2 10 15 => 2 5 8 10 12 15 (3)

5, 1 21 46 => 1 8 15 21 27 33 39 46 (7)

5, 10 20 25 33 => 10 14 18 20 24 25 29 33 (4)

3, 4 4 6 9 11 11 15 16 25 28 36 37 51 61 => 4 4 6 9 11 11 15 16 22 25 28 36 37 45 51 59 61 (8)

15, 156 888 2015 => 156 269 382 495 608 721 834 888 1001 1114 1227 1340 1453 1566 1679 1792 1905 2015 (113)

8, -399 -35 -13 56 157 => -399 -347 -295 -243 -191 -139 -87 -35 -13 39 56 108 157 (52)

5, 3 3 3 => 3 3 3 3 (0)

এটি কোড-গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিততে পারে।

উত্তর:


5

পাইথ, 28 27 বাইট

S+Qu?smt%hHrFdC,QtQ>GvzGhvz

ইনপুট দেওয়া হয়েছে যেমন:

3
[2, 10, 15]

প্রদর্শন. পরীক্ষার জোতা।

দ্রষ্টব্য: প্রশ্নটি জিজ্ঞাসা করার সময় পাইথের rFdভিতরে ব্যবহারের সাথে সম্পর্কিত একটি ছোট বাগ ছিল u, যা আমি ঠিক করেছিলাম। ত্রুটিটি Fঅভ্যন্তরটিকে কখনও ব্যবহার করা অসম্ভব বলে বর্ণনা করে u, যা অবশ্যই উদ্দেশ্যযুক্ত নয়।

S+Qu?smt%hHrFdC,QtQ>GvzGhvz

                               Implicit:
                               z is the number of insertions, in string form.
                               Q is the input list.
              C,QtQ            Pairs of elements, e.g. [(2, 10), (10, 15)]
           rFd                 d = (a, b) -> range(a, b)
        %hH                    Take every H+1th element of that range
       t                       And throw out the first one.
      m                        Perform this process for each element pair
     s                         And combine the results into one list.

                               The above is a minimal set of additional elements
                               To reduce the maximal difference to H+1.

  u                     hvz    Repeat until the result stops changing, where
                               the prior result is G, H starts at 0 and
                               increases by 1 each repetition, and
                               G is initialized to eval(z)+1.
   ?               >GvzG       If not G[eval(z):], return G. In other words,
                               if the prior result was short enough, stop.
                               Also, this is always false on the initial call.
    smt%hHrFdC,QtQ             Otherwise, recalculate with H incremented.
S+Q                            Take the result, add the original list, and sort.

এখানে একটি সংস্করণ রয়েছে যা প্রশ্ন জিজ্ঞাসার সময় দোভাষীের সাথে কাজ করবে। এটি 28 বাইট এবং ঠিক একইভাবে কাজ করে:

S+Qu?smt%hHr.udC,QtQ>GvzGhvz

প্রদর্শন.

যথাযথ সংস্করণ, f6b40e62 এর গিট কমিট


আমি কখনই rF<seq>দ্বি-এলিমেন্ট টিপলগুলি আনপ্যাক করার জন্য ব্যবহার করার কথা ভাবি নি ।
orlp

@orlp এটি একটি মহান কৌতুক, এবং আমি এটা ব্যবহার করেছি পথ ফিরে দিনে যখন uভিন্নভাবে কাজ করেন এবং eউপস্থিত করেনি, urGHdচেয়ে খাটো ছিল rhd@d1। আমি পাইথ ট্রিক্সের পৃষ্ঠাতে রেখে দেব।
isaacg

আপনি একটি চরিত্র শেভ করতে পারেন, আপনার প্রয়োজন নেই U
orlp

ধন্যবাদ আসলে, yvzব্যর্থ হয় যখন vz = 0, কিন্তু hvzকৌশলটি।
isaacg

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

8

পাইথন 2, 104

def f(L,k,d=1):
 M=[];p=L[0]
 for x in L:M+=range(p+d,x,d);p=x
 return M[k:]and f(L,k,d+1)or sorted(L+M)

d1 থেকে শুরু করে গণনা করা বিভিন্ন সর্বোচ্চ বর্ধনের চেষ্টা করে। ফাঁকে প্রতিটি 'তম সংখ্যা (p,x)গ্রহণ করে পর পরের উপাদানগুলির প্রতিটি জোড়া শূন্যস্থান পূরণ করে d। যদি Mকোটার অনুমতি দেয় তার চেয়ে দীর্ঘ হয় তবে পুনরায় উচ্চতর চেষ্টা করার চেষ্টা করা হয় d। অন্যথায়, বাছাই করা যুক্ত এবং মূল উপাদানগুলির একটি তালিকা প্রদান করে।

এটি আমার মেশিনে দেরি না করে সমস্ত পরীক্ষার কেস করে।


আপনি কি 1, 1000000000 এর মতো কিছু চেষ্টা করেছিলেন?
edc65

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