Вступление
Предположим, у вас есть список списков целых чисел (или любых других объектов на самом деле, но для простоты давайте придерживаться целых чисел). Списки могут быть разной длины, и некоторые из них могут быть пустыми. Давайте напишем списки в табличном формате:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Эта таблица имеет 5 вертикальных столбцов, содержащее число 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
, и 5
. Если мы перевернем каждый столбец, мы получим списки 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
, и 5
. Давайте вставим эти числа обратно в столбцы таблицы, оставив длины строк такими же, как и раньше:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Ваша задача - реализовать эту операцию.
Вход и выход
Ваш ввод - это список списков неотрицательных целых чисел, представляющих строки. Строки могут иметь разную длину, а некоторые из них могут быть пустыми. Всегда будет хотя бы один ряд. Ваш вывод является результатом обращения каждого столбца, как описано выше. Ввод и вывод могут быть в любом разумном формате.
Наименьшее количество байтов в каждом языке выигрывает. Применяются стандартные правила игры в гольф .
Контрольные примеры
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
)Ответы:
Желе , 16 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
ṣ
в верхней строке очень умный! (ḟṚṁṣj
Делает⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
правильно?) В противном случае я имел это в течение еще одного байтаJapt ,
1513 байтсэкономили 2 байта благодаря @Shaggy
Проверьте это онлайн!
Вторую строку можно удалить, если нам разрешено заполнять строки нулевыми значениями, сохраняя 4 байта.
объяснение
источник
l;
сÊ
иmf_Ä
с®fÄ
.mf
кажется, работает на второй линии.mf
избавиться от любых нулей в результате, хотя, к сожалению ...APL (Dyalog Unicode) ,
201916 байтов SBCS-4 благодаря нгн.
Полная программа. Запрашивает ввод из STDIN.
Попробуйте онлайн!
Пояснение с примером прохождения
⎕
запросить оцененный ввод[[1,8,5],[7,5,4],[],[1]]
*
повышение е к власти , что ( е п , которое гарантирует , что не будет никаких нулей)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
смешать списки в одну матрицу, дополняя нулями:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
транспонирования┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
поменять положительные элементы каждого ряда┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
транспонирования┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
разбить матрицу на список списков[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
удалить нули из каждого списка[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
натуральный логарифм[[1,5,4],[7,8,5],[],[1]]
источник
К4 , 36 байт
Решение:
Примеры:
Объяснение:
Это было болезненно, и я все еще работаю над упрощением индексирования.
Например, вместо индексации в at,
x[0]
которая возвращает первую строку , мы хотим взять первый столбец , что можно сделать с помощьюx[;0]
.Однако проходя переменный
y
вx[;]
лакомства как делатьx[y]
неx[;y]
значит , толкая::
там:x[::;]
.Это эквивалентно переворачиванию списка списков, но переворот требует, чтобы все списки были равной длины!
источник
Haskell , 174 байта
Попробуйте онлайн!
Ungolfed / Пояснение
Идея состоит в том, чтобы обернуть все элементы
[]
и дополнить строки[]
(оказалось, что они короче, чем заполнение отрицательным целым числом, это также допускает и отрицательные входные данные) :* Эта функция транспонирования (
h
) просто возвращает список, если элементов вообще нет.Функция reverse должна игнорировать
[]
элементы (например,[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), для этого она получает два аргумента: первый - это элементы в обратном порядке (например,[4,3,1]
), а второй - исходная строка.источник
Python 2 ,
11110592 байтаПопробуйте онлайн!
источник
print
вместо того,return
чтобы сохранить байт.JavaScript (ES6),
7976 байтРедактировать: 3 байта сохранены благодаря @ETHproductions.
источник
APL (Dyalog Unicode) , 27 байтов SBCS
Попробуйте онлайн!
источник
@
но у меня его нет.Clojure, 123 байта
Я ожидал
(+ nil)
выбросить исключение, но оно оценивается вnil
: oЭто работает без заполнения, вместо этого он подсчитывает, сколько из предыдущих строк по крайней мере столько же, сколько текущая строка
R
.источник