Вызов:
Возьмите вектор / список целых чисел в качестве входных данных и выведите наибольшее число, смежное с нулем.
Характеристики:
- Как всегда, дополнительный формат ввода и вывода
- Вы можете предположить, что будет хотя бы один ноль и хотя бы один ненулевой элемент.
Тестовые случаи:
1 4 3 6 0 3 7 0
7
9 4 9 0 9 0 9 15 -2
9
-4 -6 -2 0 -9
-2
-11 0 0 0 0 0 -12 10
0
0 20
20
Удачи и счастливого гольфа!
Ответы:
Желе , 8 байт
Попробуйте онлайн!
источник
MATL , 10 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Давайте возьмем входные данные
[-4 -6 -2 0 -9]
в качестве примера.источник
x(~~(dec2bin(5)-48))
, Кто задумал реализовать это? Очень умный и полезный для логических массивов! :) Хороший ответ!dec2bin()-'0'
сотни раз в MATLAB, так что я знал, что нужно быть в MATL :-)05AB1E , 9 байтов
объяснение
Не работает в онлайн-переводчике, но работает в автономном режиме.
источник
ü
был добавлен только вчера :)0
ли это, если фактический ответ будет отрицательным? Вы должны выбросить нули, я думаю.˜
сO
(суммы).Haskell,
6343 байтаСпасибо @MartinEnder за 4 байта!
источник
a*b==0
вместо||
.Пиф,
121110 байтФормирует пары, фильтрует по нулевому элементу, сортирует по сумме, возвращает наибольшее.
источник
,Vt
(неявныйQQ
) возвращает те же пары, что и.:Q2
, но с перевернутыми парами. Должно работать, хотя.f}0T
это/#0
JavaScript (ES6),
595756 байтРедактировать: 2 байта благодаря Huntro
Редактировать: 1 байт благодаря ETHproductions
источник
==
вместо===
l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
JavaScript (ES6), 53 байта
Потому что я люблю использовать
reduce
. Альтернативное решение, также 53 байта:источник
Python, 49 байт
Тесты в идеоне
Пролистывает пары, суммирует те, которые содержат любой ноль, возвращает максимум.
источник
Рубин, 51 байт
использование
источник
a+b
.-3 -2 0
returns0
. I think replacing...?0:...
with...?-1.0/0:...
should fix it, adding 5 bytes.PHP,
776871 bytes-3 bytes from anonymous,-4 and -2 from MartinEnderrun with
php -r '<code>' '<space separated values>'
источник
\K
to discard the match so far is shorter than using a look-behind.\S+
to match a signed integer. You'll probably have to use\b0,
so you don't have to prepend the,
.4 0 0 5
?\K
not work with alternatives? For unknown reason, the second alternative returns0 0
, so that there is no more0
to match before the5
. Fixed, thanks.Java 7,
118105106 bytes13 bytes saved thanks to @cliffroot by using an arithmetic approach instead. 1 additional byte thank to @mrco after he discovered a bug (the added test case
2, 1, 0
would return2
instead of1
).Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
int d(int[]a){int i,m=a[i=0],c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-1])>m?c:m);return m;}
CJam , 16 байтов
Попробуйте онлайн! (Как набор тестов.)
объяснение
источник
MATLAB с инструментарием обработки изображений, 32 байта
Это анонимная функция. Пример использования для тестовых случаев:
источник
Dyalog APL , 14 байтов
⌈/
самый большой из∊
уплощенный ( « е nlisted»2(
...)/
попарно+
сумма (ноль плюс что-то есть)↑⍨
принято, если0
нуль∊
является членом,
пара (освещенная конкатенация левого номера и правого номера)Попробуй APL онлайн!
источник
Р,
4847 байтРЕДАКТИРОВАТЬ: Исправлена ошибка благодаря @Vlo и изменил его для чтения ввода из stdins, сохранил один байт, назначая
w
и пропуская parantheses.Неопознанное объяснение
v
принимает значения 0:w <- which(v == 0)
+-1
:w-1
иw+1
w-1
иw+1
Обратите внимание, что если последний или первый элемент
v
равен нулю,w+-1
будет эффективно извлекать индекс за пределами длины вектора, что подразумевает, чтоv[length(v)+1]
возвращаетNA
. Обычно это не проблема, ноmax()
функция возвращает неудобство,NA
если в векторе есть вхождения, если не указан параметрna.rm=T
. Таким образом, сортировка и извлечение первого элемента на 2 байта короче, чем использованиеmax()
, например:источник
c(1, 4, 3, 6, 0, 10, 7, 0)
c((w<-which(v==0))-1,w+1)
sort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
()
тоже забыли ;). Обновил код и назначилv
предыдущие манипуляции сейчас.Mathematica,
4643 байтаСохранено 3 байта благодаря @MartinEnder .
Анонимная функция. Принимает список целых чисел в качестве входных данных и возвращает целое число в качестве выходных данных. Основано на решении Ruby.
источник
Perl, 42 bytes
Includes +1 for
-p
Give the numbers on line on STDIN
largest0.pl
:источник
Julia,
5655 BytesCreate tuples for neighboring values, take those tuples containing 0, sum tuple values and find maximum
источник
Python 2, 74 Bytes
Переберите каждый элемент, если он находится
0
слева или справа от текущего элемента, включите его в генератор и затем выполните егоmax
. Нам нужно дополнить список некоторыми0
номерами. Он никогда не будет включен, потому что срез[-1:2:2]
не будет ничего включать.источник
T-SQL, 182 байта
Golfed:
Ungolfed:
скрипка
источник
PowerShell v3 +, 62 байта
Немного дольше, чем другие ответы, но отличный подход.
Принимает участие
$n
. Затем перебирает индексы0..$n.count
, используетWhere-Object
(|?{...}
) для извлечения тех индексов, где находится предыдущий или следующий элемент в массиве0
, и возвращает их обратно в срез массива$n[...]
. Мы тогда|sort
эти элементы, и взять самый большой[-1]
.Примеры
источник
q, 38 байт
источник
{}
чтобы сделать его функцией.J, 18 байт
объяснение
источник
Perl 6 , 53 байта
Expanded:
источник
PHP, 66 байт
Довольно просто. Перебирает ввод, и когда число равно
0
, оно устанавливает$m
наибольшее число из 2 соседних чисел и любое предыдущее значение$m
.Запустите так (
-d
добавлено только для эстетики):источник
C #
7674 байтаОбъяснение:
Используйте zip, чтобы объединить массив с самим собой, но пропустив первое значение во 2-й ссылке, чтобы нулевой элемент присоединился к первому элементу. Умножьте a на b, если результат равен нулю, один из них должен быть равен нулю и вывести a + b. В противном случае выведите минимально возможное целое число на языке. Учитывая предположение, что у нас всегда будет ноль и ненулевое значение, это минимальное значение никогда не будет выводиться как максимальное.
Использование:
источник
int[]i) {
. Кроме того, я считаю 75 байтов в вашем текущем коде (74, если вы удалите пробел).a?b?i.Min()).Max():a:b
using System.Linq;
нет?System.Linq;
является частью нового шаблона класса по умолчанию.using
выражение в свой счетчик байтовR,
4854 байтаСчитывает вектор из консольного ввода, затем принимает максимум по всем значениям, смежным с 0.
Изменить: Ловит NA, произведенных на границе, спасибо rturnbull!
источник
20 0
, потому чтоs[w(s==0)+1]
возвращаетNA
, иmax
обработка по умолчаниюNA
состоит в том, чтобы возвратить это. Вы можете исправить это, добавив аргументna.rm=T
, или переработать код для использованияsort
(см. Другой ответ R, опубликованный выше).Ракетка 183 байта
Подробная версия:
Тестирование:
Выход:
источник
C 132 байта
Вывод с использованием основного кода возврата:
Я чувствую, что могу сохранить несколько байтов, сохранив один из вызовов atoi, но я не смог найти эффективный способ. (
,t
плюсt=
плюс,
плюсt
вдвое длиннее). Также это технически использует неопределенное поведение (установка _ [a] в «1»), но каждый известный мне компилятор разрешает его по умолчанию.Стратегия: заполните начало и конец массива 1, затем зациклите внутренний раздел, проверяя каждого соседа.
источник
PHP
6964 байтаНекоторые байты включаются и выключаются у Йорга Хюльсермана и Тита. знак равно
(-5)
Требуются включенные register_globals. Использование:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...
Golfed:
источник
-d register_globals=1
(или укажите версию, в которой register_globals включена по умолчанию)json_decode
это хорошая идея.?id[]=1&id[]=2&id[]=3
а затем$_GET["id"]
возвращает массив. По этой причине json_decode не имеет смысла для меня