Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class What {
- // prerequisitions
- static class Range {
- public final int begin;
- public final int end;
- public Range(int begin, int end) {
- this.begin = begin;
- this.end = end;
- }
- }
- public static void main(String[] args) {
- Map<String, Range> map = new LinkedHashMap<>();
- map.put("Action1", new Range( 0, 10));
- map.put( "Act2", new Range(10, 30));
- map.put("Action3", new Range(20, 50));
- map.put("Trivial", new Range( 0, 5));
- System.out.println(new What().generateBarChart(map, 10));
- }
- // actual code starts here
- private String findLongestKey(Collection<String> strings) {
- int max = -1;
- String maxs = null;
- for(String s : strings) {
- if(s.length() > max) {
- maxs = s;
- max = s.length();
- }
- }
- return maxs;
- }
- private Range findInterval(Iterable<Range> ranges) {
- int min = Integer.MAX_VALUE;
- int max = Integer.MIN_VALUE;
- for(Range r: ranges) {
- if(min>r.begin)
- min = r.begin;
- if(max<r.end)
- max = r.end;
- }
- return new Range(min, max);
- }
- private String makeBar(Range range, int stepSize, Range interval) {
- String bar = "";
- int begin = interval.begin / stepSize;
- int end = interval.end / stepSize;
- for(int i= begin; i< end; i++) {
- int min = i*stepSize;
- int max = min+stepSize;
- if(min>=range.begin && max<=range.end)
- bar += "*";
- else
- bar += "-";
- }
- return bar;
- }
- public String generateBarChart(Map<String, Range> data, int stepSize) {
- String out = "";
- int longest = findLongestKey(data.keySet()).length();
- Range interval = findInterval(data.values());
- for(Map.Entry<String, Range> entry : data.entrySet()) {
- String bar = makeBar(entry.getValue(), stepSize, interval);
- if(!bar.contains("*"))
- continue;
- out += String.format("%" + longest + "s", entry.getKey()) + ": " + bar + "\n";
- }
- return out;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement