Advertisement
electronic_steve

ccs : calculator v3

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