September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
42
Task/Stem-and-leaf-plot/Clojure/stem-and-leaf-plot.clj
Normal file
42
Task/Stem-and-leaf-plot/Clojure/stem-and-leaf-plot.clj
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
(def data
|
||||
[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 146
|
||||
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])
|
||||
|
||||
(defn calc-stem [number]
|
||||
(int (Math/floor (/ number 10))))
|
||||
|
||||
(defn calc-leaf [number]
|
||||
(mod number 10))
|
||||
|
||||
(defn new-plant
|
||||
"Returns a leafless plant, with `size` empty branches,
|
||||
i.e. a hash-map with integer keys (from 0 to `size` inclusive)
|
||||
mapped to empty vectors.
|
||||
|
||||
(new-plant 2) ;=> {0 [] 1 [] 2 []}"
|
||||
[size]
|
||||
(let [end (inc size)]
|
||||
(->> (repeat end [])
|
||||
(interleave (range end))
|
||||
(apply hash-map))))
|
||||
|
||||
(defn sprout-leaves
|
||||
[plant [stem leaf]]
|
||||
(update plant stem conj leaf))
|
||||
|
||||
(defn stem-and-leaf [numbers]
|
||||
(let [max-stem (calc-stem (reduce max numbers))
|
||||
baby-plant (new-plant max-stem)
|
||||
plant (->> (map (juxt calc-stem calc-leaf) numbers)
|
||||
(reduce sprout-leaves baby-plant)
|
||||
(sort))]
|
||||
(doseq [[stem leaves] plant]
|
||||
(print (format (str "%2s") stem))
|
||||
(print " | ")
|
||||
(println (clojure.string/join " " (sort leaves))))))
|
||||
|
||||
(stem-and-leaf data)
|
||||
18
Task/Stem-and-leaf-plot/Factor/stem-and-leaf-plot.factor
Normal file
18
Task/Stem-and-leaf-plot/Factor/stem-and-leaf-plot.factor
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
USING: assocs formatting grouping.extras io kernel math
|
||||
prettyprint sequences sorting ;
|
||||
|
||||
: leaf-plot ( seq -- )
|
||||
natural-sort [ 10 /i ] group-by dup keys last 1 +
|
||||
[ dup "%2d | " printf of [ 10 mod pprint bl ] each nl ] with
|
||||
each-integer ;
|
||||
|
||||
{
|
||||
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 146 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
|
||||
} leaf-plot
|
||||
63
Task/Stem-and-leaf-plot/Nim/stem-and-leaf-plot.nim
Normal file
63
Task/Stem-and-leaf-plot/Nim/stem-and-leaf-plot.nim
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import tables
|
||||
import math
|
||||
import strutils
|
||||
import algorithm
|
||||
|
||||
type
|
||||
StemLeafPlot = ref object
|
||||
leafDigits: int
|
||||
multiplier: int
|
||||
plot: TableRef[int, seq[int]]
|
||||
|
||||
proc `$`(s: seq[int]): string =
|
||||
result = ""
|
||||
for item in s:
|
||||
result &= $item & " "
|
||||
|
||||
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
|
||||
37
Task/Stem-and-leaf-plot/Python/stem-and-leaf-plot-3.py
Normal file
37
Task/Stem-and-leaf-plot/Python/stem-and-leaf-plot-3.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
from itertools import (groupby)
|
||||
from functools import (reduce)
|
||||
|
||||
|
||||
# stemLeaf :: (String -> Int) -> (String -> String) -> String -> String
|
||||
def stemLeaf(f, g, s):
|
||||
return '\n'.join(map(
|
||||
lambda x: str(x[0]).rjust(2) + ' | ' +
|
||||
reduce(lambda a, tpl: a + tpl[1] + ' ', x[1], ''),
|
||||
(groupby(sorted(
|
||||
map(lambda x: (f(x), g(x)), s.split())
|
||||
),
|
||||
lambda x: x[0]
|
||||
))
|
||||
))
|
||||
|
||||
|
||||
# main :: IO()
|
||||
def main():
|
||||
def stem(s):
|
||||
return (lambda x=s[:-1]: int(x) if 0 < len(x) else 0)()
|
||||
|
||||
def leaf(s):
|
||||
return s[-1]
|
||||
|
||||
s = ('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')
|
||||
|
||||
print (stemLeaf(stem, leaf, s))
|
||||
|
||||
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue