parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Оптимизация

G_Z 07.04.2017 16:39

@roman2num[s][locals]
$result(0)
$s[^s.upper[]]
$length(^s.length[])

$nums[
	$.M(1000)
	$.D(500)
	$.C(100)
	$.L(50)
	$.X(10)
	$.V(5)
	$.I(1)
]
# reverse $s string 
$s[^for[i](1;$length){^s.mid($length-$i;1)}]

$last(0)

^for[i](0;$length - 1){
	$current[^s.mid($i;1)]
	^if($nums.$current >= $last){
		$result($result + $nums.$current)
	}{
		$result($result - $nums.$current)
	}
	$last($nums.$current)
}
Без лишних итераций и преобразований строк в числа.