Advent Challenge 3: ถึงเวลาที่จะจัดทำของขวัญใหม่!


9

<< ก่อนหน้า ถัดไป >>

น่าเสียดายที่ซานต้าไม่สามารถตามทันเอลฟ์ได้! ตอนนี้เขาต้องกลับไปที่การผลิตของขวัญ เนื่องจากพวกเอลฟ์ไม่ใช่ทาสของซานต้าเขาจึงต้องคิดค่าใช้จ่ายในการจ่ายเท่าไหร่

ท้าทาย

ให้ข้อมูลบางอย่างสำหรับของขวัญกำหนดค่าใช้จ่ายในการผลิตทั้งหมดของพวกเขา

นำเสนอแต่ละครั้งจะถูกวางในกล่องกระดาษแข็งและห่อด้วยกระดาษห่อด้วยริบบิ้นห่อรอบ ๆ ในตอนท้ายมาก กระดาษห่อนั้นมีมนต์ขลังและไม่จำเป็นต้องทับซ้อนกันดังนั้นปริมาณกระดาษห่อที่ใช้จึงเทียบเท่ากับพื้นที่ผิวของกล่องอย่างแม่นยำ ของขวัญทั้งหมดเป็นปริซึมรูปสี่เหลี่ยมผืนผ้าเพราะวิธีที่ซานต้าสามารถเก็บไว้ได้อย่างแน่นหนา ริบบิ้นวิ่งไปรอบ ๆ ในทั้งสามทิศทาง (ดังนั้นความยาวของริบบิ้นที่ใช้ในการพันเท่ากับเท่ากับผลรวมของสามเส้นรอบนอกที่แตกต่างกัน)

ปัจจุบันมีค่าใช้จ่ายที่รู้จักกันโชคดี กระดาษแข็งมีค่าใช้จ่าย $ 1 ต่อตารางเมตรและกระดาษห่อราคา $ 2 ต่อตารางเมตร (คำแนะนำ: คุณสามารถคูณพื้นที่ผิวด้วย 3: P) Ribbon ราคา $ 1 ต่อเมตร

รูปแบบข้อมูลจำเพาะ

การป้อนข้อมูลจะได้รับเป็นรายการของขวัญที่แต่ละรายการมีค่าใช้จ่ายของรายการจริงและสามมิติของกล่องปัจจุบัน ผลลัพธ์ของคุณควรเป็นค่าใช้จ่ายทั้งหมดที่จำเป็น

เป็นที่แน่นอนสูตรสำหรับค่าใช้จ่ายในปัจจุบันที่เดียวที่มีค่าใช้จ่ายรายการcและมิติx, yและเป็นzc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)

กรณีทดสอบ

[[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]] -> 11866
[[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]] -> 8854
[[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]] -> 4853
[[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]] -> 9717
[[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]] -> 9418
[[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]] -> 8178
[[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]] -> 9766
[[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]] -> 7118
[[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]] -> 8007
[[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]] -> 9331

กฎระเบียบ

  • ช่องโหว่มาตรฐานใช้
  • อินพุตและเอาต์พุตอาจได้รับและนำเสนอในรูปแบบที่เหมาะสม
  • คุณต้องรับอินพุตเป็นรายการของขวัญไม่ใช่แอตทริบิวต์ 4 รายการ
  • มันคือ ดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์ชนะ
  • จะไม่ยอมรับคำตอบ

หวังว่าความท้าทายนี้จะง่ายกว่าสิ่งที่เคยทำมาก่อนหน้านี้: P

หมายเหตุ: ผมดึงแรงบันดาลใจสำหรับชุดความท้าทายนี้จากการจุติของรหัส ฉันไม่มีส่วนเกี่ยวข้องกับเว็บไซต์นี้

คุณสามารถดูรายการของความท้าทายทั้งหมดในซีรีส์โดยดูที่ส่วน 'เชื่อมโยง' ของความท้าทายแรกที่นี่


เราได้สูญเสีย "เพิ่มเติม 1 เมตรสำหรับริบบิ้น" ในc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
เกรแฮม

@ Graham Yeah ปรากฎว่าฉันลืมที่จะเพิ่มสิ่งต่อไปนี้การลบออกจากข้อมูลจำเพาะ
HyperNeutrino

@cairdcoinheringaahing ขออภัยในความสับสน ฉันตัดสินใจที่จะยึดติดกับแนวคิดดั้งเดิมและฉันได้แก้ไขกรณีทดสอบของฉันเพื่อสะท้อนสิ่งนั้นเช่นกัน ขอบคุณ!
HyperNeutrino

6
ฉันสนุกกับความท้าทายแบบนี้มาแล้ว (เป็นที่ยอมรับหลังจากมีเบียร์น้อย!) อันนี้ดูเหมือนว่าภาษาใดที่สามารถใช้สูตรปิดในไบต์ที่น้อยที่สุดโดยไม่มีที่ว่างสำหรับการเล่นกอล์ฟที่สร้างสรรค์ดังนั้นในกรณีนี้ไม่มี + 1 จากฉัน
Shaggy

1
สำหรับผู้มีสิทธิเลือกตั้งใกล้พิเศษหลังจากที่ฉันชี้แจงจุดที่มีความคิดเห็นที่มีอยู่แล้วฉันควรชี้แจงอะไรเพิ่มเติม
HyperNeutrino

คำตอบ:


5

JavaScript (ES6), 58 ไบต์

a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

กรณีทดสอบ

อย่างไร?

เคล็ดลับเดียวที่ใช้ที่นี่คือการแยกตัวประกอบ(xy + xz)เป็นx (y + z)และนำผลรวม(y + z)กลับมาใช้ใหม่ในส่วนสุดท้ายของสูตร

a => a.reduce(                    // for each present in a:
  (s, [c, x, y, z]) =>            //   s = sum, [c, x, y, z] = present parameters
    s +                           //   add to s:
    c +                           //     c
    6 * (y * z + x * (y += z)) +  //     6(yz + x(y + z))
    4 * (x + y),                  //     4(x + (y + z))
  0                               //   initial sum = 0
)                                 // end of reduce()




2

C (gcc) , 104 100 99 93 ไบต์

  • ที่บันทึกไว้สี่ ห้าสิบเอ็ดไบต์ขอบคุณที่PrincePolka
t,x,y,z;f(A,a)int*A;{for(t=0;a--;)t+=*A+++6*((x=*A++)*(y=*A++)+(z=*A++)*(x+=y))+4*(x+z);t=t;}

ลองออนไลน์!

ใช้รายการของแอตทริบิวต์ปัจจุบัน (ความยาวรายการหารด้วยสี่) และจำนวนเต็มที่ระบุจำนวนของขวัญ ส่งคืนต้นทุนการผลิตของขวัญทั้งหมด


100 ไบต์หากไม่จำเป็นต้องทำงานมากกว่าหนึ่งอย่างคุณสามารถโกน j = t = 0,
PrincePolka


@PrincePolka ขอบคุณ ตามฉันทามติฟังก์ชั่นจะต้องทำงานหลายครั้งจึงj=t=0ต้องอยู่ต่อ ฉันไม่สามารถหาวิธีการจัดเรียงการคำนวณใหม่เพื่อบันทึกไบต์ได้ มันจะช่วยถ้าคุณเชื่อมโยงกับรหัสที่สมบูรณ์กับการเล่นกอล์ฟของคุณ
Jonathan Frech


@ PrincePolka ขอบคุณมาก
Jonathan Frech

1

05AB1E , 17 ไบต์

vyćsO4*y¦æ2ùPO6*O

ลองออนไลน์!

คำอธิบาย

v                  # for each present y
 yć                # extract the head (cost)
   s               # swap the dimensions to the top
    O4*            # sum and multiply by 4
       y¦          # push y with the head (cost) removed
         æ         # compute the powerset
          2ù       # keep only elements of length 2
            PO     # product and sum
              6*   # multiply by 6
                O  # sum everything



0

Excel, 60 ไบต์

ข้อมูลที่นำมาจากคอลัมน์AถึงDแถวใหม่ต่อปัจจุบัน สูตรในคอลัมน์อื่น ๆ

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

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