fork download
  1. #!/usr/bin/perl
  2. use 5.016;
  3. use warnings;
  4. use utf8;
  5. binmode STDOUT => ':encoding(utf8)';
  6.  
  7. my @digits = (
  8. ["", "いち", "", "", "", "", "", "", "", ""],
  9. ["", "", "に", "さん", "よん", "ご", "ろく", "なな", "はち", "きゅう"],
  10. ["", "", "", "", "", "", "ろっ", "", "はっ", ""],
  11. ["", "", "", "", "", "", "", "", "はっ", ""],
  12. );
  13.  
  14. my @figures1 = (
  15. ["", "", "", "", "", "", "", "", "", ""],
  16. ["", "じゅう", "", "", "", "", "", "", "", ""],
  17. ["", "ひゃく", "", "びゃく", "", "", "ぴゃく", "", "ぴゃく", ""],
  18. ["", "せん", "", "ぜん", "", "", "", "", "", ""],
  19. );
  20.  
  21. my @figures2 = ("", "まん", "おく", "ちょう", "けい", "がい");
  22.  
  23.  
  24. sub _f2 { $_[0] % 4 == 0 ? $figures2[$_[0] / 4] : "" }
  25. sub _f1 { sub{ $_[0]->[$_[1]] || $_[0]->[1] }->($figures1[$_[0] % 4], $_[1]) }
  26. sub _d { $digits[$_[0] % 4]->[$_[1]] || $digits[1]->[$_[1]] }
  27.  
  28. sub f {
  29. ($_[0] == 0) and return "ぜろ";
  30.  
  31. my @d = split //, reverse shift;
  32.  
  33. map{ _f2(@{$_}), _f1(@{$_}), _d(@{$_}) }
  34. grep{ $_->[1] > 0 }
  35. map{ [$_, $d[$_]] }
  36. (0 .. $#d)
  37. }
  38.  
  39. foreach(
  40. 0, 1, 2, 3, 8, 9, 10, 98, 99, 100, 101, 110, 111, 1100, 11000, 110000,
  41. 300, 500, 600, 800, 900, 3000, 6000, 8000, 9000, 512, 123456789
  42. ){
  43. say $_, " => ", f($_);
  44. }
  45.  
Success #stdin #stdout 0.02s 4936KB
stdin
Standard input is empty
stdout
0 => ぜろ
1 => いち
2 => に
3 => さん
8 => はち
9 => きゅう
10 => じゅう
98 => きゅうじゅうはち
99 => きゅうじゅうきゅう
100 => ひゃく
101 => ひゃくいち
110 => ひゃくじゅう
111 => ひゃくじゅういち
1100 => せんひゃく
11000 => いちまんせん
110000 => じゅういちまん
300 => さんびゃく
500 => ごひゃく
600 => ろっぴゃく
800 => はっぴゃく
900 => きゅうひゃく
3000 => さんぜん
6000 => ろくせん
8000 => はっせん
9000 => きゅうせん
512 => ごひゃくじゅうに
123456789 => いちおくにせんさんびゃくよんじゅうごまんろくせんななひゃくはちじゅうきゅう