SHARE
TWEET

[ComputerCraft] Electron configurator

Redxone May 24th, 2016 97 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --]] Atom assemblr made by: Lewisk3 (Redxone)
  2. --]] order of ops
  3. --:KLMNOP = 2,8,18,32,32...
  4. --= 1s,                    
  5. --= 2s,2p,     
  6. --= 3s,3p,     
  7. --= 4s,3d,4p,  
  8. --= 5s,4d,5p,
  9. --= 6s,4f,5d,6p
  10. --= 7s,5f,6d,7p
  11. --= 8s
  12. --=_________________________________________=--
  13.  
  14. local suborbits = {
  15.     ['s'] = 2,
  16.     ['p'] = 6,
  17.     ['d'] = 10,
  18.     ['f'] = 14,
  19.     ['g'] = 18,
  20.     ['h'] = 22,
  21.     ['i'] = 26,
  22.     ['j'] = 30,
  23.     ['k'] = 34,
  24. }
  25. local shells = {
  26.     0,
  27.     0,
  28.     0,
  29.     0,
  30.     0,
  31.     0,
  32.     0,
  33.     0,
  34.     0,
  35. }
  36. local fillorder = {
  37.     {1,1},
  38.     {2,1},
  39.     {2,2},
  40.     {3,1},
  41.     {3,2},
  42.     {4,1},
  43.     {3,3},
  44.     {4,2},
  45.     {5,1},
  46.     {4,3},
  47.     {5,2},
  48.     {6,1},
  49.     {4,4},
  50.     {5,3},
  51.     {6,2},
  52.     {7,1},
  53.     {5,4},
  54.     {6,3},
  55.     {7,2},
  56.     {8,1},
  57.     {5,5},
  58.     {6,4},
  59.     {7,3},
  60.     {8,2},
  61.     {9,1},
  62. }
  63. local fills = {
  64.     {'s'}, -- K
  65.     {'s','p'}, -- L
  66.     {'s','p','d'}, -- M
  67.     {'s','p','d','f'}, -- N
  68.     {'s','p','d','f','g'}, -- O
  69.     {'s','p','d','f','g','h'}, -- P
  70.     {'s','p','d','f','g','h','i'}, -- Q
  71.     {'s','p','d','f','g','h','i','j'}, -- R
  72.     {'s','p','d','f','g','h','i','j','k'}, -- S
  73. }
  74. local e = 1
  75. -- minimum valence electrons
  76. local mnval = 1
  77. -- maximum valence electrons
  78. local mval = 8
  79. -- Get sub orbit ammount.
  80. function getsoa(soch)
  81.     return suborbits[soch]
  82. end
  83. -- Get shell orbit ammount
  84. function getshoa(so)
  85.     local acc = 0
  86.     for i = 1, #so do
  87.         acc = acc + getsoa(so[i])
  88.     end
  89.     return acc
  90. end
  91. -- Get max electrons from shell oribit table
  92. function getmaxe(atm)
  93.     local tacc = 0
  94.     for i = 1, #atm do
  95.         tacc = tacc + getshoa(atm[i])
  96.     end
  97.     return tacc
  98. end
  99. -- shell print
  100. function shprint(sh)
  101.     for i = 1, #sh do
  102.         if(sh[i] > 0)then print(sh[i]) end
  103.     end
  104. end
  105. -- gets needed shell ammount to make atom
  106. function getnshells(em)
  107.     local sizes = {2,8,32,50,72}
  108.     local fls = 0
  109.     for i = 1, #sizes do
  110.         fls = fls + sizes[i]
  111.         if(fls >= em)then
  112.             return i+1
  113.         end
  114.     end
  115. end
  116. -- distribute electrons
  117. local targs = { ... }
  118. if(#targs ~= 1)then error("Ussage: matom <electrons>") end
  119. -- convert to number
  120. targs[1] = tonumber(targs[1])
  121. if(targs[1] > 570 or targs[1] < 1)then error("Invalid electrons maximum is 570, minimum is 1. ") end
  122. -- give our electron count the provided electrons.
  123. local e = targs[1]
  124. local soa = 0
  125. local mshls = #fillorder
  126. for s = 1, #fillorder do
  127.     if(e == 0)then break end
  128.     local shl = fillorder[s][1]
  129.     local orb = fillorder[s][2]
  130.     if(shl <= mshls)then
  131.         local soa = getsoa(fills[shl][orb])
  132.         if(e >= soa)then
  133.             shells[shl] = shells[shl] + soa
  134.             e = e - soa
  135.         elseif(e <= 8)then
  136.             shells[shl] = shells[shl] + e
  137.             e = 0
  138.             break
  139.         end
  140.     else
  141.         break
  142.     end
  143. end
  144.  
  145. shprint(shells)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top