你在一家面包店工作,每天都要做100个百吉饼。然而,您的客户并不是那么可靠,每天都会随机订购几个百吉饼。因此,有时你会用完百吉饼,有时你会有剩菜。
现在剩下的百吉饼还可以再吃一天。在上架一天之后,他们不得不被扔掉。但在那之前你还是可以卖的。所以你把它们留到第二天。顾客会更喜欢新鲜的百吉饼,所以如果你没有用完新鲜的百吉饼,他们会得到一个新鲜的百吉饼。只有当你没有新鲜的百吉饼时,他们才会要一天前的百吉饼。
例如,如果你一天还剩下25个百吉饼,第二天就有100个百吉饼被订购了,你不会卖掉任何旧的百吉饼,所以你把它们扔掉,第二天就有0只剩下的百吉饼。
您的任务是编写一个程序或函数,该程序或函数接受一个非负整数的非空列表,表示在给定时间内下了多少订单:
例如:
[106,25,134,99,85,12]也就是说,第一天订购了106个百吉饼,第二天订购了25个百吉饼,然后订购了134个百吉饼等。
您的任务是计算在所述期间售出了多少百吉饼。你应该假设在这段时间开始的时候,就没有剩下的百吉饼了。
这是密码-高尔夫,所以答案将以字节为单位得分,目标是更少的字节。
[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发布于 2022-02-01 02:31:51
,[->[-]>[-<+>]>++++++++++[-<++++++++++>],[>>>+<<<-<[->>+>>-<<<<[->>>+<<<]]>>>[-<<<+>>>]>[-<<<<<[->>>+<<<[->>>>+<<<<]]>>>>[-<<<<+>>>>]>]<<<]<<<]>>>>.首先输入数组的长度,然后输入值。遗憾的是,我找不到任何网站,支持输入和输出作为十进制数字。我得到的最佳结果是本站,您可以输入像\3\100\100\100这样的转义序列,但是输出是ASCII,所以需要将其转换为十进制。(请告诉我任何支持十进制评论的网站)
内存映射:arrayLength old fresh order output temp flag
,[- 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
>
]<<<
]<<<
]发布于 2022-01-19 21:57:13
发布于 2022-01-19 23:22:06
=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:A将o ( 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(~))把它加起来。
https://codegolf.stackexchange.com/questions/241373
复制相似问题