結果
問題 | No.518 ローマ数字の和 |
ユーザー |
![]() |
提出日時 | 2022-07-24 11:12:25 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 91 ms / 2,000 ms |
コード長 | 1,098 bytes |
コンパイル時間 | 91 ms |
コンパイル使用メモリ | 7,680 KB |
実行使用メモリ | 12,416 KB |
最終ジャッジ日時 | 2024-07-06 05:12:23 |
合計ジャッジ時間 | 3,037 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
コンパイルメッセージ
Syntax OK
ソースコード
TABLE = {"I" => 1,"V" => 5,"X" => 10,"L" => 50,"C" => 100,"D" => 500,"M" => 1000,}TABLE_R = {1 => "I",5 => "V",10 => "X",50 => "L",100 => "C",500 => "D",1000 => "M",}def parse(str)if str.size == 1TABLE[str]elsestack = []val = 0str.chars.each do |s|stack << sif stack.size >= 2 && TABLE[stack[-2]] < TABLE[stack[-1]]a, b = stack.pop(2)val += TABLE[b] - TABLE[a]endenduntil stack.empty?a = stack.popval += TABLE[a]endvalendenddef encode(val)res = ""[1000, 100, 10, 1].each do |base|d = val / baseval -= d * basenext if d == 0if d <= 3res << TABLE_R[base] * delsif d == 4res << TABLE_R[base] + TABLE_R[5 * base]elsif d == 9res << TABLE_R[base] + TABLE_R[10 * base]elseres << TABLE_R[5 * base] + TABLE_R[base] * (d - 5)endendresendN = gets.to_iR = gets.chomp.splitval = R.map { |r| parse(r) }.sumif val >= 4000puts "ERROR"elseputs encode(val)end