首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谁拿走了我的卫生纸?

谁拿走了我的卫生纸?
EN

Code Golf用户
提问于 2020-05-13 16:37:16
回答 3查看 2K关注 0票数 13

你走进洗手间,注意到卫生纸不见了!你突然想到有人偷了它。奇怪的是,你首先想知道的是小偷偷了多少卫生纸。

任务

给你三个整数I R ,和G ,厕纸的细节,其中I 是内环的半径,R 是旋转的次数,G 是厚度。任务是返回/输出卫生纸的长度。

卫生纸可以看作是一个阿基米德螺旋,从坐标(I, 0) 开始,在逆时针方向旋转总共R 次数,每个间隙之间的距离为G

更正式地说,阿基米德螺旋在这里被定义为所有点的集合,这些点的位置随着时间的推移以恒定的速度逆时针方向移动,并且具有恒定的角速度

由于潜在的精确性问题,如果您的答案通过了以下所有示例情况,当四舍五入到1 小数位时,您的答案将被判定正确。

在下图中,I = 5 R = 3 G = 4 和总长度为\approx 207.7

测试用例

代码语言:javascript
运行
复制
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

这是密码-高尔夫,所以以字节为单位的最短代码获胜!

EN

回答 3

Code Golf用户

发布于 2020-05-13 21:43:36

J,66字节

代码语言:javascript
运行
复制
1#.2|@-/\1e3&((-:@[%:_1:)^[:i.1+[*0{])((*{:)+[*(1{])*1e3%~i.@#@[)]

在网上试试!

这个可以打得更多,但我现在要把它收起来。

我不是采用解析的方法,而是使用复数算法将螺旋向下分解为每一个旋转的1000个直线段,然后对这些段进行求和。

我找到了-1的第500个根,然后继续自己乘以它,旋转它,得到下一个螺旋点的近似。

因为螺旋也向外移动,我们需要取新的矢量,将它归一化,将法向量乘以厚度的1/1000,然后把这个小的修正加到新的向量上。

从概念上讲,我们做的事情类似于用许多三角形的短边近似一个圆的圆周。

这个想法很简单,但它的高尔夫部分归结为无聊的簿记和论点解析,这是不值得深入研究的。从理论上讲,这种方法的实现可能要短得多。

票数 8
EN

Code Golf用户

发布于 2020-05-14 09:01:44

05AB1E,23 字节数

代码语言:javascript
运行
复制
4°©*Ý*®/+nŽ›Ñ₄/*²n+tO®/

端口的@svavilPython的答案 (他们的修订没有复数),所以一定要投他们!

输入顺序为r,g,i.

在网上试试验证所有测试用例.

解释:

代码语言:javascript
运行
复制
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

票数 1
EN

Code Golf用户

发布于 2020-05-14 12:17:55

SageMath,70字节

代码语言:javascript
运行
复制
lambda I,R,G:N(G/2/pi*(sqrt(1+x^2)).integral(x,2*pi*I/G,2*pi*(I/G+R)))

在网上试试!

How

使用螺旋长度公式:

L=\frac{G}{2\pi} \int_{\frac{2\pi I}{G}}^{\frac{2\pi(I+GR)}{G}}\sqrt{1+\theta^2}d\theta

来自外科手术痰's Python回答

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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