首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合锁计数器

组合锁计数器
EN

Code Golf用户
提问于 2015-10-29 17:19:16
回答 1查看 655关注 0票数 19

场景是:

彼得和他的伙伴布赖恩在健身房,而布莱恩突然急需他的吸入器。布赖恩设法告诉彼得的密码,他的组合锁,然后他崩溃在地板上。

当彼得来到布赖恩的储物柜,看到指示灯指向什么的时候,斯图伏击了他,并在他的脸上喷了一大罐胡椒喷雾,从而使彼得失明。

彼得现在必须设法打开锁,而不看它。他开始把刻度盘向右转,一边数着数字,一边经过。然后,在正确的数字开始把刻度盘向左转,还在计数,最后把它转到右边,直到锁打开。

的挑战:

编写一个函数/程序,该函数/程序接受两个输入,来自Brian的组合和指示器位置。输出彼得必须数数的数字。

规则:

  • 组合和指示位置必须是单独的参数。
  • 输入可以来自命令提示符,也可以作为函数参数。
  • 输出必须打印到屏幕/以其他方式显示(而不是文件)
  • 假设起始位置与第一个数字不相同,并且组合中的所有三个数字都是唯一的。
  • 这是下图所示的锁,有可能的数字: 0-39。

Instructions:

要打开下面的锁,您需要遵循一组说明:

  1. 你一定知道你的密码。假设现在是(38,16,22)。
  2. 将刻度盘向右转3次(通过起始数3次),然后当第一个数字(38)与指示器对齐时停止。
  3. 将刻度盘1向左转,通过第一个号码,当第二个数字(16)与指示器齐时停止。
  4. 将刻度盘向右转,当第三个数字(22)与指示器齐时停止。
  5. 把锁拉下来

示例:

代码语言:javascript
复制
Input
38 16 22
33  

Output
33  32  31  30  29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0  39  38  39   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24  23  22

适用标准的高尔夫球规则。

稍后发布的解决方案如果短于丹尼斯的回答,仍有可能获胜。

EN

回答 1

Code Golf用户

发布于 2017-08-17 06:53:36

Python 2,262字节

感觉好长啊。但是也有很多事情在进行。

代码语言:javascript
复制
def f(l,s):
 r=lambda a,b,c=1:range(a,b,c)
 a=r(39,l[0],-1);b=r(l[0],-1,-1)
 c=r(l[1],l[2]-1,-1)if l[2]<l[1]else r(l[1],-1,-1);c.extend(r(39,l[2]-1,-1))
 return'  '.join(`x`for x in sum([r(s,-1,-1),a,b,a,b,a,b,r(39,l[0],-1),r(l[0],40),r(0,40),r(0,l[1]+1),c],[]))

在网上试试!

我认为我可以更好地连接在我的最后一行,但我仍然是新的代码高尔夫,我不知道如何处理这个列表组合在短期内。

有什么改进的办法吗?

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

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

复制
相关文章

相似问题

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