Criar um gráfico de caule e folhas

14

Relacionado: Validar um gráfico de caule e folhas

Entrada

Uma lista não vazia de números inteiros positivos. Se necessário, eles podem ser tomados como seqüências de caracteres. Você não pode assumir que está classificado.

Resultado

Um gráfico de caule e folha dos números. Em um enredo deste e folhas-tronco, os números são ordenados em hastes por dezenas, então todos os números que se encaixam em que estaminais têm seus entes valor colocado na haste, e então todos são classificadas. Nesse desafio, as novas linhas separam as hastes e os espaços separam as hastes das folhas.

Você pode incluir ou excluir todas as hastes vazias que estão entre hastes não vazias.

Casos de teste

(as listas podem ser obtidas no padrão da lista do seu idioma, usei o JSON para os itens abaixo)

Incluindo hastes vazias:

[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

Excluindo hastes vazias:

[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
Stephen
fonte
Sandbox
Stephen
Ele precisa ser classificado e / ou preservar a ordem de entrada?
Rod
@ Rod por definição, classifica a entrada por dezenas, depois por outras. A ordem de entrada não importa.
Stephen
2
O formato de saída DEVE ser assim? É a minha resposta válida?
Rod
1
tuplas @totallyhuman são OK, mas sim, as folhas têm de ser resolvidas, que é o ponto da trama, para visualizar padrões e distribuições
Stephen

Respostas:

2

R , 12 bytes

stem(scan())

Experimente online!

Explicação:

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
ngm
fonte
Eu acho stemque seria suficiente, pois é preciso uma matriz como entrada.
Giuseppe
Essa foi a única maneira de obter um exemplo para realmente trabalhar no TIO. E acho que estou acostumado ao estilo de resposta "programa ou função" e não tenho certeza sobre outros formatos.
ngm
1
Assim
Giuseppe
Concordo com @Giuseppe, a resposta deve ser apenas stem:)
Jayce
3

Retina , 38 30 bytes

Agradecemos a Neil por salvar 2 bytes e a Leo por salvar outros 6.

A contagem de bytes assume a codificação ISO 8859-1.

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

Entrada é uma lista de números inteiros separados por avanço de linha. A saída omite prefixos vazios.

Experimente online!

Martin Ender
fonte
(?<=(\b.+ ).)¶\1economiza dois bytes.
Neil
Bytes podem ser salvos usando um estágio de desduplicação em vez de um substituto como o último estágio (você deve, então, lidar com a primeira linha embora) tio.run/##K0otycxL/...
Leo
@ Leo Obrigado, eu vou com uma ligeira variante que não acaba com um avanço de linha principal.
Martin Ender
2

JavaScript (ES6), 89 bytes

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`
`
Neil
fonte
2

Python 2 , 146 140 133 124 120 118 109 107 90 86 84 91 82 81 70 63 bytes

-6 bytes graças a Rod. -9 bytes graças a ovs.

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

Experimente online!

Ok, algo está um pouco instável. Como todos os programadores de Python devem saber, os dict não são ordenados, o que significa que a ordem original dos pares de valores-chave não é preservada. No entanto, no meu código atual, não classifico o ditado resultante. No entanto, eu testei várias vezes, verificando a igualdade e a ordem todas as vezes, e o ditado sempre dá certo. Se alguém refutar que sempre dá certo ou souber por que isso funciona, eu adoraria saber.

Entrada como uma lista python e saída como um ditado. Exemplo:

Entrada:

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

Resultado:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}
totalmente humano
fonte
1
r[i/10]=r.get(i/10,'')+`i%10`para 82 bytes
ovs 23/06
Eu acho que os ditados são classificados por padrão? apenas não na ordem original
Destructible Lemon
1

Mathematica, 103 bytes

Código retirado da resposta excluída de @ user202729

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

> <> , 84 bytes

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

Experimente online ou no parque infantil de peixes !

Assume que os números de entrada estão na pilha .

Explicação: Primeiro, classificamos a pilha usando uma classificação de bolha , com este bit de código:

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

Em seguida, calculamos o quociente inteiro da primeira coisa na pilha usando 10 ::a%-a,, colocamos isso no registro e percorremos a pilha imprimindo os últimos dígitos dos números até que seus primeiros dígitos não sejam os mesmos do registro, depois incrementando o registro e continuando. Quando chegamos ao final da lista, marcado com a 0, paramos.

Não é uma árvore
fonte
1

PostgreSQL, 53 bytes

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

A lista de números inteiros deve residir em uma integercoluna nde uma tabela existente t. O resultado é uma tabela de duas colunas: cada linha consiste em uma coluna "tronco" e uma coluna "folhas". A coluna "folhas" está no formato de matriz JSON. (Conforme observado nos comentários, não é necessário aderir exatamente ao formato mostrado em "Casos de teste".)

Embora a ordem das hastes não seja garantida (para salvar 10 bytes, ORDER BY 1seja omitida no final da consulta), nos meus testes, as hastes pareciam terminar na ordem correta.

Ver resultado no SQL Fiddle

PleaseStand
fonte