Crear un diagrama de tallo y hojas

14

Relacionado: Validar un diagrama de tallo y hojas

Entrada

Una lista no vacía de enteros positivos. Si es necesario, se pueden tomar como cadenas. No puedes asumir que está ordenado.

Salida

Un diagrama de tallo y hojas de los números. En una de sus parcelas, de tallo y hojas, los números se ordenan en los tallos por decenas, a continuación, todos los números que encajan en ese vástago tienen sus queridos valor que se da en el tallo, y luego todo se ordenan. En este desafío, las líneas nuevas separan los tallos y los espacios separan los tallos de las hojas.

Puede incluir o excluir todos los tallos vacíos que se encuentran entre tallos no vacíos.

Casos de prueba

(las listas se pueden tomar en la lista predeterminada de su idioma, usé JSON para lo siguiente)

Incluyendo tallos vacíos:

[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

Excluyendo tallos vacíos:

[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
fuente
Sandbox
Stephen
¿Necesita ser ordenado y / o preservar el orden de entrada?
Rod
@Rod por definición, ordena la entrada por decenas, luego por unidades. El orden de entrada no importa.
Stephen
2
¿El formato de salida DEBE ser así? ¿Es válida mi respuesta ?
Rod
1
Las tuplas @totallyhuman están bien, pero sí, las hojas necesitan ser ordenadas, ese es el punto central de la trama, para visualizar patrones y distribuciones
Stephen

Respuestas:

2

R , 12 bytes

stem(scan())

Pruébalo en línea!

Explicación:

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
fuente
Creo que stemsería suficiente, ya que toma una matriz como entrada.
Giuseppe
Esa era la única forma en que podía obtener un ejemplo para trabajar realmente en TIO. Y supongo que estoy acostumbrado al estilo de respuesta "programa o función" y no estoy seguro acerca de otros formatos.
ngm
1
Me gusta esto
Giuseppe
De acuerdo con @Giuseppe, la respuesta debería ser solo stem:)
JayCe
3

Retina , 38 30 bytes

Gracias a Neil por guardar 2 bytes, y a Leo por guardar otros 6.

El recuento de bytes asume la codificación ISO 8859-1.

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

La entrada es una lista de enteros separada por salto de línea. La salida omite los prefijos vacíos.

Pruébalo en línea!

Martin Ender
fuente
(?<=(\b.+ ).)¶\1te ahorra dos bytes.
Neil
Los bytes se pueden guardar utilizando una etapa de deduplicación en lugar de una de reemplazo como la última etapa (sin embargo, debe tratar con la primera línea) tio.run/##K0otycxL/…
Leo
@Leo Gracias, voy con una ligera variante que no termina con un salto de línea líder.
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
fuente
2

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

-6 bytes gracias a Rod. -9 bytes gracias a los ovs.

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

Pruébalo en línea!

De acuerdo, algo es un poco inestable. Como todos los programadores de Python deberían saber, los dictos no están ordenados, lo que significa que el orden original de los pares clave-valor no se conserva. Sin embargo, en mi código actual, no clasifico el dict resultante. Sin embargo, lo he probado varias veces, comprobando la igualdad y el orden cada vez, y el dict siempre sale bien. Si alguien refuta que siempre sale bien o sabe por qué esto funciona, me encantaría saberlo.

Entrada como una lista de python y salida como un dict. Ejemplo:

Entrada:

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

Salida:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}
totalmente humano
fuente
1
r[i/10]=r.get(i/10,'')+`i%10`para 82 bytes
ovs
¿Creo que los dictos están ordenados por defecto? simplemente no en el orden original
Destructible Lemon
1

Mathematica, 103 bytes

Código tomado de la respuesta eliminada de @ user202729

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

> <> , 84 bytes

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

¡Pruébelo en línea o en el área de juegos para peces !

Asume que los números de entrada ya están en la pila .

Explicación: Primero, clasificamos la pila usando una clasificación de burbujas , con este bit de código:

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

Luego, calculamos el cociente entero de lo primero en la pila usando 10 ::a%-a,, lo ponemos en el registro y pasamos por la pila imprimiendo los últimos dígitos de los números hasta que sus primeros dígitos no sean los mismos que el registro, luego incrementando el registro y continuando. Cuando llegamos al final de la lista, marcados con un 0, nos detenemos.

No un arbol
fuente
1

PostgreSQL, 53 bytes

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

La lista de enteros debe residir en una integercolumna nde una tabla existentet . El resultado es una tabla de dos columnas: cada fila consiste en una columna de "tallo" y una columna de "hojas". La columna "hojas" está en formato de matriz JSON. (Como se señaló en los comentarios, no es necesario cumplir exactamente con el formato que se muestra en "Casos de prueba").

Aunque el orden de los tallos no está garantizado (para guardar 10 bytes, ORDER BY 1se omite desde el final de la consulta), en mi prueba, los tallos parecían terminar en el orden correcto.

Ver resultado en SQL Fiddle

Por favor levantese
fuente