50 lines
2.3 KiB
Plaintext
50 lines
2.3 KiB
Plaintext
StemPlot := proc( datatable::{rtable,list,algebraic} )
|
|
local i, j, k, tf, LeafStemTable, LeafStemIndices;
|
|
k:=0;
|
|
|
|
LeafStemTable := ListTools:-Categorize( (x,y) -> iquo(x, 10) = iquo(y, 10), sort(datatable));
|
|
|
|
if LeafStemTable = NULL then
|
|
error "Empty List";
|
|
elif nops( [ LeafStemTable ] ) = 1 or not( type( LeafStemTable[2], list) ) then
|
|
LeafStemTable := [ LeafStemTable ];
|
|
end if;
|
|
|
|
LeafStemIndices := { seq( iquo( LeafStemTable[i][1], 10 ), i = 1..nops( [ LeafStemTable ] ) ) };
|
|
|
|
for i from min( LeafStemIndices ) to max( LeafStemIndices ) do
|
|
|
|
if i in LeafStemIndices then
|
|
k := k + 1;
|
|
|
|
if i = 0 then
|
|
|
|
if min( datatable ) >=0 then
|
|
printf( "%-4a%s%-s\n", i, " | ", StringTools:-Remove( "[],", convert( [seq( abs( irem( LeafStemTable[k][j], 10 ) ), j = 1..nops( LeafStemTable[k] ) )], string ) ) );
|
|
else
|
|
tf := ListTools:-Occurrences( true, (x->type(x,negative))~(LeafStemTable[k]));
|
|
printf( "%s%-4a%s%-s\n", "-", i, " | ", StringTools:-Remove( "[],", convert( [seq( abs( irem( LeafStemTable[k][j], 10 ) ), j = 1 .. tf )], string ) ) );
|
|
printf( "%-4a%s%-s\n", i, " | ", StringTools:-Remove( "[],", convert( [seq( abs( irem( LeafStemTable[k][j], 10 ) ), j = tf + 1 .. nops( LeafStemTable[k] ) )], string ) ) );
|
|
end if;
|
|
|
|
else
|
|
|
|
printf( "%-4a%s%-s\n", i, " | ", StringTools:-Remove( "[],", convert( [seq( abs( irem( LeafStemTable[k][j], 10 ) ), j = 1..nops( LeafStemTable[k] ) )], string ) ) );
|
|
|
|
end if;
|
|
|
|
else
|
|
|
|
printf( "%-4a%s\n", i, " | " );
|
|
|
|
end if;
|
|
|
|
end do;
|
|
|
|
return NULL;
|
|
end proc:
|
|
|
|
Y := [ 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];
|
|
|
|
StemPlot(Y);
|