最低値を使用して削減


9

チャレンジ

数値の配列を取り、各要素から、まだ他の要素から差し引かれていない配列の最も低い要素を差し引く関数を作成します。

  • 最低値を使用した後は、再使用できません。
  • 配列の数値は10進数であり、必ずしも整数ではありません。

例:

Input: [6, 4, 7, 8, 9, 2, 1, 4]

Next lowest value:          Output:
[6, 4, 7, 8, 9, 2, 1, 4]    [6, 4, 7, 8, 9, 2, 1, 4]
                   ^         ^
                            6-1 = 5
[6, 4, 7, 8, 9, 2, -, 4]    [5, 4, 7, 8, 9, 2, 1, 4]
                ^               ^
                            4-2 = 2
[6, 4, 7, 8, 9, -, -, 4]    [5, 2, 7, 8, 9, 2, 1, 4]
    ^                              ^
                            7-4 = 3
[6, -, 7, 8, 9, -, -, 4]    [5, 2, 3, 8, 9, 2, 1, 4]
                      ^               ^
                            8-4 = 4
[6, -, 7, 8, 9, -, -, -]    [5, 2, 3, 4, 9, 2, 1, 4]
 ^                                       ^
                            9-6 = 3
[-, -, 7, 8, 9, -, -, -]    [5, 2, 3, 4, 3, 2, 1, 4]
       ^                                    ^
                            2-7 = -5
[-, -, -, 8, 9, -, -, -]    [5, 2, 3, 4, 3,-5, 1, 4]
          ^                                    ^
                            1-8 = -7
[-, -, -, -, 9, -, -, -]    [5, 2, 3, 4, 3,-5,-7, 4]
             ^                                    ^
                            4-9 = -5

Final output: [5, 2, 3, 4, 3, -5, -7, -5]

テストケース

Input: [6, 4, 7, 8, 9, 2, 1, 4] => Output: [5, 2, 3, 4, 3, -5, -7, -5]

Input: [4, 7, 4, 9, -10, 8, 40] => Output: [14, 3, 0, 2, -18, -1, 0]

Input: [0.25, -0.5, 8, 9, -10] => Output: [10.25, 0, 7.75, 1, -19]

Input: [3, 4, 9, 1, 1, 1, -5] => Output: [8, 3, 8, 0, -2, -3, -14]


これはなので、バイト単位の最短の回答が優先されます。


4
これは、ウォークスルーの例を使用できます。現在のところ、タスクはテストケースから推測する必要があります。
Laikoni

1
時間を割いてくれてありがとう@Arnauld。私は昨日からPCを使用できなかったため、例を変更できませんでした
Luis felipe De jesus Munoz

3
配列に非整数を含める特定の理由はありますか?それは課題をより面白くせず、いくつかのアプローチを除外し、非整数型のない言語で大きな問題を引き起こします。
デニス

回答:







3

JavaScript(ES6)、44バイト

a=>[...a].map(x=>x-a.sort((a,b)=>b-a).pop())

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

コメントしました

a =>                 // given the input array a[]
  [...a]             // create a copy of a[]
  .map(x =>          // for each integer x in the copy:
    x -              //   update x by ...
    a.sort((a, b) => //     sorting the original array in descending order
      b - a          //     (we only need to sort it once, but it's shorter to do it here)
    ).pop()          //     taking the element at the top of a[] and subtracting it from x
  )                  // end of map()

3

Java 10、83バイト

a->{var b=a.clone();java.util.Arrays.sort(b);for(int i=0;i<a.length;a[i]-=b[i++]);}

バイトを節約するために新しい配列を返す代わりに、入力配列を変更します。

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

説明:

a->{                         // Method with double-array parameter and no return-type
  var b=a.clone();           //  Create a copy of the input-array
  java.util.Arrays.sort(b);  //  Sort this copy
  for(int i=0;i<a.length;    //  Loop over the indices
    a[i]-=                   //   Subtract from the `i`'th item in the input-array:
          b[i++]);}          //    The `i`'th item of the sorted array


3

Pythonの3、42の、40バイト

lambda a:[b-c for b,c in zip(a,sorted(a))]

lambda a:[a.pop(0)-b for b in sorted(a)]

37バイトを使用map
ovs

@ovsソリューションはPython 3で機能しますmap。リストではなくオブジェクトを返します。コンテストの要件としては、灰色の領域でしょうか?たぶん、あなたはそれをあなた自身の回答として提出するだけかもしれません。なぜなら、それはおそらく資格を得るのに十分異なるからです。
mypetlion

@ovs仕様では、入力は必ずしもintsになるとは限らないため、私はそのままにします。
mypetlion

mapオブジェクトを返すことは有効ですが、int以外の要件は私の提案を無効にします。
ovs









1

Japt8 6バイト

c í-Un

ここで試してください


説明

           :Implicit input of array U
c          :Flatten (simply creates a 2nd copy of the array because JavaScript's sort mutates the original array)
  í        :Interleave
    Un     :U sorted
   -       :Reduce each pair by subtraction

1

SmileBASIC、49バイト

DEF R A
DIM B[0]COPY B,A
SORT B
ARYOP 1,A,A,B
END

入力配列が適切に変更されます。

ARYOPアレイ全体を一度に操作します。この場合、結果をBから減算しAて格納しAます。




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