某サイトで以下の問題が出題されたのでPerlで解いてみた。
以下の暗号文を復号せよ。
---begine---
tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr,
funyy abg crevfu sebz gur rnegu
---end---
解法
この問題の暗号方式?はROT13という単純な暗号で
A B C D E F G H I J K L M
| | | | | | | | | | | | |
N O P Q R S T U V W X Y Z
のように各文字をアルファベット順に13後の文字に置き換える。
trで置換してやればOK
ソース
#!/usr/bin/env perl
use strict;
use warnings;
my $word = shift;
print print_rot13_string($word) . "n";
sub print_rot13_string {
$word =~ tr/a-zA-Z/n-za-mN-ZA-M/;
return $word;
}
実行結果
$ perl rot13.pl "tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr, funyy abg crevfu sebz gur rnegu"
government of the people, by the people, for the people, shall not perish from the earth
government of the people, by the people, for the people, shall not perish from the earth
が答え。
リンカーンのゲティスバーグ演説の名文ですね。