This commit is contained in:
Paul-Henri Froidmont 2022-12-02 17:54:03 +01:00
parent bfd82a5476
commit 59c8685ff9
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
3 changed files with 2614 additions and 1 deletions

View file

@ -1,2 +1,24 @@
version = "3.0.5" version = "3.5.8"
preset=defaultWithAlign
assumeStandardLibraryStripMargin = true
maxColumn = 100
continuationIndent.callSite = 2
continuationIndent.defnSite = 2
align.arrowEnumeratorGenerator = true
align.openParenDefnSite = false
align.stripMargin = true
rewrite.rules = [RedundantBraces, Imports, RedundantParens, SortModifiers, PreferCurlyFors]
rewrite.redundantBraces.ifElseExpressions = true
rewrite.redundantBraces.stringInterpolation = true
verticalMultiline.atDefnSite = true
verticalMultiline.newlineAfterOpenParen = true
optIn.breaksInsideChains = true
lineEndings = unix
runner.dialect = scala3 runner.dialect = scala3
rewrite.scala3.convertToNewSyntax = true
rewrite.scala3.removeOptionalBraces = yes
rewrite.scala3.insertEndMarkerMinLines = 30
rewrite.scala3.removeEndMarkerMaxLines = 29

2500
aoc/resources/day2Input.txt Normal file

File diff suppressed because it is too large Load diff

91
aoc/src/Day2.scala Normal file
View file

@ -0,0 +1,91 @@
import scala.io.Source
object Day2 extends App:
val input = Source
.fromURL(getClass.getResource("day2Input.txt"))
.mkString
.split('\n')
.toList
enum Move:
case Rock, Paper, Scissors
object Move:
val parse: Char => Move =
case 'A' => Rock
case 'X' => Rock
case 'B' => Paper
case 'Y' => Paper
case 'C' => Scissors
case 'Z' => Scissors
val loosingCounterpart: Move => Move =
case Rock => Scissors
case Paper => Rock
case Scissors => Paper
val winningCounterpart: Move => Move =
case Rock => Paper
case Paper => Scissors
case Scissors => Rock
val points: Move => Int =
case Rock => 1
case Paper => 2
case Scissors => 3
enum MatchResult:
case Win, Loss, Draw
object MatchResult:
val parse: Char => MatchResult =
case 'X' => Loss
case 'Y' => Draw
case 'Z' => Win
object Part1:
val guide = input
.map(game => Game(Move.parse(game.head), Move.parse(game.last)))
import Move.*
import MatchResult.*
final case class Game(opponent: Move, self: Move):
val result =
if self == opponent then Draw
else if Move.loosingCounterpart(self) == opponent then Win
else Loss
val points = result match
case Win => 6 + Move.points(self)
case Loss => Move.points(self)
case Draw => 3 + Move.points(self)
val totalScore = guide.map(_.points).sum
println(s"Part 1: ${Part1.totalScore}")
object Part2:
val guide = input
.map(game => Game(Move.parse(game.head), MatchResult.parse(game.last)))
import Move.*
import MatchResult.*
final case class Game(opponent: Move, targetResult: MatchResult):
val self =
if targetResult == Draw then opponent
else if targetResult == Win then Move.winningCounterpart(opponent)
else Move.loosingCounterpart(opponent)
val points = targetResult match
case Win => 6 + Move.points(self)
case Loss => Move.points(self)
case Draw => 3 + Move.points(self)
val totalScore = guide.map(_.points).sum
println(s"Part 2: ${Part2.totalScore}")
end Day2