diff options
Diffstat (limited to 'packages/seqstat')
-rw-r--r-- | packages/seqstat/default.nix | 25 | ||||
-rwxr-xr-x | packages/seqstat/seqstat.py | 30 |
2 files changed, 55 insertions, 0 deletions
diff --git a/packages/seqstat/default.nix b/packages/seqstat/default.nix new file mode 100644 index 0000000..96cbd40 --- /dev/null +++ b/packages/seqstat/default.nix @@ -0,0 +1,25 @@ +{ lib, python3, stdenvNoCC }: + +stdenvNoCC.mkDerivation rec { + pname = "seqstat"; + src = ./seqstat.py; + version = "0.1.0"; + + buildInputs = [ python3 ]; + propagatedBuildInputs = [ python3 ]; + + dontUnpack = true; + dontBuild = true; + + installPhase = '' + mkdir -p $out/bin + cp $src $out/bin/${pname} + ''; + + meta = with lib; { + description = "Display an histogram for a given sequence of numbers."; + license = with licenses; [ mit ]; + platforms = platforms.unix; + maintainers = with maintainers; [ fcuny ]; + }; +} diff --git a/packages/seqstat/seqstat.py b/packages/seqstat/seqstat.py new file mode 100755 index 0000000..55b6ecc --- /dev/null +++ b/packages/seqstat/seqstat.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +import argparse + +ticks = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"] + + +def histogram(sequence): + min_val = min(sequence) + max_val = max(sequence) + + scale = (int(max_val - min_val) << 8) / (len(ticks) - 1) + if scale < 1: + scale = 1 + + return [ticks[int((int(i - min_val) << 8) / scale)] for i in sequence] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "numbers", + metavar="N", + type=float, + nargs="+", + help="a number for the accumulator", + ) + args = parser.parse_args() + h = histogram(args.numbers) + print("".join(h)) |