Erstellen Sie ein Stengel-Blatt-Diagramm


14

Verwandte Themen : Überprüfen Sie ein Stengel-Blatt-Diagramm

Eingang

Eine nicht leere Liste positiver Ganzzahlen. Bei Bedarf können sie als Zeichenfolgen verwendet werden. Sie können nicht davon ausgehen, dass es sortiert ist.

Ausgabe

Ein Stengel-Blatt-Plot der Zahlen. In einem dieser Stamm-Blatt - Auftragung, Zahlen geordnet in Zehn Stielen, dann sind alle Zahlen , die in diesen Stamm passen ihre diejenigen in den Schaft gelegt Wert, und dann werden alle sortiert. Bei dieser Herausforderung trennen Zeilenumbrüche die Stängel und Leerzeichen die Stängel von den Blättern.

Sie können alle leeren Stems einschließen oder ausschließen, die sich zwischen nicht leeren Stems befinden.

Testfälle

(Listen können in der Standardliste Ihrer Sprache verwendet werden. Ich habe JSON für die folgenden verwendet.)

Einschließlich leerer Stiele:

[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

Ausgenommen leere Stiele:

[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


Es muss sortiert werden und / oder die Eingabereihenfolge erhalten bleiben?
Rod

@Rod sortiert die Eingabe per Definition nach Zehnern und dann nach Einern. Eingabereihenfolge spielt keine Rolle.
Stephen

2
Das Ausgabeformat MUSS so sein? Ist meine Antwort gültig?
Rod

1
@totallyhuman Tupel sind OK, aber ja, die Blätter müssen sortiert werden, das ist der springende Punkt der Handlung, um Muster und Verteilungen zu visualisieren
Stephen

Antworten:


2

R , 12 Bytes

stem(scan())

Probieren Sie es online!

Erläuterung:

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

Ich denke nur stemwäre ausreichend, da es ein Array als Eingabe braucht.
Giuseppe

Nur so konnte ich ein Beispiel für die Arbeit an TIO finden. Und ich glaube, ich bin an den "Programm- oder Funktions" -Antwortstil gewöhnt und bin mir bei anderen Formaten nicht sicher.
ngm


Zustimmen mit @ Giuseppe, die Antwort sollte einfach sein stem:)
JayCe



3

Retina , 38 30 Bytes

Vielen Dank an Neil für das Speichern von 2 Bytes und an Leo für das Speichern von weiteren 6 Bytes.

Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.

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

Die Eingabe ist eine durch Zeilenvorschub getrennte Liste von Ganzzahlen. Bei der Ausgabe werden leere Präfixe weggelassen.

Probieren Sie es online!


(?<=(\b.+ ).)¶\1spart Ihnen zwei Bytes.
Neil

Bytes können gespeichert werden, indem eine Deduplizierungsstufe anstelle einer Ersatzstufe als letzte Stufe verwendet wird (Sie müssen sich dann jedoch um die erste Zeile kümmern
Leo

@Leo Danke, ich gehe mit einer leichten Variante, die nicht mit einem Zeilenvorschub endet.
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 Bytes

-6 Bytes dank Rod. -9 bytes dank ovs.

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

Probieren Sie es online!

Okay, etwas ist etwas wackelig. Wie alle Python-Programmierer wissen sollten, sind Dikte ungeordnet, was bedeutet, dass die ursprüngliche Reihenfolge der Schlüssel-Wert-Paare nicht beibehalten wird. In meinem aktuellen Code sortiere ich das resultierende Diktat jedoch überhaupt nicht. Trotzdem habe ich mehrere Male getestet und jedes Mal auf Gleichheit und Ordnung geprüft, und das Diktat kommt immer richtig heraus. Wenn jemand widerlegt, dass es immer richtig läuft, oder weiß, warum das funktioniert, würde ich es gerne wissen.

Eingabe als Pythonliste und Ausgabe als Diktat. Beispiel:

Eingang:

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

Ausgabe:

{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`für 82 Bytes
Ovs

Ich denke, die Dikte sind standardmäßig sortiert. nur nicht in der ursprünglichen Reihenfolge
Destructible Lemon

1

Mathematica, 103 Bytes

Code aus der gelöschten Antwort von @ user202729

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

1

> <> 84 Bytes

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

Probieren Sie es online oder auf dem Fischspielplatz !

Angenommen, die eingegebenen Nummern befinden sich bereits auf dem Stapel .

Erläuterung: Zuerst sortieren wir den Stapel mithilfe einer Blasensortierung mit dem folgenden Codebit:

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

Als nächstes berechnen wir den ganzzahligen Quotienten des ersten Dings im Stapel mit 10 ::a%-a,, geben ihn in das Register ein und gehen den Stapel durch, indem wir die letzten Ziffern der Zahlen drucken, bis ihre ersten Ziffern nicht mehr mit denen des Registers übereinstimmen. dann Inkrementieren des Registers und Fortsetzen. Wenn wir das Ende der mit einem gekennzeichneten Liste erreichen 0, hören wir auf.


1

PostgreSQL, 53 Bytes

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

Die Liste der Ganzzahlen muss sich in einer integerSpalte neiner vorhandenen Tabelle befinden t. Das Ergebnis ist eine zweispaltige Tabelle: Jede Zeile besteht aus einer "Stamm" -Spalte und einer "Blätter" -Spalte. Die Spalte "leaves" hat das JSON-Array-Format. (Wie in den Kommentaren vermerkt, muss das unter "Testfälle" angegebene Format nicht genau eingehalten werden.)

Obwohl die Reihenfolge der Stems nicht garantiert ist (um 10 Bytes zu sparen, ORDER BY 1wird am Ende der Abfrage nicht darauf hingewiesen), schienen die Stems in meinem Test in der richtigen Reihenfolge zu landen.

Ergebnis auf SQL Fiddle anzeigen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.