এটি গরম যেমন ড্রপসোর্ট করুন


41

এই প্রশ্নে বর্ণিত হিসাবে :

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

তাদের একটি পরীক্ষার ক্ষেত্রে ব্যবহারের জন্য, {1, 2, 5, 4, 3, 7}ফলনের একটি ইনপুট {1, 2, 5, 7}হিসাবে 4এবং 3উভয়ই আগের "সাজানো" মান থেকে ছোট হওয়ার কারণে বাদ দেওয়া হয় 5

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

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

Input                  -> Output
{1, 2, 5, 4, 3, 7}     -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12}           -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5}        -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21}       -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10}    -> {{10, 10, 10, 10}, {9}}  //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6}     -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7}     -> {{0, 2, 5, 7}, {4}, {0}}

আপনি ধরে নিতে পারেন ইনপুটটি খালি নেই।

এটি , সুতরাং স্ট্যান্ডার্ড বিধিগুলি প্রয়োগ হয়!


আমরা কি আউটপুট পছন্দ করতে পারি [5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]?
মিঃ এক্সকডার

5
@ এক্সকোডার, ভাল আমি সিনট্যাক্সটিতে কিছু মনে করি না তবে আপনাকে এখনও দ্বিতীয় তালিকাটি বাছাই করতে হবে (এবং এই ক্ষেত্রে এটি বিভক্ত করুন)। কখন থামতে হবে তা জানা চ্যালেঞ্জের অংশ is)। এবং স্টিভী, আমি আপনাকে আসলে কী বলব জানি না। আমি ড্রপসোর্ট চ্যালেঞ্জটি দেখেছি এবং মনে করি এটি মজাদার। আপনার সময় মেশিনটি ব্যবহার করার কোনও সুযোগ আপনি এগিয়ে এসে এই প্রশ্নটি দেখতে চান? শুধু সেরা উত্তর দেখতে এটি ব্যবহার করবেন না!
লর্ড ফারকোয়াড

মনে রাখবেন যে বাম-ওভারের বাছাইয়ের ক্ষেত্রে সমাধানগুলি লিনিয়ার সময়ের বাইরে চলে যায়।
ইকগামি

করা উচিত {3,4,5,3,4,5,3,4,5}ফলে {{3,4,5,5,5},{3,4,4},{3}}?
কিউব্রুট

@ কিউব্রেট আমি মনে করি এটি সঠিক।
লর্ড ফারকোয়াড

উত্তর:


10

এমএটিএল , 15 10 9 বাইট

5 বাইটস বন্ধ বর্ধিত সর্বাধিক ধারণা সম্পর্কে ধারণা ব্যবহার করে

t"ttY>=&)

ইনপুটটি একটি সংখ্যাসিক সারি ভেক্টর, বিন্যাসে [1, 2, 5, 4, 3, 7](কমাগুলি alচ্ছিক)। আউটপুটে নতুন তালিকা দ্বারা পৃথক পৃথক তালিকা রয়েছে, প্রতিটি তালিকার স্পেস দ্বারা পৃথক করা সংখ্যাগুলি।

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

ব্যাখ্যা

একটি অ্যারে দেওয়া, কোডটি প্রতিটি এন্ট্রি থেকে এটিকে বেছে নেয় যা সেই এন্ট্রি পর্যন্ত মোট পরিমাণের সমান।

উদাহরণস্বরূপ, দেওয়া

1 2 5 4 3 7

কোডটি প্রথম, দ্বিতীয়, তৃতীয় এবং ষষ্ঠ এন্ট্রি পছন্দ করে:

1 2 5     7

তারপরে প্রক্রিয়াটি পুনরায় পুনরায় পুনরায় করা হবে অবশিষ্ট এন্ট্রি (মূল ক্রমে) দ্বারা গঠিত সাব্যারেতে:

      4 3

অবশিষ্ট এন্ট্রিগুলির সাবহারি খালি না হওয়া পর্যন্ত এটি করা দরকার। পুনরাবৃত্তির প্রয়োজনীয় সংখ্যার উপরের একটি আবদ্ধ হ'ল ইনপুট আকার। শেষ পুনরাবৃত্তির প্রয়োজন হতে পারে না। সেক্ষেত্রে তারা খালি অ্যারেতে কাজ করে অতিরিক্ত খালি অ্যারে উত্পাদন করে।

শেষে, স্ট্যাকটিতে প্রয়োজনীয় অ্যারে এবং সম্ভবত কয়েকটি খালি অ্যারে রয়েছে, যা একেবারেই প্রদর্শিত হয় না।

t        % Implicit input. Duplicate
"        % Do as many times as the input size
  tt     %   Duplicate twice
  Y>     %   Cumulative maximum
  =      %   Compare for equality. Will be used as logical index
  &)     %   Two-output indexing: pushes indexed subarray, and then
         %   a subarray with the remaining entries
         % End (implicit)
         % Display stack (implicit). Empty arrays are not displayed

23

হাস্কেল, 67 59 58 বাইট

(q:r)!x|x<last q=q:r!x|1<2=(q++[x]):r
_!x=[[x]]
foldl(!)[]

ব্যাখ্যা: তালিকা (যে ইতিমধ্যে সাজানো হয়) একটি তালিকা দেওয়া এবং একটি মান x, !অপারেটর স্থাপন করবে xকম প্রথম তালিকার শেষে যার শেষ উপাদান এ বা এর সমান x। এ জাতীয় কোনও তালিকা উপস্থিত না থাকলে তালিকাটি [x]শেষে রাখা হয়।

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


3
এটি একটি অবিশ্বাস্যভাবে চালাক সমাধান। আমি সত্যিই বেশিরভাগ লোককে কেবলমাত্র ড্রপসোর্টে প্রত্যাশা করেছিলাম যতক্ষণ না কিছু না বাকি থাকে তবে আমি আশা করি যে কেউ আরও সৃজনশীল উপায় নিয়ে ভাববেন।
লর্ড ফারকোয়াড

13

হুশ , 10 বাইট

hUmü<¡Ṡ-ü<

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

এটি আমার অন্যান্য হুস্কের উত্তর এবং এক্সনোরের হাস্কেল উত্তরের সংমিশ্রণ । সদৃশটি ü<ক্লানকি অনুভব করে তবে কীভাবে এ থেকে মুক্তি পাব আমি জানি না ...

ব্যাখ্যা

ফাংশনটি হ্যাসকেলে ü<অনুবাদ করে nubBy(>)। এটি বাম থেকে ডানে একটি তালিকে বিভক্ত করে, সেই উপাদানগুলিকে রেখে যেগুলির জন্য পূর্বে কোনও রক্ষিত উপাদান কঠোরভাবে বেশি নয়। অন্য কথায়, এটি ড্রপসোর্ট সম্পাদন করে। মূল তালিকা এবং ফলাফলের তালিকার পার্থক্য রেখে বাকী উপাদানগুলি প্রাপ্ত হয়ü<

hUmü<¡Ṡ-ü<  Implicit input, say x = [2,3,5,4,4,2,7].
     ¡      Iterate
      Ṡ-    list difference between argument
        ü<  and its dropsort: [[2,3,5,4,4,2,7],[4,4,2],[2],[],[],[],...
  m         Map
   ü<       dropsort: [[2,3,5,7],[4,4],[2],[],[],[],...
 U          Prefix of unique elements: [[2,3,5,7],[4,4],[2],[]]
h           Drop last element: [[2,3,5,7],[4,4],[2]]

10
আউটগল্ফ 33% দ্বারা শীর্ষ উত্তর "" আমি জানি না, এটুকু অনুভূত হয় "
লর্ড ফারকোয়াড


7

হুশ , 16 বাইট

hUm₁≤¡₁>
ṠfSz⁰G▲

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

ব্যাখ্যা

এই প্রথম লাইনটি মূল ফাংশন, এবং দ্বিতীয়টি হ'ল অর্ডার সহায়ক ফাংশন (এটি যুক্তি হিসাবে একটি ফাংশন নেয় এবং একটি নতুন ফাংশন দেয়)। এটি সাবস্ক্রিপ্ট দ্বারা অ্যাক্সেস করা হয়েছে । ধারণাটি হ'ল ₁≤ড্রপসোর্ট সম্পাদন করে এবং ₁>অবশিষ্ট অংশগুলিকে দেয়।

ṠfSz⁰G▲  Helper function, takes binary function p (as ⁰) and list x (implicit).
         For example, p = (≤) and x = [2,4,3,4,5,2].
     G▲  Left scan on x with maximum: [2,4,4,4,5,5].
  Sz     Zip with x
    ⁰    using the function p: [1,1,0,1,1,0].
Ṡf       Keep elements of x at truthy indices: [2,4,4,5].

মূল ফাংশনে, আমরা বাম ₁>অংশগুলি ফাংশনটি পুনরাবৃত্তি করি এবং ₁≤ফলাফলগুলিতে ড্রপসোর্ট ফাংশনটি প্রয়োগ করি ।

hUm₁≤¡₁>  Main function, implicit list argument, say x = [2,4,3,4,5,2].
     ¡    Iterate
      ₁>  the leftovers function: [[2,4,3,4,5,2],[3,2],[2],[],[],[],...
  m       Map
   ₁≤     the dropsort function: [[2,4,4,5],[3],[2],[],[],[],...
 U        Prefix of unique elements: [[2,4,4,5],[3],[2],[]]
h         Drop last element (an empty list): [[2,4,4,5],[3],[2]]

হুশ হ'ল নতুন জেলি ...
এরিক দ্য আউটগল্ফার

1
এমএটিএল দ্বারা @ এরিকথিউটগলফার : /
Zgarb

6

পাইথন 3 , 131 112 103 95 বাইট

অনেক ধন্যবাদ @ মিঃ স্মোকিং 19 বাইটের জন্য এক্সকোডার !!

একটি বিস্ময়কর 17 বাইট জন্য @ অনেক ধন্যবাদ!

def f(x):
 a,*x=x or[0];m=[a];d=[]
 for i in x:[m,d][i<m[-1]]+=i,
 return[m]+(x and(d>[])*f(d))

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

ব্যাখ্যা:

def f(x):               #recursive function taking list, returns list of lists 
 if len(x)<2:return[x]  #for a single element return [element] 
 m=[x[0]];d=[]          #initialize main and dropped lists
 for i in x[1:]:[m,d][i<m[-1]]+=[i]  #append elements from the argument list accordingly into main and dropped list 
 return[m]+(d>[])*list(f(d)) #add main-list along with further evaluated dropped-list(recursived) into a list of lists

2
116 বাইট। if-elseমধ্যে ধসে যাবে [m,d][i<m[-1]]+=[i]
মিঃ এক্সকোডার

ওহো, অনেক অনেক ধন্যবাদ ... আমি সেই [m,d]জিনিসটি চেষ্টা করছিলাম কিন্তু এটি কোনওভাবেই কাজ করছে না ....
অফিসিয়ালাইম

1
113 বাইট(len(d)>0)হয় bool(d), কারণ খালি তালিকা পাইথন মধ্যে falsy হয়। +1, দুর্দান্ত সমাধান!
মিঃ এক্সকোডার


2
i,এটি একটি সংক্ষিপ্ত (i,), যা একটি tuple রয়েছে aa,*x = x or [0]হয় python3 এর বর্ধিত আন-প্যাকএখানে কয়েকটি উদাহরণ সহ এই বিষয়ে একটি সহায়ক এসও পোস্ট।
ovs

6

হাস্কেল , 113 107 102 92 বাইট

import Data.List
a!(b:c)|b<last a=a!c|1>0=a++[b]!c
a!b=a
g x@(b:c)|i<-[b]!c=i:g(x\\i)
g x=[]

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

এটা সত্যিই অনুভূত দীর্ঘ ।

ব্যাখ্যা

!তালিকায় ড্রপ বাছাই করে, যখন #ছাঁটাই সংগ্রহ করে। gতারপরে #তালিকাটি খালি তালিকায় ফলাফল রেকর্ডিং না করা পর্যন্ত বারবার প্রয়োগ করা হয়।


1
প্রতিস্থাপন করা হচ্ছে head aসঙ্গে a!!0একটি বাইট পরিমাণ সঞ্চয় হয়।
টমসডিং

5

এপিএল, 27 বাইট

{⍵≡⍬:⍬⋄(⊂X/⍵),∇⍵/⍨~X←⍵≥⌈\⍵}

ব্যাখ্যা:

  • ⍵≡⍬:⍬: যদি ইনপুট খালি থাকে তবে খালি তালিকাটি ফিরিয়ে দিন
  • X←⍵≥⌈\⍵: চলমান সর্বাধিক বা সমান সমস্ত সংখ্যা
  • (⊂X/⍵): এই সংখ্যাগুলির তালিকা,
  • ∇⍵/⍨~X: এর পরে বাকী সংখ্যাগুলিতে এই ফাংশনটি চালানোর ফলাফল

সাথে একটি বাইট সংরক্ষণ করুন {⍵≡⍬:⍬⋄(⊂⍵~r),∇r←⍵/⍨⍵<⌈\⍵}। মর্টেন তার ইমেলগুলির প্রতিক্রিয়া না পেয়ে চিন্তিত হচ্ছেন। সবকিছু ঠিক আছে?
অ্যাডম

ওহে প্রিয়। আপনি এখানে পরিচালিত হয়ে আমি খুশি। পরের সপ্তাহে দেখা হবে.
Adám

4

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

f=(a,l,r=[])=>a+a&&[a.filter(e=>e<l?!r.push(e):(l=e,1)),...f(r)]

Ungolfed:

f=(a,l,r=[])=>
  a+a&&                                    //any elements left?
  [a.filter(                               //filter elements that are in order,
    e=>e<l?!r.push(e):(l=e,1)              //push unsorted elements to r
   ),                                      //push() returns the new length of the array,
                                           //... so !push() will always return false
   ...f(r)                                 //recurse on r
  ]


1
দ্বিতীয় বিভাজনের জন্য আমি ভেবেছিলাম ?!কিছু অভিনব নতুন অপারেটর ...
নীল

হা, হ্যাঁ, আমি একটি ব্যাখ্যা অন্তর্ভুক্ত করা উচিত ছিল। এখন যোগ করা হয়েছে।
রিক হিচকক


(i,n,o=[])=>[i.filter(a=>(n||a)<=a?(n=a,1):!o.push([a])),...o]স্পষ্টতই, দুর্দান্ত মনরা (একধরণের) একইভাবে চিন্তা করে। দুর্ভাগ্যক্রমে আমি আর কোনও বাইট শেভ করে ফেলতে পারি না ... কেবল লক্ষ্য করা যায়, আপনি f=আপনার কোডটি সরিয়ে ফেলতে পারেন এবং সম্ভবত আমার কোড আপনাকে কীভাবে আরও বেশি গল্ফ করবেন সে সম্পর্কে কিছু ধারণা দিতে পারে।
ডেভিড আর্চিবাল্ড

ধন্যবাদ, @ ডেভিডআর্চিবাল্ড আমি f=আমার কোড থেকে সরাতে পারছি না , কারণ এটি পুনরাবৃত্ত হয়। আপনার একটি আকর্ষণীয় পন্থা, তবে এটি কয়েকটি পরীক্ষার ক্ষেত্রে কার্যকর হবে বলে মনে হয় না। উদাহরণস্বরূপ, এটি [[5,8],[4],[3],[7],[6]] পরের থেকে শেষের ক্ষেত্রে ফিরে আসে ।
রিক হিচকক

4

আর , 61 বাইট

f=function(x)if(sum(x|1)){print(x[b<-x==cummax(x)]);f(x[!b])}

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

পুনরাবৃত্তি ফাংশন। sum(x|1)সংক্ষিপ্তকরণের জন্য length(x), সুতরাং এই পুনরাবৃত্তি xখালি খালি চালানো হবে । cummaxএর xসাথে xআবার তুলনার তুলনা করা সর্বাধিক সংখ্যক হয়। এটি দৈর্ঘ্যের একটি বুলিয়ান ভেক্টর উত্পাদন করে x, যেখানে সমস্ত TRUs অনুসারে বাছাই করা মানগুলির সাথে মিল রাখে। আমরা যে ব্যবহার একটি উপসেট নিতে xএবং printএটা। এরপরে অবশিষ্টটির উপরে ফাংশনটি আবার বলা হয় x


4

জাভা 8, 182 179 177 বাইট

import java.util.*;l->{List r=new Stack(),t;for(int p,i,x;l.size()>0;)for(p=l.get(0),r.add(t=new Stack()),i=0;i<l.size();p=x)if((x=l.get(i++))>=p)t.add(l.remove(--i));return r;}

-3 বাইট @ নেভায়ে ধন্যবাদ । পরিবর্তে
ব্যবহার করে -2 বাইটStackVector

ব্যাখ্যা:

এখানে চেষ্টা করুন।

import java.util.*;            // Required import for List and Vector
l->{                           // Method with ArrayList<Integer> parameter and List return-type
  List r=new Stack(),          //  Return-List
       t;                      //  Temp-List
  for(int p,i,x;               //  Some temp integers
      l.size()>0;)             //  Loop (1) as long as there are still items left in the list
    for(p=l.get(0),            //   Set `p` to the first item of the list
        r.add(t=new Stack()),  //   Add a new inner List to the result-List
        i=0;i<l.size();        //   Inner loop (2) from 0 to the size of the list (exclusive)
         p=x)                  //     After every iteration, save the previous value in `p`
      if((x=l.get(i++))>=p)    //    If the current item is equal or larger than the previous:
        t.add(l.remove(--i));  //     Add it to the temp-List, and remove it from the input-List
                               //   End of inner loop (2) (implicit / single-line body)
                               //  End of loop (1) (implicit / single-line body)
  return r;                    //  Return result-List
}                              // End of method

আপনি কিছু সংরক্ষণ try{}catch{}করার জন্য চেক করার পরিবর্তে ব্যবহার করতে পারেন l.size()?
TheLethalCoder

1
আপনি অভ্যন্তরীণ লুপটি এটিকে শুরু করতে পারেন 0এবং বাইরের ফর-লুপ l->{List r=new Vector(),t;for(int p,i,x;l.size()>0;)for(p=l.get(0),r.add(t=new Vector()),i=0;i<l.size();p=x)if((x=l.get(i++))>=p)t.add(l.remove(--i));return r;}(-3 বাইট) এর বন্ধনীগুলি সরাতে পারেন ।
নেভায়ে

3

সি #, 188 203 বাইট

int[][]f(int[]a){int[]t=a.Where((n,i)=>i<1||n>=a[i-1]).ToArray(),m=a.Where((n,i)=>i>0&&n<a[i-1]).ToArray();var s=new int[][]{t}.ToList();if(m.Any())s.AddRange(f(m));return s.ToArray();}

বাইট গণনায় +18 এর জন্য রয়েছে:

using System.Linq;

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


@ রিকহিচকক 15 বাইট ব্যয়ে স্থির! চমৎকার জায়গা।
TheLethalCoder

ভাল কাজ:) +1
রিক হিচকক

3

সি ++ 14, 118 108 বাইট

ডাব্লু0এলএফ এর হাস্কেল উত্তর থেকে অ্যালগরিদম ব্যবহার করে ।

নামবিহীন জেনেরিক ল্যাম্বদা হিসাবে। প্রথম প্যারামিটারটি হ'ল ড্রপসোর্ট (যেমন vector<int>) এর মানগুলির একটি ধারক এবং দ্বিতীয় প্যারামিটারটি vector<vector<int>>রেফারেন্সের মাধ্যমে ফেরতের মানের জন্য উপযুক্ত পাত্রে (যেমন ) পাত্রে আবশ্যক ।

প্রোগ্রামের প্রথম সংস্করণে, R.clear;()প্রথম বিবৃতি ছিল, যাতে পাত্রে পাত্রে ফাঁকা থাকার দরকার হয় না। পিটার কর্ডেস ভেবেছিলেন এটি স্পেসিফিকেশনের মধ্যে থাকতে পারে, সুতরাং এটির জন্য 10 বাইট বাদ দিন।

[](auto A,auto&R){for(auto x:A){for(auto&D:R)if(D.back()<x){D.push_back(x);goto F;}R.emplace_back(1,x);F:;}}

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

Ungolfed:

[](auto A,auto&R){
 for(auto x:A){       //foreach item
  for(auto&D:R)       //foreach result list
   if(D.back()<x){    //x bigger than last element
    D.push_back(x);   //add x
    goto F;           //break and jump over the emplace
   }
  R.emplace_back(1,x);//create new list with this element
  F:;
 }
}

আপনি সম্ভবত বাদ দেওয়া থেকে দূরে সরে যেতে পারেন R.clear(), এবং কেবল কলার খালি ধারক দিয়ে শুরু করতে হবে।
পিটার কর্ডস

@ পিটারকর্ডস ভাল ধারণা, আমি আমার অন্যান্য সি ++ জবাবগুলিকে সম্মান জানাতে পারি যা রেফারেন্স প্যারামিটারের মাধ্যমে ফিরিয়ে দেয়।
কার্ল ন্যাপ্ফ

2

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

-4 বাইট আর্নল্ড পামারকে ধন্যবাদ

b,r=input(),[]
for i in b:
 for l in r:
	if l[-1]<=i:l+=[i];break
 else:r+=[[i]]
print r

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

@ ডাব্লু0এলএফ এর হ্যাশেলের অনুরূপ সমাধান [উত্তর] [১]

বিরল ব্যবহার ক্ষেত্রে for-elseনির্মাণের

বাছাই করা তালিকার মাধ্যমে আইট্রেট করুন for l in r(শুরুতে খালি)।
যদি উপাদান (ইনপুট থেকে) iতালিকার শেষ উপাদানটির চেয়ে বড় হয় l[-1]তবে তালিকায় উপাদান যুক্ত করুন l+=[i], বিরতি দিন।
যদি কোনও তালিকা গৃহীত হয় না, তবে এই এলেনদের সাথে নতুন তালিকা যুক্ত করুনr+=[[i]]


1
এটির কার্যকারিতাটি বাইরে নিয়ে 88 বাইট
আর্নল্ড পামার

1

আর, কাজ চলছে (89, তবে ব্যর্থ)

এখানে কিছু কাজ করে রাখা, কারণ আমি নিজেকে ব্যবহার করে কোণে ব্যাক করেছি %in%(এটি ডুপ্লিকেট এন্ট্রিগুলিতে ব্যর্থ হয়েছে, বিশেষত শেষ টেস্টের ক্ষেত্রে) এবং আমার এখন অন্যান্য কাজগুলি করা দরকার, তবে কেউ যদি এটির উপর ভিত্তি করে গড়ে তুলতে চান তবে এটি এখানে:

z=function(x){if(length(x)){a=x[x>=cummax(x)]
append(list(a),z(x[!(x%in%a)]))}else{NULL}}

Ungolfed:

z=function(x){
  if(length(x)){
    a=x[x>=cummax(x)]
    append(list(a),z(x[!(x%in%a)]))
  } else {
    NULL
  }
}

আপনার সম্ভবত এটি আপাতত মুছে ফেলা উচিত যাতে আপনি এটি ঠিক করার সময় ডাউনভোটগুলি না পান।
জিউসেপে

1
z=function(x)"if"(sum(x|1),{a=x[(i=x>=cummax(x))] c(list(a),z(x[!i]))},NULL)কাজ করে
জিউসেপে

এর মধ্যে ]এবং cএটির স্থানটি একটি নতুন লাইন (বা সেমিকোলন)
জিউসেপে

আমি এর "if"আগে কখনও দেখিনি , তবে আমি আর গল্ফিংয়ে বেশ নতুন। আপনার নিজের উত্তর হিসাবে পোস্ট করা উচিত, এবং আমি আমার নাম নিতে পারি। সমস্যাটি iঘটার জন্য আপনি সূচকে যা করেছেন তা পছন্দ করি %in%
অ্যালেক্স অ্যাসথেলেম

নাহ, আপনি সমস্ত পরিশ্রম করেছেন! আমি আপনার বাস্তবায়ন না হওয়া পর্যন্ত এই সমস্যাটি ঘিরে আমার মাথাটি গুটিয়ে রাখতে পারি না - আমি কখনই মনে করতে পারি না cummax!
জিউসেপে

1

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

a=>a.map(n=>(o.find(b=>[...b].pop()<=n)||(n=[n],o)).push(n),o=[])&&o

খুব সহজ, কেবল অ্যারের পুনরাবৃত্তি করে, প্রথম অভ্যন্তরীণ অ্যারের সন্ধান করে যার শেষ মান <= হ্রাসের জন্য পরবর্তী মানের মধ্যে রয়েছে, যদি কোনও উপস্থিত না থাকে তবে আউটপুটে পরবর্তী মান সহ একটি নতুন অভ্যন্তরীণ অ্যারে সংযোজন করুন, অন্যথায় প্রথমটির সাথে পরবর্তী মান যুক্ত করুন শর্তের সাথে মেলে এমন অভ্যন্তরীণ অ্যারে পাওয়া গেছে।

আপডেট

নীলকে ধন্যবাদ, কলব্যাককে আরও কমপ্যাক্ট হওয়ার জন্য রূপান্তরকরণ এবং পুনরায় সংগঠিত করার (...,o)জন্য তিনটি বাইট সংরক্ষণ ...&&oকরা map()হয়েছে।

f=a=>a.map(n=>(o.find(b=>[...b].pop()<=n)||(n=[n],o)).push(n),o=[])&&o;[[1,2,5,4,3,7],[10,-1,12],[-7,-8,-5,0,-1,1],[9,8,7,6,5],[10,13,17,21],[10,10,10,9,10],[5,4,3,8,7,6],[0,2,5,4,0,7]].map(f).map(JSON.stringify).map(v=>console.log(v))
.as-console-wrapper{max-height:100%!important}


1
&&oচেয়ে বাইট খাটো (,o)
নীল

@ নীল গাহ! দুর্দান্ত ক্যাচ, আপনাকে ধন্যবাদ
প্যাট্রিক রবার্টস

1
আমি আপনার পছন্দ [...b].pop()করি, তবে আমি মনে করি (o.find(b=>[...b].pop()<=n)||(n=[n],o)).push(n)আপনাকে একটি বা দুটি বাঁচায়।
নীল

এই হারে, আমি এটি একটি সম্প্রদায় পোস্ট হিসাবে চিহ্নিত করার বাধ্যবাধকতা বোধ করব ... জঘন্য
প্যাট্রিক রবার্টস

মাত্র কয়েকটা টুইটের কারণে? এটি এখনও মূলত একই কোড ...
নিল


1

সি (জিসিসি) , 176 175 173 বাইট

#define P(x)printf("%d ",t=x);
l[2][99];t;x;i;j;w;main(a){while(scanf("%d",*l+w)>0)++w;while(i=w){P(l[a=!a][w=0])for(j=1;j<i;++j){x=l[a][j];x<t?l[!a][w++]=x:P(x)}puts("");}}

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

কিছুটা পঠনযোগ্য সংস্করণ:

#define P(x)printf("%d ",t=x);
l[2][99];t;x;i;j;w;
main(a)
{
    while(scanf("%d",*l+w)>0)++w;
    while(i=w)
    {
        P(l[a=!a][w=0])
        for(j=1;j<i;++j)
        {
            x=l[a][j];
            x<t?l[!a][w++]=x:P(x)
        }
        puts("");
    }
}


আহ, অবশ্যই কত বোকা - ধন্যবাদ!
ফেলিক্স পামেন

1

পিএইচপি, 91 103 96 85 বাইট

( print_r($r);আউটপুটে প্রয়োজনীয়তা পূরণের জন্য 12 টি অক্ষর যুক্ত করতে সম্পাদিত )
(পিএইচপি ত্রুটিগুলি দেওয়ার সময় 7 বাইট
অপসারণ করতে সম্পাদিত ) (আরও অ্যাসাইনমেন্টটি গল্ফ করার সময় 11 বাইট অপসারণ সম্পাদনা)

while($a){$b=$d=[];foreach($a as$i)${max($b)>$i?d:b}[]=$i;$a=$d;$r[]=$b;}print_r($r);

ইনপুট দেওয়া হয়েছে $a, এটি ফলাফল উত্পাদন করে$r

সুন্দর:

while ($a) {
    $b = $d = [];
    foreach ($a as $i) {
        ${max($b) > $i ? d : b}[] = $i;
    }
    $a   = $d;
    $r[] = $b;
}

সিউডো-রিকার্সিভ বাইরের লুপটি আরেগুলিকে খালি রাখার জন্য আরম্ভ করে দেয় $bএবং $dতারপরে একটি বেসিক ড্রপ বাছাই করে লুপটি শেষ পর্যন্ত নতুন ইনপুট হিসাবে বিচ্ছিন্নতাগুলি সেট করে এবং ফলাফলগুলিতে রাখে$r


1

পিএইচপি , 102 বাইট , 98 বাইট

<?php function s($i){static$s;foreach($i as$v)${$v<max($l)?f:l}[]=$v;$s[]=$l;!$f?:s($f);return$s;}

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

-4 বাইট, @ আম্ব্রেলার ধন্যবাদ

ব্যাখ্যা

<?php

ফাংশনটি অ্যারের হিসাবে ইনপুট তালিকাটি গ্রহণ করে।

function s($i) {

$sযা পরিশেষে তালিকাভুক্ত তালিকাগুলির তালিকায় পরিণত হবে, তা স্থির ঘোষণা করা হয়েছে। এটি এই কার্যকারিতাটির সমস্ত কলগুলিতে তার ব্যাপ্তি প্রসারিত করে , ফাংশনটিকে আর্গুমেন্ট হিসাবে এই ফলাফলের তালিকাটি পাস না করে বা এটি ফেরত না দিয়ে পুনরাবৃত্তভাবে কল করার অনুমতি দেয়।

    static $s;

তালিকার প্রতিটি মান দিয়ে লুপ করুন।

    foreach ($i as $v)

এটি কি বর্তমানের বৃহত্তম তালিকার সদস্যের চেয়ে কম?

        $v < max($l) ?

হ্যাঁ, $fআরও বাছাইয়ের জন্য এটি তালিকায় রাখুন ।

                        $f[] = $v :

না, এটি তালিকায় রাখুন $l

                        $l[] = $v;

$lতালিকাগুলির তালিকার উপরে তালিকার চাপ দিন।

    $s[] = $l;

তালিকায় যদি কিছু থাকে তবে $fআরও বাছাইয়ের জন্য এটি আবার গোল করে প্রেরণ করুন।

    !$f ?: s($f);

তালিকাগুলির তালিকা ফিরিয়ে দিন।

    return $s;
}

1
আমি যে 31 টি অক্ষরের বাইরে রেখেছি তার হিসাব <?php function d($a){return$r;}, আপনি আমাকে আন্তরিকভাবে চূর্ণ করেছিলেন। একপাশে, আমি ঠিক বুঝতে পেরেছিলাম যে আমরা দুজনেই আউটপুট দিতে ভুলে গেছি।
ছাতা

আমি আমার সমাধান golfing করে থাকেন নিচে পুলিশের ব্যবহার না করেই বীট পুলিশের চেষ্টা এবং আমি পাওয়া একটি উপায় পুলিশের উন্নত করা যায়: আমার মনে হয় আপনি প্রতিস্থাপন চার অক্ষর সংরক্ষণ করতে পারবেন $v<max($l)?$f[]=$v:$l[]=$v;সঙ্গে ${$v<max($l)?f:l}[]=$v;- অন্তত, এটা আমার পরীক্ষার কাজ করে।
ছাতা

@ ছাতা, ফিরছে না, আউটপুট দিচ্ছে ??? এবং যারা 4 বাইট জন্য ধন্যবাদ। ভেরিয়েবলের নামটি মূল্যায়নের জন্য কোড ব্যবহার করে আমি কখনও এ জাতীয় কাজ করার কথা ভাবি না। ভবিষ্যতের চ্যালেঞ্জগুলির জন্য আমাকে অবশ্যই এটি বিবেচনা করতে হবে ... 🤔
ওয়েবস্মিথেরি

এটি পাওয়া গেছে, sensক্যমত্য
ছাতা

0

সেজ, 102 বাইট

def f(w,a=[]):
 for x in w:
  q,c=exists(a,lambda b:b[-1]<=x)
  if q:c+=[x]
  else:a+=[[x]]
 return a

@ ডেড পসুমের উত্তরের সাথে খুব মিল ।
প্রত্যেক সদস্য আপনার স্বাক্ষরে xএর wপ্রথম লিস্টে aসঙ্গে {তালিকার তালিকা} xএটা শেষ উপাদান তার চেয়ে অনেক বেশী।
যদি কিছুই না হয় তবে এতে যুক্ত [x]হয় a

আমি সত্যিই এটা পছন্দ যদি হতো existsফিরে aযদি কিছুই পাওয়া যায় নি! @ অফিসিয়ালাইমের এক-লাইন ধারণাটি প্রয়োগ করার চেষ্টা করছে ...

প্রশ্ন: আমি যদি আমার কোডটি ফাংশন থেকে সরিয়ে ফেলি, আমাকে wডান ইনপুট দিতে হবে? তাহলে কি এটি বাইটস সংরক্ষণ করবে?


0

ওকামল , 69 62 বাইট

let rec d=function h::i::t when h>i->d(h::t)|h::t->h::d t|x->x

ব্যাখ্যা:

let rec d = function (* Implicitly take an list as a parameter *)
    (* If the list starts with two elements h and i and h is greater than i, drop i and sort the list starting with h and the rest t *)
    | h::i::t when h > i -> d (h::t) 
    (* If h is not greater than i, make a new list starting with h and a tail containing the drop sorted rest *)
    | h::t -> h::d t
    (* If none of the cases apply, the list is empty. *)
    | x -> x

0

এপিএল, 100 88 83 79 78 57 56 77 76 বাইট

{(E/⍵),⊂⍵/⍨~E←(⍬≢⍴)¨⍵}∘{⍵≡(S←¯1↓⍵),⊃⊃⌽⍵:⍵⋄∇S,⊃⌽⍵}{⍵≡X←⍵/⍨~V←⍵≠⌈\⍵:⍵⋄X(∇V/⍵)}

ক্রিটিকি লিথোসকে ধন্যবাদ -0 বাইট ...

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

এটি করার আরও কিছু ভাল উপায় থাকতে হবে ( আছে )। কোন টিপস খুব প্রশংসা করা হয় এবং স্বাগত জানাই।

কিভাবে?

(দ্রষ্টব্য, এই ব্যাখ্যার কিছু ভুল হতে পারে, কারণ আমি কীভাবে এটি ভুলে গিয়েছিলাম)

{⍵≡X←⍵/⍨~V←⍵≠⌈\⍵:⍵⋄X(∇V/⍵)} - separate the argument into nested drop-sorts
{⍵≡(S←¯1↓⍵),⊃⊃⌽⍵:⍵⋄∇S,⊃⌽⍵}  - un-nesting (passed the result of the above)
{(E/⍵),⊂⍵/⍨~E←(⍬≢⍴)¨⍵}∘     - fixing array mishaps (passed the result of the above)

{⍬≢⍴⍵}হয়ে উঠতে পারে(⍬≢⍴)
ক্রিটিকি লিথোস

অলডিডি আপনার মন্তব্য না দেখে তা করেছে,
জাকারিয়া

এর উদ্দেশ্য কী {(⍵/⍨~E),⊂⍵/⍨E←(⍬≡⍴)¨⍵}? এটি অন্য সমস্ত কিছু থেকে পৃথক হয়ে গেছে বলে মনে হচ্ছে
ক্রিটসি লিথোস

তা ছাড়া, প্রথম টেস্ট কেস ভালো কিছু হবে [[1,2,5,7],[4],3], প্রয়োজনীয় পরিবর্তে [[1,2,5,7],[4],[3]]
জাকারি

আপনি সম্ভবত সেই ডিএফএনটি সংক্ষিপ্ত করতে সক্ষম হতে পারেন(,¨)
ক্রিটিক্সী লিথোস


0

জাভাস্ক্রিপ্ট (নোড.জেএস) , 125 109 106 বাইট

- 16 Zachary থেকে 18 বাইট

-1 সরিয়ে দিয়ে {এবং }"বর্তমানের শেষ সেট" অন্তর্ভুক্ত করার জন্য ইনক্রিমেন্টার পরিবর্তন করে

m=x=>{z=[[],[]];l=NaN;for(i=0;i<x.length;l=x[i++])if(l>x[i])z[1].push(x[i]);else z[0].push(x[i]);return z}

মূলত, জিজ্ঞাসা করা হয় বর্তমান আইটেমটি শেষ আইটেমের চেয়ে বড়, প্রথম তালিকায় যুক্ত করুন। অন্যথায়, দ্বিতীয় যোগ করুন।

এই সময়ে পাওয়া গেছে যে যে কোনও সংখ্যার সাথে তুলনা করে NaNসর্বদা ফলাফল হয় false। মজাদার!

ব্যাখ্যা:

m = x => {                         // Create function
  z = [[], []];                      // Initialize dropsort output
  l = NaN;                           // Initialize last element
  for (i = 0; i < x.length; l=x[i++])// For each item in input...
    if (l > x[i])                    // If current item is greater than previous
      z[1].push(x[i]);               // Then add it to the first part of output
    else                             // Elsewise
      z[0].push(x[i]);               // Add it to the nonordered part of the dropsort
                                     // Set last item to current item
  }                                  // Repeat
  return z                           // Return finished dropsort
}                                    // End function

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


আপনার কি ব্যবহার করতে হবে var?
জাকারিয়া

@ জাচারি, আমাকে পরীক্ষা করতে দাও!
স্টান স্ট্রাম

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