Dopo 137 parole di chiacchiere inutili che occupano ben 793 battute, finalmente arriva il vero problema "Dati N1,N2 (numeri di pagina iniziale e finale dell'intervallo rovinato), determinare il numero dell'ultima pagina che correggerà Alice.", ma NON ARRIVA l'informazione essenziale per contare il numero di cifre da scrivere: che i numeri di pagina sono ovviamente in base dieci e senza né salti né inserti.
Avrei tanto voluto vedere una foto del libro in cui si leggesse in testa al gruppo di esercizi e in testa alla pagina di quale argomento si tratti: ho il vago sospetto che sia su un testo di Informatica o di Sistemi, cioè che si chieda una soluzione algoritmica e non algebrica.
------------------------------
Il numero L (come lunghezza) di cifre per rappresentare un naturale N con un numerale in base B è
* L(N) = 1 + floor(log(B, N))
dove "floor(x)" è la parte intera inferiore di x, funzione discontinua.
---------------
Quindi il primo calcolo della procedura risolutiva
* tutteLeCifre = T(N1, N2) = Σ [k = N1, N2] (1 + floor(log(10, k))) =
= N2 - N1 + 1 + Σ [k = N1, N2] (floor(log(10, k)))
non essendo lecito applicare la proprietà "somma di logaritmi" non si può ridurre a logaritmi di fattoriali; infatti
* floor(3.7) = 3
* floor(5.6) = 5
* floor(3.7 + 5.6) = 9 > 3 + 5
e pertanto l'approccio algoritmico mi sembra obbligatorio.
------------------------------
#
def quanteCifreT(a, b):
T = 0
for k in xrange(a, b + 1): T += len(str(k))
return T
#
>>> quanteCifreT(45, 1234)
3750
#
------------------------------
Per il secondo calcolo della procedura risolutiva si dimezza T(N1, N2)
* m = T(N1, N2) div 2 = 1875
e si cercano ("par tâtonnements") il numero di pagina n tale che
* T(N1, n) <= T(N1, N2) div 2 < T(N1, n + 1)
#
>>> quanteCifreT(45, 666)
1811
#
* (1875 - 1811)/3 = 21.(3)
* 666 + 21 = 687
#
>>> quanteCifreT(45, 687)
1874
>>> quanteCifreT(45, 688)
1877
#
---------------
Quindi il risultato
* T(45, 687) = 1874 <= 1875 < 1877 = T(45, 688)
autorizza la
CONCLUSIONE
«il numero dell'ultima pagina che correggerà Alice» è 687