ลดการใช้ค่าต่ำสุด


9

ความท้าทาย

สร้างฟังก์ชั่นที่ใช้อาร์เรย์ของตัวเลขและลบออกจากแต่ละองค์ประกอบซึ่งเป็นองค์ประกอบที่ต่ำที่สุดในอาร์เรย์ที่ยังไม่ได้ถูกลบออกจากอีกองค์ประกอบ

  • หลังจากใช้ค่าต่ำสุดจะไม่สามารถใช้งานได้อีก
  • ตัวเลขในอาร์เรย์เป็นตัวเลขทศนิยมและไม่จำเป็นต้องเป็นจำนวนเต็ม

ตัวอย่าง:

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]

กรณีทดสอบ

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]


นี่คือ ดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์ชนะ


4
สิ่งนี้สามารถใช้ตัวอย่างแบบ walk-through เนื่องจากในขณะนี้งานจำเป็นต้องอนุมานจากกรณีทดสอบ
Laikoni

1
ขอบคุณ @Arnauld ที่สละเวลาในการทำ ฉันไม่สามารถใช้พีซีได้ตั้งแต่เมื่อวานดังนั้นฉันจึงไม่สามารถปรับเปลี่ยนตัวอย่างได้
Luis felipe De jesus Munoz

3
มีเหตุผลเฉพาะในการรวมที่ไม่ใช่จำนวนเต็มในอาร์เรย์? มันไม่ได้ทำให้ความท้าทายน่าสนใจยิ่งขึ้นออกกฎบางวิธีและวางปัญหาใหญ่ในภาษาที่ไม่มีประเภทไม่ใช่จำนวนเต็ม
Dennis

คำตอบ:







3

JavaScript (ES6) 44 ไบต์

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

ลองออนไลน์!

แสดงความคิดเห็น

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 ไบต์

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

ปรับเปลี่ยนอินพุตอาร์เรย์แทนที่จะส่งคืนใหม่เพื่อบันทึกไบต์

ลองออนไลน์

คำอธิบาย:

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 ไบต์

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

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

37 ไบต์mapใช้
OVS

@ovs วิธีแก้ปัญหาของคุณสำหรับ Python 3 มันส่งคืนmapออบเจกต์แทนที่จะเป็นรายการ นั่นจะเป็นพื้นที่สีเทาสำหรับความต้องการของการแข่งขันหรือไม่? บางทีคุณอาจแค่ส่งมันเป็นคำตอบของคุณเองเนื่องจากมันอาจแตกต่างกันพอที่จะมีคุณสมบัติ
mypetlion

@ovs สเป็คยังระบุว่าการป้อนข้อมูลจะไม่จำเป็นต้องเป็นints ดังนั้นฉันจะปล่อยให้ฉันเป็นอย่างที่เป็นอยู่
mypetlion

การส่งคืนmapวัตถุนั้นถูกต้อง แต่ข้อกำหนดที่ไม่ได้อยู่ภายในทำให้ข้อเสนอแนะของฉันไม่ถูกต้อง
OVS







1

Stax , 5 ไบต์

ÿ◙┘¿N

เรียกใช้และแก้ไขข้อบกพร่อง

เพื่อแสดงวิธีการทำงานนี่เป็นเวอร์ชันที่ไม่ได้บรรจุและแสดงความคิดเห็น

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

เรียกใช้อันนี้




1

SmileBASIC ขนาด 49 ไบต์

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

มีการปรับเปลี่ยนอาร์เรย์อินพุต

ARYOPดำเนินการในอาร์เรย์ทั้งหมดในครั้งเดียว ในกรณีนี้มันหักBจากและเก็บผลในAA




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.