Completed
Push — master ( f11d2c...b71965 )
by Maringa
01:15
created

Converter   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 1
cbo 1
dl 0
loc 46
ccs 20
cts 20
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B toDecimal() 0 32 5
1
<?php
2
3
namespace MaringaDojo\Romanizer;
4
5
use MaringaDojo\Romanizer\Exceptions\MaisDeTresSimbolosIguaisException;
6
7
class Converter
8
{
9
    private $_romanoParaNumero = [
10
        'M' => 1000,
11
        'D' => 500,
12
        'C' => 100,
13
        'L' => 50,
14
        'X' => 10,
15
        'V' => 5,
16
        'I' => 1,
17
    ];
18
19 30
    public function toDecimal($numeroRomano)
20
    {
21 30
        $valor = 0;
22 30
        $valorAnterior = 0;
23 30
        $repeticoes = 0;
24
25 30
        for ($i = strlen($numeroRomano) - 1; $i >= 0; $i--) {
26
27 30
            $letra = $numeroRomano[$i];
28 30
            $valorAtual = $this->_romanoParaNumero[$letra];
29
30 30
            if ($valorAtual == $valorAnterior) {
31 6
                $repeticoes++;
32
33 6
                if ($repeticoes >= 3) {
34 3
                    throw new MaisDeTresSimbolosIguaisException("Os simbolos só podem ser repitidos até três vezes.", 1);
35
                }
36 6
            } else {
37 30
                $repeticoes = 0;
38
            }
39
40 30
            if ($valorAtual >= $valorAnterior) {
41 30
                $valor += $valorAtual;
42 30
            } else {
43 3
                $valor -= $valorAtual;
44
            }
45
46 30
            $valorAnterior = $valorAtual;
47 30
        }
48
49 27
        return $valor;
50
    }
51
52
}
53