Advertisement
electronic_steve

ccs: SM reator calculator

Mar 14th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.99 KB | None | 0 0
  1. if not shell.run("ESGraphics") then
  2. shell.run("pastebin","get","kDm3zq5E","ESGraphics")
  3. shell.run("ESGraphics")
  4.  end
  5. mapX=5
  6. mapY=5
  7. mapZ=5
  8. map={}
  9. drawz=1
  10.  
  11. drawscale=10
  12. htime=0
  13. groups={}
  14. dim={}
  15. dims={}
  16. drawx=0
  17. drawy=0
  18. npower=10002
  19. GroupPower={}
  20. SumOfDimensions={}
  21. GroupSumPower=0
  22. maps={}
  23. TotalNumberOfBlocksInAllGroups=0
  24. failstep=0
  25. maxloop=0
  26. loop=0
  27. drawblocks=0
  28. test=0
  29. --bush
  30. bush={}
  31. start=1
  32. draw=true
  33. blocksmap={}
  34.  
  35. function saveinblocksmap(x,y,z)
  36. blocksmap[#blocksmap+1]={x,y,z,map[x][y][z]}
  37.  
  38. end
  39. function getblockmap(i)
  40. return blocksmap[i][1],blocksmap[i][2],blocksmap[i][3],blocksmap[i][4]
  41.  
  42. end
  43. bush[1]= function(x,y,z)
  44. local radius=math.random(1,math.floor((mapX+mapY+mapZ)/3))
  45. for nx=-radius,radius do
  46.  for ny=-radius,radius do
  47.   for nz=-radius,radius do
  48.   local x2=limit(x+nx,mapX)
  49.   local y2=limit(y+ny,mapY)
  50.   local z2=limit(z+nz,mapZ)
  51.   --print(x2,y2,z2)
  52.    if map[x2][y2][z2]==-1
  53.    then map[x2][y2][z2]=-2 else
  54.    map[x2][y2][z2]=-1 end
  55.   end
  56.  end
  57.  end
  58. end
  59. bush[2]= function(x2,y,z)
  60.  for x=1,mapX do
  61.   if map[x][y][z]==-1
  62.   then map[x][y][z]=-2 else
  63.   map[x][y][z]=-1 end
  64.  end
  65.  
  66. end
  67. bush[3]= function(x,y2,z)
  68.  for y=1,mapY do
  69.   if map[x][y][z]==-1
  70.   then map[x][y][z]=-2 else
  71.   map[x][y][z]=-1 end
  72.  end
  73. end
  74. bush[4]= function(x,y,z2)
  75.  for z=1,mapZ do
  76.   if map[x][y][z]==-1
  77.   then map[x][y][z]=-2 else
  78.   map[x][y][z]=-1 end
  79.  end
  80. end
  81. bush[5]= function(x2,y2,z)
  82.  for x=1,x2 do
  83.   for y=1,y2 do
  84.    if math.random(1,2)==1 then
  85.     if map[x][y][z]==-1
  86.     then map[x][y][z]=-2 else
  87.     map[x][y][z]=-1 end
  88.    end
  89.   end
  90.  end
  91. end
  92.  
  93. bush[6]= function(x,y2,z2)
  94.  for z=1,z2 do
  95.   for y=1,y2 do
  96.    if math.random(1,2)==1 then
  97.     if map[x][y][z]==-1
  98.     then map[x][y][z]=-2 else
  99.     map[x][y][z]=-1 end
  100.  
  101.  end
  102.  end
  103.  end
  104.  end
  105. bush[7]= function(x2,y,z2)
  106. for x=1,x2 do
  107.  for z=1,z2 do
  108.  if math.random(1,2)==1 then
  109.   if map[x][y][z]==-1
  110. then map[x][y][z]=-2 else
  111.  map[x][y][z]=-1 end
  112.  
  113.  end
  114.  end
  115.  end
  116.  end
  117.  bush[8]= function(x2,y2,z)
  118. x=math.random(1,mapX)
  119. y=math.random(1,mapY)
  120. map[x][y][z]=-2
  121.  end
  122.  
  123.  
  124.  function generatemap()
  125.  local I=-1
  126.  local O=-2
  127. map={
  128. {
  129. {I,O,I,I,I},
  130. {I,I,O,O,O},
  131. {I,O,I,I,I},
  132. {O,I,O,I,I},
  133. {I,I,I,I,I},
  134.  
  135. },
  136. {
  137. {O,I,I,O,O},
  138. {O,O,O,I,I},
  139. {I,O,I,O,I},
  140. {I,O,O,I,O},
  141. {O,O,I,I,O},
  142.  
  143. },
  144. {
  145. {I,I,O,I,I},
  146. {I,O,I,O,I},
  147. {O,I,I,I,O},
  148. {I,O,I,O,I},
  149. {I,I,O,I,I},
  150.  
  151. },
  152. {
  153. {O,O,I,I,O},
  154. {I,O,O,O,O},
  155. {I,O,I,O,I},
  156. {O,O,O,O,I},
  157. {O,I,I,O,O},
  158.  
  159. },
  160. {
  161. {I,I,I,O,I},
  162. {O,I,O,I,I},
  163. {I,O,I,O,I},
  164. {I,I,O,I,O},
  165. {I,O,I,I,I},
  166.  
  167. }
  168. }
  169. for x=1,mapX do
  170. maps[x]={}
  171. for y=1,mapY do
  172. maps[x][y]={}
  173. for z=1,mapZ do
  174. maps[x][y][z]=O
  175.  
  176. end end end
  177.  
  178.  
  179.  
  180. for x=1,mapX do
  181. for y=1,mapY do
  182. for z=1,mapZ do
  183. maps[x][y][z]=map[x][y][z] end end end
  184.  
  185. end
  186. generatemap()  
  187.  
  188. function resetall()
  189. drawblocks=TotalNumberOfBlocksInAllGroups
  190. TotalNumberOfBlocksInAllGroups=0
  191. SumOfDimensions=nil
  192. SumOfDimensions={}
  193. SizePower=0
  194.  
  195. GroupPower=nil
  196. GroupPower={}
  197. GroupSumPower=0
  198.  
  199. end
  200. function mima(mi,n,ma)
  201. local x=math.min(n,ma)
  202.  
  203. local nx=math.max(mi,x)
  204.  
  205. return nx
  206. end  
  207.  
  208. function resetmap()
  209. for I=1,#blocksmap do
  210. x,y,z,name=getblockmap(I)
  211.   if map[x][y][z]==-2 then else map[x][y][z]=-1 end
  212.    
  213.  
  214. end
  215.    groups=nil
  216. groups={}
  217.    dim=nil
  218. dim={}
  219. dims=nil
  220. dims={}
  221. blocksmap=nil
  222. blocksmap={}
  223. end
  224.  
  225. function limit(n,n1) -- 1=<n=<n1
  226. local x=math.min(n,n1)
  227. local nx=math.max(1,x)
  228. return nx
  229. end
  230.  
  231.  
  232. function updateall()
  233.  
  234. loop=loop+1
  235. if loop==maxloop then else
  236.  if loop==1 then  else
  237.  
  238. bush[math.random(1,#bush)](math.random(1,mapX),math.random(1,mapY),math.random(1,mapZ))
  239.  
  240.  end
  241.  
  242.  for x=1,mapX do
  243.  for y=1,mapY do
  244.   for z=1,mapZ do
  245.    
  246.   saveinblocksmap(x,y,z,map[x][y][z])
  247.  
  248.   end end end
  249.  
  250.  
  251.  
  252.  
  253.  
  254. local fail=0
  255. for I=1,#blocksmap do
  256. x,y,z,name=getblockmap(I)
  257.    if map[x][y][z]==-1 then
  258.     groups[#groups+1]={}
  259.     map[x][y][z]=#groups
  260.     dim[#groups]={}
  261.     dims[#groups]={}
  262.     for i=1,(mapX+mapY+mapZ)/3 do
  263.     for I2=1,#blocksmap do
  264. x2,y2,z2,name=getblockmap(I2)
  265.         if map[x2][y2][z2]==#groups then
  266.         reactorupdate(x2,y2,z2,-1,#groups) else fail=fail+1
  267.        
  268.        
  269.        
  270.       end
  271.    
  272.      
  273.    end
  274.   end
  275.  end
  276. end
  277. if #groups>0 then
  278. dim[#dim]={}
  279.  
  280.  for i=1, #dim do
  281.     for I2=1,#blocksmap do
  282. x,y,z,name=getblockmap(I2)
  283.      if map[x][y][z]==i then dim[i][#dim[i]+1]={x,y,z}
  284.    
  285.    
  286.    end
  287.   end
  288.  end
  289. end
  290.  
  291. for i=1, #groups do
  292. for n=1, #dim[i] do
  293.  
  294.    
  295.    
  296.    
  297.     if n==1 then
  298. minx=dim[i][n][1]
  299. maxx=dim[i][n][1]
  300. miny=dim[i][n][2]
  301. maxy=dim[i][n][2]
  302. minz=dim[i][n][3]
  303. maxz=dim[i][n][3]
  304.  else
  305. minx=math.min (dim[i][n][1],minx)
  306. maxx=math.max (dim[i][n][1],maxx)
  307. miny=math.min (dim[i][n][2],miny)
  308. maxy=math.max (dim[i][n][2],maxy)
  309. minz=math.min (dim[i][n][3],minz)
  310. maxz=math.max (dim[i][n][3],maxz)
  311.  
  312.  end
  313.  
  314.  
  315.  end
  316.  
  317.  dims[i]={maxx-(minx-1),maxy-(miny-1),maxz-(minz-1)}
  318.  
  319.  
  320.  
  321.  end
  322.  
  323.  for i=1, #groups do
  324.  SumOfDimensions[i]=dims[i][1]+dims[i][2]+dims[i][3]
  325.  SizePower = 2000000 / ( 1 + 1.000696^(-0.333*(SumOfDimensions[i]/3)^1.7)) - 1000000
  326.  
  327.  BlockPower = 25 * #dim[i]
  328.  SizePower =math.min(SizePower,1000000 )
  329.  GroupPower[i] = BlockPower + SizePower
  330.  
  331.   GroupSumPower=GroupSumPower+(SumOfDimensions[i]/3)^1.7
  332.  
  333.  
  334.  
  335.   TotalNumberOfBlocksInAllGroups = TotalNumberOfBlocksInAllGroups+#dim[i]
  336.   end
  337.   GroupSumSizePower = 2000000 / ( 1 + 1.000696^(-0.333 * GroupSumPower)) - 1000000
  338.   BlockPower = 25 * TotalNumberOfBlocksInAllGroups
  339.  TotalPower = math.floor(BlockPower + GroupSumSizePower)
  340.  
  341.  
  342. if npower<TotalPower then   savemap() npower=TotalPower  else loadmap()
  343.  
  344.  
  345.  
  346.  failstep=failstep+1  end
  347. resetall()
  348. end
  349.  
  350.  
  351.  
  352.  
  353.  
  354. end
  355.  
  356. function reactorupdate(x,y,z,d,d2)
  357.  
  358.  
  359.  
  360.     if  map[x][y][z]==d then map[x][y][z]=d2 end
  361.     if  map[limit(x+1,mapX)][y][z]==d then map[limit(x+1,mapX)][y][z]=d2 end
  362.     if  map[limit(x-1,mapX)][y][z]==d then map[limit(x-1,mapX)][y][z]=d2 end
  363.     if  map[x][limit(y+1,mapY)][z]==d then map[x][limit(y+1,mapY)][z]=d2 end
  364.     if  map[x][limit(y-1,mapY)][z]==d then map[x][limit(y-1,mapY)][z]=d2 end
  365.     if  map[x][y][limit(z+1,mapZ)]==d then map[x][y][limit(z+1,mapZ)]=d2 end
  366.     if  map[x][y][limit(z-1,mapZ)]==d then map[x][y][limit(z-1,mapZ)]=d2 end
  367.    
  368. end
  369.  
  370. function savemap()
  371.   for x=1,mapX do
  372.    for y=1,mapY do
  373.     for z=1,mapZ do
  374. maps[x][y][z]=map[x][y][z]
  375.  end end
  376. end end
  377. function loadmap()
  378.   for x=1,mapX do
  379.    for y=1,mapY do
  380.     for z=1,mapZ do
  381. map[x][y][z]=maps[x][y][z]
  382. end end
  383. end end  
  384. function mimat(mi,n,ma)
  385. if n<mi or n>ma then return false else return true end
  386.  
  387.  
  388. end
  389.  
  390. function update()
  391. math.randomseed(os.time()+math.random(-100000,1000000000))
  392. if start==1 then
  393.  updateall() end
  394. end
  395.  
  396. function draw()
  397.  
  398.  
  399. for z=1,mapZ do
  400.  gh.rectangle("line",z*mapZ+z,2,mapX+1,mapY+1,8,8," " )
  401. for y=1,mapY do
  402. for x=1,mapX do
  403. if  map[x][y][z]==-2 then else
  404.  
  405. gh.point(x+mapZ*z+z,y+2,1,12,"#")
  406. end
  407. end
  408. end
  409.  
  410.  
  411.  
  412.  
  413. end
  414. gh.text(1,10,1,0,"fps:"..fps.update().." power:"..npower)
  415. gh.text(1,11,1,0,"loop:"..loop.." fail step:"..failstep.." good step:"..loop-failstep)
  416.  resetmap()
  417. end
  418.  
  419. while true do
  420. r.systemupdate()
  421. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement