Una contracadena es una especie de datos de prueba autodescriptivos que se utilizan en las pruebas de software. No estoy seguro de que fuera realmente inventado por James Bach , pero lo sé a partir de ahí.
La idea es la siguiente: los datos de prueba contienen muchos asteriscos ( *
). El número delante del asterisco le indica cuánto tiempo duran los datos de la prueba en ese punto. Si necesita conocer una posición en los datos de prueba que no es un asterisco, busque el último asterisco, mire el número anterior y agregue el número de dígitos que siguen.
La secuencia comienza así:
2*4*6*8*11*14*17*20*23*
^
Como puede ver, el asterisco marcado está en la posición 14.
Si un archivo se trunca de la siguiente manera
[...]2045*20
entonces puede deducir que hay un límite de 2047 caracteres en algún lugar (2045 donde el asterisco es más 2 para 2
y 0
).
Es su tarea crear el programa más corto (esto es code-golf ) que genera (std :: out o file o lo que sea) una cadena de prueba larga arbitraria de ese formato. La longitud en caracteres se da como argumento. El programa admitirá hasta 2 GB de datos de prueba (valor de entrada 2147483647 caracteres).
Posiciones "peligrosas" en el archivo de 2 GB:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Esto debería responder a la pregunta de @Leaky Nun si hay que tomar una decisión entre 995 * 999 * y 995 * 1000 * o similar: no.
El final del archivo de 2 GB con el valor de entrada 2147483647 es:
2147483640*2147483
995*999*
y 995*1000*
nada de eso?