Дан непустой список / массив, содержащий только неотрицательные целые числа, как это:
[0, 0, 0, 8, 1, 4, 3, 5, 6, 4, 1, 2, 0, 0, 0, 0]
Выведите список с удаленными конечными и начальными нулями.
Выход для этого будет:
[8, 1, 4, 3, 5, 6, 4, 1, 2]
Некоторые другие тестовые случаи:
[0, 4, 1, 2, 0, 1, 2, 4, 0] > [4, 1, 2, 0, 1, 2, 4]
[0, 0, 0, 0, 0, 0] > nothing
[3, 4, 5, 0, 0] > [3, 4, 5]
[6] > [6]
Самый короткий код выигрывает
code-golf
array-manipulation
Lamaro
источник
источник
Nil
()
/[]
slip()
/Empty
Any
{}
Некоторые из них не определены, некоторые определены, но единичны, а некоторые попадаются в другие списки так, что они не увеличивают количество элементов. (Существует столько же разных вариаций,Any
сколько существует классов / типов и ролей)"0,4,1,2,0,1,2,4,0" => "4,1,2,0,1,2,4"
РЕДАКТИРОВАТЬ: только что заметил, что многие языки уже делают это.Ответы:
Желе , 2 байта
Код:
Объяснение:
Попробуйте онлайн!
источник
JavaScript (ES6) 43
Меньше гольфа
Тест
источник
f=(a,r=f(a,a))=>r.reverse().filter(x=>a|=x)
также 43 байта.CJam, 13 байтов
С введенным массивом.
Более длинная версия:
источник
Pyth, 4 байта
Демо-версия:
Из Pyth's
rev-doc.txt
:источник
05AB1E , 4 байта
Код:
Попробуйте онлайн!
Объяснение:
Использует кодировку CP-1252.
источник
Сетчатка, 12 байт
Конечный перевод строки является значительным.
Спасибо @Martin Büttner и @FryAmTheEggman за сохранение нескольких байтов.
Попробуйте онлайн
источник
R, 43 байта
или как читать / писать STDIN / STDOUT
Это находит совокупный максимум от начала и конца (перевернутая) строка.
&
Оператор преобразует эти два вектора в логической единицы одного и того же размера , какx
, (нули всегда будут преобразованы вFALSE
и все остальное , чтобыTRUE
), таким образом , это делает возможным подмножество из вx
соответствии с условиями встречались.источник
Haskell , 29 байт
источник
Mathematica
3427 байтЭто постоянно применяет правила замены до тех пор, пока такое действие не сможет обеспечить новый вывод. 7 байтов сохранено благодаря Alephalpha.
Первое правило удаляет ноль в начале; второе правило удаляет ноль в конце массива.
источник
#//.{0,a___}|{a___,0}:>{a}&
05AB1E, 4 байта
В основном обрезка, ведущая, затем конечные нули ввода, представленные в виде массива.
Попробуйте онлайн!
источник
Perl, 19 + 1 = 20 байт
Требуется
-p
флаг:источник
s/^0 | 0$//&&redo
?
как в примере - но это не уменьшит"0"
..Желе, 10 байт
Это не использует встроенный.
Попробуй это здесь .
источник
Perl, 38 байт
Запуск с
perl -p
, (добавлено 3 байта-p
).Принимает числа на STDIN, по одному на строку; генерирует числа в STDOUT, по одному на строку, как и должна делать утилита unix.
Только числа, представленные в точности как 0, как нули; можно было бы поддержать другие представления с помощью нескольких дополнительных байтов в регулярном выражении.
Более длинная версия, с которой еще предстоит работать
-p
:Расширенная версия, показывающая взаимодействие с флагом -p:
источник
perl -E
,-p
флаг обычно считается только одним байтом, так как есть только один дополнительный байт, отличный от этого иperl -pE
.Эликсир, 77 байт
л это массив.
Edit: вау! копирование / макароны не удаются. Конечно, нужно импортировать Enum, который увеличивает количество байтов на 12 (или использовать Enum.function_name, что сделает его еще длиннее).
источник
Витси, 13 байт
Витси постепенно поправляется ... (Я иду за тобой, Джелли. ಠ_ಠ)
Это выходит с массивом в стеке. Для удобства чтения, TryItOnline! ссылка, которую я предоставил ниже объяснения, выведет отформатированный список.
Объяснение:
Обратите внимание, что это вызовет исключение StackOverflowException для неоправданно больших входных данных.
TryItOnline!
источник
R, 39 байт
На четыре байта короче R-ответа Дэвида Аренбурга . Эта реализация находит первый и последний индекс в массиве, который больше нуля, и возвращает все в массиве между этими двумя индексами.
источник
MATL , 9 байт
Попробуйте онлайн!
объяснение
источник
Дьялог АПЛ, 15 байт
Попробуй это здесь .
источник
{⌽⍵/⍨×+\⍵}⍣2
?Рубин,
4944 байтаСпасибо manatwork за то, что вырубили 5 байт совершенно другим методом!
Это просто
drop
первый элемент массива,while
он равен 0, обращает массив, повторяет его и, наконец, обращает массив, чтобы вернуть его в правильном порядке.источник
.drop_while()
f=->a{a.drop_while{|i|i<1}.reverse};->a{f[f[a]]}
eval
уродство->a{eval ?a+'.drop_while{|i|i<1}.reverse'*2}
.<1
. Благодарность!Vim 16 нажатий клавиш
Ввод вводится пользователем между
i
иesc
, и не считается нажатием клавиши. Это предполагает, что будет по крайней мере один ведущий и один конечный ноль. Если это неверное предположение, мы можем использовать эту немного более длинную версию: (18 нажатий клавиш)источник
i
и<esc>
). В vim golf игрок в гольф начинает с ввода уже в файле загруженного буфера и курсора в верхнем левом углу, но пользователь также должен сохранить и выйти (ZZ
обычно это самый быстрый способ). Тогда вы можете сделать что-то вродеd[1-9]<enter>$NlDZZ
(13 нажатий клавиш). ПримечаниеN
/n
вместо/<up><enter>
ES6, 51 байт
t
устанавливается на индекс после последнего ненулевого значения, в то времяf
как увеличивается до тех пор, пока пока видны только нули.источник
Perl 6 , 23 байта
Использование:
источник
Сетчатка, 11 байт
Довольно просто. Рекурсивно заменяет нули в начале и конце строки.
Попробуйте онлайн!
источник
JavaScript (ES6), 47 байт
Где
a
находится массив.источник
a=>a.join(a="")...
.[14]
вернется[1, 4]
.Python, 84 символа
источник
for i in-1,0:
JavaScript (ES6), 34 байта
Ввод и вывод выполняются в форме списка, разделенного пробелами, например
"0 4 1 2 0 1 2 4 0"
.источник
Javascript (ES6) 40 байт
источник
PHP,
565452 байтаИспользует кодировку Windows-1252
Струнное решение
Запустите так:
Если ваш терминал установлен в UTF-8, это то же самое:
Tweaks
источник
Python 2,
6967 байтисточник
for i in-1,0:
[space][space]while
на[tab]while
. А==0
может быть<1
. mothereff.in/…PowerShell, 49 байт
Принимает данные
$args[0]
и-join
вводит их вместе с запятыми для формирования строки. Затем мы используем.Trim()
функцию, вызываемую дважды, чтобы удалить сначала завершающие, а затем начальные нули и запятые. Затем мы помещаем-split
строку с запятыми обратно в массив.Альтернативная версия, без использования преобразования
PowerShell, 81 байт
Поскольку PowerShell не имеет функции для обрезки массивов, мы определяем новую функцию
f
, которая сделает для нас половину этого. Функция принимает в$a
качестве входных данных, затем перебирает каждый элемент с помощью цикла foreach|%{...}
. Каждую итерацию мы проверяем на условность$_ -or $b
. Так как ненулевые целые числа являются правдивыми, но$null
ложными (и$b
, будучи ранее не определенными, начинаются как$null
), это будет только$true
после того, как мы попадем в наш первый ненулевой элемент в массиве. Затем мы устанавливаем$b=1
и добавляем текущее значение$_
в конвейер. Затем это будет продолжаться до конца входного массива, с нулями в середине и концом, добавляемым на выход, так как мы установили$b
truey.Мы инкапсулируем и сохраняем результаты цикла обратно в
$a
. Затем мы индексируем$a
в обратном порядке (т. Е. Обращаем массив), который остается в конвейере и, таким образом, является возвращаемым значением функции.Мы дважды вызываем функцию на
$args[0]
входе в программу, чтобы «обрезать» ее спереди, а затем снова спереди (то есть сзади, поскольку мы перевернули). Порядок сохраняется, так как мы дважды меняем направление.Эта версия немного не соответствует правилам для входного массива всех нулей, но поскольку игнорирование STDERR является общепринятой практикой, программа выдаст две (подробные)
Cannot index into a null array
ошибки (эквивалент PowerShell) в STDERR и затем ничего не выдаст.источник