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.

Luis Felipe De Jesus Munoz
źródło
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:

5

MATL , 3 bajty

tS-

Wypróbuj online!

(implicit input as an array)
t                              # duplicate
 S                             # sort
  -                            # element-wise subtract
(implicit output)

Giuseppe
źródło
4

Łuska , 4 bajty

Ṡz-O

Wypróbuj online!

Wyjaśnienie

      -- input, e.g. [6,4,7,8,9,2,1,4]
   O  -- sort        [1,2,4,4,6,7,8,9]
Ṡz-   -- element wise difference to input: [6-1,4-2,7-4,8-4,9-6,2-7,1-8,4-9]
      -- return result [5,2,3,4,3,-5,-7,-5]
Laikoni
źródło
To musi być żart ..... 4 bajty. Niesamowite
Luis Felipe De Jesus Munoz
4

Prolog (SWI) , 93 80 68 bajtów

[H|T]/[A|B]/[X|Y]:-X is H-A,(T=[],Y=T;T/B/Y).
X*Y:-msort(X,S),X/S/Y.

Wypróbuj online!

Emigna
źródło
3

Ruby, 32 znaki

->a{a.zip(a.sort).map{|x,y|x-y}}
histocrat
źródło
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()
Arnauld
źródło
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
Kevin Cruijssen
źródło
3

R , 18 bajtów

(x=scan())-sort(x)

Wypróbuj online!

Robi to, co mówi :)

JayCe
źródło
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)]
mypetlion
źródło
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
2

Common Lisp, 46 bajtów

(lambda(x)(mapcar #'- x(sort(copy-seq x)#'<)))

Wypróbuj online!

Renzo
źródło
2

Perl 6 , 15 bajtów

{@^a Z-@a.sort}

Wypróbuj online!

Anonimowa funkcja, która pobiera jedną listę i zwraca listę.

Jo King
źródło
1

Stax , 5 bajtów

ÿ◙┘¿N

Uruchom i debuguj

Aby pokazać, jak to działa, oto rozpakowana, skomentowana wersja.

m       for each element execute, then pop and print:
  xo    sort the original input
  i@    index into array using iteration index
  -     subtract

Uruchom ten

rekurencyjny
źródło
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
Kudłaty
źródło
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.

12Me21
źródło
0

PHP , 86 bajtów

function f($a){$b=$a;sort($b);return array_map(function($x,$y){return $y-$x;},$b,$a);}

Wypróbuj online!

Luis Felipe De Jesus Munoz
źródło
0

Tcl , 49 bajtów

proc S L {lmap n $L m [lsort -r $L] {expr $n-$m}}

Wypróbuj online!

sergiol
źródło