shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 1/2 OFF TOPIC Embaralhar sequência de números


From: mop
Subject: Re: 1/2 OFF TOPIC Embaralhar sequência de números
Date: Fri, 15 Feb 2008 01:34:20 -0200

Parla, del carrello rosso :)

O tráfego na lista está tão baixo que vou dar mais uns pitacos.

Que forma light de coibir os malandros no pabx! ;)

O código de minha mensagem anterior foi feito para colar diretamente no
prompt e "mandar ver". Ao final o resultado desejado deveria estar em $z,
daí era só fazer o que quisesse:
echo $z
echo $z|tr ' ' '\n'
echo $z|tr ' ' '\n' >file
etc.

Captei pela sua explanção abaixo que é realmente para considerar a diferença
absoluta. Com essa alteração acho que normalmente aquele enunciado é exeqüível.
Haverá excessões. E se os dois últimos números remanescentes forem 373 e 369,
como o enunciado poderá ser atendido, considerando a diferença limite?
Será uma lista única e estática? Se sim, o tempo não parece problema.

No meu código a linha "x=${x/$y}" não traduz o que eu havia pensado, para isso
preciso usar "x=${x/ $y / }". Funcionaria igual e o resultado seria igual, mas
o loop não seria concluído, pois a condição false do while jamais seria
atingida, exigindo uma interupção com ^C quando o contador em 999.

Como acredito na qualidade da saída, dentro do limite das regras estabelecidas
e da qualidade do $RANDOM, segue prática com umas frescurinhas.

Vou tirar a apresentação do valor de $z, alterar a forma de apresentação do
contador, "beepar" quando pronto, colocar o script em arquivo, armazenar o
conteúdo de $z em arquivo, imprimir o nome do arquivo e o tempo de execução do
script. A conclusão com sucesso dependerá da "SORTE", vide ressalva acima.

Eis o que aconteceu em um xterm por aqui:

############################
web@k7/tmp$ bash --version
GNU bash, version 3.2.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
web@k7/tmp$ ls -l f
-rw-r--r-- 1 web ppp 404 2008-02-14 23:55 f
web@k7/tmp$ cat f
t=`date +%s`
F=$t.rand
echo -n >$F||return
c=1
y1=1
z=
x=" `echo -n {1..999}` "
while [ ${#x} -gt 1 ];do
y=${RANDOM:2}
y=$[10#$y]
[ "$x" != "${x/ $y }" ]&&{
d=$[$y-$y1];d=${d/-}
[ $d -lt 7 ]&&continue
z="$z $y"
#x=${x/$y}
x=${x/ $y / }
y1=$y
#echo $z
#echo c=$[c++]
printf "\r$[c++]"
}
done
echo $z >$F
echo " números no arquivo $F, em $[`date +%s`-$t] segundos"
until read -n1 -s -p $'\a' -t1;do :;done
web@k7/tmp$ . ./f
999 números no arquivo 1203041507.rand, em 744 segundos
web@k7/tmp$
#########################


Não conto o $z, obtenha o seu...
Que tal fazer um script para checar se o resultado obtido atende todas as
cláusulas?
Esse eu não sei fazer. :)



------------------------------------------------------------------
>From: "Cristiano Ferrari"
>
>Deixa eu explicar o problema. Adquirimos uma nova central telefônica
>que permite o cadastrado de um PIN para o usuário, para que ele fique
>liberado das restrições de acesso (ligação interurbana, celular, etc),
>que lhes será cobrado como uso particular.
>
>O PIN é de 4 dígitos, mas quero usar um deles para categorizar os
>usuários.
>
>Me sobram 3 dígitos, os 999 números da sequência, logo um esperto
>começa testar o número anterior e posterior ao seu para ver o bloqueio
>é liberado e o uso é debitado na conta de outro.
>
>Por isso, eu calculei que 7 números de distância mínima entre um e
>outro seria um intervalo razoável, considerando que o cara tende a
>testar 2 ou 3 número para cima ou para baixo do seu, +/- em sequência.
>
>A aleatoriedade na ordem serve apenas para evitar que se deduza uma
>progressão, caso um orelhudo divulgue a outro o seu código.
>
>Será que a gente consegue um código definitivo e depurado?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]