# HG changeset patch # User Steve Losh # Date 1575422107 18000 # Node ID 4835e36925afee1ac0a945e48034beb5fb78a0fc # Parent 908a77e311fa988da05e79eaf0e3761583087bd3 A few more days diff -r 908a77e311fa -r 4835e36925af .lispwords --- a/.lispwords Sun Dec 01 16:01:05 2019 -0500 +++ b/.lispwords Tue Dec 03 20:15:07 2019 -0500 @@ -1,2 +1,2 @@ -(1 let-complex) +(1 let-complex let-result) (3 define-problem) diff -r 908a77e311fa -r 4835e36925af data/2017/10.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2017/10.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,1 @@ +129,154,49,198,200,133,97,254,41,6,2,1,255,0,191,108 diff -r 908a77e311fa -r 4835e36925af data/2017/11.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2017/11.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,1 @@ +s,ne,ne,ne,se,se,se,s,s,s,s,s,s,s,sw,s,s,sw,sw,sw,sw,sw,sw,sw,n,s,ne,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,ne,n,n,nw,nw,n,nw,n,n,nw,n,ne,nw,nw,n,n,n,n,n,s,n,n,n,n,n,n,n,ne,nw,n,nw,n,n,nw,n,n,n,n,se,n,nw,n,n,ne,s,nw,ne,ne,ne,n,ne,ne,ne,nw,sw,n,se,ne,n,ne,ne,nw,ne,ne,sw,se,ne,ne,ne,nw,ne,sw,ne,se,ne,ne,nw,se,ne,ne,ne,ne,ne,se,ne,ne,s,se,ne,s,ne,sw,ne,se,se,nw,se,ne,ne,se,ne,se,ne,se,se,se,se,se,se,se,s,ne,n,s,se,se,se,se,ne,se,se,se,nw,s,s,s,s,se,se,se,se,s,nw,s,se,s,s,s,s,s,sw,s,s,se,se,se,se,se,se,ne,ne,ne,s,ne,se,se,ne,s,ne,s,se,n,s,n,s,n,s,s,se,s,s,sw,s,s,sw,s,s,s,s,s,s,nw,s,s,s,ne,ne,s,n,ne,s,sw,s,sw,s,sw,s,s,s,sw,s,s,s,sw,s,s,sw,sw,s,s,sw,s,s,nw,sw,sw,sw,sw,ne,nw,s,s,nw,s,sw,s,sw,s,sw,sw,sw,sw,sw,s,s,sw,sw,n,s,s,sw,sw,s,s,sw,s,sw,sw,sw,s,s,sw,sw,s,sw,sw,sw,n,sw,ne,nw,s,sw,sw,s,sw,sw,nw,sw,sw,se,sw,ne,sw,sw,sw,sw,sw,sw,ne,n,s,sw,sw,sw,sw,nw,sw,sw,n,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,ne,ne,sw,s,sw,nw,nw,sw,nw,sw,ne,sw,sw,nw,sw,ne,nw,se,sw,sw,ne,sw,nw,sw,n,sw,nw,sw,nw,nw,sw,sw,sw,nw,ne,sw,nw,nw,sw,sw,sw,sw,n,sw,nw,sw,nw,sw,sw,sw,sw,n,nw,nw,nw,nw,nw,sw,sw,nw,se,se,nw,sw,nw,nw,nw,sw,nw,sw,ne,nw,nw,nw,nw,s,nw,sw,s,sw,se,sw,nw,sw,nw,sw,nw,nw,s,s,n,nw,sw,sw,nw,nw,sw,sw,nw,ne,sw,nw,se,nw,se,s,nw,nw,nw,n,nw,nw,sw,nw,ne,ne,nw,nw,nw,sw,nw,nw,se,se,nw,nw,nw,nw,sw,nw,nw,nw,nw,s,nw,nw,nw,nw,n,s,nw,nw,nw,n,nw,nw,nw,n,n,ne,nw,n,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,ne,n,sw,sw,nw,nw,sw,se,nw,n,nw,sw,nw,s,nw,n,ne,nw,nw,nw,n,nw,s,n,nw,n,n,nw,n,se,n,nw,nw,n,nw,nw,ne,n,n,se,se,nw,nw,nw,sw,n,nw,sw,sw,nw,nw,s,n,nw,n,s,n,n,n,nw,nw,n,nw,sw,sw,n,sw,n,n,n,n,n,nw,nw,n,ne,n,ne,sw,n,n,n,nw,n,s,n,n,s,n,n,nw,nw,n,n,n,nw,nw,nw,n,nw,n,n,nw,se,n,nw,n,n,sw,n,n,n,n,nw,n,nw,n,n,se,n,n,n,n,n,n,nw,s,nw,n,n,nw,n,n,n,sw,n,se,nw,n,nw,n,n,n,n,n,n,n,sw,n,nw,n,n,n,n,n,n,se,n,se,n,n,n,n,n,n,nw,n,n,ne,n,n,n,n,sw,n,se,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,n,n,n,n,n,n,n,ne,n,s,ne,nw,s,n,nw,n,n,n,sw,n,n,n,sw,se,ne,n,n,n,s,nw,n,se,n,n,s,sw,n,n,se,n,n,sw,n,n,n,ne,ne,ne,ne,n,n,se,sw,n,n,n,se,n,se,sw,nw,ne,n,n,n,n,nw,n,n,n,n,n,n,ne,n,nw,n,s,n,nw,nw,ne,ne,n,n,n,n,n,n,n,ne,n,n,n,n,n,ne,ne,n,ne,ne,n,n,n,ne,n,ne,n,n,n,n,ne,ne,n,s,ne,ne,n,n,s,n,ne,ne,ne,n,ne,nw,n,ne,n,ne,n,ne,ne,se,ne,s,ne,ne,n,n,ne,s,n,ne,s,n,ne,ne,ne,n,ne,s,se,se,ne,s,sw,ne,se,ne,ne,ne,n,ne,n,ne,n,nw,sw,ne,n,n,ne,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,s,ne,ne,sw,ne,ne,n,n,ne,ne,ne,ne,ne,n,ne,n,ne,ne,ne,ne,se,ne,ne,n,ne,ne,ne,n,sw,ne,ne,n,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,nw,ne,s,ne,ne,ne,ne,ne,ne,ne,sw,n,sw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,se,sw,ne,ne,ne,ne,se,ne,ne,s,ne,s,ne,se,nw,s,n,ne,ne,ne,ne,sw,ne,ne,se,ne,ne,ne,ne,ne,ne,se,ne,se,ne,ne,sw,nw,se,ne,ne,ne,ne,s,ne,n,ne,ne,nw,sw,ne,n,nw,ne,ne,se,ne,ne,ne,ne,se,ne,ne,sw,ne,s,s,se,n,ne,ne,ne,n,s,nw,ne,se,se,s,ne,se,sw,ne,ne,se,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,se,ne,nw,ne,s,se,ne,sw,ne,ne,ne,ne,ne,ne,ne,nw,se,ne,n,s,ne,ne,ne,ne,ne,ne,ne,ne,se,se,ne,nw,ne,ne,sw,sw,ne,ne,sw,ne,se,ne,ne,ne,se,se,ne,ne,ne,ne,se,se,ne,ne,ne,ne,ne,se,ne,ne,s,se,ne,ne,se,ne,ne,ne,se,s,ne,se,se,ne,ne,ne,ne,sw,se,se,s,se,se,ne,ne,se,s,se,se,ne,ne,se,s,ne,se,ne,nw,se,ne,ne,se,se,se,sw,se,ne,se,se,se,ne,ne,se,se,ne,ne,ne,n,ne,ne,ne,nw,se,s,se,s,n,ne,ne,nw,ne,se,ne,ne,s,ne,ne,se,nw,ne,se,se,se,se,se,se,se,ne,se,se,ne,ne,se,se,se,se,n,ne,se,se,se,s,se,ne,ne,sw,se,ne,s,se,n,se,se,ne,ne,se,se,se,n,sw,ne,ne,se,ne,se,se,se,se,se,ne,sw,sw,se,se,ne,ne,se,se,se,se,se,nw,se,se,se,se,sw,se,s,se,sw,se,se,se,se,n,se,ne,s,se,ne,se,se,se,se,se,ne,ne,se,ne,ne,n,se,se,sw,se,se,nw,se,ne,n,se,n,se,sw,se,sw,se,se,se,nw,se,se,se,se,s,nw,sw,nw,se,se,se,ne,se,n,ne,se,se,se,se,se,se,se,se,se,se,nw,se,ne,se,se,se,nw,se,se,se,se,se,se,s,se,se,se,s,se,sw,nw,se,se,sw,se,se,se,se,se,n,se,se,se,se,ne,sw,se,se,sw,se,nw,n,ne,se,s,s,n,s,s,nw,se,ne,se,se,s,se,se,se,se,sw,se,se,se,se,s,se,se,se,se,se,se,se,se,se,se,se,se,s,se,n,n,se,se,se,se,ne,se,se,se,s,se,se,se,se,se,se,se,se,se,se,se,se,s,nw,se,se,s,se,s,se,s,se,se,se,s,se,se,se,se,se,se,n,ne,se,n,s,se,se,sw,nw,nw,se,se,se,se,se,s,se,ne,se,s,se,se,n,s,se,s,se,s,se,s,se,se,s,s,s,se,se,se,s,se,se,s,se,nw,ne,s,s,se,se,se,ne,se,se,s,se,se,se,se,se,nw,se,se,se,ne,se,s,se,se,se,se,se,se,s,s,se,s,nw,s,n,se,s,se,se,se,se,nw,s,se,s,s,se,se,se,ne,s,s,se,s,s,s,se,se,sw,s,se,se,sw,nw,s,s,se,se,se,se,se,ne,s,s,se,s,s,se,s,sw,sw,s,se,s,se,se,s,se,s,n,s,s,nw,nw,s,s,se,s,s,se,se,se,s,s,ne,se,se,n,ne,se,s,nw,s,se,s,s,n,se,se,ne,ne,se,s,s,se,se,se,se,se,se,se,s,se,s,se,s,se,se,s,sw,s,se,sw,se,s,s,n,s,s,s,s,nw,n,s,s,s,se,s,s,s,s,s,se,nw,s,se,s,s,nw,s,se,s,s,s,se,se,s,s,se,se,se,s,s,se,s,s,sw,se,se,se,s,se,se,n,s,s,s,se,s,s,nw,s,ne,nw,se,s,s,se,nw,se,ne,se,se,se,s,s,se,se,nw,se,n,se,s,sw,se,sw,s,se,s,s,se,s,se,s,s,se,s,s,n,s,se,se,s,s,s,s,s,s,sw,ne,s,s,s,s,se,s,se,s,se,s,se,s,s,se,se,s,s,s,s,s,se,nw,se,se,s,se,ne,s,s,nw,nw,s,s,s,se,ne,s,ne,s,s,s,sw,s,se,nw,s,nw,s,n,s,s,se,s,s,ne,se,s,s,s,se,s,s,se,s,nw,s,s,s,se,ne,n,se,s,s,s,n,s,nw,s,ne,s,s,nw,s,s,n,s,s,se,s,se,se,s,s,s,s,s,s,s,se,ne,s,ne,s,s,sw,s,s,s,s,n,s,s,s,s,sw,se,s,nw,ne,ne,s,s,se,s,s,s,s,s,ne,s,s,nw,sw,s,s,s,n,s,ne,se,s,se,s,s,s,s,s,sw,se,nw,s,s,s,s,s,s,s,s,ne,n,s,ne,s,s,s,s,nw,s,se,s,s,s,s,s,se,s,s,s,s,s,s,s,n,s,sw,s,s,s,s,s,se,s,s,sw,se,s,s,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,ne,nw,nw,s,n,s,s,s,s,s,s,s,s,sw,s,s,n,s,s,nw,s,s,s,nw,s,sw,s,nw,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,s,sw,s,s,s,nw,sw,s,s,nw,s,s,se,nw,s,s,s,se,s,se,nw,ne,s,s,s,s,s,s,nw,s,s,s,sw,s,sw,s,s,s,s,s,s,sw,ne,sw,s,n,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,s,s,s,s,sw,s,s,ne,s,s,s,s,s,sw,sw,s,s,s,s,s,s,n,sw,n,ne,s,s,s,nw,nw,s,se,ne,s,se,s,s,s,sw,n,s,s,s,nw,sw,s,sw,ne,s,s,s,s,sw,ne,s,s,s,s,s,sw,s,s,sw,s,s,s,s,s,s,s,sw,s,n,s,s,s,sw,s,s,n,sw,s,n,ne,nw,sw,s,s,sw,s,s,sw,s,n,s,s,sw,s,s,sw,s,se,s,sw,s,s,s,sw,s,s,s,s,sw,s,n,sw,s,s,s,sw,s,sw,s,sw,s,sw,s,s,sw,s,s,s,s,n,s,s,s,s,s,s,sw,s,s,sw,s,sw,s,s,s,s,n,s,sw,s,s,n,nw,s,s,nw,sw,s,sw,sw,s,sw,sw,s,s,sw,sw,nw,sw,nw,s,sw,se,sw,s,s,sw,sw,s,nw,s,s,se,s,s,s,sw,sw,sw,n,s,sw,s,sw,s,se,s,s,s,sw,sw,s,sw,nw,sw,s,s,sw,sw,s,sw,s,s,s,sw,sw,sw,sw,sw,s,s,ne,ne,s,s,sw,se,se,sw,se,nw,sw,sw,s,sw,ne,sw,sw,s,s,sw,nw,sw,s,sw,s,s,sw,s,sw,s,nw,se,s,s,s,sw,s,se,se,ne,sw,sw,sw,s,nw,s,s,n,sw,sw,s,sw,sw,s,sw,sw,s,s,sw,s,s,ne,s,sw,s,sw,sw,sw,n,s,sw,s,s,sw,sw,nw,n,sw,s,nw,s,s,sw,sw,sw,sw,sw,ne,sw,sw,sw,sw,s,s,sw,sw,sw,nw,s,s,s,sw,sw,se,sw,sw,s,s,sw,sw,ne,se,sw,se,sw,s,nw,n,ne,s,sw,se,s,sw,s,sw,s,sw,s,sw,ne,s,sw,n,sw,s,s,nw,sw,se,s,sw,sw,sw,sw,sw,sw,sw,ne,s,s,se,sw,sw,sw,sw,s,se,sw,sw,s,s,s,sw,nw,n,sw,sw,s,ne,s,sw,se,sw,sw,se,sw,sw,sw,s,s,s,s,sw,s,s,sw,se,s,sw,s,nw,s,sw,sw,s,sw,sw,sw,s,se,sw,sw,sw,sw,ne,sw,sw,sw,se,s,n,sw,se,s,sw,n,sw,sw,se,sw,s,s,sw,sw,s,sw,ne,nw,sw,s,sw,sw,s,s,sw,sw,s,sw,sw,sw,sw,sw,sw,s,sw,sw,se,sw,sw,s,sw,sw,se,sw,sw,s,ne,s,sw,ne,s,s,sw,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,s,sw,ne,s,sw,sw,sw,sw,sw,sw,sw,s,n,ne,s,sw,sw,sw,sw,sw,sw,sw,s,nw,sw,sw,n,sw,sw,sw,s,sw,sw,sw,sw,sw,se,ne,sw,s,sw,ne,s,sw,sw,ne,sw,sw,s,n,sw,nw,sw,sw,ne,sw,sw,sw,sw,sw,s,sw,n,sw,sw,s,sw,n,s,s,s,sw,sw,s,sw,se,sw,ne,n,sw,sw,n,sw,s,sw,sw,sw,sw,sw,sw,s,sw,sw,s,s,sw,sw,sw,se,sw,nw,sw,sw,sw,sw,sw,se,sw,sw,sw,sw,sw,s,ne,sw,sw,sw,se,ne,sw,sw,s,sw,sw,ne,nw,s,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,sw,ne,se,sw,sw,se,sw,ne,sw,se,sw,sw,sw,sw,sw,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,sw,sw,ne,sw,sw,sw,nw,sw,n,sw,nw,s,n,n,se,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,nw,sw,sw,se,sw,sw,sw,ne,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,sw,sw,sw,nw,sw,ne,sw,ne,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,nw,n,sw,sw,sw,sw,nw,ne,sw,sw,sw,sw,sw,n,sw,sw,sw,nw,nw,sw,sw,sw,ne,sw,sw,sw,nw,sw,sw,sw,ne,sw,ne,nw,sw,nw,s,sw,sw,sw,ne,nw,sw,s,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,n,sw,sw,sw,ne,sw,nw,se,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,se,sw,sw,sw,nw,sw,sw,s,nw,ne,se,sw,sw,s,sw,sw,sw,se,sw,sw,nw,sw,sw,sw,sw,sw,sw,nw,sw,sw,n,sw,sw,sw,sw,nw,sw,se,sw,sw,sw,s,ne,n,sw,sw,sw,nw,sw,ne,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,nw,s,sw,sw,sw,nw,nw,nw,sw,nw,sw,se,se,sw,sw,sw,sw,sw,sw,ne,nw,sw,sw,nw,nw,sw,sw,ne,sw,se,sw,sw,sw,sw,sw,nw,nw,s,nw,nw,sw,sw,sw,nw,sw,n,ne,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,n,sw,sw,sw,sw,sw,n,nw,ne,nw,nw,ne,nw,nw,sw,sw,sw,sw,ne,nw,sw,sw,s,nw,nw,sw,nw,sw,se,sw,sw,nw,ne,sw,nw,nw,sw,sw,sw,sw,s,s,sw,sw,sw,sw,n,sw,nw,sw,sw,nw,sw,sw,ne,sw,sw,sw,ne,n,sw,sw,sw,n,nw,nw,sw,nw,nw,sw,sw,sw,sw,nw,sw,sw,sw,nw,sw,sw,sw,nw,nw,nw,nw,ne,s,sw,sw,sw,sw,nw,sw,sw,sw,sw,nw,nw,sw,sw,nw,nw,nw,sw,n,sw,nw,se,nw,s,sw,nw,sw,sw,sw,sw,nw,sw,n,nw,nw,nw,se,se,s,nw,sw,ne,sw,sw,nw,ne,s,sw,sw,nw,nw,nw,nw,nw,nw,nw,nw,sw,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,n,nw,sw,nw,sw,nw,ne,sw,se,nw,sw,n,sw,nw,sw,nw,sw,se,nw,nw,nw,sw,ne,nw,sw,s,nw,s,s,nw,nw,ne,ne,nw,sw,nw,sw,nw,sw,n,se,sw,sw,nw,sw,sw,s,nw,ne,ne,nw,sw,nw,nw,s,ne,nw,sw,sw,sw,sw,sw,sw,nw,ne,nw,nw,sw,nw,sw,se,sw,ne,sw,s,ne,sw,sw,nw,sw,nw,ne,sw,nw,nw,sw,nw,nw,se,se,s,nw,sw,sw,nw,nw,nw,nw,nw,nw,sw,sw,sw,ne,s,sw,sw,ne,nw,n,nw,se,nw,sw,se,nw,nw,sw,s,sw,s,sw,sw,sw,sw,sw,se,s,nw,sw,sw,sw,sw,nw,nw,sw,nw,sw,n,sw,nw,n,se,sw,sw,sw,nw,se,sw,s,nw,nw,nw,sw,sw,nw,s,n,nw,sw,sw,nw,sw,nw,nw,nw,se,nw,nw,s,nw,se,nw,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,nw,sw,s,sw,sw,sw,nw,nw,nw,nw,sw,nw,nw,sw,s,nw,nw,nw,sw,sw,nw,sw,nw,se,ne,nw,nw,sw,nw,sw,nw,sw,nw,nw,sw,sw,nw,sw,nw,sw,nw,sw,sw,nw,sw,nw,sw,sw,sw,nw,nw,nw,n,ne,nw,nw,sw,nw,sw,nw,s,nw,nw,sw,sw,sw,sw,sw,nw,sw,n,nw,sw,nw,sw,sw,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,nw,nw,nw,sw,sw,sw,nw,sw,sw,nw,n,sw,n,nw,sw,nw,nw,nw,s,nw,sw,nw,nw,nw,nw,nw,sw,sw,nw,nw,n,n,sw,nw,nw,sw,sw,s,nw,nw,nw,nw,nw,sw,nw,sw,nw,sw,nw,sw,nw,nw,nw,n,nw,sw,nw,nw,s,nw,nw,nw,sw,sw,nw,sw,nw,nw,ne,sw,se,nw,nw,sw,nw,nw,n,sw,sw,sw,nw,nw,nw,nw,nw,nw,n,sw,ne,nw,nw,nw,sw,sw,sw,sw,ne,nw,nw,sw,nw,nw,sw,nw,nw,nw,sw,nw,nw,sw,nw,nw,se,s,s,nw,nw,nw,nw,nw,sw,nw,nw,sw,sw,nw,nw,se,nw,nw,nw,nw,sw,nw,nw,nw,sw,s,sw,se,nw,sw,nw,nw,nw,s,nw,nw,nw,sw,sw,nw,sw,sw,n,nw,nw,sw,nw,nw,sw,nw,s,se,nw,nw,nw,nw,se,ne,nw,se,nw,ne,nw,nw,sw,nw,nw,nw,nw,nw,nw,sw,ne,nw,nw,se,nw,sw,nw,nw,se,ne,nw,nw,nw,nw,s,sw,nw,sw,sw,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,ne,nw,sw,nw,sw,nw,nw,n,sw,nw,nw,nw,ne,sw,nw,nw,nw,nw,sw,nw,nw,nw,se,nw,nw,s,nw,sw,se,sw,nw,nw,nw,s,sw,s,nw,n,se,sw,se,nw,nw,nw,sw,sw,sw,nw,se,nw,nw,nw,nw,nw,nw,sw,ne,nw,nw,nw,nw,nw,sw,nw,sw,s,nw,nw,nw,ne,nw,sw,se,se,nw,sw,sw,nw,n,s,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,nw,ne,n,se,ne,nw,nw,nw,sw,sw,sw,nw,nw,nw,nw,se,nw,se,nw,nw,ne,n,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,ne,nw,nw,sw,nw,nw,nw,nw,nw,sw,se,nw,nw,nw,s,n,nw,nw,nw,s,s,nw,sw,s,nw,nw,se,nw,nw,nw,n,nw,n,nw,nw,nw,nw,nw,nw,ne,sw,nw,nw,nw,s,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,nw,ne,sw,nw,nw,sw,nw,nw,nw,nw,n,nw,nw,se,nw,nw,sw,s,nw,se,nw,n,nw,nw,ne,nw,ne,nw,sw,s,nw,nw,nw,nw,nw,ne,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,ne,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,nw,n,nw,nw,s,ne,nw,nw,nw,n,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,s,nw,se,nw,nw,nw,nw,se,se,nw,nw,nw,nw,nw,nw,s,nw,nw,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,sw,nw,se,nw,nw,nw,sw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,s,nw,n,nw,sw,s,s,n,nw,n,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,ne,sw,nw,s,nw,ne,nw,nw,nw,nw,nw,sw,nw,nw,nw,ne,nw,nw,sw,sw,s,nw,nw,ne,nw,s,nw,nw,n,nw,nw,n,n,nw,nw,nw,nw,nw,nw,se,nw,n,nw,se,nw,s,nw,nw,sw,n,nw,nw,sw,nw,nw,n,nw,ne,nw,se,nw,n,se,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,n,sw,nw,nw,nw,nw,ne,nw,nw,nw,n,n,nw,nw,nw,nw,nw,sw,sw,n,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,ne,nw,sw,n,s,sw,s,nw,se,nw,nw,s,sw,sw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,ne,se,nw,nw,s,nw,nw,n,nw,nw,nw,nw,nw,n,n,nw,n,nw,nw,nw,se,nw,nw,nw,nw,n,nw,sw,nw,n,nw,nw,nw,se,nw,s,nw,s,nw,nw,n,nw,n,n,nw,se,n,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,n,nw,nw,ne,nw,n,nw,n,n,nw,nw,n,nw,ne,ne,se,se,nw,n,nw,nw,nw,n,nw,se,n,s,nw,nw,se,n,nw,nw,sw,s,nw,nw,ne,sw,nw,n,nw,nw,n,nw,ne,ne,sw,n,ne,s,nw,nw,se,nw,nw,nw,nw,n,nw,sw,n,ne,nw,se,nw,nw,nw,se,sw,n,nw,nw,nw,nw,nw,s,n,nw,s,n,nw,nw,nw,ne,se,nw,nw,nw,nw,s,n,nw,nw,n,nw,nw,nw,n,nw,nw,nw,nw,nw,s,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,ne,nw,ne,nw,nw,sw,n,nw,nw,ne,nw,s,nw,n,se,sw,n,sw,s,nw,se,nw,nw,n,ne,nw,nw,nw,nw,nw,nw,se,nw,ne,n,nw,nw,sw,ne,nw,n,n,n,nw,nw,nw,n,nw,n,nw,nw,n,s,nw,nw,nw,nw,ne,nw,s,ne,ne,n,nw,se,nw,n,s,nw,se,n,nw,nw,nw,nw,nw,n,n,nw,nw,nw,sw,n,n,n,n,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,sw,nw,n,nw,n,nw,nw,nw,n,nw,s,nw,se,n,n,nw,n,nw,n,nw,n,n,n,nw,sw,nw,nw,s,n,nw,nw,ne,nw,se,n,nw,nw,n,n,nw,nw,nw,n,se,n,nw,nw,nw,sw,n,nw,nw,nw,n,nw,nw,n,nw,s,n,nw,n,nw,n,nw,n,nw,nw,n,nw,n,nw,n,nw,nw,n,s,sw,nw,nw,nw,nw,nw,n,ne,n,nw,nw,nw,n,s,nw,nw,nw,se,nw,nw,n,se,nw,ne,nw,n,n,nw,nw,se,nw,nw,se,n,n,nw,n,n,nw,sw,ne,nw,nw,nw,sw,nw,ne,n,se,n,ne,nw,sw,nw,n,nw,nw,nw,n,ne,s,nw,nw,sw,nw,se,nw,n,sw,sw,nw,n,n,n,nw,nw,sw,nw,n,nw,ne,n,nw,n,nw,n,nw,se,nw,nw,n,s,se,nw,n,nw,nw,nw,n,n,s,n,nw,nw,nw,sw,s,n,ne,se,nw,ne,n,nw,nw,sw,nw,n,nw,n,nw,nw,s,n,nw,nw,n,n,n,nw,nw,n,ne,n,nw,n,nw,n,ne,s,nw,n,n,nw,nw,n,nw,nw,sw,n,n,nw,nw,n,nw,sw,nw,n,nw,nw,nw,n,n,nw,n,sw,n,n,n,nw,s,se,n,ne,n,nw,n,n,nw,n,n,nw,nw,nw,n,nw,se,nw,sw,n,nw,nw,n,n,nw,n,n,s,nw,nw,n,sw,nw,nw,n,nw,nw,n,ne,s,sw,nw,nw,n,n,n,nw,sw,n,ne,n,nw,nw,ne,sw,n,n,sw,nw,n,n,n,nw,sw,n,nw,nw,n,se,nw,nw,nw,n,nw,nw,n,n,n,se,nw,nw,n,n,sw,n,nw,n,nw,n,n,nw,nw,n,nw,n,s,n,n,n,nw,nw,se,n,nw,n,n,s,nw,n,n,nw,nw,n,s,n,n,nw,n,nw,n,n,n,nw,s,sw,n,sw,nw,ne,nw,nw,nw,se,n,nw,nw,nw,nw,n,nw,nw,n,n,n,nw,nw,nw,n,n,nw,n,n,s,nw,ne,n,se,nw,nw,nw,n,n,nw,n,nw,n,n,nw,n,nw,nw,nw,n,n,s,n,s,n,n,n,n,nw,se,n,nw,n,n,se,sw,n,n,n,nw,nw,nw,nw,nw,s,s,s,nw,ne,nw,n,ne,n,n,n,nw,n,se,n,n,n,n,sw,nw,n,n,n,n,nw,n,s,se,n,n,n,nw,n,n,n,nw,n,se,n,nw,s,se,nw,n,nw,nw,n,nw,n,n,ne,n,n,n,n,n,se,n,n,s,nw,n,nw,sw,s,n,se,ne,n,sw,s,s,nw,ne,nw,sw,n,n,n,n,n,n,s,n,n,nw,nw,n,nw,n,n,sw,ne,nw,n,n,n,se,se,n,n,n,s,n,n,ne,n,nw,nw,n,n,n,n,se,nw,n,n,n,n,n,s,n,nw,s,n,n,n,se,n,n,n,n,nw,n,n,se,n,sw,n,n,n,n,n,n,s,nw,n,n,nw,nw,n,nw,nw,n,n,nw,n,n,nw,ne,n,n,n,nw,nw,n,n,n,n,n,n,n,ne,sw,nw,n,n,n,n,nw,n,n,nw,n,ne,n,n,n,s,se,nw,n,se,n,nw,n,n,se,n,n,nw,n,s,se,n,sw,n,ne,n,nw,n,n,ne,ne,n,n,n,n,n,n,nw,nw,n,n,se,n,nw,n,n,n,ne,nw,ne,n,nw,n,nw,nw,n,n,n,nw,n,se,n,nw,se,n,nw,n,n,n,n,n,n,n,nw,se,n,n,n,nw,n,se,nw,n,n,n,nw,n,sw,n,n,n,nw,nw,ne,n,n,nw,n,n,n,n,s,nw,n,sw,se,n,s,n,n,n,nw,ne,nw,n,s,n,n,n,n,n,n,n,n,n,n,nw,n,nw,nw,n,n,n,n,s,n,n,nw,n,nw,n,n,n,sw,n,n,nw,n,nw,n,n,se,s,n,se,sw,n,n,sw,n,n,n,nw,nw,n,nw,nw,nw,n,n,n,n,n,s,n,se,n,n,s,n,n,nw,n,n,n,n,n,ne,n,n,n,n,se,n,n,n,nw,n,n,nw,n,n,s,n,sw,n,n,n,n,n,n,ne,n,se,nw,nw,n,n,n,ne,n,n,n,n,nw,se,n,n,n,n,n,ne,n,n,n,sw,n,n,se,n,n,nw,n,n,n,ne,n,sw,nw,nw,n,n,n,n,n,n,n,n,sw,n,s,n,n,nw,nw,s,n,n,n,n,n,n,n,nw,n,n,n,n,n,n,n,n,ne,n,ne,n,n,n,n,n,n,se,s,s,n,n,n,ne,n,se,n,n,ne,ne,sw,sw,n,n,n,n,n,ne,s,n,nw,sw,n,s,n,sw,sw,n,ne,ne,n,sw,n,n,sw,ne,n,n,n,n,n,ne,sw,n,n,sw,ne,n,s,ne,nw,n,n,n,n,n,n,n,n,n,n,n,nw,n,n,s,n,n,ne,sw,n,n,nw,sw,s,s,se,s,s,ne,se,se,se,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,ne,sw,ne,n,n,ne,nw,nw,n,sw,nw,n,n,n,n,ne,nw,n,sw,n,nw,ne,nw,nw,nw,sw,n,nw,n,n,n,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,ne,sw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,ne,nw,sw,ne,nw,nw,sw,ne,nw,sw,nw,nw,ne,sw,se,nw,nw,nw,sw,se,sw,sw,sw,sw,nw,sw,nw,sw,s,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,s,s,n,s,sw,s,s,se,sw,n,s,sw,s,s,s,ne,sw,sw,sw,s,s,se,s,s,s,s,s,s,s,s,s,s,s,ne,se,s,s,nw,s,ne,sw,s,s,s,se,s,sw,s,s,s,s,ne,s,sw,s,s,ne,s,se,s,s,s,se,ne,se,se,se,se,se,s,ne,ne,sw,s,se,n,ne,s,se,s,se,s,se,n,s,se,s,nw,se,se,s,se,sw,se,ne,se,nw,se,se,se,se,nw,se,se,se,se,se,se,se,se,n,nw,se,n,se,ne,n,sw,se,sw,se,se,se,se,ne,se,se,n,se,sw,se,ne,se,ne,nw,ne,se,se,ne,se,sw,se,se,sw,se,n,se,n,ne,n,ne,ne,ne,se,se,ne,se,se,nw,se,se,ne,se,n,s,se,ne,ne,n,ne,ne,ne,ne,nw,s,ne,sw,n,ne,ne,ne,nw,se,ne,ne,ne,ne,ne,ne,ne,se,nw,ne,ne,ne,ne,se,ne,ne,se,ne,ne,se,se,se,sw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,n,ne,ne,ne,s,n,ne,se,n,n,s,se,n,ne,ne,nw,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,n,n,ne,sw,ne,n,se,sw,sw,n,n,ne,n,se,n,ne,ne,ne,nw,ne,s,n,se,sw,ne,se,n,ne,se,ne,ne,n,n,n,n,n,n,ne,n,n,n,n,ne,ne,n,ne,s,n,sw,ne,s,ne,s,ne,ne,n,n,n,nw,n,n,ne,ne,ne,n,n,n,n,ne,ne,ne,n,n,n,ne,s,s,n,ne,n,se,n,n,ne,n,n,ne,ne,n,ne,nw,sw,n,n,n,n,n,n,nw,n,n,ne,se,se,nw,se,n,n,n,n,n,nw,n,n,n,n,n,se,nw,ne,n,s,n,n,n,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,sw,n,n,n,nw,n,n,n,nw,se,nw,s,se,n,n,n,nw,s,n,nw,n,n,n,nw,se,n,nw,n,n,n,n,nw,nw,sw,n,n,nw,n,nw,se,n,n,nw,n,n,se,n,n,n,nw,n,nw,n,nw,nw,nw,s,n,n,n,nw,nw,nw,n,n,n,n,n,nw,nw,nw,n,nw,n,nw,nw,nw,ne,nw,nw,n,nw,nw,n,n,n,n,n,n,n,n,nw,n,s,ne,nw,n,nw,nw,nw,s,n,nw,sw,sw,nw,nw,n,nw,nw,nw,nw,se,nw,nw,n,nw,n,sw,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,s,nw,n,sw,nw,n,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,nw,nw,nw,ne,nw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,ne,sw,sw,sw,nw,nw,se,nw,s,s,nw,nw,se,s,se,s,sw,nw,nw,nw,nw,nw,se,sw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,sw,nw,nw,nw,sw,sw,n,n,n,nw,nw,sw,sw,nw,nw,nw,se,sw,sw,sw,sw,nw,sw,nw,se,nw,sw,nw,s,sw,nw,sw,nw,nw,nw,n,sw,se,s,nw,sw,sw,nw,sw,nw,nw,nw,n,se,sw,nw,nw,sw,ne,nw,sw,sw,sw,sw,nw,nw,ne,ne,nw,s,nw,sw,nw,sw,nw,nw,sw,n,nw,sw,nw,nw,nw,nw,sw,n,n,nw,nw,nw,nw,sw,nw,nw,nw,sw,sw,sw,nw,se,sw,sw,sw,sw,nw,nw,sw,nw,sw,se,s,sw,ne,nw,ne,sw,ne,sw,nw,sw,sw,sw,sw,nw,sw,sw,nw,sw,sw,n,nw,sw,sw,sw,se,sw,sw,sw,n,n,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,s,sw,ne,sw,s,nw,sw,sw,n,sw,sw,nw,sw,n,nw,nw,sw,nw,sw,s,sw,ne,sw,n,s,sw,ne,sw,sw,sw,sw,sw,sw,se,sw,sw,sw,se,n,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,nw,sw,sw,s,sw,sw,nw,sw,ne,sw,n,sw,sw,sw,sw,n,s,s,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,se,sw,s,sw,ne,nw,n,s,ne,sw,se,nw,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,ne,sw,sw,sw,sw,sw,n,s,sw,sw,sw,ne,sw,sw,sw,se,sw,nw,sw,sw,sw,se,se,sw,s,sw,sw,sw,n,sw,sw,sw,sw,sw,sw,sw,sw,se,n,s,s,s,s,nw,sw,se,ne,sw,sw,n,nw,sw,s,s,s,nw,sw,s,sw,sw,sw,sw,sw,ne,s,s,sw,sw,s,s,sw,s,s,n,s,sw,s,nw,s,sw,sw,sw,n,s,sw,sw,sw,sw,sw,sw,s,sw,n,s,sw,sw,sw,s,sw,sw,sw,s,sw,s,sw,s,s,sw,sw,s,nw,sw,sw,sw,sw,s,s,sw,se,s,n,sw,s,sw,sw,sw,s,sw,s,sw,s,n,sw,s,s,sw,sw,sw,sw,sw,s,sw,nw,sw,sw,s,s,sw,sw,sw,sw,ne,sw,sw,s,sw,n,sw,sw,sw,s,nw,nw,sw,s,sw,s,s,s,s,sw,ne,s,sw,s,s,sw,sw,sw,nw,s,s,s,sw,nw,n,nw,sw,sw,s,s,sw,sw,se,s,se,sw,nw,s,s,sw,s,s,s,s,sw,s,ne,sw,s,nw,sw,s,s,ne,sw,s,sw,sw,sw,s,sw,s,sw,s,se,s,nw,sw,s,s,sw,s,sw,s,se,s,n,s,ne,s,sw,s,s,sw,nw,s,s,s,sw,s,s,s,s,sw,s,sw,sw,s,n,s,s,s,s,s,sw,ne,nw,se,s,s,s,s,s,s,sw,n,s,nw,n,s,s,s,n,s,s,nw,s,s,s,nw,s,s,nw,s,se,n,n,s,s,n,s,s,sw,sw,s,nw,s,s,s,nw,s,s,s,n,s,s,s,nw,s,s,s,se,s,s,s,ne,se,s,s,s,s,s,sw,n,s,ne,s,s,se,nw,s,s,s,s,s,n,s,s,sw,nw,nw,s,s,n,s,nw,n,s,s,s,ne,sw,s,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,sw,nw,ne,s,s,s,s,s,s,nw,s,s,s,se,s,n,ne,nw,se,ne,s,s,s,n,s,nw,s,s,s,sw,sw,ne,s,se,se,s,s,s,sw,s,s,se,s,s,s,ne,s,s,se,s,s,s,se,n,s,s,s,s,s,ne,s,s,s,s,s,s,s,s,n,s,s,s,s,s,s,s,se,s,s,s,se,s,s,s,s,se,se,s,sw,nw,s,nw,s,s,se,s,n,s,se,n,sw,s,sw,sw,se,s,se,s,s,s,s,s,s,s,s,s,s,se,s,se,sw,s,s,se,s,s,s,s,se,s,s,nw,s,s,n,n,s,s,se,se,se,s,se,nw,s,s,se,s,se,se,s,s,s,nw,nw,se,n,se,n,se,se,s,s,n,s,sw,s,s,s,s,s,se,n,s,se,ne,s,s,s,sw,se,n,s,s,s,s,s,s,s,n,se,s,s,s,s,s,s,s,s,s,se,s,sw,s,se,ne,sw,nw,s,s,nw,s,s,s,se,s,s,sw,se,s,s,s,ne,se,s,s,s,s,s,s,sw,se,nw,se,se,s,sw,s,ne,se,s,se,se,se,s,se,se,se,n,se,sw,s,s,s,se,s,s,se,s,s,s,s,s,se,se,se,s,se,se,se,s,se,se,s,s,s,se,s,s,s,s,se,se,s,s,s,se,se,s,s,n,se,s,s,nw,se,se,se,se,nw,se,s,se,s,s,se,se,n,s,sw,nw,s,s,se,se,se,s,se,n,s,se,s,se,n,se,se,se,se,s,se,nw,s,se,s,n,s,se,se,s,se,se,ne,s,ne,se,se,se,s,nw,se,nw,s,se,s,s,se,se,nw,s,se,s,se,se,sw,se,s,s,se,se,se,ne,se,s,se,s,se,se,se,se,se,se,se,s,se,s,se,se,s,se,s,nw,ne,se,nw,se,se,s,se,se,s,ne,se,se,se,s,se,se,se,se,s,se,se,se,se,s,se,se,se,se,se,se,se,se,s,se,se,se,nw,s,se,s,n,s,se,se,se,se,s,s,se,se,nw,se,n,ne,se,nw,se,s,s,se,se,n,sw,ne,s,se,se,sw,s,s,se,n,se,se,s,ne,s,se,se,se,se,se,sw,se,se,se,se,se,ne,s,ne,se,s,sw,se,se,se,se,se,se,s,se,s,s,se,sw,se,se,se,se,nw,se,se,nw,se,ne,s,se,sw,se,se,se,s,se,sw,se,se,se,se,sw,se,se,sw,se,se,se,se,se,nw,ne,sw,ne,se,s,se,sw,se,se,se,se,se,se,ne,se,sw,se,se,se,se,se,sw,se,se,se,se,se,se,se,se,se,ne,se,se,n,se,n,s,se,se,se,se,se,se,se,nw,se,se,se,sw,se,se,se,se,ne,se,se,se,se,se,se,s,se,se,ne,s,ne,se,s,se,se,nw,se,se,sw,se,se,se,se,se,se,se,se,se,se,nw,ne,se,se,ne,se,se,se,se,se,se,n,se,se,se,se,ne,sw,se,se,ne,se,ne,se,nw,se,se,se,n,se,se,sw,se,s,se,se,se,se,se,se,se,se,ne,se,se,se,s,se,se,se,ne,se,nw,n,se,se,nw,ne,se,se,se,se,se,se,ne,ne,nw,se,se,se,ne,se,se,ne,n,se,se,se,se,ne,se,ne,ne,se,n,nw,se,se,s,ne,se,se,se,ne,se,se,se,se,se,s,ne,se,se,nw,se,se,se,sw,se,n,se,se,se,s,ne,se,se,se,se,se,n,n,se,se,se,se,ne,nw,se,se,ne,n,se,ne,se,se,ne,ne,se,ne,n,s,ne,se,se,se,se,ne,s,s,se,se,se,se,se,ne,se,ne,ne,ne,se,sw,s,se,s,ne,se,ne,ne,se,ne,se,se,se,se,ne,se,se,se,ne,sw,nw,se,se,s,se,nw,se,se,nw,s,se,se,se,se,se,se,nw,se,se,se,nw,ne,ne,se,se,n,se,se,se,nw,se,s,nw,ne,ne,ne,se,ne,se,se,se,ne,se,se,ne,ne,ne,nw,se,se,nw,ne,se,ne,n,se,ne,ne,ne,ne,ne,se,sw,ne,se,s,sw,se,nw,ne,se,se,se,se,se,sw,se,se,s,ne,se,se,ne,se,se,ne,se,nw,ne,se,se,se,se,se,ne,ne,se,se,se,ne,se,se,ne,ne,se,se,n,ne,ne,se,ne,se,se,ne,ne,n,ne,se,ne,se,ne,s,se,ne,se,sw,ne,ne,s,ne,n,ne,se,se,ne,ne,ne,se,se,se,se,sw,se,s,ne,nw,ne,ne,ne,se,se,se,ne,ne,nw,se,se,ne,se,nw,se,nw,se,se,nw,se,se,ne,ne,se,se,se,se,ne,ne,ne,ne,sw,se,ne,ne,se,ne,se,ne,se,se,ne,ne,ne,ne,ne,se,se,se,se,se,sw,ne,se,n,se,n,nw,se,se,sw,se,ne,se,ne,ne,ne,ne,nw,ne,se,se,ne,ne,se,ne,ne,se,ne,ne,ne,ne,se,ne,sw,se,se,n,ne,se,ne,ne,sw,ne,ne,ne,se,se,se,se,se,ne,ne,se,n,se,n,sw,se,se,se,se,ne,se,se,se,se,ne,se,se,se,ne,n,n,ne,se,se,ne,ne,ne,nw,ne,se,ne,se,ne,n,se,ne,nw,ne,se,ne,s,ne,ne,ne,se,ne,sw,ne,se,se,se,ne,ne,ne,se,s,se,ne,n,n,ne,se,se,ne,ne,ne,se,ne,n,ne,s,ne,ne,s,ne,se,ne,se,ne,ne,nw,se,ne,ne,se,nw,ne,ne,se,sw,ne,se,ne,ne,s,se,ne,ne,ne,ne,se,se,ne,n,s,se,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,nw,n,ne,ne,n,se,ne,ne,ne,ne,ne,n,ne,se,ne,ne,se,ne,ne,nw,ne,se,ne,se,s,se,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,nw,ne,se,ne,ne,ne,ne,ne,nw,ne,nw,ne,ne,s,se,n,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,nw,ne,s,sw,ne,ne,ne,ne,ne,ne,ne,se,se,se,ne,n,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,se,ne,n,ne,se,ne,ne,ne,se,n,ne,ne,ne,ne,se,ne,ne,ne,ne,se,sw,ne,ne,se,se,ne,ne,n,nw,ne,se,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,sw,nw,ne,nw,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se diff -r 908a77e311fa -r 4835e36925af data/2017/12.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2017/12.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,2000 @@ +0 <-> 82 +1 <-> 41, 1402 +2 <-> 454, 1690 +3 <-> 533, 1726 +4 <-> 82 +5 <-> 202, 1769 +6 <-> 682, 789, 1295 +7 <-> 1243, 1500 +8 <-> 1630 +9 <-> 847, 1922 +10 <-> 446 +11 <-> 98, 172, 859, 1303 +12 <-> 1748 +13 <-> 334 +14 <-> 850, 1537, 1627, 1747 +15 <-> 194, 722, 1091, 1290 +16 <-> 537, 965, 1642 +17 <-> 371 +18 <-> 422, 436, 1795 +19 <-> 487, 872, 1845 +20 <-> 423, 561, 1313, 1984 +21 <-> 62, 760 +22 <-> 62, 126, 586, 1472 +23 <-> 1057, 1809, 1938 +24 <-> 24, 986 +25 <-> 1758 +26 <-> 1780 +27 <-> 622, 748 +28 <-> 1048, 1617 +29 <-> 451, 751, 866, 1885 +30 <-> 501 +31 <-> 134, 218, 1993 +32 <-> 629 +33 <-> 1774 +34 <-> 1011, 1151 +35 <-> 1432 +36 <-> 202 +37 <-> 664, 1021, 1159 +38 <-> 103, 1123, 1228 +39 <-> 1816 +40 <-> 896 +41 <-> 1, 1905 +42 <-> 224, 824, 1453 +43 <-> 1926 +44 <-> 703 +45 <-> 438 +46 <-> 251, 1886 +47 <-> 709 +48 <-> 425, 1557, 1944 +49 <-> 1245 +50 <-> 1294 +51 <-> 51, 115, 894, 1624 +52 <-> 629, 882 +53 <-> 112, 1007, 1665 +54 <-> 766, 1169, 1349 +55 <-> 55 +56 <-> 56, 1250 +57 <-> 150 +58 <-> 168, 396, 639, 651 +59 <-> 436 +60 <-> 315, 1556 +61 <-> 1681 +62 <-> 21, 22 +63 <-> 385, 970, 979 +64 <-> 314, 1613 +65 <-> 84, 189, 1167 +66 <-> 777, 1097, 1551 +67 <-> 1380 +68 <-> 384, 500, 1490 +69 <-> 882, 1373, 1982 +70 <-> 264, 1149 +71 <-> 731, 1104, 1897 +72 <-> 442, 1118, 1126, 1392 +73 <-> 1241, 1762 +74 <-> 102 +75 <-> 75, 1153, 1226 +76 <-> 901 +77 <-> 794 +78 <-> 432 +79 <-> 79, 1042, 1086, 1471 +80 <-> 303, 621, 989, 1985, 1992 +81 <-> 118 +82 <-> 0, 4, 848, 1240 +83 <-> 845, 1338 +84 <-> 65, 973 +85 <-> 85, 1352 +86 <-> 378, 1671 +87 <-> 87, 587 +88 <-> 243, 1384 +89 <-> 1214, 1498 +90 <-> 477, 1626, 1788 +91 <-> 1036 +92 <-> 409 +93 <-> 724, 819 +94 <-> 869, 1100 +95 <-> 1394, 1523 +96 <-> 1213 +97 <-> 757 +98 <-> 11, 742, 1556 +99 <-> 508 +100 <-> 997 +101 <-> 1338 +102 <-> 74, 305, 1883 +103 <-> 38, 809, 1701 +104 <-> 104 +105 <-> 675, 993 +106 <-> 1082, 1167, 1600 +107 <-> 473, 1096 +108 <-> 762, 951 +109 <-> 1464, 1489 +110 <-> 662, 682, 1536 +111 <-> 457, 1797 +112 <-> 53, 920 +113 <-> 405, 1927 +114 <-> 1252, 1538 +115 <-> 51 +116 <-> 219, 507 +117 <-> 1562 +118 <-> 81, 1815 +119 <-> 524, 1014, 1344 +120 <-> 1141 +121 <-> 1179, 1418, 1924 +122 <-> 684 +123 <-> 1105 +124 <-> 1554 +125 <-> 674 +126 <-> 22, 1106, 1360 +127 <-> 302, 996, 1449 +128 <-> 137, 786 +129 <-> 492 +130 <-> 505, 1783 +131 <-> 945 +132 <-> 1892 +133 <-> 133, 1362 +134 <-> 31, 555, 1184 +135 <-> 603, 705, 1699, 1821 +136 <-> 1940 +137 <-> 128, 504 +138 <-> 1536, 1956 +139 <-> 192, 800, 1643, 1859 +140 <-> 1119, 1464 +141 <-> 905, 1576 +142 <-> 891, 1512 +143 <-> 157, 905 +144 <-> 439 +145 <-> 1464 +146 <-> 1263 +147 <-> 147 +148 <-> 215 +149 <-> 188 +150 <-> 57, 819 +151 <-> 151 +152 <-> 209, 359 +153 <-> 424, 452, 1473 +154 <-> 1206, 1879 +155 <-> 1560 +156 <-> 821 +157 <-> 143, 616, 1507 +158 <-> 492, 641 +159 <-> 599, 1340 +160 <-> 1790 +161 <-> 545 +162 <-> 750 +163 <-> 163 +164 <-> 817, 1059 +165 <-> 755 +166 <-> 927, 1380 +167 <-> 420, 470, 1533, 1843 +168 <-> 58, 860, 1727, 1817 +169 <-> 227, 1970 +170 <-> 670, 809 +171 <-> 661, 737, 1426, 1716 +172 <-> 11 +173 <-> 184, 1756 +174 <-> 1398, 1464, 1844 +175 <-> 292, 619 +176 <-> 1571 +177 <-> 1187, 1293, 1570 +178 <-> 1370, 1491, 1813 +179 <-> 796, 1381 +180 <-> 309, 988 +181 <-> 278, 324 +182 <-> 699, 1563 +183 <-> 411 +184 <-> 173, 1172 +185 <-> 1507 +186 <-> 1156 +187 <-> 1211 +188 <-> 149, 594, 726, 1612 +189 <-> 65, 1482 +190 <-> 1392, 1953 +191 <-> 1184 +192 <-> 139 +193 <-> 1728 +194 <-> 15 +195 <-> 1113, 1573 +196 <-> 593 +197 <-> 398, 1874, 1942 +198 <-> 584, 1412 +199 <-> 199, 1573, 1837 +200 <-> 1932 +201 <-> 678, 825 +202 <-> 5, 36, 511, 1257, 1961 +203 <-> 1003, 1480 +204 <-> 1764 +205 <-> 319 +206 <-> 396 +207 <-> 272 +208 <-> 904, 1267 +209 <-> 152, 535, 1515, 1873 +210 <-> 380, 1132, 1794 +211 <-> 483 +212 <-> 307 +213 <-> 713, 1337 +214 <-> 1117 +215 <-> 148, 869, 1619 +216 <-> 365 +217 <-> 1447, 1628 +218 <-> 31 +219 <-> 116, 383 +220 <-> 220, 382 +221 <-> 391, 648 +222 <-> 746, 1338 +223 <-> 1174 +224 <-> 42, 336 +225 <-> 790, 1476 +226 <-> 719, 1943 +227 <-> 169 +228 <-> 433, 1144 +229 <-> 258, 800 +230 <-> 1920 +231 <-> 1849 +232 <-> 1888 +233 <-> 233, 1317 +234 <-> 575, 1158 +235 <-> 335, 596, 1918 +236 <-> 327, 608, 1191 +237 <-> 628, 1214, 1448 +238 <-> 238 +239 <-> 383, 1039, 1952 +240 <-> 1023, 1203 +241 <-> 263 +242 <-> 242 +243 <-> 88 +244 <-> 397, 1912 +245 <-> 608 +246 <-> 417, 785, 900, 921, 1488 +247 <-> 592, 1846 +248 <-> 248, 770 +249 <-> 249, 1635 +250 <-> 1940 +251 <-> 46 +252 <-> 520, 1972 +253 <-> 1847 +254 <-> 323 +255 <-> 750, 1391 +256 <-> 747 +257 <-> 502, 1003 +258 <-> 229, 1749 +259 <-> 259 +260 <-> 1916 +261 <-> 1268, 1694, 1975 +262 <-> 262 +263 <-> 241, 1213, 1950 +264 <-> 70 +265 <-> 299, 538 +266 <-> 406 +267 <-> 1609 +268 <-> 1561 +269 <-> 492, 1694 +270 <-> 550, 1427, 1779 +271 <-> 675, 1179, 1294 +272 <-> 207, 603, 1485 +273 <-> 459, 556, 767, 992, 1656, 1983 +274 <-> 1002 +275 <-> 1859 +276 <-> 934, 1980 +277 <-> 1325 +278 <-> 181, 1804 +279 <-> 403 +280 <-> 1705, 1778 +281 <-> 281 +282 <-> 1509 +283 <-> 600, 764 +284 <-> 284, 506, 953, 1770 +285 <-> 815 +286 <-> 560, 1176 +287 <-> 495, 775 +288 <-> 1315 +289 <-> 442, 923 +290 <-> 1524, 1789 +291 <-> 516, 550 +292 <-> 175, 1136, 1180 +293 <-> 1855 +294 <-> 350, 490, 1658 +295 <-> 1525 +296 <-> 983 +297 <-> 1709 +298 <-> 1100 +299 <-> 265, 655, 1114 +300 <-> 716, 902 +301 <-> 1496, 1995 +302 <-> 127, 376 +303 <-> 80, 659, 1136, 1229, 1606 +304 <-> 996 +305 <-> 102, 1309, 1728 +306 <-> 306 +307 <-> 212, 342, 1067 +308 <-> 880, 1999 +309 <-> 180, 813 +310 <-> 768 +311 <-> 311 +312 <-> 943, 1355, 1865 +313 <-> 313 +314 <-> 64, 585, 1717 +315 <-> 60 +316 <-> 425 +317 <-> 526, 1484 +318 <-> 1574 +319 <-> 205, 1767 +320 <-> 601, 605 +321 <-> 1829, 1977 +322 <-> 325, 1109 +323 <-> 254, 861, 910, 1130 +324 <-> 181, 466 +325 <-> 322, 766 +326 <-> 423, 1989 +327 <-> 236, 1354 +328 <-> 1912 +329 <-> 957, 1180 +330 <-> 1175, 1350, 1645 +331 <-> 1101, 1390 +332 <-> 444, 1785 +333 <-> 685, 1678 +334 <-> 13, 890 +335 <-> 235, 1737 +336 <-> 224, 552 +337 <-> 337, 913 +338 <-> 479 +339 <-> 339 +340 <-> 1676 +341 <-> 1444 +342 <-> 307 +343 <-> 343, 1271, 1820 +344 <-> 1502, 1658, 1864 +345 <-> 765, 1009, 1324, 1613 +346 <-> 621, 729 +347 <-> 1923 +348 <-> 1385 +349 <-> 1000 +350 <-> 294 +351 <-> 423, 878 +352 <-> 1327 +353 <-> 600, 1781 +354 <-> 1231, 1969 +355 <-> 1560 +356 <-> 984, 1217 +357 <-> 1678 +358 <-> 754, 1989 +359 <-> 152 +360 <-> 886 +361 <-> 1099, 1614 +362 <-> 1584 +363 <-> 1688 +364 <-> 364 +365 <-> 216, 617 +366 <-> 475, 816 +367 <-> 886, 1315 +368 <-> 368 +369 <-> 887 +370 <-> 1129, 1466 +371 <-> 17, 748, 1205 +372 <-> 1739 +373 <-> 1009 +374 <-> 1045, 1502, 1833 +375 <-> 557, 1505 +376 <-> 302, 1217 +377 <-> 494, 619, 690, 732 +378 <-> 86, 1535 +379 <-> 379, 1563 +380 <-> 210, 1816 +381 <-> 578, 722 +382 <-> 220 +383 <-> 219, 239 +384 <-> 68 +385 <-> 63, 1043 +386 <-> 1108, 1570 +387 <-> 1548 +388 <-> 619 +389 <-> 389 +390 <-> 413, 786, 1769, 1906 +391 <-> 221, 396, 733 +392 <-> 714, 1770 +393 <-> 408, 1006 +394 <-> 1174, 1469 +395 <-> 958 +396 <-> 58, 206, 391, 1610 +397 <-> 244 +398 <-> 197, 1649 +399 <-> 647, 972 +400 <-> 1985 +401 <-> 1632 +402 <-> 807 +403 <-> 279, 852, 1624, 1981 +404 <-> 1149 +405 <-> 113 +406 <-> 266, 1336 +407 <-> 818 +408 <-> 393 +409 <-> 92, 1491 +410 <-> 836 +411 <-> 183, 963, 1308 +412 <-> 1542 +413 <-> 390 +414 <-> 1602 +415 <-> 1419 +416 <-> 1137, 1288, 1494 +417 <-> 246 +418 <-> 503, 525, 1005, 1447 +419 <-> 607, 1310 +420 <-> 167, 1078, 1404 +421 <-> 650 +422 <-> 18, 829 +423 <-> 20, 326, 351 +424 <-> 153, 1759 +425 <-> 48, 316, 1211, 1279, 1366 +426 <-> 709, 1799, 1913 +427 <-> 693, 1568 +428 <-> 1199, 1914 +429 <-> 1790 +430 <-> 469 +431 <-> 1730 +432 <-> 78, 677 +433 <-> 228, 543, 842 +434 <-> 1216, 1562 +435 <-> 554 +436 <-> 18, 59, 804, 918 +437 <-> 1065, 1274, 1560 +438 <-> 45, 1647 +439 <-> 144, 1327 +440 <-> 816, 1768, 1893 +441 <-> 930 +442 <-> 72, 289, 1555, 1778 +443 <-> 791, 1964 +444 <-> 332, 717, 1715 +445 <-> 445, 1335, 1944 +446 <-> 10, 961 +447 <-> 499, 1067, 1363 +448 <-> 1150, 1229 +449 <-> 573, 972, 1670 +450 <-> 964, 1731 +451 <-> 29, 815, 1148 +452 <-> 153, 1221 +453 <-> 1012, 1525 +454 <-> 2, 891, 1708 +455 <-> 877 +456 <-> 1850 +457 <-> 111, 544, 640 +458 <-> 458 +459 <-> 273, 495, 792 +460 <-> 1201, 1319 +461 <-> 461, 598, 1513 +462 <-> 1166, 1495 +463 <-> 542, 708, 1209 +464 <-> 770 +465 <-> 1847 +466 <-> 324, 1052 +467 <-> 708, 915 +468 <-> 1501, 1715 +469 <-> 430, 576, 1369 +470 <-> 167, 1618 +471 <-> 1875 +472 <-> 1212 +473 <-> 107, 1426 +474 <-> 484, 665 +475 <-> 366, 1262 +476 <-> 476, 1380 +477 <-> 90 +478 <-> 1688, 1811, 1894, 1949 +479 <-> 338, 1429, 1836 +480 <-> 1394 +481 <-> 1391 +482 <-> 1477 +483 <-> 211, 736 +484 <-> 474, 1815 +485 <-> 1034 +486 <-> 1682 +487 <-> 19, 1722, 1773 +488 <-> 567, 1066, 1873 +489 <-> 581, 1962 +490 <-> 294 +491 <-> 760 +492 <-> 129, 158, 269, 1099 +493 <-> 1250 +494 <-> 377 +495 <-> 287, 459 +496 <-> 1051 +497 <-> 513, 633, 1189, 1454 +498 <-> 1080, 1530 +499 <-> 447, 647 +500 <-> 68, 1329, 1719 +501 <-> 30, 1563, 1700 +502 <-> 257 +503 <-> 418, 1521 +504 <-> 137 +505 <-> 130 +506 <-> 284, 1830 +507 <-> 116, 507 +508 <-> 99, 508, 709, 877 +509 <-> 693 +510 <-> 1648 +511 <-> 202, 1127, 1510 +512 <-> 720 +513 <-> 497 +514 <-> 752, 1430 +515 <-> 1503 +516 <-> 291, 1284, 1891 +517 <-> 994 +518 <-> 1406 +519 <-> 1287 +520 <-> 252 +521 <-> 1253, 1292, 1530 +522 <-> 904 +523 <-> 1628 +524 <-> 119, 778, 1034, 1145 +525 <-> 418, 1264 +526 <-> 317, 971 +527 <-> 1566 +528 <-> 695, 1841 +529 <-> 732 +530 <-> 1972 +531 <-> 1036 +532 <-> 784 +533 <-> 3, 533, 961, 1018 +534 <-> 981, 1147, 1326 +535 <-> 209 +536 <-> 1343, 1410, 1750 +537 <-> 16 +538 <-> 265, 795 +539 <-> 1055, 1430 +540 <-> 855 +541 <-> 896, 1170 +542 <-> 463, 652, 1302, 1833 +543 <-> 433 +544 <-> 457, 890 +545 <-> 161, 791 +546 <-> 857, 1267 +547 <-> 1979 +548 <-> 580, 1988 +549 <-> 1256 +550 <-> 270, 291, 586 +551 <-> 646 +552 <-> 336 +553 <-> 930, 1754 +554 <-> 435, 1758, 1816 +555 <-> 134 +556 <-> 273 +557 <-> 375 +558 <-> 745 +559 <-> 809 +560 <-> 286 +561 <-> 20 +562 <-> 1766 +563 <-> 563 +564 <-> 564, 658 +565 <-> 1492 +566 <-> 775 +567 <-> 488 +568 <-> 1636, 1730 +569 <-> 579, 678, 740 +570 <-> 1362 +571 <-> 846, 1230 +572 <-> 1063, 1821 +573 <-> 449 +574 <-> 1946, 1961 +575 <-> 234, 674 +576 <-> 469, 1152, 1890 +577 <-> 938, 1072, 1237, 1386 +578 <-> 381 +579 <-> 569 +580 <-> 548, 944, 1464 +581 <-> 489 +582 <-> 635 +583 <-> 1378, 1891 +584 <-> 198, 1102 +585 <-> 314, 1803 +586 <-> 22, 550, 630, 1674 +587 <-> 87, 1025 +588 <-> 1562, 1588 +589 <-> 1175, 1666 +590 <-> 809, 1912 +591 <-> 1363, 1581 +592 <-> 247, 686 +593 <-> 196, 912 +594 <-> 188, 728, 1376 +595 <-> 595 +596 <-> 235, 1500, 1758 +597 <-> 1159 +598 <-> 461 +599 <-> 159, 599, 1377 +600 <-> 283, 353 +601 <-> 320, 1514, 1792 +602 <-> 815 +603 <-> 135, 272, 955, 1583, 1848 +604 <-> 1878 +605 <-> 320, 1100, 1585 +606 <-> 1590 +607 <-> 419, 1798 +608 <-> 236, 245 +609 <-> 1298, 1743 +610 <-> 1676 +611 <-> 830 +612 <-> 1479, 1942 +613 <-> 1899 +614 <-> 1633 +615 <-> 962, 1348, 1827 +616 <-> 157 +617 <-> 365, 624, 756, 1017, 1278, 1894 +618 <-> 709 +619 <-> 175, 377, 388 +620 <-> 720, 1414, 1809 +621 <-> 80, 346 +622 <-> 27, 1244, 1473, 1714 +623 <-> 972 +624 <-> 617, 1272, 1743 +625 <-> 670, 1458 +626 <-> 1260, 1580, 1615 +627 <-> 1223, 1984 +628 <-> 237 +629 <-> 32, 52, 1398 +630 <-> 586 +631 <-> 1881 +632 <-> 802 +633 <-> 497, 1231 +634 <-> 1816 +635 <-> 582, 1927 +636 <-> 1435 +637 <-> 926 +638 <-> 804 +639 <-> 58, 1904, 1965 +640 <-> 457, 999 +641 <-> 158 +642 <-> 1561 +643 <-> 959 +644 <-> 644 +645 <-> 1589 +646 <-> 551, 1733 +647 <-> 399, 499 +648 <-> 221, 1416 +649 <-> 1481 +650 <-> 421, 1536 +651 <-> 58 +652 <-> 542, 1409 +653 <-> 708, 1051 +654 <-> 805, 1474, 1948 +655 <-> 299, 1679 +656 <-> 1011 +657 <-> 1137, 1887 +658 <-> 564 +659 <-> 303 +660 <-> 996, 1875 +661 <-> 171 +662 <-> 110, 939, 1522, 1634 +663 <-> 911 +664 <-> 37 +665 <-> 474, 1911 +666 <-> 808 +667 <-> 1208, 1831 +668 <-> 926, 1219, 1302 +669 <-> 797, 1041, 1599 +670 <-> 170, 625 +671 <-> 671 +672 <-> 1845 +673 <-> 1682 +674 <-> 125, 575, 1112, 1519, 1967 +675 <-> 105, 271, 1825 +676 <-> 1648 +677 <-> 432, 677, 1079 +678 <-> 201, 569, 1088, 1693 +679 <-> 1118 +680 <-> 780, 1089 +681 <-> 681 +682 <-> 6, 110 +683 <-> 683 +684 <-> 122, 1180 +685 <-> 333, 1101, 1672 +686 <-> 592 +687 <-> 984, 1423, 1800 +688 <-> 1498 +689 <-> 1013 +690 <-> 377 +691 <-> 1091 +692 <-> 726 +693 <-> 427, 509, 1854 +694 <-> 1795 +695 <-> 528, 1031 +696 <-> 1557 +697 <-> 869 +698 <-> 698, 1480 +699 <-> 182, 1595 +700 <-> 1210 +701 <-> 1381, 1955 +702 <-> 1039 +703 <-> 44, 741 +704 <-> 1901 +705 <-> 135, 1695 +706 <-> 1532 +707 <-> 812, 1085 +708 <-> 463, 467, 653 +709 <-> 47, 426, 508, 618 +710 <-> 794, 1215 +711 <-> 1476, 1514 +712 <-> 824, 1000 +713 <-> 213 +714 <-> 392, 1444 +715 <-> 753, 1956 +716 <-> 300 +717 <-> 444, 1209, 1872 +718 <-> 1886 +719 <-> 226 +720 <-> 512, 620, 1243 +721 <-> 981, 1177 +722 <-> 15, 381, 1311, 1708, 1869 +723 <-> 1582 +724 <-> 93, 1689 +725 <-> 1151 +726 <-> 188, 692 +727 <-> 1646, 1750 +728 <-> 594, 1125 +729 <-> 346, 1102 +730 <-> 1300 +731 <-> 71, 1523, 1839 +732 <-> 377, 529 +733 <-> 391, 1111 +734 <-> 734 +735 <-> 1120 +736 <-> 483, 1478 +737 <-> 171, 1141, 1680 +738 <-> 1782 +739 <-> 990, 1227 +740 <-> 569, 758, 1340 +741 <-> 703, 741 +742 <-> 98, 785, 1586 +743 <-> 839, 1288 +744 <-> 1401, 1571 +745 <-> 558, 1137, 1308 +746 <-> 222, 746 +747 <-> 256, 1246, 1359, 1626 +748 <-> 27, 371, 1391 +749 <-> 819 +750 <-> 162, 255, 1316 +751 <-> 29 +752 <-> 514 +753 <-> 715, 1087 +754 <-> 358, 1566 +755 <-> 165, 1652 +756 <-> 617 +757 <-> 97, 928, 1905 +758 <-> 740, 1342 +759 <-> 1675, 1882 +760 <-> 21, 491 +761 <-> 1912 +762 <-> 108, 809 +763 <-> 1553 +764 <-> 283 +765 <-> 345, 1025 +766 <-> 54, 325, 1545, 1908 +767 <-> 273, 1605, 1718 +768 <-> 310, 1298 +769 <-> 1316 +770 <-> 248, 464, 1300 +771 <-> 771 +772 <-> 826 +773 <-> 1779 +774 <-> 800, 1516 +775 <-> 287, 566 +776 <-> 1190 +777 <-> 66, 1367 +778 <-> 524 +779 <-> 1504, 1782 +780 <-> 680, 1299 +781 <-> 1866 +782 <-> 950, 1395 +783 <-> 1814 +784 <-> 532, 1921 +785 <-> 246, 742 +786 <-> 128, 390 +787 <-> 787 +788 <-> 1772, 1876, 1943 +789 <-> 6 +790 <-> 225, 1117, 1384 +791 <-> 443, 545, 1822 +792 <-> 459, 1810 +793 <-> 1026 +794 <-> 77, 710 +795 <-> 538, 795 +796 <-> 179, 851, 1462, 1619 +797 <-> 669, 1093 +798 <-> 1789 +799 <-> 1088, 1269, 1999 +800 <-> 139, 229, 774, 1218 +801 <-> 1110 +802 <-> 632, 802 +803 <-> 1359 +804 <-> 436, 638 +805 <-> 654 +806 <-> 1605 +807 <-> 402, 1353 +808 <-> 666, 934, 1248, 1888 +809 <-> 103, 170, 559, 590, 762, 1139 +810 <-> 1352 +811 <-> 1766, 1937 +812 <-> 707, 1410, 1618 +813 <-> 309, 813 +814 <-> 1461, 1696, 1725 +815 <-> 285, 451, 602 +816 <-> 366, 440, 1034 +817 <-> 164, 1157 +818 <-> 407, 1341, 1699 +819 <-> 93, 150, 749, 1353, 1453 +820 <-> 1051 +821 <-> 156, 1807 +822 <-> 1951 +823 <-> 856 +824 <-> 42, 712, 1260 +825 <-> 201 +826 <-> 772, 856, 897 +827 <-> 827, 1550 +828 <-> 937, 1933, 1947 +829 <-> 422, 831 +830 <-> 611, 1049, 1314 +831 <-> 829, 1141 +832 <-> 907 +833 <-> 1754 +834 <-> 1418 +835 <-> 1509 +836 <-> 410, 1005 +837 <-> 837, 1160 +838 <-> 995, 1154 +839 <-> 743, 1637 +840 <-> 854 +841 <-> 1221 +842 <-> 433, 1611, 1848 +843 <-> 1978 +844 <-> 1575 +845 <-> 83 +846 <-> 571, 987, 1683 +847 <-> 9, 847 +848 <-> 82, 848, 1016, 1237 +849 <-> 1266 +850 <-> 14, 936 +851 <-> 796, 983 +852 <-> 403 +853 <-> 984 +854 <-> 840, 854 +855 <-> 540, 1762 +856 <-> 823, 826, 856, 1195 +857 <-> 546, 1098 +858 <-> 858, 1752, 1771 +859 <-> 11 +860 <-> 168 +861 <-> 323 +862 <-> 1716, 1772 +863 <-> 1754 +864 <-> 1261, 1724, 1762, 1903 +865 <-> 895, 1073, 1205 +866 <-> 29, 1781, 1845 +867 <-> 1457, 1598, 1993 +868 <-> 868, 1723 +869 <-> 94, 215, 697, 903 +870 <-> 945 +871 <-> 1215, 1668 +872 <-> 19 +873 <-> 1028 +874 <-> 954, 1932 +875 <-> 1686, 1718 +876 <-> 1358, 1888, 1947 +877 <-> 455, 508 +878 <-> 351 +879 <-> 1737 +880 <-> 308 +881 <-> 881, 1526 +882 <-> 52, 69 +883 <-> 928 +884 <-> 885, 1507 +885 <-> 884 +886 <-> 360, 367, 1029, 1116 +887 <-> 369, 1747 +888 <-> 1530 +889 <-> 1460, 1478, 1745 +890 <-> 334, 544, 890, 1004 +891 <-> 142, 454, 1299 +892 <-> 1095 +893 <-> 1149, 1469, 1594 +894 <-> 51, 1819, 1987 +895 <-> 865 +896 <-> 40, 541, 896 +897 <-> 826 +898 <-> 898, 1199 +899 <-> 1592 +900 <-> 246 +901 <-> 76, 1626 +902 <-> 300, 918 +903 <-> 869 +904 <-> 208, 522 +905 <-> 141, 143 +906 <-> 1064, 1650 +907 <-> 832, 1751, 1982 +908 <-> 908, 1866 +909 <-> 1222 +910 <-> 323, 1638 +911 <-> 663, 1165 +912 <-> 593, 1765 +913 <-> 337 +914 <-> 1218, 1458, 1931 +915 <-> 467, 1486 +916 <-> 1650 +917 <-> 1881 +918 <-> 436, 902, 1046 +919 <-> 1350, 1919 +920 <-> 112, 1551 +921 <-> 246, 1028, 1620 +922 <-> 960, 1650 +923 <-> 289, 1977 +924 <-> 924, 1991 +925 <-> 925, 1957 +926 <-> 637, 668, 1393 +927 <-> 166, 1420 +928 <-> 757, 883 +929 <-> 1569, 1575 +930 <-> 441, 553, 1179 +931 <-> 1891 +932 <-> 972 +933 <-> 1851 +934 <-> 276, 808 +935 <-> 1404 +936 <-> 850 +937 <-> 828, 1808 +938 <-> 577 +939 <-> 662 +940 <-> 1437 +941 <-> 1076 +942 <-> 1123 +943 <-> 312, 1008 +944 <-> 580 +945 <-> 131, 870, 945, 1929 +946 <-> 1200 +947 <-> 947, 966 +948 <-> 1221, 1498 +949 <-> 949, 1069 +950 <-> 782, 1263 +951 <-> 108, 1729 +952 <-> 1997 +953 <-> 284 +954 <-> 874 +955 <-> 603 +956 <-> 969 +957 <-> 329, 1633 +958 <-> 395, 958 +959 <-> 643, 1634 +960 <-> 922 +961 <-> 446, 533, 1521 +962 <-> 615, 1870 +963 <-> 411 +964 <-> 450, 1179 +965 <-> 16, 1699 +966 <-> 947, 1702 +967 <-> 1588 +968 <-> 1140, 1550, 1996 +969 <-> 956, 1158 +970 <-> 63 +971 <-> 526, 1375 +972 <-> 399, 449, 623, 932 +973 <-> 84, 1133, 1249, 1834 +974 <-> 1775 +975 <-> 975 +976 <-> 1822 +977 <-> 1978 +978 <-> 1451 +979 <-> 63, 1186, 1564 +980 <-> 1984 +981 <-> 534, 721, 1430, 1532 +982 <-> 1094, 1605, 1698 +983 <-> 296, 851, 1604, 1867 +984 <-> 356, 687, 853, 1881 +985 <-> 985, 1425 +986 <-> 24 +987 <-> 846 +988 <-> 180 +989 <-> 80, 1520, 1622 +990 <-> 739, 1339 +991 <-> 1767 +992 <-> 273 +993 <-> 105 +994 <-> 517, 1629 +995 <-> 838, 1945 +996 <-> 127, 304, 660 +997 <-> 100, 1275, 1909 +998 <-> 1492 +999 <-> 640 +1000 <-> 349, 712 +1001 <-> 1193, 1286, 1348 +1002 <-> 274, 1002, 1337, 1970 +1003 <-> 203, 257 +1004 <-> 890 +1005 <-> 418, 836 +1006 <-> 393, 1955 +1007 <-> 53 +1008 <-> 943 +1009 <-> 345, 373 +1010 <-> 1242 +1011 <-> 34, 656, 1445 +1012 <-> 453, 1012 +1013 <-> 689, 1999 +1014 <-> 119, 1014, 1431 +1015 <-> 1671 +1016 <-> 848 +1017 <-> 617, 1807 +1018 <-> 533 +1019 <-> 1037 +1020 <-> 1579 +1021 <-> 37 +1022 <-> 1022 +1023 <-> 240, 1823 +1024 <-> 1024 +1025 <-> 587, 765 +1026 <-> 793, 1026 +1027 <-> 1265 +1028 <-> 873, 921, 1736 +1029 <-> 886, 1235 +1030 <-> 1207 +1031 <-> 695, 1618 +1032 <-> 1139 +1033 <-> 1987 +1034 <-> 485, 524, 816, 1167 +1035 <-> 1220, 1892 +1036 <-> 91, 531, 1761 +1037 <-> 1019, 1467, 1801 +1038 <-> 1082 +1039 <-> 239, 702 +1040 <-> 1199 +1041 <-> 669, 1544, 1547, 1664 +1042 <-> 79, 1835 +1043 <-> 385, 1159, 1507 +1044 <-> 1753, 1938 +1045 <-> 374, 1175 +1046 <-> 918, 1071, 1280 +1047 <-> 1328, 1879 +1048 <-> 28, 1081, 1331, 1381 +1049 <-> 830, 1060 +1050 <-> 1166 +1051 <-> 496, 653, 820 +1052 <-> 466, 1356, 1395 +1053 <-> 1598 +1054 <-> 1054 +1055 <-> 539 +1056 <-> 1548, 1987 +1057 <-> 23 +1058 <-> 1888 +1059 <-> 164, 1423, 1493 +1060 <-> 1049, 1473 +1061 <-> 1276, 1638, 1763 +1062 <-> 1360, 1829 +1063 <-> 572 +1064 <-> 906 +1065 <-> 437, 1707, 1826 +1066 <-> 488 +1067 <-> 307, 447, 1299 +1068 <-> 1068, 1485 +1069 <-> 949 +1070 <-> 1070 +1071 <-> 1046 +1072 <-> 577, 1469 +1073 <-> 865 +1074 <-> 1161, 1927 +1075 <-> 1075 +1076 <-> 941, 1790 +1077 <-> 1971 +1078 <-> 420 +1079 <-> 677 +1080 <-> 498 +1081 <-> 1048 +1082 <-> 106, 1038, 1587 +1083 <-> 1657, 1964 +1084 <-> 1125 +1085 <-> 707, 1664 +1086 <-> 79, 1155 +1087 <-> 753 +1088 <-> 678, 799 +1089 <-> 680, 1162, 1317, 1654 +1090 <-> 1344, 1934 +1091 <-> 15, 691, 1561, 1653, 1895, 1932 +1092 <-> 1927 +1093 <-> 797, 1265 +1094 <-> 982, 1094, 1184 +1095 <-> 892, 1868, 1956 +1096 <-> 107 +1097 <-> 66, 1601 +1098 <-> 857 +1099 <-> 361, 492, 1199, 1930 +1100 <-> 94, 298, 605, 1966 +1101 <-> 331, 685, 1757 +1102 <-> 584, 729, 1791 +1103 <-> 1103 +1104 <-> 71 +1105 <-> 123, 1818 +1106 <-> 126 +1107 <-> 1107 +1108 <-> 386, 1824 +1109 <-> 322, 1668 +1110 <-> 801, 1355, 1397, 1898 +1111 <-> 733, 1790 +1112 <-> 674 +1113 <-> 195 +1114 <-> 299 +1115 <-> 1345 +1116 <-> 886, 1178 +1117 <-> 214, 790 +1118 <-> 72, 679 +1119 <-> 140 +1120 <-> 735, 1120 +1121 <-> 1121 +1122 <-> 1497 +1123 <-> 38, 942 +1124 <-> 1627 +1125 <-> 728, 1084, 1125 +1126 <-> 72 +1127 <-> 511, 1349 +1128 <-> 1923 +1129 <-> 370 +1130 <-> 323 +1131 <-> 1320, 1677, 1732 +1132 <-> 210 +1133 <-> 973 +1134 <-> 1522, 1554 +1135 <-> 1135 +1136 <-> 292, 303 +1137 <-> 416, 657, 745 +1138 <-> 1282 +1139 <-> 809, 1032 +1140 <-> 968, 1220 +1141 <-> 120, 737, 831 +1142 <-> 1699 +1143 <-> 1453 +1144 <-> 228 +1145 <-> 524 +1146 <-> 1526 +1147 <-> 534 +1148 <-> 451 +1149 <-> 70, 404, 893 +1150 <-> 448, 1364, 1551 +1151 <-> 34, 725, 1773 +1152 <-> 576, 1685 +1153 <-> 75 +1154 <-> 838, 1761 +1155 <-> 1086 +1156 <-> 186, 1289, 1481 +1157 <-> 817 +1158 <-> 234, 969 +1159 <-> 37, 597, 1043, 1920 +1160 <-> 837 +1161 <-> 1074, 1472 +1162 <-> 1089 +1163 <-> 1390 +1164 <-> 1438, 1760 +1165 <-> 911, 1442, 1571 +1166 <-> 462, 1050, 1304, 1511 +1167 <-> 65, 106, 1034 +1168 <-> 1322, 1645 +1169 <-> 54 +1170 <-> 541, 1939 +1171 <-> 1547 +1172 <-> 184 +1173 <-> 1466 +1174 <-> 223, 394, 1245, 1951 +1175 <-> 330, 589, 1045, 1742 +1176 <-> 286, 1316, 1388 +1177 <-> 721 +1178 <-> 1116, 1463 +1179 <-> 121, 271, 930, 964 +1180 <-> 292, 329, 684 +1181 <-> 1702 +1182 <-> 1182, 1529 +1183 <-> 1679 +1184 <-> 134, 191, 1094, 1270 +1185 <-> 1365, 1736 +1186 <-> 979, 1251, 1301, 1560 +1187 <-> 177, 1238, 1863 +1188 <-> 1189, 1932 +1189 <-> 497, 1188 +1190 <-> 776, 1279 +1191 <-> 236 +1192 <-> 1398 +1193 <-> 1001 +1194 <-> 1194, 1838 +1195 <-> 856 +1196 <-> 1198, 1986 +1197 <-> 1380 +1198 <-> 1196, 1198, 1459 +1199 <-> 428, 898, 1040, 1099 +1200 <-> 946, 1556, 1583 +1201 <-> 460 +1202 <-> 1407 +1203 <-> 240, 1958 +1204 <-> 1753 +1205 <-> 371, 865, 1703 +1206 <-> 154 +1207 <-> 1030, 1882 +1208 <-> 667, 1533, 1685 +1209 <-> 463, 717 +1210 <-> 700, 1306, 1766 +1211 <-> 187, 425, 1755 +1212 <-> 472, 1851 +1213 <-> 96, 263, 1213 +1214 <-> 89, 237 +1215 <-> 710, 871, 1552 +1216 <-> 434 +1217 <-> 356, 376 +1218 <-> 800, 914 +1219 <-> 668, 1730 +1220 <-> 1035, 1140 +1221 <-> 452, 841, 948 +1222 <-> 909, 1491 +1223 <-> 627, 1452 +1224 <-> 1224, 1408, 1436, 1734 +1225 <-> 1693 +1226 <-> 75 +1227 <-> 739, 1479, 1889 +1228 <-> 38 +1229 <-> 303, 448 +1230 <-> 571 +1231 <-> 354, 633 +1232 <-> 1918 +1233 <-> 1233 +1234 <-> 1721 +1235 <-> 1029 +1236 <-> 1236 +1237 <-> 577, 848 +1238 <-> 1187, 1676 +1239 <-> 1239, 1426 +1240 <-> 82 +1241 <-> 73 +1242 <-> 1010, 1558, 1841, 1872, 1951 +1243 <-> 7, 720 +1244 <-> 622, 1503 +1245 <-> 49, 1174 +1246 <-> 747 +1247 <-> 1511, 1743 +1248 <-> 808, 1321 +1249 <-> 973 +1250 <-> 56, 493, 1973 +1251 <-> 1186 +1252 <-> 114, 1428 +1253 <-> 521, 1510 +1254 <-> 1677 +1255 <-> 1377 +1256 <-> 549, 1256 +1257 <-> 202 +1258 <-> 1258 +1259 <-> 1901 +1260 <-> 626, 824 +1261 <-> 864, 1977 +1262 <-> 475 +1263 <-> 146, 950, 1295, 1424 +1264 <-> 525 +1265 <-> 1027, 1093 +1266 <-> 849, 1275, 1385 +1267 <-> 208, 546, 1716, 1940 +1268 <-> 261 +1269 <-> 799 +1270 <-> 1184 +1271 <-> 343 +1272 <-> 624 +1273 <-> 1336, 1667, 1737, 1756 +1274 <-> 437 +1275 <-> 997, 1266, 1275 +1276 <-> 1061, 1729 +1277 <-> 1324 +1278 <-> 617, 1541 +1279 <-> 425, 1190 +1280 <-> 1046, 1891 +1281 <-> 1695 +1282 <-> 1138, 1815 +1283 <-> 1283 +1284 <-> 516 +1285 <-> 1679 +1286 <-> 1001, 1415, 1767 +1287 <-> 519, 1629, 1871, 1960 +1288 <-> 416, 743 +1289 <-> 1156, 1465, 1693 +1290 <-> 15 +1291 <-> 1433 +1292 <-> 521, 1925 +1293 <-> 177 +1294 <-> 50, 271, 1852 +1295 <-> 6, 1263 +1296 <-> 1679 +1297 <-> 1615, 1973 +1298 <-> 609, 768 +1299 <-> 780, 891, 1067, 1509, 1880 +1300 <-> 730, 770 +1301 <-> 1186 +1302 <-> 542, 668 +1303 <-> 11 +1304 <-> 1166, 1717 +1305 <-> 1305 +1306 <-> 1210 +1307 <-> 1442 +1308 <-> 411, 745 +1309 <-> 305 +1310 <-> 419 +1311 <-> 722 +1312 <-> 1596, 1854 +1313 <-> 20, 1894 +1314 <-> 830 +1315 <-> 288, 367, 1617 +1316 <-> 750, 769, 1176 +1317 <-> 233, 1089 +1318 <-> 1671 +1319 <-> 460, 1364, 1379 +1320 <-> 1131 +1321 <-> 1248 +1322 <-> 1168, 1400 +1323 <-> 1449 +1324 <-> 345, 1277, 1441 +1325 <-> 277, 1640, 1895 +1326 <-> 534, 1673 +1327 <-> 352, 439, 1327, 1411, 1776 +1328 <-> 1047 +1329 <-> 500 +1330 <-> 1832 +1331 <-> 1048, 1450 +1332 <-> 1682, 1829, 1857 +1333 <-> 1433, 1813 +1334 <-> 1397 +1335 <-> 445, 1491 +1336 <-> 406, 1273 +1337 <-> 213, 1002 +1338 <-> 83, 101, 222, 1926 +1339 <-> 990 +1340 <-> 159, 740 +1341 <-> 818 +1342 <-> 758 +1343 <-> 536, 1735 +1344 <-> 119, 1090 +1345 <-> 1115, 1345 +1346 <-> 1494 +1347 <-> 1373, 1569 +1348 <-> 615, 1001, 1506 +1349 <-> 54, 1127, 1728 +1350 <-> 330, 919 +1351 <-> 1488, 1870 +1352 <-> 85, 810 +1353 <-> 807, 819 +1354 <-> 327, 1354 +1355 <-> 312, 1110 +1356 <-> 1052, 1368 +1357 <-> 1888 +1358 <-> 876 +1359 <-> 747, 803 +1360 <-> 126, 1062, 1954 +1361 <-> 1361, 1403 +1362 <-> 133, 570 +1363 <-> 447, 591 +1364 <-> 1150, 1319 +1365 <-> 1185 +1366 <-> 425 +1367 <-> 777, 1712 +1368 <-> 1356, 1419 +1369 <-> 469 +1370 <-> 178 +1371 <-> 1658 +1372 <-> 1372, 1451, 1871 +1373 <-> 69, 1347 +1374 <-> 1492 +1375 <-> 971, 1586, 1978 +1376 <-> 594, 1630 +1377 <-> 599, 1255 +1378 <-> 583, 1517 +1379 <-> 1319 +1380 <-> 67, 166, 476, 1197, 1709 +1381 <-> 179, 701, 1048 +1382 <-> 1382 +1383 <-> 1752 +1384 <-> 88, 790, 1632, 1746, 1775 +1385 <-> 348, 1266 +1386 <-> 577 +1387 <-> 1387 +1388 <-> 1176 +1389 <-> 1995 +1390 <-> 331, 1163 +1391 <-> 255, 481, 748 +1392 <-> 72, 190 +1393 <-> 926 +1394 <-> 95, 480, 1616, 1663 +1395 <-> 782, 1052 +1396 <-> 1450 +1397 <-> 1110, 1334 +1398 <-> 174, 629, 1192 +1399 <-> 1995 +1400 <-> 1322 +1401 <-> 744 +1402 <-> 1, 1402 +1403 <-> 1361 +1404 <-> 420, 935 +1405 <-> 1677 +1406 <-> 518, 1406 +1407 <-> 1202, 1826 +1408 <-> 1224 +1409 <-> 652, 1461 +1410 <-> 536, 812 +1411 <-> 1327, 1418 +1412 <-> 198 +1413 <-> 1655, 1974 +1414 <-> 620 +1415 <-> 1286 +1416 <-> 648 +1417 <-> 1417, 1437, 1884 +1418 <-> 121, 834, 1411 +1419 <-> 415, 1368, 1456 +1420 <-> 927, 1534 +1421 <-> 1755 +1422 <-> 1422 +1423 <-> 687, 1059, 1768 +1424 <-> 1263, 1499, 1968 +1425 <-> 985 +1426 <-> 171, 473, 1239 +1427 <-> 270 +1428 <-> 1252 +1429 <-> 479 +1430 <-> 514, 539, 981, 1621 +1431 <-> 1014 +1432 <-> 35, 1704, 1990 +1433 <-> 1291, 1333 +1434 <-> 1904 +1435 <-> 636, 1435 +1436 <-> 1224, 1963 +1437 <-> 940, 1417 +1438 <-> 1164 +1439 <-> 1868 +1440 <-> 1752 +1441 <-> 1324 +1442 <-> 1165, 1307, 1701, 1850, 1875 +1443 <-> 1443, 1692 +1444 <-> 341, 714 +1445 <-> 1011, 1590 +1446 <-> 1446 +1447 <-> 217, 418 +1448 <-> 237, 1625, 1789 +1449 <-> 127, 1323 +1450 <-> 1331, 1396 +1451 <-> 978, 1372 +1452 <-> 1223, 1711 +1453 <-> 42, 819, 1143 +1454 <-> 497 +1455 <-> 1743, 1849 +1456 <-> 1419 +1457 <-> 867 +1458 <-> 625, 914 +1459 <-> 1198 +1460 <-> 889 +1461 <-> 814, 1409 +1462 <-> 796 +1463 <-> 1178 +1464 <-> 109, 140, 145, 174, 580, 1467 +1465 <-> 1289 +1466 <-> 370, 1173, 1863 +1467 <-> 1037, 1464 +1468 <-> 1468 +1469 <-> 394, 893, 1072 +1470 <-> 1758 +1471 <-> 79 +1472 <-> 22, 1161, 1721 +1473 <-> 153, 622, 1060 +1474 <-> 654, 1744 +1475 <-> 1919 +1476 <-> 225, 711, 1662, 1684, 1856 +1477 <-> 482, 1528 +1478 <-> 736, 889 +1479 <-> 612, 1227, 1774 +1480 <-> 203, 698 +1481 <-> 649, 1156, 1846 +1482 <-> 189, 1962 +1483 <-> 1483 +1484 <-> 317 +1485 <-> 272, 1068 +1486 <-> 915 +1487 <-> 1816 +1488 <-> 246, 1351 +1489 <-> 109, 1489 +1490 <-> 68 +1491 <-> 178, 409, 1222, 1335 +1492 <-> 565, 998, 1374, 1492 +1493 <-> 1059 +1494 <-> 416, 1346, 1848 +1495 <-> 462 +1496 <-> 301, 1660 +1497 <-> 1122, 1577 +1498 <-> 89, 688, 948 +1499 <-> 1424 +1500 <-> 7, 596 +1501 <-> 468 +1502 <-> 344, 374, 1631 +1503 <-> 515, 1244, 1524 +1504 <-> 779 +1505 <-> 375, 1980 +1506 <-> 1348 +1507 <-> 157, 185, 884, 1043 +1508 <-> 1511 +1509 <-> 282, 835, 1299 +1510 <-> 511, 1253 +1511 <-> 1166, 1247, 1508 +1512 <-> 142 +1513 <-> 461 +1514 <-> 601, 711, 1553 +1515 <-> 209, 1739 +1516 <-> 774 +1517 <-> 1378 +1518 <-> 1518 +1519 <-> 674, 1519 +1520 <-> 989 +1521 <-> 503, 961 +1522 <-> 662, 1134, 1998 +1523 <-> 95, 731, 1783 +1524 <-> 290, 1503, 1741 +1525 <-> 295, 453 +1526 <-> 881, 1146 +1527 <-> 1741 +1528 <-> 1477, 1824 +1529 <-> 1182 +1530 <-> 498, 521, 888 +1531 <-> 1660 +1532 <-> 706, 981, 1532 +1533 <-> 167, 1208 +1534 <-> 1420 +1535 <-> 378 +1536 <-> 110, 138, 650, 1897, 1901 +1537 <-> 14 +1538 <-> 114, 1552 +1539 <-> 1640 +1540 <-> 1540, 1896 +1541 <-> 1278 +1542 <-> 412, 1944 +1543 <-> 1543 +1544 <-> 1041 +1545 <-> 766, 1640 +1546 <-> 1546 +1547 <-> 1041, 1171 +1548 <-> 387, 1056, 1567 +1549 <-> 1878 +1550 <-> 827, 968 +1551 <-> 66, 920, 1150 +1552 <-> 1215, 1538 +1553 <-> 763, 1514 +1554 <-> 124, 1134 +1555 <-> 442 +1556 <-> 60, 98, 1200 +1557 <-> 48, 696 +1558 <-> 1242 +1559 <-> 1668 +1560 <-> 155, 355, 437, 1186 +1561 <-> 268, 642, 1091, 1976 +1562 <-> 117, 434, 588, 1579 +1563 <-> 182, 379, 501 +1564 <-> 979 +1565 <-> 1565 +1566 <-> 527, 754 +1567 <-> 1548 +1568 <-> 427, 1997 +1569 <-> 929, 1347, 1579 +1570 <-> 177, 386 +1571 <-> 176, 744, 1165 +1572 <-> 1572 +1573 <-> 195, 199 +1574 <-> 318, 1912 +1575 <-> 844, 929 +1576 <-> 141, 1652 +1577 <-> 1497, 1998 +1578 <-> 1776 +1579 <-> 1020, 1562, 1569 +1580 <-> 626 +1581 <-> 591, 1591 +1582 <-> 723, 1972 +1583 <-> 603, 1200 +1584 <-> 362, 1639 +1585 <-> 605 +1586 <-> 742, 1375, 1945 +1587 <-> 1082 +1588 <-> 588, 967 +1589 <-> 645, 1919 +1590 <-> 606, 1445 +1591 <-> 1581, 1641 +1592 <-> 899, 1592 +1593 <-> 1868 +1594 <-> 893, 1878 +1595 <-> 699 +1596 <-> 1312, 1627, 1974 +1597 <-> 1720, 1961 +1598 <-> 867, 1053, 1719 +1599 <-> 669 +1600 <-> 106 +1601 <-> 1097, 1681 +1602 <-> 414, 1687 +1603 <-> 1605 +1604 <-> 983 +1605 <-> 767, 806, 982, 1603 +1606 <-> 303 +1607 <-> 1607, 1847 +1608 <-> 1975 +1609 <-> 267, 1778 +1610 <-> 396 +1611 <-> 842 +1612 <-> 188, 1877 +1613 <-> 64, 345 +1614 <-> 361 +1615 <-> 626, 1297 +1616 <-> 1394 +1617 <-> 28, 1315 +1618 <-> 470, 812, 1031 +1619 <-> 215, 796 +1620 <-> 921 +1621 <-> 1430, 1764 +1622 <-> 989 +1623 <-> 1761 +1624 <-> 51, 403 +1625 <-> 1448 +1626 <-> 90, 747, 901, 1943, 1985 +1627 <-> 14, 1124, 1596 +1628 <-> 217, 523 +1629 <-> 994, 1287 +1630 <-> 8, 1376 +1631 <-> 1502 +1632 <-> 401, 1384, 1697 +1633 <-> 614, 957 +1634 <-> 662, 959 +1635 <-> 249, 1793 +1636 <-> 568 +1637 <-> 839 +1638 <-> 910, 1061 +1639 <-> 1584, 1730 +1640 <-> 1325, 1539, 1545 +1641 <-> 1591 +1642 <-> 16 +1643 <-> 139 +1644 <-> 1644, 1900 +1645 <-> 330, 1168 +1646 <-> 727 +1647 <-> 438, 1647 +1648 <-> 510, 676, 1722 +1649 <-> 398 +1650 <-> 906, 916, 922, 1914 +1651 <-> 1769 +1652 <-> 755, 1576 +1653 <-> 1091 +1654 <-> 1089 +1655 <-> 1413 +1656 <-> 273 +1657 <-> 1083 +1658 <-> 294, 344, 1371, 1740 +1659 <-> 1688, 1805 +1660 <-> 1496, 1531, 1948 +1661 <-> 1749 +1662 <-> 1476, 1979 +1663 <-> 1394 +1664 <-> 1041, 1085 +1665 <-> 53 +1666 <-> 589 +1667 <-> 1273, 1853 +1668 <-> 871, 1109, 1559 +1669 <-> 1931 +1670 <-> 449, 1832 +1671 <-> 86, 1015, 1318, 1671 +1672 <-> 685, 1861 +1673 <-> 1326, 1747 +1674 <-> 586, 1812 +1675 <-> 759 +1676 <-> 340, 610, 1238, 1676 +1677 <-> 1131, 1254, 1405, 1784 +1678 <-> 333, 357 +1679 <-> 655, 1183, 1285, 1296, 1745 +1680 <-> 737 +1681 <-> 61, 1601 +1682 <-> 486, 673, 1332 +1683 <-> 846, 1766, 1773 +1684 <-> 1476 +1685 <-> 1152, 1208 +1686 <-> 875 +1687 <-> 1602, 1687 +1688 <-> 363, 478, 1659, 1860 +1689 <-> 724 +1690 <-> 2 +1691 <-> 1691 +1692 <-> 1443, 1707 +1693 <-> 678, 1225, 1289 +1694 <-> 261, 269 +1695 <-> 705, 1281 +1696 <-> 814 +1697 <-> 1632 +1698 <-> 982 +1699 <-> 135, 818, 965, 1142 +1700 <-> 501 +1701 <-> 103, 1442 +1702 <-> 966, 1181 +1703 <-> 1205, 1958 +1704 <-> 1432 +1705 <-> 280 +1706 <-> 1706 +1707 <-> 1065, 1692 +1708 <-> 454, 722 +1709 <-> 297, 1380 +1710 <-> 1710 +1711 <-> 1452 +1712 <-> 1367 +1713 <-> 1713 +1714 <-> 622, 1817 +1715 <-> 444, 468 +1716 <-> 171, 862, 1267 +1717 <-> 314, 1304, 1873 +1718 <-> 767, 875, 1738 +1719 <-> 500, 1598 +1720 <-> 1597 +1721 <-> 1234, 1472 +1722 <-> 487, 1648 +1723 <-> 868 +1724 <-> 864, 1757 +1725 <-> 814 +1726 <-> 3 +1727 <-> 168 +1728 <-> 193, 305, 1349 +1729 <-> 951, 1276 +1730 <-> 431, 568, 1219, 1639 +1731 <-> 450 +1732 <-> 1131 +1733 <-> 646, 1733 +1734 <-> 1224 +1735 <-> 1343 +1736 <-> 1028, 1185 +1737 <-> 335, 879, 1273 +1738 <-> 1718 +1739 <-> 372, 1515 +1740 <-> 1658 +1741 <-> 1524, 1527, 1818 +1742 <-> 1175 +1743 <-> 609, 624, 1247, 1455 +1744 <-> 1474 +1745 <-> 889, 1679 +1746 <-> 1384 +1747 <-> 14, 887, 1673 +1748 <-> 12, 1748 +1749 <-> 258, 1661, 1907, 1921 +1750 <-> 536, 727 +1751 <-> 907 +1752 <-> 858, 1383, 1440 +1753 <-> 1044, 1204 +1754 <-> 553, 833, 863 +1755 <-> 1211, 1421 +1756 <-> 173, 1273 +1757 <-> 1101, 1724 +1758 <-> 25, 554, 596, 1470 +1759 <-> 424 +1760 <-> 1164, 1793 +1761 <-> 1036, 1154, 1623 +1762 <-> 73, 855, 864 +1763 <-> 1061 +1764 <-> 204, 1621 +1765 <-> 912, 1765 +1766 <-> 562, 811, 1210, 1683 +1767 <-> 319, 991, 1286 +1768 <-> 440, 1423 +1769 <-> 5, 390, 1651 +1770 <-> 284, 392 +1771 <-> 858 +1772 <-> 788, 862 +1773 <-> 487, 1151, 1683, 1773 +1774 <-> 33, 1479 +1775 <-> 974, 1384, 1775, 1935 +1776 <-> 1327, 1578 +1777 <-> 1958 +1778 <-> 280, 442, 1609 +1779 <-> 270, 773 +1780 <-> 26, 1983 +1781 <-> 353, 866 +1782 <-> 738, 779, 1991 +1783 <-> 130, 1523 +1784 <-> 1677, 1784 +1785 <-> 332 +1786 <-> 1947 +1787 <-> 1814, 1845 +1788 <-> 90 +1789 <-> 290, 798, 1448 +1790 <-> 160, 429, 1076, 1111, 1998 +1791 <-> 1102 +1792 <-> 601 +1793 <-> 1635, 1760 +1794 <-> 210, 1972 +1795 <-> 18, 694 +1796 <-> 1889, 1915 +1797 <-> 111 +1798 <-> 607, 1798 +1799 <-> 426 +1800 <-> 687 +1801 <-> 1037 +1802 <-> 1821 +1803 <-> 585 +1804 <-> 278 +1805 <-> 1659 +1806 <-> 1806 +1807 <-> 821, 1017 +1808 <-> 937 +1809 <-> 23, 620 +1810 <-> 792 +1811 <-> 478, 1865 +1812 <-> 1674 +1813 <-> 178, 1333 +1814 <-> 783, 1787 +1815 <-> 118, 484, 1282 +1816 <-> 39, 380, 554, 634, 1487 +1817 <-> 168, 1714 +1818 <-> 1105, 1741, 1910, 1948, 1972 +1819 <-> 894 +1820 <-> 343 +1821 <-> 135, 572, 1802 +1822 <-> 791, 976 +1823 <-> 1023 +1824 <-> 1108, 1528 +1825 <-> 675 +1826 <-> 1065, 1407, 1936 +1827 <-> 615 +1828 <-> 1828 +1829 <-> 321, 1062, 1332 +1830 <-> 506 +1831 <-> 667 +1832 <-> 1330, 1670 +1833 <-> 374, 542 +1834 <-> 973 +1835 <-> 1042 +1836 <-> 479, 1836 +1837 <-> 199 +1838 <-> 1194 +1839 <-> 731 +1840 <-> 1840 +1841 <-> 528, 1242 +1842 <-> 1895 +1843 <-> 167 +1844 <-> 174, 1964 +1845 <-> 19, 672, 866, 1787 +1846 <-> 247, 1481 +1847 <-> 253, 465, 1607 +1848 <-> 603, 842, 1494 +1849 <-> 231, 1455 +1850 <-> 456, 1442 +1851 <-> 933, 1212 +1852 <-> 1294 +1853 <-> 1667 +1854 <-> 693, 1312 +1855 <-> 293, 1925 +1856 <-> 1476 +1857 <-> 1332 +1858 <-> 1858 +1859 <-> 139, 275 +1860 <-> 1688, 1994 +1861 <-> 1672 +1862 <-> 1938 +1863 <-> 1187, 1466 +1864 <-> 344 +1865 <-> 312, 1811 +1866 <-> 781, 908 +1867 <-> 983 +1868 <-> 1095, 1439, 1593 +1869 <-> 722 +1870 <-> 962, 1351, 1899 +1871 <-> 1287, 1372 +1872 <-> 717, 1242 +1873 <-> 209, 488, 1717 +1874 <-> 197 +1875 <-> 471, 660, 1442 +1876 <-> 788 +1877 <-> 1612 +1878 <-> 604, 1549, 1594 +1879 <-> 154, 1047, 1949 +1880 <-> 1299 +1881 <-> 631, 917, 984 +1882 <-> 759, 1207, 1882 +1883 <-> 102 +1884 <-> 1417 +1885 <-> 29 +1886 <-> 46, 718, 1886 +1887 <-> 657 +1888 <-> 232, 808, 876, 1058, 1357, 1989 +1889 <-> 1227, 1796, 1889 +1890 <-> 576 +1891 <-> 516, 583, 931, 1280 +1892 <-> 132, 1035 +1893 <-> 440 +1894 <-> 478, 617, 1313 +1895 <-> 1091, 1325, 1842 +1896 <-> 1540 +1897 <-> 71, 1536 +1898 <-> 1110 +1899 <-> 613, 1870 +1900 <-> 1644 +1901 <-> 704, 1259, 1536 +1902 <-> 1902 +1903 <-> 864 +1904 <-> 639, 1434 +1905 <-> 41, 757 +1906 <-> 390 +1907 <-> 1749 +1908 <-> 766 +1909 <-> 997 +1910 <-> 1818 +1911 <-> 665, 1911 +1912 <-> 244, 328, 590, 761, 1574 +1913 <-> 426 +1914 <-> 428, 1650, 1941 +1915 <-> 1796 +1916 <-> 260, 1924 +1917 <-> 1917 +1918 <-> 235, 1232 +1919 <-> 919, 1475, 1589 +1920 <-> 230, 1159 +1921 <-> 784, 1749 +1922 <-> 9, 1928 +1923 <-> 347, 1128, 1923 +1924 <-> 121, 1916 +1925 <-> 1292, 1855 +1926 <-> 43, 1338 +1927 <-> 113, 635, 1074, 1092 +1928 <-> 1922 +1929 <-> 945 +1930 <-> 1099 +1931 <-> 914, 1669 +1932 <-> 200, 874, 1091, 1188 +1933 <-> 828 +1934 <-> 1090 +1935 <-> 1775 +1936 <-> 1826 +1937 <-> 811 +1938 <-> 23, 1044, 1862 +1939 <-> 1170 +1940 <-> 136, 250, 1267 +1941 <-> 1914 +1942 <-> 197, 612 +1943 <-> 226, 788, 1626 +1944 <-> 48, 445, 1542 +1945 <-> 995, 1586 +1946 <-> 574 +1947 <-> 828, 876, 1786 +1948 <-> 654, 1660, 1818 +1949 <-> 478, 1879 +1950 <-> 263 +1951 <-> 822, 1174, 1242 +1952 <-> 239 +1953 <-> 190 +1954 <-> 1360 +1955 <-> 701, 1006 +1956 <-> 138, 715, 1095 +1957 <-> 925 +1958 <-> 1203, 1703, 1777 +1959 <-> 1959 +1960 <-> 1287 +1961 <-> 202, 574, 1597 +1962 <-> 489, 1482 +1963 <-> 1436 +1964 <-> 443, 1083, 1844 +1965 <-> 639 +1966 <-> 1100 +1967 <-> 674 +1968 <-> 1424 +1969 <-> 354 +1970 <-> 169, 1002 +1971 <-> 1077, 1971 +1972 <-> 252, 530, 1582, 1794, 1818 +1973 <-> 1250, 1297 +1974 <-> 1413, 1596 +1975 <-> 261, 1608 +1976 <-> 1561 +1977 <-> 321, 923, 1261 +1978 <-> 843, 977, 1375 +1979 <-> 547, 1662 +1980 <-> 276, 1505 +1981 <-> 403 +1982 <-> 69, 907 +1983 <-> 273, 1780 +1984 <-> 20, 627, 980 +1985 <-> 80, 400, 1626 +1986 <-> 1196 +1987 <-> 894, 1033, 1056 +1988 <-> 548 +1989 <-> 326, 358, 1888 +1990 <-> 1432, 1990 +1991 <-> 924, 1782 +1992 <-> 80 +1993 <-> 31, 867 +1994 <-> 1860 +1995 <-> 301, 1389, 1399 +1996 <-> 968 +1997 <-> 952, 1568 +1998 <-> 1522, 1577, 1790 +1999 <-> 308, 799, 1013 diff -r 908a77e311fa -r 4835e36925af data/2017/13.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2017/13.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,44 @@ +0: 5 +1: 2 +2: 3 +4: 4 +6: 6 +8: 4 +10: 8 +12: 6 +14: 6 +16: 14 +18: 6 +20: 8 +22: 8 +24: 10 +26: 8 +28: 8 +30: 10 +32: 8 +34: 12 +36: 9 +38: 20 +40: 12 +42: 12 +44: 12 +46: 12 +48: 12 +50: 12 +52: 12 +54: 12 +56: 14 +58: 14 +60: 14 +62: 20 +64: 14 +66: 14 +70: 14 +72: 14 +74: 14 +76: 14 +78: 14 +80: 12 +90: 30 +92: 17 +94: 18 diff -r 908a77e311fa -r 4835e36925af data/2019/02.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2019/02.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,1 @@ +1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,13,19,1,9,19,23,2,13,23,27,2,27,13,31,2,31,10,35,1,6,35,39,1,5,39,43,1,10,43,47,1,5,47,51,1,13,51,55,2,55,9,59,1,6,59,63,1,13,63,67,1,6,67,71,1,71,10,75,2,13,75,79,1,5,79,83,2,83,6,87,1,6,87,91,1,91,13,95,1,95,13,99,2,99,13,103,1,103,5,107,2,107,10,111,1,5,111,115,1,2,115,119,1,119,6,0,99,2,0,14,0 diff -r 908a77e311fa -r 4835e36925af data/2019/03.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/2019/03.txt Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,2 @@ +R992,U284,L447,D597,R888,D327,R949,U520,R27,U555,L144,D284,R538,U249,R323,U297,R136,U838,L704,D621,R488,U856,R301,U539,L701,U363,R611,D94,L734,D560,L414,U890,R236,D699,L384,D452,R702,D637,L164,U410,R649,U901,L910,D595,R339,D346,R959,U777,R218,D667,R534,D762,R484,D914,L25,U959,R984,D922,R612,U999,L169,D599,L604,D357,L217,D327,L730,D949,L565,D332,L114,D512,R460,D495,L187,D697,R313,U319,L8,D915,L518,D513,R738,U9,R137,U542,L188,U440,R576,D307,R734,U58,R285,D401,R166,U156,L859,U132,L10,U753,L933,U915,R459,D50,R231,D166,L253,U844,R585,D871,L799,U53,R785,U336,R622,D108,R555,D918,L217,D668,L220,U738,L997,D998,R964,D456,L54,U930,R985,D244,L613,D116,L994,D20,R949,D245,L704,D564,L210,D13,R998,U951,L482,U579,L793,U680,L285,U770,L975,D54,R79,U613,L907,U467,L256,D783,R883,U810,R409,D508,L898,D286,L40,U741,L759,D549,R210,U411,R638,D643,L784,U538,L739,U771,L773,U491,L303,D425,L891,U182,R412,U951,L381,U501,R482,D625,R870,D320,L464,U555,R566,D781,L540,D754,L211,U73,L321,D869,R994,D177,R496,U383,R911,U819,L651,D774,L591,U666,L883,U767,R232,U822,L499,U44,L45,U873,L98,D487,L47,U803,R855,U256,R567,D88,R138,D678,L37,U38,R783,U569,L646,D261,L597,U275,L527,U48,R433,D324,L631,D160,L145,D128,R894,U223,R664,U510,R756,D700,R297,D361,R837,U996,L769,U813,L477,U420,L172,U482,R891,D379,L329,U55,R284,U155,L816,U659,L671,U996,R997,U252,R514,D718,L661,D625,R910,D960,L39,U610,R853,U859,R174,U215,L603,U745,L587,D736,R365,U78,R306,U158,L813,U885,R558,U631,L110,D232,L519,D366,R909,D10,R294 +L1001,D833,L855,D123,R36,U295,L319,D700,L164,U576,L68,D757,R192,D738,L640,D660,R940,D778,R888,U772,R771,U900,L188,D464,L572,U184,R889,D991,L961,U751,R560,D490,L887,D748,R37,U910,L424,D401,L385,U415,L929,U193,R710,D855,L596,D323,L966,D505,L422,D139,L108,D135,R737,U176,R538,D173,R21,D951,R949,D61,L343,U704,R127,U468,L240,D834,L858,D127,R328,D863,R329,U477,R131,U864,R997,D38,R418,U611,R28,U705,R148,D414,R786,U264,L785,D650,R201,D250,R528,D910,R670,U309,L658,U190,R704,U21,R288,D7,R930,U62,R782,U621,R328,D725,R305,U700,R494,D137,R969,U142,L867,U577,R300,U162,L13,D698,R333,U865,R941,U796,L60,U902,L784,U832,R78,D578,R196,D390,R728,D922,R858,D994,L457,U547,R238,D345,R329,D498,R873,D212,R501,U474,L657,U910,L335,U133,R213,U417,R698,U829,L2,U704,L273,D83,R231,D247,R675,D23,L692,D472,L325,D659,L408,U746,L715,U395,L596,U296,R52,D849,L713,U815,R684,D551,L319,U768,R176,D182,R557,U731,R314,D543,L9,D256,R38,D809,L567,D332,R375,D572,R81,D479,L71,U968,L831,D247,R989,U390,R463,D576,R740,D539,R488,U367,L596,U375,L763,D824,R70,U448,R979,D977,L744,D379,R488,D671,L516,D334,L542,U517,L488,D390,L713,D932,L28,U924,L448,D229,L488,D501,R19,D910,L979,D411,R711,D824,L973,U291,R794,D485,R208,U370,R655,U450,L40,D804,L374,D671,R962,D829,L209,U111,L84,D876,L832,D747,L733,D560,L702,D972,R188,U817,L111,U26,L492,U485,L71,D59,L269,D870,L152,U539,R65,D918,L932,D260,L485,U77,L699,U254,R924,U643,L264,U96,R395,D917,R360,U354,R101,D682,R854,U450,L376,D378,R872,D311,L881,U630,R77,D766,R672 diff -r 908a77e311fa -r 4835e36925af package.lisp --- a/package.lisp Sun Dec 01 16:01:05 2019 -0500 +++ b/package.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -7,9 +7,15 @@ :read-lines :read-lines-of-words :read-lines-of-numbers-and-garbage + :read-numbers + :read-numbers-from-string + :read-comma-separated-values :ensure-string :ensure-stream + :ensure-keyword + + :returning :char-invertcase :emptyp @@ -20,10 +26,14 @@ :integral-range :manhattan-distance :manhattan-neighbors + :x + :y :nth-digit :unique :positions-if :digits + :fresh-vector + :let-result :ring :ring-prev diff -r 908a77e311fa -r 4835e36925af src/2017/day-05.lisp --- a/src/2017/day-05.lisp Sun Dec 01 16:01:05 2019 -0500 +++ b/src/2017/day-05.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -1,14 +1,9 @@ (defpackage :advent/2017/05 #.cl-user::*advent-use*) (in-package :advent/2017/05) -(defun fresh-simple-vector (sequence) - (if (typep sequence 'simple-vector) - (copy-seq sequence) - (coerce sequence 'simple-vector))) - (defun compute (data modification-function) (iterate - (with maze = (fresh-simple-vector data)) + (with maze = (fresh-vector data)) (with bound = (1- (length maze))) (with address = 0) (while (<= 0 address bound)) diff -r 908a77e311fa -r 4835e36925af src/2017/day-10.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2017/day-10.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,52 @@ +(defpackage :advent/2017/10 #.cl-user::*advent-use*) +(in-package :advent/2017/10) + +(defun reverse-chunk (vector start length) + (iterate + (repeat (truncate length 2)) + (for i :modulo (length vector) :from start) + (for j :modulo (length vector) :downfrom (+ start (1- length))) + (rotatef (aref vector i) (aref vector j)))) + +(defun simple-knot-hash (lengths) + (iterate + (with numbers = (coerce (alexandria:iota 256) 'vector)) + (with current = 0) + (with skip = 0) + (for length :in lengths) + (reverse-chunk numbers current length) + (zapf current (mod (+ % length skip) 256)) + (incf skip) + (finally (return (* (aref numbers 0) (aref numbers 1)))))) + +(defun sparse->dense (numbers) + (iterate + (for i :from 0 :by 16 :below (length numbers)) + (collect (reduce #'logxor numbers :start i :end (+ i 16))))) + +(defun bytes->hex (bytes) + (format nil "~(~{~2,'0X~}~)" bytes)) + +(defun initial-lengths (string) + (append (map 'list #'char-code string) + (list 17 31 73 47 23))) + +(defun full-knot-hash (string) + (iterate + (with lengths = (initial-lengths string)) + (with numbers = (coerce (alexandria:iota 256) 'vector)) + (with current = 0) + (with skip = 0) + (repeat 64) + (iterate + (for length :in lengths) + (reverse-chunk numbers current length) + (zapf current (mod (+ % length skip) 256)) + (incf skip)) + (finally (return (bytes->hex (sparse->dense numbers)))))) + +(define-problem (2017 10) (data alexandria:read-stream-content-into-string) () + (values + (simple-knot-hash (read-numbers-from-string data)) + (full-knot-hash (str:trim data)))) + diff -r 908a77e311fa -r 4835e36925af src/2017/day-11.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2017/day-11.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,21 @@ +(defpackage :advent/2017/11 #.cl-user::*advent-use*) +(in-package :advent/2017/11) + +;; https://www.redblobgames.com/grids/hexagons/#coordinates + +(defun coord+ (c1 c2) + (map 'vector #'+ c1 c2)) + +(defun coord- (c1 c2) + (map 'vector #'- c1 c2)) + +(defun distance (c1 &optional (c2 #(0 0 0))) + (/ (reduce #'+ (coord- c1 c2) :key #'abs) 2)) + +(define-problem (2017 11) (data read-comma-separated-values) (773 1560) + (iterate + (with pos = #(0 0 0)) + (for direction :in (mapcar #'ensure-keyword data)) + (setf pos (coord+ pos (delta direction))) + (maximizing (distance pos) :into furthest) + (finally (return (values (distance pos) furthest))))) diff -r 908a77e311fa -r 4835e36925af src/2017/day-12.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2017/day-12.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,36 @@ +(defpackage :advent/2017/12 #.cl-user::*advent-use*) +(in-package :advent/2017/12) + +(defun parse-line (line) + (destructuring-bind (id others) (str:split "<->" line) + (list (parse-integer id) + (mapcar #'parse-integer (str:split #\, others))))) + +(defun build-graph (records) + (iterate + (with graph = (digraph:make-digraph :initial-vertices (mapcar #'car records))) + (for (id others) :in records) + (dolist (id2 others) + (digraph:insert-edge graph id id2)) + (finally (return graph)))) + +(defun connected-to (graph start) + (gathering + (digraph:mapc-depth-first #'gather graph start))) + +(defun count-subgraph (graph start) + (length (connected-to graph start))) + +(defun remove-subgraph (graph start) + (map nil (alexandria:curry #'digraph:remove-vertex graph) + (connected-to graph start))) + +(define-problem (2017 12) (data read-lines) (141 171) + (let ((graph (build-graph (mapcar #'parse-line data)))) + (values + (count-subgraph graph 0) + (iterate + (for vertex = (digraph:arbitrary-vertex graph)) + (while vertex) + (remove-subgraph graph vertex) + (counting t))))) diff -r 908a77e311fa -r 4835e36925af src/2017/day-13.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2017/day-13.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,68 @@ +(defpackage :advent/2017/13 #.cl-user::*advent-use*) +(in-package :advent/2017/13) + +;; There's a magical insight that you need to get if you want to do this +;; problem: the length of a scanner of range R is `2(R-1)`. +;; +;; Examples: +;; +;; R = 2: S. 1 +;; .S 2 = 2(R-1) = 2(2-1) = 2(1) = 2 +;; +;; R = 3: S.. 1 +;; .S. 2 +;; ..S 3 +;; .S. 4 = 2(R-1) = 2(3-1) = 2(2) = 4 +;; +;; R = 4: S... 1 +;; .S.. 2 +;; ..S. 3 +;; ...S 4 +;; ..S. 5 +;; .S.. 6 = 2(R-1) = 2(4-1) = 2(3) = 6 +;; +;; The best "intuition" I can come up with for this is: +;; +;; * We spend 1 turn at each end position. +;; * We spend 2 turns at each inner position. +;; * We have R positions, 2 of which are an end and (R-2) of which are inner. +;; * So we have (2 * 1) + ((R-2) * 2) = 2 + 2(R-2) turns. +;; * Factor out the 2 and simplify: 2(1 + (R-2)) = 2(R-1). +;; +;; Figuring out the exact position of a scanner at a given time it tricky +;; because you need to wrap the position around properly during the second half, +;; but we can skip that because all we care about is whether it's at zero. + +(defun catchesp (range time) + (zerop (mod time (* (1- range) 2)))) + +(defun make-scanners (specs) + (iterate + (with scanners = (make-array (1+ (caar (last specs))) :initial-element nil)) + (for (level range) :in specs) + (setf (aref scanners level) range) + (finally (return scanners)))) + +(defun severity (level range) + (* level range)) + +(defun traverse (scanners start-time) + (iterate + (for level :from 0) + (for time :from start-time) + (for range :in-vector scanners) + (for caught = (and range (catchesp range time))) + (oring caught :into ever-caught) + (when caught + (summing (severity level range) :into score)) + (returning score ever-caught))) + +(define-problem (2017 13) (data read-lines-of-numbers-and-garbage) + (2604 3941460) + (let ((scanners (make-scanners data))) + (values + (traverse scanners 0) + (iterate + (for delay :from 0) + (for (values score caught) = (traverse scanners delay)) + (finding delay :such-that (not caught)))))) diff -r 908a77e311fa -r 4835e36925af src/2018/day-10.lisp --- a/src/2018/day-10.lisp Sun Dec 01 16:01:05 2019 -0500 +++ b/src/2018/day-10.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -1,4 +1,5 @@ -(defpackage :advent/2018/10 #.cl-user::*advent-use*) +(defpackage :advent/2018/10 #.cl-user::*advent-use* + (:shadow :x)) (in-package :advent/2018/10) (defun parse-line (line) diff -r 908a77e311fa -r 4835e36925af src/2018/day-11.lisp --- a/src/2018/day-11.lisp Sun Dec 01 16:01:05 2019 -0500 +++ b/src/2018/day-11.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -1,4 +1,5 @@ -(defpackage :advent/2018/11 #.cl-user::*advent-use*) +(defpackage :advent/2018/11 #.cl-user::*advent-use* + (:shadow :x :y)) (in-package :advent/2018/11) (defun cell (x y) diff -r 908a77e311fa -r 4835e36925af src/2019/day-02.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2019/day-02.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,30 @@ +(defpackage :advent/2019/02 #.cl-user::*advent-use*) +(in-package :advent/2019/02) + +(defun run-intcode (memory a b) + (let ((memory (fresh-vector memory))) + (macrolet ((m (addr &rest deltas) + `(aref memory (+ ,addr ,@deltas)))) + (iterate + (initially (setf (m 1) a + (m 2) b)) + (with pc = 0) + (for op = (m pc)) + (for x = (m (m pc 1))) + (for y = (m (m pc 2))) + (for dest = (m pc 3)) + (ecase op + (1 (setf (m dest) (+ x y))) + (2 (setf (m dest) (* x y))) + (99 (return (m 0)))) + (incf pc 4))))) + +(define-problem (2019 2) (data read-numbers) () + (values + (run-intcode data 12 2) + (iterate + (for-nested ((a :from 0 :to 99) + (b :from 0 :to 99))) + (when (= 19690720 (run-intcode data a b)) + (return (+ (* 100 a) b)))))) + diff -r 908a77e311fa -r 4835e36925af src/2019/day-03.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/2019/day-03.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -0,0 +1,92 @@ +(defpackage :advent/2019/03 #.cl-user::*advent-use*) +(in-package :advent/2019/03) + +(defun bounds (grid) + (multiple-value-bind (bottom top) + (losh:extrema #'< (alexandria:hash-table-keys grid) :key #'y) + (multiple-value-bind (left right) + (losh:extrema #'< (alexandria:hash-table-keys grid) :key #'x) + (values (x left) + (x right) + (y top) + (y bottom))))) + +(defun print-grid (grid) + (multiple-value-bind (left right top bottom) (bounds grid) + (iterate + (for y :from (1+ top) :downto (1- bottom)) + (iterate + (for x :from (1- left) :to (1+ right)) + (princ (gethash (complex x y) grid #\.))) + (terpri)))) + +(defun first-character (string) + (aref string 0)) + +(defun parse-path (string) + (gathering + (ppcre:do-register-groups + ((#'first-character direction) (#'parse-integer distance)) + ("([UDLR])(\\d+)" string) + (gather (cons direction distance))))) + +(defun delta (direction) + (ecase direction + (#\U #c( 0 1)) + (#\D #c( 0 -1)) + (#\L #c(-1 0)) + (#\R #c( 1 0)))) + +(defun place-wire (grid path label) + (iterate + (with scores = (make-hash-table)) + (with steps = 0) + (with pos = #c(0 0)) + (for (direction . distance) :in path) + (for delta = (delta direction)) + (iterate + (repeat distance) + (incf pos delta) + (incf steps) + (for cur = (gethash pos grid)) + (cond ((null cur) (setf (gethash pos grid) label ; never seen anything + (gethash pos scores) steps)) + ((char= cur label)) ; already seen + ((char= cur #\X)) ; already seen + (t (setf (gethash pos grid) #\X ; seen the other wire + (gethash pos scores) steps)))) + (finally (return scores)))) + +(defun find-intersections (grid) + (iterate (for (k v) :in-hashtable grid) + (when (eql #\X v) (collect k)))) + +(defun make-grid () + (let-result (grid (make-hash-table)) + (setf (gethash #c(0 0) grid) #\o))) + +(define-problem (2019 3) (data read-lines) (5357 101956) + (let* ((path1 (parse-path (first data))) + (path2 (parse-path (second data))) + (grid (make-grid)) + (scores1 (place-wire grid path1 #\1)) + (scores2 (place-wire grid path2 #\2)) + (intersections (find-intersections grid))) + (flet ((intersection-cost (point) + (+ (gethash point scores1) + (gethash point scores2)))) + (values + (alexandria:extremum (mapcar #'manhattan-distance intersections) #'<) + (alexandria:extremum (mapcar #'intersection-cost intersections) #'<))))) + +;; (run '("R8,U5,L5,D3" "U7,R6,D4,L4")) +;; (run '( +;; "R75,D30,R83,U83,L12,D49,R71,U7,L72" +;; "U62,R66,U55,R34,D71,R55,D58,R83" +;; )) + +;; (run '( +;; "R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51" +;; "U98,R91,D20,R16,D67,R40,U7,R15,U6,R7" + +;; )) diff -r 908a77e311fa -r 4835e36925af src/utils.lisp --- a/src/utils.lisp Sun Dec 01 16:01:05 2019 -0500 +++ b/src/utils.lisp Tue Dec 03 20:15:07 2019 -0500 @@ -25,6 +25,13 @@ (stream (alexandria:read-stream-content-into-string input)) (string (copy-seq input)))) +(defun ensure-keyword (input) + (values + (ctypecase input + (keyword input) + (symbol (alexandria:make-keyword input)) + (string (alexandria:make-keyword (string-upcase (str:trim input))))))) + ;;;; Problems ----------------------------------------------------------------- (defmacro define-problem-tests ((year day) part1 part2) @@ -50,7 +57,8 @@ ,@declarations (let ((,file (unless ,arg (open (problem-data-path ,year ,day))))) (unwind-protect - (progn (setf ,arg (,reader (ensure-stream (or ,arg ,file)))) + (progn (unless ,arg + (setf ,arg (,reader (ensure-stream (or ,arg ,file))))) ,@body) (when ,file (close ,file))))) ,@(when answer1 @@ -66,16 +74,19 @@ ;;;; Readers ------------------------------------------------------------------ -(defun read-numbers-from-line (line) +(defun read-numbers-from-string (line) (mapcar #'parse-integer (ppcre:all-matches-as-strings "-?\\d+" line))) (defun read-and-collect (stream reader) (iterate (for value :in-stream stream :using reader) (collect value))) + (defun read-all (stream) "Read all forms from `stream` and return them as a fresh list." (read-and-collect stream #'read)) +(defun read-numbers (stream) + (read-numbers-from-string (alexandria:read-stream-content-into-string stream))) (defun read-lines (stream) "Read all lines from `stream` and return them as a fresh list of strings." @@ -90,7 +101,7 @@ " (iterate (for line :in-stream stream :using #'read-line) - (for numbers = (read-numbers-from-line line)) + (for numbers = (read-numbers-from-string line)) (when numbers (collect numbers)))) @@ -98,6 +109,9 @@ (mapcar (lambda (line) (split-sequence:split-sequence #\space line)) (read-lines stream))) +(defun read-comma-separated-values (stream) + (str:split #\, (alexandria:read-stream-content-into-string stream))) + ;;;; Rings -------------------------------------------------------------------- (declaim (inline ring-prev ring-next ring-data)) @@ -213,6 +227,11 @@ (return start))))) +;;;; Iterate ------------------------------------------------------------------ +(defmacro returning (&rest values) + `(finally (return (values ,@values)))) + + ;;;; Miscellaneous ------------------------------------------------------------ (defun hash-table= (h1 h2 &optional (test #'eql)) "Return whether `h1` and `h2` have the same keys and values. @@ -303,12 +322,18 @@ (char-upcase char) (char-downcase char))) -(defun manhattan-distance (point1 point2) +(defun-inline x (point) + (realpart point)) + +(defun-inline y (point) + (imagpart point)) + +(defun manhattan-distance (point1 &optional (point2 #c(0 0))) "Return the Manhattan distance between the two points on the complex plane." - (+ (abs (- (realpart point1) - (realpart point2))) - (abs (- (imagpart point1) - (imagpart point2))))) + (+ (abs (- (x point1) + (x point2))) + (abs (- (y point1) + (y point2))))) (defun manhattan-neighbors (point) "Return points adjacent to point (excluding diagonals) on the complex plane." @@ -403,6 +428,31 @@ result-type)) +(defun fresh-vector (sequence) + (if (typep sequence 'vector) + (copy-seq sequence) + (coerce sequence 'vector))) + + +(defmacro let-result ((symbol initform) &body body) + "Bind `symbol` to initform, execute `body`, and return `symbol`. + + This is useful for creating a object, doing some work on it, and returning the + object. For example: + + (let-result (table (make-hash-table)) + (setf (gethash 0 table) 'foo)) + ; ==> + (let ((table (make-hash-table))) + (setf (gethash 0 table) 'foo) + table) + + " + `(let ((,symbol ,initform)) + ,@body + ,symbol)) + + ;;;; A* Search ---------------------------------------------------------------- (defstruct path state