This commit is contained in:
Joshua Seigler 2020-12-09 23:21:09 -05:00
parent 593288b359
commit 6aaf867952
3 changed files with 193 additions and 0 deletions

102
solutions/day10/input.txt Normal file
View file

@ -0,0 +1,102 @@
153
17
45
57
16
147
39
121
75
70
85
134
128
115
51
139
44
65
119
168
122
72
105
31
103
89
154
114
55
25
48
38
132
157
84
71
113
143
83
64
109
129
120
100
151
79
125
22
161
167
19
26
118
142
4
158
11
35
56
18
40
7
150
99
54
152
60
27
164
78
47
82
63
46
91
32
135
3
108
10
159
127
69
110
126
133
28
15
104
138
160
98
90
144
1
2
92
41
86
66
95
12

View file

@ -0,0 +1,48 @@
const path = require('path')
const { read, position } = require('promise-path')
const fromHere = position(__dirname)
const report = (...messages) => console.log(`[${require(fromHere('../../package.json')).logName} / ${__dirname.split(path.sep).pop()}]`, ...messages)
async function run () {
const input = (await read(fromHere('input.txt'), 'utf8')).trim().split('\n').map(x => 1 * x).sort((a, b) => b - a)
input.push(0)
input.unshift(input[0] + 3)
solveForFirstStar(input)
solveForSecondStar(input)
}
function solveForFirstStar (input) {
let ones = 0
let threes = 0
input.forEach((s, i, S) => {
const diff = s - S[i + 1]
if (diff === 1) {
ones++
}
if (diff === 3) {
threes++
}
})
const solution = ones * threes
report('Solution 1:', solution)
}
function solveForSecondStar (input) {
const choices = []
input.forEach((s, i, S) => {
choices[i] = i === 0 ? 1 : 0
for (let j = 1; ; j++) {
if (S[i - j] - s <= 3) {
choices[i] += choices[i - j]
} else {
break
}
}
})
const solution = choices[choices.length - 1]
report('Solution 2:', solution)
}
run()

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<title>Solution Viewer</title>
<style>
html, body { font-family: sans-serif; }
pre { border-radius: 0.5em; padding: 0.5em; background: #eee; }
</style>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="viewer">
<h1>Solution Viewer ({{ solutionTitle }})</h1>
<p>For interesting problems; this page can be used as a dynamic viewer.</p>
<h3><a href="./input.txt">input.txt</a></h3>
<pre><code>{{ inputText }}</code></pre>
<h3><a href="./solution.js">solution.js</a></h3>
<pre><code>{{ solutionText }}</code></pre>
</div>
<script>
const app = new Vue({
el: '#viewer',
data: () => {
return {
solutionText: '[Loading]',
inputText: '[Loading]'
}
},
computed: {
solutionTitle() {
const parts = (document.location + '').split('/')
return parts.reverse()[1]
}
},
async mounted () {
this.solutionText = (await axios.get('./solution.js')).data
this.inputText = (await axios.get('./input.txt')).data
}
})
</script>
</body>
</html>