Narsistik dizi elemanları


15

Tanım

Bir dizinin narsisistik 1 tamsayısı, komşularından daha iyi olduklarını düşünür, çünkü aritmetik ortalamalarından kesinlikle daha yüksektir.

Komşular aşağıdaki gibi tanımlanır:

  • Eğer tamsayı indeks 0 (ilk) ise, komşuları listenin son ve ikinci unsurlarıdır.

  • Tam sayı ilk veya son değilse, komşuları hemen bitişik iki öğedir.

  • Tam sayı dizin -1 (son) ise, komşuları listenin ikinci son ve ilk unsurlarıdır.


Görev

Bir tamsayı dizisi verildiğinde, göreviniz narsisist olanları atmaktır.

  • Tamsayılar pozitif, negatif veya sıfır olabilir.

  • Dizinin en az üç öğe içerdiğini varsayabilirsiniz.

  • Tüm standart kurallar geçerlidir. Bu , bu nedenle bayttaki en kısa kod kazanır.

Örnekler

Diziyi düşünün [6, 9, 4, 10, 16, 18, 13]. Sonra aşağıdaki tabloyu inşa edebiliriz:

Eleman | Komşular | Komşuların Ortalaması | Narsistik mi?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Yanlış.
9 | 6, 4 | 5 | Doğru.
4 | 9, 10 | 9.5 | Yanlış.
10 | 4, 16 | 10 | Yanlış.
16 | 10, 18 | 14 | Doğru.
18 | 16, 13 | 14.5 | Doğru.
13 | 18, 6 | 12 | Doğru.

Narsistik olanları filtreleyerek geride kalırız [6, 4, 10]. Ve bu kadar!

Test Durumları

Giriş -> Çıkış

[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 - Narsist , matematiksel olarak Narsistik anlamına gelmez .

Yanıtlar:


7

Jöle , 10 bayt

ṙ2+ṙ-<ḤCx@

Çevrimiçi deneyin!

Açıklama:

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

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

Düzenleme: @ g00glen00b sayesinde 1 bayt kaydedildi.


5

Mathematica, 44 bayt

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

Nasıl çalışır

Girişini gibi Verilen {11,6,9,10}Hesaplamalar,

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

ve bu sonucun en fazla 0 olduğu yerlerde orijinal girişin öğelerini seçer.



4

Haskell , 51 bayt

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

Çevrimiçi deneyin! Kullanım örneği: f [1,2,3]verim [1,2].

İçin s = [1,2,3], last s:sliste [3,1,2,3]ve tail$s++slistedir [2,3,1,2,3]. verilen üç zip3listeden üçlü bir liste oluşturur (a,b,c)ve daha uzun olanları en kısa listenin uzunluğuna indirir. Biz almak [(3,1,2),(1,2,3),(2,3,1)]ile, borijinal liste elemanı ve varlık ave ckomşuları. Liste kavraması daha sonra her byeri seçer b*2<=a+c, yani bnarsisistik değildir.


4

Oktav / MATLAB, 48 bayt

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

Çevrimiçi deneyin!

açıklama

Giriş dizisi ilk önce last ( x(end)) ve ilk (x(1) olarak uygun kenarlarda ) girdilerle .

Narsisizm testi conv, genişletilmiş diziyi çözerek [1, -2, 1]ve sadece 'valid'parçayı tutarak yapılır .

Katlama sonucundaki her girdinin karşılaştırılması 0, girdiden sayıları seçmek için kullanılan mantıksal bir dizin (maske) verir.


2

J , 16 bayt

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

Çevrimiçi deneyin!

açıklama

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

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

Dene


açıklama

Örtülü dizi girişi U.

kÈ>

Geçerli indeks olmak üzere kbir işlevden geçirildiğinde true döndüren Y, geçerli öğenin daha büyük olup olmadığını kontrol eden öğeleri kaldırın ( ) .

[Y°ÉY]

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

x!gU

xHer öğeyi dizine ekledikten sonra add ( ) yöntemi ile azaltılır U...

½*

İle çarpıldı .5.


Alternatif, 15 bayt

fÈ+X§UgYÉ +UgYÄ

Dene


2

R , 51 56 bayt

Algoritmamı düzelttiği için user2390246'ya teşekkürler

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

Çevrimiçi deneyin!

endeksleri komşu-toplamlar, , iki katından daha az değildir .lc(l[-1],l[1])+c(l[s],l[-s])ll





1

Java 8, 141 137 127 bayt

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;}

@Nevay sayesinde -10 bayt .

Açıklama:

Burada deneyin.

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 bayt

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




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.