Advent of Corona - kevinlawler/kona GitHub Wiki

https://adventofcorona.hackersatupc.org

Problem 1, Phase 1

f: { a:~0,(1 _ x)>(-1 _ x); b:~1,((1 _ x)-(-1 _ x))!2; c:&(a|b),1; |/(1 _ c)-(-1 _ c) }
f(. (0: "/home/tom/corona/input1") 0)

Problem 1, Phase 2

f: { a: x[<x]; b: a[&((1 _ a)>(-1 _ a)),1]; ^b[&((1 _ b)-(-1 _ b)),1] }
f(. (0: "/home/tom/corona/input1") 0)

Problem 2, Phase 1

f: { a:(0 0 1 0;0 1 0 0;1 0 0 0); b:(3 4#x)-a; b[&~-1 _in' b[;!3]] }  
s: { x:x[<x]; i:,/1#'=x[;!3]; x[i;3]:+/'x[=x[;!3];3]; x[i] }
r: { do[30; x:s[,/f'x]]; x }              
r[,10 10 10 1] 0 3

Problem 2, Phase 2

f: { a:(0 0 0 0 1 0 0;0 0 0 1 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;1 0 0 0 0 0 0)
     b:(5 7#x)-a; b[&~-1 _in' b[;!5]] }
j: { x[;5]: x[;5]+ _ x[;6]%1000000000; x[;6]: x[;6] ! 1000000000; x }
s: { x:j[x[<x]]; i:,/1#'=x[;!5]; x[i;5 6]:+/'x[=x[;!5];5 6]; x[i] }
r: { do[25; x:s[,/f'x]]; x }
. ,/ $ r[,5 5 5 5 5 0 1][0;5 6]

Problem 3, Phase 1

i: &"I"= m: ,/ 1 _ -1 _ 0: "/home/tom/corona/input3a"
m[i[&i>99]-100]:"X";  m[i[&i<9900]+100]:"X";
m[i[&(i!100)> 0]-1]:"X";  m[i[&(i!100)<99]+1]:"X";  m:100 100#m;
d:100 100 # 0;  deltas:(-1 0;1 0;0 -1;0 1);  q:,12 42;
while[ 0<#q;
       curr:q[0];  q:1 _ q;  dist:d[curr[0];curr[1]];  val:m[curr[0];curr[1]];
       if[ val="C"; \ dist ];  i:0;
       do[ 4;  n:curr+deltas[i];  i+:1; 
           if[ (n[0]>-1) & (n[0]<100) & (n[1]>-1) & (n[1]<100);
               if[ (~m[n[0];n[1]]="X") & (d[n[0];n[1]]=0);
                   d[n[0];n[1]]:dist+1;  q:q,,n; ] ] ] ]

Problem 3, Phase 2

i: &"I"= m: ,/ 1 _ -1 _ 0: "/home/tom/corona/input3b"
m[i[&i>99]-100]:"X";  m[i[&i<9900]+100]:"X";
m[i[&(i!100)> 0]-1]:"X";  m[i[&(i!100)<99]+1]:"X";  m:100 100#m;
d:100 100 # 0;  jumps:(-3 0;3 0;0 -3;0 3);  q:,43 32;
while[ 0<#q;
       curr:q[0];  q:1 _ q;  dist:d[curr[0];curr[1]];  val:m[curr[0];curr[1]];
       if[ val="H"; \ dist ];
       deltas:(-1 0;1 0;0 -1;0 1),jumps[&"DULR"=val];  i:0;
       do[ #deltas;  n:curr+deltas[i];  i+:1; 
           if[ (n[0]>-1) & (n[0]<100) & (n[1]>-1) & (n[1]<100);
               if[ (~m[n[0];n[1]]="X") & (d[n[0];n[1]]=0);
                   d[n[0];n[1]]:dist+1;  q:q,,n; ] ] ] ]

Problem 4

Cipher Text
VVVQBRCAAQKACMASCUI,KMAWAMOCYI

Key
CORONAONAISNOTAJOKESTAYATHOME

Problem 5a

n: . (1 _ 0: "/home/tom/corona/input4")[0]
v: (-1 _ ~(n,101)>101,n) & 1 _ ~(101,n)>n,101
i: (-1+&v),1+&v;  j:i[&v[i]=0];  v[j]:2;
v[& (-1 _ 0,v=2) & v=0]:3; v[& (1 _ (v=2),0) & v=0]:3;
v[-1 + & (v=3) & (-1!2=v) & n<-1!n]:4
v[ 1 + & (v=3) & ( 1!2=v) & n< 1!n]:4; 	v[998 999]:4 5;
i: &v=0;  v[i]:4;  v[i[& n[i-1]>n[i]]-1]:5;
i: &v=0;  j:i[&v[i-1]=3];  v[j]:4;  v[&v=0]:5;
j: & (3=v) & 3=1!v;
i: j[& n[j+1]<n[j]];  v[i]:4;
i: j[& n[j+1]>n[j]];  v[i+1]:4;
v[ 1 + & (v=4) & ( 1!3=v) & n< 1!n]:5
i: j[& n[j+2]>n[j+1]];  v[i+2]:5;
i: j[& n[j-1]>n[j]];  v[i-1]:5;
v[ 1 + & (v=5) & ( 1!4=v) & n<1!n ]:6
i: &(2=v) & 2=1!v;  j:i[&n[i]>n[i+1]];  v[j]:3;  j:i[&n[i]<n[i+1]];  v[j+1]:3;
+/v

Problem 5b

n: . (1 _ 0: "/home/tom/corona/input4")[0]
v: (-1 _ ~(n,101)>101,n) & 1 _ ~(101,n)>n,101
i: (-1+&v),1+&v;  j:i[&v[i]=0];  v[j]:2;
v[& (-1 _ 0,v=2) & v=0]:3; v[& (1 _ (v=2),0) & v=0]:3;
v[-1 + & (v=3) & (-1!2=v) & n<-1!n]:4
v[ 1 + & (v=3) & ( 1!2=v) & n< 1!n]:4; 	v[998 999]:4 5;
i: &v=0;  v[i]:4;  v[i[& n[i-1]>n[i]]-1]:5;
i: &v=0;  j:i[&v[i-1]=3];  v[j]:4;  v[&v=0]:5;
j: & (3=v) & 3=1!v;
i: j[& n[j+1]<n[j]];  v[i]:4;
i: j[& n[j+1]>n[j]];  v[i+1]:4;
v[ 1 + & (v=4) & ( 1!3=v) & n< 1!n]:5
i: j[& n[j+2]>n[j+1]];  v[i+2]:5;
i: j[& n[j-1]>n[j]];  v[i-1]:5;
v[ 1 + & (v=5) & ( 1!4=v) & n<1!n ]:6
i: &(2=v) & 2=1!v;  j:i[&n[i]>n[i+1]];  v[j]:3;  j:i[&n[i]<n[i+1]];  v[j+1]:3;
(-2 _ "[",/($v),\:", "),"]"

Problem 13

s:343#0;  s[0 1]:1 2;  v:1 1;  i:2;
while[ i<#s
  v:((v,0)+0,v)!10000000000004;
  s[i]:+/0<v!7;  i+:1; ]
do[ 6; s:s,(2*s),(3*s),(4*s),(5*s),(6*s),(7*s) ]
s:s,(2*s),(3*s),(4*s)
+/s[!133701337]

Problem 14a

s: * 0: "/home/tom/corona/input14a"
ss:#s;  c:0;  k:1;
while[ k<ss-1
       i:0;  j:ss-k;  jj:!j;
       while[ i<(ss+2)-((ss+1)-k)
              t:s[i+jj]
              if[ ((*t)=*|t)
                  c:c+1
                  /    \ (,/($c,i,j),'" "),t
                  if[ 2<#t
                      n:2
                      while[ n<#t
                             if[ (&/(n#t)=|n#t) & &/(n#t)=n#|t
                                 c:c+1
                                 /   \ (,/($c,i,j),'" "),t," ",t[!n]
                               ]
                             n:n+1 ] ] ]
              i:i+1 ]
       \ k,c; k:k+1; ]

Problem 14b

s: * 0: "/home/tom/corona/input14b"
ss:#s; 	c:0;  d:0;  k: 1;
while[ k<ss-1
       if[ c>1000000007
           d:d+1;  c:c!1000000007; ]
       \ k,d,c
       i:0;  j:ss-k;  jj:!j;
       while[ i<(ss+2)-((ss+1)-k)
              t:s[i+jj]
              if[ ((*t)=*|t)                
                  c:c+1
                  if[ 2<#t
                      n:2
                      w: 1 + *& ~t= |t
                      if[ w=1; w:#t ]
                      while[ n<w
                             if[ (&/(n#t)=|n#t) & &/(n#t)=n#|t
                                 c:c+1 ]
                             n:n+1 ] ] ]
              i:i+1 ]
       \ k,d,c;  k:k+1; ]