Stem-and-leaf plot: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Perl}}: added version producing plain-text output) |
|||
Line 2,164: | Line 2,164: | ||
13|1239 |
13|1239 |
||
14|16</lang> |
14|16</lang> |
||
=={{header|Nim}}== |
|||
<lang nim>import tables |
|||
import math |
|||
import strutils |
|||
import algorithm |
|||
type |
|||
StemLeafPlot = ref object |
|||
leafDigits: int |
|||
multiplier: int |
|||
plot: TableRef[int, seq[int]] |
|||
proc `$`(self: StemLeafPlot): string = |
|||
result = "" |
|||
var keys: seq[int] = @[] |
|||
for stem, _ in self.plot: |
|||
keys.add(stem) |
|||
for printedStem in keys.min..keys.max: |
|||
result &= align($printedStem & " | ", ($keys.max).len + 4) |
|||
if printedStem in keys: |
|||
self.plot[printedStem].sort(system.cmp[int]) |
|||
result &= $self.plot[printedStem] |
|||
result &= "\n" |
|||
proc parse(self: StemLeafPlot, value: int): tuple[stem, leaf: int] = |
|||
(value div self.multiplier, abs(value mod self.multiplier)) |
|||
proc init[T](self: StemLeafPlot, leafDigits: int, data: openArray[T]) = |
|||
self.leafDigits = leafDigits |
|||
self.multiplier = 10 ^ leafDigits |
|||
self.plot = newTable[int, seq[int]]() |
|||
for value in data: |
|||
let (stem, leaf) = self.parse(value) |
|||
if stem notin self.plot: |
|||
self.plot[stem] = @[leaf] |
|||
else: |
|||
self.plot[stem].add(leaf) |
|||
var taskData = @[12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124, |
|||
37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123, |
|||
35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105, |
|||
99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58, |
|||
114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43, |
|||
117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118, |
|||
117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122, |
|||
109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114, |
|||
34, 133, 45, 120, 30, 127, 31, 116, 146] |
|||
var negativeData = @[-24, -12, -3, 4, 6, 6, 17, 25, 57] |
|||
echo "Using the Task's Test Data" |
|||
var taskPlot = StemLeafPlot() |
|||
taskPlot.init(1, taskData) |
|||
echo $taskPlot |
|||
echo "Test with Negative Stem" |
|||
var negativePlot = StemLeafPlot() |
|||
negativePlot.init(1, negativeData) |
|||
echo $negativePlot</lang> |
|||
{{out}} |
|||
<pre>Using the Task's Test Data |
|||
0 | @[7, 7] |
|||
1 | @[2, 3, 8, 8] |
|||
2 | @[3, 5, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9] |
|||
3 | @[0, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 7, 7, 8, 9] |
|||
4 | @[0, 0, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 7, 8, 8] |
|||
5 | @[2, 3, 7, 8, 8] |
|||
6 | @[1, 3, 8] |
|||
7 | @[1] |
|||
8 | |
|||
9 | @[6, 9] |
|||
10 | @[4, 5, 5, 5, 5, 6, 7, 9, 9, 9] |
|||
11 | @[1, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9] |
|||
12 | @[0, 0, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 7, 7, 7, 7, 8, 8] |
|||
13 | @[1, 2, 3, 9] |
|||
14 | @[1, 6] |
|||
Test with Reals and Negative Zero Stem |
|||
-2 | @[4] |
|||
-1 | @[2] |
|||
0 | @[3, 4, 6, 6] |
|||
1 | @[7] |
|||
2 | @[5] |
|||
3 | |
|||
4 | |
|||
5 | @[7]</pre> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |