Advertisement
Guest User

Ranges

a guest
Jan 12th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.95 KB | None | 0 0
  1. import java.util.*;
  2.  
  3.  
  4. public class What {
  5.  
  6.     // prerequisitions
  7.    
  8.     static class Range {
  9.         public final int begin;
  10.         public final int end;
  11.    
  12.         public Range(int begin, int end) {
  13.             this.begin = begin;
  14.             this.end = end;
  15.         }
  16.     }
  17.    
  18.     public static void main(String[] args) {
  19.         Map<String, Range> map = new LinkedHashMap<>();
  20.         map.put("Action1", new Range( 0, 10));
  21.         map.put(   "Act2", new Range(10, 30));
  22.         map.put("Action3", new Range(20, 50));
  23.         map.put("Trivial", new Range( 0,  5));
  24.        
  25.         System.out.println(new What().generateBarChart(map, 10));
  26.     }
  27.    
  28.     // actual code starts here
  29.    
  30.     private String findLongestKey(Collection<String> strings) {
  31.         int max = -1;
  32.         String maxs = null;
  33.         for(String s : strings) {
  34.             if(s.length() > max) {
  35.                 maxs = s;
  36.                 max = s.length();
  37.             }
  38.         }
  39.         return maxs;
  40.     }
  41.  
  42.     private Range findInterval(Iterable<Range> ranges) {
  43.         int min = Integer.MAX_VALUE;
  44.         int max = Integer.MIN_VALUE;
  45.        
  46.         for(Range r: ranges) {
  47.             if(min>r.begin)
  48.                 min = r.begin;
  49.             if(max<r.end)
  50.                 max = r.end;
  51.         }
  52.        
  53.         return new Range(min, max);
  54.     }
  55.    
  56.     private String makeBar(Range range, int stepSize, Range interval) {
  57.         String bar = "";
  58.        
  59.         int begin = interval.begin / stepSize;
  60.         int end = interval.end / stepSize;
  61.        
  62.         for(int i= begin; i< end; i++) {
  63.             int min = i*stepSize;
  64.             int max = min+stepSize;
  65.            
  66.             if(min>=range.begin && max<=range.end)
  67.                 bar += "*";
  68.             else
  69.                 bar += "-";
  70.         }
  71.         return bar;
  72.     }
  73.    
  74.     public String generateBarChart(Map<String, Range> data, int stepSize) {
  75.         String out = "";
  76.        
  77.         int longest = findLongestKey(data.keySet()).length();
  78.         Range interval = findInterval(data.values());
  79.        
  80.         for(Map.Entry<String, Range> entry : data.entrySet()) {
  81.             String bar = makeBar(entry.getValue(), stepSize, interval);
  82.            
  83.             if(!bar.contains("*"))
  84.                 continue;
  85.            
  86.             out += String.format("%" + longest + "s", entry.getKey()) + ": " + bar + "\n";
  87.         }
  88.        
  89.         return out;
  90.     }
  91.  
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement