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

0010に0020、その場合には?または、ノブを後ろに回すだけですか?また、各「D」はノブの「D」の前進数としてカウントされますか(たとえば、1234567ノブを1回、2回、3回などと回します)。それとも、ノブを個別に回すことを意味しているだけ1234567ですか(たとえば、ノブを7回回すだけです)。