Kurangi menggunakan nilai terendah

9

Tantangan

Buat fungsi yang mengambil array angka dan kurangi dari setiap elemen elemen terendah dalam array yang belum dikurangkan dari yang lain.

  • Setelah menggunakan nilai terendah, itu tidak bisa digunakan lagi.
  • Angka dalam array adalah angka desimal, dan tidak harus bilangan bulat.

Contoh:

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]

Uji Kasus

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]


Ini adalah , jadi jawaban tersingkat dalam byte menang.

Luis felipe De jesus Munoz
sumber
4
Ini bisa menggunakan contoh walk-through. Seperti yang ada sekarang tugas perlu disimpulkan dari kasus uji.
Laikoni
1
Terima kasih @Arnauld telah meluangkan waktu untuk melakukannya. Saya belum bisa menggunakan pc sejak kemarin jadi saya tidak bisa memodifikasi contoh
Luis felipe De jesus Munoz
3
Apakah ada alasan khusus untuk memasukkan non-integer dalam array? Itu tidak membuat tantangan lebih menarik, mengesampingkan beberapa pendekatan, dan menimbulkan masalah besar dalam bahasa tanpa tipe non-integer.
Dennis

Jawaban:

5

MATL , 3 byte

tS-

Cobalah online!

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

Giuseppe
sumber
4

Sekam , 4 byte

Ṡz-O

Cobalah online!

Penjelasan

      -- 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
sumber
Ini harus menjadi lelucon ..... 4 byte. Luar biasa
Luis felipe De jesus Munoz
4

Prolog (SWI) , 93 80 68 byte

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

Cobalah online!

Emigna
sumber
3

Ruby, 32 karakter

->a{a.zip(a.sort).map{|x,y|x-y}}
histokrat
sumber
Anda bisa mencetak nilai-nilai: -> 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())

Cobalah online!

Berkomentar

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
sumber
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++]);}

Memodifikasi input-array alih-alih mengembalikan yang baru untuk menghemat byte.

Cobalah online.

Penjelasan:

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
sumber
3

R , 18 byte

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

Cobalah online!

Lakukan apa yang dikatakan :)

JayCe
sumber
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)]
mypetlion
sumber
37 byte menggunakan map.
Ov
@ovs Jenis solusi Anda berfungsi untuk Python 3. Ia mengembalikan mapobjek, bukan daftar. Apakah itu semacam wilayah abu-abu untuk persyaratan kontes? Mungkin Anda bisa mengirimkannya sebagai jawaban Anda sendiri, karena mungkin cukup berbeda untuk dikualifikasikan.
mypetlion
@ovs Spec juga menyatakan bahwa input belum tentu ints, jadi saya akan meninggalkan milik saya apa adanya.
mypetlion
Mengembalikan mapobjek adalah valid, tetapi persyaratan non-int membuat saran saya tidak valid.
Ov
2

Gangguan Umum, 46 byte

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

Cobalah online!

Renzo
sumber
2

Perl 6 , 15 byte

{@^a Z-@a.sort}

Cobalah online!

Fungsi anonim yang mengambil satu daftar dan mengembalikan daftar.

Jo King
sumber
1

Stax , 5 byte

ÿ◙┘¿N

Jalankan dan debug itu

Untuk menunjukkan cara kerjanya, inilah versi yang sudah dibongkar dan dikomentari.

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

Jalankan yang ini

rekursif
sumber
1

J , 4 byte

-/:~

Cobalah online!

Penjelasan:

Dari argumen kurangi -yang diurutkan /:~argumen

Galen Ivanov
sumber
1

Japt , 8 6 byte

c í-Un

Coba di sini


Penjelasan

           :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
Shaggy
sumber
1

SmileBASIC, 49 byte

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

Array input diubah pada tempatnya.

ARYOPmelakukan operasi pada seluruh array sekaligus. Dalam hal ini mengurangi Bdari Adan menyimpan hasilnya dalam A.

12Me21
sumber
0

PHP , 86 byte

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

Cobalah online!

Luis felipe De jesus Munoz
sumber
0

Tcl , 49 byte

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

Cobalah online!

sergiol
sumber