#!/usr/bin/perl # -*- mode: perl; coding: utf-8; tab-width: 4; -*- use strict; use warnings; while () { chop; if (my ($q, $a) = split(/:/)) { print "$q:$a is\n"; print "... ", decode(split(//, $q)), "\n"; } } sub decode { return () unless my $a = shift; $a = ord($a) - ord('a') + 10 unless $a =~ /\d/; my $b = join('', splice(@_, 0, $a)); my $c = $b % 26; my $d = chr(ord('a') + $c); print "\t$a($b) = ($b % 26 = $c) = $d\n"; ($d, &decode); } __DATA__ 10:a 226:a 3520:a 19:j 210:k 3519:z 500001:b 2463579:uh d4751402223934:c a9028752798a6109452883a2566849612:abc a5649689195b21787340956c103674010633d8575762736877e14014334193172:hello 361041222e13475130223949376248672:mario a3489090677d38828797951984392273749796d37270023893329474049128631431043908e14421656917497d128536247791743915827955471828303314f200148040241576d1977125257653e24153309646860c102278187593f332708646701905