自己陶酔的な配列要素


15

定義

配列の自己陶酔的1整数は、算術平均よりも厳密に高いため、隣人よりも優れていると考えています。

ネイバーは次のように定義されます。

  • 整数がインデックス0(最初)にある場合、その隣接要素はリストの最後と2番目の要素です。

  • 整数が最初でも最後でもない場合、その隣接要素はすぐ隣の2つの要素です。

  • 整数がインデックス-1(最後)にある場合、その隣接要素はリストの最後から2番目と最初の要素です。


仕事

整数の配列が与えられたら、あなたの仕事は自​​己陶酔的なものを捨てることです。

  • 整数は、正、負、またはゼロにすることができます。

  • 配列には少なくとも3つの要素が含まれていると想定できます。

  • すべての標準ルールが適用されます。これはであるため、バイト単位の最短コードが優先されます。

配列を検討してください[6, 9, 4, 10, 16, 18, 13]。その後、次の表を作成できます。

エレメント| 隣人| 隣人の平均| 自己陶酔的ですか?
-------- + ------------ + ------------------ + --------- --------
6 | 13、9 | 11 | 偽。
9 | 6、4 | 5 | 本当です。
4 | 9、10 | 9.5 | 偽。
10 | 4、16 | 10 | 偽。
16 | 10、18 | 14 | 本当です。
18 | 16、13 | 14.5 | 本当です。
13 | 18、6 | 12 | 本当です。

自己陶酔的なものを除外することで、私たちは残されてい[6, 4, 10]ます。以上です!

テストケース

入力->出力

[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- ナルシスト数学的にナルシシズムを意味しません。

回答:


7

ゼリー、10バイト

ṙ2+ṙ-<ḤCx@

オンラインでお試しください!

説明:

ṙ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バイト

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

編集:@ g00glen00bのおかげで1バイト保存されました。


5

Mathematica、44バイト

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

使い方

などの入力が与えられると{11,6,9,10}、計算します

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

この結果が最大で0の場所で元の入力の要素を選択します。



4

Haskell、51バイト

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

オンラインでお試しください!使用例:f [1,2,3]yields[1,2]

以下のためにs = [1,2,3]last s:sリストである[3,1,2,3]tail$s++sリストが[2,3,1,2,3]。3つの指定zip3されたリストからトリプルのリストを生成し(a,b,c)、長いリストを最短のリストの長さに切り捨てます。当社は取得[(3,1,2),(1,2,3),(2,3,1)]して、b元のリストの要素とされa及びcその隣人。リストの内包は、すべての選択bところb*2<=a+cであるが、b自己陶酔ではありません。


4

オクターブ / MATLAB、48バイト

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

オンラインでお試しください!

説明

入力配列は、最初に適切な側の最後のエントリ(x(end))と最初のx(1)エントリ()で拡張されます。

ナルシシズムのテストはconv、拡張された配列を一部で[1, -2, 1]保持し、'valid'一部のみを保持することによって行われます。

畳み込み結果の各エントリを比較すると0、入力から数値を選択するために使用される論理インデックス(マスク)が得られます。



2

Japt17 16 15バイト

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

それを試してみてください


説明

arrayの暗黙的な入力U

kÈ>

現在のインデックスでkある関数を介して渡されたときにtrueを返す要素を削除()してY、現在の要素が...

[Y°ÉY]

配列[Y-1, Y+1]...

x!gU

x各要素にインデックスを付けた後に追加()することにより削減U...

½*

で乗算され.5ます。


代替、15バイト

fÈ+X§UgYÉ +UgYÄ

それを試してみてください






1

Java 8、141 137 127バイト

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のおかげで-10バイト。

説明:

ここで試してみてください。

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バイト

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




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.