-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsort.pl
More file actions
75 lines (69 loc) · 1.31 KB
/
sort.pl
File metadata and controls
75 lines (69 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/perl
use v5.18;
my %words= (
zero => 0,
one => 1,
two => 2,
three => 3,
four => 4,
five => 5,
six => 6,
seven => 7,
eight => 8,
nine => 9,
ten => 10,
eleven => 11,
twelve => 12,
thirteen => 13,
fourteen => 14,
fifteen => 15,
sixteen => 16,
seventeen => 17,
eighteen => 18,
nineteen => 19,
twenty => 20,
thirty => 30,
fourty => 40,
fifty=> 50,
sixty => 60,
seventy => 70,
eighty => 80,
ninety => 90
);
my %multiply = (
hundred => 100,
thousand => 1000,
milloon => 1000000
);
sub words2num {
my $result = 0;
my $tmp = 0;
my @parts = split(" ",$_);
my $last_multiplier = 1;
my $multiplier = 1;
foreach my $w (@parts){
$multiplier = $multiply{$w} || 1;
if($multiplier > $last_multiplier){
$result = ($result +$tmp) * $multiplier;
$tmp = 0;
}
else {
$tmp*=$multiplier;
}
if($multiplier != 1){
$last_multiplier = $multiplier;
}
$tmp += $words{$w} || 0;
}
return $result + $tmp;
}
my %output;
open(numbers,"<:utf8", "numbers.in") || die "Can't open numbers.in file: $!\n";
while(<numbers>)
{
chomp $_;
$output{$_} = words2num($_);
}
foreach(sort {$output{$b}<=>$output{$a}} keys %output){
say $_;
}