カウンターがあります。これは次のような小さなデバイスです。
表示がから0000
に変わり9999
ます。上部に小さなプッシュボタンがあり、カウントを1増やします。右側に小さなノブがあり、その目的はカウンターを0にリセットすることです。
さて、小さなつまみの重要な点は、後ろに回すと、もう一度前に回すと、必要な桁を増やすことができるということです。カウンターボタンを10回押してカウンターが表示されたら0010
、小さなクリック音が聞こえるまでノブを後ろに回してから、もう一度前に回してまっすぐにし0090
ます。
ただし、つまみは、数字を進めるたびに、常に同じ数字のすべての出現を1ずつ増やします。カウンタが示すのであれば6060
、あなたはそれがに増加させることができ7070
ないように、6070
または7060
。また、ノブはキャリーせずに9
s にロールオーバーする0
ため、またはの代わりに0990
進みます。0000
1000
1100
カウンターを特定の数に設定する最も効率的な方法を知りたいです。あなたの仕事は、そうするために必要なボタン押しとノブ前進の最短シーケンスを決定するプログラムまたは関数を書くことです。
プログラムは、入力としてから0000
までの4桁の数値を受け取り9999
、一連のステップを次の形式で返します。
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
ここでC
、「カウンターボタンを押す」をD
表し、0から9までの数字は、「ノブを使用してすべての発生をD
1つ進める」ことを表します。
プログラムは、考えられるすべての4桁の組み合わせに対して有効なステップのシーケンスを生成する必要があり、10,000ケースすべてに必要なステップの合計数によってスコアが付けられます。引き分けの場合(最適なアルゴリズムが見つかる可能性が高い)、短いコードが優先されます。
0010
に0020
、その場合には?または、ノブを後ろに回すだけですか?また、各「D」はノブの「D」の前進数としてカウントされますか(たとえば、1234567
ノブを1回、2回、3回などと回します)。それとも、ノブを個別に回すことを意味しているだけ1234567
ですか(たとえば、ノブを7回回すだけです)。