Thread Array mischen über Schwartz'sche Transformation
(7 answers)
Opened by rosti at 2024-11-27 10:28
Hier eine Lösung für das Mischen über den Index. Beim mehrmaligen Mischen entstehen so auch andere Reihenfolgen.
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 use strict; use warnings; use Digest::MD5 qw(md5_hex); my @li = ('a'..'z','a'); shuffle(\@li) for 1..5; print "@li\n"; sub shuffle{ my $ref = shift; my @idx = 0 .. scalar @$ref -1; @$ref = map{ $ref->[$_->[0]] } sort{ $a->[1] cmp $b->[1] } map{ [ $_, md5_hex($_.$$.time) ] }@idx; } Edit: Der Index in einem Array ist numerisch. Von daher können wir crypt() verwenden wenn diese Zahlen auf 8 Byte eingedampft werden und das geht mit pack("V",NUM) (little Endian!). Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 use strict; use warnings; my @li = ('a'..'z','a'); shuffle(\@li) for 1..3; sub shuffle{ my $ref = shift; my @idx = 0 .. scalar @$ref -1; @$ref = map{ $ref->[$_->[0]] } sort{ $a->[1] cmp $b->[1] } map{ [ $_, crypt(pack("V",$_),$$) ] }@idx; print "@$ref\n"; } Last edited: 2024-11-28 18:08:13 +0100 (CET) |