das Hauptziel zu identifizieren, ist eine periodische Abfolge in einem Array mit heftigen Schlag zu finden, zum Beispiel:Wie eine periodische Sequenz in einer Reihe von ganzen Zahlen
{2, 5, 7, 8, 2, 6, 5 , 3, 5, 4, 2, 5, 7, 8, 2, 6, 5, 3, 5, 4, 2, 5, 7, 8, 2, 6, 5, 3, 5, 4}
oder {2, 5, 6, 3, 4, 2, 5, 6, 3, 4, 2, 5, 6, 3, 4, 2, 5, 6, 3, 4}
, die wie angegeben zurückgegeben werden müssen Sequenz für die zwei Beispiele
{2, 5, 7, 8, 2, 6, 5, 3, 5, 4} und {2, 5, 6, 3, 4}
I tri ed mit einer Liste und einer Unterliste, die aus zwei Arrays besteht, aber keinen Erfolg hat. Ich muss etwas in meinen Schleifen vermissen. Ich denke an den Algorithmus "Schildkröte und Hase" als eine Alternative, aber ich vermisse etwas Wissen in bash-Befehle, um es zu implementieren.
Ich ziehe meinen zweiten Versuch mit Schildkröte und Hasen als die ersten zu schreiben scheint ein nutzloser Versuch zu sein:
#!/bin/bash
declare -A array=(1, 2, 3, 1, 2, 3, 1, 2, 3)
declare -A found=()
loop="notfound"
tortoise=`echo ${array[0]}`
hare=`echo ${array[0]}`
found[0]=`echo ${array[0]}`
while ($loop == "notfound")
do
for ((i=1;i=`echo ${#array[@]}`;i++))
do
if ((`echo ${array[$#]}` == $hare))
then
echo "no loop found"
exit 0
fi
hare=`echo ${array[$i]}`
if ((`echo ${array[$#]}` == $hare))
then
echo "no loop found"
exit 0
fi
hare=`echo ${array[$(($i+1))]}`
tortoise=`echo ${array[$i]}`
found[$i]=`echo ${array[$i]}`
if (($hare == $tortoise))
then
loop="found"
printf "$found[@]}"
fi
done
done
ich Fehler auf assoziatives Array bekam benötigen indice
'ich mit einer Liste versucht, und einer Unterliste aus zwei Arrays, aber ohne Erfolg, den ich besser etwas in meinem loops' fehlen muß diesen Code hier – Sundeep
zu schreiben ist eine Perl-Lösung okay? Wenn zum Beispiel diese beiden Array-Werte in einer Datei (mit einem Trennzeichen) gedruckt werden, sagen wir "ip.txt", dann würde dies die minimale Wiederholungsmenge finden. 'perl -lnE $, =": "; @a =/\ d +/g; für ($ i = 1; $ i <$ # a/2 + 1; $ i ++) {drücke (@ b, @ a [0 .. $ i-1]) foreach (0 .. $ # a/$ i); if (@b ~~ @a) {print @a [0 .. $ i-1]; last} undef @b} 'ip.txt' – Sundeep
kannst du das nicht mit 'grep -o' machen? zum Beispiel: 'TEST = (1 2 3 4 5); echo $ {TEST [@]} | grep -o "3 4" ' – scoobydoo