C’est pas particulièrement difficile d’avoir une formule généralisé (moche).
La plupart des lignes vont être composés exclusivement de nombres qui ont la même taille et il est alors facile de déterminer combien de nombres tiennent dans une ligne. On défini F(n,k) le nombre de nombres de taille n qui tiennent dans une ligne de k caractères. m nombres de taille n prennent m×(n+1)−1 caractères (en comptant les espaces), donc F(n,k) est le plus grand m entier qui satisfait m×(n+1)−1<=k. Donc F(n,k)=⌊n+1k+1⌋.
On défini maintenant G(n,k,m) le nombre de lignes qu’il faut pour écrire m nombres de taille n sur des lignes de longueur k. G(n,k,m)=⌈F(n,k)m⌉. Évidemment, ce n’est valide que si n<=k puisque sinon F(n,k)=0.
Pour gérer les lignes mixtes, on va définir R(n,k,m) qui est le nombre de caractères restant sur la dernière ligne lorsque l’on affiche m nombres de taille n sur des lignes de longueur k, en ne comptant pas l’espace qu’il faut mettre pour séparer les nombres de longueur n et les suivants (ceux de longueur n+1). R(n,k,m)=k−(mmodF(n,k))×(n+1). En utilisant ça, on peut trouver le nombre de nombre de taille n+1 qui peuvent tenir sur la dernière ligne (potentiellement incomplète) des nombres de taille n: F(n+1,R(n,k,m)).
Il nous faut encore une dernière fonction pour déterminer combien de nombre de taille n restent à imprimer une fois que l’on a utilisé ce qu’il reste de la ligne qui fini les nombres de taille n−1, en supposant qu’on veuille tous les afficher. M(1,k)=9 et M(n,k)=10n−10n−1−F(n,R(n−1,k,M(n−1))).
Au bout de x secondes et sur des feuilles de largeur 80 et hauteur 60, on a donc imprimé ⎢⎢⎢⎢⎡60(∑n=1⌊log10x⌋G(n,80,M(n,80)))+G(⌈log10x⌉,80,M(⌈log10x⌉,80)−10⌈log10x⌉+x+1)×(⌈log10x⌉−⌊log10x⌋)⎥⎥⎥⎥⎤ feuilles.
Je vois pas ce qu’il y a de si compliqué
J’ai comparé le résultat de la formule avec celle d’une fonction vraiment simple pour toutes les valeurs entre 2 et 2000 et ça colle, donc la formule est probablement correcte (mis à part pour 1 qui appelle M(0,80) qui n’est pas défini).