创建茎叶图


14

相关:验证茎叶图

输入值

一个非空的正整数列表。如果需要,可以将它们视为字符串。您不能假定它已排序。

输出量

茎和叶情节的数字。在一个这样干和叶情节,数字排序为茎数十,那么适合的干所有的数字有他们的人值放入干,然后将所有的排序。在此挑战中,换行符将茎分开,而空格将茎和叶子分开。

您可以包括或排除非空词干之间的所有空词干。

测试用例

(列表可以采用您所用语言的默认列表,我在下面使用了JSON)

包括空茎:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
2
3
4
5
6
7
8
9
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010 0

不包括空茎:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1010 0


需要排序和/或保留输入顺序吗?
罗德

@Rod根据定义,它按十进制然后按一个对输入进行排序。输入顺序无关紧要。
斯蒂芬

2
输出格式一定是这样吗?是我的答案是否有效?
Rod

1
@totallyhuman元组还可以,但是是的,叶子需要排序,这就是情节的全部,以可视化模式和分布
Stephen

Answers:


2

R,12个字节

stem(scan())

在线尝试!

说明:

s               # imports RAND's "Million Random Digits"
  e  )          # cooks a pound of spaghetti and places it on the stack
 t              # transposes the output 42 times
       can      # goes for a pee
   m(           # grows moustache, turns head to side and frowns
      s   (     # implicitly ignores all criticism
           )    # makes a stemplot of the input

我认为就stem足够了,因为它需要一个数组作为输入。
朱塞佩

这是我可以得到一个在TIO上实际工作的例子的唯一方法。而且我想我已经习惯了“程序或函数”式的回答,并且不确定其他格式。
ngm


同意@Giuseppe,答案应该只是stem:)
JayCe



3

视网膜38 30字节

感谢Neil保存2个字节,并感谢Leo保存另外6个字节。

字节数假定为ISO 8859-1编码。

O#`
.\b
 $&
\B 
0 
D$`¶?.+ 
$*

输入是一个由换行符分隔的整数列表。输出省略空前缀。

在线尝试!


(?<=(\b.+ ).)¶\1为您节省两个字节。
尼尔

可以通过使用重复数据删除阶段而不是替换阶段作为最后阶段来保存字节(尽管您必须随后处理第一行)tio.run/##K0otycxL/…
Leo

@Leo谢谢,我要使用一个略微的变体,该变体最终不会导致换行。
Martin Ender

2

JavaScript(ES6),89个字节

a=>a.sort((a,b)=>a-b).map(e=>r[d=e/10|0]=(r[d]||d+` `)+e%10,r=[])&&r.filter(e=>e).join`
`

2

Python 2中146 140 133 124 120 118 109 107 90 86 84 91 82 81 70 63字节

-6个字节感谢Rod。-9字节归功于ovs。

lambda l:{i/10:[j%10for j in sorted(l)if j/10==i/10]for i in l}

在线尝试!

好吧,有些微动。所有Python程序员都应该知道,字典是无序的,这意味着键值对的原始顺序不会保留。但是,在当前代码中,我根本不对结果字典进行排序。但是,我已经进行了多次测试,每次都检查是否相等和有序,字典总是正确的。如果有人反驳它总是正确的,或者知道为什么这样做,我很想知道。

输入为python列表,输出为dict。例:

输入:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

输出:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}


1
r[i/10]=r.get(i/10,'')+`i%10`对于82个字节
ovs

我认为字典是默认排序的吗?只是不是按原始顺序
销毁的柠檬

1

Mathematica,103个字节

来自@ user202729的已删除答案的代码

Grid[Table[{Keys[#][[i]],""<>ToString/@#[[i]]},{i,Length@#}]]&@(GroupBy[Sort@#,⌊#/10⌋&]~Mod~10&@#)&

1

> <>,84个字节

1&0\n~a7+3.
 :}<$?)@:$@:v!?
r~&^?-l&:+1&/&:,a-%a::
&=?v~&1+:&ao>n" "o:?!;::a%:@-a,&:

在线或在鱼游乐场尝试一下

假设输入数字已经在堆栈中

说明:首先,我们使用气泡排序对堆栈进行排序,并添加以下代码:

1&0\
 :}<$?)@:$@:v!?
   ^?-l&:+1&/

接下来,我们使用乘以10,计算堆栈中第一位的整数商::a%-a,,将其放入寄存器中,然后遍历堆栈,打印数字的最后一位,直到其第一位与寄存器不相同为止,然后增加寄存器并继续。当我们到达列表的末尾并标有时0,我们将停止。


1

PostgreSQL,53个字节

SELECT n/10,json_agg(n%10ORDER BY n)FROM t GROUP BY 1

整数列表必须位于现有表的integernt。结果是一个两列的表:每行包含一个“茎”列和一个“叶子”列。“叶子”列为JSON数组格式。(如评论中所述,不必严格遵循“测试用例”下显示的格式。)

尽管不能保证词干的顺序(保存10个字节,ORDER BY 1在查询的末尾省略),但在我的测试中,词干似乎确实以正确的顺序结束。

在SQL Fiddle上查看结果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.