This commit is contained in:
Joshua Seigler 2020-12-09 00:46:50 -05:00
parent ebae5e968d
commit 593288b359
3 changed files with 1082 additions and 0 deletions

1000
solutions/day9/input.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,39 @@
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)
const partOne = solveForFirstStar(input)
solveForSecondStar(partOne, input)
}
function solveForFirstStar (input) {
for (let i = 25; i < input.length; i++) {
const n = input[i]
const window = input.slice(i - 25, i)
if (window.filter(x => window.includes(n - x)).length === 0) {
report('Solution 1: ', n)
return n
}
}
}
function solveForSecondStar (partOne, input) {
for (let i = 0; i < input.length; i++) {
if (i < partOne) {
for (let t = 0, j = 0; t < partOne && i + j < input.length; j++) {
t += input[i + j]
if (t === partOne) {
const sequence = input.slice(i, i + j).sort((a, b) => a - b)
report('Solution 2:', sequence[0] + sequence[sequence.length - 1])
return
}
}
}
}
}
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>