Day 6: Guard Gallivant

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

    • CameronDev@programming.devOPM
      link
      fedilink
      arrow-up
      2
      ·
      18 days ago

      How did you detect loops? I just ran for 100000 steps to see if I escaped, got my time down to 3s by doing only 10000 steps.

      • TunaCowboy@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        18 days ago

        I added each visited position/direction to a set, and when a ‘state’ is reached again you have entered a loop:

        v = set()
        while t[g.r][g.c] != 'X':
            state = (g.r, g.c, g.d)
            if state in v:
                acc += 1
                break
            v.add(state)
            g.move(t)
        

        You can view my full solution here.

      • Leavingoldhabits@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        18 days ago

        Not who you asked but: I save coordinates and direction into a vector each time the guard faces a #. Also every time the guard faces a #, I check if the position exists in the vector, if true, it’s an infinite loop. 78ms rust aolution.

        • CameronDev@programming.devOPM
          link
          fedilink
          arrow-up
          1
          ·
          18 days ago

          That’s probably quite optimal, compared with checking every state in the path, or running off a fixed number of steps