En definitiva esta función recibe un string y devuelve un string con los mismos caracteres pero cambiados de lugar, por ejemplo puede recibir "casa" y retornar "aacs".
function Mezclar(const cl: string): String;
var
i,j,rand,indarray,q:Integer;
res:String;
aInd:array of Integer;
yaesta:Boolean;
begin
q:=Length(cl);
yaesta:=False;
SetLength(aInd,q);
res:='';
i:=Length(cl);
indarray:=0;
repeat
rand:=Random(q)+1;
for j:=Low(aInd) to High(aInd) do
if aInd[j]=rand then yaesta:=True;
if not(yaesta) then
begin
res:=res+cl[rand];
aInd[indarray]:=rand;
Inc(indarray);
Dec(i);
end;
yaesta:=False;
until i=0;
Result:=res;
end;
Para los novatos o quienes están medios oxidados o retornando a la programación, puede ser un interesante ejercicio.
¿Qué me llevó a hacer esta función? Un programa de generación de contraseñas, del tipo que le permite al usuario especificar la cantidad de mayúsculas, minúsculas, números y caracteres especiales (símbolos), en una parte tenía los randoms de esta forma "GYEBkfuenlow4982($*!" entonces eso se lo paso a esta función y listo, me altera las posiciones, sería un random de un random "ordenado" o algo así.
Aclaración: Randomize lo llamo en el Form.Create por eso no está en la función. Se recomienda utilizar Randomize solo una vez.
No hay comentarios:
Publicar un comentario