about summary refs log tree commit diff
path: root/daily
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-12 22:18:09 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-12 22:18:09 +0700
commit36461ea5c65fcdf7169abdb39549ef53a15d4f03 (patch)
tree635e883e7c2930a379bc88b29c531f0228a7d4b1 /daily
parent1a8e1e68759611a66ae116771da5f376c95a3b9f (diff)
downloadcp-36461ea5c65fcdf7169abdb39549ef53a15d4f03.tar.gz
Add /r/dailyprogrammer Challenge #302 [Intermediate] and slightly clean up
Diffstat (limited to 'daily')
-rw-r--r--daily/302easy/README.md2
-rw-r--r--daily/302intermediate/README.md52
-rwxr-xr-xdaily/302intermediate/barchart.py22
3 files changed, 75 insertions, 1 deletions
diff --git a/daily/302easy/README.md b/daily/302easy/README.md
index 6c0adf4..fed8511 100644
--- a/daily/302easy/README.md
+++ b/daily/302easy/README.md
@@ -151,5 +151,5 @@ capitalization from the above table. Example:
 
 ## Bonus
 
-Note that *bacon* has a few different possibilities. Which is the heaviest by
+Note that `bacon` has a few different possibilities. Which is the heaviest by
 atomic weight?
diff --git a/daily/302intermediate/README.md b/daily/302intermediate/README.md
new file mode 100644
index 0000000..84ae459
--- /dev/null
+++ b/daily/302intermediate/README.md
@@ -0,0 +1,52 @@
+# [[2017-02-08] Challenge #302 [Intermediate] ASCII Histogram Maker: Part 1 - The Simple Bar Chart](https://www.reddit.com/r/dailyprogrammer/comments/5st2so/20170208_challenge_302_intermediate_ascii/)
+
+## Description
+
+Any Excel user is probably familiar with the bar chart - a simple plot showing
+vertical bars to represent the frequency of something you counted. For today's
+challenge you'll be producing bar charts in ASCII. 
+
+(Part 2 will have you assemble a proper histogram from a collection of data.)
+
+## Input Description
+
+You'll be given four numbers on the first line telling you the start and end of
+the horizontal (X) axis and the vertical (Y) axis, respectively. Then you'll
+have a number on a single line telling you how many records to read. Then
+you'll be given the data as three numbers: the first two represent the interval
+as a start (inclusive) and end (exclusive), the third number is the frequency
+of that variable. Example:
+
+    140 190 1 8 
+    5
+    140 150 1
+    150 160 0 
+    160 170 7 
+    170 180 6 
+    180 190 2 
+
+## Output Description
+
+Your program should emit an ASCII bar chart showing the frequencies of the
+buckets. Your program may use any character to represent the data point, I show
+an asterisk below. From the above example:
+
+    8
+    7           *
+    6           *   *
+    5           *   *
+    4           *   *
+    3           *   *
+    2           *   *   *
+    1   *       *   *   * 
+     140 150 160 170 180 190
+
+## Challenge Input
+
+    0 50 1 10
+    5
+    0 10 1
+    10 20 3
+    20 30 6
+    30 40 4
+    40 50 2
diff --git a/daily/302intermediate/barchart.py b/daily/302intermediate/barchart.py
new file mode 100755
index 0000000..e699fcd
--- /dev/null
+++ b/daily/302intermediate/barchart.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+
+from math import gcd
+
+minx, maxx, miny, maxy = map(int, input().split())
+n, step, z, s, d = int(input()), maxy - miny, len(str(maxy)), {minx, maxx}, {}
+for i in range(n):
+    start, end, freq = map(int, input().split())
+    step = gcd(step, freq - miny)
+    s.update({start, end})
+    d[start] = freq
+points = sorted(s)
+spaces = [' ' * len(str(i)) for i in points]
+for i in points:
+    d.setdefault(i, 0)
+while maxy >= miny:
+    print(str(maxy).rjust(z), end='')
+    for i, point in enumerate(points[:-1]):
+        print(spaces[i], '*' if d[point] >= maxy else ' ', sep='', end='')
+    print(spaces[-1])
+    maxy -= step
+print(' ' * z, ' '.join(str(i) for i in points), sep='')