-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay6.php
89 lines (67 loc) · 2.1 KB
/
Day6.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
declare(strict_types=1);
namespace XonneX\AdventOfCode\Y2020\Solutions\Day6;
use JetBrains\PhpStorm\Pure;
use XonneX\AdventOfCode\Core\AbstractSolution;
class Day6 extends AbstractSolution
{
public function __construct()
{
parent::__construct(2020, 6);
}
#[Pure]
protected function partOne(
string $input
): string {
$lines = explode("\n", $input);
$countAnswers = 0;
$groupAnswers = '';
foreach ($lines as $line) {
if ($line !== '') {
$groupAnswers .= $line;
continue;
}
$uniqueGroupAnswers = implode('', array_unique(str_split($groupAnswers)));
$countAnswers += strlen($uniqueGroupAnswers);
$groupAnswers = '';
}
$uniqueGroupAnswers = implode('', array_unique(str_split($groupAnswers)));
$countAnswers += strlen($uniqueGroupAnswers);
return (string) $countAnswers;
}
protected function partTwo(string $input): string
{
$lines = explode("\n", $input);
$countAnswers = 0;
$groupAnswers = [];
foreach ($lines as $line) {
if ($line !== '') {
$groupAnswers[] = $line;
continue;
}
$countAnswers += $this->calculateAllGroupYesAnswers($groupAnswers);
$groupAnswers = [];
}
$countAnswers += $this->calculateAllGroupYesAnswers($groupAnswers);
return (string) $countAnswers;
}
/**
* @param list<string> $answers
* @return int
*/
private function calculateAllGroupYesAnswers(array $answers): int
{
if (count($answers) === 1) {
return strlen(array_pop($answers));
}
$allYesAnswers = str_split(array_shift($answers));
foreach ($answers as $answer) {
foreach ($allYesAnswers as $key => $allYesAnswer) {
if (!str_contains($answer, $allYesAnswer)) {
unset($allYesAnswers[$key]);
}
}
}
return count($allYesAnswers);
}
}