限られた歯車で被駆動歯車の回転数を駆動歯車のⅹ倍にしたい。
歯車(ギア)、駆動歯車、被駆動歯車とはについては以下のhttps://le-www-live-s.legocdn.com/sc/media/files/support/mm のスクリーンショットを参考に
問題
制約条件の下で駆動歯車が1回転したとき被駆動歯車をx回転したい。あり得るxとその時の歯車の組み合わせを全て出力せよ(答えよ)。
制約条件
xは1より大きい整数。
使える歯車は歯数が12、歯数が20、歯数が28、歯数が36の4種類で、それぞれ2個ある。
歯車は全て互いに噛み合うように組む。
例)
歯数36の歯車を駆動歯車にして、被駆動歯車を歯数12のものにする。
するとx=36/12=3で駆動歯車が1回転したとき被駆動歯車は3回転する。
歯数36の歯車を2個、歯数12の歯車を2個使えば、x=(36/12)×(36/12)=9
これは36を駆動歯車にし、同軸に歯数12と歯数36の歯車をさし、それに噛んでいる歯数12の被駆動歯車の回転数が駆動歯車の9倍ということである。
次の画像は歯数36、歯数28、歯数12を2個で組んだ例である。
この問題を解く上で歯車に関する重要な性質がある。
※ギアBの回転数には影響はありませんが、回転方向は間に入るギアの数が偶数か奇数かで影響があります。コメントにてご指摘を頂いたので、追記しました。
要するにこの性質を数式にすると、
なので、直観的に理解できる。
実際にPythonで全探索した。
import itertools
gear=[36,36,28,28,20,20,12,12]
cmb={}
for z in itertools.permutations(gear,2):
rotation = z[0]/z[1]
if rotation.is_integer() and rotation>1:
cmb[f'{z[0]}/{z[1]}'] = rotation
'''
8P3は約分により、8P2の回転数パターンと変わらない。
for z in itertools.permutatinos(gear,3):
rotation = (z[0]/z[1])*(z[1]/z[2])
if rotation.is_integer() and rotation>1:
cmb[f'({z[0]}/{z[1]})×({z[1]}/{z[2]})'] = rotation
'''
for z in itertools.permutations(gear,4):
rotation = (z[0]/z[1])*(z[2]/z[3])
#ギアを直列に繋いでも、得られる答えはギア2個と同じなので同軸に二つギアのパターンだけ
if rotation.is_integer() and rotation>1:
cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})'] = rotation
'''
8P5と8P4の結果は同じである。
直列に繋いだ場合は8P2と変わらない
'''
for z in itertools.permutations(gear,6):
#2つの軸に2つずつギアをいれるパターン以外は約分によって上のパターンと同じになる。
rotation = (z[0]/z[1])*(z[2]/z[3])*(z[4]/z[5])
if rotation.is_integer() and rotation>1:
cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})×({z[4]}/{z[5]})'] = rotation
'''
2つギアをつけれる軸は2個なので、8P6と変わらない
'''
for z in itertools.permutations(gear,8):
#2つギアを付けられる軸が3個
rotation = (z[0]/z[1])*(z[2]/z[3])*(z[4]/z[5])*(z[6]/z[7])
if rotation.is_integer() and rotation>1:
cmb[f'({z[0]}/{z[1]})×({z[2]}/{z[3]})×({z[4]}/{z[5]})×({z[6]}/{z[7]})'] = rotation
cmb
出力結果
{'36/12': 3.0,
'(36/20)×(20/12)': 3.0,
'(36/12)×(36/12)': 9.0,
'(36/12)×(28/28)': 3.0,
'(36/12)×(28/12)': 7.0,
'(36/12)×(20/20)': 3.0,
'(36/12)×(20/12)': 5.0,
'(28/28)×(36/12)': 3.0,
'(28/12)×(36/12)': 7.0,
'(20/20)×(36/12)': 3.0,
'(20/12)×(36/20)': 3.0,
'(20/12)×(36/12)': 5.0,
'(36/28)×(28/20)×(20/12)': 3.0,
'(36/20)×(28/28)×(20/12)': 3.0,
'(36/20)×(28/12)×(20/28)': 3.0,
'(36/20)×(20/12)×(36/12)': 9.0,
'(36/20)×(20/12)×(28/28)': 3.0,
'(36/20)×(20/12)×(28/12)': 7.0,
'(36/12)×(36/12)×(28/28)': 9.0,
'(36/12)×(36/12)×(20/20)': 9.0,
'(36/12)×(28/28)×(36/12)': 9.0,
'(36/12)×(28/28)×(20/20)': 3.0,
'(36/12)×(28/28)×(20/12)': 5.0,
'(36/12)×(28/12)×(36/28)': 9.0,
'(36/12)×(28/12)×(20/28)': 5.0,
'(36/12)×(28/12)×(20/20)': 7.0,
'(36/12)×(20/28)×(28/12)': 5.0,
'(36/12)×(20/20)×(36/12)': 9.0,
'(36/12)×(20/20)×(28/28)': 3.0,
'(36/12)×(20/20)×(28/12)': 7.0,
'(36/12)×(20/12)×(36/20)': 9.0,
'(36/12)×(20/12)×(28/28)': 5.0,
'(36/12)×(20/12)×(28/20)': 7.0,
'(28/28)×(36/20)×(20/12)': 3.0,
'(28/28)×(36/12)×(36/12)': 9.0,
'(28/28)×(36/12)×(20/20)': 3.0,
'(28/28)×(36/12)×(20/12)': 5.0,
'(28/28)×(20/20)×(36/12)': 3.0,
'(28/28)×(20/12)×(36/20)': 3.0,
'(28/28)×(20/12)×(36/12)': 5.0,
'(28/20)×(36/28)×(20/12)': 3.0,
'(28/20)×(20/28)×(36/12)': 3.0,
'(28/20)×(20/12)×(36/12)': 7.0,
'(28/12)×(36/20)×(20/28)': 3.0,
'(28/12)×(36/12)×(36/28)': 9.0,
'(28/12)×(36/12)×(20/28)': 5.0,
'(28/12)×(36/12)×(20/20)': 7.0,
'(28/12)×(20/28)×(36/20)': 3.0,
'(28/12)×(20/28)×(36/12)': 5.0,
'(28/12)×(20/20)×(36/12)': 7.0,
'(20/28)×(36/12)×(28/12)': 5.0,
'(20/28)×(28/20)×(36/12)': 3.0,
'(20/28)×(28/12)×(36/20)': 3.0,
'(20/28)×(28/12)×(36/12)': 5.0,
'(20/20)×(36/12)×(36/12)': 9.0,
'(20/20)×(36/12)×(28/28)': 3.0,
'(20/20)×(36/12)×(28/12)': 7.0,
'(20/20)×(28/28)×(36/12)': 3.0,
'(20/20)×(28/12)×(36/12)': 7.0,
'(20/12)×(36/20)×(36/12)': 9.0,
'(20/12)×(36/20)×(28/28)': 3.0,
'(20/12)×(36/20)×(28/12)': 7.0,
'(20/12)×(36/12)×(36/20)': 9.0,
'(20/12)×(36/12)×(28/28)': 5.0,
'(20/12)×(36/12)×(28/20)': 7.0,
'(20/12)×(28/28)×(36/20)': 3.0,
'(20/12)×(28/28)×(36/12)': 5.0,
'(20/12)×(28/20)×(36/12)': 7.0,
'(36/28)×(28/20)×(20/12)×(36/12)': 9.0,
'(36/20)×(28/28)×(20/12)×(36/12)': 9.0,
'(36/20)×(28/12)×(20/28)×(36/12)': 9.0,
'(36/20)×(20/12)×(36/12)×(28/28)': 9.0,
'(36/20)×(20/12)×(28/28)×(36/12)': 9.0,
'(36/20)×(20/12)×(28/12)×(36/28)': 9.0,
'(36/12)×(36/12)×(28/28)×(20/20)': 9.0,
'(36/12)×(36/12)×(28/20)×(20/28)': 9.0,
'(36/12)×(36/12)×(20/28)×(28/20)': 9.0,
'(36/12)×(36/12)×(20/20)×(28/28)': 9.0,
'(36/12)×(28/28)×(36/12)×(20/20)': 9.0,
'(36/12)×(28/28)×(20/20)×(36/12)': 9.0,
'(36/12)×(28/28)×(20/12)×(36/20)': 9.0,
'(36/12)×(28/20)×(36/28)×(20/12)': 9.0,
'(36/12)×(28/20)×(20/12)×(36/28)': 9.0,
'(36/12)×(28/12)×(36/28)×(20/20)': 9.0,
'(36/12)×(28/12)×(36/20)×(20/28)': 9.0,
'(36/12)×(28/12)×(20/28)×(36/20)': 9.0,
'(36/12)×(28/12)×(20/20)×(36/28)': 9.0,
'(36/12)×(20/28)×(36/20)×(28/12)': 9.0,
'(36/12)×(20/28)×(36/12)×(28/20)': 9.0,
'(36/12)×(20/28)×(28/12)×(36/20)': 9.0,
'(36/12)×(20/20)×(36/12)×(28/28)': 9.0,
'(36/12)×(20/20)×(28/28)×(36/12)': 9.0,
'(36/12)×(20/20)×(28/12)×(36/28)': 9.0,
'(36/12)×(20/12)×(36/28)×(28/20)': 9.0,
'(36/12)×(20/12)×(36/20)×(28/28)': 9.0,
'(36/12)×(20/12)×(28/28)×(36/20)': 9.0,
'(36/12)×(20/12)×(28/20)×(36/28)': 9.0,
'(28/28)×(36/20)×(20/12)×(36/12)': 9.0,
'(28/28)×(36/12)×(36/12)×(20/20)': 9.0,
'(28/28)×(36/12)×(20/20)×(36/12)': 9.0,
'(28/28)×(36/12)×(20/12)×(36/20)': 9.0,
'(28/28)×(20/20)×(36/12)×(36/12)': 9.0,
'(28/28)×(20/12)×(36/20)×(36/12)': 9.0,
'(28/28)×(20/12)×(36/12)×(36/20)': 9.0,
'(28/20)×(36/28)×(20/12)×(36/12)': 9.0,
'(28/20)×(36/12)×(36/28)×(20/12)': 9.0,
'(28/20)×(36/12)×(20/12)×(36/28)': 9.0,
'(28/20)×(20/28)×(36/12)×(36/12)': 9.0,
'(28/20)×(20/12)×(36/12)×(36/28)': 9.0,
'(28/12)×(36/20)×(20/28)×(36/12)': 9.0,
'(28/12)×(36/12)×(36/28)×(20/20)': 9.0,
'(28/12)×(36/12)×(36/20)×(20/28)': 9.0,
'(28/12)×(36/12)×(20/28)×(36/20)': 9.0,
'(28/12)×(36/12)×(20/20)×(36/28)': 9.0,
'(28/12)×(20/28)×(36/20)×(36/12)': 9.0,
'(28/12)×(20/28)×(36/12)×(36/20)': 9.0,
'(28/12)×(20/20)×(36/12)×(36/28)': 9.0,
'(20/28)×(36/12)×(36/20)×(28/12)': 9.0,
'(20/28)×(36/12)×(36/12)×(28/20)': 9.0,
'(20/28)×(36/12)×(28/12)×(36/20)': 9.0,
'(20/28)×(28/20)×(36/12)×(36/12)': 9.0,
'(20/28)×(28/12)×(36/20)×(36/12)': 9.0,
'(20/28)×(28/12)×(36/12)×(36/20)': 9.0,
'(20/20)×(36/12)×(36/12)×(28/28)': 9.0,
'(20/20)×(36/12)×(28/28)×(36/12)': 9.0,
'(20/20)×(36/12)×(28/12)×(36/28)': 9.0,
'(20/20)×(28/28)×(36/12)×(36/12)': 9.0,
'(20/20)×(28/12)×(36/12)×(36/28)': 9.0,
'(20/12)×(36/20)×(36/12)×(28/28)': 9.0,
'(20/12)×(36/20)×(28/28)×(36/12)': 9.0,
'(20/12)×(36/20)×(28/12)×(36/28)': 9.0,
'(20/12)×(36/12)×(36/28)×(28/20)': 9.0,
'(20/12)×(36/12)×(36/20)×(28/28)': 9.0,
'(20/12)×(36/12)×(28/28)×(36/20)': 9.0,
'(20/12)×(36/12)×(28/20)×(36/28)': 9.0,
'(20/12)×(28/28)×(36/20)×(36/12)': 9.0,
'(20/12)×(28/28)×(36/12)×(36/20)': 9.0,
'(20/12)×(28/20)×(36/12)×(36/28)': 9.0}
8個のギアを使い、3つの軸各々に対して2つのギアを入れる制約条件を満たすパターンは全て被駆動ギアの回転数が9倍になる結果となった。
また、xの取りうる値は3,5,7,9となる。