Una contromisure è una sorta di dati di test autodescriventi utilizzati nei test del software. Non sono sicuro che sia stato inventato da James Bach , ma lo so da lì.
L'idea è la seguente: i dati del test contengono molti asterisco ( *). Il numero davanti all'asterisco indica la durata dei dati del test a quel punto. Se devi conoscere una posizione nei dati del test che non è un asterisco, trova l'ultimo asterisco, osserva il numero precedente e aggiungi il numero di cifre che seguono.
La sequenza inizia in questo modo:
2*4*6*8*11*14*17*20*23*
^
Come puoi vedere, l'asterisco contrassegnato si trova in posizione 14.
Se un file sembra essere troncato come segue
[...]2045*20
allora puoi derivare che c'è un limite di 2047 caratteri da qualche parte (2045 dove l'asterisco è più 2 per 2e 0).
È tuo compito creare il programma più breve (questo è code-golf ) che emetta (std :: out o file o altro) una stringa di test lunga arbitraria di quel formato. La lunghezza in caratteri è indicata come argomento. Il programma deve supportare fino a 2 GB di dati di prova (valore di input 2147483647 caratteri).
Posizioni "pericolose" nel file da 2 GB:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Questo dovrebbe rispondere alla domanda di @Leaky Nun se c'è una decisione da prendere tra 995 * 999 * e 995 * 1000 * o simile: no.
La fine del file da 2 GB con valore di input 2147483647 è:
2147483640*2147483
995*999*e 995*1000*o qualcosa di simile?