ランダムっぽく生成した郵便番号が示す場所を眺めてみる修行

10 進数 7 桁の数値をランダムっぽく生成して、それを郵便番号としてその場所がどこになるのか眺めてみた。
郵便番号のデータは郵便番号データダウンロード - 日本郵便から。

use strict;
use warnings;
use Encode;
use Math::Trig qw( pi );
my $NUMBER_OF_ZIPS = 100_000;
my $PI = pi();
my $zip_base = $PI;
use KEN_ALL;

sub next_zip {
  my $zip = substr($zip_base, 2, 7);
  $zip_base *= $PI;
  $zip_base -= int($zip_base);
  $zip_base *= 10;
  return $zip;
}

sub fire {
  my ($i, $zip) = @_;
  my ($pref_code, $city_code, $town) = $KEN_ALL::town_of{$zip};
  if ($pref_code) {
    my $pref_name = $KEN_ALL::pref_name_of{$pref_code};
    my $city_name = $KEN_ALL::city_name_of{$pref_code.$city_code};
    print encode('shiftjis', "$i\t$zip $pref_name$city_name$town\n");
  }
}

for my $i (1..$NUMBER_OF_ZIPS) {
  my $zip = next_zip();
  fire($i,$zip);
}

encode はたまたま shiftjis。

$ perl nantoka.perl > nantoka.txt
$ wc -l 
1216 nantoka.txt

10 万件のうち、1216 件だけが実際の町域が対応する郵便番号だったっぽい。1.2 %。ふーん。

$ head nantoka.txt
17      4101126 静岡県裾野市桃園
31      3400053 埼玉県草加市旭町
198     5710047 大阪府門真市栄町
296     9501407 新潟県新潟市南区鷲ノ木新田
456     0782513 北海道雨竜郡北竜町三谷
459     9814323 宮城県加美郡加美町石原
597     7372314 広島県江田島市沖美町美能
626     3193704 茨城県久慈郡大子町上野宮
662     6011103 京都府京都市左京区花脊八桝町
752     5140836 三重県津市野崎垣内岩田
$ tail nantoka.txt
99361   4750031 愛知県半田市阿原町
99521   0891321 北海道河西郡中札内村東一条北
99534   8980076 鹿児島県枕崎市金山町
99535   9550803 新潟県三条市月岡
99546   5900946 大阪府堺市堺区熊野町東
99554   0410804 北海道函館市赤川町
99823   1636001 東京都新宿区西新宿住友不動産新宿オークタワー(1階)
99861   0295621 岩手県和賀郡西和賀町沢内鍵飯
99872   2390812 神奈川県横須賀市小原台
99878   7940832 愛媛県今治市八町西

行ったことないところばっかりだなあ。

44943   1520011 東京都目黒区原町

あ、ここは行ったことあるぞ。