#!/usr/bin/perl -w use strict; use utf8; # /=====================================================================\ # # | Copyright (C) 2007 Ioan A. Sucan, Erion Plaku | # # | This program converts numbers up to one million into Albanian words | # # | Released under the GNU General Public License | # # |---------------------------------------------------------------------| # # | Ioan A. Sucan | # # | http://ioan.sucan.info | # # | Erion Plaku #_# | # # | http://www.cs.rice.edu/~plakue/ (o o) | # # \=========================================================ooo==U==ooo=/ # my %numbers = (0 => 'zero', 1 => 'një', 2 => 'dy', 3 => 'tre', 4 => 'katër', 5 => 'pesë', 6 => 'gjashtë', 7 => 'shtatë', 8 => 'tetë', 9 => 'nëntë'); my %tens = (2 => 'njëzet', 3 => 'tridhjetë', 4 => 'dyzet', 5 => 'pesëdhjetë', 6 => 'gjashtëdhjetë', 7 => 'shtatëdhjetë', 8 => 'tetëdhjetë', 9 => 'nëntëdhjetë'); use constant TEN => 10; use constant HUNDRED => 100; use constant THOUSAND => 1000; use constant MILLION => 1000000; use constant BILLION => 1000000000; sub convert { my ($nr) = @_; return $numbers{$nr} if $nr < 10; return 'dhjetë' if $nr == 10; return $numbers{$nr - 10}.'mbëdhjetë' if $nr < 20; if ($nr < HUNDRED) { my $rest = $nr % TEN; my $ten = ($nr - $rest) / TEN; return $tens{$ten}.($rest > 0 ? ' e '.$numbers{$rest} : ''); } if ($nr < THOUSAND) { my $rest = $nr % HUNDRED; my $hundreds = ($nr - $rest) / HUNDRED; return convert($hundreds).'qind'.($rest > 0 ? ' e '.convert($rest) : ''); } if ($nr < MILLION) { my $rest = $nr % THOUSAND; my $thousands = ($nr - $rest) / THOUSAND; return convert($thousands).' mijë'.($rest > 0 ? ' e '.convert($rest) : ''); } if ($nr < BILLION) { my $rest = $nr % MILLION; my $million = ($nr - $rest) / MILLION; return convert($million).' milion'.($rest > 0 ? ' e '.convert($rest) : ''); } return 'një miliard' if $nr == BILLION; 'infinit'; } my $nr = ; chomp($nr); binmode STDOUT, ":utf8"; print $nr < 0 ? 'minus '.convert(-$nr) : convert($nr), "\n";