এটি পর্যায়ক্রমে দোল হয়?


19

চ্যালেঞ্জ

একটি তালিকা দেওয়া হয়েছে, তালিকাটিকে ক্রমবর্ধমান এবং হ্রাসকারী উপাদানের রানগুলিতে ভাগ করে নেওয়ার ফলে সমান আকারের তালিকার একটি তালিকা তৈরি হবে কিনা তা নির্ধারণ করুন।

অন্য কথায়, তালিকার "টার্নিং পয়েন্টগুলি" সমানভাবে ব্যবধানে পৃথক হয়ে গেছে।

উদাহরণ

এখানে একটি উদাহরণ: 0, 3, 7, 5, 2, 3, 6

0, 3, 7বৃদ্ধি, 7, 5, 2হ্রাস এবং 2, 3, 6বৃদ্ধি পায়। সুতরাং এটি সত্য।

আরেকটি উদাহরণ: 1, 4, 6, 8, 5, 3, 5, 7, 9

1, 4, 6, 8বৃদ্ধি, 8, 5, 3হ্রাস এবং 3, 5, 7, 9বৃদ্ধি পায়। সুতরাং এটি মিথ্যা।

বিধি এবং বিশেষ উল্লেখ

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

পরীক্ষার মামলা

Input -> Output
1, 3, 5, 8, 6, 4, 2, 3, 5, 7, 6, 4, 2, 5, 7, 9, 6, 4, 2 -> True
1, 3, 5, 7, 6, 4, 5, 7, 9, 8, 6, 4, 2, 3, 5 -> False
2, 3, 6, 4, 2, 3, 7, 5, 3, 4, 6 -> True
3, 6, 4, 8, 5, 7, 3, 5, 2 -> True
8 -> True
1, 3, 5, 7 -> True
4, 5, 7, 6, 8, 9 -> False
6, 4, 2, 3, 5, 4, 2 -> True
8, 5, 3, 2, 4, 6, 5, 3, 2, 5, 7 -> False

দ্রষ্টব্য : আপনি ধরে নিতে পারবেন না যে সমস্ত সংখ্যার একক অঙ্ক (যদি না আপনার ভাষাটি পরিচালনা করতে সক্ষম হয় তবে); পরীক্ষার কেসগুলি প্রতিফলিত করে যে কেবল এইভাবে মামলাগুলি টাইপ করা আমার পক্ষে সহজ: পি that রেঞ্জের বাইরের সংখ্যার সাথে কয়েকটি পরীক্ষার মামলা এখানে দেওয়া হল:

1, 5, 10, 19, 15, 13, 8, 13, 18, 23, 19, 18, 14 -> True
15, 14, 17, 16, 19, 18 -> True
12, 16, 19, 15, 18, 19 -> False

প্রথম রানটি কি সর্বদা বাড়বে, বা ইনপুটটি কি হ্রাসমান রান দিয়ে শুরু হবে?
জর্দান

@ জর্ডান কমতে শুরু করতে পারে। আমি এটির জন্য একটি পরীক্ষার কেস যুক্ত করব।
হাইপারনিউট্রিনো

দলগুলি সবসময় সম্পূর্ণ হয়? উদাহরণস্বরূপ 1, 2, 3, 2বৈধ ইনপুট হবে, এবং যদি তাই সত্য বা মিথ্যা বিবেচনা করা হয়? সেই উদাহরণে পরবর্তী মান 1 হওয়ার পরে এটি সত্য হয়ে যাবে, তবে 3 টি এটি মিথ্যা করে দেবে।
টম কার্পেন্টার

1
@ টমকার্পেন্টার এটি মিথ্যা বলে বিবেচিত। এগুলি অবশ্যই একই দৈর্ঘ্যের হতে হবে (এবং এইভাবে সমস্ত সম্পূর্ণ)।
হাইপার নিউট্রিনো

উত্তর:


9

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

dZS&Y'da~

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

লুইস মেন্ডোকে একটি বাইট সংরক্ষণ করে!

ব্যাখ্যা:

ধরুন ইনপুটটি হ'ল [0, 3, 7, 5, 2, 3, 6]:

            % Implicit input:                                [0, 3, 7, 5, 2, 3, 6]
d           % Difference between adjacent elements:          [3, 4, -2, -3,  1,  3]
 ZS         % Sign of the differences:                       [1, 1, -1, -1, 1, 1]
   &Y'      % Length of runs of consecutive elements:        [2, 2, 2]
     d      % Difference between the lengths:                [0, 0]
      a     % Any non-zero elements:                         False
       ~    % Negate, to get a truthy value if all are zero: True

8

জেলি , 6 বাইট

IṠŒgAE

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

আদনানকে ধন্যবাদ 1 বাইট সংরক্ষণ !

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

আইজিএই - সম্পূর্ণ প্রোগ্রাম।

আমি - বৃদ্ধি (ডেল্টাস)।
 Ṡ - প্রত্যেকের স্বাক্ষর। 1ণাত্মক হলে -১, শূন্য হলে 0, ধনাত্মক হলে 1।
  --G - সংলগ্ন উপাদানগুলির গ্রুপ রান।
    উ - পরম মান। Vectorizes। এই মানচিত্র -1 এবং 1 একই মান।
     E - সব কি সমান?

Golfing সময়, আমি কিছু শান্ত, আর বিকল্প আবিষ্কৃত: IṠŒgL€E, IṠŒrṪ€E(ব্যবহারসমূহ রান দৈর্ঘ্য সঙ্কেতাক্ষরে লিখা পরিবর্তে)।


আমি মনে করি IṠŒgḂEএকটি বাইট সংরক্ষণ করা উচিত
আদনান

@ আদনান কি A(নিখুঁত মান) প্রতিস্থাপন করতে পারে বা এমন কোন কৌশল আছে যা আমি পাই না ?
মিঃ এক্সকোডার

1 এবং -1 একই সংখ্যায় মিলিত কোনও ফাংশনই যথেষ্ট হবে
আদনান

7

অক্টাভা , 54 50 বাইট

@(x)nnz(unique(diff(find([diff(diff(x)>0) 1]))))<2

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

ব্যাখ্যা

@(x)nnz(unique(diff(find([diff(diff(x)>0) 1]))))<2

@(x)                                                % Define anonymous function    
                               diff(x)              % Deltas (consecutive differences)
                                      >0            % Positive? Gives signs
                          diff(         )           % Deltas between signs
                         [                1]        % Append 1 to "close" last group
                    find(                   )       % Indices of nonzeros
               diff(                         )      % Deltas. Gives group lengths
        unique(                               )     % Remove duplicates
    nnz(                                       )    % Number of nonzeros. Gives length
                                                <2  % If 1 or 0: input is periodic

6

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 38 বাইট

Equal@@(1^Differences@#~SplitBy~Sign)&

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

ব্যাখ্যা

Equal@@(1^Differences@#~SplitBy~Sign)&  (* Input:                {3, 6, 4, 8, 5, 7, 3, 5, 2} *)

          Differences@#                 (* Take differences:     {3, -2, 4, -3, 2, -4, 2, -3} *)
                       ~SplitBy~Sign    (* Split by sign:        {{3}, {-2}, {4}, {-3}, {2}, {-4}, {2}, {-3}} *)
        1^                              (* Raise to power of 1:  {{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}} *)
Equal@@                                 (* Check equal:          True *)

Equal@@(1^Split@Sign@Differences@#)&2 বাইট সংক্ষিপ্ত, এবং এর Equal@@Im@Split@Sign@Differences@#&চেয়ে আরও 1 বাইট ছোট।
মিশা লাভরভ

এবং এখন যেহেতু আমি জটিল সংখ্যাগুলি সম্পর্কে চিন্তা করছি, Argপরিবর্তে Signঅন্য বাইট সংরক্ষণ করে using
মিশা লাভরভ

5

05 এ বি 1 ই , 8 7 বাইট

¥0.SγaË

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

-1 আদনানকে ধন্যবাদ।


¥0.SγaËএকটি বাইট সংরক্ষণ করা উচিত
আদনান

aআমি কী তা ডক্সে এটি খুঁজে পাচ্ছি না। is_letter(a)???
ম্যাজিক অক্টোপাস আরন

হ্যাঁ, এটি সঠিক
আদনান

@ আদনান আহ্হ্ ... অদ্ভুত ধারণা, ভাল ধারণা
ম্যাজিক অক্টোপাস উরন

4

সি (জিসিসি) , 143 140 138 136 135 132 বাইট

  • তিনটি বাইট সংরক্ষণ করা; rব্যবহারটি বন্ধ করার পরিবর্তে ফাংশনের রিটার্ন বুলিয়ান সংরক্ষণ করতে একটি পরিবর্তনশীল ব্যবহার করে return
  • দুটি বাইট সংরক্ষণ করা; golfing int A[]করার int*A(ক পয়েন্টার একটি অ্যারে ব্যবহার করে পরিবর্তে)।
  • স্টেডিবক্সকে দুটি বাইট সংরক্ষণ করা ; golfing f(int*A,int a)করতে f(A,a)int*A;
  • একটি বাইট সংরক্ষণ করা; golfing if(d!=...করতে if(d-...
  • তিনটি বাইট সংরক্ষণ করা; golfing ;j++...j+1করতে ;...++j
j,d,e,l,m,r;f(A,a)int*A;{for(d=A[0]>A[1],r=1,j=m=l=0;j-~-a;){l++;if(d-(e=A[j]>A[++j]))d=e,j--,r*=l>=(m=!m?l:m),l=0;}r*=-~l==m||m<1;}

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

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


আপনি f(A,a)int*A;পরিবর্তে ব্যবহার করতে পারেন f(int*A,int a)
স্টেডিবক্স


3

পাইথন 2 , 107 105 103 97 96 94 91 বাইট

lambda l:len({sum(g)**2for k,g in groupby(map(cmp,l[:-1],l[1:]))})<2
from itertools import*

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

পাইথন 3 , 102 100 97 বাইট

lambda l:len({len([*g])for k,g in groupby(x>y for x,y in zip(l,l[1:]))})<2
from itertools import*

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


আপনি {...}পরিবর্তে set(...)3 বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন
রোড

3

কাস্তে , 7 বাইট

EmLġ±Ẋ-

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

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

EmLġ ± Ẋ- ~ সম্পূর্ণ প্রোগ্রাম।

     ~ Adj সংলগ্ন উপাদানগুলির জোড়গুলির উপরে মানচিত্র।
      - sub বিয়োগের সাথে (এটি ডেল্টাকে গণনা করে)
   equality equality সমতা প্রিডিকেট ব্যবহার করে গ্রুপ।
    । ~ সাইন
 এমএল the দৈর্ঘ্য পান।
E all সব কি সমান?

কিছু সুন্দর বিকল্প:

εġLġ±Ẋ-
εüLġ±Ẋ-

2

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

এটি অনেক দীর্ঘ বলে মনে হচ্ছে। আমি সম্ভবত এখানে কিছু মিস করছি ... হয় হয় trueবা ফিরে আসে undefined

f=(a,p=1)=>a.every((n,i)=>!i|!(1/(y=a[i+1]))|!(i%p)^y>n^a[i-1]>n)||a[p]&&f(a,p+1)

একটি নির্দিষ্ট সময়ের জন্য দেখায় 0 <পি <a.length যেমন যে সব দিক পরিবর্তন যে ঘটতে পি উপাদানগুলিতে ।

পরীক্ষার মামলা


2

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

import re
def f(x):exec"x=map(cmp,x[1:],x[:-1]);"*2;re.match('.([^1]*)(-?1, \\1)*9',`x+[9]`)<0<_

এটি অনলাইন চেষ্টা করুন!প্রস্থান কোডের মাধ্যমে আউটপুট: ক্র্যাশ (1) মিথ্যা, পরিষ্কার প্রস্থান (0) সত্য।

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

def f(x):d=map(cmp,x[1:],x[:-1]);l=len(d);s=(d+[0])[0];k=(d+[-s]).index(-s);print((k*[s]+k*[-s])*l)[:l]==d

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


আমি নিশ্চিত নই, যদিও (...)[:l]<dএর বিপরীতে হতে পারে (...)[:l]==d
জোনাথন ফ্রেচ

2

হাস্কেল , 79 78 77 বাইট

import Data.List
g s|h:t<-(1<$)<$>group(zipWith(<)s$tail s)=all(==h)t
g _=1<3

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

একটি তালিকা দেওয়া হয়েছে s, zipWith(<)s$tail sপ্রতিটি উপাদান এটির উত্তরাধিকারীর চেয়ে ছোট কিনা, যেমন পরীক্ষার জন্য পরীক্ষা s=[2,3,6,4,2,3,7,5,3]করে [True,True,False,False,True,True,False,False]। তারপর groupএকই উপাদানের একসঙ্গে সঞ্চালিত হয়: [[True,True],[False,False],[True,True],[False,False]]। এই সমস্ত তালিকার সমান দৈর্ঘ্য রয়েছে কিনা তা যাচাই করতে, ফলনকারীদের সাথে তাদের উপাদানগুলি প্রতিস্থাপন করুন 1( এই টিপটি দেখুন ) [[1,1],[1,1],[1,1],[1,1]]এবং tএই তালিকার লেজের সমস্ত উপাদান মাথার সমান কিনা তা পরীক্ষা করে দেখুন h:all(==h)t

এই পদ্ধতির Singleton তালিকার জন্য কাজ না করে, কিন্তু সবসময় কারণ ঐ সত্য, আমরা তাদের নিজেদের ক্ষেত্রে সব ব্যবস্থা করতে সক্ষম: g[_]=1<3



1

জাপট , 15 বাইট

ä- mg ò¦ mÊä¥ e

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

ব্যাখ্যা

ä- mg ò¦ mÊä¥ e                                                  [0,3,7,5,2,3,6]
ä-                // Difference between neighboring elements     [-3,-4,2,3,-1,-3]
   mg             // Get the sign of each element                [-1,-1,1,1,-1,-1]
      ò¦          // Partition between different elements        [[-1,-1],[1,1],[-1,-1]]
         mÊ       // Get the length of each element              [2,2,2]
           ä¥     // Check for uniqueness                        [true,true]
              e   // Return true if all elements are truthy      true

1

আর, 36 বাইট

function(n)!sd(rle(sign(diff(n)))$l)

diffধারাবাহিক পার্থক্য গণনা করে তারপরে signএগুলিকে ± 1 এ স্কুয় করে। rleতারপরে রান-লেংথ তাদের এনকোড করে। এর সমস্ত উপাদান rleএকই হওয়া উচিত, অর্থাৎ ভেক্টরের মানক বিচ্যুতি শূন্য রয়েছে। !তারপরে সঠিক লজিক্যাল আউটপুট উত্পাদন করে।


1

হাস্কেল (ল্যাম্বডাবোট), 59 বাইট

g(map(1<$).group.ap(zipWith(<))tail->h:t)=all(==h)t;g _=1<3

@ লাইকোনির উত্তরের ভিত্তিতে


ভাল লাগল, আমি জানতাম না ল্যামডাবোটের ভিউপ্যাটার্নগুলি সক্ষম ছিল। এখানে একটি জায়গা নিখোঁজ রয়েছে g_=1<3
লাইকনি

@Laikoni আমার তন্ন তন্ন, কিন্তু আমি আসলে #haskell কাছে গিয়ে এটা পরীক্ষিত
BlackCap


0

ক্লোজার, 70 বাইট

#({0 1 1 1}(count(set(map count(partition-by pos?(map -(rest %)%))))))

রিটার্নস 1truthy এবং nil(ওরফে নাল) falsy হিসাবে।


0

জাভা (ওপেনজেডিকে 8) , 135 বাইট

a->{Integer i=0,c,d=0,p=0,r=0;for(;++i<a.length;)d+=(i<2|(c=i.signum(a[i-1]-a[i]))<0?d<0:d>0)?c:p==0|p==-d?c-(p=d):1-(r=1);return r<1;}

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

ব্যাখ্যা

a->{                    // int array
 Integer i=0,c,d=0,p=0,r=0;
                        // variable definitions, use Integer to abuse static calls
 for(;++i<a.length;)    // Loop from 1 till length - 1
  d+=                   // Change d
   (i<2                 // First iteration?
     |(c=i.signum(a[i-1]-a[i]))<0?d<0:d>0
   )                    // Or do c and d have the same sign?
    ?c                  // then increase the magnitude of d.
    :p==0|p==-d         // else we're in a u-turn. Is it the first? Or is the magnitude the same as previously?
     ?c-(p=d)           // assign the new magnitude with sign to p and reset d to -1 (if was positive) or 1 (if was negative)
     :1-(r=1);          // else just do r=1 (technically: "add 1-1=0 to d" as well)
 return r<1;            // return whether there were wrong amplitudes.
}

0

পাইথন 2 , 110 99 বাইট

-11 বাইট @ লিনকে ধন্যবাদ জানায়

d=input()
exec"d=map(cmp,d[:-1],d[1:]);"*2
x=[i+1for i,e in enumerate(d)if e]
for i in x:i%x[0]>0<q

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


দ্বিগুণ পার্থক্যগুলি গণনা করে আপনি কিছু বাইট সংরক্ষণ করতে পারেনexec"d=map(cmp,d[:-1],d[1:]);"*2
লিন

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