Reduktion   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 76
ccs 27
cts 27
cp 1
rs 10
c 0
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A beräkna_reduktion() 0 9 2
A reducera_kodord() 0 7 2
A addera_kodord() 0 16 4
A beräkna_garderingar() 0 7 4
1
<?php
2
3
/**
4
 * Klass Reduktion.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Moduler\System;
11
12
/**
13
 * Klass Reduktion.
14
 */
15
class Reduktion extends Radera {
16
	/**
17
	 * @var int[] $helgarderingar
18
	 */
19
	public array $helgarderingar;
20
	/**
21
	 * @var int[] $halvgarderingar
22
	 */
23
	public array $halvgarderingar;
24
	/**
25
	 * @var array<string, int> $reducerad_kod
26
	 */
27
	public array $reducerad_kod = [];
28
29
	/**
30
	 * Beräkna garderingar.
31
	 */
32 20
	protected function beräkna_garderingar(): void {
33 20
		$this->helgarderingar = $this->halvgarderingar = [];
34 20
		foreach ($this->reduktion as $i => $konf) {
35 20
			match (true) {
36 20
				$konf === ['1', 'X', '2'] => $this->helgarderingar[] = $i,
37 20
				$konf === ['1', 'X', ''] || $konf === ['1', '', '2'] || $konf === ['', 'X', '2'] => $this->halvgarderingar[] = $i,
38 20
				default => null
39 20
			};
40
		}
41
	}
42
43
	/**
44
	 * Beräkna reduktion.
45
	 * @return array<int, string[]> $reduktion
46
	 */
47 7
	protected function beräkna_reduktion(): array {
48 7
		$reduktion = [];
49 7
		foreach ($this->kod->kod() as $rkod) {
50 7
			$reduktion[] = [
51 7
				substr($rkod, 0, $this->kod->helgarderingar()),
52 7
				substr($rkod, -$this->kod->halvgarderingar())
53 7
			];
54
		}
55 7
		return $reduktion;
56
	}
57
58
	/**
59
	 * Reducera kodord.
60
	 */
61 20
	protected function reducera_kodord(string $kodord): string {
62 20
		$str = '';
63 20
		foreach ([...$this->helgarderingar, ...$this->halvgarderingar] as $gardering) {
64 20
			$str .= $kodord[$gardering];
65
		}
66
67 20
		return $str;
68
	}
69
70
	/**
71
	 * Addera kodord.
72
	 * @param array<int, int[]> $kod_helgarderingar
73
	 * @param array<int, int[]> $kod_halvgarderingar
74
	 */
75 7
	protected function addera_kodord(
76
		int $antal_hg,
77
		array $kod_helgarderingar,
78
		array $kod_halvgarderingar
79
	): void {
80
		/**
81
		 * $kodord[$j]:
82
		 * 1X/X2 = 1, 1X2 = 2, annars 0.
83
		 */
84 7
		foreach ($kod_helgarderingar as $nyckel => $kodord) {
85 7
			if ($antal_hg) {
86 7
				foreach ($kod_halvgarderingar[$nyckel] as $j => $tecken) {
87 7
					$kodord[$j] += $tecken;
88
				}
89
			}
90 7
			$this->reducerad_kod[$this->reducera_kodord(implode('', $kodord))] = 1;
91
		}
92
	}
93
}
94