Names to numbers: Difference between revisions

m
→‎{{header|Perl 6}}: fiddling with regex notation
(→‎{{header|Perl 6}}: entirely new code)
m (→‎{{header|Perl 6}}: fiddling with regex notation)
Line 980:
$str ~~ s:g/(.)(<punct>)/$0 $1/;
 
for %nums.kv -> $word, $number { $str ~~ s:g/ <|w> $word <|w> / $number / }
 
$str ~~ s:g/(\d+)\s+<ws> <?before \d>/$0/ if $str ~~ /(point )\s+<ws>[(\d)\s+<ws>]+$/;
$str ~~ s:g/(\d+) \s+<ws> 'score' / {$0 * 20} /;
$str ~~ s:g/(\d+) \s+<ws> ['dollars,'|'and'] <ws> (\d)/ \$$0 $1/;
 
$str ~~ s:g/ <|w> (\d) \s+<ws> [','|'and']100 <ws> (\s+d\d) <ws> (\d) <ws> (<groups>) <|w> / {($0 * 100 + $1 + $2) * $3} /;
$str ~~ s:g/ <|w> (\d) \s+<ws> 100 \s+<ws> (\d ** 1..2) \s+ <ws> (<groups>) <|w> / {($0 * 100 + $1) * $2} /;
$str ~~ s:g/ <|w> (\d) \s+<ws> 100 \s+ <ws> (<groups>) <|w> / { $0 * 100 * $1} /;
$str ~~ s:g/ <|w> \s+<ws> 100 \s+<ws> (\d\d) \s+<ws> (\d) \s+<ws> (<groups>) <|w> / {($0 + 100 + $1) * $2} /;
$str ~~ s:g/ <|w> \s+<ws> 100 \s+<ws> (\d ** 1..2) \s+ <ws> (<groups>) <|w> / {($0 + 100 ) * $1} /;
$str ~~ s:g/ <|w> \s+<ws> 100 \s+ <ws> (<groups>) <|w> / { $0 * 100} /;
$str ~~ s:g/ <|w> (\d\d) \s+<ws> (\d) \s+ <ws> (<groups>) <|w> / {($0 + $1) * $2} /;
$str ~~ s:g/ <|w> (\d ** 1..2) \s+ <ws> (<groups>) <|w> / { $0 * $1} /;
$str ~~ s:g/ <|w> (\d\d) \s+<ws> (\d) \s+ <ws> 100 \s* <|w> / {($0 + $1) * 100} /;
$str ~~ s:g/ <|w> (\d ** 1..2) \s+ <ws> 100 \s* <|w> / { $0 * 100} /;
$str ~~ s:g/ <|w> (\d ** 2) \s+ <ws>(\d ** 2) <|w> / { $0 * 100 + $1} /;
 
$str ~~ s:g/ <|w> (\d) \s+'100'\s+ ([\d\d) \s+<ws>]* (\d) \s+ (<groups>) <|w> / {($0 * 100 [+] $10.split: +' $2) * $3'} /;
$str ~~ s:g/ <|w> (\d) \s+ 100 \s+ (\d ** 1..2) \s+ (<groups>) <|w> / {($0 * 100 + $1) * $2} /;
$str ~~ s:g/ <|w> (\d) \s+ 100 \s+ (<groups>) <|w> / { $0 * 100 * $1} /;
$str ~~ s:g/ <|w> \s+ 100 \s+ (\d\d) \s+ (\d) \s+ (<groups>) <|w> / {($0 + 100 + $1) * $2} /;
$str ~~ s:g/ <|w> \s+ 100 \s+ (\d ** 1..2) \s+ (<groups>) <|w> / {($0 + 100 ) * $1} /;
$str ~~ s:g/ <|w> \s+ 100 \s+ (<groups>) <|w> / { $0 * 100} /;
$str ~~ s:g/ <|w> (\d\d) \s+ (\d) \s+ (<groups>) <|w> / {($0 + $1) * $2} /;
$str ~~ s:g/ <|w> (\d ** 1..2) \s+ (<groups>) <|w> / { $0 * $1} /;
$str ~~ s:g/ <|w> (\d\d) \s+ (\d) \s+ 100 \s* <|w> / {($0 + $1) * 100} /;
$str ~~ s:g/ <|w> (\d ** 1..2) \s+ 100 \s* <|w> / { $0 * 100} /;
$str ~~ s:g/ <|w> (\d ** 2) \s+ (\d ** 2) <|w> / { $0 * 100 + $1} /;
 
$str ~~ s:g/( [\d+\s+]*) <ws> 'pairs of' \d+ ) / {[+] {$0.split: '* ' 2} /;
$str ~~ s:g/(\d+) \s+<ws> 'centsdozen' / {$0¢ * 12} /;
 
$str ~~ s:g/(\d+) \s+<ws> 'pairs ofpoint' <ws> (\d+) / / {$0.$1 * 2} /;
$str ~~ s:g/(\d+) \s+<ws> 'dozenpercent' / $0% / {$0 * 12} /;
$str ~~ s:g/(\d+) \s+<ws> 'pointdollars' \s+ (\d+) / / \$0.$10 /;
$str ~~ s:g/(\d+) \s+<ws> 'percentcents' / $0%¢ /;
$str ~~ s:g/(\d+) \s+ 'dollars' / \$$0 /;
$str ~~ s:g/(\d+) \s+ 'cents' / $0¢ /;
 
squeeze $str;
2,392

edits