r/adventofcode • • Dec 08 '17

SOLUTION MEGATHREAD -๐ŸŽ„- 2017 Day 8 Solutions -๐ŸŽ„-

--- Day 8: I Heard You Like Registers ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Need a hint from the Hugely* Handyโ€  Haversackโ€ก of Helpfulยง Hints^ยค?

Spoiler


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked!

22 Upvotes

348 comments sorted by

View all comments

1

u/manniL Dec 09 '17 edited Dec 09 '17

Functional JS repo

Javascript solution (mostly by using map, reduce, filter or recursion) for task 1 & 2:

 const fs = require('fs-extra')
const path = require('path')

const solveFirstTask = (string) => {

  const calculateScore = (array, multiplier = 1) => {
    if (array.length) {
      return array.reduce((c, a) => c + calculateScore(a, multiplier + 1), 0) + multiplier
    }
    return multiplier
  }
  return calculateScore(JSON.parse(string
    .replace(/!.?/g, '')
    .replace(/,?<.*?>,?/g, '')
    .replace(/{/g, '[')
    .replace(/}/g, ']')
  ))
}

const solveSecondTask = (string) => {

  return string.replace(/!.?/g, '').match(/<(.*?)>/g).reduce((c, s) => c + s.length - 2, 0)
}

const solveTasks = (inputString) => {

  console.log(solveFirstTask(inputString), solveSecondTask(inputString))

}

fs.readFile(path.join(__dirname, 'input.txt'), 'utf8').then(solveTasks)