我正在做foobar的挑战,我在第2级坚持这个问题!我没有得到问题所在。 请解释我的问题是什么。
作为Lambda指挥官的私人助理,你被分配了配置 LAMBCHOP世界末日装置的轴向齿轮的任务。它应该非常简单 - 只需添加齿轮即可创建适当的旋转比率。但问题是,由于LAMBCHOP的布局以及支撑它的梁和管道的复杂系统,支撑齿轮的销钉固定到位。
LAMBCHOP的工程师为您提供了一系列清单,用于识别沿各种支撑梁的桩柱位置。您需要在每个挂钉上放置一个齿轮(否则齿轮会与未占用的挂钉碰撞)。工程师拥有大量不同尺寸的齿轮,因此您可以选择任意尺寸的齿轮,从半径为1。您的目标是建立一个系统,其中最后一个齿轮以第一档的速率(每分钟转数或转速)的两倍旋转,无论方向如何。每个齿轮(最后一个齿轮除外)接触并转动下一个挂钉的齿轮。
给定一个名为pegs的不同正整数列表,表示每个peg沿支撑梁的位置,写一个函数答案(pegs),如果有解,则返回两个正整数的列表a和b表示为了达到上述目标,半径= a / b,以最简单的形式表示第一档半径的分子和分母。比率a / b应大于或等于1.并非所有支持配置都必须能够创建正确的旋转比率,因此如果任务不可能,则函数answer(pegs)应返回列表[-1, -1]。
例如,如果钉位于[4,30,50],则第一个齿轮的半径可以为12,第二个齿轮的半径可以为14,最后一个齿轮的半径为6。因此,最后一个齿轮的旋转速度是第一个齿轮的两倍。在这种情况下,钉子将是[4,30,50]并且答案(钉子)应该返回[12,1]。
列表挂钩将按升序排序,并且将包含至少2个且不超过20个不同的正整数,均在1和10000之间。 输入: (int list)pegs = [4,30,50] 输出: (int list)[12,1]
输入: (int list)pegs = [4,17,50] 输出: (int list)[-1,-1]
提前谢谢!希望有人能提出解释。
答案 0 :(得分:1)
我明白这个问题, 在它上面有钉子和齿轮,条件是第一个齿轮raduis应该是最后一个齿轮的两倍,这样最后一个齿轮的速度将是第一个齿轮的两倍。How the device looks like
所以我必须编程这个令人满意的2个条件 1 - 中间钉的拉力应始终大于1 2 - 半径(最后一个齿轮)应始终为半径(第一齿轮/ 2)此条件应满足
给定: n pegs,编号从1到n
让: d(n) - peg [n]和peg [n + 1]之间的距离 x - 第一档的大小 y - 最后一个档位的大小
约束: x = 2y
然后: 如果n是奇数,则y = d(n-1) - d(n-2)+ d(n-3) - ... - d(1)+ x 如果n是偶数,y = d(n-1) - d(n-2)+ d(n-3) - ... + d(1) - x
以下是此代码:
def answer(pegs):
maximum = pegs[1] - pegs[0] - 1
for x in xrange(1, maximum):
gear_sizes = [x]
for peg in xrange(1, len(pegs)):
gear_sizes.append(pegs[peg] - (pegs[peg-1] + gear_sizes[-1]))
if any(d <= 0 for d in gear_sizes):
continue
if x == 2 * gear_sizes[-1]:
return [x, 1]
if x+1 == 2 * gear_sizes[-1]:
return [(x * 3) + 1, 3]
if x+2 == 2 * gear_sizes[-1]:
return [(x * 3) + 2, 3]
return [-1, -1]