Counterstring является своего рода тестовых данных самоописываемых , который используется в тестировании программного обеспечения. Не уверен, что это действительно изобрел Джеймс Бах , но я знаю это оттуда.
Идея заключается в следующем: тестовые данные содержат много звездочек ( *
). Число перед звездочкой говорит о том, как долго в этот момент находятся тестовые данные. Если вам нужно знать позицию в тестовых данных, которая не является звездочкой, найдите последнюю звездочку, посмотрите на число перед и добавьте число цифр, которые следуют.
Последовательность начинается так:
2*4*6*8*11*14*17*20*23*
^
Как видите, отмеченная звездочка находится в позиции 14.
Если файл обрезается следующим образом
[...]2045*20
тогда вы можете определить, что где-то существует ограничение в 2047 символов (2045, где звездочка плюс 2 для 2
и 0
).
Ваша задача - создать самую короткую (это код-гольф ) программу, которая выводит (std :: out или file или что-то еще) произвольную длинную тестовую строку этого формата. Длина в символах указана в качестве аргумента. Программа должна поддерживать тестовые данные объемом до 2 ГБ (входное значение 2147483647 символов).
«Опасные» позиции в файле объемом 2 ГБ:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Это должно ответить на вопрос @Leaky Nun , если будет принято решение между 995 * 999 * и 995 * 1000 * или аналогичным: нет.
Конец файла размером 2 ГБ с входным значением 2147483647:
2147483640*2147483
995*999*
и 995*1000*
или что - нибудь подобное?