সর্বাধিক বিচ্যুতি সন্ধান করুন


20

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

পূর্ণসংখ্যার উপাদানগুলির একটি অ্যারে vএবং একটি পূর্ণসংখ্যা দেওয়া d(আমরা ধরে নিই যে ডি অ্যারের দৈর্ঘ্যের তুলনায় কম বা সমান), dঅ্যারেতে পরপর সমস্ত উপাদানের ক্রম বিবেচনা করুন । প্রতিটি অনুক্রমের জন্য, সেই অনুক্রমের উপাদানগুলির সর্বাধিক এবং সর্বনিম্ন মানের মধ্যে পার্থক্যটি গণনা করুন এবং এটিকে বিচ্যুতিটির নাম দিন।

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

পরিশ্রমের উদাহরণ:

v: (6,9,4,7,4,1)
d: 3

The sequences of length 3 are:
6,9,4 with deviation 5
9,4,7 with deviation 5
4,7,4 with deviation 3
7,4,1 with deviation 6

Thus the maximal deviation is 6, so the output is 6.

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

উত্তর:


14

ডায়ালগ এপিএল, 7 বাইট

⌈/⌈/-⌊/

ট্রাইএপিএলে এটি পরীক্ষা করুন ।

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

⌈/⌈/-⌊/  Dyadic chain. Left argument: d. Right argument: v

     ⌊/  Reduce v by d-wise minimum, yielding the minima of all slices of length d.
  ⌈/     Reduce v by d-wise maximum, yielding the maxima of all slices of length d.
    -    Subtract, yielding the ranges of all slices of length d.
⌈/       Take the maximum.

5

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

with(Math)(v,d)=>max(...v.map((a,i)=>max(...a=v.slice(i,i+d))-min(...a)))

টিআইএল জন্য +1 যা আপনি withএকটি সম্পূর্ণ ল্যাম্বডা ফাংশনে ব্যবহার করতে পারেন
বাসড্রপ কম্বারউবউবউব্বুব

আসলে Uncaught SyntaxError: Unexpected token with,। আপনি কি একটি কাজের স্নিপেট পোস্ট করতে পারেন?
বাসড্রপ কম্বারবুবউবউব

@ বাসড্রপকম্বারউবউউবউব আপনি যদি ল্যাম্বডার নাম রাখতে চান তবে আপনার অ্যাসাইনমেন্টটি with(Math)ব্যবহার, বা ব্যবহারের পরে রাখা দরকার f=eval("with(Math)(v,d)=>max(...a)))")
নিল

4

পাইথন, 60 বাইট

নীলকে ধন্যবাদ 5 বাইট সংরক্ষণ করা

f=lambda v,d:v and max(max(v[:d])-min(v[:d]),f(v[1:],d))or 0

আমার প্রথম পুনরাবৃত্ত লাম্বদা!

ব্যবহার:

print f([6,9,4,7,4,1], 3)

1
আমি মনে করি আপনি কেবল ব্যবহার করতে পারেন v and; আপনি উপাদানগুলি সরিয়ে ফেললে সীমাটি উপরে উঠছে না।
নিল

4

পার্ল, 48 বাইট

জন্য +5 অন্তর্ভুক্ত -0pi

-iবিকল্পের পরে প্রস্থ দিন , উপাদানগুলিকে STDIN এ আলাদা লাইন হিসাবে দিন:

perl -0pi3 -e '/(^.*\n){1,$^I}(?{\$F[abs$1-$&]})\A/m;$_=$#F'
6
9
4
7
4
1
^D

শুধু কোড:

/(^.*\n){1,$^I}(?{\$F[abs$1-$&]})\A/m;$_=$#F

( \nদাবি করা স্কোরের জন্য আক্ষরিক ব্যবহার করুন)


আমি একটি রেজেক্স দেখতে পাচ্ছি, এবং তারপরে আমি হারিয়ে যাই। ০.০ এখানে কী চলছে?
অ্যাডিসন ক্রম্প

@ ভিটিসিএকএভিএসমোসই মূলত আমি এক থেকে প্রস্থের ধারাবাহিক লাইনে মেলে। $&পুরো ম্যাচটি অন্তর্ভুক্ত করবে যা পাটিগণিত প্রসঙ্গে প্রথম সংখ্যা হিসাবে মূল্যায়ন করবে। $1সর্বশেষ সংখ্যা থাকবে আমি তারপরে জোর করে রেজেক্সটি ব্যর্থ করি \A। সুতরাং এটি প্রস্থের সমস্ত প্রারম্ভিক অবস্থান এবং দৈর্ঘ্যের চেষ্টা করবে। আমি একটি অ্যারে সূচক হিসাবে পার্থক্যের নিখুঁত মানটি ব্যবহার করি এবং দেখুন অ্যারে কত বড় হয়। পার্লের কোনও বিল্টিন নেই maxতাই আমাকে সংশোধন করতে হবে
টন হসপেল

এটা অত্যন্ত চালাক। তাহলে কোন পথে লাগাতে পারেন -0pi3 -eমধ্যে -0pi3e? সম্ভাব্য হ্রাস সম্পর্কে কেবলমাত্র একটি ধারণা, আমি পার্ল ব্যবহার করি না (এভাবে আমার প্রশ্ন)।
অ্যাডিসন ক্রম্প

দুর্ভাগ্যক্রমে @ VTCAKAVSMoACE- তে -ie
টোন হসপেল

এবং আমি ধরে নিচ্ছি যে -eকোডের ঠিক আগে যেতে হবে? হতাশাজনক।
অ্যাডিসন ক্রম্প

4

আর, 63 62 56 বাইট

বিলিউব ইতিমধ্যে কেবলমাত্র বেস ফাংশনগুলি ব্যবহার করে একটি দুর্দান্ত আর উত্তর সরবরাহ করেছে । তবে, আমি দেখতে চেয়েছিলাম যে কোনও বিকল্প পদ্ধতির সম্ভাবনা রয়েছে, সম্ভবত আর এর কয়েকটি বিস্তৃত প্যাকেজ ব্যবহার করে। সেখানে একটা চমৎকার ফাংশন rollapplyমধ্যে zooএকটি অ্যারের একটি ঘূর্ণায়মান উইন্ডোতে একটি ফাংশন প্রয়োগ করার জন্য ডিজাইন করা প্যাকেজ, যাতে তড়কা আমাদের উদ্দেশ্য ভাল। আমরা ব্যবহার rollapplyএটি maxপ্রতিটি উইন্ডোর, এবং আমরা এটি আবার ব্যবহার এটি minপ্রতিটি উইন্ডোর। তারপরে আমরা ম্যাক্স এবং মিনিটের মধ্যে পার্থক্য নিই যা আমাদের প্রতিটি উইন্ডোর জন্য বিচ্যুতি দেয় এবং তারপরে এরগুলির ফিরিয়ে দেয় max

function(v,d)max((r=zoo::rollapply)(v,d,max)-r(v,d,min))

1
ভাল লাগল, আমি জানতাম সাবকোন্সগুলি তৈরির জন্য একটি ফাংশন রয়েছে তবে এটি খুঁজে পেল না। এছাড়াও কর্মক্ষেত্রে একটি প্রক্সি পিছনে যাতে কোনও বাহ্যিক প্যাকেজ ব্যবহার করতে পারে না।
বিলিউব

1
কিছু গুগল আমাকে জানিয়ে দেয় যে এটিও রয়েছে gtools::rollingতবে এটি আরও একটি বাইট এবং আমি এর সাথে পরিচিত নই। নন-বেস প্যাকেজগুলি ব্যবহার করার বিষয়ে আমি সর্বদা দুজনের মনেই থাকি: একদিকে, যখন কোনও সহজ সমাধান হয় তখন প্রতারণার মতো মনে হয়; অন্যদিকে, প্যাকেজগুলি (এবং সম্প্রদায়) ভাষা হিসাবে আর এর অন্যতম শক্তি I
rturnbull

3

আর, 80 77 বাইট বাইট

সম্পাদনা করুন: @ আর্টারনবুলকে ধন্যবাদ 3 টি বাইট সংরক্ষণ করা হয়েছে

function(s,d)max(sapply(d:sum(1|s)-d+1,function(i)diff(range(s[i:(i+d-1)]))))

1
আপনি প্রতিস্থাপন করতে পারেন 1:(length(s)-d+1)সঙ্গে d:sum(1|s)-d+1
rturnbull

@ আর্টারনবুল ভাল লাগছে!
বিলিউব

2

পাওয়ারশেল ভি 2+, 68 বাইট

param($v,$d)($v|%{($x=$v[$i..($i+++$d-1)]|sort)[-1]-$x[0]}|sort)[-1]

Iterative সমাধান। এর মধ্য দিয়ে লুপ করুন $vতবে সত্যিকার অর্থে আমরা মানগুলির পরিবর্তে কাউন্টার হিসাবে কেবল এটি ব্যবহার করছি। প্রতিটি পুনরাবৃত্তির, আমরা slicing করছি $vদ্বারা $i..($i+++$d-1), যেখানে $iডিফল্টে 0। আমরা |sortসেই উপাদানগুলি এবং ফলাফলটি সংরক্ষণ করি $x। তারপরে আমরা [-1]বৃহত্তমটি গ্রহণ করি এবং ক্ষুদ্রতমটি বিয়োগ করি [0]। আমরা তখন |sortসেই ফলাফলগুলি এবং এর মধ্যে সবচেয়ে বড় [-1]গ্রহণ করি। এই নম্বরটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\find-the-maximum-deviation.ps1 @(6,9,4,7,4,1) 3
6

PS C:\Tools\Scripts\golfing> .\find-the-maximum-deviation.ps1 @(1,2,3,4,5,6) 3
2

PS C:\Tools\Scripts\golfing> .\find-the-maximum-deviation.ps1 @(7,2,3,4,5,6) 3
5

2

05 এ বি 1 ই , 12 10 বাইট

ব্যবহার সিপি-1252 এনকোডিং।

Œù€{øÀ`-ÄZ

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

ব্যাখ্যা

Œ              # sublists of v
 ù             # of length d
  €{           # sort each
    ø          # zip
     À         # rotate left (last 2 lists will be largest and smallest)
      `        # flatten (lists with smallest and largest item will be on top)
       -       # subtract largest from smallest
        Ä      # take absolute value (as we will have negatives after the previous step)
         Z     # take the largest

2

জাভা 8, 140 128

ভিটিএকেএভিএসএমওএসি-র ধন্যবাদ হিসাবে একগুচ্ছ বন্ধ

int l(int[]a,int d){int x=0,i=0,f,j,k;for(;i<=a.length-d;i++)for(j=i;j<i+d;j++)for(k=i;k<i+d;)x=(f=a[j]-a[k++])>x?f:x;return x;}

Ungolfed

int l(int[]a,int d){
    int x=0,i=0,f,j,k;
    for(;i<=a.length-d;i++)
        for(j=i;j<i+d;j++)
            for(k=i;k<i+d;)
                x=(f=a[j]-a[k++])>x?f:x;
    return x;
}

আপনি একটি শেষ বন্ধনী অনুপস্থিত। ;)
অ্যাডিসন ক্রম্প

@ VTCAKAVSMoACE ওফ। অনুলিপি অনুলিপি করুন :(
dpa97

1
5 বাইট হ্রাস:int l(int[]a,int d){int x=0,i=0,f,j,k;for(;i<=a.length-d;i++)for(j=i;j<i+d;j++)for(k=j;k<i+d;)x=(f=a[j]-a[k++])<0?-f:f>x?f:x;return x;}
অ্যাডিসন ক্রম্প

@ VTCAKAVSMoACE আমি বিশ্বাস করি না যে আপনার কাছে যা কাজ করবে তা ভুল হতে পারে। পরীক্ষার ক্ষেত্রে 7 এবং 1 টি স্যুইচ করার চেষ্টা করুন। তবে আমি আমার নতুন ধারণাটি কয়েকবার শেভ করতে এটি ব্যবহার করতে পারি!
dpa97

1
আমি পাশাপাশি K শুরু করে অ্যাবসগুলির প্রয়োজনীয়তা (প্রক্রিয়ায় আলগোটিকে আরও খারাপ করে তোলা) অবশ্যই মুক্তি পেয়েছি। চমত্কার নিফটি ট্রিক একই লাইনে x = (f = ...)
রাখছে

2

গণিত, 41 37 বাইট

Max[MovingMap[MinMax,#,#2-1].{-1,1}]&

{-1,1}আপনি এড়ানোর জন্য ডট পণ্যটি ব্যবহার করতে পারবেন না Abs?
মাইল

@ মাইলস ধন্যবাদ! সম্পাদিত উত্তর।
JangHwan Min

@ জেএইচএম ওয়ান বাইট দিয়ে সংরক্ষণ করা হয়েছে Max[BlockMap[MinMax,#,#2,1].{-1,1}]&

1

রুবি, 45 বাইট

->a,d{a.each_cons(d).map{|b|b.max-b.min}.max}

আমার মনে হচ্ছে এটি আরও অনেক ভাল হতে পারে।


1

পরিসংখ্যান এবং চিত্র প্রক্রিয়াকরণ সরঞ্জাম বাক্সগুলি, 33 বাইট সহ ম্যাটল্যাব

@(v,d)max(range(im2col(v,[1 d])))

এটি একটি বেনামী ফাংশন সংজ্ঞায়িত করে। উদাহরণ ব্যবহার:

>> f = @(v,d)max(range(im2col(v,[1 d])));
>> f([6,9,4,7,4,1], 3)
ans =
     6

আপনি এটি আইডিয়নে অক্টাভেও চেষ্টা করতে পারেন (তবে অক্টোব, মতলব থেকে আলাদাভাবে চিত্র প্যাকেজটি স্পষ্টভাবে লোড করা প্রয়োজন)।

ব্যাখ্যা

im2col(v,[1 d]))   % Takes overlapping blocks of size d from v, and arranges them as
                   % columns of a matrix
range(...)         % Maximum minus minimum of each column. Gives a row vector
max(...)           % Maximum of the above row vector

1

স্কালা, 48 বাইট

(_:Seq[Int])sliding(_:Int)map(s=>s.max-s.min)max

Ungolfed:

(a:Seq[Int],d:Int)=>a.sliding(d).map(s=>s.max-s.min).max

ব্যাখ্যা:

(_:Seq[Int])   //define a function with a seq of ints as an argument
sliding(_:Int) //get the sequences with the length of an int argument
map(s=>        //map each sequence
  s.max-s.min    //to its deviation
)max           //and take the maximum value

1

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

YCS5LY)dX>

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

ব্যাখ্যা

উদাহরণ হিসাবে ইনপুটগুলি [6,9,4,7,4,1] বিবেচনা করুন 3

       % Implicitly take the two inputs: v, d
       % STACK: [6,9,4,7,4,1], 3
YC     % Matrix of overlapping d-blocks of v
       % STACK: [6 9 4 7
                 9 4 7 4
                 4 7 4 1]
S      % Sort each column
       % STACK: [4 4 4 1
                 6 7 4 4
                 9 9 7 7]
5LY)   % Keep first and last rows
       % STACK: [4 4 4 1
                 9 9 7 7]
d      % Differences along each column
       % STACK: [5 5 3 6]
X>     % Maximum
       % STACK: 6
       % Implicitly display

1

আসলে , 13 বাইট

╗╜@V`;m@M-`MM

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

নিমির হাস্কেল উত্তরে পর্যবেক্ষণ থেকে -6 বাইটস , dএটি সর্বাধিক বিচ্যুতি প্রভাবিত করে না তার চেয়ে কম টুকরো ।

ব্যাখ্যা:

╗╜@V`;m@M-`MM
╗              store d in register 0
 ╜@            push d, swap so v is on top
   V           push all slices of v whose length is in [1, d]
    `;m@M-`M   map (for each slice):
     ;m@M-       get minimum and maximum, subtract min from max
           M  get maximum of list of deviations

1

পিএইচপি, 89 87 বাইট

for($i=1;$r=array_slice($argv,++$i,$argv[1]);$d=max($r)-min($r))$o=$d>$o?$d:$o;echo+$o;

বিশেষত চতুর বা সুন্দর নয় তবে এটি কাজ করে। এর মতো ব্যবহার করুন:

php -r "for($i=1;$r=array_slice($argv,++$i,$argv[1]);$d=max($r)-min($r))$o=$d>$o?$d:$o;echo+$o;" 3 6 9 4 7 1

জন্য v= 6,9,4,7,4,1, d=3

সম্পাদনা করুন: 2 বাইট জার্গ হালসারম্যানকে ধন্যবাদ রক্ষা করেছে


echo+$o;পরিবর্তেecho$o?:0;
Jörg Hülsermann

0

সিজেম , 17 বাইট

q~ew{$)\(\;-}%:e>

(এছাড়াও q~ew:$z)\(\;.-:e>)

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

ব্যাখ্যা

q~                   e# Read the two inputs. Evaluate
  ew                 e# Overlapping blocks
    {       }%       e# For each block
     $               e# Sort
      )              e# Get last element (that is, maximum)
       \(            e# Swap, get first element (minimum)
         \;          e# Swap, delete rest of the block
           -         e# Subtract (maximum minus minimum)
              :e>    e# Maximum of array

0

জাভা 7,159 বাইট

জাভা = ব্যয়বহুল (আমি জানি এটি আরও গল্ফ করা যেতে পারে)

int c(int[]a,int d){int[]b=new int[d];int i,j,s=0;for(i=-1;i<a.length-d;){for(j=++i;j<i+d;)b[i+d-1-j]=a[j++];Arrays.sort(b);s=(j=b[d-1]-b[0])>s?j:s;}return s;}

Ungolfed

static int c ( int []a , int d){
    int []b = new int[ d ];
    int i , j , s = 0 ;
    for ( i = -1 ; i < a.length - d ;) {
        for ( j = ++i ; j < i + d ;)
        b[ i + d - 1 - j ] = a[ j++ ] ;
        Arrays.sort( b ) ;
        s = ( j = b[ d - 1 ] - b[ 0 ] ) > s ? j : s ;
    }
    return s ;
    }

0

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

_#[]=0 
d#l|m<-take d l=max(maximum m-minimum m)$d#tail l

ব্যবহারের উদাহরণ: 3 # [6,9,4,7,4,1]-> 6

রেঞ্জ বিবেচনা কম dসামগ্রিক সর্বাধিক পরিবর্তন করে না, তাই আমরা চালাতে পারেন take dতালিকার শেষ নিচে (অর্থাত এছাড়াও গত রেঞ্জ অন্তর্ভুক্ত d-1, d-2... 0উপাদানের)। পুনরাবৃত্তি খালি তালিকার সাথে থেমে যায় যেখানে আমরা বিচ্যুতিটি সেট করেছিলাম 0



0

র‌্যাকেট 121 বাইট

(let p((v v)(j 0))(let*((l(take v d))(k(-(apply max l)(apply min l)))
(j(if(> k j)k j)))(if(= d(length v))j(p(cdr v)j))))

Ungolfed:

(define (f d v)
  (let loop ((v v)
             (mxdev 0))                     ; start with max deviation as 0
    (let* ((l (take v d))                   ; take initial d elements in v
           (dev (- (apply max l)            ; find deviation
                    (apply min l)))
           (mxdev (if(> dev mxdev)          ; note max deviation
                   dev
                   mxdev)))
      (if (= d (length v)) mxdev            ; if all combinations tested, print max deviation
          (loop (rest v) mxdev))            ; else test again 
      )))                                   ; with first element of list removed

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

(f 3 '(6 9 4 7 4 1))

আউটপুট:

6

0

q, 25 বাইট

{max mmax[y;x]-mmin[y;x]}

mmax এবং mmin যথাক্রমে সর্বাধিক এবং সর্বনিম্ন উইন্ডো স্লাইডিং হয়

উদাহরণ

q){max mmax[y;x]-mmin[y;x]}[6 9 4 7 4 1;3]
6

0

সি #, 131 বাইট

এখানে একটি ভার্জোজ লিনাক সমাধান রয়েছে

int c(int[]a){var x=from j in Enumerable.Range(0,a.Length-2)let p=new[]{a[j],a[j+1],a[j+2]}select p.Max()-p.Min();return x.Max();}

0

সি #, 163 বাইট

Golfed:

int m(List<int> v,int d){var l=new List<List<int>>();for(int i=0;i<v.Count;i++){if(v.Count-i>=d)l.Add(v.GetRange(i,d));}return l.Select(o=>o.Max()-o.Min()).Max();}

Ungolfed:

public int m(List<int> v, int d)
{
  var l = new List<List<int>>();

  for (int i = 0; i < v.Count; i++)
  {
    if (v.Count - i >= d)
      l.Add(v.GetRange(i, d));
  }

  return l.Select(o => o.Max() - o.Min()).Max();
}

টেস্ট:

var maximumDeviation = new MaximumDeviation();
Console.WriteLine(maximumDeviation.f(new List<int> {6,9,4,7,4,1}, 3));

আউটপুট:

6

0

পাইথ, 11 বাইট

eSms.+Sd.:F

ব্যাখ্যা

eSms.+Sd.:FQ   Implicit input
          FQ   Unpack the input (v, d)
        .:     Get all subsequences of length d
  m   Sd       Sort each
   s.+         Take the sum of differences to get the deviation
eS             Get the maximum

0

জেলি , 8 বাইট

ṡµṂ€ạṀ€Ṁ

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

ডায়ালগ এপিএলের মতো একই অ্যালগরিদম ব্যবহার করে তবে এটি দেখার আগে আমি নিজেই এটি আবিষ্কার করেছি।

ব্যাখ্যা:

ṡµṂ€ạṀ€Ṁ ḷ“Main link. Arguments: v d.”
ṡ        ḷ“Overlapping sublists of x of length y.”
 µ       ḷ“Start a new monadic chain.”
  Ṃ€ạṀ€  ḷ“Find the deviation of each of the elements of x.”
       Ṁ ḷ“Take the maximum of x.”

নোট: x, yফেলে রাখা হয়, ডান আর্গুমেন্ট যথাক্রমে।


0

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

{$^a.rotor($^b=>1-$^b).map({.max-.min}).max}

$^aএবং $^bকার্য বিবরণীতে যথাক্রমে ডাকা হয় vএবং dযথাক্রমে ফাংশনটির দুটি যুক্তি । rotorপদ্ধতির subsequences ক্রম ফেরৎ vআকারের d


0

ক্লোজার, 73 67 বাইট

সম্পাদনা করুন: #(...)পরিবর্তে (fn[...])এবং forপরিবর্তে ব্যবহার করা map

#(apply max(for[p(partition %2 1 %)](-(apply max p)(apply min p))))

0

পাইথন 3, 80 বাইট

lambda v,d:max(map(lambda g:max(g)-min(g),[v[i:i+d]for i in range(-~len(v)-d)]))

আপনি (max(v[i:i+d])-min(v[i:i+d])for i in range(-~len(v)-d)পরিবর্তে ব্যবহার করতে পারেনmap(lambda g:max(g)-min(g),[v[i:i+d]for i in range(-~len(v)-d)])
গম উইজার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.