# Estimate ballast and balance for 50:50 distribution in GT4.
def estimate_balance(fb, ow, nw)
raise ArgumentError unless 0 <= fb and fb <= 100
raise ArgumentError unless 0 <= ow
raise ArgumentError unless 0 <= nw
ballast = (nw - ow).clamp(0, 200)
balance = 0
if ballast != 0
balance = ((fb - 50) * ow / ballast).clamp(-50, 50)
balance_normal = (balance + 50) / 100.0
fb_normal = fb / 100.0
fw = ow * fb_normal + ballast * (1 - balance_normal)
rw = ow * (1 - fb_normal) + ballast * balance_normal
fb = 50 * fw / rw
end
[ballast, balance, fb.round(2)]
end
def estimate_weight_reduction(w)
s0 = w
s1 = w * (1 - 0.09)
s2 = w * (1 - 0.12)
s3 = w * (1 - 0.15)
[s0, s1, s2, s3].map(&:to_i)
end
def show(fb, iw)
ws = estimate_weight_reduction(iw)
ws.each do |ow|
nw = ow + 200
printf("%d:%d:%d %p\n", fb, ow, nw, estimate_balance(fb, ow, nw))
end
ws.drop(1).each do |ow|
nw = iw
printf("%d:%d:%d %p\n", fb, ow, nw, estimate_balance(fb, ow, nw))
end
end
# ..
puts "Nissan Skyline GTS-R (R31) '87"
show(60, 1340)
puts "Nissan Skyline GTS25 Type S (R32) '91"
show(55, 1320)
puts "Lotus Esprit V8-GT '98"
show(43, 1325)
IyBFc3RpbWF0ZSBiYWxsYXN0IGFuZCBiYWxhbmNlIGZvciA1MDo1MCBkaXN0cmlidXRpb24gaW4gR1Q0LgoKZGVmIGVzdGltYXRlX2JhbGFuY2UoZmIsIG93LCBudykKICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IgdW5sZXNzIDAgPD0gZmIgYW5kIGZiIDw9IDEwMAogICAgcmFpc2UgQXJndW1lbnRFcnJvciB1bmxlc3MgMCA8PSBvdwogICAgcmFpc2UgQXJndW1lbnRFcnJvciB1bmxlc3MgMCA8PSBudwoKICAgIGJhbGxhc3QgPSAobncgLSBvdykuY2xhbXAoMCwgMjAwKQogICAgYmFsYW5jZSA9IDAKCiAgICBpZiBiYWxsYXN0ICE9IDAKICAgICAgICBiYWxhbmNlID0gKChmYiAtIDUwKSAqIG93IC8gYmFsbGFzdCkuY2xhbXAoLTUwLCA1MCkKICAgICAgICBiYWxhbmNlX25vcm1hbCA9IChiYWxhbmNlICsgNTApIC8gMTAwLjAKICAgICAgICBmYl9ub3JtYWwgPSBmYiAvIDEwMC4wCgogICAgICAgIGZ3ID0gb3cgKiBmYl9ub3JtYWwgKyBiYWxsYXN0ICogKDEgLSBiYWxhbmNlX25vcm1hbCkKICAgICAgICBydyA9IG93ICogKDEgLSBmYl9ub3JtYWwpICsgYmFsbGFzdCAqIGJhbGFuY2Vfbm9ybWFsCiAgICAgICAgZmIgPSA1MCAqIGZ3IC8gcncKICAgIGVuZAoKICAgIFtiYWxsYXN0LCBiYWxhbmNlLCBmYi5yb3VuZCgyKV0KZW5kCgpkZWYgZXN0aW1hdGVfd2VpZ2h0X3JlZHVjdGlvbih3KQogICAgczAgPSB3CiAgICBzMSA9IHcgKiAoMSAtIDAuMDkpCiAgICBzMiA9IHcgKiAoMSAtIDAuMTIpCiAgICBzMyA9IHcgKiAoMSAtIDAuMTUpCiAgICBbczAsIHMxLCBzMiwgczNdLm1hcCgmOnRvX2kpCmVuZAoKZGVmIHNob3coZmIsIGl3KQogICAgd3MgPSBlc3RpbWF0ZV93ZWlnaHRfcmVkdWN0aW9uKGl3KQogICAgd3MuZWFjaCBkbyB8b3d8CiAgICAgICAgbncgPSBvdyArIDIwMAogICAgICAgIHByaW50ZigiJWQ6JWQ6JWQgJXBcbiIsIGZiLCBvdywgbncsIGVzdGltYXRlX2JhbGFuY2UoZmIsIG93LCBudykpCiAgICBlbmQKCiAgICB3cy5kcm9wKDEpLmVhY2ggZG8gfG93fAogICAgICAgIG53ID0gaXcKICAgICAgICBwcmludGYoIiVkOiVkOiVkICVwXG4iLCBmYiwgb3csIG53LCBlc3RpbWF0ZV9iYWxhbmNlKGZiLCBvdywgbncpKQogICAgZW5kCmVuZAoKIyAuLgoKcHV0cyAiTmlzc2FuIFNreWxpbmUgR1RTLVIgKFIzMSkgJzg3IgpzaG93KDYwLCAxMzQwKQpwdXRzICJOaXNzYW4gU2t5bGluZSBHVFMyNSBUeXBlIFMgKFIzMikgJzkxIgpzaG93KDU1LCAxMzIwKQpwdXRzICJMb3R1cyBFc3ByaXQgVjgtR1QgJzk4IgpzaG93KDQzLCAxMzI1KQ==
Nissan Skyline GTS-R (R31) '87
60:1340:1540 [200, 50, 54.62]
60:1219:1419 [200, 50, 53.18]
60:1179:1379 [200, 50, 52.67]
60:1139:1339 [200, 50, 52.12]
60:1219:1340 [121, 50, 60.09]
60:1179:1340 [161, 50, 55.91]
60:1139:1340 [200, 50, 52.12]
Nissan Skyline GTS25 Type S (R32) '91
55:1320:1520 [200, 33, 50.0]
55:1201:1401 [200, 30, 50.01]
55:1161:1361 [200, 29, 50.01]
55:1122:1322 [200, 28, 50.02]
55:1201:1320 [119, 50, 50.08]
55:1161:1320 [159, 36, 50.12]
55:1122:1320 [198, 28, 50.1]
Lotus Esprit V8-GT '98
43:1325:1525 [200, -47, 50.16]
43:1205:1405 [200, -43, 50.24]
43:1166:1366 [200, -41, 50.06]
43:1126:1326 [200, -40, 50.18]
43:1205:1325 [120, -50, 46.45]
43:1166:1325 [159, -50, 49.68]
43:1126:1325 [199, -40, 50.12]