সংক্ষিপ্ত সংখ্যার একঘেয়েমিক উপাখণ্ডার সংখ্যা


23

চ্যালেঞ্জের বিবরণ

একটি মনোোটোনিক সাবকোয়েন্সটি[a1, a2, ..., an] এমন সংখ্যার ক্রম

a1 <= a2 <= ... <= anবা a1 >= a2 >= ... >= an[1, 3, 3, 7, 9, 13, 13, 100]হ'ল একঘেয়েমিক (ক্রমহ্রাসমান) উপসর্গ, পাশাপাশি [9, 4, 4, 3, 0, -10, -12](এটি একটি ক্রমবর্ধমান), তবে [1, 3, 6, 9, 8]তা নয়। পূর্ণসংখ্যার একটি তালিকা দেওয়া (যে কোনও যুক্তিসঙ্গত বিন্যাসে), সবচেয়ে ছোট সংখ্যাকে আউটপুট দেয় Nযাতে এই পূর্ণসংখ্যার Nক্রমটি একঘেয়ে সিকোয়েন্সগুলিতে বিভক্ত হয় ।

উদাহরণ

[1, 3, 7, 5, 4, 2] -> [[1, 3, 7], [5, 4, 2]] -> 2
[1, 2, 3, 4, 5, 6] -> [1, 2, 3, 4, 5, 6]     -> 1
[3, 1, 5, 5, 6]    -> [[3, 1], [5, 5, 6]]    -> 2
[4, 6, 8, 9, 1, 6] -> [[4, 6, 8, 9], [1, 6]] -> 2
[3, 3, 3, 3]       -> [[3, 3, 3, 3]]         -> 1
[7]                -> [[7]]                  -> 1
[]                 -> []                     -> anything (you don't actually have to handle an empty list case)
[1, 3, 2, -1, 6, 9, 10, 2, 1, -12] -> [[1, 3], [2, -1], [6, 9, 10], [2, 1, -12]] -> 4

স্পষ্ট করার জন্য, পরবর্তীগুলি অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে, তাই না?
Zgarb

@ জাগারব হ্যাঁ, তারা করে।
shooqie

3
আমি এমন একটি টেস্ট কেস যুক্ত করার পরামর্শ দেব যেখানে ক্রমগুলি সর্বদা বিপরীত দিকে যায় না: [4,4,8,8,1,4,5] -> 2
নাথান মেরিল

@ নাথানমারিল: ভালো পয়েন্ট, একটি যুক্ত হয়েছে।
shooqie

যখন আপনি লিখতে যে একটি খালি স্ট্রিং জন্য, ফল 0 / undefined, শোনাচ্ছে মত এটা হয় 0 বা প্রতিনিধিত্ব থাকা উচিত undefinedআমাদের ভাষায়, কিন্তু জোনাথন অ্যালান'স জেলি উত্তর করা আপনার মন্তব্যকে থেকে, এটা দেখে মনে হচ্ছে undefinedঅর্থ anything... কোনটা তোমার মানিব্যাগ ? দ্বিতীয় ক্ষেত্রে, আমি anythingপরিবর্তে লেখার পরামর্শ দেবundefined
দাদা

উত্তর:


6

ব্র্যাচল্যাগ , 12 বাইট

~c:{<=|>=}al

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

এটি false.খালি তালিকার জন্য ফিরে আসে []

ব্যাখ্যা

(?)~c                 Take a list of sublists which when concatenated result in the Input
     :{<=|>=}a        Each sublist must be either increasing or decreasing
              l(.)    Output is the length of that list

এটি ~cসবচেয়ে ছোটটিকে ফিরিয়ে দেবে কারণ সংক্ষিপ্ত সংখ্যক সাবলিস্ট থেকে সবচেয়ে বড়তে পয়েন্ট তৈরি করবে।


টিআইও লিঙ্কে "জেড" যুক্তিটি কী? (এটি কোনও কমান্ড লাইনের আর্গুমেন্টের মতো প্রোগ্রামের অংশ বলে মনে হচ্ছে)।
জোনাথন অ্যালান

এই টুইটটি আউটপুট হিসাবে যুক্ত করুন আদর্শভাবে যদি আমরা টিআইওর ইন্টারফেসটি কাস্টমাইজ করতে পারি তবে ইনপুট এবং আউটপুট থাকবে এবং কোনও যুক্তি নেই। যুক্তিটি হ'ল Zকারণ Zএকটি পরিবর্তনশীল নাম; সুতরাং আমরা বলছি "আউটপুটটি ভেরিয়েবল হিসাবে এই প্রোগ্রামটি কল করুন"। আপনি অন্য যে কোনও বড় অক্ষরে পরিবর্তন Zকরতে পারেন ; এটি কেবল একটি পরিবর্তনশীল নাম। এই যুক্তিটি বিদ্যমান থাকার কারণটি হ'ল ভেরিয়েবলের পরিবর্তে আউটপুটটিকে আসলে কিছুতে সেট করার সম্ভাবনাটিকে মঞ্জুরি দেওয়া।
39

(উদাহরণস্বরূপ যদি আপনি আউটপুট সেট 4যে উদাহরণে, এটা আপনাকে বলতে হবে যে সঠিক কি না )
Fatalize

1
@ জোনাথন অ্যালান যে কোনও প্রোলোগ ভাষার মতো এটি: ভবিষ্যদ্বাণীগুলি কেবল সফল বা ব্যর্থ হতে পারে এবং কোনও মান ফিরিয়ে দেয় না। সুতরাং একটি আউটপুট পেতে একটিতে প্রিডিকেটে একটি পরিবর্তনশীল যুক্তি থাকতে হবে যা ফলাফলটিতে একীভূত হবে।
49

1
@ 3জোনাথান অ্যালান এটি অবশেষে ব্যর্থ হবে কারণ এটি সাবলিস্টগুলির কোনও তালিকা খুঁজে পাবে না যেখানে সমস্ত একঘেয়েমি এবং দৈর্ঘ্যের 3। এটি কেবল দীর্ঘ সময় নেয় কারণ এটি সাবলিস্টগুলির সমস্ত সম্ভাব্য তালিকাগুলি চেষ্টা করবে, এমনকি এটি 3 টিরও বেশি মূল্যের কারণ তালিকাটি সন্ধানের পরে দৈর্ঘ্যটি পরীক্ষা করা হয়। কারণ 5এটি বলে trueযে প্রকৃতপক্ষে 5মনোটোনিক সাবলিস্টগুলির সাথে দৈর্ঘের অন্তত একটি তালিকা রয়েছে যা কাজ করে। সুতরাং আউটপুটটি পরিবর্তনশীল হলে এবং এই দৈর্ঘ্যের কোনও তালিকা রয়েছে যা আউটপুট একটি পূর্ণসংখ্যা হলে কাজ করে কিনা এই প্রোগ্রামটি সর্বনিম্ন দৈর্ঘ্য দেয়।
ফ্যাটালাইজ করুন

4

পার্ল, 65 বাইট

-nপতাকার জন্য 62 বাইট কোড + 3 বাইট ।

monot_seq.pl:

#!perl -n
s/\S+ /($_<=>$&)*($&<=>$')-$g>=0?$g=1:$.++;$g--;$_=$&/ge,$_=$.

স্থানগুলি দ্বারা পৃথক পৃথক সংখ্যা সহ চূড়ান্ত নিউলাইন ছাড়াই ইনপুটটি দিন:

$ echo -n "1 3 2 -1 6 9 10 2 1 -12" | perl -M5.010 monot_seq.pl
4

-5 বাইটস @ গ্যাব্রিয়েল বেনামিকে ধন্যবাদ।


রূপান্তর ($&<=>$1)*($1<=>$2)||$1==$2করে 5 বাইট সংরক্ষণ করুন($&<=>$1)*($1<=>$2)>=0
গ্যাব্রিয়েল বেনামি

@ গ্যাব্রিয়েল বেনামি প্রকৃতপক্ষে ধন্যবাদ।
দাদা

2

গণিত, 111 বাইট

d=#[[2]]-#[[1]]&;r=Rest;f@{n_}:=1;f@k__:=If[d@k==0,f@r@k,g[k Sign@d@k]];g@{n_}:=1;g@k__:=If[d@k>0,g@r@k,1+f@r@k]

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

d = #[[2]] - #[[1]] &;         function: difference of the first two elements
r = Rest;                      function: a list with its first element dropped
f@{n_} := 1;                   f of a length-1 list equals 1
f@k__ := If[d@k == 0, f@r@k,   if the first two elements are equal, drop one
                                 element and call f again ...
            g[k Sign@d@k]];  ... otherwise call the helper function g on the
                                 list, multiplying by -1 if necessary to ensure
                                 that the list starts with an increase
g@{n_} := 1;                   g of a length-1 list equals 1
g@k__ := If[d@k > 0, g@r@k,    if the list starts with an increase, drop one
                                 element and call g again ...
            1 + f@r@k];        ... otherwise drop one element, call f on the
                                 resulting list, and add 1

d=#2-#&@@#&;এছাড়াও, হয় fবা gunary অপারেটর হিসাবে সংজ্ঞায়িত ±সম্ভবত কিছু বাইট সংরক্ষণ করবে।
মার্টিন ইন্ডার

2

জেলি , 19 বাইট

IṠḟ0E
ŒṖÇ€€0e$Ðḟḅ1Ṃ

TryItOnline! অথবা সমস্ত পরীক্ষা চালান (খালি তালিকার ফলাফল 1)

কিভাবে?

IṠḟ0E - Link 1, test for monotonicity: a sublist
I     - incremental differences
 Ṡ    - sign {fall:-1; same:0; rise:1}
  ḟ0  - filter out the zeros
    E - all equal?

ŒṖÇ€€0e$Ðḟḅ1Ṃ - Main link
ŒṖ            - all partitions of the input list
  Ç€€         - call last link (1) as a monad for €ach for €ach
        Ðḟ    - filter out results:
       $      -    last two links as a monad
     0e       -        contains zero?
          ḅ1  - convert from unary (vectorises)
            Ṃ - minimum

(আমি নিশ্চিত নই যে বাইট সংখ্যা কমানোর জন্য এটি সবচেয়ে উপযুক্ত পদ্ধতি)


@ শুকী - "অপরিবর্তিত" মন্তব্যে খালি তালিকার জন্য আমরা কোনও মূল্য ফেরত দিতে পারি ? এটি প্রত্যাবর্তন করে 1(যা আমি আসলে মনে করি তার চেয়ে আরও বেশি অর্থবোধ করে 0)
জোনাথন অ্যালান

1
আমি বলতে চাইছি, এর undefinedঅর্থ - ফলাফলটি অপ্রাসঙ্গিক।
shooqie

2

পার্ল, 98 97 96 79 বাইট

($a,$b)=($a<=>$b)*($b<=>$c)<0?($c,shift,$d++):($b,$c)while$c=shift;say$d+1 if$a

ইনপুট সংখ্যাগুলির তালিকা হিসাবে সরবরাহ করা হয়, ফাঁক দিয়ে আলাদা করে, রানটাইমের সময় দেওয়া হয়, যেমন

perl -M5.010 monotonic.pl 1 3 2 -1 6 9 10 2 1 -12
4

(4 আউটপুট হয়)

রিডেবল:

($a,$b)=($a<=>$b)*($b<=>$c)<0
    ?($c,shift,$d++)
    :($b,$c)
  while$c=shift;
say$d+1
  if$a

'স্পেসশিপ অপারেটর' <=>এলএইচএস <আরএইচএস, 0 যদি এলএইচএস = আরএইচএস, এবং +1 এলএইচএস> আরএইচএস হলে -1 প্রদান করে। যখন তিন অনুক্রমিক উপাদানের তুলনা $a,$b,$cযদি তারা একঘেয়ে নির্ধারণ করতে, এটি নির্ধারণ করতে এটি কেস না যে ঠিক এক শুধুমাত্র প্রয়োজন $a<=>$b, $b<=>$c1 এবং অন্যান্য -1 - যা শুধুমাত্র তখনই ঘটে যখন তাদের পণ্য -1। যদি হয় $a==$bবা $b==$c, তবে ক্রমটি একঘেয়ে, এবং পণ্য 0 হয় $a < $b < $c, তবে উভয়ই -1, এবং -1 * -1 = 1 এ $a > $b > $cফলাফল হয়, তবে উভয়েরই ফলাফল 1, এবং 1 * 1 = 1 হয়। উভয় ক্ষেত্রেই, ক্রমটি একঘেয়ে, এবং আমরা চালিয়ে যেতে চাই।

যদি পণ্যটি 0 এর চেয়ে কম হয় তবে আমরা জানি যে ক্রমটি একঘেয়ে নয়, এবং আমরা $a,$bবর্তমানে আমাদের যে মানগুলি রেখেছি তা বাতিল করে দিচ্ছি এবং আমাদের উত্তরোত্তর কাউন্টারটিকে বাড়িয়ে তুলব । অন্যথায়, আমরা এক নম্বর এগিয়ে যান।

ইনপুটটি খালি থাকলে কিছুই দেয় না, অন্যথায় স্বল্পতম সংঘবদ্ধ একঘেয়েমিক উপাখণ্ডার সংখ্যা দেয়


আপনার মধ্যে 1এবং if(অথবা সম্ভবত আপনি পুরানো পার্লগুলিতে করেন তবে সাম্প্রতিক সময়ে যা আপনি করেন না) এর মধ্যে কোনও স্থানের দরকার নেই । এছাড়াও আপনি (সম্ভবত) shiftদ্বারা প্রতিস্থাপন করতে পারেন pop। তবে, এমন কয়েকটি পরীক্ষার কেস রয়েছে যার উপর আপনার কোডটি কাজ করে না: 6 3 6 3(আপনি 2 এর পরিবর্তে 3 টি মুদ্রণ করেন), 4 3 2 1(আপনি 1 এর পরিবর্তে 2 টি মুদ্রণ করেন)। সেগুলি সমাধানের popপরিবর্তে ব্যবহার করে shiftনতুন তৈরি করুন ( 1 2 3 41
দাদা

1

সি # 6, 297 209 বাইট

using System.Linq;int G(int[] a)=>a.Any()?a.SkipWhile((x,i)=>i<1||x>=a[i-1]).Count()<a.SkipWhile((x,i)=>i<1||x<=a[i-1]).Count()?G(a.Select(x=>-x).ToArray()):G(a.SkipWhile((x,i)=>i<1||x<=a[i-1]).ToArray())+1:0;

ব্যাখ্যার সাথে অবহেলিত

int G(int[] a)=>
    a.Any()
        ?a.SkipWhile((x,i)=>i<1||x>=a[i-1]).Count()<a.SkipWhile((x,i)=>i<1||x<=a[i-1]).Count()   // If a begins by decreasing (including whole a decreasing)...
            ?G(a.Select(x=>-x).ToArray())   // ... Then flip sign to make a begins by increasing
            :G(a.SkipWhile((x,i)=>i<1||x<=a[i-1]).ToArray())+1   // ... Else skip the increasing part, recursively find the remaining part number, then add 1
        :0;   // Return 0 if a is empty

1

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

f=(d,c,b,...a)=>1/b?(d>c)*(b>c)+(d<c)*(b<c)?1+f(b,...a):f(d,b,...a):1

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


0

Clojure, 97 বাইট

#((reduce(fn[[C i]s](let[S(conj C s)](if(or(apply <= S)(apply >= S))[S i][[s](inc i)])))[[]1]%)1)

reduceবর্তমান অনুচ্ছেদটি নজর রাখে এবং কতবার <=এবং >=শর্ত ব্যর্থ হয় তা গণনা করে । সর্বশেষে 1ফলাফলটি থেকে দ্বিতীয় উপাদান নেয় (পাল্টা হচ্ছে i)।

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