2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,9 +1,12 @@
|
|||
Create a well-formatted [[wp:Stem-and-leaf_plot|stem-and-leaf plot]] from the following data set, where the leaves are the last digits:
|
||||
|
||||
<blockquote style="font-family: monospace; white-space: pre-wrap;"><small>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</small></blockquote> <!-- The data set generation parameters: humps at 0 and 80 of width 80, 60 elements, slopes 3 and 6. -->
|
||||
<blockquote style="font-family: monospace; white-space: pre-wrap;"><small>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</small></blockquote>
|
||||
<!-- The data set generation parameters: humps at 0 and 80 of width 80, 60 elements, slopes 3 and 6. -->
|
||||
|
||||
The primary intent of this task is the presentation of information. It is acceptable to hardcode the data set or characteristics of it (such as what the stems are) in the example, insofar as it is impractical to make the example generic to any data set. For example, in a computation-less language like HTML the data set may be entirely prearranged within the example; the interesting characteristics are how the proper visual formatting is arranged.
|
||||
|
||||
If possible, the output should not be a bitmap image. <tt>Monospaced plain text</tt> is acceptable, but do better if you can. It may be a window, i.e. not a file.
|
||||
|
||||
|
||||
'''Note:''' If you wish to try multiple data sets, you might try [[Stem-and-leaf plot/Data generator|this generator]].
|
||||
<br><br>
|
||||
|
|
|
|||
|
|
@ -2,19 +2,17 @@ defmodule Stem_and_leaf do
|
|||
def plot(data, leaf_digits\\1) do
|
||||
multiplier = Enum.reduce(1..leaf_digits, 1, fn _,acc -> acc*10 end)
|
||||
Enum.group_by(data, fn x -> div(x, multiplier) end)
|
||||
|> Enum.into(Map.new, fn {k,v} ->
|
||||
{k, Enum.map(v, fn val -> rem(val, multiplier) end) |> Enum.sort}
|
||||
end)
|
||||
|> Map.new(fn {k,v} -> {k, Enum.map(v, &rem(&1, multiplier)) |> Enum.sort} end)
|
||||
|> print(leaf_digits)
|
||||
end
|
||||
|
||||
def print(plot_data, leaf_digits) do
|
||||
{min, max} = Dict.keys(plot_data) |> Enum.min_max(keys)
|
||||
stem_width = length(to_char_list(max))
|
||||
defp print(plot_data, leaf_digits) do
|
||||
{min, max} = Map.keys(plot_data) |> Enum.min_max
|
||||
stem_width = length(to_charlist(max))
|
||||
fmt = "~#{stem_width}w | ~s~n"
|
||||
Enum.each(min..max, fn stem ->
|
||||
leaves = Enum.map_join(Dict.get(plot_data, stem, []), " ", fn leaf ->
|
||||
to_string(leaf) |> String.rjust(leaf_digits)
|
||||
leaves = Enum.map_join(Map.get(plot_data, stem, []), " ", fn leaf ->
|
||||
to_string(leaf) |> String.pad_leading(leaf_digits)
|
||||
end)
|
||||
:io.format fmt, [stem, leaves]
|
||||
end)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ my Int $stem_unit = 10;
|
|||
my %h = @data.classify: * div $stem_unit;
|
||||
|
||||
my $range = [minmax] %h.keys».Int;
|
||||
my $stem_format = "%{$range.from.chars max $range.to.chars}d";
|
||||
my $stem_format = "%{$range.min.chars max $range.max.chars}d";
|
||||
|
||||
for $range.list -> $stem {
|
||||
my $leafs = %h{$stem} // [];
|
||||
|
|
|
|||
10
Task/Stem-and-leaf-plot/PowerShell/stem-and-leaf-plot.psh
Normal file
10
Task/Stem-and-leaf-plot/PowerShell/stem-and-leaf-plot.psh
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
$Set = -split '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'
|
||||
|
||||
$Data = $Set | Select @{ Label = 'Stem'; Expression = { [string][int]$_.Substring( 0, $_.Length - 1 ) } }, @{ Label = 'Leaf'; Expression = { [string]$_[-1] } }
|
||||
|
||||
$StemStats = $Data | Measure-Object -Property Stem -Minimum -Maximum
|
||||
|
||||
ForEach ( $Stem in $StemStats.Minimum..$StemStats.Maximum )
|
||||
{
|
||||
@( $Stem.ToString().PadLeft( 2, " " ), '|' ) + ( ( $Data | Where Stem -eq $Stem ).Leaf | Sort ) -join " "
|
||||
}
|
||||
26
Task/Stem-and-leaf-plot/REXX/stem-and-leaf-plot-1.rexx
Normal file
26
Task/Stem-and-leaf-plot/REXX/stem-and-leaf-plot-1.rexx
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/*REXX program displays a stem and leaf plot of any non-negative numbers [can include 0]*/
|
||||
parse arg @ /* [↑] Not specified? Then use default*/
|
||||
if @='' then @=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
|
||||
#.=; bot=.; top=. /* [↑] define all #. elements as null.*/
|
||||
do j=1 for words(@); y=word(@, j) /*◄─── process each number in the list.*/
|
||||
if \datatype(y,"N") then do; say '***error*** item' j "isn't numeric:" y; exit; end
|
||||
if y<0 then do; say '***error*** item' j "is negative:" y; exit; end
|
||||
n=format(y, , 0) / 1 /*normalize the numbers (not malformed)*/
|
||||
stem=word(left(n, length(n) -1) 0, 1) /*obtain stem (1st digits) from number.*/
|
||||
parse var n '' -1 leaf; _=stem * sign(n) /* " leaf (last digit) " " */
|
||||
if bot==. then do; bot=_; top=_; end /*handle the first case for TOP and BOT*/
|
||||
bot=min(bot, _); top=max(top, _) /*obtain the minimum and maximum so far*/
|
||||
#.stem.leaf= #.stem.leaf leaf /*construct sorted stem-and-leaf entry.*/
|
||||
end /*j*/
|
||||
|
||||
w=max(length(min), length(max) ) + 1 /*W: used to right justify the output.*/
|
||||
/* [↓] display the stem-and-leaf plot.*/
|
||||
do k=bot to top; $= /*$: is the output string, a plot line*/
|
||||
do m=0 for 10; $=$ #.k.m /*build a line for the stem─&─leaf plot*/
|
||||
end /*m*/
|
||||
say right(k, w) '║' space($) /*display a line of stem─and─leaf plot.*/
|
||||
end /*k*/ /*stick a fork in it, we're all done. */
|
||||
31
Task/Stem-and-leaf-plot/REXX/stem-and-leaf-plot-2.rexx
Normal file
31
Task/Stem-and-leaf-plot/REXX/stem-and-leaf-plot-2.rexx
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/*REXX program displays a stem─and─leaf plot of any real numbers [can be: neg, 0, pos].*/
|
||||
parse arg @ /*obtain optional arguments from the CL*/
|
||||
if @='' then @='15 14 3 2 1 0 -1 -2 -3 -14 -15' /*Not specified? Then use the default.*/
|
||||
#.=; bot=.; top=.; z=. /* [↑] define all #. elements as null.*/
|
||||
do j=1 for words(@); y=word(@, j) /*◄─── process each number in the list.*/
|
||||
if \datatype(y,"N") then do; say '***error*** item' j "isn't numeric:" y; exit; end
|
||||
n=format(y,,0)/1; an=abs(n); s=sign(n) /*normalize the numbers (not malformed)*/
|
||||
stem=left(an, length(an) -1)
|
||||
if stem=='' then if s>=0 then stem=0 /*handle case of one-digit positive #. */
|
||||
else stem='-0' /* " " " " " negative " */
|
||||
else stem=s * stem /* " " " a multi-digit number.*/
|
||||
parse var n '' -1 leaf /*obtain the leaf (the last digit) of #*/
|
||||
if bot==. then do; bot=stem; top=bot; end /*handle the first case for TOP and BOT*/
|
||||
bot=min(bot, stem); top=max(top, stem) /*obtain the minimum and maximum so far*/
|
||||
if stem=='-0' then z=0 /*use Z as a flag to show negative 0.*/
|
||||
#.stem.leaf= #.stem.leaf leaf /*construct sorted stem-and-leaf entry.*/
|
||||
end /*j*/
|
||||
|
||||
w=max(length(min), length(max) ) + 1 /*W: used to right─justify the output.*/
|
||||
!='-0' /* [↓] display the stem-and-leaf plot.*/
|
||||
do k=bot to top; $= /*$: is the output string, a plot line*/
|
||||
if k==z then do /*handle a special case for negative 0.*/
|
||||
do s=0 for 10; $=$ #.!.s /*build a line for the stem─&─leaf plot*/
|
||||
end /*s*/ /* [↑] address special case of -zero.*/
|
||||
say right(!, w) '║' space($) /*display a line of stem─and─leaf plot.*/
|
||||
end /* [↑] handles special case of -zero.*/
|
||||
$= /*a new plot line (of output). */
|
||||
do m=0 for 10; $=$ #.k.m /*build a line for the stem─&─leaf plot*/
|
||||
end /*m*/
|
||||
say right(k, w) '║' space($) /*display a line of stem─and─leaf plot.*/
|
||||
end /*k*/ /*stick a fork in it, we're all done. */
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
/*REXX program displays a stem─and─leaf plot of any real numbers [-, 0, +]. */
|
||||
parse arg data /* [↓] Not specified? Then use default*/
|
||||
if data='' then 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 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
|
||||
parse var data bot . 1 top . '' @. /*define MIN & MAX as the first number.*/
|
||||
/* [↑] define all @. elements as null.*/
|
||||
do j=1 for words(data) /*◄─── process each number in the list.*/
|
||||
_=format(word(data,j),,0)/1 /*normalize the numbers (not malformed)*/
|
||||
stem=left(_, max(1, length(_)-1)) /*obtain stem (1st digit) from number.*/
|
||||
parse var _ '' -1 leaf /* " leaf (last " ) " " */
|
||||
if length(_)==1 then stem=0 /*special case: single─digit leaves. */
|
||||
bot=min(bot, stem*sign(_)) /*obtain the minimum number (so far). */
|
||||
top=max(top, stem*sign(_)) /* " " maximum " " " */
|
||||
@.stem.leaf=@.stem.leaf leaf /*construct sorted stem-and-leaf entry.*/
|
||||
end /*j*/
|
||||
|
||||
w=max(length(min), length(max)) + 1 /*W: used to right─justify the output.*/
|
||||
/* [↓] display the stem-and-leaf plot.*/
|
||||
do k=bot to top; $= /*$: is the output string, a plot line*/
|
||||
do m=0 for 10; $=$ @.k.m /*build a line for the stem─&─leaf plot*/
|
||||
end /*m*/
|
||||
say right(k,w) '║' space($) /*display a line of stem─and─leaf plot.*/
|
||||
end /*k*/ /*stick a fork in it, we're all done. */
|
||||
Loading…
Add table
Add a link
Reference in a new issue