Passed
Push — main ( f4e9d2...4a4379 )
by Jesse
01:41
created

SudokuFactory::make()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php declare(strict_types=1);
2
3
namespace Stratadox\PuzzleSolver\Puzzle\Sudoku;
4
5
use Stratadox\PuzzleSolver\Puzzle;
6
use Stratadox\PuzzleSolver\PuzzleFactory;
7
use function assert;
8
use function count;
9
use function preg_split;
10
use function str_replace;
11
12
final class SudokuFactory implements PuzzleFactory
13
{
14
    public static function make(): PuzzleFactory
15
    {
16
        return new self();
17
    }
18
19
    public function fromString(string $puzzle): Puzzle
20
    {
21
        $puzzle = str_replace([' ', '|', '+', '-'], '', $puzzle);
22
        $numbers = [];
23
        foreach (preg_split("/(\n)|(\r)/", $puzzle) as $line) {
24
            if (empty($line)) {
25
                continue;
26
            }
27
            $row = [];
28
            for ($c = 0; $c < 9; $c++) {
29
                if ($line[$c] === '.') {
30
                    $row[] = null;
31
                } else {
32
                    $row[] = (int) $line[$c];
33
                }
34
            }
35
            $numbers[] = $row;
36
        }
37
        assert(count($numbers) === 9);
38
        return SudokuPuzzle::fromArrays(...$numbers);
39
    }
40
}
41