Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solve Day 15 #25

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open

Solve Day 15 #25

wants to merge 9 commits into from

Conversation

manuphatak
Copy link
Owner

@manuphatak manuphatak commented Dec 20, 2020

Day 15: Rambunctious Recitation

You catch the airport shuttle and try to book a new flight to your vacation island. Due to the storm, all direct flights have been cancelled, but a route is available to get around the storm. You take it.

While you wait for your flight, you decide to check in with the Elves back at the North Pole. They're playing a memory game and are ever so excited to explain the rules!

In this game, the players take turns saying numbers . They begin by taking turns reading from a list of starting numbers (your puzzle input). Then, each turn consists of considering the most recently spoken number :

  • If that was the first time the number has been spoken, the current player says 0 .
  • Otherwise, the number had been spoken before; the current player announces how many turns apart the number is from when it was previously spoken.

So, after the starting numbers, each turn results in that player speaking aloud either 0 (if the last number is new) or an age (if the last number is a repeat).

For example, suppose the starting numbers are 0,3,6 :

  • Turn 1 : The 1 st number spoken is a starting number, 0 .
  • Turn 2 : The 2 nd number spoken is a starting number, 3 .
  • Turn 3 : The 3 rd number spoken is a starting number, 6 .
  • Turn 4 : Now, consider the last number spoken, 6 . Since that was the first time the number had been spoken, the 4 th number spoken is 0 .
  • Turn 5 : Next, again consider the last number spoken, 0 . Since it had been spoken before, the next number to speak is the difference between the turn number when it was last spoken (the previous turn, 4 ) and the turn number of the time it was most recently spoken before then (turn 1 ). Thus, the 5 th number spoken is 4 - 1 , 3 .
  • Turn 6 : The last number spoken, 3 had also been spoken before, most recently on turns 5 and 2 . So, the 6 th number spoken is 5 - 2 , 3 .
  • Turn 7 : Since 3 was just spoken twice in a row, and the last two turns are 1 turn apart, the 7 th number spoken is 1 .
  • Turn 8 : Since 1 is new, the 8 th number spoken is 0 .
  • Turn 9 : 0 was last spoken on turns 8 and 4 , so the 9 th number spoken is the difference between them, 4 .
  • Turn 10 : 4 is new, so the 10 th number spoken is 0 .

(The game ends when the Elves get sick of playing or dinner is ready, whichever comes first.)

Their question for you is: what will be the 2020 th number spoken? In the example above, the 2020 th number spoken will be 436 .

Here are a few more examples:

  • Given the starting numbers 1,3,2 , the 2020 th number spoken is 1 .
  • Given the starting numbers 2,1,3 , the 2020 th number spoken is 10 .
  • Given the starting numbers 1,2,3 , the 2020 th number spoken is 27 .
  • Given the starting numbers 2,3,1 , the 2020 th number spoken is 78 .
  • Given the starting numbers 3,2,1 , the 2020 th number spoken is 438 .
  • Given the starting numbers 3,1,2 , the 2020 th number spoken is 1836 .

Given your starting numbers, what will be the 2020 th number spoken?

Part Two

Impressed, the Elves issue you a challenge: determine the 30000000 th number spoken. For example, given the same starting numbers as above:

  • Given 0,3,6 , the 30000000 th number spoken is 175594 .
  • Given 1,3,2 , the 30000000 th number spoken is 2578 .
  • Given 2,1,3 , the 30000000 th number spoken is 3544142 .
  • Given 1,2,3 , the 30000000 th number spoken is 261214 .
  • Given 2,3,1 , the 30000000 th number spoken is 6895259 .
  • Given 3,2,1 , the 30000000 th number spoken is 18 .
  • Given 3,1,2 , the 30000000 th number spoken is 362 .

Given your starting numbers, what will be the 30000000 th number spoken?

Link

https://adventofcode.com/2020/day/15

@manuphatak manuphatak self-assigned this Dec 20, 2020
@manuphatak manuphatak added the solution A solution to a problem label Dec 20, 2020
@codecov
Copy link

codecov bot commented Dec 20, 2020

Codecov Report

Merging #25 (6ec6bf7) into main (66a2af0) will decrease coverage by 0.25%.
The diff coverage is 80.00%.

Impacted file tree graph

@@            Coverage Diff             @@
##             main      #25      +/-   ##
==========================================
- Coverage   94.77%   94.52%   -0.26%     
==========================================
  Files          30       31       +1     
  Lines         574      584      +10     
  Branches       34       36       +2     
==========================================
+ Hits          544      552       +8     
- Misses         19       20       +1     
- Partials       11       12       +1     
Impacted Files Coverage Δ
src/Day15/Solution.hs 80.00% <80.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 66a2af0...6ec6bf7. Read the comment docs.

part1 = show . memoryGame 2020 . fromRightOrShowError . parseInts

part2 :: String -> String
part2 = show . memoryGame 30000000 . fromRightOrShowError . parseInts
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: This runs too slowly to check.

* origin/main:
  Update dependencies (#41)
  Remove hspec skip rules from hlint (#39)
  Add hlint rule (#37)
  Solve Day 21 (#35)
  Refactor: Use LANGUAGE TypeApplications (#36)
  Solve Day 12 (#21)
  Solve Day 20 (#34)
  Solve Day 10 (#18)
  Harvest parseInts util (#33)
  Solve Day 18 (#31)
  Solve Day 17 (#30)
  Create Advent.Parser for shared parsers (#29)
  Solve Day 16 (#26)
  Add hspec-discover to PATH (#28)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
solution A solution to a problem
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant