Ich habe einen Zähler. Es ist ein kleines Gerät, das so aussieht:
Die Anzeige geht von 0000
bis 9999
. Oben befindet sich ein kleiner Druckknopf, der die Anzahl um 1 erhöht, und rechts ein kleiner Knopf, mit dem der Zähler auf 0 zurückgesetzt werden soll.
Das Besondere an dem kleinen Knopf ist, dass Sie ihn, wenn Sie ihn rückwärts drehen, beliebig vergrößern können, sobald Sie ihn wieder vorwärts drehen. Wenn ich also den Zählerknopf 10 Mal drücke, damit der Zähler angezeigt wird 0010
, kann ich den Knopf nach hinten drehen, bis ich ein winziges Klicken höre, ihn dann wieder nach vorne drehen und ihn direkt zu bewegen 0090
.
Der Knopf erhöht jedoch jedes Mal, wenn er Zahlen nach vorne drückt, alle Vorkommen derselben Ziffer um 1. Wenn der Zähler angezeigt wird 6060
, können Sie ihn nur auf 7070
, nicht auf 6070
oder erhöhen 7060
. Außerdem wird der Knopf rollen 9
s über 0
ohne zu tragen, so 0990
wird Voraus 0000
statt 1000
oder 1100
.
Ich möchte wissen, wie der Zähler am effizientesten auf eine bestimmte Zahl eingestellt werden kann. Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die die kürzeste Folge von Tastendrücken und Knopfbewegungen bestimmt, die dazu erforderlich sind.
Ihr Programm nimmt eine 4-stellige Zahl von 0000
bis als Eingabe 9999
und gibt eine Reihe von Schritten im folgenden Format zurück:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
Wobei C
für "Druckknopf drücken" steht und jede Ziffer D
von 0 bis 9 für "Verwenden Sie den Knopf, um alle Vorkommen D
um 1 vorzuschieben" steht.
Ihr Programm muss eine gültige Abfolge von Schritten für alle möglichen vierstelligen Kombinationen erstellen und wird anhand der Gesamtzahl der Schritte bewertet, die für alle 10.000 Fälle erforderlich sind. Bei einem Gleichstand (höchstwahrscheinlich, wenn der optimale Algorithmus gefunden wurde) gewinnt der kürzere Code.
0010
in0020
in diesem Fall? Oder können Sie den Knopf nur rückwärts drehen? Und zählt jedes "D" als "D" Anzahl der Vorschübe des Knopfes (bedeutet zum Beispiel,1234567
den Knopf 1 Mal, dann 2 Mal, dann 3 Mal usw. zu drehen)? Oder bedeutet es nur jede einzelne Knopfdrehung (bedeutet zum Beispiel1234567
nur, den Knopf 7 Mal zu drehen)?