nary encoding for fun and profit
I got an email from Tom about a problem he was having with Number::Tolerant. That reminded me to have a look at releasing the trivial changes I had sitting in my repository. While doing that, tab completion reminded me of Number::Nary, so I went and had a look at it. In 0.05, I’d removed a secret feature that I’d written into 0.04. It was very badly done in 0.04, as I recall, but I re-added it correctly, and that makes me happy.
Number::Nary does n-ary encoding of numbers into different digit sets. I’ve written before about its work-related uses, but I also have a silly play-related use that is now officially supported.
#!/usr/bin/perl -l
# jaencode - encode a number in Japanese syllables
use strict;
use warnings;
# missing: a i u e o n chi tsu shi (non-uniform length)
use Number::Nary -codec_pair => {
digits => [ qw(
ka ki ku ke ko ta te to sa su se so na ni nu ne no ha
hi fu he ho ma mi mu me mo ya yu yo ra ri ru re ro wa wo
), ]
};
sub xlate { $_[0] =~ /[a-z]/ ? decode($_[0]) : encode($_[0]) }
if (@ARGV == 0) { die "usage: jaencode <string ...>\n" }
elsif (@ARGV == 1) { print xlate($ARGV[0]); }
else { print $_ . ": " . xlate($_) for @ARGV }
Then:
knave!rjbs$ jaencode 867 530 999
867: mino
530: nuna
999: yaka
knave!rjbs$ jaencode mino nuna yaka
mino: 867
nuna: 530
yaka: 999
I feel like there are probably other fun or useful things to do with this (where “this” is either Number::Nary or jaencode), but I don’t know what, yet.