sort関数の比較操作をワンライナーで可視化してみた - すぎゃーんメモに続き、sort関数ネタ。
なんとなく、sort関数のBLOCKを出鱈目にすればshuffle的なことが出来るんじゃないのかな?と思いついて。
やっぱり既にそういう考え方はあるようで。
配列をランダムに並び替える。かっこいいスクリプト : blog.nomadscafe.jp
配列をシャッフル(ランダムソート)する - くれすのPerl日記 - Hatena::Group::Perl
ワンライナーでやると、こんなカンジ?
$ perl -le 'print join $", sort { int(rand 3) - 1 } 0..9' 1 0 4 7 6 5 3 2 8 9
-1, 0, 1のいずれかを返すのならこういう方法もアリかな
$ perl -le 'print join $", sort { rand(3) % 3 - 1 } 0..9' 2 4 5 6 8 7 1 0 3 9
どちらでもそれっぽく混ざっているようだ。
しかし、比較結果が0になる組が存在しないのにランダムの結果で0が出てくるのも変かな?
$ perl -le 'print join $", sort { int(rand 2) * 2 - 1 } 0..9' 1 8 0 3 7 9 2 5 4 6 $ perl -le 'print join $", sort { rand(2) % 2 * 2 - 1 } 0..9' 9 7 5 6 4 3 8 1 0 2
というやり方でもいいのかも。
まぁ、素直にコアモジュールList::Utilのshuffleを使うべきなんですけどね。
$ perl -MList::Util=shuffle -le 'print join $", shuffle 0..9' 1 6 3 9 4 0 7 8 5 2