Mit dem niedrigsten Wert reduzieren


9

Die Herausforderung

Erstellen Sie eine Funktion, die ein Array von Zahlen verwendet und von jedem Element das niedrigste Element im Array subtrahiert, das noch nicht von einem anderen subtrahiert wurde.

  • Nach Verwendung des niedrigsten Werts kann er nicht mehr verwendet werden.
  • Zahlen im Array sind Dezimalzahlen und nicht unbedingt ganze Zahlen.

Beispiel:

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]

Testfälle

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]


Dies ist , also gewinnt die kürzeste Antwort in Bytes.


4
Dies könnte ein Durchgangsbeispiel verwenden. Aus heutiger Sicht muss die Aufgabe aus den Testfällen abgeleitet werden.
Laikoni

1
Vielen Dank an @Arnauld, dass Sie sich die Zeit dafür genommen haben. Ich konnte den PC seit gestern nicht mehr benutzen, daher konnte ich das Beispiel nicht ändern
Luis felipe De jesus Munoz

3
Gibt es einen bestimmten Grund, Nicht-Ganzzahlen in die Arrays aufzunehmen? Dies macht die Herausforderung nicht interessanter, schließt einige Ansätze aus und stellt ein großes Problem in Sprachen ohne nicht ganzzahlige Typen dar.
Dennis

Antworten:






3

Ruby, 32 Zeichen

->a{a.zip(a.sort).map{|x,y|x-y}}

Sie könnten einfach die Werte drucken: -> a {a.zip (a.sort) {| x, y | p xy}}
GB

3

JavaScript (ES6), 44 Byte

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

Probieren Sie es online aus!

Kommentiert

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 Bytes

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

Ändert das Eingabearray, anstatt ein neues zurückzugeben, um Bytes zu speichern.

Probieren Sie es online aus.

Erläuterung:

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 Bytes

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

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

37 Bytes mit map.
ovs

@ovs Ihre Lösung funktioniert für Python 3. Sie gibt ein mapObjekt anstelle einer Liste zurück. Wäre das eine Art Grauzone für die Anforderungen des Wettbewerbs? Vielleicht könnten Sie es einfach als Ihre eigene Antwort einreichen, da es wahrscheinlich anders genug ist, um sich zu qualifizieren.
Mypetlion

@ovs Die Spezifikation besagt auch, dass die Eingabe nicht unbedingt ints sein muss, also werde ich meine so lassen, wie sie ist.
Mypetlion

Die Rückgabe eines mapObjekts ist gültig, aber die Nicht-Int-Anforderung macht meinen Vorschlag ungültig.
ovs









1

Japt , 8 6 Bytes

c í-Un

Probieren Sie es hier aus


Erläuterung

           :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 Bytes

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

Das Eingabearray wird an Ort und Stelle geändert.

ARYOPführt Operationen auf ganzen Arrays gleichzeitig aus. In diesem Fall zieht sie Baus Aund speichert das Ergebnis in A.




Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.