Reduktion::addera_kodord()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 16
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 5
nc 3
nop 3
dl 0
loc 16
ccs 6
cts 6
cp 1
crap 4
rs 10
c 0
b 0
f 0
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