From a7c4400cdf2ee2e816750593e962eeb7edf0a8ca Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 6 Nov 2014 01:11:32 +0100 Subject: code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/median | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 src/median diff --git a/src/median b/src/median new file mode 100755 index 0000000..43a8820 --- /dev/null +++ b/src/median @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# -*- python -*- +''' +median — Calculate the median value for a set of groups +Copyright © 2014 Mattias Andrée (maandree@member.fsf.org) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' + +lines = [] +try: + while True: + lines.append(input()) +except: + pass + +get_key = lambda x : x[x.index(' '):] if ' ' in x else '' +get_value = lambda x : x[:x.index(' ')] if ' ' in x else x +lines = [(get_value(line), get_key(line)) for line in lines if not line == ''] + +lines.sort(key = lambda x : x[1]); + +last, values = None, None +lines.append((..., ...)) +for value, key in lines: + if last != key: + if last is not None: + values.sort(key = lambda x : int(x)) + if len(values) % 2 == 1: + median = values[len(values) // 2] + else: + low = values[len(values) // 2 + 0] + high = values[len(values) // 2 + 1] + median = (int(low) + int(high)) // 2 + median = '%%0%ii' % len(high) % median + print(median + last) + last, values = key, [] + values.append(value) + -- cgit v1.2.3-70-g09d2