Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #input.txt
- Levi 1st 1.0 324 337 350 362 375 388 401
- Levi 3rd 1.15 372 387 402 417 432 447 461
- Levi Charge 1.50 485 505 524 544 563 582 602
- Suda 3rd 1.15**2 428 445 462 479 496 513 531
- Suda Charge 1.5*1.075 522 543 563 584 605 626 647
- Suda Charge Explosion 1.15*1.5 558 580 603 625 647 670 692
- Nitro 1.075 348 362 376 390 404 417 431
- Irontech 1.075**2 374 389 404 419 434 449 464
- BAB 1.075*1.15 400 416 432 448 464 480 496
- #script file
- require 'bigdecimal'
- def num value # Use BigDecimal to minimize float errors
- BigDecimal.new(value, 16) # Biggest precision allowed
- end
- # Initialize
- attacks = File.open 'input.txt' do |file|
- file.read.split(?\n).map do |line|
- name, multiplier, *values = line.split(?\t)
- values = values.map{|v| num(v.to_f)}
- {
- name: name,
- multiplier: num(eval(multiplier)),
- max: values.map{|v| v+0},
- min: values.map{|v| v-1}
- }
- end
- end
- # Make a copy
- control = attacks.map do |attack|
- {
- name: attack[:name],
- multiplier: attack[:multiplier],
- max: attack[:max].map{|v| v},
- min: attack[:min].map{|v| v}
- }
- end
- def compare_min attacks, comparison
- attacks[0][:min][0] = [attacks[0][:min][0], comparison].max
- end
- def compare_max attacks, comparison
- attacks[0][:max][0] = [attacks[0][:max][0], comparison].min
- end
- def test attacks, control, exclude=nil
- errors = false
- # Compare every level of bonus with every other level of bonus
- attacks.each_with_index do |attack, i|
- next if i == exclude
- (0..6).each do |bonus|
- multiplier = (num(1.0) + num(0.04) * bonus) * attack[:multiplier]
- attacks[0][:min][0] = [attacks[0][:min][0], attack[:min][bonus] / multiplier].max
- attacks[0][:max][0] = [attacks[0][:max][0], attack[:max][bonus] / multiplier].min
- attack[:min][bonus] = [attacks[0][:min][0] * multiplier, attack[:min][bonus]].max
- attack[:max][bonus] = [attacks[0][:max][0] * multiplier, attack[:max][bonus]].min
- if attack[:max][bonus] < control[i][:min][bonus] or attack[:min][bonus] > control[i][:max][bonus]
- puts "Weird value detected!
- #{attack[:name]}(#{bonus})(multiplier: #{multiplier.to_s(?F)})"
- end
- end
- end
- end
- test attacks, control
- test attacks, control # Second pass after levi 1st hit has been made as accurate as possible
- puts attacks.map{ |attack|
- "#{attack[:name]}
- Min: #{attack[:min].map{|v| v.to_s(?F)}.join(', ')}
- Max: #{attack[:max].map{|v| v.to_s(?F)}.join(', ')}
- "
- }.join(?\n)
- #output
- Weird value detected!
- Levi 1st(3)(multiplier: 1.12)
- Levi 1st
- Min: 323.214285714285714285714285715, 336.1428571428571428571428571436, 349.0714285714285714285714285722, 362.0000000000000000000000000008, 374.9285714285714285714285714294, 387.857142857142857142857142858, 400.7857142857142857142857142866
- Max: 323.214285714285714285714285715, 336.1428571428571428571428571436, 349.0714285714285714285714285722, 362.0, 374.9285714285714285714285714294, 387.857142857142857142857142858, 400.7857142857142857142857142866
- Levi 3rd
- Min: 371.69642857142857142857142857225, 386.56428571428571428571428571514, 401.43214285714285714285714285803, 416.30000000000000000000000000092, 431.16785714285714285714285714381, 446.0357142857142857142857142867, 460.90357142857142857142857142959
- Max: 371.69642857142857142857142857225, 386.56428571428571428571428571514, 401.43214285714285714285714285803, 416.30000000000000000000000000092, 431.16785714285714285714285714381, 446.0357142857142857142857142867, 460.90357142857142857142857142959
- Levi Charge
- Min: 484.8214285714285714285714285725, 504.2142857142857142857142857154, 523.6071428571428571428571428583, 543.0000000000000000000000000012, 562.3928571428571428571428571441, 581.785714285714285714285714287, 601.1785714285714285714285714299
- Max: 484.8214285714285714285714285725, 504.2142857142857142857142857154, 523.6071428571428571428571428583, 543.0000000000000000000000000012, 562.3928571428571428571428571441, 581.785714285714285714285714287, 601.1785714285714285714285714299
- Suda 3rd
- Min: 427.4508928571428571428571428580875, 444.548928571428571428571428572411, 461.6469642857142857142857142867345, 478.745000000000000000000000001058, 495.8430357142857142857142857153815, 512.941071428571428571428571429705, 530.0391071428571428571428571440285
- Max: 427.4508928571428571428571428580875, 444.548928571428571428571428572411, 461.6469642857142857142857142867345, 478.745000000000000000000000001058, 495.8430357142857142857142857153815, 512.941071428571428571428571429705, 530.0391071428571428571428571440285
- Suda Charge
- Min: 521.1830357142857142857142857154375, 542.030357142857142857142857144055, 562.8776785714285714285714285726725, 583.72500000000000000000000000129, 604.5723214285714285714285714299075, 625.419642857142857142857142858525, 646.2669642857142857142857142871425
- Max: 521.1830357142857142857142857154375, 542.030357142857142857142857144055, 562.8776785714285714285714285726725, 583.72500000000000000000000000129, 604.5723214285714285714285714299075, 625.419642857142857142857142858525, 646.2669642857142857142857142871425
- Suda Charge Explosion
- Min: 557.544642857142857142857142858375, 579.84642857142857142857142857271, 602.148214285714285714285714287045, 624.45000000000000000000000000138, 646.751785714285714285714285715715, 669.05357142857142857142857143005, 691.355357142857142857142857144385
- Max: 557.544642857142857142857142858375, 579.84642857142857142857142857271, 602.148214285714285714285714287045, 624.45000000000000000000000000138, 646.751785714285714285714285715715, 669.05357142857142857142857143005, 691.355357142857142857142857144385
- Nitro
- Min: 347.455357142857142857142857143625, 361.35357142857142857142857142937, 375.251785714285714285714285715115, 389.15000000000000000000000000086, 403.048214285714285714285714286605, 416.94642857142857142857142857235, 430.844642857142857142857142858095
- Max: 347.455357142857142857142857143625, 361.35357142857142857142857142937, 375.251785714285714285714285715115, 389.15000000000000000000000000086, 403.048214285714285714285714286605, 416.94642857142857142857142857235, 430.844642857142857142857142858095
- Irontech
- Min: 373.514508928571428571428571429396875, 388.45508928571428571428571428657275, 403.395669642857142857142857143748625, 418.3362500000000000000000000009245, 433.276830357142857142857142858100375, 448.21741071428571428571428571527625, 463.157991071428571428571428572452125
- Max: 373.514508928571428571428571429396875, 388.45508928571428571428571428657275, 403.395669642857142857142857143748625, 418.3362500000000000000000000009245, 433.276830357142857142857142858100375, 448.21741071428571428571428571527625, 463.157991071428571428571428572452125
- BAB
- Min: 399.57366071428571428571428571516875, 415.5566071428571428571428571437755, 431.53955357142857142857142857238225, 447.522500000000000000000000000989, 463.50544642857142857142857142959575, 479.4883928571428571428571428582025, 495.47133928571428571428571428680925
- Max: 399.57366071428571428571428571516875, 415.5566071428571428571428571437755, 431.53955357142857142857142857238225, 447.522500000000000000000000000989, 463.50544642857142857142857142959575, 479.4883928571428571428571428582025, 495.47133928571428571428571428680925
- [Finished in 0.2s]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement