#!/usr/bin/perl -w use strict; use utf8; # /=====================================================================\ # # | Copyright (C) 2007 Ioan A. Sucan, Nurit Haspel | # # | This program converts numbers up to one billion into Hebrew words | # # | Released under the GNU General Public License | # # |---------------------------------------------------------------------| # # | Nurit Haspel #_# | # # | http://www.cs.rice.edu/~nh2 (o o) | # # \=========================================================ooo==U==ooo=/ # my %numbers_fem = (0 => 'אפס', 1 => 'אחת', 2 => 'שתיים', 3 => 'שלוש', 4 => 'ארבע', 5 => 'חמש', 6 => 'שש', 7 => 'שבע', 8 => 'שמונה', 9 => 'תשע', 10 => 'עשר', 11 => 'אחת עשרה', 12 => 'שתים עשרה', 13 => 'שלוש עשרה', 14 => 'ארבע עשרה', 15 => 'חמש עשרה', 16 => 'שש עשרה', 17 => 'שבע עשרה', 18 => 'שמונה עשרה', 19 => 'תשע עשרה'); my %numbers_mas = (0 => 'אפס', 1 => 'אחד', 2 => 'שניים', 3 => 'שלושה', 4 => 'ארבעה', 5 => 'חמישה', 6 => 'שישה', 7 => 'שבעה', 8 => 'שמונה', 9 => 'תשעה', 10 => 'עשרה', 11 => 'אחד עשר', 12 => 'שנים עשר', 13 => 'שלושה עשר', 14 => 'ארבעה עשר', 15 => 'חמישה עשר', 16 => 'שישה עשר', 17 => 'שבעה עשר', 18 => 'שמונה עשר', 19 => 'תשעה עשר'); my %tens = (2 => 'עשרים', 3 => 'שלושים', 4 => 'ארבעים', 5 => 'חמישים', 6 => 'שישים', 7 => 'שבעים', 8 => 'שמונים', 9 => 'תשעים'); my %hundreds = (1 => 'מאה', 2 => 'מאתיים'); my %thousands = (1 => 'אלף', 2 => 'אלפיים', 3 => 'שלושת', 4 => 'ארבעת', 5 => 'חמשת', 6 => 'ששת', 7 => 'שבעת', 8 => 'שמונת', 9 => 'תשעת', 10 => 'עשרת'); my %millions = (1 => '', 2 => 'שני'); use constant TEN => 10; use constant HUNDRED => 100; use constant THOUSAND => 1000; use constant ELEVENTHOUSAND => 11000; use constant MILLION => 1000000; use constant BILLION => 1000000000; sub convert { my ($nr, $fem) = @_; $fem = 1 unless defined $fem; return $fem ? $numbers_fem{$nr} : $numbers_mas{$nr} if $nr < 20; if ($nr < HUNDRED) { my $rest = $nr % TEN; my $ten = ($nr - $rest) / TEN; return $tens{$ten}.($rest > 0 ? ' ו'. convert($rest,$fem) : ''); } if ($nr < THOUSAND) { my $string; my $ahadot = $nr % 10; my $rest = $nr % HUNDRED; my $hundred = ($nr - $rest) / HUNDRED; if($hundred <= 2) { $string = $hundreds{$hundred} . ' ' ; } else { $string = $numbers_fem{$hundred} . ' מאות ' ; } if(($rest < 20 || $ahadot == 0) && $rest > 0) { $string = $string . 'ו'; } return $string .($rest > 0 ? convert($rest,$fem): ''); } if ($nr < ELEVENTHOUSAND) { my $string; my $ahadot = $nr % 100; my $rest = $nr % THOUSAND; my $thousand = ($nr - $rest) / THOUSAND; if($thousand <= 2) {$string = $thousands{$thousand} . ' '; } else { $string = $thousands{$thousand} . ' אלפים ' ; } if(($rest < 20 || $ahadot == 0) && $rest > 0) { $string = $string . 'ו'; } return $string .($rest > 0 ? convert($rest): '') ; } if ($nr < MILLION) { my $rest = $nr % THOUSAND; my $thousand = ($nr - $rest) / THOUSAND; my $string = convert($thousand,0). ' אלף ' ; if($rest > 0 && $rest < 20 ) { $string = $string . 'ו'; } return $string .($rest > 0 ? convert($rest): '') ; } if ($nr < BILLION) { my $string; my $rest = $nr % MILLION; my $million = ($nr - $rest) / MILLION; my $myFem = ($rest >= 1000 ? 0 : 1); if($million>2) {$string = convert($million,0) . ' '; } elsif($million == 2) {$string = 'שני '; } else { $string = ""; } $string = $string . 'מיליון '; if($rest > 0 && $rest < 20 ) { $string = $string . 'ו'; } return $string . ($rest > 0 ? convert($rest,$myFem) : ''); } return 'מיליארד' if $nr == BILLION; 'אינסוף'; } my $inp = ; chomp($inp); binmode STDOUT, ":utf8"; print $inp < 0 ? 'מינוס '.convert(-$inp) : convert($inp), "\n";