Names to numbers: Difference between revisions

Content added Content deleted
m (Added the Sidef language)
m (→‎{{header|Sidef}}: minor code fix)
Line 1,301: Line 1,301:


# Groupings for thousands, millions, ..., quintillions
# Groupings for thousands, millions, ..., quintillions
static groups = /\d{4}|\d{7}|\d{10}|\d{13}|1\d{15}|1\d{18}/;
static groups = /\d{4}|\d{7}|\d{10}|\d{13}|\d{16}|\d{19}/;


# Numeral or e-notation
# Numeral
static num = /\d+|\d+e\+\d+/;
static num = /\d+/;


str.trim!; # remove leading and trailing whitespace
str.trim!; # remove leading and trailing whitespace
Line 1,316: Line 1,316:


# tokenize other punctuation and symbols
# tokenize other punctuation and symbols
str.gsub!(/\$(.)/, {|a| '$ ' + a }); # prefix
str.gsub!(/\$(.)/, {|a| "$ #{a}" }); # prefix
str.gsub!(/(.)([;:%'',])/, {|a,b| a + ' ' + b}); # suffix
str.gsub!(/(.)([;:%'',])/, {|a,b| "#{a} #{b}"}); # suffix


nums.each { |key, value| str.gsub!(Regex.new('\b' + key + '\b'), value) };
nums.each { |key, value| str.gsub!(Regex.new('\b' + key + '\b'), value) };
Line 1,328: Line 1,328:
Regex.new('\b(\d) 100 (\d\d) (' + groups + ')\b'),
Regex.new('\b(\d) 100 (\d\d) (' + groups + ')\b'),
Regex.new('\b(\d) 100 (\d) (' + groups + ')\b'),
Regex.new('\b(\d) 100 (\d) (' + groups + ')\b'),
Regex.new('\b100 (\d\d) (\d) (' + groups + ')\b'),
Regex.new('\b(\d) 100 (' + groups + ')\b'),
Regex.new('\b100 (\d\d) (\d) (' + groups + ')\b'),
Regex.new('\b100 (\d\d) (\d) (' + groups + ')\b'),
Regex.new('\b100 (\d\d) (' + groups + ')\b'),
Regex.new('\b100 (\d\d) (' + groups + ')\b'),
Line 1,351: Line 1,351:
str.gsub!(/\b(\d\d) (\d) 100\b/, {|a,b| (a.to_i + b.to_i) * 100});
str.gsub!(/\b(\d\d) (\d) 100\b/, {|a,b| (a.to_i + b.to_i) * 100});
str.gsub!(/\b(\d{1,2}) 100\b/, {|a| (a.to_i * 100) });
str.gsub!(/\b(\d{1,2}) 100\b/, {|a| (a.to_i * 100) });
str.gsub!(/\b(\d{2}) (\d{2})\b/, {|a,b| a.to_i*100 + b.to_i});
str.gsub!(/\b(\d{2}) (\d{2})\b/, {|a,b| (a.to_i * 100) + b.to_i});
str.gsub!(regex[10], {|a| a.split(' ').map{.to_i}.sum });
str.gsub!(regex[10], {|a| a.split(' ').map{.to_i}.sum });
};</lang>
}</lang>


Usage:
Usage: