Контрастна струна - це якийсь опис тестових даних, що самоописується, що використовується при тестуванні програмного забезпечення. Не впевнений, що його насправді винайшов Джеймс Бах , але я знаю це звідти.
Ідея така: дані тесту містять багато зірочок ( *
). Цифра перед зірочкою вказує на те, як довго тривають дані тесту в цій точці. Якщо вам потрібно знати позицію в тестових даних, яка не є зірочкою, знайдіть останню зірочку, подивіться на номер раніше і додайте кількість цифр, які слідують за цим.
Послідовність починається так:
2*4*6*8*11*14*17*20*23*
^
Як бачите, позначена зірочка знаходиться в положенні 14.
Якщо файл має бути усічений наступним чином
[...]2045*20
то ви можете встановити, що десь є межа 2047 символів (2045, де зірочка плюс 2 для 2
і 0
).
Ваше завдання створити найкоротшу (це код-гольф ) програму, яка виводить (std :: out або файл чи будь-що інше) довільну довгу тестову рядок цього формату. Довжина символів подається як аргумент. Програма повинна підтримувати до 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*
чи що - небудь подібне?