Une contre - chaîne est une sorte de données de test auto-descriptives utilisées dans les tests de logiciels. Je ne suis pas sûr qu'il ait été inventé par James Bach , mais je le sais de là.
L'idée est la suivante: les données de test contiennent de nombreux astérisques ( *
). Le nombre devant l'astérisque vous indique la durée des données de test à ce stade. Si vous avez besoin de connaître une position dans les données de test qui n'est pas un astérisque, recherchez le dernier astérisque, regardez le numéro avant et ajoutez le nombre de chiffres qui suivent.
La séquence commence comme ceci:
2*4*6*8*11*14*17*20*23*
^
Comme vous pouvez le voir, l'astérisque marqué est en position 14.
Si un fichier se trouve tronqué comme suit
[...]2045*20
vous pouvez alors déduire qu'il y a une limite de 2047 caractères quelque part (2045 où l'astérisque est plus 2 pour 2
et 0
).
C'est votre tâche de créer le programme le plus court (c'est le code-golf ) qui génère (std :: out ou fichier ou autre) une longue chaîne de test arbitraire de ce format. La longueur en caractères est donnée en argument. Le programme doit prendre en charge jusqu'à 2 Go de données de test (valeur d'entrée 2147483647 caractères).
Positions "dangereuses" dans le fichier de 2 Go:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Cela devrait répondre à la question de @Leaky Nun s'il y a une décision à prendre entre 995 * 999 * et 995 * 1000 * ou similaire: non.
La fin du fichier de 2 Go avec la valeur d'entrée 2147483647 est:
2147483640*2147483
995*999*
et 995*1000*
ou quelque chose comme ça?