Numeri incatenati

Matematica Senza Frontiere – 2019

Se si scrivono tutti i numeri positivi in ordine crescente, senza lasciare spazi, si ottiene 012345678910111213141516…
Per conoscere la posizione di un numero, si conta quante cifre si sono dovute scrivere prima che il numero sia apparso per la prima volta in questa lista.
Ad esempio, la posizione di 7 è 7, la posizione di 23 è 2, la posizione di 111 è 12.
Determina la posizione dei seguenti numeri: 171, 321 e 2019.


Vedi la discussione

Considera l’algoritmo più semplice che risolve il problema

  1. Sia CHIAVE il numero da individuare
  2. Genera la sequenza di tutte le cifre dei numeri fino a CHIAVE
    CHIAVE compare sicuramente alla fine della sequenza
  3. Individua la prima occorrenza di CHIAVE nella sequenza, tramite la funzione index()
  4. Visualizza tutto
CHIAVE=2019                            # 7, 23, 111, 171, 321, 2019

sequenza=""
for n in range(CHIAVE+1):              # 1, 2, 3, ..., 2018, 2019
    sequenza += str(n)                 # 123...20182019

posizione=sequenza.index(str(CHIAVE))  # 6572

print("Chiave   :", CHIAVE   ) 
print("Sequenza :", sequenza )
print("Posizione:", posizione)

Si può migliorare?