diff options
| author | Walt Mankowski <waltman@pobox.com> | 2020-08-26 14:35:58 -0400 |
|---|---|---|
| committer | Walt Mankowski <waltman@pobox.com> | 2020-08-26 14:35:58 -0400 |
| commit | 730915136413554ad43fbfc9d7e4f766291a4ec0 (patch) | |
| tree | 274c8aa823bf3dac66904847c3a89a533cf01e95 /challenge-075/walt-mankowski/python | |
| parent | 196b6c270e7f0bbe188c40093451fca3dd52c57e (diff) | |
| download | perlweeklychallenge-club-730915136413554ad43fbfc9d7e4f766291a4ec0.tar.gz perlweeklychallenge-club-730915136413554ad43fbfc9d7e4f766291a4ec0.tar.bz2 perlweeklychallenge-club-730915136413554ad43fbfc9d7e4f766291a4ec0.zip | |
python solution for challenge 75 task 2
first draft
Diffstat (limited to 'challenge-075/walt-mankowski/python')
| -rw-r--r-- | challenge-075/walt-mankowski/python/ch-2.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-075/walt-mankowski/python/ch-2.py b/challenge-075/walt-mankowski/python/ch-2.py new file mode 100644 index 0000000000..efd720f539 --- /dev/null +++ b/challenge-075/walt-mankowski/python/ch-2.py @@ -0,0 +1,49 @@ +from sys import argv +import numpy as np + +def print_hist(hist, a, rows, cols): + for row in range(rows-1, -1, -1): + print(row+1, end='') + for col in range(cols): + print(f" {'#' if hist[row][col] == 1 else ' '}", end='') + print() + + print('-', end='') + print(" -" * cols) + + print(' ', end='') + for i in range(cols): + print(f' {a[i]}', end='') + print() + print() + +a = [int(x) for x in argv[1:]] + +# build the histogram +rows = max(a) +cols = len(a) +hist = np.zeros([rows, cols]) +for row in range(rows): + for col in range(cols): + if row < a[col]: + hist[row][col] = 1 +print_hist(hist, a, rows, cols) + +best_area = 0 +best_height = -1 +best_width = -1 + +for height in range(1, rows+1): + for width in range(1, cols+1): + area = height * width + if area <= best_area: + continue + for r0 in range(row-height+1): + for c0 in range(0, cols-width+1): + if sum(sum(hist[r0:r0+height,c0:c0+width])) == area: + best_area = area + best_height = height + best_width = width + +print(f'The best rectangle is {best_height} x {best_width} for an aea of {best_area}.') + |
