Public
Edited
Nov 11, 2022
1 star
Insert cell
Insert cell
function parse(input) {
return input
.split('\n\n')
.map(str => str.replaceAll('\n', ' '))
.map(str => str.split(' '))
.map(strs => Object.fromEntries(strs.map(str => str.split(':'))));
}
Insert cell
Insert cell
function isValid(doc) {
return (
doc.hasOwnProperty('byr') &&
doc.hasOwnProperty('iyr') &&
doc.hasOwnProperty('eyr') &&
doc.hasOwnProperty('hgt') &&
doc.hasOwnProperty('hcl') &&
doc.hasOwnProperty('ecl') &&
doc.hasOwnProperty('pid')
);
}
Insert cell
function part1(input) {
return parse(input).filter(isValid).length;
}
Insert cell
Insert cell
Insert cell
Insert cell
function inRange(str, mn, mx) {
return Number(str) >= mn && Number(str) <= mx;
}
Insert cell
Insert cell
function validByr(doc) {
return inRange(doc.byr, 1920, 2002);
}
Insert cell
function validIyr(doc) {
return inRange(doc.iyr, 2010, 2020);
}
Insert cell
function validEyr(doc) {
return inRange(doc.eyr, 2020, 2030);
}
Insert cell
Insert cell
function validHgt(doc) {
const match = doc.hgt.match(/^(\d+)(in|cm)$/);
if (match) {
if (match[2] == "in") {
return inRange(match[1], 59, 76);
} else {
return inRange(match[1], 150, 193);
}
}
return false;
}
Insert cell
Insert cell
function validHcl(doc) {
return doc.hcl.match(/^#([a-f|0-9]{6})$/);
}
Insert cell
function validEcl(doc) {
return doc.ecl.match(/^(amb|blu|brn|gry|grn|hzl|oth)$/);
}
Insert cell
function validPid(doc) {
return doc.pid.match(/^([0-9]{9})$/);
}
Insert cell
Insert cell
function isValid2(doc) {
return (
validByr(doc) &&
validIyr(doc) &&
validEyr(doc) &&
validHgt(doc) &&
validHcl(doc) &&
validEcl(doc) &&
validPid(doc)
);
}
Insert cell
function part2(input) {
return parse(input)
.filter(isValid)
.filter(isValid2).length;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more