Réduisez en utilisant la valeur la plus basse


9

Le défi

Créez une fonction qui prend un tableau de nombres et soustrayez de chaque élément l'élément le plus bas du tableau qui n'a pas encore été soustrait d'un autre.

  • Après avoir utilisé la valeur la plus basse, elle ne peut plus être utilisée.
  • Les nombres du tableau sont des nombres décimaux et pas nécessairement des entiers.

Exemple:

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]

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


C'est le , donc la réponse la plus courte en octets gagne.


4
Cela pourrait utiliser un exemple pas à pas. Dans l'état actuel des choses, la tâche doit être déduite des cas de test.
Laikoni

1
Merci @Arnauld d'avoir pris le temps de le faire. Je n'ai pas pu utiliser le PC depuis hier donc je n'ai pas pu modifier l'exemple
Luis felipe De jesus Munoz

3
Y a-t-il une raison spécifique d'inclure des non-entiers dans les tableaux? Cela ne rend pas le défi plus intéressant, exclut certaines approches et pose un gros problème dans les langues sans types non entiers.
Dennis

Réponses:




4

Husk , 4 octets

Ṡz-O

Essayez-le en ligne!

Explication

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

Cela doit être une blague ..... 4 octets. Génial
Luis felipe De jesus Munoz


3

Rubis, 32 caractères

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

Vous pouvez simplement imprimer les valeurs: -> a {a.zip (a.sort) {| x, y | p xy}}
GB

3

JavaScript (ES6), 44 octets

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

Essayez-le en ligne!

Commenté

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 octets

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

Modifie le tableau d'entrée au lieu d'en renvoyer un nouveau pour économiser des octets.

Essayez-le en ligne.

Explication:

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 octets

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

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

37 octets en utilisant map.
ovs

@ovs Votre solution fonctionne en quelque sorte pour Python 3. Elle renvoie un mapobjet, au lieu d'une liste. Serait-ce une sorte de zone grise pour les exigences du concours? Peut-être pourriez-vous simplement la soumettre comme votre propre réponse, car elle est probablement suffisamment différente pour être qualifiée.
mypetlion

@ovs La spécification indique également que l'entrée ne sera pas nécessairement ints, donc je vais laisser la mienne telle quelle .
mypetlion

Le retour d'un mapobjet est valide, mais l'exigence non-int rend ma suggestion invalide.
ovs









1

Japt , 8 6 octets

c í-Un

Essayez-le ici


Explication

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

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

Le tableau d'entrée est modifié sur place.

ARYOPeffectue des opérations sur des baies entières à la fois. Dans ce cas , il soustrait Bde Aet stocke le résultat dans A.




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.