Permutationen einer Zahl mithilfe des Bash-Skripts suchen

1006
user3479901

Ist es möglich, ein Bash-Skript zu schreiben, das eine 4-stellige Zahl als Befehlszeilenargument verwendet und alle Permutationen dieser Zahl nur mit reiner Bash erzeugt?

0
Haben Sie versucht, es zu lösen? glenn jackman vor 7 Jahren 0
Ich hatte es in C für String-Permutationen versucht. Aber neugierig auf Bash mit Zahlen. user3479901 vor 7 Jahren 0
Bitte werfen Sie einen Blick auf: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://superuser.com/help/someone-answers) Cyrus vor 7 Jahren 0

1 Antwort auf die Frage

0
virtex

Es ist möglich. Hier ist eine Funktion, die das tut, was Sie fragen.

function permutate { if [ "${#1}" = 1 ]; then echo "$$" else for i in $(seq 0 $((${#1}-1)) ); do pre="$$" seg1="$" seg2="$" seg="$$" permutate "$seg" "$pre" done fi } 

Führen Sie es so aus:

$ permutate 1234 

Es funktioniert mit Rekursion. Jeder Aufruf der Funktion nimmt ein Zeichen aus der Zeichenfolge und übergibt den Rest rekursiv an sich. Also, wenn der Eingang 1234 ist, wird es in einen Präfix aufgebrochen und verbleibende Segment viermal so: 1 234 2 134 3 124 4 123. Die drei Zeichensegmente werden dann gleich behandelt, dann die beiden Zeichensegmente und die Rekursion wird angehalten, wenn das Segment nur aus einem Zeichen besteht.

Beeindruckend. Danke, Schatz. Es funktioniert . Ich muss meine Shell-Logik verbessern user3479901 vor 7 Jahren 0
Können wir die Ausgabe nach (cat) in eine andere Datei sortieren? user3479901 vor 7 Jahren 0
Verwenden Sie einfach den Sortierbefehl wie 'permutate 1234 |' sort> output.txt` virtex vor 7 Jahren 0
Off Topic, aber fragen Sie, Advance danke. Wie verwende ich diesen bash-Befehl in der C-Sprachfunktion execl () .. Der bash-Befehl lautet ls -lR /path/to/dir/*.jpg | wc -l` Ich muss diesen Befehl in c-Programm verwenden. Irgendeine Hilfe? user3479901 vor 7 Jahren 0
@ user3479901, wenn Sie execl verwenden, würden Sie Folgendes tun: `execl (" / bin / bash "," -c "," ls -lR /path/to/dir/*.jpg | wc -l ", NULL)` . Wenn Sie jedoch die Ausgabe des Shell-Befehls erfassen möchten, verwenden Sie stattdessen `popen ()`. virtex vor 7 Jahren 0