input<-read_lines("Day18Sample.txt")
### Just read these into a dictionary - save the position in line
corrupt<-dict()
for(i in 1:length(input)){
  corrupt$set(input[i],i)}

Part 1

Search. Use time as a way to figure out if something is in your way

computerstorm<-function(cs,sx,sy,ex,ey,maxx,maxy,t){
  beenthere<-dict()
  pq<-priority_queue()
  ## push x,y,steps
  pq$push(c(sx,sy,0),0)
  while(pq$size()>0){
    curr<-pq$pop()
    ### check to see if have been here before - if not - note
    if(beenthere$has(str_flatten(c(curr[1],curr[2]),","))){next}
    beenthere$set(str_flatten(c(curr[1],curr[2]),","),0)
    ### check to see if we're at the end
    if(all(curr[1:2]==c(ex,ey))){
      return(curr[3])}
    ### otherwise move
    ##up
    if(curr[2]>0){
      ### check to see if that space is corrupt - if not, move there
      checkup<-cs$get(str_flatten(c(curr[1],curr[2]-1),","),default=Inf)
      if(t<checkup){pq$push(c(curr[1],curr[2]-1,curr[3]+1),-sum(1,curr[3],abs(c(ex,ey)-c(curr[1],curr[2]-1))))}}
    ##down
    if(curr[2]<maxy){
      ### check to see if that space is corrupt - if not, move there
      checkdown<-cs$get(str_flatten(c(curr[1],curr[2]+1),","),default=Inf)
      if(t<checkdown){pq$push(c(curr[1],curr[2]+1,curr[3]+1),-sum(1,curr[3],abs(c(ex,ey)-c(curr[1],curr[2]+1))))}}
    ##left
    if(curr[1]>0){
      ### check to see if that space is corrupt - if not, move there
      checkleft<-cs$get(str_flatten(c(curr[1]-1,curr[2]),","),default=Inf)
      if(t<checkleft){pq$push(c(curr[1]-1,curr[2],curr[3]+1),-sum(1,curr[3],abs(c(ex,ey)-c(curr[1]-1,curr[2]))))}}
    ##right
    if(curr[1]<maxx){
      ### check to see if that space is corrupt - if not, move there
      checkleft<-cs$get(str_flatten(c(curr[1]+1,curr[2]),","),default=Inf)
      if(t<checkleft){pq$push(c(curr[1]+1,curr[2],curr[3]+1),-sum(1,curr[3],abs(c(ex,ey)-c(curr[1]+1,curr[2]))))}}
  }
  ### for part 2, return 0 if there's no way through
return(0)}
computerstorm(corrupt,0,0,6,6,6,6,12)
[1] 22

Part 2

Find the limits to t

findt<-function(cs,sx,sy,ex,ey,maxx,maxy){
  ### what are the limits to t
  lowlimit<-1
  highlimit<-cs$size()
  #### while there's a difference between low & high limit
  while(lowlimit+1<highlimit){
    ### try a random time...because I can.
    trytime<-sample((lowlimit+1):(highlimit-1),1)
    x<-computerstorm(cs,sx,sy,ex,ey,maxx,maxy,trytime)
    if(x==0){highlimit<-trytime}else{lowlimit<-trytime}}
  highlimit}
p2<-findt(corrupt,0,0,6,6,6,6)
part2<-input[p2]
part2
[1] "6,1"
6,1
LS0tDQp0aXRsZTogIkRheSAxOCBOb3RlYm9vayINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShjb2xsZWN0aW9ucykNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KYGBgDQoNCmBgYHtyfQ0KaW5wdXQ8LXJlYWRfbGluZXMoIkRheTE4U2FtcGxlLnR4dCIpDQojIyMgSnVzdCByZWFkIHRoZXNlIGludG8gYSBkaWN0aW9uYXJ5IC0gc2F2ZSB0aGUgcG9zaXRpb24gaW4gbGluZQ0KY29ycnVwdDwtZGljdCgpDQpmb3IoaSBpbiAxOmxlbmd0aChpbnB1dCkpew0KICBjb3JydXB0JHNldChpbnB1dFtpXSxpKX0NCmBgYA0KDQoNCiMjIFBhcnQgMQ0KU2VhcmNoLiBVc2UgdGltZSBhcyBhIHdheSB0byBmaWd1cmUgb3V0IGlmIHNvbWV0aGluZyBpcyBpbiB5b3VyIHdheQ0KDQpgYGB7cn0NCmNvbXB1dGVyc3Rvcm08LWZ1bmN0aW9uKGNzLHN4LHN5LGV4LGV5LG1heHgsbWF4eSx0KXsNCiAgYmVlbnRoZXJlPC1kaWN0KCkNCiAgcHE8LXByaW9yaXR5X3F1ZXVlKCkNCiAgIyMgcHVzaCB4LHksc3RlcHMNCiAgcHEkcHVzaChjKHN4LHN5LDApLDApDQogIHdoaWxlKHBxJHNpemUoKT4wKXsNCiAgICBjdXJyPC1wcSRwb3AoKQ0KICAgICMjIyBjaGVjayB0byBzZWUgaWYgaGF2ZSBiZWVuIGhlcmUgYmVmb3JlIC0gaWYgbm90IC0gbm90ZQ0KICAgIGlmKGJlZW50aGVyZSRoYXMoc3RyX2ZsYXR0ZW4oYyhjdXJyWzFdLGN1cnJbMl0pLCIsIikpKXtuZXh0fQ0KICAgIGJlZW50aGVyZSRzZXQoc3RyX2ZsYXR0ZW4oYyhjdXJyWzFdLGN1cnJbMl0pLCIsIiksMCkNCiAgICAjIyMgY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGF0IHRoZSBlbmQNCiAgICBpZihhbGwoY3VyclsxOjJdPT1jKGV4LGV5KSkpew0KICAgICAgcmV0dXJuKGN1cnJbM10pfQ0KICAgICMjIyBvdGhlcndpc2UgbW92ZQ0KICAgICMjdXANCiAgICBpZihjdXJyWzJdPjApew0KICAgICAgIyMjIGNoZWNrIHRvIHNlZSBpZiB0aGF0IHNwYWNlIGlzIGNvcnJ1cHQgLSBpZiBub3QsIG1vdmUgdGhlcmUNCiAgICAgIGNoZWNrdXA8LWNzJGdldChzdHJfZmxhdHRlbihjKGN1cnJbMV0sY3VyclsyXS0xKSwiLCIpLGRlZmF1bHQ9SW5mKQ0KICAgICAgaWYodDxjaGVja3VwKXtwcSRwdXNoKGMoY3VyclsxXSxjdXJyWzJdLTEsY3VyclszXSsxKSwtc3VtKDEsY3VyclszXSxhYnMoYyhleCxleSktYyhjdXJyWzFdLGN1cnJbMl0tMSkpKSl9fQ0KICAgICMjZG93bg0KICAgIGlmKGN1cnJbMl08bWF4eSl7DQogICAgICAjIyMgY2hlY2sgdG8gc2VlIGlmIHRoYXQgc3BhY2UgaXMgY29ycnVwdCAtIGlmIG5vdCwgbW92ZSB0aGVyZQ0KICAgICAgY2hlY2tkb3duPC1jcyRnZXQoc3RyX2ZsYXR0ZW4oYyhjdXJyWzFdLGN1cnJbMl0rMSksIiwiKSxkZWZhdWx0PUluZikNCiAgICAgIGlmKHQ8Y2hlY2tkb3duKXtwcSRwdXNoKGMoY3VyclsxXSxjdXJyWzJdKzEsY3VyclszXSsxKSwtc3VtKDEsY3VyclszXSxhYnMoYyhleCxleSktYyhjdXJyWzFdLGN1cnJbMl0rMSkpKSl9fQ0KICAgICMjbGVmdA0KICAgIGlmKGN1cnJbMV0+MCl7DQogICAgICAjIyMgY2hlY2sgdG8gc2VlIGlmIHRoYXQgc3BhY2UgaXMgY29ycnVwdCAtIGlmIG5vdCwgbW92ZSB0aGVyZQ0KICAgICAgY2hlY2tsZWZ0PC1jcyRnZXQoc3RyX2ZsYXR0ZW4oYyhjdXJyWzFdLTEsY3VyclsyXSksIiwiKSxkZWZhdWx0PUluZikNCiAgICAgIGlmKHQ8Y2hlY2tsZWZ0KXtwcSRwdXNoKGMoY3VyclsxXS0xLGN1cnJbMl0sY3VyclszXSsxKSwtc3VtKDEsY3VyclszXSxhYnMoYyhleCxleSktYyhjdXJyWzFdLTEsY3VyclsyXSkpKSl9fQ0KICAgICMjcmlnaHQNCiAgICBpZihjdXJyWzFdPG1heHgpew0KICAgICAgIyMjIGNoZWNrIHRvIHNlZSBpZiB0aGF0IHNwYWNlIGlzIGNvcnJ1cHQgLSBpZiBub3QsIG1vdmUgdGhlcmUNCiAgICAgIGNoZWNrbGVmdDwtY3MkZ2V0KHN0cl9mbGF0dGVuKGMoY3VyclsxXSsxLGN1cnJbMl0pLCIsIiksZGVmYXVsdD1JbmYpDQogICAgICBpZih0PGNoZWNrbGVmdCl7cHEkcHVzaChjKGN1cnJbMV0rMSxjdXJyWzJdLGN1cnJbM10rMSksLXN1bSgxLGN1cnJbM10sYWJzKGMoZXgsZXkpLWMoY3VyclsxXSsxLGN1cnJbMl0pKSkpfX0NCiAgfQ0KICAjIyMgZm9yIHBhcnQgMiwgcmV0dXJuIDAgaWYgdGhlcmUncyBubyB3YXkgdGhyb3VnaA0KcmV0dXJuKDApfQ0KDQpgYGANCg0KYGBge3J9DQpjb21wdXRlcnN0b3JtKGNvcnJ1cHQsMCwwLDYsNiw2LDYsMTIpDQpgYGANCg0KIyMgUGFydCAyDQoNCkZpbmQgdGhlIGxpbWl0cyB0byB0DQpgYGB7cn0NCmZpbmR0PC1mdW5jdGlvbihjcyxzeCxzeSxleCxleSxtYXh4LG1heHkpew0KICAjIyMgd2hhdCBhcmUgdGhlIGxpbWl0cyB0byB0DQogIGxvd2xpbWl0PC0xDQogIGhpZ2hsaW1pdDwtY3Mkc2l6ZSgpDQogICMjIyMgd2hpbGUgdGhlcmUncyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBsb3cgJiBoaWdoIGxpbWl0DQogIHdoaWxlKGxvd2xpbWl0KzE8aGlnaGxpbWl0KXsNCiAgICAjIyMgdHJ5IGEgcmFuZG9tIHRpbWUuLi5iZWNhdXNlIEkgY2FuLg0KICAgIHRyeXRpbWU8LXNhbXBsZSgobG93bGltaXQrMSk6KGhpZ2hsaW1pdC0xKSwxKQ0KICAgIHg8LWNvbXB1dGVyc3Rvcm0oY3Msc3gsc3ksZXgsZXksbWF4eCxtYXh5LHRyeXRpbWUpDQogICAgaWYoeD09MCl7aGlnaGxpbWl0PC10cnl0aW1lfWVsc2V7bG93bGltaXQ8LXRyeXRpbWV9fQ0KICBoaWdobGltaXR9DQpgYGANCg0KDQpgYGB7cn0NCnAyPC1maW5kdChjb3JydXB0LDAsMCw2LDYsNiw2KQ0KcGFydDI8LWlucHV0W3AyXQ0KcGFydDINCmBgYA==