Вдохновлен этим постом StackOverflow.
Вступление
Работа Боба заключается в создании электронных таблиц и их организации. То, как он их организует, известно очень немногим, кроме Боба, но он создает список каждой из электронных таблиц, входящих в одну группу. В электронной таблице, которую он создает, есть куча данных, но есть только одна часть данных, на которую мы сейчас обращаем внимание: количество дней между днем, когда он начал эту работу, и днем, когда он создал электронную таблицу. В первый день он создал две электронные таблицы, отметил их обе 0
и отсортировал их по месту.
Теперь его начальник просит рассмотреть, какие электронные таблицы происходят каждый день, и ваша задача - написать код, который выяснит это для Боба; у него слишком много таблиц, чтобы сделать это вручную.
вход
Информация Боба, которую он дает вам, представлена в виде зубчатого массива (с индексами 0 или 1), где каждый элемент имеет форму x = a[i][j]
. a
это то, что я называю самим зубчатым массивом, i
это тип электронной таблицы и x
дата создания массива. j
неважно.
Задание
При наличии неровного массива дней создания электронных таблиц, организованного по их типу, верните неровный массив типов электронных таблиц, упорядоченных по дню создания электронных таблиц.
Примеры
Боб не собирается просто оставлять вас с этими абстрактными данными. Он дал мне подмножество некоторых своих электронных таблиц, чтобы помочь вам выяснить, что все должно быть.
Пример ввода (с 0 индексами):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Пример вывода (с комментарием, который, конечно, не требуется):
output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet
[4,4] # On day 6, Bob made two type 4 spreadsheets
]
Обратите внимание, что Боб не всегда делает две таблицы каждый день, и поэтому выходные данные могут быть неровными. Но он всегда создает по крайней мере одну электронную таблицу каждый день, поэтому в выходных данных никогда не будет необходимости содержать пустые массивы - хотя, если в конце выходных данных есть пустые массивы, их не нужно удалять.
Больше тестовых случаев:
[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers.
[[0],[0],[],[0]] -> [[0,1,3]]
Внутренние списки вывода не нужно сортировать.
Как всегда, нет стандартных лазеек и, конечно же, выигрывает самый короткий код.
(Поскольку это мой первый вопрос, пожалуйста, дайте мне знать, что я могу сделать, чтобы улучшить его.)
источник
[[0 0]]
дать вывод[[0 0] []]
?Ответы:
Желе ,
1110 байтВход и выход основаны на 1.
Попробуйте онлайн! или проверьте все тестовые случаи (0 для легкого сравнения).
источник
Pyth, 13 байт
Попробуйте онлайн
источник
Pyth , 14 байт
Тестирование.
источник
Брахилог , 28 байт
объяснение
Основной предикат, Input (
?
) = список списковПредикат 1:
Предикат 2:
источник
Луа, 114 байт
Идео это!
Вдохновлен ответом Денниса в Python 2 .
источник
JavaScript (ES6), 58 байт
источник
CJam (
3029 байт)Онлайн демо
Любопытно, что использовать его короче,
W
чем использоватьee
, в основном потому, что я все равно хочу, чтобы индекс оказался в переменной.e]
сохранил два байта поверх первого поиска максимального элементаm
и инициализации массиваm+1
пустых массивов.Спасибо Мартину за однобайтовую экономию путем сохранения значения
X
вместо его манипулирования стеком.NB. Если разрешены конечные пустые массивы, есть альтернативный 29-байтовый подход, вместо этого инициализируйте массив из столько пустых дней, сколько существует электронных таблиц:
источник
CJam, 20 байтов
Спасибо Питеру Тейлору за то, что он позволил мне основать этот код на своем решении и сэкономил 3 байта.
Безымянный блок, который ожидает ввод сверху стека и заменяет его выводом.
Проверьте это здесь.
объяснение
источник
Python 2, 82 байта
Проверьте это на Ideone .
источник
Mathematica, 35 байт
Безымянная функция, которая принимает и возвращает рваный список. Использует индексы на основе 1.
К счастью,
Max
автоматически сглаживает все свои входные данные, поэтому мы получаем индекс последнего дня, даже если входные данные являются рваным списком. Затем мы просто вычисляем список#&@@@#~Position~i
индексов за весь деньi
. Само это выражение находит позициюi
внутри рваного списка (возвращается как массив индексов на последовательных глубинах), поэтому значения, которые мы хотим, являются первыми значениями каждого из этих списков.#&@@@
стандартная игра в гольф для получения первого элемента из каждого подсписка, применяя#&
к каждому из этих подсписков, что является неназванной функцией, которая возвращает свой первый аргумент.В качестве альтернативы, мы можем определить унарный оператор для того же количества байтов (при условии, что исходный файл в кодировке ISO 8859-1):
источник
Java, 314 байт
Детальнее
источник
Map
?Perl 5, 48 байт
Подпрограмма:
Посмотрите это в действии, как это:
источник