#!/usr/bin/perl -X
use utf8;
use feature 'unicode_strings';
# table from kana to readings
%yomitbl = (
'ァ' => 'ア', 'ィ' => 'イ', 'ゥ' => 'ウ', 'ェ' => 'エ', 'ォ' => 'オ',
'ガ' => 'カ', 'ギ' => 'キ', 'グ' => 'ク', 'ゲ' => 'ケ', 'ゴ' => 'コ',
'ザ' => 'サ', 'ジ' => 'シ', 'ズ' => 'ス', 'ゼ' => 'セ', 'ゾ' => 'ソ',
'ッ' => 'ツ',
'ダ' => 'タ', 'ヂ' => 'チ', 'ヅ' => 'ツ', 'デ' => 'テ', 'ド' => 'ト',
'バ' => 'ハ', 'ビ' => 'ヒ', 'ベ' => 'ヘ', 'ブ' => 'フ', 'ボ' => 'ホ',
'パ' => 'ハ', 'ピ' => 'ヒ', 'プ' => 'フ', 'ペ' => 'ヘ', 'ポ' => 'ホ',
'ャ' => 'ヤ', 'ュ' => 'ユ', 'ョ' => 'ヨ',
'ヮ' => 'ワ', 'ヰ' => 'イ', 'ヴ' => 'ウ', 'ヱ' => 'エ',
'ヵ' => 'カ', 'ヶ' => 'カ',
'ァー' => 'アア', 'ィー' => 'イイ', 'ゥー' => 'ウウ', 'ェー' => 'エエ', 'ォー' => 'オオ',
'アー' => 'アア', 'イー' => 'イイ', 'ウー' => 'ウウ', 'エー' => 'エエ', 'オー' => 'オオ',
'カー' => 'カア', 'キー' => 'キイ', 'クー' => 'クウ', 'ケー' => 'ケエ', 'コー' => 'コオ',
'ガー' => 'カア', 'ギー' => 'キイ', 'グー' => 'クウ', 'ゲー' => 'ケエ', 'ゴー' => 'コオ',
'サー' => 'サア', 'シー' => 'シイ', 'スー' => 'スウ', 'セー' => 'セエ', 'ソー' => 'ソオ',
'ザー' => 'サア', 'ジー' => 'シイ', 'ズー' => 'スウ', 'ゼー' => 'セエ', 'ゾー' => 'ソオ',
'ター' => 'タア', 'チー' => 'チイ', 'ツー' => 'ツウ', 'テー' => 'テエ', 'トー' => 'トオ',
'ダー' => 'タア', 'ヂー' => 'チイ', 'ヅー' => 'ツウ', 'デー' => 'テエ', 'ドー' => 'トオ',
'ナー' => 'ナア', 'ニー' => 'ニイ', 'ヌー' => 'ヌウ', 'ネー' => 'ネエ', 'ノー' => 'ノオ',
'ハー' => 'ハア', 'ヒー' => 'ヒイ', 'フー' => 'フウ', 'ヘー' => 'ヘエ', 'ホー' => 'ホオ',
'バー' => 'ハア', 'ビー' => 'ヒイ', 'ベー' => 'ヘウ', 'ブー' => 'フエ', 'ボー' => 'ホオ',
'パー' => 'ハア', 'ピー' => 'ヒイ', 'プー' => 'フウ', 'ペー' => 'ヘエ', 'ポー' => 'ホオ',
'マー' => 'マア', 'ミー' => 'ミイ', 'ムー' => 'ムウ', 'メー' => 'メエ', 'モー' => 'モオ',
'ャー' => 'ヤア', 'ュー' => 'ユウ', 'ョー' => 'ヨオ',
'ヤー' => 'ヤア', 'ユー' => 'ユウ', 'ヨー' => 'ヨオ',
'ラー' => 'ラア', 'リー' => 'リイ', 'ルー' => 'ルウ', 'レー' => 'レエ', 'ロー' => 'ロオ',
'ヮー' => 'ワア',
'ワー' => 'ワア', 'ヰー' => 'イイ', 'ヴー' => 'ウウ', 'ヱー' => 'エエ', 'ヲー' => 'ヲオ',
);
sub kanacmp {
# convert hiragana to katakana
my($ka, $kb) = ($a, $b);
$ka =~ y/ぁ-ん/ァ-ン/;
$kb =~ y/ぁ-ん/ァ-ン/;
# convert katakana to its readings
my($yomia, $yomib) = ($ka, $kb);
$yomia =~ s/[ァ-ヶ]ー?/ exists $yomitbl{$&} ? $yomitbl{$&} : $& /eg;
$yomib =~ s/[ァ-ヶ]ー?/ exists $yomitbl{$&} ? $yomitbl{$&} : $& /eg;
# compare a and b in readings, katakanas or original strings
$yomia cmp $yomib or $ka cmp $kb or $a cmp $b
}
がっき
ガレージ
きがん
ふあん
クリーンヒット
ギンガムチェック
きかんしゃ
カレーライス
シークワード
カーキ
ぎんが
ファン
が
かれい
シークヮーサー
カレー
かぎ
ぎかい
グリーンカレー
ギガ
か
プアー
がき
カキ
);
IyEvdXNyL2Jpbi9wZXJsIC1YCnVzZSB1dGY4Owp1c2UgZmVhdHVyZSAndW5pY29kZV9zdHJpbmdzJzsKCiMgdGFibGUgZnJvbSBrYW5hIHRvIHJlYWRpbmdzCiV5b21pdGJsID0gKCAKJ+OCoScgPT4gJ+OCoicsICfjgqMnID0+ICfjgqQnLCAn44KlJyA9PiAn44KmJywgJ+OCpycgPT4gJ+OCqCcsICfjgqknID0+ICfjgqonLCAKJ+OCrCcgPT4gJ+OCqycsICfjgq4nID0+ICfjgq0nLCAn44KwJyA9PiAn44KvJywgJ+OCsicgPT4gJ+OCsScsICfjgrQnID0+ICfjgrMnLCAKJ+OCticgPT4gJ+OCtScsICfjgrgnID0+ICfjgrcnLCAn44K6JyA9PiAn44K5JywgJ+OCvCcgPT4gJ+OCuycsICfjgr4nID0+ICfjgr0nLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICfjg4MnID0+ICfjg4QnLCAKJ+ODgCcgPT4gJ+OCvycsICfjg4InID0+ICfjg4EnLCAn44OFJyA9PiAn44OEJywgJ+ODhycgPT4gJ+ODhicsICfjg4knID0+ICfjg4gnLCAKJ+ODkCcgPT4gJ+ODjycsICfjg5MnID0+ICfjg5InLCAn44OZJyA9PiAn44OYJywgJ+ODlicgPT4gJ+ODlScsICfjg5wnID0+ICfjg5snLCAKJ+ODkScgPT4gJ+ODjycsICfjg5QnID0+ICfjg5InLCAn44OXJyA9PiAn44OVJywgJ+ODmicgPT4gJ+ODmCcsICfjg50nID0+ICfjg5snLCAKJ+ODoycgPT4gJ+ODpCcsICAgICAgICAgICAgICAgJ+ODpScgPT4gJ+ODpicsICAgICAgICAgICAgICAgJ+ODpycgPT4gJ+ODqCcsIAon44OuJyA9PiAn44OvJywgJ+ODsCcgPT4gJ+OCpCcsICfjg7QnID0+ICfjgqYnLCAn44OxJyA9PiAn44KoJywgCifjg7UnID0+ICfjgqsnLCAn44O2JyA9PiAn44KrJywKCifjgqHjg7wnID0+ICfjgqLjgqInLCAn44Kj44O8JyA9PiAn44Kk44KkJywgJ+OCpeODvCcgPT4gJ+OCpuOCpicsICfjgqfjg7wnID0+ICfjgqjjgqgnLCAn44Kp44O8JyA9PiAn44Kq44KqJywgCifjgqLjg7wnID0+ICfjgqLjgqInLCAn44Kk44O8JyA9PiAn44Kk44KkJywgJ+OCpuODvCcgPT4gJ+OCpuOCpicsICfjgqjjg7wnID0+ICfjgqjjgqgnLCAn44Kq44O8JyA9PiAn44Kq44KqJywgCifjgqvjg7wnID0+ICfjgqvjgqInLCAn44Kt44O8JyA9PiAn44Kt44KkJywgJ+OCr+ODvCcgPT4gJ+OCr+OCpicsICfjgrHjg7wnID0+ICfjgrHjgqgnLCAn44Kz44O8JyA9PiAn44Kz44KqJywgCifjgqzjg7wnID0+ICfjgqvjgqInLCAn44Ku44O8JyA9PiAn44Kt44KkJywgJ+OCsOODvCcgPT4gJ+OCr+OCpicsICfjgrLjg7wnID0+ICfjgrHjgqgnLCAn44K044O8JyA9PiAn44Kz44KqJywgCifjgrXjg7wnID0+ICfjgrXjgqInLCAn44K344O8JyA9PiAn44K344KkJywgJ+OCueODvCcgPT4gJ+OCueOCpicsICfjgrvjg7wnID0+ICfjgrvjgqgnLCAn44K944O8JyA9PiAn44K944KqJywgCifjgrbjg7wnID0+ICfjgrXjgqInLCAn44K444O8JyA9PiAn44K344KkJywgJ+OCuuODvCcgPT4gJ+OCueOCpicsICfjgrzjg7wnID0+ICfjgrvjgqgnLCAn44K+44O8JyA9PiAn44K944KqJywgCifjgr/jg7wnID0+ICfjgr/jgqInLCAn44OB44O8JyA9PiAn44OB44KkJywgJ+ODhOODvCcgPT4gJ+ODhOOCpicsICfjg4bjg7wnID0+ICfjg4bjgqgnLCAn44OI44O8JyA9PiAn44OI44KqJywgCifjg4Djg7wnID0+ICfjgr/jgqInLCAn44OC44O8JyA9PiAn44OB44KkJywgJ+ODheODvCcgPT4gJ+ODhOOCpicsICfjg4fjg7wnID0+ICfjg4bjgqgnLCAn44OJ44O8JyA9PiAn44OI44KqJywgCifjg4rjg7wnID0+ICfjg4rjgqInLCAn44OL44O8JyA9PiAn44OL44KkJywgJ+ODjOODvCcgPT4gJ+ODjOOCpicsICfjg43jg7wnID0+ICfjg43jgqgnLCAn44OO44O8JyA9PiAn44OO44KqJywgCifjg4/jg7wnID0+ICfjg4/jgqInLCAn44OS44O8JyA9PiAn44OS44KkJywgJ+ODleODvCcgPT4gJ+ODleOCpicsICfjg5jjg7wnID0+ICfjg5jjgqgnLCAn44Ob44O8JyA9PiAn44Ob44KqJywgCifjg5Djg7wnID0+ICfjg4/jgqInLCAn44OT44O8JyA9PiAn44OS44KkJywgJ+ODmeODvCcgPT4gJ+ODmOOCpicsICfjg5bjg7wnID0+ICfjg5XjgqgnLCAn44Oc44O8JyA9PiAn44Ob44KqJywgCifjg5Hjg7wnID0+ICfjg4/jgqInLCAn44OU44O8JyA9PiAn44OS44KkJywgJ+ODl+ODvCcgPT4gJ+ODleOCpicsICfjg5rjg7wnID0+ICfjg5jjgqgnLCAn44Od44O8JyA9PiAn44Ob44KqJywgCifjg57jg7wnID0+ICfjg57jgqInLCAn44Of44O8JyA9PiAn44Of44KkJywgJ+ODoOODvCcgPT4gJ+ODoOOCpicsICfjg6Hjg7wnID0+ICfjg6HjgqgnLCAn44Oi44O8JyA9PiAn44Oi44KqJywgCifjg6Pjg7wnID0+ICfjg6TjgqInLCAgICAgICAgICAgICAgICAgICAn44Ol44O8JyA9PiAn44Om44KmJywgICAgICAgICAgICAgICAgICAgJ+ODp+ODvCcgPT4gJ+ODqOOCqicsIAon44Ok44O8JyA9PiAn44Ok44KiJywgICAgICAgICAgICAgICAgICAgJ+ODpuODvCcgPT4gJ+ODpuOCpicsICAgICAgICAgICAgICAgICAgICfjg6jjg7wnID0+ICfjg6jjgqonLCAKJ+ODqeODvCcgPT4gJ+ODqeOCoicsICfjg6rjg7wnID0+ICfjg6rjgqQnLCAn44Or44O8JyA9PiAn44Or44KmJywgJ+ODrOODvCcgPT4gJ+ODrOOCqCcsICfjg63jg7wnID0+ICfjg63jgqonLCAKJ+ODruODvCcgPT4gJ+ODr+OCoicsIAon44Ov44O8JyA9PiAn44Ov44KiJywgJ+ODsOODvCcgPT4gJ+OCpOOCpCcsICfjg7Tjg7wnID0+ICfjgqbjgqYnLCAn44Ox44O8JyA9PiAn44Ko44KoJywgJ+ODsuODvCcgPT4gJ+ODsuOCqicsIAopOwoKc3ViIGthbmFjbXAgewoJIyBjb252ZXJ0IGhpcmFnYW5hIHRvIGthdGFrYW5hCglteSgka2EsICRrYikgPSAoJGEsICRiKTsKCSRrYSA9fiB5L+OBgS3jgpMv44KhLeODsy87Cgkka2IgPX4geS/jgYEt44KTL+OCoS3jg7MvOwoKCSMgY29udmVydCBrYXRha2FuYSB0byBpdHMgcmVhZGluZ3MKCW15KCR5b21pYSwgJHlvbWliKSA9ICgka2EsICRrYik7CgkkeW9taWEgPX4gcy9b44KhLeODtl3jg7w/LyBleGlzdHMgJHlvbWl0Ymx7JCZ9ID8gJHlvbWl0Ymx7JCZ9IDogJCYgL2VnOwoJJHlvbWliID1+IHMvW+OCoS3jg7Zd44O8Py8gZXhpc3RzICR5b21pdGJseyQmfSA/ICR5b21pdGJseyQmfSA6ICQmIC9lZzsKCgkjIGNvbXBhcmUgYSBhbmQgYiBpbiByZWFkaW5ncywga2F0YWthbmFzIG9yIG9yaWdpbmFsIHN0cmluZ3MKCSR5b21pYSBjbXAgJHlvbWliIG9yICRrYSBjbXAgJGtiIG9yICRhIGNtcCAkYgp9CgpwcmludCAiJF9cbiIgZm9yIHNvcnQga2FuYWNtcCBxdygK44GM44Gj44GNCuOCrOODrOODvOOCuArjgY3jgYzjgpMK44G144GC44KTCuOCr+ODquODvOODs+ODkuODg+ODiArjgq7jg7Pjgqzjg6Djg4Hjgqfjg4Pjgq8K44GN44GL44KT44GX44KDCuOCq+ODrOODvOODqeOCpOOCuQrjgrfjg7zjgq/jg6/jg7zjg4kK44Kr44O844KtCuOBjuOCk+OBjArjg5XjgqHjg7MK44GMCuOBi+OCjOOBhArjgrfjg7zjgq/jg67jg7zjgrXjg7wK44Kr44Os44O8CuOBi+OBjgrjgY7jgYvjgYQK44Kw44Oq44O844Oz44Kr44Os44O8CuOCruOCrArjgYsK44OX44Ki44O8CuOBjOOBjQrjgqvjgq0KKTs=