Codeforces 143 B. Help Kingdom of Far Far Away 2

問題

与えられた数字を
$をつけて、3桁ごとにカンマで区切り、小数点2桁未満を切り捨てて表示せよ。
数字が負の場合は、さらにその文字列を()でかこって表示せよ。

制約条件

与えられる数字の桁数≦50

方針

指示に従って整形する。
rubyで書いてみた。


rubyで3桁ごとに区切るには、正規表現を使うと楽っぽい。
こんな風に。
a.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse


(?=〜)は、先読み(look ahead)という表現で、
re1(?=re2)は、re2が続くre1にマッチする、という意味だそう。


""で囲まれた文字列の式展開(#{}が式に展開される)を使うともっと簡単に書けるっぽい。

ソースコード

a, b = gets.split(".").map(&:chomp)
ans = ""
if a[0] == "-"
 ans += "("
 a = a[1...a.length]
end
ans += "$"
ans += a.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse
b ||= "0"
ans += "." + (b + "00")[0..1]
ans += ")" if ans[0] == "("
puts ans