Elemen array narsis


15

Definisi

NarsisBilangan bulat 1 berpendapat bahwa mereka lebih baik daripada tetangga mereka, karena mereka lebih tinggi dari rata-rata aritmatika mereka.

Tetangga didefinisikan sebagai berikut:

  • Jika bilangan bulat berada di indeks 0 (yang pertama), maka tetangganya adalah elemen terakhir dan kedua dari daftar.

  • Jika integer bukan yang pertama atau yang terakhir, maka tetangganya adalah dua elemen yang berbatasan langsung.

  • Jika bilangan bulat berada pada indeks -1 (yang terakhir), maka tetangganya adalah elemen kedua terakhir dan pertama dari daftar.


Tugas

Diberikan array bilangan bulat, tugas Anda adalah membuang yang narsis.

  • Bilangan bulat bisa positif, negatif atau nol.

  • Anda dapat mengasumsikan bahwa array mengandung setidaknya tiga elemen.

  • Semua aturan standar berlaku. Ini adalah , jadi kode terpendek dalam byte menang.

Contohnya

Pertimbangkan array [6, 9, 4, 10, 16, 18, 13]. Maka kita dapat membangun tabel berikut:

Elemen | Tetangga | Tetangga Tetangga | Apakah Narsisistik?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Salah.
9 | 6, 4 | 5 | Benar.
4 | 9, 10 | 9.5 | Salah.
10 | 4, 16 | 10 | Salah.
16 | 10, 18 | 14 | Benar.
18 | 16, 13 | 14.5 | Benar.
13 | 18, 6 | 12 | Benar.

Dengan menyaring yang narsis, kita dibiarkan [6, 4, 10]. Dan itu dia!

Uji Kasus

Input -> Output

[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 - Narsisis tidak berarti secara narsistik matematis .

Jawaban:


7

Jelly , 10 byte

ṙ2+ṙ-<ḤCx@

Cobalah online!

Penjelasan:

ṙ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)

Sunting: Disimpan 1 byte berkat @ g00glen00b.


5

Mathematica, 44 byte

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

Bagaimana itu bekerja

Masukan yang diberikan seperti {11,6,9,10}, menghitung

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

dan memilih elemen input asli di tempat-tempat di mana hasil ini paling banyak 0.



4

Haskell , 51 byte

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

Cobalah online! Contoh penggunaan: f [1,2,3]hasil [1,2].

Sebab s = [1,2,3], last s:sadalah daftar [3,1,2,3]dan tail$s++sdaftar [2,3,1,2,3]. zip3menghasilkan daftar tiga kali lipat (a,b,c)dari tiga daftar yang diberikan, memotong yang lebih panjang ke panjang daftar terpendeknya. Kami dapatkan [(3,1,2),(1,2,3),(2,3,1)], dengan bmenjadi elemen daftar asli dan adan ctetangganya. Pemahaman daftar kemudian memilih semua di bmana b*2<=a+c, itu btidak narsis.


4

Oktaf / MATLAB, 48 byte

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

Cobalah online!

Penjelasan

Array input pertama kali diperluas dengan entri terakhir ( x(end)) dan pertama ( x(1)) di sisi yang sesuai.

Tes untuk narsisme dilakukan dengan convmendapatkan array yang diperluas dengan [1, -2, 1]dan hanya menyimpan 'valid'bagian.

Membandingkan setiap entri dalam hasil konvolusi dengan 0memberikan indeks logis (mask) yang digunakan untuk memilih angka dari input.


2

J , 16 byte

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

Cobalah online!

Penjelasan

#~+:<: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

Cobalah


Penjelasan

Input array secara implisit U.

kÈ>

Hapus ( k) elemen yang mengembalikan true ketika melewati fungsi, dengan Ymenjadi indeks saat ini, yang memeriksa apakah elemen saat ini lebih besar dari ...

[Y°ÉY]

Array [Y-1, Y+1]...

x!gU

Dikurangi oleh penambahan ( x) setelah mengindeks setiap elemen ke U...

½*

Dikalikan dengan .5.


Alternatif, 15 byte

fÈ+X§UgYÉ +UgYÄ

Cobalah


2

R , 51 56 byte

Terima kasih kepada pengguna2390246 untuk mengoreksi algoritma saya

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

Cobalah online!

indeks l mana c(l[-1],l[1])+c(l[s],l[-s]), jumlah tetangga l, tidak kurang dari dua kali 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 berkat @Nevay .

Penjelasan:

Coba di sini.

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])




Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.