/*--------------------------------------------[REXX] | Advent of Code 2020 wizard@zdevops.com | +-------------------------------------------------*/ say "" /* BEST */ say "" /* ISPF-CLS */ say "" /* EVER */ say " wizard@zdevops.com " say " _ ___ ____ ____ ___ ____ ___ " say " / \ / _ \ / ___|___ \ / _ \___ \ / _ \ " say " / _ \| | | | | __) | | | |__) | | | | " say " / ___ \ |_| | |___ / __/| |_| / __/| |_| | " say " /_/ \_\___/ \____|_____|\___/_____|\___/ " say " " say " >DAY 12/PART 2< " say "" /*------------------------------------------------*/ "ALLOC FI(IN) DA('ZDO.AOC2020.D12.INPUT') SHR" "EXECIO * DISKR IN (STEM actions. FINIS" "FREE FI(IN)" /* Strip bagger */ do i = 1 to actions.0 actions.i = strip(actions.i) end face = 'E' sx = 0 sy = 0 dwpx = 10 dwpy = -1 do i = 1 to actions.0 action = substr(actions.i,1,1) val = substr(actions.i,2,) say "start: x="sx" y="sy" dwpx="dwpx" dwpy="dwpy say "action: "actions.i select when action = "N" then do dwpy = dwpy - val end when action = "S" then do dwpy = dwpy + val end when action = "E" then do dwpx = dwpx + val end when action = "W" then do dwpx = dwpx - val end when action = "L" then do wcoords = newway(dwpx,dwpy,'L',val) dwpx = word(wcoords,1) dwpy = word(wcoords,2) end when action = "R" then do wcoords = newway(dwpx,dwpy,'R',val) dwpx = word(wcoords,1) dwpy = word(wcoords,2) end when action = "F" then do sx = (val * (dwpx)) + sx sy = (val * (dwpy)) + sy end otherwise say "BAD ACTION" end say "InputParsed: x="sx" y="sy" dwpx="dwpx" dwpy="dwpy end say "Done went from (0,0) to ("sx","sy")" mdist = sx + sy say "Answer Part 2: "mdist exit newway: parse arg cx,cy,dir,amt steps = amt / 90 do while steps > 4 steps = steps - 4 end /* can go 1,2,3 or 4 but 4 is same point, so....then return orig */ select when steps = 1 then do if dir = 'L' then do nwpx = cy nwpy = -1 * cx end if dir = 'R' then do nwpx = -1 * cy nwpy = cx end end when steps = 2 then do /* direction does not matter */ nwpx = -1 * cx nwpy = -1 * cy end when steps = 3 then do /* 3x L = 1x R and vice versa */ if dir = 'L' then do nwpx = -1 * cy nwpy = cx end if dir = 'R' then do nwpx = cy nwpy = -1 * cx end end otherwise say "BAD BAD BAD" end say "New WayPoint: "nwpx" "nwpy return nwpx" "nwpy