Ein Counterstring ist eine Art selbstbeschreibender Testdaten, die beim Testen von Software verwendet werden. Ich bin mir nicht sicher, ob es tatsächlich von James Bach erfunden wurde , aber ich weiß es von dort.
Die Idee ist wie folgt: Die Testdaten enthalten viele Sternchen ( *
). Die Zahl vor dem Sternchen gibt an, wie lange die Testdaten zu diesem Zeitpunkt sind. Wenn Sie eine Position in den Testdaten kennen müssen, die kein Sternchen ist, suchen Sie das letzte Sternchen, sehen Sie sich die Nummer zuvor an und fügen Sie die Anzahl der folgenden Ziffern hinzu.
Die Sequenz beginnt wie folgt:
2*4*6*8*11*14*17*20*23*
^
Wie Sie sehen können, befindet sich das markierte Sternchen an Position 14.
Wenn eine Datei wie folgt abgeschnitten wird
[...]2045*20
dann können Sie ableiten, dass es irgendwo ein Limit von 2047 Zeichen gibt (2045, wo das Sternchen plus 2 für 2
und ist 0
).
Es ist Ihre Aufgabe, das kürzeste Programm (dies ist Code-Golf ) zu erstellen, das eine beliebige lange Testzeichenfolge dieses Formats ausgibt (std :: out oder file oder was auch immer). Die Länge in Zeichen wird als Argument angegeben. Das Programm muss bis zu 2 GB Testdaten unterstützen (Eingabewert 2147483647 Zeichen).
"Gefährliche" Positionen in der 2-GB-Datei:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Dies sollte die Frage von @Leaky Nun beantworten, wenn eine Entscheidung zwischen 995 * 999 * und 995 * 1000 * oder ähnlichem getroffen wird: Nein.
Das Ende der 2-GB-Datei mit dem Eingabewert 2147483647 lautet:
2147483640*2147483
995*999*
und 995*1000*
oder so etwas entscheiden müssten ?