Ridurre utilizzando il valore più basso


9

La sfida

Creare una funzione che accetta una matrice di numeri e sottrarre da ciascun elemento l'elemento più basso della matrice che non è stato ancora sottratto da un altro.

  • Dopo aver utilizzato il valore più basso, non può essere riutilizzato.
  • I numeri nella matrice sono numeri decimali e non necessariamente numeri interi.

Esempio:

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]

Casi test

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]


Questo è , quindi vince la risposta più breve in byte.


4
Questo potrebbe usare un esempio di walk-through. Allo stato attuale l'attività deve essere desunta dai casi di test.
Laikoni,

1
Grazie @Arnauld per il tempo dedicato a farlo. Non sono stato in grado di usare il pc da ieri, quindi non ho potuto modificare l'esempio
Luis felipe De jesus Munoz,

3
C'è un motivo specifico per includere non numeri interi negli array? Non rende la sfida più interessante, esclude alcuni approcci e pone un grosso problema nelle lingue senza tipi non interi.
Dennis,

Risposte:




4

Buccia , 4 byte

Ṡz-O

Provalo online!

Spiegazione

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

Questo deve essere uno scherzo ..... 4 byte. Fantastico
Luis felipe De jesus Munoz il


3

Rubino, 32 caratteri

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

Potresti semplicemente stampare i valori: -> 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())

Provalo online!

Commentate

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 byte

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

Modifica l'input-array invece di restituirne uno nuovo per salvare i byte.

Provalo online.

Spiegazione:

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 byte

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

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

37 byte usando map.
Ovs,

@ovs Il tuo tipo di soluzione funziona per Python 3. Restituisce un mapoggetto, anziché un elenco. Sarebbe una specie di area grigia per i requisiti del concorso? Forse potresti semplicemente inviarlo come risposta, dato che probabilmente è abbastanza diverso da qualificarti.
mypetlion,

@ovs La specifica afferma inoltre che l'ingresso non sarà necessariamente ints, quindi lascerò il mio così com'è.
mypetlion,

Restituire un mapoggetto è valido, ma il requisito non int rende il mio suggerimento non valido.
Ovs,









1

Japt , 8 6 byte

c í-Un

Provalo qui


Spiegazione

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

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

L'array di input viene modificato in posizione.

ARYOPesegue operazioni su interi array contemporaneamente. In questo caso si sottrae Bda Ae memorizza il risultato in A.




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.