-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDay3.scala
More file actions
62 lines (41 loc) · 1.06 KB
/
Day3.scala
File metadata and controls
62 lines (41 loc) · 1.06 KB
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
import scala.io.Source
import scala.collection.immutable._
import scala.io.Codec
import scala.collection.immutable.HashSet
object day3
{
def main(args:Array[String]):Unit ={
val inputFile = Source.fromFile("inputs/03-input.txt")
def priority(c: Char): Int = {
if (c.isLower) {
c.toInt - 'a' + 1
} else {
c.toInt - 'A' + 27
}
}
val rucksacks: Vector[String] = inputFile.getLines.toVector
.map(_.trim)
.flatMap(_.split('\n'))
val part1Result = rucksacks
.map(rucksack => {
val l = rucksack.length
val compartment1 = rucksack.substring(0, l / 2)
val compartment2 = rucksack.substring(l / 2, l)
compartment1.intersect(compartment2).headOption.getOrElse('!')
})
.map(priority)
.sum
val part2Result = rucksacks
.sliding(3, 3)
.map(triplet => {
val rucksack1 = triplet(0)
val rucksack2 = triplet(1)
val rucksack3 = triplet(2)
rucksack1.intersect(rucksack2).filter(rucksack3.contains(_)).headOption.getOrElse('!')
})
.map(priority _)
.sum
println(s"Part 1: $part1Result")
println(s"Part 2: $part2Result")
}
}