solidity

Untitled

Apr 8th, 2013
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.91 KB | None | 0 0
  1. # biscalc in ruby
  2.  
  3. # setup gems & statweights
  4. $w = Hash["int" => 4.64, "spi" => 5.23, "hit" => 5.23, "haste" => 2.51, "mastery" => 2.36, "crit" => 2.29]
  5. if $w["haste"] > $w["mastery"] and $w["haste"] > $w["crit"] then
  6.     $maxyellow = "haste"
  7. elsif $w["mastery"] > $w["haste"] and $w["mastery"] > $w["crit"] then
  8.     $maxyellow = "mastery"
  9. else
  10.     $maxyellow = "crit"
  11. end
  12. #puts $maxyellow
  13. $gems = ["160int","80int_160#{$maxyellow}","80int_160spi","burning_primal"]
  14. $gemval = [160 * $w["int"], 80 * $w["int"] + 160 * $w[$maxyellow], 80 * $w["int"] + 160 * $w["spi"], 216 * $w["int"]]
  15.  
  16.  
  17. def fact(n)
  18.   if n<= 1
  19.     1
  20.   else
  21.     n * fact( n - 1 )
  22.   end
  23. end
  24.  
  25. # setup classes
  26.  
  27. class Item
  28.     #@@gems = ["160int", "80int_160haste", "80int_160spi", "burning_primal"]
  29.     @gembonus = Hash["int" => 0, "spi" => 0, "hit" => 0, "haste" => 0, "mastery" => 0, "crit" => 0]
  30.     def initialize(id, name, slot, int = 0, splpwr = 0, spi = 0, hit = 0, haste = 0, mastery = 0, crit = 0, sockets = nil)
  31.         @id = id
  32.         @name = name
  33.         @slot = slot    #head,shoulder,back,chest,wrist,hands,waist,legs,feet,finger,trinket,main_hand,off_hand
  34.         @int = int
  35.         @splpwr = splpwr
  36.         @spi = spi
  37.         @hit = hit
  38.         @haste = haste
  39.         @mastery = mastery
  40.         @crit = crit
  41.         @sockets = sockets  # array of skt colors, bonus value, bonus stat: 0 = red, 1 = yellow, 2 = blue, 3 = meta
  42.                                 # [1, 2, 3, 180, "int"]
  43.     end
  44.    
  45.     def getSpiHit()
  46.         spihit = @spi + @hit + @gembonus["hit"] + @gembonus["spi"]
  47.     end
  48.    
  49.     def gem()
  50.         # calc matching value
  51.         v_match = 0
  52.         @sockets[0..-3].each do |s|
  53.             v_match += $gemval[s]
  54.         end
  55.         v_match += @sockets[-2] * $w[@sockets[-1]]
  56.         #puts "matching value: #{v_match}"
  57.         # calc pure value
  58.         v_pure = 0
  59.         bonus = true
  60.         @sockets[0..-3].each do |s|
  61.             s < 3 ? v_pure += $gemval[0] : v_pure += $gemval[s]
  62.             s > 0 ? bonus = false : nil
  63.         end
  64.         bonus ? v_pure += @sockets[-2] * $w[@sockets[-1]] : nil
  65.         #puts "pure value: #{v_pure}"
  66.        
  67.         #construct gemstring
  68.         gemstring = ",gems="
  69.         bonus = true    # assume matching sockets
  70.         if v_match > v_pure then
  71.             @sockets[0..-3].each do |s|
  72.                 gemstring += "#{$gems[s]}_"
  73.                 # case s
  74.                 # when 0
  75.                     # @gembonus["int"] += 160
  76.                 # when 1
  77.                     # @gembonus["int"] += 80
  78.                     # @gembonus[$maxyellow] += 160
  79.                 # when 2
  80.                     # @gembonus["int"] += 80
  81.                     # @gembonus["spi"] += 160
  82.                 # when 3
  83.                     # @gembonus["int"] += 216
  84.                 # end
  85.             end
  86.             gemstring += "#{@sockets[-2]}#{@sockets[-1]}_"
  87.         else
  88.             @sockets[0..-3].each do |s|
  89.                 if s < 3 then
  90.                     gemstring += "#{$gems[0]}_"
  91.                     s > 0 ? bonus = false : nil
  92.                 else
  93.                     gemstring += "#{$gems[s]}_"
  94.                 end
  95.             end
  96.             if bonus then
  97.                 gemstring += "#{@sockets[-2]}#{@sockets[-1]}_"
  98.             end
  99.         end
  100.         gemstring.chop!
  101.     end
  102.    
  103.     def getSimc(slotnmbr = "")
  104.         #clean up the item name
  105.         name = @name.gsub(" ", "_") # space to underscore
  106.         name.gsub!("'", "")         # remove apostrophes
  107.         name.gsub!(",", "")         # remove commata
  108.         name.downcase!
  109.        
  110.         # create gemstring
  111.         gemstring = ""
  112.         if @sockets then
  113.             gemstring = gem()
  114.         end
  115.         # create enchantstring
  116.         case @slot
  117.         when "shoulders"
  118.             enchantstring = ",enchant=200int_100crit"
  119.         when "back"
  120.             enchantstring = ",enchant=180int"
  121.         when "chest"
  122.             enchantstring = ",enchant=80all"
  123.         when "wrists"
  124.             enchantstring = ",enchant=180int"
  125.         when "hands"
  126.             enchantstring = ",enchant=170haste"
  127.         when "legs"
  128.             enchantstring = ",enchant=285int_165spi"
  129.         when "feet"
  130.             enchantstring = ",enchant=140mastery"
  131.         when "finger"
  132.             enchantstring = ",enchant=160int"
  133.         when "main_hand"
  134.             enchantstring = ",enchant=jade_spirit"
  135.         when "off_hand"
  136.             enchantstring = ",enchant=165int"
  137.         else
  138.             enchantstring = ""
  139.         end
  140.         puts "#@slot#{slotnmbr}=#{name},id=#@id#{gemstring}#{enchantstring}"
  141.     end
  142. end
  143.  
  144. class Set
  145.     def initialize(head, neck, shoulders, back, chest, wrists, hands, waist, legs, feet, finger1, finger2, trinket1, trinket2, main_hand, off_hand)
  146.         @slots = [head, neck, shoulders, back, chest, wrists, hands, waist, legs, feet, finger1, finger2, trinket1, trinket2, main_hand, off_hand]
  147.     end
  148.    
  149.     def getSpiHit()
  150.         spihit = 0
  151.         @slots.each do |s|
  152.             spihit += s.getSpiHit
  153.         end
  154.         result = spihit
  155.     end
  156. end
  157.  
  158.  
  159. # item base
  160. #def initialize(id, name, slot, int = 0, splpwr = 0, spi = 0, hit = 0, haste = 0, mastery = 0, crit = 0, sockets = nil)
  161. # array of skt colors, bonus value, bonus stat: 0 = red, 1 = yellow, 2 = blue, 3 = meta
  162. $head = Array.new
  163. $head.push(Item.new(96696,"Headpiece of the Witch Doctor","head",1519,0,1088,0,995,0,0,[3,1,180,"crit"]))
  164. $head.push(Item.new(96509,"Clear-Mind Helm","head",1519,0,0,0,1070,1023,0,[3,2,180,"int"]))
  165. $head.each do |i|
  166.     i.getSimc()
  167. end
  168. $neck = Array.new
  169. $neck.push(Item.new(96402,"Horridon's Tusk Fragment","neck",980,0,558,0,0,710,0,nil))
  170. $neck.push(Item.new(96537,"Passionfire Choker","neck",900,0,581,0,0,0,633,[1,60,"crit"]))
  171. $neck.push(Item.new(96560,"Soul Prism of Lei-Shen","neck",820,0,665,0,417,0,0,[2,2,120,"spi"]))
  172. $neck.push(Item.new(96708,"Necklace of the Terra-Cotta Invoker","neck",900,0,0,642,565,0,0,[0,60,"hit"]))
  173. $neck.push(Item.new(96713,"Necklace of the Terra-Cotta Mender","neck",900,0,652,0,0,549,0,[0,60,"spi"]))
  174. $neck.push(Item.new(96453,"Megaera's Shining Eye","neck",980,0,0,654,0,0,654,nil))
  175. $neck.each do |i|
  176.     i.getSimc()
  177. end
  178. $shoulders = Array.new
  179. $shoulders.push(Item.new(96698,"Shoulderwraps of the Witch Doctor","shoulders",1147,0,0,0,817,0,748,[0,1,120,"haste"]))
  180. $shoulders.push(Item.new(96439,"Spaulders of Quaking Fear","shoulders",1227,0,942,0,642,0,0,[0,60,"spi"]))
  181. $shoulders.push(Item.new(96615,"Abandoned Spaulders of Renewal","shoulders",1227,0,0,0,0,844,809,[2,60,"int"]))
  182. $shoulders.each do |i|
  183.     i.getSimc()
  184. end
  185. $back = Array.new
  186. $back.push(Item.new(95013,"Black Night Thundercloak","back",957,0,651,0,0,651,0,[1,60,"haste"]))
  187. $back.push(Item.new(95014,"Red Sky Cloudcloak","back",957,0,0,701,566,0,0,[1,60,"haste"]))
  188. $back.push(Item.new(96383,"Drape of Booming Nights","back",980,0,719,0,0,0,542,nil))
  189. $back.push(Item.new(96435,"Shimmershell Cape","back",980,0,0,0,0,682,605,nil))
  190. $back.push(Item.new(96485,"Deadly Glare Cape","back",900,0,0,0,633,0,581,[0,60,"int"]))
  191. $back.push(Item.new(96517,"Constantly Accelerating Cape","back",900,0,549,0,652,0,0,[0,60,"int"]))
  192. $back.each do |i|
  193.     i.getSimc()
  194. end
  195. $chest = Array.new
  196. $chest.push(Item.new(96694,"Hauberk of the Witch Doctow","chest",1519,0,966,0,0,1105,0,[0,1,2,180,"int"]))
  197. $chest.push(Item.new(96532,"Ro'shak's Molten Chain","chest",1599,0,1093,0,1093,0,0,[0,0,120,"int"]))
  198. $chest.push(Item.new(96459,"Chain of Consuming Magic","chest",1599,0,1226,0,0,866,0,[1,1,120,"int"]))
  199. $chest.push(Item.new(95035,"Chains of Counted Souls","chest",1620,0,0,0,1228,938,0,[1,1,1,180,"int"]))
  200. $chest.each do |i|
  201.     i.getSimc()
  202. end
  203. $wrists = Array.new
  204. $wrists.push(Item.new(96489,"Vein-Cover Bracers","wrists",980,0,736,0,512,0,0,nil))
  205. $wrists.each do |i|
  206.     i.getSimc()
  207. end
  208. $hands = Array.new
  209. $hands.push(Item.new(96695,"Gloves of the Witch Doctor","hands",1227,0,0,0,0,849,769,[0,60,"int"]))
  210. $hands.push(Item.new(96466,"Grasp of the Ruthless Mother","hands",1307,0,786,0,0,922,0,[0,60,"int"]))
  211. $hands.push(Item.new(96545,"Fingers of the Night","hands",1227,0,930,0,0,0,633,[1,60,"int"]))
  212. $hands.each do |i|
  213.     i.getSimc()
  214. end
  215. $waist = Array.new
  216. $waist.push(Item.new(94999,"Longdraw Chain Belt","waist",1222,0,0,0,924,712,0,[0,2,2,120,"int"]))
  217. $waist.push(Item.new(96458,"Links of the Bifurcated Tongue","waist",1147,0,804,0,0,769,0,[0,0,1,120,"spi"]))
  218. $waist.push(Item.new(96717,"Abandoned Zandalari Waterchain","waist",1227,0,0,0,746,0,882,[0,2,60,"int"]))
  219. $waist.each do |i|
  220.     i.getSimc()
  221. end
  222. $legs = Array.new
  223. $legs.push(Item.new(96697,"Kilt of the Witch Doctor","legs",1599,0,0,0,937,0,1201,[1,2,120,"int"]))
  224. $legs.push(Item.new(96564,"Leggings of the Violent Gale","legs",1519,0,1178,0,0,834,0,[0,0,0,180,"int"]))
  225. $legs.push(Item.new(96407,"Legguards of Scintillating Scales","legs",1599,0,0,0,0,1093,1093,[0,2,120,"int"]))
  226. $legs.push(Item.new(95027,"Legguards of Awaked Repair","legs",1620,0,1228,0,0,0,938,[0,1,1,180,"mastery"]))
  227. $legs.each do |i|
  228.     i.getSimc()
  229. end
  230. $feet = Array.new
  231. $feet.push(Item.new(95008,"World-Mote Sabatons","feet",1222,0,850,0,0,0,805,[1,2,120,"int"]))
  232. $feet.push(Item.new(96387,"Ghostbinder Greatboots","feet",1227,0,911,0,691,0,0,[1,60,"spi"]))
  233. $feet.push(Item.new(96711,"Spiritbound Boots","feet",1307,0,0,0,0,871,871,nil))
  234. $feet.each do |i|
  235.     i.getSimc()
  236. end
  237. $finger = Array.new
  238. $finger.push(Item.new(95018,"Ra-den's Evolving Signet","finger",957,0,658,0,624,0,0,[2,60,"int"]))
  239. $finger.push(Item.new(95019,"Ra-den's Summoning Band","finger",957,0,0,509,744,0,0,[2,60,"int"]))
  240. $finger.push(Item.new(96382,"Jin'rokh's Dreamshard","finger",980,0,0,605,0,0,682,nil))
  241. $finger.push(Item.new(96403,"Petrified Eye of the Basilisk","finger",980,0,745,0,0,497,0,nil))
  242. $finger.push(Item.new(96486,"Durumu's Captive Eyeballs","finger",900,0,672,0,0,0,496,[0,60,"spi"]))
  243. $finger.push(Item.new(96529,"Ro'shak's Remembrance","finger",900,0,0,0,0,478,703,[2,60,"haste"]))
  244. $finger.each do |i|
  245.     i.getSimc()
  246. end
  247. $trinket = Array.new
  248. $trinket.push(Item.new(96516,"Cha'Ye's Essence of Brilliance","trinket",0,0,0,0,0,0,1657,nil))
  249. $trinket.push(Item.new(96558,"Unerring Vision of Lei-Shen","trinket",1657,0,0,0,0,0,0,nil))
  250. $trinket.push(Item.new(96413,"Wushoolay's Final Choice","trinket",0,0,0,1657,0,0,0,nil))
  251. $trinket.push(Item.new(96455,"Breath of the Hydra","trinket",0,0,0,0,1657,0,0,nil))
  252. $trinket.each do |i|
  253.     i.getSimc()
  254. end
  255. $off_hand = Array.new
  256. $off_hand.push(Item.new(96436,"Torto's Discarded Shell","off_hand",900,0,676,0,525,0,0,[2,60,"int"]))
  257. $off_hand.push(Item.new(96538,"Shield of Twinned Despair","off_hand",900,0,712,0,0,463,0,[0,60,"int"]))
  258. $off_hand.push(Item.new(96454,"Fetish of the Hydra","off_hand",900,0,0,642,0,0,565,[2,60,"int"]))
  259. $off_hand.push(Item.new(96530,"Orb of Arcing Lightning","off_hand",900,0,696,0,472,0,0,[0,60,"int"]))
  260. $off_hand.push(Item.new(96562,"Lei-Shen's Orb of Command","off_hand",900,0,0,0,518,0,670,[0,60,"int"]))
  261. $off_hand.each do |i|
  262.     i.getSimc()
  263. end
  264. $main_hand = Array.new
  265. $main_hand.push(Item.new(96559,"Torall, Rod of the Shattered Throne","main_hand",754,10078,533,0,342,0,0,[0,60,"int"]))
  266. $main_hand.push(Item.new(96414,"Amun-Thoth, Sul's Spiritrending Talons","main_hand",674,10078,506,0,0,389,0,[2,60,"int"]))
  267. $main_hand.push(Item.new(96518,"Athame of the Sanguine Rital","main_hand",674,10078,0,0,463,463,0,[0,60,"int"]))
  268. $main_hand.push(Item.new(96487,"Ritual Dagger of the Mind's Eye","main_hand",674,10078,499,0,0,0,401,[0,60,"int"]))
  269. $main_hand.each do |i|
  270.     i.getSimc()
  271. end
  272.  
  273. # build sets
  274. $x = $head.length*$neck.length*$shoulders.length*$back.length*$chest.length*$wrists.length*$hands.length*$waist.length*$legs.length*$feet.length*$main_hand.length*$off_hand.length*fact($finger.length)/(fact($finger.length-2)*fact(2))*fact($trinket.length)/(fact($trinket.length-2)*fact(2))
  275. puts $x
  276. $sets = Array.new
  277. $numsets = 0
  278. $head.each do |he|
  279.     $neck.each do |ne|
  280.         $shoulders.each do |sh|
  281.             $back.each do |ba|
  282.                 $chest.each do |ch|
  283.                     $wrists.each do |wr|
  284.                         $hands.each do |ha|
  285.                             $waist.each do |wa|
  286.                                 $legs.each do |le|
  287.                                     $feet.each do |fe|
  288.                                         (0..$finger.length-2).each do |f1t|
  289.                                             f1 = $finger[f1t]
  290.                                             (f1t+1..$finger.length-1).each do |f2t|
  291.                                                 f2 = $finger[f2t]
  292.                                                 (0..$trinket.length-2).each do |t1t|
  293.                                                     t1 = $trinket[t1t]
  294.                                                     (t1t+1..$trinket.length-1).each do |t2t|
  295.                                                         t2 = $trinket[t2t]
  296.                                                         $off_hand.each do |oh|
  297.                                                             $main_hand.each do |mh|
  298.                                                                 # tempset = Set.new(he,ne,sh,ba,ch,wr,ha,wa,le,fe,f1,f2,t1,t2,oh,mh)
  299.                                                                 # if tempset.getSpiHit < 8500 then
  300.                                                                     # $sets.push(tempset)
  301.                                                                 # end
  302.                                                                 $numsets += 1
  303.                                                             end
  304.                                                         end
  305.                                                     end
  306.                                                 end
  307.                                             end
  308.                                         end
  309.                                     end
  310.                                 end
  311.                             end
  312.                         end
  313.                     end
  314.                 end
  315.             end
  316.         end
  317.     end
  318. end
  319.  
  320. puts $numsets
Add Comment
Please, Sign In to add comment