Eu tenho um balcão. É um pequeno dispositivo que se parece com isso:
O visor passa de 0000
para 9999
. Possui um pequeno botão na parte superior que aumenta a contagem em 1 e um pequeno botão à direita, cujo objetivo é redefinir o contador de volta para 0.
Agora, o importante sobre o pequeno botão é que, se você o girar para trás, poderá aumentar qualquer dígito que desejar, depois que o girar novamente. Portanto, se eu pressionar o botão do contador 10 vezes para que o contador apareça 0010
, posso girar o botão para trás até ouvir um pequeno clique, depois girá-lo para frente novamente e fazê-lo ir direto para 0090
.
Porém, o botão sempre aumentará todas as ocorrências do mesmo dígito em 1 sempre que empurrar os números para frente. Portanto, se o contador aparecer 6060
, você só poderá aumentar para7070
, não para 6070
ou 7060
. Além disso, o botão vai rolar 9
s sobre a 0
sem proceder, assim 0990
irá avançar para 0000
, em vez de 1000
ou 1100
.
Quero saber a maneira mais eficiente de definir o contador para um determinado número. Sua tarefa é escrever um programa ou função que determine a menor seqüência de pressionamentos de botões e avanços dos botões necessários para fazê-lo.
Seu programa terá como entrada um número de 4 dígitos de 0000
a 9999
e retornará uma série de etapas no seguinte formato:
> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678
Onde C
significa "pressione o botão do contador" e qualquer dígito D
de 0 a 9 significa "use o botão para avançar todas as ocorrências de D
1".
Seu programa deve produzir uma sequência válida de etapas para todas as combinações possíveis de quatro dígitos e será pontuado pelo número total de etapas necessárias para todos os 10.000 casos. No caso de empate (provavelmente quando o algoritmo ideal for encontrado), o código mais curto vencerá.
0010
em0020
nesse caso? Ou você só pode girar o botão para trás? E também, cada "D" conta como número "D" de avanços do botão (por exemplo,1234567
significa girar o botão 1 vez, depois 2 vezes, depois 3 vezes, etc.)? Ou significa apenas cada giro do botão separado (por exemplo, significa1234567
apenas girar o botão 7 vezes)?