你走进洗手间,注意到卫生纸不见了!你突然想到有人偷了它。奇怪的是,你首先想知道的是小偷偷了多少卫生纸。
给你三个整数I ,R ,和G ,厕纸的细节,其中I 是内环的半径,R 是旋转的次数,G 是厚度。任务是返回/输出卫生纸的长度。
卫生纸可以看作是一个阿基米德螺旋,从坐标(I, 0) 开始,在逆时针方向旋转总共R 次数,每个间隙之间的距离为G 。
更正式地说,阿基米德螺旋在这里被定义为所有点的集合,这些点的位置随着时间的推移以恒定的速度逆时针方向移动,并且具有恒定的角速度。
由于潜在的精确性问题,如果您的答案通过了以下所有示例情况,当四舍五入到1 小数位时,您的答案将被判定正确。
在下图中,I = 5 、R = 3 、G = 4 和总长度为\approx 207.7 。
I R G -> answer rounded to 1 decimal place (note that the answer does not have to be rounded)
0 1 1 -> 3.4
5 3 4 -> 207.7
12 9 2 -> 1187.7
这是密码-高尔夫,所以以字节为单位的最短代码获胜!
发布于 2020-05-13 21:43:36
1#.2|@-/\1e3&((-:@[%:_1:)^[:i.1+[*0{])((*{:)+[*(1{])*1e3%~i.@#@[)]
这个可以打得更多,但我现在要把它收起来。
我不是采用解析的方法,而是使用复数算法将螺旋向下分解为每一个旋转的1000个直线段,然后对这些段进行求和。
我找到了-1的第500个根,然后继续自己乘以它,旋转它,得到下一个螺旋点的近似。
因为螺旋也向外移动,我们需要取新的矢量,将它归一化,将法向量乘以厚度的1/1000,然后把这个小的修正加到新的向量上。
从概念上讲,我们做的事情类似于用许多三角形的短边近似一个圆的圆周。
这个想法很简单,但它的高尔夫部分归结为无聊的簿记和论点解析,这是不值得深入研究的。从理论上讲,这种方法的实现可能要短得多。
发布于 2020-05-14 09:01:44
4°©*Ý*®/+nŽ›Ñ₄/*²n+tO®/
端口的@svavilPython的答案 (他们的修订没有复数),所以一定要投他们!
输入顺序为r,g,i
.
4° # Push 10**4: 10000
© # Store it in variable `®` (without popping)
* # Multiply it by the first (implicit) input `r`
Ý # Push a list in the range [0, 10000r]
* # Multiply each value by the second (implicit) input `g`
®/ # Divide each by `®`
+ # Add the third (implicit) input `i` to each value
n # Take the square of that
Ž›Ñ # Push compressed integer 39478
₄/ # Divide it by 1000: 39.478
* # Multiply it by each value
² # Push the second input `g` again
n # Square it
+ # And add it to each value as well
t # Take the square-root of each value
O # Sum everything together
®/ # And divide it by `®`
# (after which the result is output implicitly)
看这个05AB1E我的尖端(部分)如何压缩大整数?)来理解为什么Ž›Ñ
是39478
。
https://codegolf.stackexchange.com/questions/204700
复制相似问题