ブロックソートの復号
30分プログラム、その794。id:mzp:20100814:bwtの続きでブロックソートの復号。
ブロックソート - Wikipediaには『復号は簡単』って書いてあったけど、普通に難しかったよ! あとなんかキレいに書けなかったよ!
使い方
$ perl block_sort.pl 3 ccoaa cacao
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- use strict; use warnings; use Data::Dumper; use sort 'stable'; sub decode($$){ my ($n,$str) = @_; my @xs = split(//,$str); my $length = @xs; my @ys = sort { $xs[$a-1] cmp $xs[$b-1]} (1..$length); my @zs = (); my $i = $ys[$n-1]; while(@zs < $length) { push @zs,$xs[$i-1]; $i = $ys[$i-1]; } return join("",@zs); } my $str = decode($ARGV[0],$ARGV[1]); print "$str\n";