車輪のシステムで作られたロックを考えてみましょう。各ホイールにアルファベットのアルファベット26文字が順番にあり、各ホイールは'a'
で初期化されています。 1つのホイールを上に動かすと、そのホイールのディスプレイがアルファベットの次の文字に移動します。一方、ホイールを下に動かすと、アルファベットの前の文字にディスプレイが切り替わります。例えば:最小の移動回数でロックを開ける
['a'] -> UP -> ['b']
['b'] -> DOWN -> ['a']
...
['z'] -> UP -> ['a']
['a'] -> DOWN -> ['z']
一つだけフリックと同方向に車輪の任意の連続シーケンスを移動することができます。これは、サブシーケンスのすべてのホイールをそのように単一のモーションで移動するのと同じ効果を持ちます。たとえば、ターゲット文字列が'zzzzzzzzz'
の場合、'a'
から'z'
に変更すると、'a'
から'z'
にホイールのシーケンス全体が変更され、ターゲット文字列に到達してロックが開かれます。
ロックを開くための移動回数を最小限に抑えるにはどうすればよいですか?この問題の動的解決法はありますか?
Target string | # moves
______________________________ __________
1 | abcxyz | 5
2 | abcdefghijklmnopqrstuvwxyz | 25
3 | aaaaaaaaa | 0
4 | zzzzzzzzz | 1
5 | zzzzbzzzz | 3
ケース1、abcxyz
を標的:
aaa[aaa] -> DOWN -> aaazzz
aaa[zz]z -> DOWN -> aaayyz
aaa[y]yz -> DOWN -> aaaxyz
a[aa]xyz -> UP -> abbxyz
ab[b]xyz -> UP -> abcxyz
ケース5、zzzzbzzzz
を標的:
[aaaaaaaaa] -> DOWN -> zzzzzzzzz
zzzz[z]zzzz -> UP -> zzzzazzzz
zzzz[a]zzzz -> UP -> zzzzbzzzz
あなたの希望は明確ではありませんか?あなたはアルゴリズムをお探しですか? – BraveNewCurrency
はい。私はアルゴリズムが必要です。 – Leonardo
私はOPがすべての "a"から入力設定への最小移動回数を伝えるアルゴリズムを探していると思います。だからあなたの入力設定が "aac"であれば、 "aaa" - > "aab" - > "aac"で始めるので、2を返します。これは正しいですか、@LeonardoApolinário? – Engineero