স্থানীয় ম্যাক্সিমা এক্সট্রাক্ট করুন


19

ধনাত্মক পূর্ণসংখ্যার অ্যারে দেওয়া, সংলগ্নগুলির চেয়ে বড় বা সমান সমস্ত উপাদানগুলির একটি অ্যারে আউটপুট করুন। বেশিরভাগ উপাদানের দুটি সংলগ্ন উপাদান থাকবে; প্রথম এবং শেষ উপাদানটি বিশেষ ক্ষেত্রে, কারণ তাদের কেবল একটি সংলগ্ন উপাদান রয়েছে।

আপনি ধরে নিতে পারেন যে অ্যারেটিতে কমপক্ষে দুটি উপাদান রয়েছে।

পরীক্ষার কেস:

Input               | Output
[4,2,6,12,4,5,4,3]  | [4,12,5]
[1,2]               | [2]
[1,2,3,2,1]         | [3]
[3,2,1,2,3]         | [3,3]
[4,4]               | [4,4]
[2,4,4,4,1]         | [4,4,4]
[2,3,3,4]           | [3,4]
[4,3,3,4]           | [4,4]

এটি , সংক্ষিপ্ততম কোডের জয়!


1
@ পিটারটেলর আমি মনে করি এর অর্থ হ'ল "প্রথম বা শেষ উপাদানটির আউটপুটে অন্তর্ভুক্ত করা," ...
xnor

@ পিটারটেলর এক্সনর সঠিক
পাভেল



আমি কি টেস্টকেস [4,3,3,4]হিসাবে প্রস্তাব দিতে পারি ? আমার সমাধান খুব ভালভাবে দুঃখের সাথে এটি পরিচালনা করে নি।
জেএডি

উত্তর:


5

জেলি ,  13 12  11 বাইট

0;;0»3\f"⁸Ẏ

একটি মোনাডিক লিঙ্কটি ইতিবাচক পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং কেবলমাত্র যা তাদের সমস্ত প্রতিবেশীর চেয়ে বৃহত্তর বা সমান এটিযুক্ত ফিল্টারযুক্ত তালিকাটি ফিরিয়ে দেয়।

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


পূর্ববর্তী 12 বাইটার :

0;INżI>0ḄNMị

পূর্ববর্তী 13 বাইটার :

0;;0ṡ3M€ċ€2Tị

কিভাবে?

0;;0»3\f"⁸Ẏ - Link: list of positive integers, A
0;          - a zero concatenated with A
  ;0        - concatenate a zero
     3\     - 3-wise reduce with:
    »       -   maximum (yields a list of the maximums in each overlapping window of 3)
         ⁸  - chain's left argument, A
        "   - zip with:
       f    -   filter keep (i.e. keep the maximal if it is [in] the [length 1 list 
            -                     of the] respective original element)
          Ẏ - flatten by one level

ওয়েল আমি মনে করি 3-বুদ্ধিমান হ্রাস ব্যবহারের কোনও উপায় থাকতে পারে তবে আমি এটি কার্যকর করি নি।
জোনাথন অ্যালান

আমি ঠিক বলেছিলাম - সর্বোচ্চ ডায়াড দিয়ে 3-বুদ্ধি হ্রাস »- যদিও 10?
জোনাথন অ্যালান

8

পাইথন , 54 বাইট

f=lambda l,*p:l and l[:p<=l[:1]>=l[1:2]]+f(l[1:],l[0])

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

আই / ও তালিকাগুলির চেয়ে টিপলসের সাথে রয়েছে।


পাইথন , 57 বাইট

f=lambda l,p=0:l and l[:[p]<=l[:1]>=l[1:2]]+f(l[1:],l[0])

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

Alt 57:

f=lambda l,p=0:l and l[l<[max(p,*l[:2])]:1]+f(l[1:],l[0])


6

হাস্কেল, 50 49 42 বাইট

f l=[j|i:j:k:_<-scanr(:)[0]$0:l,k<=j,i<=j]

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

scanr(:)[0]এর মুদ্রার উলটা পিঠ একটি তালিকা তোলে (0:l), একটি চূড়ান্ত সঙ্গে প্রতিটি 0, যেমন জন্য l = [4,3,3,4]: [[0,4,3,3,4,0],[4,3,3,4,0],[3,3,4,0],[3,4,0],[4,0],[0]]যা প্যাটার্ন মিলেছে agains হয় i:j:k:_অন্তত 3 উপাদান যা নামকরণ করা হয় এমন সমস্ত তালিকা বের করে আনতে i, jএবং k। রাখুন jতবে এর> = iএবং j

সম্পাদনা: Ørjan জোহানসেন 7 বাইট সংরক্ষণ করেছেন ধন্যবাদ!


2
i:j:k:_<-scanr(:)[0]$0:lখাটো হয়। (সামান্য "মানক" tails=scanr(:)[]কৌশলটি সামঞ্জস্য করুন ))
janরঞ্জন জোহানসেন

@ আরজান জোহানসেন: ওহ, আমি নিজের আগে এই কৌশলটি ব্যবহার করেছিলাম, তবে কোনওভাবে এখানে এটি মিস করেছি। অনেক ধন্যবাদ!
নিমি

4

ডায়ালগ এপিএল, 31 30 28 22 21bytes

{⍵/⍨(⌈/=2⌷⊢)¨3,/∊0⍵0}

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

ব্যাখ্যা (আমি জিনিস বোঝাতে ভাল নই):

0⍵0       - [0,input,0]   (it looks like a face!)
∊         - flatten
3,/       - split into overlapping sections of length 3.
(⌈/=2⌷⊢)¨ - Whether the middle element is the maximum (applied to every section)
⍵/⍨       - index


3

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

a=>a.filter((e,i)=>!(e<a[i-1]|e<a[i+1]))

3

পাইথন 3 , 84 75 * 71 বাইট

lambda l,k=[0]:[j for x,j in enumerate(l)if(k+l+k)[x+2]<=j>=(k+l+k)[x]]

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


* @ LeakyNun একটি চালাক অপারেটর ট্রিক ব্যবহার করে 9 বাইট সংরক্ষণ করেছে।


lambda l,k=[0]:[l[i]for i in range(len(l))if(k+l+k)[i+2]<=l[i]>=(k+l+k)[i]]
লিকি নুন


2

05 এ বি 1  ই , 15 14  13 বাইট

ü‹0¸«sĆÁü›+_Ï

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

ব্যাখ্যা

ü‹             # pairwise comparison for less than
  0¸«          # append 0
     s         # swap input to top of stack
      Ć        # enclose, append the head of the list
       Á       # rotate right
        ü›     # pairwise comparison for greater than
          +    # add the two boolean lists
           _   # logical negate
            Ï  # keep only elements of input that are true in the resulting list

পূর্ববর্তী 15 বাইট সমাধান

¬s¤)˜Œ3ùεZQ1è}Ï

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

ব্যাখ্যা

¬                # get head of input
 s¤              # get tail of input
   )˜            # wrap stack in flattened list
                 # produces the input list with the first and last element duplicated
     Œ3ù         # push sublists of length 3
        ε        # apply transformation on each triple
         ZQ      # ... check each element for equality to the max
          1è     # ... get the middle element
            }    # end transform
             Ï   # keep only elements of input that are true in the resulting list

2

আর, 44 বাইট

pryr::f(x[(x>=c(0,x)&x>=x[-1])[1:sum(x|1)]])

যা ফাংশন মূল্যায়ন:

function (x) 
x[(x >= c(0, x) & x >= x[-1])[1:sum(x | 1)]]

তুলনা xকরুন c(0,x), তাই xডানদিকে একটি অবস্থান স্থানান্তরিত সঙ্গে । এছাড়াও তুলনা xকরে x[-1], তাই এক অবস্থান বামে স্থানান্তরিত। এই উভয়ই TRUEযদি সেখানে সর্বাধিক থাকে। &এই বুলিয়ানগুলির AND নিতে। আর এর ভেক্টরগুলির মোড়ক প্রকৃতির কারণে যখন তারা একই দৈর্ঘ্য হয় না, আমাদের ফলাফলকে কত দৈর্ঘ্যে কাটাতে হয় x, যা গ্রহণ করে পাওয়া যায় sum(x|1)। এরপরে আমরা বুলিয়ান ভেক্টরটি প্লাগ ইন করি, কেবলমাত্র সত্যিকার সূচকগুলি নিয়ে xএবং এটি ফিরিয়ে আনি ।

দ্রষ্টব্য, যেহেতু এই যৌক্তিক অপারেশনগুলি অসম দৈর্ঘ্যের ভেক্টরগুলির সাথে সম্পন্ন হয়, আর আর অভিযোগ করবে। অনেক. তবে সতর্কতার মধ্যে সঠিক আউটপুট উপস্থিত হবে:

> pryr::f(x[(x>=c(0,x)&x>=x[-1])[1:sum(x|1)]])(c(4,2,6,12,4,5,4,3))
[1]  4 12  5
Warning messages:
1: In x >= c(0, x) :
  longer object length is not a multiple of shorter object length
2: In x >= x[-1] :
  longer object length is not a multiple of shorter object length
3: In x >= c(0, x) & x >= x[-1] :
  longer object length is not a multiple of shorter object length



1

আর , 68 বাইট

function(a)a[a==sapply(1:length(a),function(i)max(c(0,a,0)[i+0:2]))]

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


pryr::f(expression)তুলনায় একটি ফাংশন ঘোষণা করার একটি ছোট উপায় function(a)expression
জেএডি

এছাড়াও, sum(a|1)এর একটি শর্টকাট length(a)
জেএডি

একটি সংক্ষিপ্ত পদ্ধতির জন্য আমার সমাধান দেখুন।
জেএডি



1

প্রশ্ন, 39 বাইট

{x where x = -1 _ next 3 mmax x,last x}

আমি এই ভাষা এর আগে কখনও শুনিনি। আপনি কি কোথাও জানেন যে আমি এটি চেষ্টা বা ডাউনলোড করতে পারি?
পাভেল

অবশ্যই, কেএক্স.কম , ডক্স: কোড. kx.com
স্কিভে

1

স্ট্যাক্স , 10 বাইট

úâH◄(☼bM•Å

এটি চালান এবং এটি ডিবাগ করুন

এটি স্ট্যান্ডার্ড আউটপুটে নিউলাইন পৃথক মান হিসাবে আউটপুট উত্পাদন করে।

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

f       filter each value in input using the rest of the program; implicitly printing kept values
  x0|S  input pre- and post-pended with zero
  3B    split into batches of 3
  i@    get the i-th batch, where i is the iteration index
  |M=   is the current value equal to the max from the batch?

এটি চালান

আপডেট হয়েছে: সবেমাত্র একটি 9-বাইট সমাধান পেয়েছে। পরে ব্যাখ্যা আপডেট করবে:

স্ট্যাক্স , 9 বাইট

▀▓ûa¥╓╧↨⌐

এটি চালান এবং এটি ডিবাগ করুন


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