human.pl: 204 strokes shuffle.pl: 51 strokes select.pl: 55 strokes ------------------------ total: 310 strokes #### human.pl: print map{$$_[0]}sort{$$b[1]!~/\D/<=>$$a[1]!~/\D/||(grep$_,map{$_>@$b?1:($@=($$a [$_]!~/\D/&&length$$a[$_]<=>length$$b[$_])||$$a[$_]cmp$$b[$_])?$@:0}1..@$a)[0]}s ort{@$b<=>@$a}map{[$_,split/(\d+|\n)/,lc]}<> shuffle.pl: print map{$n=rand@x;@x[$n,-1]=@x[-1,$n];pop@x}@x=<> select.pl: @x=<>;print map{$n=rand@x;@x[$n,-1]=@x[-1,$n];pop@x}0,1 #### human.pl: 189 strokes shuffle.pl: 33 strokes select.pl: 37 strokes ------------------------ total: 259 strokes #### human.pl: print map{$$_[0]}sort{$$b[1]!~/\D/<=>$$a[1]!~/\D/||(grep$_,map{$,=$$a[$_];$_>@$b ||($,!~/\D/&&length$,<=>length$$b[$_])||$,cmp$$b[$_]}1..@$a)[0]}sort{@$b<=>@$a} map{[$_,split/(\d+|\n)/,lc]}<> This passes, but doesn't look right. It does cut 15 strokes, though: print map{$$_[0]}sort{$$b[1]!~/\D/<=>$$a[1]!~/\D/||(grep$_,map{$,=$$a[$_];$_>@$b ||($,!~/\D/&&length$,<=>length$$b[$_])||$,cmp$$b[$_]}1..@$a)[0]}map{[$_,split/(\ d+|\n)/,lc]}<> shuffle.pl: print map{splice@x,rand@x,1}@x=<> select.pl: @x=<>;print map{splice@x,rand@x,1}0,1 #### human.pl: 185 strokes #### human.pl: print map$$_[0],sort{$$b[1]!~/\D/<=>$$a[1]!~/\D/||(grep$_,map$_>@$b||(($*=$$a[$_ ])!~/\D/&&length$*<=>length$$b[$_])||$*cmp$$b[$_],1..@$a)[0]}sort{@$b<=>@$a}map[ $_,split/(\d+|\n)/,lc],<> #### human.pl: 159 strokes #### human.pl: print map$$_[0],sort{(grep$_,map$_>@$b||((!grep/\D/,$*=$$a[$_],$_=$$b[$_])&&leng th$*<=>length)||$*cmp$_,1..@$a)[0]}sort{@$b<=>@$a}map[$_,split/(\d+|\n)/,lc],<> #### human.pl: 137 strokes #### human.pl: print map$$_[0],sort{(grep$_,map{((!grep/\D/,$*=$$a[$_],$_=$$b[$_])&&length$*<=> length)||$*cmp$_}1..@$a)[0]}map[$_,split/(\d+|\n)/,lc],<>