เพิ่มประสิทธิภาพการสั่งซื้อปีกของฉัน


17

ทวีตนี้แสดงรายการคำสั่งซื้อที่เป็นไปได้สำหรับ Wings of a Chinese restaurant 1 :

เมนู Wings

เมื่อสั่งพิซซ่าฉันมักจะคำนวณขนาดที่ให้อัตราส่วนราคาพิซซ่าที่ดีที่สุดสำหรับฉันซึ่งเป็นการคำนวณอย่างง่าย อย่างไรก็ตามการลดราคาของการสั่งซื้อสินค้าที่ร้านอาหารนี้ไม่ใช่เรื่องง่ายดังนั้นฉันจึงต้องการเตรียมพร้อมสำหรับการสั่งซื้อครั้งต่อไปที่นั่น

ท้าทาย

ด้วยจำนวนเต็มมากกว่าหรือเท่ากับงานของคุณคือการส่งคืนคำสั่งซื้อที่เป็นไปได้หนึ่งคำสั่งซึ่งจะช่วยลดราคา (โดยรวมที่ถูกที่สุด) และจำนวนข้อตกลง4

ตัวอย่าง

ถ้าฉันจะสั่งซื้อปีกก็จะเปิดออกต่อรองราคาที่ดีที่สุดจะเสียค่าใช้จ่าย$อย่างไรก็ตามมีหลายคำสั่งซึ่งจะมีค่าใช้จ่ายจำนวนนั้นคือ:100$111.20

[50,50],[25,25,50],[25,25,25,25]

นับตั้งแต่การสั่งซื้อครั้งแรกจะใช้จำนวนน้อยที่สุดของข้อเสนอ ( ) ผลจะเป็น2[50,50]

กฎระเบียบ

  • ข้อมูลที่ป้อนจะเป็นจำนวนเต็มn4
  • ผลลัพธ์จะเป็นรายการ / อาร์เรย์ / ... ของขนาดคำสั่งซื้อที่รวมกันเป็นและลดราคาของคำสั่งซื้อ n
    • คุณอาจเลือกที่จะส่งคืนคำสั่งซื้อที่เป็นไปได้ทั้งหมด

Testcases

4 -> [4]  (4.55)
23 -> [23]  (26.10)
24 -> [6,18],[9,15],[12,12]  (27.20)
31 -> [6,25]  (34.60)
32 -> [4,28],[6,26],[7,25]  (35.75)
33 -> [4,29],[5,28],[6,27],[7,26],[8,25]  (36.90)
34 -> [6,28],[9,25]  (38.00)
35 -> [35]  (39.15)
125 -> [125]  (139.00)
200 -> [25,50,125]  (222.40)
201 -> [26,50,125]  (223.55)
250 -> [125,125]  (278.00)
251 -> [26,50,50,125]  (279.15)
418 -> [15,28,125,125,125],[18,25,125,125,125]  (465.20)
1001 -> [26,50,50,125,125,125,125,125,125,125]  (1113.15)
12345 -> [15,80,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[25,70,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[45,50,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125]  (13728.10)

หมายเหตุ:รายการทดสอบเหล่านี้แสดงผลลัพธ์ที่เป็นไปได้ทั้งหมดรวมถึงราคาคุณจะต้องส่งออกหนึ่งรายการเท่านั้นและคุณไม่จำเป็นต้องส่งออกราคา!


1: คุณสามารถค้นหาข้อมูลเป็นไฟล์ CSV ที่นี่


3
คำถามจริงคือใครสั่ง 200 หรือ 100 ปีก? ...
Erik the Outgolfer

2
@Quintec: ทำไมคุณต้องมีการทดสอบเพิ่มเติม
იოო

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


1
ฉันสังเกตเห็นว่าสำหรับราคาจะได้รับจาก1n23120(68n3)25<n<=5025n25n<297080125

คำตอบ:


7

JavaScript (ES6), 123 ไบต์

ส่งคืนคำสั่งซื้อเป็นสตริงที่คั่นด้วยช่องว่าง

f=n=>n?(x=n>128|n==125?125:n>50?n<54?25:n-70?302256705>>n-80&n>79&n<109?80:50:n:n-24&&n-49?n<31|n%5<1?n:25:9)+' '+f(n-x):''

ลองออนไลน์!

อย่างไร?

n

n>128n=125

125n129n125

125<n<1294

n<31

n<31n=242×1218+615+99

31n50

25

  • n5
  • n=4940+928+219

51n53

504252×26n=5225+27

54n128n125

50

  • n=70
  • n{80,86,89,92,98,105,108}8080108

    10010000001000001001001000001(2)=302256705(10)


4

JavaScript (Node.js) , 112 108 106 105 ไบต์

f=n=>n?(x=n>128|n==125?125:n>53&n!=70?1629>>n/3+6&n<99==n%3/2?80:50:~n%25?n>30&&n%5?25:n:9)+' '+f(n-x):''

ลองออนไลน์!

ปรับให้เหมาะสมจากคำตอบของ Arnauld

ความแตกต่าง

  • 51≤n≤53ถูกรวมเป็น31≤n≤50 (บันทึก 8 ไบต์)
  • เขียนใหม่บิตแมป (บันทึก 3 ไบต์)
  • จัดเรียงตรรกะบาง ( 4 6 7 ไบต์บันทึกไว้)

2

เรติน่า 0.8.2 , 160 155 ไบต์

.+
$*
{`\b(1{80}(?=((111){2,6}|1{25}|1{28})?$)|1{70}$|1{9}(?=.{15}$|.{40}$)|(1{5}){6,9}$|1{26,29}$|1{4,23}$|1{125}|1{50}|1{25})+$
$1,$&
(1+),\1(1*)$
$.1,$2

nn

.+
$*

แปลงเป็นเอก

{`

ทำซ้ำจนกว่าจะไม่สามารถซื้อดีลได้อีก

{`\b(1{80}(?=((111){2,6}|1{25}|1{28})?$)|1{70}$|1{9}(?=.{15}$|.{40}$)|(1{5}){6,9}$|1{26,29}$|1{4,23}$|1{125}|1{50}|1{25})+$
$1,$&

ค้นหาวิธีการซื้อดีลและจับภาพและทำซ้ำหนึ่งในดีล

(1+),\1(1*)$
$.1,$2

n

ข้อตกลงซื้อภายใต้เงื่อนไขดังต่อไปนี้:

1{80}(?=((111){2,6}|1{25}|1{28})?$)

ซื้อปีก 80 อันถ้าทิ้ง 0, 6, 9, 12, 15, 18, 25 หรือ 28 ปีก

1{70}$

ซื้อ 70 ปีกหากนั่นคือทั้งหมดที่เราต้องการ

1{9}(?=.{15}$|.{40}$)

ซื้อ 9 ปีกหากทิ้ง 15 หรือ 40 ปีก

(1{5}){6,9}$

ซื้อปีก 30, 35, 40 หรือ 45 ถ้านั่นคือทั้งหมดที่เราต้องการ

1{26,29}$

ซื้อปีก 26, 27, 28 หรือ 29 ถ้านั่นคือทั้งหมดที่เราต้องการ

1{4,23}$

ซื้อ 4 ถึง 23 ปีกหากนั่นคือทั้งหมดที่เราต้องการ

1{125}|1{50}|1{25}

ซื้อปีก 125, 50 หรือ 25 ถ้าเราทำได้และถ้าเรายังสามารถซื้อปีกได้แน่นอน โปรดทราบว่าเรามีตัวเลือกเหล่านี้เมื่อสิ้นสุดการสลับเพื่อให้การซื้อที่แน่นอนได้รับการทดสอบก่อน

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