Code 2021的出现事件的一部分。有关详细信息,请参阅链接的元帖子。
与天2020第13天相关,第2部分。
从海港(你所在的地方)到机场(你需要去的地方)有班车服务。每辆巴士都有一个身份证号码,显示巴士往机场的班次,更准确地说,是该巴士连续两班离开机场之间的分钟数,每辆巴士在过去某一时间以零的时间在同一时间出发。
穿梭巴士公司正在举办一场竞赛:任何能找到最早时间戳的人都可以得到一枚金币,这样的话,第一辆巴士的ID就会在那个时候离开,随后的每一辆上市的巴士ID都会在随后的那一分钟离开。
总线ID列表如下所示:
7,13,x,x,59,x,31,19x的意思是“不关心”。因此,这里的目标是找到时间戳t,其中:
t发车。t+1发车。t+4发车。t+6发车。t+7发车。这个列表的最早时间戳t是1068781。
然而,你怀疑公司不想发行任何金币,因为有时清单看起来是这样的:
7,7这显然是不可能的--7路公共汽车不能在t和t+1出发去任何t。
给定公共汽车身份证的列表,确定你是否能赚到一枚金币。
输入:总线ID列表,可能有一些漏洞。公共汽车ID总是肯定的。一个洞可以用任何不是正整数的值来表示(例如,0,-1,"x");或者,您可以用1来表示洞,因为它们具有相同的效果( 1总是可以去任何地方)。保证列表是非空的。
输出:一个表示答案的值。你可以选择
适用标准的密码-高尔夫规则。以字节为单位的最短代码获胜。
测试用例对列表中的漏洞使用0。
特鲁西:
[7, 13, 0, 0, 59, 0, 31, 19]
[1, 2, 3, 4, 5]
[0]
[999]
[1, 3, 5, 7, 9, 11, 13, 15]法尔西:
[7, 7]
[3, 1, 4, 1, 5, 9, 2]
[4, 0, 4]发布于 2021-12-24 01:24:21
发布于 2021-12-24 06:24:55
发布于 2021-12-24 01:51:00
a=>eval("for(i=1+a.join``;a.some(n=>++x%n,x=i--)*i;);i")用0表示一个洞。对大多数测试病例来说太慢了。
简单的想法:
for t := (large enough number) domnto 0 do
if (t is valid) then return true
return false虽然\prod a_i会足够大。计算产品的时间比简单地将它们连接起来要长一些。
a=>a.some(o=(t,i)=>(g=j=>j&&(t%j?o:o[j]??=i%j)-i%j|g(j-1))(t))用洞做洞。更快的版本。
a=>a.some((x,i)=>a.some(g=(y,j,_,z=x)=>z%y?g(z%y,j,a,y):(i-j)%y))用洞做洞。多项式时间复杂度的快速版本。
https://codegolf.stackexchange.com/questions/240105
复制相似问题