Published
Edited
Dec 9, 2019
Insert cell
md`# Advent of Code 2019 Day 4`
Insert cell
powersOfTen = [100000, 10000, 1000, 100, 10, 1];
Insert cell
test = ( num ) => {
let hasDouble = false;
let lastDigit = -1;
let digits = num.toString().split('');
for ( let i = 0; i < 6; i++ ) {
let digit = digits[i];
if ( digit < lastDigit ) return false;
if ( digit == lastDigit ) hasDouble = true;
lastDigit = digit;
}
return hasDouble;
}
Insert cell
test( 111111 )
Insert cell
test( 223450 )
Insert cell
test( 123789 )
Insert cell
test2 = ( num ) => {
let hasDouble = false;
let digits = num.toString().split('');
for ( let i = 0; i < 6; i++ ) {
let digit = digits[i],
lastDigit = digits[i - 1],
nextDigit = digits[i + 1];
if ( digit < lastDigit ) return false;
if ( digit == lastDigit && digit !== nextDigit && digit !== digits[i - 2] && digit !== digits[i + 2] ) hasDouble = true;
}
return hasDouble;
}
Insert cell
test2( 112233 )
Insert cell
test2( 123444 )
Insert cell
test2( 11122 )
Insert cell
{
let day1 = 0,
day2 = 0;
for ( let i = 138241; i <= 674034; i++ ) {
if ( test( i ) ) day1++;
if ( test2( i ) ) day2++;
}
return { day1, day2 }
// Day 2: 1627 too high, added +2 and -2 checks
}
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