Hallo
ich brauche eine gute Lösung, um ein kreisförmiges String zu
durchsuchen. Sagen wir mal ich hab ein String
ABCDEFGHIJ
welches aber nach dem J wieder bei A anfängt usw.
Möchte ich jetzt nach dem Substring
FGH
suchen: Kein Problem. Aber wenn ich jetzt nach
JAB
suchen will?
Meine einzige Idee wäre es, das ganze 2mal hinteinander zu
hängen, die Position des Hits zu cachen, und dann die
Verdoppelung des Strings wieder rückgängig zu machen.
Irgendwelche besseren Ideen? Ich will das in Perl lösen, aber
da es sich um eine allgemeinere Frage handelt, dachte ich,
passt es hier ganz gut.
Ich hab jetzt eine Weile überlegt, was Du tatsächlich
meinen könntest. Möglicherweise sucht Du eine allgemeine
Variante eines periodischen Mappers, also sowas:
[Perl]
...
sub periodic\_mapper {
my ($where,$len) = @\_;
return $where \>= $len ? $where - $len : $where
}
my $S = 'ABCDEFGHIJ';
my $L = length $S;
my $N = 3;
for my $x (0 .. $L) {
print map { substr $S, periodic\_mapper($x+$\_, $L), 1 } 0..$N-1;
print "\n"
}
...
Wer weiß? Vielleicht auch etwas anderes. Obiges entspricht einer
Verallgemeinerung, also einer Linearisierung einer nichtlinearen
Sequenz.
Obiges ist natürlich auch mit einer simplen
Modulo-Operation hinzubekommen, also etwa:
...
for my $x (0 .. $L) {
print map { substr $S, **($x+$\_) % $L**, 1 } 0..$N-1;
print "\n"
}
...
aber je nach Randbedingung könnte es auch
„allgemeiner“ ausgedrückt werden müssen.
Grüße
CMБ