Utwórz wykres łodyg i liści

14

Powiązane: Sprawdź poprawność wykresu łodyg i liści

Wejście

Niepusta lista dodatnich liczb całkowitych. W razie potrzeby można je traktować jako ciągi znaków. Nie możesz założyć, że jest posortowane.

Wynik

Macierzystych i liści działka z numerów. W w tym macierzystych i liścia działki, numery są uporządkowane w łodygach przez dziesiątki, wszystkie numery, które pasują do tej łodygi mają ich ci, wartość przypisywana do łodygi, a następnie wszyscy są klasyfikowane. W tym wyzwaniu nowe linie oddzielają łodygi, a spacje oddzielają łodygi od liści.

Możesz włączyć lub wyłączyć wszystkie puste łodygi znajdujące się między niepustymi łodygami.

Przypadki testowe

(listy mogą być pobierane z domyślnej listy twojego języka, użyłem JSON poniżej)

W tym puste łodygi:

[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

Z wyłączeniem pustych łodyg:

[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
źródło
Piaskownica
Stephen
Trzeba je posortować i / lub zachować kolejność wprowadzania?
Rod
@Rod z definicji sortuje dane wejściowe według dziesiątek, a następnie jedności. Kolejność wprowadzania nie ma znaczenia.
Stephen
2
Format wyjściowy MUSI być taki? Czy moja odpowiedź jest ważna?
Rod
1
@ totalniehumaniczne krotki są OK, ale tak, liście muszą być posortowane, to jest cały punkt fabuły, aby wizualizować wzory i rozkłady
Stephen

Odpowiedzi:

2

R , 12 bajtów

stem(scan())

Wypróbuj online!

Wyjaśnienie:

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
źródło
Myślę, stemże wystarczyłoby, ponieważ pobiera tablicę jako dane wejściowe.
Giuseppe,
To był jedyny sposób, w jaki mogłem znaleźć przykład do pracy nad TIO. Wydaje mi się, że jestem przyzwyczajony do stylu odpowiadania „programowego lub funkcyjnego” i nie jestem pewien co do innych formatów.
ngm
1
W ten sposób
Giuseppe
Zgadzam się z @Giuseppe, odpowiedź powinna brzmieć po prostu stem:)
JayCe
3

Siatkówka , 38 30 bajtów

Podziękowania dla Neila za uratowanie 2 bajtów i Leo za uratowanie kolejnych 6.

Liczba bajtów zakłada kodowanie ISO 8859-1.

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

Dane wejściowe to lista liczb całkowitych oddzielonych od linii. Dane wyjściowe pomijają puste prefiksy.

Wypróbuj online!

Martin Ender
źródło
(?<=(\b.+ ).)¶\1oszczędza dwa bajty.
Neil
Bajty można zapisać, używając etapu deduplikacji zamiast etapu zastępczego jako ostatniego etapu (musisz jednak poradzić sobie z pierwszą linią) tio.run/##K0otycxL/…
Leo
@Leo Dzięki, idę z niewielkim wariantem, który nie kończy się na wiodącym karmieniu liniowym.
Martin Ender
2

JavaScript (ES6), 89 bajtów

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
źródło
2

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

-6 bajtów dzięki Rod. -9 bajtów dzięki ovs.

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

Wypróbuj online!

Okej, coś jest trochę dziwne. Jak wszyscy programiści Python powinni wiedzieć, dyktaty są nieuporządkowane, co oznacza, że ​​pierwotna kolejność par klucz-wartość nie jest zachowana. Jednak w moim bieżącym kodzie wcale nie sortuję powstałego dykta. Jednak wielokrotnie testowałem, sprawdzając równość i porządek za każdym razem, a dykt zawsze wychodzi dobrze. Jeśli ktoś zaprzeczy, że to zawsze wychodzi dobrze lub wie, dlaczego to działa, chciałbym wiedzieć.

Dane wejściowe jako lista python i dane wyjściowe jako dykt. Przykład:

Wejście:

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

Wynik:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}
całkowicie ludzki
źródło
1
r[i/10]=r.get(i/10,'')+`i%10`dla 82 bajtów
dniu
Myślę, że dykty są domyślnie sortowane? po prostu nie w oryginalnej kolejności
Destructible Lemon
1

Mathematica, 103 bajty

Kod pochodzi z usuniętej odpowiedzi @ user202729

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

> <> , 84 bajtów

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

Wypróbuj online lub na placu zabaw dla ryb !

Zakłada, że ​​liczby wejściowe są już na stosie .

Objaśnienie: Najpierw sortujemy stos za pomocą sortowania bąbelkowego , używając tego fragmentu kodu:

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

Następnie obliczamy iloraz liczby całkowitej pierwszej rzeczy na stosie za pomocą 10 ::a%-a,, umieszczamy ją w rejestrze i przechodzimy przez stos, drukując ostatnie cyfry liczb, aż ich pierwsze cyfry nie będą takie same jak rejestr, następnie zwiększanie rejestru i kontynuowanie. Gdy dotrzemy do końca listy oznaczonej symbolem 0, zatrzymujemy się.

Nie drzewo
źródło
1

PostgreSQL, 53 bajty

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

Lista liczb całkowitych musi znajdować się w integerkolumnie nistniejącej tabelit . Wynikiem jest tabela dwukolumnowa: każdy wiersz składa się z kolumny „łodygi” i kolumny „liści”. Kolumna „liście” ma format tablicy JSON. (Jak zauważono w komentarzach, nie jest konieczne stosowanie dokładnie formatu pokazanego w „Przypadkach testowych”).

Chociaż kolejność rdzeni nie jest gwarantowana (aby zaoszczędzić 10 bajtów, ORDER BY 1jest pomijana na końcu zapytania), w moich testach wydaje się, że kończyły się we właściwej kolejności.

Zobacz wynik na SQL Fiddle

Proszę wstać
źródło