Advertisement
Guest User

Untitled

a guest
Dec 11th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. List := StrSplit(FileOpen("day11_input.txt","R").Read(),"`r`n")
  2. for k, a in List {
  3.   Temp := []
  4.   for _, b in StrSplit(a)
  5.     Temp.push(b)
  6.   List[k] := Temp
  7. }
  8.  
  9. NewList := List
  10.  
  11. Loop {
  12.   OldList := ObjFullyClone(NewList)
  13.   NewList := []
  14.  
  15.   changes := 0
  16.   for kx, x in OldList {
  17.     for ky, y in OldList[kx] {
  18.       ocupied := GetOcupied(OldList,{x:kx,y:ky})
  19.       if (y == "L" && ocupied == 0) {
  20.         NewList[kx,ky] := "#"
  21.         changes++
  22.       }
  23.       else if (y == "#" && ocupied >= 5) {
  24.         NewList[kx,ky] := "L"
  25.         changes++
  26.       }
  27.       else
  28.         NewList[kx,ky] := y
  29.     }
  30.   }
  31.   if (changes==0) {
  32.     break
  33.   }
  34. }
  35.  
  36. sum := 0
  37. for k, v in NewList {
  38.   for _, x in v {
  39.     sum += (x=="#")
  40.   }
  41. }
  42. Msgbox % "sum: " sum
  43.  
  44. GetOcupied(array,seat) {
  45.   static movement :=  [[ 0, 1]
  46.                       ,[ 0,-1]
  47.                       ,[ 1, 1]
  48.                       ,[ 1, 0]
  49.                       ,[ 1,-1]
  50.                       ,[-1, 1]
  51.                       ,[-1, 0]
  52.                       ,[-1,-1]]
  53.   ocupied := 0
  54.   for k, pos in movement {
  55.     Loop {
  56.       xpos := seat.x + A_Index * pos[1]
  57.       ypos := seat.y + A_Index * pos[2]
  58.       check := array[xpos,ypos]
  59.       if (check == ".")
  60.         continue
  61.       else if (check == "#")
  62.         ocupied += 1
  63.       break
  64.     }
  65.   }
  66.   return ocupied
  67. }
  68.  
  69. ObjFullyClone(obj)
  70. {
  71.     nobj := obj.Clone()
  72.     for k,v in nobj
  73.         if IsObject(v)
  74.             nobj[k] := A_ThisFunc.(v)
  75.     return nobj
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement