Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Advent of Code in Kotlin: Lessons Learned

Advent of Code in Kotlin: Lessons Learned

An introduction to the Advent of Code and what I learned about solving puzzles in Kotlin.

Todd Ginsberg

January 27, 2021
Tweet

More Decks by Todd Ginsberg

Other Decks in Programming

Transcript

  1. View Slide

  2. View Slide

  3. Photo by Elena Mozhvilo on Unsplash Photo by Markus Spiske on Unsplash

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide


  12. View Slide



  13. View Slide




  14. View Slide

  15. View Slide

  16. 2020 Unofficial Advent of Code Survey - Jeroen Heijmans

    View Slide

  17. View Slide

  18. Daniel Lin (@ephemient)
    Solved every daily puzzle in
    four different languages.
    ephemient.github.io/aoc2020/

    View Slide

  19. Joris Portegies Zwart (@jorispz)
    Solves puzzles using Kotlin
    Multiplatform.
    github.com/jorispz/aoc-2020

    View Slide

  20. Jakub Gwóźdź
    Solved every puzzle and
    provided a visualization.
    In Kotlin!
    jakubgwozdz.github.io/advent-of-
    code-2020/

    View Slide

  21. Courtesy of @FuriousProgramm
    @FuriousProgramm
    Also attempting to solve this
    puzzle.
    Manually.

    View Slide

  22. Since 2017, I have solved
    each puzzle each day, in
    Kotlin and blogged about it.
    https://todd.ginsberg.com

    View Slide

  23. View Slide


  24. View Slide

  25. val letters = listOf("A", "B", "C", "D")
    val numbers = listOf(1, 2, 3, 4)

    View Slide

  26. val letters = listOf("A", "B", "C", "D")
    val numbers = listOf(1, 2, 3, 4)
    letters.zip(numbers)
    // [(A, 1), (B, 2), (C, 3), (D, 4)]
    // List>

    View Slide

  27. val letters = listOf("A", "B", "C", "D")

    View Slide

  28. val letters = listOf("A", "B", "C", "D")
    letters.zipWithNext()
    // [(A, B), (B, C), (C, D)]
    // List>

    View Slide

  29. val letters = listOf("A", "B", "C", "D")

    View Slide

  30. val letters = listOf("A", "B", "C", "D")
    letters.chunked(2)
    // [[A, B], [C, D]]
    // List>

    View Slide

  31. val letters = listOf("A", "B", "C", "D", "E", "F")

    View Slide

  32. val letters = listOf("A", "B", "C", "D", "E", "F")
    letters.windowed(3)
    // [[A, B, C], [B, C, D], [C, D, E], [D, E, F]]
    // List>

    View Slide

  33. val letters = listOf("A", "B", "C", "D", "E", "F")
    letters.windowed(3, 3)
    // [[A, B, C], [D, E, F]]

    View Slide

  34. val letters = listOf("A", "B", "C", "D", "E", "F")
    letters.windowed(4, 4, false)
    // [[A, B, C, D]]

    View Slide

  35. val theString = "Hello"
    theString.padEnd(7, '!')
    // Hello!!

    View Slide

  36. val theString = "Hello"
    theString.padStart(7, '!')
    // !!Hello

    View Slide

  37. val theString = "Left Right"

    View Slide

  38. val theString = "Left Right"
    theString.substringBefore(" ") // "Left"

    View Slide

  39. val theString = "Left Right"
    theString.substringBefore(" ") // "Left"
    theString.substringAfter(" ") // "Right"

    View Slide

  40. val someList = listOf("A", "B", "C")

    View Slide

  41. val someList = listOf("A", "B", "C")
    someList.any { it.length == 1 } // True!

    View Slide

  42. val someList = listOf("A", "B", "C")
    someList.all { it.length == 1 } // True!

    View Slide

  43. val someList = listOf("A", "B", "C")
    someList.none { it.length == 2 } // True!

    View Slide

  44. "3".toInt() // 3

    View Slide

  45. "3".toInt() // 3
    '3'.toInt() // 51

    View Slide

  46. fun Char.asInt(): Int =
    this.toString().toInt()

    View Slide

  47. fun Char.asInt(): Int =
    this.toString().toInt()
    '3'.asInt() // 3

    View Slide



  48. View Slide




  49. View Slide





  50. View Slide






  51. View Slide

  52. View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. View Slide