Các yếu tố mảng tự sự


15

Định nghĩa

Số nguyên Narcissistic 1 của một mảng nghĩ rằng chúng tốt hơn so với hàng xóm của chúng, bởi vì chúng hoàn toàn cao hơn so với trung bình số học của chúng.

Hàng xóm được định nghĩa như sau:

  • Nếu số nguyên nằm ở chỉ số 0 (đầu tiên), thì hàng xóm của nó là phần tử cuối cùng và thứ hai của danh sách.

  • Nếu số nguyên không phải là số đầu tiên cũng không phải số cuối cùng thì hàng xóm của nó là hai phần tử liền kề ngay lập tức.

  • Nếu số nguyên nằm ở chỉ số -1 (cuối cùng), thì hàng xóm của nó là phần tử thứ hai và phần tử đầu tiên của danh sách.


Bài tập

Đưa ra một loạt các số nguyên, nhiệm vụ của bạn là loại bỏ những người tự ái.

  • Các số nguyên có thể là dương, âm hoặc bằng không.

  • Bạn có thể giả định rằng mảng chứa ít nhất ba phần tử.

  • Tất cả các quy tắc tiêu chuẩn được áp dụng. Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.

Ví dụ

Hãy xem xét các mảng [6, 9, 4, 10, 16, 18, 13]. Sau đó chúng ta có thể xây dựng bảng sau:

Yếu tố | Hàng xóm | Ý nghĩa của hàng xóm | Là tự ái?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Sai.
9 | 6, 4 | 5 | Thật.
4 | 9, 10 | 9,5 | Sai.
10 | 4, 16 | 10 | Sai.
16 | 10, 18 | 14 | Thật.
18 | 16, 13 | 14,5 | Thật.
13 | 18, 6 | 12 | Thật.

Bằng cách lọc những người Narcissistic ra, chúng ta còn lại [6, 4, 10]. Và đó là nó!

Các trường hợp thử nghiệm

Đầu vào -> Đầu ra

[5, -8, -9] -> [-8, -9]
[8, 8, 8, 8] -> [8, 8, 8, 8]
[11, 6, 9, 10] -> [6, 10]
[1, 2, 0, 1, 2] -> [1, 0, 1]
[6, 9, 4, 10, 16, 18, 13] -> [6, 4, 10]
[6, -5, 3, -4, 38, 29, 82, -44, 12] -> [-5, -4, 29, -44]

1 - tự khen không có nghĩa Narcissistic về mặt toán học .

Câu trả lời:


7

Thạch , 10 byte

ṙ2+ṙ-<ḤCx@

Hãy thử trực tuyến!

Giải trình:

ṙ2+ṙ-<ḤCx@
ṙ2         Rotate the original list two elements to the left
  +        Add each element to the respective element of the original list
   ṙ-      Rotate the result one element to the right
     <Ḥ    Check if each element is less than the double of its respective element on the original list
       C   Subtract each 1/0 boolean from 1 (logical NOT in this case)
        x@ Repeat each element of the original list as many times as the respective element of the logical NOT (i.e. keep elements of the original list where the respective element from the result is 1)


6

JavaScript (ES6), 57 56 byte

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

Chỉnh sửa: Đã lưu 1 byte nhờ @ g00glen00b.


5

Toán học, 44 byte

Pick[#,#<=0&/@(2#-(r=RotateLeft)@#-#~r~-1)]&

Làm thế nào nó hoạt động

Đưa ra đầu vào như {11,6,9,10}, tính toán

2*{11,6,9,10} - {6,9,10,11} - {10,11,6,9}

và chọn ra các yếu tố của đầu vào ban đầu ở những nơi có kết quả này nhiều nhất là 0.



4

Haskell , 51 byte

f s=[b|(a,b,c)<-zip3(last s:s)s$tail$s++s,b*2<=a+c]

Hãy thử trực tuyến! Ví dụ sử dụng: f [1,2,3]sản lượng[1,2] .

Đối với s = [1,2,3], last s:slà danh sách [3,1,2,3]tail$s++sdanh sách [2,3,1,2,3]. zip3tạo ra một danh sách các bộ ba (a,b,c)từ ba danh sách nhất định, cắt ngắn những cái dài hơn đến độ dài của danh sách ngắn nhất. Chúng tôi nhận được [(3,1,2),(1,2,3),(2,3,1)], với byếu tố danh sách ban đầu achàng xóm của nó. Việc hiểu danh sách sau đó chọn tất cả bở đâu b*2<=a+c, đó bkhông phải là tự ái.


4

Octave / MATLAB, 48 byte

@(x)x(conv([x(end),x,x(1)],[1,-2,1],'valid')>=0)

Hãy thử trực tuyến!

Giải trình

Mảng đầu vào được mở rộng đầu tiên với các mục cuối ( x(end)) và đầu tiên ( x(1)) ở các cạnh thích hợp.

Việc kiểm tra lòng tự convái được thực hiện bằng cách tạo ra mảng mở rộng với [1, -2, 1]và chỉ giữ lại 'valid'một phần.

So sánh từng mục trong kết quả tích chập với 0chỉ số logic (mặt nạ) được sử dụng để chọn các số từ đầu vào.


2

J , 16 byte

#~+:<:1&|.+_1&|.

Hãy thử trực tuyến!

Giải trình

#~+:<:1&|.+_1&|.  Input: array A
           _1&|.  Rotate A right by 1
      1&|.        Rotate A left by 1
          +       Add
  +:              Double each in A
    <:            Less than or equal to
#~                Copy the true values from A

2

Japt , 17 16 15 byte

kÈ>½*[Y°ÉY]x!gU

Thử nó


Giải trình

Đầu vào ngầm định của mảng U.

kÈ>

Xóa ( k) các phần tử trả về true khi được truyền qua một hàm, với Ychỉ mục hiện tại, kiểm tra xem phần tử hiện tại có lớn hơn không ...

[Y°ÉY]

Mảng [Y-1, Y+1]...

x!gU

Giảm bằng cách thêm ( x) sau khi lập chỉ mục từng phần tử vào U...

½*

Nhân với .5.


Thay thế, 15 byte

fÈ+X§UgYÉ +UgYÄ

Thử nó


2

R , 51 56 byte

Cảm ơn người dùng2390246 đã sửa lỗi thuật toán của tôi

function(l)l[c(l[-1],l[1])+c(l[s<-sum(l|1)],l[-s])>=2*l]

Hãy thử trực tuyến!

chỉ số ltrong đó c(l[-1],l[1])+c(l[s],l[-s]), tổng hàng xóm của l, không ít hơn hai lần l.





1

Java 8, 141 137 127 byte

import java.util.*;a->{List r=new Stack();for(int i=0,l=a.length;i<l;)if(2*a[i]<=a[(i-1+l)%l]+a[++i%l])r.add(a[i-1]);return r;}

-10 byte nhờ @Nevay .

Giải trình:

Hãy thử nó ở đây.

import java.util.*;    // Required import for List and Stack

a->{                   // Method with integer-array parameter and List return-type
  List r=new Stack();  //  Return-list
  for(int i=0,         //  Index integer, starting at 0
      l=a.length;      //  Length of the input array
      i<l;)            //  Loop over the input array
    if(2*a[i]<=        //   If two times the current item is smaller or equal to:
        a[(i-1+l)%l]   //   The previous integer in the list
        +a[++i%l])     //   + the next integer in the list
      r.add(a[i-1]);   //    Add the current integer to the result-list
                       //  End of loop (implicit / single-line body)
  return r;            //  Return result-List
}                      // End of method


0

JavaScript ES5, 59 byte

F=a=>a.filter((x,i)=>2*x<=a[-~i%(l=a.length)]+a[(i-1+l)%l])

console.log(""+F([5, -8, -9])==""+[-8, -9])
console.log(""+F([8, 8, 8, 8])==""+[8, 8, 8, 8])
console.log(""+F([11, 6, 9, 10])==""+[6, 10])
console.log(""+F([1, 2, 0, 1, 2])==""+[1, 0, 1])
console.log(""+F([6, 9, 4, 10, 16, 18, 13])==""+[6, 4, 10])
console.log(""+F([6, -5, 3, -4, 38, 29, 82, -44, 12])==""+[-5, -4, 29, -44])




Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.