平衡技术
跷跷板(据说来自法国的“ci-ça”,意思是“ this-that”)构成了游乐场设备的三位一体的三分之一,以及类似的无处不在的滑梯和秋千。当且仅当两边的力矩之和相等时,跷跷板才能达到完美的平衡。因此,可以通过在力矩总和较低的一侧增加一定数量的重量来平衡跷跷板。实现这一目标是您应对这一挑战的目标。
挑战
您面临的挑战是将跷跷板描述为输入并再次输出,并在跷跷板的一端增加重量以使其平衡。
输入值
您的程序必须采用任何合理格式的ASCII跷跷板,例如:
100 100
-------------------
^
第一行包含两个数字,每个数字代表跷跷板上的重量。每侧恰好有一个重物,每个重物都作用在木板一侧的末端。权重保证为整数,并始终与其相应的木板末端对齐。这些数字永远不会与支点(^
)重叠。
第二行代表跷跷板的“木板”。每个破折号(-
)代表彼此的破折号长度相等,唯一的例外是破折号直接位于支点(^
)上方,没有长度。
第三行代表跷跷板的支点。该支点由唯一的字符而不是该行上的空格(抑扬符('^'))标记。支点可以在有效输入中沿木板长度放置的任何位置,只要保留足够的空间,以使表示重量的数字在输入或输出中都不会与支点重叠。
确保输入有三行,并且在构成跷跷板的字符之前或之后没有空格(当然,第三行除外)。
输出量
为了输出,应该在标准输出上打印相同的跷跷板图,但是要用一个(只有一个)砝码替换为较大的砝码,以平衡跷跷板。确保仅使用整数就可以使输入成为可能。因此,显示的重量必须没有小数点或任何其他类似的符号。如果您的语言不使用stdout,则应该就输出达成社区/元共识。尾随换行符很好,但是对描述格式的任何其他更改可能都不行。
范例
测试输入和相应的输出
输入1
12 22
--------------------
^
输出1
12 26
--------------------
^
输入2
42 42
-----------
^
输出2
42 42
-----------
^
输入3
3 16
----------------
^
输出3
14 16
----------------
^
输入4
1 56
-------------------
^
输出4
196 56
-------------------
^
参考实施-Python 3
# Takes a list of strings as input
def balance_seesaw(lines):
weights = [int(w.strip()) for w in lines[0].split()]
length = len(lines[1])
pivot = lines[2].find("^")
left_length = pivot
right_length = length - 1 - pivot
left_torque = weights[0] * left_length
right_torque = weights[1] * right_length
if left_torque > right_torque:
weights[1] = left_torque // right_length
elif right_torque > left_torque:
weights[0] = right_torque // left_length
weights = [str(w) for w in weights]
string_gap = " " * (length - sum(len(w) for w in weights))
lines[0] = weights[0] + string_gap + weights[1]
print("\n".join(lines))
balance_seesaw(["1 56",
"-------------------",
" ^ "])
规则
这是code-golf,因此最短的代码获胜数以字节为单位。检查meta是否在您的语言中计数字节不方便。
适用标准规则/漏洞。
输入必须采用合理的格式。适当格式的非详尽列表如下:
- 由换行符分隔的行的单个字符串
- 字符串列表,每个字符串代表一行
- 二维字符数组或矩阵
相关挑战
- 平衡跷跷板上的一组重量 -samgak建议2015年8月