Guest User

Untitled

a guest
Dec 17th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SetWorkingDir %A_ScriptDir%
  2.  
  3. FileRead, cubesStr, % A_ScriptDir "\d17.txt"
  4.  
  5. cubesStr := StrReplace(cubesStr, "#", 1)
  6. cubesStr := StrReplace(cubesStr, ".", 0)
  7.  
  8. nei := []
  9. Loop, 3
  10. {
  11.     x := A_Index - 2
  12.     Loop, 3
  13.     {
  14.         y := A_Index - 2
  15.         Loop, 3
  16.         {
  17.             z := A_Index - 2
  18.             if (x = 0) and (y = 0) and (z = 0)
  19.                 Continue
  20.             nei.Push({x: x, y: y, z: z})
  21.         }
  22.     }
  23. }
  24.  
  25. cubes := []
  26. cubes[0] := StrSplit(cubesStr, "`r`n")
  27. for i, j in cubes[0] {
  28.     cubes[0][i] := StrSplit(j)
  29.     for k, l in cubes[0][i] {
  30.         cubes[0][i][k] := {}
  31.         cubes[0][i][k]["state"] := l
  32.         cubes[0][i][k]["actN"] := 0
  33.         cubes[0][i][k]["inaN"] := 0
  34.     }
  35. }
  36.  
  37. Loop, 6
  38. {
  39.     cubesC := ObjFullyClone(cubes)
  40.     for z, layer in cubesC {
  41.         for y, line in layer {
  42.             for x, cube in line {
  43.                 for a, neiC in GetCubesNei(nei, x, y, z) {
  44.                     if !cubes[neiC.z]
  45.                         cubes[neiC.z] := []
  46.                     if !cubes[neiC.z][neiC.y]
  47.                         cubes[neiC.z][neiC.y] := []
  48.                     if !cubes[neiC.z][neiC.y][neiC.x] {
  49.                         cubes[neiC.z][neiC.y][neiC.x] := {}
  50.                         cubes[neiC.z][neiC.y][neiC.x]["state"] := 0
  51.                         cubes[neiC.z][neiC.y][neiC.x]["actN"] := 0
  52.                         cubes[neiC.z][neiC.y][neiC.x]["inaN"] := 0
  53.                     }
  54.                     if (cube.state = 1)
  55.                         cubes[neiC.z][neiC.y][neiC.x]["actN"] += 1
  56.                     else
  57.                         cubes[neiC.z][neiC.y][neiC.x]["inaN"] += 1
  58.                 }
  59.             }
  60.         }
  61.     }
  62.  
  63.     for z, layer in cubes {
  64.         for y, line in layer {
  65.             for x, cube in line {
  66.                 if (cube.state = 1) and ((cube.actN != 2) and (cube.actN != 3))
  67.                     cubes[z][y][x]["state"] := 0
  68.                 if (cube.state = 0) and (cube.actN = 3)
  69.                     cubes[z][y][x]["state"] := 1
  70.                 cubes[z][y][x]["actN"] := 0
  71.                 cubes[z][y][x]["inaN"] := 0
  72.             }
  73.         }
  74.     }
  75.  
  76.     cubesC := ""
  77. }
  78.  
  79. activeCount := 0
  80.  
  81. for z, layer in cubes {
  82.     for y, line in layer {
  83.         for x, cube in line {
  84.             if (cube.state = 1)
  85.                 activeCount += 1
  86.         }
  87.     }
  88. }
  89.  
  90. Clipboard := activeCount
  91.  
  92. GetCubesNei(nei, x, y, z) {
  93.     CubesNei := []
  94.     for i, j in nei {
  95.         CubesNei.Push({x: j.x + x, y: j.y + y, z: j.z + z})
  96.     }
  97.     Return CubesNei
  98. }
  99.  
  100. ObjFullyClone(obj) {
  101.     nobj := obj.Clone()
  102.     for k,v in nobj
  103.         if IsObject(v)
  104.             nobj[k] := A_ThisFunc.(v)
  105.     return nobj
  106. }
Advertisement
Add Comment
Please, Sign In to add comment