Fivenum: Difference between revisions

Line 1,086:
 
[-1.950594000000000, -0.676741205000000, 0.233247060000000, 0.746070945000000, 1.731315070000000, ]</pre>
 
=={{header|Nim}}==
{{trans|Kotlin}}
<lang Nim>import algorithm
 
type FiveNum = array[5, float]
 
template isOdd(n: SomeInteger): bool = (n and 1) != 0
 
func median(x: openArray[float]; startIndex, endIndex: Natural): float =
let size = endIndex - startIndex + 1
assert(size > 0, "array slice cannot be empty")
let m = startIndex + size div 2
result = if size.isOdd: x[m] else: (x[m-1] + x[m]) / 2
 
func fivenum(x: openArray[float]): FiveNum =
let x = sorted(x)
let m = x.len div 2
let lowerEnd = if x.len.isOdd: m else: m - 1
result[0] = x[0]
result[1] = median(x, 0, lowerEnd)
result[2] = median(x, 0, x.high)
result[3] = median(x, m, x.high)
result[4] = x[^1]
 
const Lists = [@[15.0, 6.0, 42.0, 41.0, 7.0, 36.0, 49.0, 40.0, 39.0, 47.0, 43.0],
@[36.0, 40.0, 7.0, 39.0, 41.0, 15.0],
@[0.14082834, 0.09748790, 1.73131507, 0.87636009, -1.95059594,
0.73438555, -0.03035726, 1.46675970, -0.74621349, -0.72588772,
0.63905160, 0.61501527, -0.98983780, -1.00447874, -0.62759469,
0.66206163, 1.04312009, -0.10305385, 0.75775634, 0.32566578]]
 
for list in Lists:
echo ""
echo list
echo " → ", list.fivenum</lang>
 
{{out}}
<pre>
@[15.0, 6.0, 42.0, 41.0, 7.0, 36.0, 49.0, 40.0, 39.0, 47.0, 43.0]
→ [6.0, 25.5, 40.0, 42.5, 49.0]
 
@[36.0, 40.0, 7.0, 39.0, 41.0, 15.0]
→ [7.0, 15.0, 37.5, 40.0, 41.0]
 
@[0.14082834, 0.0974879, 1.73131507, 0.87636009, -1.95059594, 0.7343855500000001, -0.03035726, 1.4667597, -0.74621349, -0.72588772, 0.6390516000000001, 0.61501527, -0.9898378, -1.00447874, -0.62759469, 0.66206163, 1.04312009, -0.10305385, 0.75775634, 0.32566578]
→ [-1.95059594, -0.676741205, 0.23324706, 0.746070945, 1.73131507]</pre>
 
=={{header|Perl}}==
Anonymous user