I hurriedly put this script,
modeMedianMean.groovy
, together, so it could probably use some work. However, I wanted to check the homework with a quick and dirty tool and it does provide more examples of using some of Groovy's features and syntax.modeMedianMean.groovy
#!/usr/bin/env groovy
// Script for calculating median, mean, mode, range, etc.
//
// http://www.purplemath.com/modules/meanmode.htm
if (args.length < 1)
{
println "You need to provide at least one numeric argument."
System.exit(-1)
}
// Place passed-in number arguments in List
values = new ArrayList<BigDecimal>()
for (i in args)
{
try
{
values.add(new BigDecimal(i))
}
catch (NumberFormatException numberFormatEx)
{
println "Ignoring non-numeric parameter: ${i}"
}
}
Collections.sort(values)
// Begin collecting metadata about the data
numberItems = values.size()
sum = 0
modeMap = new HashMap<BigDecimal, Integer>()
for (item in values)
{
sum += item
if (modeMap.get(item) == null)
{
modeMap.put(item, 1)
}
else
{
count = modeMap.get(item) + 1
modeMap.put(item, count)
}
}
mode = new ArrayList<Integer>()
modeCount = 0
modeMap.each()
{ key, value ->
if (value > modeCount) { mode.clear(); mode.add(key); modeCount = value}
else if (value == modeCount) { mode.add(key) }
};
mean = sum / numberItems
midNumber = (int)(numberItems/2)
median = numberItems %2 != 0 ? values[midNumber] : (values[midNumber] + values[midNumber-1])/2
minimum = Collections.min(values)
maximum = Collections.max(values)
println "You provided ${numberItems} numbers (${values}):"
println "\tMean: ${mean}"
println "\tMedian: ${median}"
println "\tMode: ${mode}"
println "\tMinimum: ${minimum}"
println "\tMaximum: ${maximum}"
println "\tRange: ${maximum - minimum}"
The next screen snapshot demonstrates this simple script in action with a variety of different numbers.
The examples demonstrated in the above screen snapshot demonstrated the sort and the basic functionality of median, mode, and mean, but all examples use integral numbers. The next screen snapshot includes some non-integer numbers and also shows the handling (ignored) of non-numeric parameters.
This simple script demonstrates how easy it is to use Groovy to accomplish repetitive tasks. With a little more time and effort, the script could be further improved, but it was sufficient for me to use to quickly check the seventh grade homework.
No comments:
Post a Comment