Пусть будет списком натуральных чисел без определенного порядка и который может содержать дубликаты. Напишите программу или функцию, которая выводит список натуральных чисел M (порядок которых не имеет значения), так что объединение L и M приводит к наименьшему списку, который может полностью разбиваться на идентичные диапазоны целых чисел [ 1 .. i ] , где - это самый большой элемент вL
пример
Пусть L = [5,3,3,2,7]
. Максимальный элемент L
- это 7
. Наиболее часто встречается конкретное целое число 2
( 3
появляется 2 раза). Поэтому нам нужно вывести список M
, который позволит завершить, L
чтобы мы могли построить 2
диапазоны целых чисел от 1
до 7
.
Поэтому нам нужно вывести M = [1,1,2,4,4,5,6,6,7]
, чтобы каждое целое число от 1
до 7
появлялось 2
раз.
Входы и выходы
- Используйте на своем языке что-нибудь похожее на списки. Структура данных, используемая для ввода и вывода, должна быть одинаковой.
- Входной список будет содержать только положительные целые числа.
- Список ввода не будет пустым.
- Вы не можете предполагать, что входной список отсортирован.
- Порядок в списке вывода не имеет значения.
Контрольные примеры
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
источник
i
ли самый большой элементL
илиM
?i
- самый большой элементL
, это была опечатка в спецификациях.M=[1,1,2,2,3]
вL=[3]
то время как «объединение L и M результаты в виде списка , который может полностью разделить на одинаковые диапазоны целых чисел [1..i]»?[1,2]
. Я поясню это так, чтобы было ясно, что это должно привести к минимальному количеству диапазонов.Ответы:
Желе , 9 байт
Сохранено 1 байт благодаря Джонатану Аллану . Нижний колонтитул вызывает основную ссылку, сортирует результат в соответствии с контрольными примерами и форматирует вывод в виде таблицы.
Попробуйте онлайн! или проверить набор тестов!
альтернативы
Попробуйте один из них онлайн!
объяснение
источник
Perl 6 ,
3733 байта-4 байта благодаря nwellnhof!
Попробуйте онлайн!
Блок анонимного кода, который принимает Bag и возвращает Bag значений.
Объяснение:
источник
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
сохраняет еще один байт.р ,
594948 байтПопробуйте онлайн!
источник
rep
другому, но в остальном он такой же, как ваш. Я мог бы опубликовать это сам, но я не думаю, что подумал бы об этом, если бы не увидел ваш первый. Я призываю вас найти его!split
ноtabulate
намного лучше!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
что при дальнейшем тестировании не работает для тестовых случаев, как7
...Python 2 ,
86838072 байтаПопробуйте онлайн!
источник
05AB1E ,
171617 байт-1 байт благодаря @ Mr.Xcoder .
+1 байт после исправления ошибки ..
Может быть, я полностью смотрю мимо этого, но может ли 05AB1E даже удалить все элементы списка b из списка a .. (РЕДАКТИРОВАТЬ: Это действительно не ..) Я знаю, как удалить все несколько раз, но не один раз каждый .. (мультимножество различий)
Определенно можно играть в гольф. Не очень доволен этим, тбх ..
Посмотрим, смогу ли я еще поиграть в гольф, прежде чем добавить объяснение.РЕДАКТИРОВАТЬ: Добавлено объяснение ..Попробуйте онлайн или проверьте все тесты .
Объяснение:
источник
K a,b Push a without b's
? Ой, подождите, "один раз каждый" ... хм[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
и[5,3,3,2,7]
сK
результатами в[1,4,6,1,4,6]
к сожалению. Он удаляет все элементы, вместо того, чтобы делать мультимножество.¢ZIZLŠŠи
должен сохранить 1 байтR ,
5955 байтИспользуя
vecsets
пакет, мы можем отбросить длину ответа. С помощьюgl
мы можем получить упорядоченный вывод. Это не работает в TIO. Следуя стилю (довольно умного) решения @ digEmAll без определения функции, это можно считать 55-байтовым решением.источник
f(c(5,3,3,2,7))
JavaScript (ES6), 98 байт
Это оказалось довольно трудно для гольфа ниже 100 байтов. Там может быть лучший подход.
Попробуйте онлайн!
Как?
Сначала мы пройдемся по массиву ввода,
a[]
чтобы собрать следующие данные:M
= самый высокий элемент найден во входном массивеm
= наибольшее количество вхождений одного и того же элементаo[n]
= количество вхожденийn
Обратите внимание, что
o
в основном определяется как функция, но базовый объект также используется для хранения количества вхождений.Затем мы используем рекурсивную функцию
g()
для построения вывода.источник
Haskell, 72 байта
Попробуйте онлайн!
источник
Брахилог ,
1817 байтПопробуйте онлайн!
Сохранено 1 байт благодаря @Kroppeb.
объяснение
источник
⌉
вместоot
Java 10, 186 байт
Попробуйте онлайн.
Объяснение:
источник
Шелуха , 12 байт
Сохранено 1 байт благодаря BWO .
Попробуйте онлайн!
источник
MATL ,
2421 байтПопробуйте онлайн!
источник
MATL , 14 байтов
Ввод - это вектор-столбец с
;
разделителем.Попробуйте онлайн! Или проверьте все тестовые случаи (это отображается
--
после каждого вывода, чтобы можно было идентифицировать пустой вывод).объяснение
Рассмотрим ввод
[5; 2; 4; 5; 5]
в качестве примера.источник
Pyth , 13 байт
Попробуй это здесь! или проверить набор тестов!
источник
Древесный уголь , 19 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Было бы 16 байтов, если бы целые числа были неотрицательными, а не положительными. Объяснение:
источник
APL (Dyalog Classic) ,
1817 байтовПопробуйте онлайн!
использования
⎕io←1
источник
Пролог (SWI) , 211 байт
Я давно не программировал на Прологе. Определенно можно играть в гольф дальше, но у меня есть экзамен на хахаха.
Код
Попробуйте онлайн!
Неуправляемая версия
источник
Clojure, 94 байта
источник
C ++, 234 байта
(Новые строки в теле функции предназначены для удобства чтения).
Функция принимает и возвращает вектор целых чисел. Он используется
std::map
для нахождения элемента max входного списка, а также для подсчета вхождений каждого отдельного элемента.Объяснение:
источник
Gaia , 12 байт
Попробуйте онлайн!
источник
C (gcc) , 177 байтов
Ввод и вывод осуществляется через stdin и stdout. Оба массива ограничены 2 ^ 15 элементами, но они могут достигать 2 99 элементов.
С некоторым форматированием:
Попробуйте онлайн!
источник