Создайте сюжет со стеблем и листьями

14

Связанный: Утверждение заговора ствола и листа

вход

Непустой список натуральных чисел. При необходимости они могут быть приняты в виде строк. Вы не можете предположить, что это отсортировано.

Выход

Стволовых и листьев участок чисел. В виде этого стволовой и листьев участка, числа упорядочиваются в стеблях десятками, то все числа , которые вписываются в этот стебель у их них значение , придаваемое в стебель, а затем все они сортируются. В этом испытании символы новой строки отделяют стебли, а пробелы отделяют стебли от листьев.

Вы можете включить или исключить все пустые основы между непустыми.

Тестовые случаи

(списки могут быть приняты в списке по умолчанию вашего языка, я использовал JSON для ниже)

Включая пустые стебли:

[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

Исключая пустые стебли:

[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
Стивен
источник
Песочница
Стивен
Это нужно отсортировать и / или сохранить порядок ввода?
Род
@Rod по определению сортирует входные данные по десяткам, а затем по единицам. Порядок ввода не имеет значения.
Стивен
2
Формат вывода ДОЛЖЕН быть таким? Является ли мой ответ действителен?
Род
1
@totallyhuman кортежи в порядке, но да, листья должны быть отсортированы, вот и весь смысл сюжета, чтобы визуализировать закономерности и распределения
Стивен

Ответы:

2

R , 12 байт

stem(scan())

Попробуйте онлайн!

Объяснение:

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
НГМ
источник
Я думаю, что stemбыло бы достаточно, так как он принимает массив в качестве входных данных.
Джузеппе
Это был единственный способ получить пример для работы над TIO. И я думаю, что я привык к стилю ответа «программа или функция» и не уверен насчет других форматов.
НГМ
1
Как это
Джузеппе
Согласитесь с @Giuseppe, ответ должен быть просто stem:)
JayCe
3

Сетчатка , 38 30 байт

Спасибо Нейлу за сохранение 2 байта и Лео за сохранение еще 6.

Количество байтов предполагает кодировку ISO 8859-1.

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

Input представляет собой список целых чисел, разделенных переводом строки. Вывод пропускает пустые префиксы.

Попробуйте онлайн!

Мартин Эндер
источник
(?<=(\b.+ ).)¶\1экономит два байта
Нил
Байты могут быть сохранены с использованием этапа дедупликации вместо этапа замены в качестве последнего этапа (хотя вы должны затем разобраться с первой строкой) tio.run/##K0otycxL/…
Лев
@Leo Спасибо, у меня небольшой вариант, который не заканчивается лидирующим переводом строки.
Мартин Эндер
2

JavaScript (ES6), 89 байт

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 байта

-6 байт благодаря Роду. -9 байт благодаря овс.

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

Попробуйте онлайн!

Хорошо, что-то немного шатко. Как должны знать все программисты Python, дикты неупорядочены, то есть исходный порядок пар ключ-значение не сохраняется. Тем не менее, в моем текущем коде я не сортирую полученную информацию вообще. Тем не менее, я проверял несколько раз, проверяя равенство и порядок каждый раз, и дикт всегда выходит верным. Если кто-нибудь или опровергнет, что это всегда получается правильно, или знает, почему это работает, я хотел бы знать.

Ввод в виде списка Python и вывод в виде dict. Пример:

Входные данные:

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

Выход:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}
totallyhuman
источник
1
r[i/10]=r.get(i/10,'')+`i%10`для 82 байт
OVS
Я думаю, что дикты отсортированы по умолчанию? просто не в оригинальном порядке
Разрушаемый Лимон
1

Mathematica, 103 байта

Код взят из удаленного ответа пользователя @ user202729

Grid[Table[{Keys[#][[i]],""<>ToString/@#[[i]]},{i,Length@#}]]&@(GroupBy[Sort@#,⌊#/10⌋&]~Mod~10&@#)&
J42161217
источник
1

> <> , 84 байта

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

Попробуйте онлайн или на рыбной площадке !

Предполагается, что введенные числа уже находятся в стеке .

Объяснение: Сначала мы сортируем стек, используя пузырьковую сортировку , с помощью следующего фрагмента кода:

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

Затем мы вычисляем целочисленное отношение первой вещи в стеке, используя 10 ::a%-a,, помещаем это в регистр и проходим через стек, печатая последние цифры чисел, пока их первые цифры не будут такими же, как в регистре, затем увеличиваем регистр и продолжаем. Когда мы достигаем конца списка, отмеченного знаком 0, мы останавливаемся.

Не дерево
источник
1

PostgreSQL, 53 байта

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

Список целых чисел должен находиться в integerстолбце nсуществующей таблицы t. В результате получается таблица из двух столбцов: каждая строка состоит из столбца «стебель» и столбца «листья». Столбец «листья» имеет формат массива JSON. (Как отмечено в комментариях, нет необходимости точно придерживаться формата, показанного в разделе «Контрольные примеры».)

Хотя порядок основ не гарантируется (чтобы сохранить 10 байтов, ORDER BY 1он опущен в конце запроса), в моем тестировании, похоже, что основы оказались в правильном порядке.

Посмотреть результат на SQL Fiddle

PleaseStand
источник