Skip to content

Latest commit

 

History

History
89 lines (70 loc) · 6.79 KB

README.md

File metadata and controls

89 lines (70 loc) · 6.79 KB

Advent of Code 2020: Solutions in Kotlin

My solutions for Advent of Code 2020 in Kotlin programming language. Advent of Code is an Advent calendar of small programming puzzles by Eric Wastl.

Goals

The solutions posted here are my attempts to learn kotlin by solving puzzles. The main implementation goals were:

  • Readability: clean, readable, expressive code
  • Idiomatic: concise, functional-style kotlin
  • Simple: single Day class implementing the Puzzle interface
  • Minimal: shared code (DRY) between the two parts with minimal external dependencies
  • Performance: effective algorithms, preferably solving each puzzle in under a second measured on a [email protected] machine running macOS
    • TODO (Day15, Day23, Day11)

Solutions

Template

Features

  • Gradle setup so you can run a specific day or all days on the command line (see Running)
  • Timings for each part of each day
  • Input for each day automatically exposed in String and List form
  • Junit 5 and AssertJ test libraries included (see Testing)
  • Starter .gitignore

Running

Project is already setup with gradle. To run the app:

  • Navigate to top-level directory on the command line
  • Run ./gradlew run to run all days
  • Run ./gradlew run --args $DAY where $DAY is an integer to run a specific day
  • Run ./gradlew run --args "$DAY1 $DAY2 $ANOTHERDAY" to run a subset of days

Testing

Project includes JUnit and AssertJ and a stub unit test to get you going. To run all tests:

  • Navigate to top-level directory on the command line
  • Run ./gradlew test
  • Add --info, --debug or --stacktrace flags for more output

By default, instantiations of Day classes in tests will use the input files in src/test/resources, not those in src/main/resources. This hopefully gives you flexibility - you could either just copy the real input into src/test/resources if you want to test the actual answers, or you could add a file of test data based on the examples given on the Advent of Code description for the day. The stub Day1Test class shows a test of the functionality of Day1 where the test input differs from the actual input.

Architecture

  • Inputs go into src/main/resources and follow the naming convention input_day_X.txt
  • Solutions go into src/main/kotlin/days and implement the Puzzle interface
  • Solutions follow the naming convention DayX
  • It is assumed all solutions will have two parts
  • It is assumed that the puzzle input is provided through the primary constructor
  • You can use the InputReader methods for reading input
  • To get started simply replace src/main/input_day_1.txt with the real input and the solutions in Day1 with your own