Tối ưu hóa thứ tự cánh của tôi


17

Tweet này liệt kê các đơn đặt hàng có thể cho Wings của một nhà hàng Trung Quốc 1 :

Menu cánh

Khi đặt hàng Pizza tôi thường tính toán kích thước nào mang lại cho tôi tỷ lệ giá Pizza tốt nhất, đó là một phép tính đơn giản. Tuy nhiên, giảm thiểu giá của một đơn hàng tại nhà hàng này không phải là một nhiệm vụ đơn giản, vì vậy tôi muốn được chuẩn bị cho đơn hàng tiếp theo của mình ở đó.

Thử thách

Cho một số nguyên lớn hơn hoặc bằng 4 , nhiệm vụ của bạn là trả về một đơn hàng có thể giúp giảm thiểu giá (tổng thể rẻ nhất) và số lượng giao dịch.

Thí dụ

Nếu tôi đặt mua 100 Wings, hóa ra món hời tốt nhất sẽ có giá $111.20 . Tuy nhiên, có nhiều đơn đặt hàng sẽ có giá đó, cụ thể là:

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

Vì đơn hàng đầu tiên sẽ sử dụng số lượng giao dịch ít nhất ( 2 ), kết quả sẽ có [50,50].

Quy tắc

  • n4
  • n
    • bạn có thể chọn trả lại tất cả các đơn đặt hàng có thể

Tủ thử

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)

Lưu ý: Những mẫu thử này liệt kê tất cả các đầu ra có thể bao gồm giá, bạn chỉ bắt buộc phải xuất một và bạn không bắt buộc phải xuất giá!


1: Bạn có thể tìm thấy dữ liệu dưới dạng CSV tại đây .


3
Câu hỏi thực sự là, ai đặt hàng 200 hay thậm chí 100 cánh? ...
Erik the Outgolfer 26/10/18

2
@Quintec: Tại sao, bạn cần thêm testcase?
ბიმო

1
Hai câu trả lời đã giải thích sai các yêu cầu, vì chỉ cần giảm thiểu giá. Vì tối thiểu hóa giá và số lượng giao dịch không rõ ràng (giá thấp nhất có sẵn từ các cách có số lượng giao dịch thấp nhất hoặc số lượng giao dịch thấp nhất có sẵn từ các cách có giá thấp nhất), nên chỉnh sửa yêu cầu rõ ràng hơn
trichoplax


1
n23120(68n3)25<n<=5025n25n<297080125

Câu trả lời:


7

JavaScript (ES6), 123 byte

Trả về thứ tự dưới dạng một chuỗi phân tách không gian.

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):''

Hãy thử trực tuyến!

Làm sao?

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 byte

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):''

Hãy thử trực tuyến!

Tối ưu hóa từ câu trả lời của Arnauld

Sự khác biệt

  • 51≤n≤53 được hợp nhất thành 31≤n≤50 (lưu 8 byte)
  • Viết lại bitmap (lưu 3 byte)
  • Sắp xếp lại một số logic (đã lưu 4 6 7 byte)

2

Võng mạc 0.8.2 , 160 155 byte

.+
$*
{`\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

.+
$*

Chuyển đổi sang unary.

{`

Lặp lại cho đến khi không có nhiều giao dịch có thể được mua.

{`\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,$&

Tìm cách mua giao dịch và nắm bắt và sao chép một trong các giao dịch.

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

n

Ưu đãi được mua theo các điều kiện sau:

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

Mua 80 cánh nếu để lại 0, 6, 9, 12, 15, 18, 25 hoặc 28 cánh.

1{70}$

Mua 70 cánh nếu đó là tất cả những gì chúng ta cần.

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

Mua 9 cánh nếu để lại 15 hoặc 40 cánh.

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

Mua 30, 35, 40 hoặc 45 cánh nếu đó là tất cả những gì chúng ta cần.

1{26,29}$

Mua 26, 27, 28 hoặc 29 cánh nếu đó là tất cả những gì chúng ta cần.

1{4,23}$

Mua 4 đến 23 cánh nếu đó là tất cả những gì chúng ta cần.

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

Mua 125, 50 hoặc 25 cánh nếu chúng ta có thể và nếu chúng ta vẫn có thể mua thêm cánh chính xác. Lưu ý rằng chúng tôi có các tùy chọn này vào cuối xen kẽ để việc mua chính xác được kiểm tra trước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.