310 tokens in C for part 2 by dbasden
Download solution
#include<stdio.h>
typedefstruct{
inti
intj
}pos_t
#defineELFOFF
[elf_pos.i][elf_pos.j]
#definegijgrid[i][j]
chargrid[256][256]
intwidth,part_2_result,i,j
pos_telf_start_pos,oob
intevi[4]={-1,0,1},evj[4]={0,1,0,-1}
intdoes_guard_loop(){
intvec_idx=0
intvisited[256][256][4]={}
pos_telf_pos=elf_start_pos
while(gridELFOFF){
if(visitedELFOFF[vec_idx])return1
visitedELFOFF[vec_idx]=1
pos_tforward=(pos_t){elf_pos.i+evi[vec_idx],elf_pos.j+evj[vec_idx]}
if(grid[forward.i][forward.j]!=35&&!(forward.i==i&&forward.j==j))
elf_pos=forward
elsevec_idx=(vec_idx+1)&3
}
return0
}
intmain(){
while(scanf("%s%n",&(grid[++i][0]),&width)==1)
for(j=0j<width++j)
if(gij==94)elf_start_pos=(pos_t){i,j}
for(i=1i<width++i)
for(j=0j<width++j)
part_2_result+=gij!=94&&does_guard_loop()
printf("%d\n",part_2_result)
}