Re: Comando per generare permutazioni di caratteri
Il 21/07/2010 13:12, Premoli, Roberto ha scritto:
Mi ricordo di aver usato in passato in comando che ricevendo in input in
intervallo generava tutte le pemutazioni di lettere comprese in tale
intervallo, una cosa del tipo:
Comando -quantita' 2 -intervallo a-z
Output:
aa
..
zz
Il problema, ovviamente, e' che NON mi ricodo questo comando e google
non sono riuscito ad usarlo in modo tale da avere risposta.
Qualcuno si ricorda questo comando? Certo, potrei fare uno script, ma
credo il comando sia molto piu' veloce.
Penso sia questo che cerchi:
#!/bin/bash
function anagram(){
local array
word=$1
len=${#word}
if [[ $len == 1 ]]; then echo $word; return; fi
end=$(($len - 1))
for i in $(seq 0 $end)
do
array[$i]=${word:$i:1}
done
for i in $(seq 0 $end)
do
tmp=${array[$i]}
array[$i]=${array[0]}
array[0]=$tmp
new=$(echo ${array[@]:1} | sed s/" "//g)
for j in $(anagram $new)
do
echo ${array[0]}$j
done
done
return
}
word=$(echo $1 | tr "A-Z" "a-z")
anagram $word
oppure in perl:
#!/usr/bin/perl
# da riga di comando
# perl -e 'a("",split("",$ARGV[0]));sub a{my ($p,@s)=@_;if(@s){my
$r=@s;while($r--){my $c=shift @s;a($p.$c,@s);push @s,$c}}else{print
"$p\n"}}'
a("",split("",$ARGV[0]));
sub a{
my ( $p, @s ) = @_;
if ( @s ) {
my $r = @s;
while ( $r-- ) {
my $c = shift @s;
a($p. $c, @s);
push @s, $c
}
} else {
print "$p\n"
}
}
ciao
Beppe
P.S.:
non chiedermi come funziona l'ho copiato da una risposta tempo fa!!!
--
le nuvole non hanno regole,
perchè non hanno mai rinunciato
alla libertà di sognare.
Reply to: