Ho un contatore. È un piccolo dispositivo che assomiglia a questo:
Il display passa da 0000a 9999. Ha un piccolo pulsante in alto che aumenta il conteggio di 1 e una piccola manopola a destra il cui scopo è di ripristinare il contatore a 0.
Ora, la cosa sulla piccola manopola è che se la giri all'indietro, puoi farla aumentare qualsiasi cifra desiderata una volta che la giri di nuovo in avanti. Quindi, se premo il pulsante del contatore 10 volte in modo che il contatore mostri 0010, posso quindi ruotare la manopola all'indietro fino a quando sento un piccolo clic, quindi ruotarlo di nuovo in avanti e farlo andare dritto 0090.
Tuttavia, la manopola aumenterà sempre tutte le occorrenze della stessa cifra di 1 ogni volta che spinge i numeri in avanti. Quindi, se il contatore mostra 6060, puoi solo farlo aumentare a 7070, non a 6070o 7060. Inoltre, la manopola ruoterà 9su 0senza trasportare, quindi 0990avanzerà al 0000posto di 1000o 1100.
Voglio sapere il modo più efficiente per impostare il contatore su un certo numero. Il tuo compito è scrivere un programma o una funzione che determinerà la sequenza più breve di pressioni di pulsanti e avanzamenti della manopola necessari per farlo.
Il programma prenderà come input un numero di 4 cifre da 0000a 9999e restituirà una serie di passaggi nel seguente formato:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
Dove Csta per "premere il pulsante contatore" e qualsiasi cifra Dda 0 a 9 sta per "utilizzare la manopola per far avanzare tutte le occorrenze di D1".
Il programma deve produrre una sequenza valida di passaggi per tutte le possibili combinazioni di quattro cifre e verrà assegnato un punteggio in base al numero totale di passaggi richiesti per tutti i 10.000 casi. In caso di pareggio (molto probabilmente quando viene trovato l'algoritmo ottimale), vincerà il codice più breve.

0010in0020quel caso? Oppure puoi solo ruotare la manopola all'indietro? Inoltre, ogni "D" conta come "D" numero di avanzamenti della manopola (ad esempio,1234567significa ruotare la manopola 1 volta, quindi 2 volte, quindi 3 volte, e così via)? Oppure significa solo ogni giro di manopola separato (per esempio, significa1234567solo ruotare la manopola 7 volte)?