优化我的翅膀顺序


17

此推文列出了中餐厅1的翅膀的可能订单:

翅膀菜单

订购披萨时,我通常会计算出什么尺寸能给我带来最佳的披萨价格比,这很简单。但是,要最小化这家餐厅的订单价格并不是一件容易的事,因此我想为在该餐厅的下一份订单做好准备。

挑战

给定一个大于或等于4的整数,您的任务是返回一个可能的订单,以最小化价格(总体上最便宜)和交易数量。

如果我要订购100 Wings,事实证明最好的讨价还价将花费$111.20。但是,有多个订单将花费该金额,即:

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

由于第一个订单将使用最少的交易(2),结果将是[50,50]

规则

  • 输入将是某个整数n4
  • 输出将是订单大小的列表/数组/ ...,总计为n,并将订单价格最小化
    • 您可以选择退回所有可能的订单

测试用例

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
有两个答案误解了需求,因为它们仅需要最小化价格。由于将交易的价格和数量最小化是模棱两可的(从交易数量最少的方式中可获得最低价格,或者从价格最低的方式中可获得最低数量的交易),因此有必要对要求进行更明确的编辑
trichoplax18年


1
我注意到,对于价格由下式给出 1n23,而25<n<=50的价格可以分为25n25(对于n<29,您不能单独购买,但公式仍会给出适当的值)。7080125也可以从以前的值获得,所以如果你可以使用他们,他们会降低交易的数量。其他值是不经济的。120(68n3)25<n<=5025n25n<297080125
尼尔,

Answers:


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.2160个 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})?$)

如果留下0、6、9、12、15、18、25或28个机翼,则购买80个机翼。

1{70}$

如果这就是我们需要的,那就购买70片翅膀。

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

如果留下15或40片翅膀,则购买9片翅膀。

(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个机翼。请注意,我们在轮换结束时提供了这些选项,以便首先测试确切的购买。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.