首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮我卖一天前的百吉饼

帮我卖一天前的百吉饼
EN

Code Golf用户
提问于 2022-01-19 12:18:16
回答 12查看 3.9K关注 0票数 36

你在一家面包店工作,每天都要做100个百吉饼。然而,您的客户并不是那么可靠,每天都会随机订购几个百吉饼。因此,有时你会用完百吉饼,有时你会有剩菜。

现在剩下的百吉饼还可以再吃一天。在上架一天之后,他们不得不被扔掉。但在那之前你还是可以卖的。所以你把它们留到第二天。顾客会更喜欢新鲜的百吉饼,所以如果你没有用完新鲜的百吉饼,他们会得到一个新鲜的百吉饼。只有当你没有新鲜的百吉饼时,他们才会要一天前的百吉饼。

例如,如果你一天还剩下25个百吉饼,第二天就有100个百吉饼被订购了,你不会卖掉任何旧的百吉饼,所以你把它们扔掉,第二天就有0只剩下的百吉饼。

您的任务是编写一个程序或函数,该程序或函数接受一个非负整数的非空列表,表示在给定时间内下了多少订单:

例如:

代码语言:javascript
复制
[106,25,134,99,85,12]

也就是说,第一天订购了106个百吉饼,第二天订购了25个百吉饼,然后订购了134个百吉饼等。

您的任务是计算在所述期间售出了多少百吉饼。你应该假设在这段时间开始的时候,就没有剩下的百吉饼了。

这是密码-高尔夫,所以答案将以字节为单位得分,目标是更少的字节。

测试用例

代码语言:javascript
复制
[100,100,100] -> 300
[372,1920,102] -> 300
[25,25,25] -> 75
[25,100,120] -> 225
[0,200] -> 200
[0,175,75] -> 250
[75,150,150] -> 300
[0,101,199]-> 201
[200,0] -> 100
EN

回答 12

Code Golf用户

发布于 2022-02-01 02:31:51

Brainfuck,148个字节

代码语言:javascript
复制
,[->[-]>[-<+>]>++++++++++[-<++++++++++>],[>>>+<<<-<[->>+>>-<<<<[->>>+<<<]]>>>[-<<<+>>>]>[-<<<<<[->>>+<<<[->>>>+<<<<]]>>>>[-<<<<+>>>>]>]<<<]<<<]>>>>.

首先输入数组的长度,然后输入值。遗憾的是,我找不到任何网站,支持输入和输出作为十进制数字。我得到的最佳结果是本站,您可以输入像\3\100\100\100这样的转义序列,但是输出是ASCII,所以需要将其转换为十进制。(请告诉我任何支持十进制评论的网站)

解释

内存映射:arrayLength old fresh order output temp flag

代码语言:javascript
复制
,[-                          loop through all elements of array
  >[-]                       reset old count
  >[-<+>]                    set old count to the remaining amount from fresh
  >++++++++++[-<++++++++++>] set fresh to 100
  ,[                         while there is order
    >>>+                     set flag
    <<<-                     reduce order size
    <[                       check if there are any fresh
      -                      reduce amount of fresh
      >>+                    increase output
      >>-                    unset flag
      <<<<[->>>+<<<]         copy fresh to temp variable so condition can exit
    ]
    >>>[-<<<+>>>]            copy from temp back to fresh
    >[                       check if flag is set (if previous condition wasnt executed it acts as else)
      -                      unset flag
      <<<<<[                 check if there are any old
        -                    reduce amount of old
        >>>+                 increase output
        <<<[->>>>+<<<<]      copy old to temp variable so condition can exit
      ]
      >>>>[-<<<<+>>>>]       copy from temp back to old
      >
    ]<<<
  ]<<<
]
票数 7
EN

Code Golf用户

发布于 2022-01-19 21:57:13

哈斯克尔,42字节

代码语言:javascript
复制
sum.(zipWith(min.max 100.(-)200)=<<(100:))

在网上试试!

既然现在有了哈斯克尔的答案,我想我会把我的扔在拳击台上。

票数 6
EN

Code Golf用户

发布于 2022-01-19 23:22:06

Excel,66字节

代码语言:javascript
复制
=LET(o,A:A,a,100+INDEX((100-o)*(o<100),ROW(o)-1),SUM(IF(o<a,o,a)))

输入在一个单元格中的A:A范围内,每一天的顺序都是由它自己完成的。输出在公式所在的地方。

LET()函数允许您定义变量,然后通过该变量名引用它们。这些术语是成对的(variable, value),除了最后一个项,也就是输出值。

  • o,A:Ao ( orders )定义为A栏的全部内容,这在技术上限制了您大约2,870年的百吉饼订单。我认为这是可以接受的。
  • a,100+INDEX((100-o)*(o<100),ROW(o)-1)定义了a (可用),并完成了大部分的繁重工作,所以让我们把它分解成几个部分。
    • 100是指每天有多少百吉饼是新鲜的。
    • (100-o)是每天有多少剩下来的新鲜百吉饼。
    • *(o<100)过滤掉负面信息(订单比新鲜订单多,所以没有剩菜)。
    • ROW(o)-1告诉我们,我们将查看前一天的数据。
    • 在纯文本中:100+INDEX([leftover fresh]*[not negative],[from yesterday])
    • 总之,你可以把它读成[fresh] + [yesterday's fresh leftovers]

  • IF(o<a,o,a)返回订单数量(如果低于可用数量)或只返回可用订单数。
  • SUM(IF(~))把它加起来。
票数 6
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/241373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档