-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day11Part1.ps1
82 lines (69 loc) · 1.77 KB
/
Day11Part1.ps1
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
function GetDistance {
param (
$Galaxy1,
$Galaxy2,
$ExpansionRate = 2
)
$Expansion = 0
foreach ($Row in $EmptyRows) {
if ($Row -in $Galaxy1[0]..$Galaxy2[0]) {
$Expansion++
}
}
foreach ($Col in $EmptyCols) {
if ($Col -in $Galaxy1[1]..$Galaxy2[1]) {
$Expansion++
}
}
$Distance = [Math]::Abs($Galaxy1[0] - $Galaxy2[0]) + [Math]::Abs($Galaxy1[1] - $Galaxy2[1])
$Distance += ($Expansion * $ExpansionRate) - $Expansion
$Distance
}
$InMap = Get-Clipboard | ?{$_ -ne ""}
$Map = New-Object System.Collections.ArrayList
$EmptyRows = @()
$RowNum = 0
foreach ($Row in $InMap) {
$Map.Add((New-Object System.Collections.ArrayList)) | Out-Null
$Row = $Row -split "" | ?{$_ -ne ""}
$Map[-1].AddRange($Row)
if (($Row | select -Unique).Count -eq 1) {
$EmptyRows += $RowNum
}
$RowNum++
}
#Find Empty Columns
$EmptyCols = @()
foreach ($Col in 0..$Map[0].Count) {
$Empty = $true
foreach ($Row in $Map) {
$Empty = $Empty -and $Row[$Col] -eq "."
}
if ($Empty) {
$EmptyCols += $Col
}
}
#Find Galaxies
$Galaxies = @{}
$Galaxy = 0
for ($Row = 0; $Row -lt $Map.Count; $Row++) {
for ($Col = 0; $Col -lt $Map[$Row].Count; $Col++) {
if ($Map[$Row][$Col] -eq "#") {
$Galaxies[$Galaxy] = @($Row,$Col)
$Galaxy++
}
}
}
#Find Pairs
$Pairs = @{}
foreach ($Galaxy in $Galaxies.Keys) {
for ($Pair = $Galaxy+1; $Pair -lt $Galaxies.Count; $Pair++) {
$Distance = GetDistance $Galaxies[$Galaxy] $Galaxies[$Pair]
$Pairs[$Galaxy,$Pair -join ","] = $Distance
}
}
$TotalDistance = 0
foreach ($Pair in $Pairs.Keys) {
$TotalDistance += $Pairs[$Pair]
}
$TotalDistance