En düşük değeri kullanarak azaltın


9

Meydan okuma

Bir sayı dizisi alan bir işlev oluşturun ve her öğeden dizideki henüz başka bir öğeden çıkarılmamış en düşük öğeyi çıkarın.

  • En düşük değeri kullandıktan sonra, tekrar kullanılamaz.
  • Dizideki sayılar ondalık sayılardır ve mutlaka tamsayı değildir.

Misal:

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]

Test Durumları

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]


Bu , yani bayttaki en kısa cevap kazanır.


4
Bu bir gözden geçirme örneği kullanabilir. Şimdi olduğu gibi görevin test senaryolarından çıkarılması gerekiyor.
Laikoni

1
@ Zaman ayırdığınız için teşekkür ederiz. PC'yi dünden beri kullanamadım, bu yüzden örneği değiştiremedim
Luis felipe De jesus Munoz

3
Dizilerde tamsayı olmayanların dahil edilmesi için belirli bir neden var mı? Bu meydan okumayı daha ilginç hale getirmez, bazı yaklaşımları dışlar ve tamsayı olmayan türler olmayan dillerde büyük bir sorun oluşturur.
Dennis

Yanıtlar:






3

Yakut, 32 karakter

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

Yalnızca değerleri yazdırabilirsiniz: -> a {a.zip (a.sort) {| x, y | p xy}}
GB

3

JavaScript (ES6), 44 bayt

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

Çevrimiçi deneyin!

Yorumlananlar

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 bayt

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

Baytları kaydetmek için yenisini döndürmek yerine girdi dizisini değiştirir.

Çevrimiçi deneyin.

Açıklama:

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 bayt

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

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

37 bayt kullanıyor map.
ovs

@ovs Çözüm türünüz Python 3 için çalışır map. Liste yerine bir nesne döndürür . Yarışma gereklilikleri için burası gri bir alan mı olur? Belki de sadece kendi cevabınız olarak gönderebilirsiniz, çünkü muhtemelen yeterlilik kazanacak kadar farklıdır.
mypetlion

@ovs Spec ayrıca girdinin mutlaka ints olmayacağını da belirtiyor , bu yüzden benimkini olduğu gibi bırakacağım.
mypetlion

Bir mapnesneyi döndürmek geçerli, ancak int olmayan gereksinim öneriyi geçersiz kılıyor.
ovs









1

Japt , 8 6 bayt

c í-Un

Burada deneyin


açıklama

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

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

Giriş dizisi yerinde değiştirilir.

ARYOPaynı anda tüm diziler üzerinde işlem yapar. Bu durumda çıkarır Bgelen Ave sonucu saklar A.




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.