You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.7 KiB
JavaScript

const fs = require("fs")
const input = fs.readFileSync("input.txt", "utf-8", err => {
err && console.error(err)
}).split("\n").filter(str => str.length).map(str => str.split("|"))
const isUniqueSegment = digit => {
switch(digit.length){
case 2:
return 1
case 3:
return 7
case 4:
return 4
case 7:
return 8
}
return -1
}
const outputs = input.map(thing =>
thing[1].match(/[a-z]+/g)
)
const inputs = input.map(thing =>
thing[0].match(/[a-z]+/g)
)
let uniqueCount = 0, sum = 0
for (let i = 0; i < inputs.length; i++){
let str = ""
const outputSet = outputs[i]
const inputSet = inputs[i]
const oneSet = inputSet.filter(num => num.length === 2)[0]
const fourSet = inputSet.filter(num => num.length === 4)[0]
outputSet.forEach(input => {
if (isUniqueSegment(input) != -1){
str += isUniqueSegment(input)
uniqueCount++
return
}
// chars in common with one or four string
const fourCount = Array.from(input).filter(c => Array.from(fourSet).indexOf(c) != -1)
const oneCount = Array.from(input).filter(c => Array.from(oneSet).indexOf(c) != -1)
if (input.length === 5){
if (fourCount.length === 2){
str += "2"
} else {
str += oneCount.length === 2 ? "3" : "5"
}
}
if (input.length === 6) {
if (fourCount.length === 4){
str += "9"
} else {
str += oneCount.length === 2 ? "0" : "6"
}
}
})
sum += parseInt(str)
}
console.log(uniqueCount, sum)