りはびりぱーる
ちょっと余所見してる間に、はてながソースコードへの色つけしてくれるようになってるらしいしPerlリハビリ。
実用性が皆無なソートアルゴリズム、ボゴソートでも実装してみましょう。
#!/usr/bin/perl @a=<>=~/\d+/g; # 入力を一行読んで、その結果で\d+にマッチする部分を配列として@aに代入。 while(1){ for($p=$a[$n=0];$p<=$a[$n];$p=$a[$n++]){} # @aはどこまでソートされてるかなー last if($n==@a);# @aはソート済みだから終わる # ソートされてなかったから@aを適当にシャッフル for($n=0;$n<@a;++$n){ @a[$n..@a]=(splice(@a, $n+int rand(@a-$n), 1), @a[$n..$#a]); } } print"@a"; # ソート済みの@aを表示
こんなかんじ。実行結果は?
% perl bogosort.pl 1 3 33 34 454 421 111 <- 入力行 1 3 33 34 111 421 454 <- 出力行 % perl bogosort.pl 1 34 45 952 727 13 1 <- 入力行 1 1 13 34 45 727 952 <- 出力行
ああちゃんとソートできてるじゃんすごいすごい。でも10個くらいの値を渡したらなかなか終わらなかったり。
spliceなどという便利な組み込み関数を知らなかったので
for(@b=();@a;){ push@b,splice(@a, int rand@a, 1); } @a=@b
なんて方法で配列のソートをしていた。こーいう超基本的な関数とかよくわかってないからCodeGolfで上の方行けねえんだろか。
http://codegolf.com/reverseなんて、splice使ったら縮むかなとか思って今見てみたら、
1st kinaba 51 Ruby
51バイトってうわあ別次元だ。一番良い記録出せてるhttp://codegolf.com/pascals-triangleとかも、どうやったらもっと縮むのかさっぱりわからない。