Crea un diagramma a gambo e foglia


14

Correlati: convalida di un diagramma gambo e foglia

Ingresso

Un elenco non vuoto di numeri interi positivi. Se necessario, possono essere presi come stringhe. Non puoi presumere che sia ordinato.

Produzione

Un diagramma gambo e foglia dei numeri. In una trama a gambo e foglia, i numeri sono ordinati in steli per decine, quindi tutti i numeri che si adattano a quello stelo hanno il loro valore collocato nello stelo, e quindi tutti sono ordinati. In questa sfida, le nuove linee separano gli steli e gli spazi separano gli steli dalle foglie.

È possibile includere o escludere tutti gli steli vuoti che si trovano tra steli non vuoti.

Casi test

(gli elenchi possono essere presi nell'elenco predefinito della tua lingua, ho usato JSON per il seguito)

Compresi steli vuoti:

[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

Esclusi gli steli vuoti:

[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


Deve essere ordinato e / o preservare l'ordine di input?
Rod,

@Rod per definizione, ordina l'input per decine, quindi per uno. L'ordine di input non ha importanza.
Stephen,

2
Il formato di output DEVE essere così? La mia risposta è valida?
Rod,

1
Le tuple di @totallyhuman sono OK, ma sì, le foglie devono essere ordinate, questo è il punto centrale della trama, per visualizzare modelli e distribuzioni
Stephen,

Risposte:


2

R , 12 byte

stem(scan())

Provalo online!

Spiegazione:

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

Penso che stemsarebbe sufficiente, in quanto richiede un array come input.
Giuseppe,

Questo è stato l'unico modo in cui ho potuto ottenere un esempio per lavorare effettivamente su TIO. E immagino di essere abituato allo stile di risposta "programma o funzione" e non sono sicuro di altri formati.
ngm


D'accordo con @Giuseppe, la risposta dovrebbe essere solo stem:)
JayCe,



3

Retina , 38 30 byte

Grazie a Neil per aver salvato 2 byte e a Leo per averne salvato altri 6.

Il conteggio dei byte presuppone la codifica ISO 8859-1.

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

L'input è un elenco di numeri interi separati da avanzamento riga. L'output omette prefissi vuoti.

Provalo online!


(?<=(\b.+ ).)¶\1ti salva due byte.
Neil,

I byte possono essere salvati utilizzando uno stadio di deduplicazione anziché uno sostitutivo come ultimo stadio (è necessario quindi occuparsi della prima riga) tio.run/##K0otycxL/…
Leo

@Leo Grazie, vado con una leggera variante che non finisce con un avanzamento di linea.
Martin Ender,

2

JavaScript (ES6), 89 byte

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 byte

-6 byte grazie a Rod. -9 byte grazie agli ovs.

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

Provalo online!

Va bene, qualcosa è leggermente instabile. Come tutti i programmatori Python dovrebbero sapere, i dicts non sono ordinati, il che significa che l'ordine originale delle coppie chiave-valore non viene conservato. Tuttavia, nel mio codice attuale, non ordino affatto il dict risultante. Tuttavia, ho testato più volte, verificando l'uguaglianza e l'ordine ogni volta, e il dict viene sempre bene. Se qualcuno smentisce che viene sempre bene o sa perché funziona, mi piacerebbe saperlo.

Input come elenco Python e output come dict. Esempio:

Ingresso:

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

Produzione:

{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`per 82 byte
ovs

Penso che i dadi siano ordinati per impostazione predefinita? semplicemente non nell'ordine originale
Destructible Lemon

1

Mathematica, 103 byte

Codice tratto dalla risposta eliminata di @utente202729

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

1

> <> , 84 byte

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

Provalo online o nel parco giochi per pesci !

Presuppone che i numeri di input siano già nello stack .

Spiegazione: Innanzitutto, ordiniamo lo stack utilizzando un ordinamento a bolle , con questo bit di codice:

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

Quindi, calcoliamo il quoziente intero della prima cosa nello stack di 10 usando ::a%-a,, inseriamo quello nel registro e passiamo attraverso lo stack stampando le ultime cifre dei numeri fino a quando le loro prime cifre non sono uguali al registro, quindi incrementando il registro e proseguendo. Quando raggiungiamo la fine dell'elenco, contrassegnato da un 0, ci fermiamo.


1

PostgreSQL, 53 byte

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

L'elenco di numeri interi deve risiedere in una integercolonna ndi una tabella esistentet . Il risultato è una tabella a due colonne: ogni riga è composta da una colonna "radice" e una colonna "foglie". La colonna "foglie" è in formato array JSON. (Come notato nei commenti, non è necessario aderire esattamente al formato mostrato in "Casi di prova".)

Sebbene l'ordine degli steli non sia garantito (per salvare 10 byte, ORDER BY 1viene omesso dalla fine della query), nel mio test, gli steli sembravano finire nell'ordine corretto.

Visualizza il risultato su SQL Fiddle

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.