Zmniejsz, używając najniższej wartości


9

Wyzwanie

Utwórz funkcję, która pobiera tablicę liczb i odejmuje od każdego elementu najniższy element w tablicy, który nie został jeszcze odjęty od innego.

  • Po użyciu najniższej wartości nie można jej ponownie użyć.
  • Liczby w tablicy są liczbami dziesiętnymi i niekoniecznie liczbami całkowitymi.

Przykład:

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]

Przypadki testowe

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]


To jest , więc wygrywa najkrótsza odpowiedź w bajtach.


4
Przydałby się przykład przejścia. Na obecnym etapie zadanie należy wywnioskować na podstawie przypadków testowych.
Laikoni

1
Dzięki @Arnauld za poświęcenie czasu na zrobienie tego. Nie byłem w stanie korzystać z komputera od wczoraj, więc nie mogłem zmodyfikować przykładu
Luis Felipe De Jesus Munoz

3
Czy jest jakiś konkretny powód, aby umieszczać w tablicach wartości całkowite? Nie czyni wyzwania bardziej interesującym, wyklucza niektóre podejścia i stwarza duży problem w językach bez typów niecałkowitych.
Dennis

Odpowiedzi:






3

Ruby, 32 znaki

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

Możesz po prostu wydrukować wartości: -> a {a.zip (a.sort) {| x, y | p xy}}
GB

3

JavaScript (ES6), 44 bajty

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

Wypróbuj online!

Skomentował

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 bajty

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

Zmienia tablicę wejściową zamiast zwracać nową, aby zapisać bajty.

Wypróbuj online.

Wyjaśnienie:

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 bajtów

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

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

37 bajtów przy użyciu map.
ovs

@ovs Twoje rozwiązanie działa w Pythonie 3. Zwraca mapobiekt zamiast listy. Czy byłby to rodzaj szarej strefy dla wymagań konkursu? Być może możesz po prostu przesłać go jako własną odpowiedź, ponieważ prawdopodobnie jest wystarczająco inny, aby się zakwalifikować.
mypetlion

@ovs Specyfikacja mówi również, że dane wejściowe niekoniecznie muszą być ints, więc zostawię moje tak, jak jest.
mypetlion

Zwracanie mapobiektu jest prawidłowe, ale wymóg inny niż int powoduje, że moja sugestia jest nieważna.
ovs









1

Japt , 8 6 bajtów

c í-Un

Wypróbuj tutaj


Wyjaśnienie

           :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 bajtów

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

Tablica wejściowa jest modyfikowana na miejscu.

ARYOPwykonuje operacje na całych tablicach jednocześnie. W tym przypadku to odejmuje Bod Ai zapisuje wynik w A.




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.