Difficulty::getNumberOfHoles()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace CoenMooij\Sudoku\Puzzle;
6
7
use CoenMooij\Sudoku\Exception\InvalidDifficultyException;
8
9
class Difficulty
10
{
11
    public const VERY_EASY = 1;
12
    public const EASY = 2;
13
    public const NORMAL = 3;
14
    public const HARD = 4;
15
    public const LEGENDARY = 5;
16
17
    public const NUMBER_OF_HOLES_KEY = 'holes';
18
    public const BOUND_KEY = 'bound';
19
20
    private const LEVELS = [
21
        self::VERY_EASY => [self::NUMBER_OF_HOLES_KEY => 30, self::BOUND_KEY => 5],
22
        self::EASY => [self::NUMBER_OF_HOLES_KEY => 40, self::BOUND_KEY => 4],
23
        self::NORMAL => [self::NUMBER_OF_HOLES_KEY => 50, self::BOUND_KEY => 3],
24
        self::HARD => [self::NUMBER_OF_HOLES_KEY => 60, self::BOUND_KEY => 2],
25
        self::LEGENDARY => [self::NUMBER_OF_HOLES_KEY => 70, self::BOUND_KEY => 0],
26
    ];
27
28
    /**
29
     * @var int
30
     */
31
    private $difficulty;
32
33
    public function __construct(int $difficulty)
34
    {
35
        if (!isset(self::LEVELS[$difficulty])) {
36
            throw new InvalidDifficultyException();
37
        }
38
        $this->difficulty = $difficulty;
39
    }
40
41
    public function getNumberOfHoles(): int
42
    {
43
        return $this->getParameter(self::NUMBER_OF_HOLES_KEY);
44
    }
45
46
    public function getBound(): int
47
    {
48
        return $this->getParameter(self::BOUND_KEY);
49
    }
50
51
    private function getParameter(string $parameter): int
52
    {
53
        return self::LEVELS[$this->difficulty][$parameter];
54
    }
55
}
56