owned this note
owned this note
Published
Linked with GitHub
# AoC 2018
```javascript
max=a=>a.reduce((p,c)=>p>c?p:c)
min=a=>a.reduce((p,c)=>p<c?p:c)
sum=a=>a.reduce((p,c)=>+p+ +c)
prod=a=>a.reduce((p,c)=>+p*+c)
arr=(...dim)=>eval(dim.reduce((p,c)=>p+c+').map(_=>Array(','Array(').slice(0,-14)+')'.repeat(dim.length));
fmt=(fmt,typ)=>{
fmt=fmt instanceof RegExp?fmt:new RegExp(fmt, 'g')
a=input.split('\n').map(s=>{
m=s.match(fmt);m.shift();
r=[];for(t of typ){
if(typeof t=='number'||t instanceof Number||t==Number)r.push(+m.shift());
else{if(!(t instanceof Function))t=t.constructor;
r.push(t(m.shift()))}
}
return r
})
}
input=document.body.innerText.slice(0,-1);
```
## Day 1
```javascript
a=input.split('\n')
console.log(a.reduce((p,c)=>+p- -c))
b=[n=0];for(i=0;;i++){n+=a[i%a.length];if(b.includes(n)){console.log('n',n);break};b.push(n)}
```
## Day 2
```javascript
a=input.split('\n')
twos=0,threes=0;for(word of a){i2=0,i3=0;for(letter of'abcdefghijklmnopqrstuvwxyz'){c=word.split(letter).length-1;switch(c){case 2:i2=1;break;case 3:i3=1}}twos+=i2;threes+=i3}
console.log(twos*threes)
s=0;
b=a.sort();for(i=1;i<b.length;i++){p=b[i-1],c=b[i],h=0;str='';for(j=0;j<p.length;j++){if(p[j]==c[j])str+=p[j];else h++;if(h>1)continue}if(h==1){console.log(str);s=1}}
if(!s){b=b.map(s=>s.split('').reverse().join('')).sort();for(i=1;i<b.length;i++){p=b[i-1],c=b[i],h=0;str='';for(j=0;j<p.length;j++){if(p[j]==c[j])str+=p[j];else h++;if(h>1)continue}if(h==1){console.log(str);s=1}}}
```
## Day 3
```javascript
a=input.split('\n').map(s=>s.match(/^#(\d+) @ (\d+),(\d+): (\d+)x(\d+)$/).slice(1).map(n=>+n))
m=Array(1000).fill().map(_=>Array(1000).fill(0));
d=Array(1000).fill().map(_=>Array(1000).fill(0));
cd=0;
for([_,x,y,nx,ny] of a){
for(i=0,j=y;i<ny;i++,j++){
for(k=0,l=x;k<nx;k++,l++){
if(m[j][l]){if(!d[j][l]){d[j][l]=1;cd++}}
else m[j][l]=1
}}}
console.log(cd)
for([_,x,y,nx,ny] of a){
f=0;
for(i=0,j=y;i<ny;i++,j++){
for(k=0,l=x;k<nx;k++,l++){
if(d[j][l]){f=1;break}
}
if(f)break
}
if(!f){console.log(_);break}
}
```
## Day 4
```javascript
a=input.split('\n').map(s=>{arr=s.match(/\[(.+)\].+ (u|a|#\d+)/);return[new Date(arr[1]),arr[2]=='u'?-2:arr[2]=='a'?-1:+arr[2].slice(1)]}).sort((a,b)=>a[0]-b[0]);
tt=[],id=0,sl=0;for(el of a){
if(el[1]==-1)sl=el[0];
else if(el[1]==-2)tt[id]=(tt[id]||0)+(el[0]-sl)/60000;
else id=el[1]
}
g=tt.indexOf(tt.reduce((p,c)=>p>c?p:c))
t=[];m=0;arr=null;for(el of a){
if(el[1]==-1){sl=+el[0];m=el[0].getMinutes()}
else if(el[1]==-2){wa=+el[0];for(i=sl;i<wa;i+=60000,m=(m+1)%60)arr[m]=(arr[m]||0)+1}
else{id=el[1];arr=t[id]=t[id]||[]}
}
console.log(g*t[g].indexOf(t[g].reduce((p,c)=>p>c?p:c)))
max=t.reduce((p,c)=>{c2=c?c.reduce((p,c)=>p>c?p:c,0):0;return p>c2?p:c2});
g=t.findIndex(e=>e&&e.includes(max))
console.log(g*t[g].indexOf(max))
```
## Day 5
```javascript
s=input;
for(i=1;i<s.length;i++){if(s[i-1].toLowerCase()==s[i].toLowerCase()&&s[i-1]!=s[i]){s=s.slice(0,i-1)+s.slice(i+1);i=i>2?i-2:0}}
console.log(s.length)
m=5e5;
for(l of'abcdefghijklmnopqrstuvwxyz'){
s=input.replace(new RegExp(l,'gi'),'');
for(i=1;i<s.length;i++){if(s[i-1].toLowerCase()==s[i].toLowerCase()&&s[i-1]!=s[i]){s=s.slice(0,i-1)+s.slice(i+1);i=i>2?i-2:0}}
if(s.length<m)m=s.length
}
console.log(m)
```
## Day 6
```javascript
a=input.split('\n').map(s=>s.split(', ').map(n=>+n));
areas=Array(a.length).fill(0);
for(j=-100;j<=500;j++)for(i=-100;i<=500;i++){
min=1200,mk=0;for(k=0;k<a.length;k++){l=a[k];md=Math.abs(l[0]-i)+Math.abs(l[1]-j);if(md<min){min=md;mk=k}}areas[mk]++
}
for(j=-100;j<=500;j++){
i=-100;
min=1200,mk=0;for(k=0;k<a.length;k++){l=a[k];md=Math.abs(l[0]-i)+Math.abs(l[1]-j);if(md<min){min=md;mk=k}}areas[mk]=0
i=500;
min=1200,mk=0;for(k=0;k<a.length;k++){l=a[k];md=Math.abs(l[0]-i)+Math.abs(l[1]-j);if(md<min){min=md;mk=k}}areas[mk]=0
}
for(i=-100;i<=500;i++){
j=-100;
min=1200,mk=0;for(k=0;k<a.length;k++){l=a[k];md=Math.abs(l[0]-i)+Math.abs(l[1]-j);if(md<min){min=md;mk=k}}areas[mk]=0
j=500;
min=1200,mk=0;for(k=0;k<a.length;k++){l=a[k];md=Math.abs(l[0]-i)+Math.abs(l[1]-j);if(md<min){min=md;mk=k}}areas[mk]=0
}
console.log(Math.max(...areas))
c=0;for(j=-1000;j<=1000;j++)for(i=-1000;i<=1000;i++){
t=0;for([x,y]of a)t+=Math.abs(x-i)+Math.abs(y-j);if(t<10000)c++}
console.log(c)
```
## Day 7
```javascript
fmt(/Step (.) must be finished before step (.) can begin./,['',''])
d={};for(l of'ABCDEFGHIJKLMNOPQRSTUVWXYZ')d[l]=[]
for(e of a)d[e[1]].push(e[0])
s='';while(1){
for(k of'ABCDEFGHIJKLMNOPQRSTUVWXYZ'){if(d[k]&&!d[k].length){s+=k;delete d[k];for(l in d)d[l]=d[l].filter(e=>e!=k);break}}
f=0;for(k in d)f=1
if(!f)break
}
console.log(s)
t=0;d={};b=[0,0,0,0,0];for(l of'ABCDEFGHIJKLMNOPQRSTUVWXYZ')d[l]=[]
for(e of a)d[e[1]].push(e[0])
s=['','','','',''];
do{
for(i=0;i<5;i++){
if(b[i])continue
for(k of'ABCDEFGHIJKLMNOPQRSTUVWXYZ')if(d[k]&&!d[k].length&&!s.includes(k)){
s[i]=k;b[i]=k.charCodeAt(0)-4;break
}}
for(i=0;i<5;i++)b[i]&&b[i]--
t++
for(i=0;i<5;i++){k=s[i];if(!k||b[i])continue;delete d[k];s[i]='';for(l in d)d[l]=d[l].filter(e=>e!=k)}
if(t>1e4)break
f=0;for(k in d)f=1
}while(f)
console.log(t);
```
## Day 8
```javascript
a=input.split(' ').map(n=>+n);
c=t={c:[],m:[]};
f=o=>{
let c=a.shift(),m=a.shift();
for(let i=0;i<c;i++){let p={c:[],m:[]};o.c.push(p);f(p)}
for(let i=0;i<m;i++)o.m.push(a.shift());
};
f(t);
c=o=>{
let s=0;for(let ch of o.c)s+=c(ch)
for(let m of o.m)s+=m
return s
}
console.log(c(t))
d=o=>o.m.reduce(o.c.length?((a,m)=>a+(o.c[m-1]?d(o.c[m-1]):0)):((a,m)=>a+m),0);
console.log(d(t))
```
## Day 9
```javascript
f=(p,m)=>{
let a=[0],b=Array(p).fill(0),cp=0,l=1,i=1,t=1;
while(t<m){
if(t%23)a.splice(i=(i+2)%l++,0,t)
else b[cp%p]+=t+a.splice(i=(i+l-7)%l--,1)[0]
t++,cp++
}
return Math.max(...b);
}
console.log(f(462,71938))
```
new (linked list):
```javascript
f=(p,m)=>{
let c={v:0,p:null,n:null},b=Array(p).fill(0),cp=0,t=0,tmp;c.p=c.n=c;
while(t<m){
let n={v:++t,p:null,n:null};
if(t%23){c=c.n;n.p=c;n.n=c.n;c.n=c.n.p=n;c=n;}
else{b[cp%p]+=t+(tmp=c.p.p.p.p.p.p.p).v;tmp.n.p=tmp.p;c=tmp.p.n=tmp.n}
cp++
}
return Math.max(...b);
}
console.log(f(462,71938))
console.log(f(462,7193800))
```
## Day 10
```javascript
fmt(/position=< *(-?\d+), *(-?\d+)> velocity=< *(-?\d+), *(-?\d+)>/,[0,0,0,0]);
t=0;for(el of a){t+=el[0]/-el[2]+el[1]/-el[3]}time=t/a.length/2|0;
for(el of a){el[0]+=el[2]*time;el[1]+=el[3]*time;}
f=()=>{i1=a.reduce((p,c)=>p<c[0]?p:c[0],Infinity);
i2=a.reduce((p,c)=>p>c[0]?p:c[0],0);
j1=a.reduce((p,c)=>p<c[1]?p:c[1],Infinity);
j2=a.reduce((p,c)=>p>c[1]?p:c[1],0);
s='';for(j=j1;j<=j2;j++){for(i=i1;i<=i2;i++)s+=a.some(e=>e[0]==i&&e[1]==j)?'#':' ';s+='\n'}
console.log(s);
console.log(time++);
for(el of a){el[0]+=el[2];el[1]+=el[3];}
}
f();f();f();f();f();
```
## Day 11
```javascript
p=(x,y,s)=>Math.floor((((x+10)*y+s)*(x+10)%1000)/100-5);
m=0;mv=[0,0];s=8868;for(i=0;i<297;i++)for(j=0;j<297;j++){t=0;
for(x=0;x<3;x++)for(y=0;y<3;y++)t+=p(i+x,j+y,s);
if(t>m){mv=[i,j];m=t}
}
console.log(mv)
m=0;mv=[0,0];for(i=0;i<300;i++)for(j=0;j<300;j++){
sz=Math.min(300-i,300-j);t=0;for(sz2=0;sz2<sz;sz2++){
for(x=i,y=j+sz2;x<i+sz2;x++)t+=Math.floor(((x+10)*y+8868)*(x+10)%1000/100-5);
for(y=j,x=i+sz2;y<=j+sz2;y++)t+=Math.floor(((x+10)*y+8868)*(x+10)%1000/100-5);
if(t>m){mv=[i,j,sz2+1];m=t}
}
}
console.log(mv)
```
## Day 12
```javascript
i='####....#...######.###.#...##....#.###.#.###.......###.##..##........##..#.#.#..##.##...####.#..##.#'
d=eval('({'+`..#.. => .
#.#.# => #
#.### => #
.##.. => .
#.#.. => #
.#.#. => #
.###. => #
.#### => #
##... => #
#.##. => #
#..## => #
....# => .
###.# => .
##### => #
..... => .
..#.# => .
.#... => #
##.#. => .
.#.## => #
..##. => .
#...# => .
##.## => #
...#. => .
#..#. => .
..### => .
.##.# => .
#.... => .
.#..# => #
####. => .
...## => #
##..# => .
###.. => .`.replace(/^[.#]+/gm,"'$&'").replace(/[#.]$/gm,"'$&',").replace(/ =>/g,':')+'})')
os=0;c='....'+i+'....';for(_=0;_<20;_++){
n='';for(j=0;j<c.length-4;j++)n+=d[c.slice(j,j+5)]
n=n.replace(/\.+$/,'');os+=n.match(/^\.+/)[0].length-2;n=n.replace(/^\.+/,'');
c='....'+n+'....';
}
console.log([...n].map((e,i)=>e=='#'?i+os:0).reduce((p,c)=>p+c))
//repeat for 5e4 and 5e5
```
## Day 13
```javascript
t=input.split('\n').map(s=>[...s]);c=[];
for(j=0;j<t.length;j++)for(i=0;i<t[j].length;i++){
if(/[><v^]/.test(t[j][i])){
c.push([({'^':0,'>':1,'v':2,'<':3})[t[j][i]],0,i,j]);
t[j][i]==(t[j][i-1]+t[j][i+1]+(t[j-1]|[])[i]+(t[j+1]|[])[i]).includes('-')?'-':'|';
}
}
f=0;while(!f){
for(d of c){switch(((d[0]%4)+4)%4){case 0:d[3]--;break;case 1:d[2]++;break;case 2:d[3]++;break;case 3:d[2]--;break}
if(c.some(e=>e[2]==d[2]&&e[3]==d[3]&&e[0]!=d[0])){f=[d[2],d[3]];break}
ch=t[d[3]][d[2]];switch(ch){
case'/':d[0]^=1;break;
case'\\':d[0]^=3;break;
case'+':d[0]+=(d[1]++%3)-1;break;
}
}
c=c.sort((a,b)=>(a[3]-b[3])*150+a[2]-b[2]);
}
console.log(f);
t=input.split('\n').map(s=>[...s]);c=[];
for(j=0;j<t.length;j++)for(i=0;i<t[j].length;i++){
if(/[><v^]/.test(t[j][i])){
c.push([({'^':0,'>':1,'v':2,'<':3})[t[j][i]],0,i,j]);
t[j][i]==(t[j][i-1]+t[j][i+1]+(t[j-1]|[])[i]+(t[j+1]|[])[i]).includes('-')?'-':'|';
}
}
while(c.length>1){
for(d of c){switch(((d[0]%4)+4)%4){case 0:d[3]--;break;case 1:d[2]++;break;case 2:d[3]++;break;case 3:d[2]--;break}
if(c.some(e=>e[2]==d[2]&&e[3]==d[3]&&e[0]!=d[0])){c=c.filter(e=>e[2]!=d[2]&&e[3]!=d[3])}
ch=t[d[3]][d[2]];switch(ch){
case'/':d[0]^=1;break;
case'\\':d[0]^=3;break;
case'+':d[0]+=(d[1]++%3)-1;break;
}
}
c=c.sort((a,b)=>(a[3]-b[3])*150+a[2]-b[2]);
}
console.log(c[0]);
```