Advertisement
theosib

passheights.rb

Mar 22nd, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.48 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. $bottom = { "solid" => 1.0, "grass/farm" => 0.9375, "soul/8snow/chest" => 0.875, "endframe/chorus" => 0.8125, "enchant/7snow/" => 0.75, "6snow/sideendrod" => 0.625,
  4.   "bed" => 0.5625, "slab/5snow/cake" => 0.5, "boat" => 0.5625, "4snow/daysensor" => 0.375, "3snow" => 0.25, "trapdoor" => 0.1875, "2snow/repeater" => 0.125,
  5.   "lillypad" => 0.09375, "carpet" => 0.0625, "minecart" => 0.7}
  6.  
  7. $top = { "solid" => 1.0, "toptrapdoor" => 0.1875 }
  8.  
  9. $heights = {}
  10.  
  11. for blocks in 2..4
  12.   $bottom.each do |bot,bv|
  13.     $top.each do |top,tv|
  14.       h = blocks
  15.       h -= bv
  16.       h -= tv
  17.       if !$heights.include?(h)
  18.         $heights[h] = []
  19.       end
  20.      
  21.       name = bot
  22.       if blocks > 2
  23.         name += ",#{blocks-2}air"
  24.       end
  25.       name += ",#{top}"
  26.      
  27.       $heights[h] << name
  28.     end
  29.   end
  30. end
  31.  
  32. $dens = [16, 32, 10]
  33.  
  34. $heights.sort_by(&:first).each do |k,v|
  35.   best_num = nil
  36.   best_den = nil
  37.   best_dif = 1.0/0.0
  38.  
  39.   $dens.each do |den|
  40.     num = (k * den).round.to_i
  41.     k2 = num.to_f / den.to_f
  42.     dif = (k - k2).abs
  43.     if (dif < best_dif)
  44.       best_dif = dif
  45.       best_den = den
  46.       best_num = num
  47.     end
  48.   end
  49.  
  50.   str = sprintf("%7.5f = %3d/%2d = %d+%2d/%2d: ", k, best_num, best_den, best_num / best_den, best_num % best_den, best_den)
  51.   len = str.length
  52.   print(str)
  53.  
  54.   # printf("%7.5f:", k*32)
  55.   first = true
  56.   v.each do |i|
  57.     print (" "*len) if !first
  58.     puts " #{i}"
  59.     first = false
  60.   end
  61.   puts
  62. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement