Uma contraparte é algum tipo de dado de teste autoexplicativo usado nos testes de software. Não tenho certeza se foi realmente inventado por James Bach , mas eu sei disso a partir daí.
A ideia é a seguinte: os dados de teste contêm muitos asteriscos ( *
). O número na frente do asterisco informa quanto tempo os dados do teste estão nesse ponto. Se você precisar conhecer uma posição nos dados de teste que não é um asterisco, localize o último asterisco, verifique o número anterior e adicione o número de dígitos a seguir.
A sequência começa assim:
2*4*6*8*11*14*17*20*23*
^
Como você pode ver, o asterisco marcado está na posição 14.
Se um arquivo estiver truncado da seguinte maneira
[...]2045*20
então você pode derivar que há um limite de 2047 caracteres em algum lugar (2045 onde o asterisco é mais 2 para 2
e 0
).
É sua tarefa criar o programa mais curto (este é o código-golfe ) que gera (std :: out ou arquivo ou qualquer outra coisa) uma sequência de testes longa arbitrária desse formato. O comprimento em caracteres é dado como argumento. O programa deve suportar até 2 GB de dados de teste (valor de entrada 2147483647 caracteres).
Posições "perigosas" no arquivo de 2 GB:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Isso deve responder à pergunta de @Leaky Nun se houver uma decisão a tomar entre 995 * 999 * e 995 * 1000 * ou similar: não.
O final do arquivo de 2 GB com o valor de entrada 2147483647 é:
2147483640*2147483
995*999*
e 995*1000*
ou algo assim?