Desafio:
Pegue um vetor / lista de números inteiros como entrada e produza o maior número adjacente a um zero.
Especificações:
- Como sempre, formato opcional de entrada e saída
- Você pode supor que haverá pelo menos um zero e pelo menos um elemento diferente de zero.
Casos de teste:
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
Boa sorte e feliz golfe!
Respostas:
Gelatina , 8 bytes
Experimente online!
fonte
MATL , 10 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
Vamos dar
[-4 -6 -2 0 -9]
um exemplo como exemplo.fonte
x(~~(dec2bin(5)-48))
. Quem foi a ideia de implementar essa? Muito inteligente e útil para matrizes lógicas! :) Boa resposta!dec2bin()-'0'
centenas de vezes em MATLAB, então eu sabia que era preciso estar em MATL :-)05AB1E , 9 bytes
Explicação
Não funciona no intérprete online, mas funciona offline.
fonte
ü
foi adicionado ontem :)0
se a resposta real for negativa? Você tem que jogar fora os zeros, eu acho.˜
porO
(soma).Haskell,
6343 bytesObrigado a @MartinEnder por 4 bytes!
fonte
a*b==0
vez do||
.Pitão,
121110 bytesPares de formulários, filtros por zero membro, classificados por soma, retornam maiores.
fonte
,Vt
(implícitoQQ
) retorna os mesmos pares que.:Q2
, mas com os pares invertidos. Deve funcionar, no entanto.f}0T
é/#0
JavaScript (ES6),
595756 bytesEdit: economizou 2 bytes graças ao Huntro
Edit: economizou 1 byte graças ao ETHproductions
fonte
==
vez de===
l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
JavaScript (ES6), 53 bytes
Porque eu gosto de usar
reduce
. Solução alternativa, também 53 bytes:fonte
Python, 49 bytes
Os testes estão no ideone
Atravessa os pares, soma os que contêm zero, retorna o máximo.
fonte
Ruby, 51 bytes
uso
fonte
a+b
.-3 -2 0
Retornos0
Eu acho que a substituição....?0:...
Com...?-1.0/0:...
deve corrigi-lo, adicionando 5 bytes.PHP,
776871 bytes-3 bytes de anônimo,-4 e -2 de MartinEndercorrer com
php -r '<code>' '<space separated values>'
fonte
\K
para descartar a partida até agora é mais curto do que usar um look-behind.\S+
para corresponder a um número inteiro assinado. Você provavelmente precisará usar\b0,
para não preceder o,
.4 0 0 5
?\K
funciona com alternativas? Por motivo desconhecido, a segunda alternativa retorna0 0
, para que não haja mais0
correspondência antes da5
. Corrigido, obrigado.Java 7,
118105106 bytes13 bytes salvos graças ao @cliffroot usando uma abordagem aritmética. 1 byte adicional, graças a @mrco depois que ele descobriu um bug (o caso de teste adicionado
2, 1, 0
retornaria em2
vez de1
).Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
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 bytes
Experimente online!(Como uma suíte de teste.)
Explicação
fonte
MATLAB com Image Processing Toolbox, 32 bytes
Esta é uma função anônima. Exemplo de uso para os casos de teste:
fonte
Dyalog APL , 14 bytes
⌈/
maior de∊
o achatada ( " e nlisted"2(
... em)/
pares+
soma (zero mais algo é alguma coisa)↑⍨
tomado se0
zero∊
é um membro de,
o par (lit. a concatenação do número da esquerda e do número da direita)TryAPL online!
fonte
R,
4847 bytesEDIT: Corrigido um erro graças ao @Vlo e alterado para ler a entrada de stdins, economizando um byte atribuindo
w
e pulando parênteses.Explicação não aninhada
v
assume os valores 0:w <- which(v == 0)
+-1
:w-1
ew+1
w-1
ew+1
Observe que, se o último ou o primeiro elemento de
v
for um zero,w+-1
buscará efetivamente um índice fora do comprimento do vetor, o que implica emv[length(v)+1]
retornosNA
. Isso geralmente não é problema, mas asmax()
funções retornam inconvenientementeNA
se houver alguma ocorrência no vetor, a menos que alguém especifique a opçãona.rm=T
. Portanto, é 2 bytes mais curto para classificar e extrair o primeiro elemento do que para usarmax()
, por exemplo:fonte
c(1, 4, 3, 6, 0, 10, 7, 0)
c((w<-which(v==0))-1,w+1)
também um pouco mordeu mais curto com varredurasort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
()
também;). Atualizado o código e av
manipulação anterior atribuída agora.Mathematica,
4643 bytesSalvo 3 bytes devido a @MartinEnder .
Função anônima. Pega uma lista de números inteiros como entrada e retorna um número inteiro como saída. Baseado na solução Ruby.
fonte
Perl, 42 bytes
Inclui +1 para
-p
Dê os números on-line em STDIN
largest0.pl
:fonte
Julia,
5655 BytesCrie tuplas para valores vizinhos, pegue aquelas que contenham 0, some valores de tuplas e encontre o máximo
fonte
Python 2, 74 bytes
Passe por cada elemento, se houver um
0
na posição esquerda ou direita do elemento atual, inclua-o no gerador e execute-omax
. Precisamos preencher a lista com algum0
número não . Ele nunca será incluído porque a fatia[-1:2:2]
não incluirá nada.fonte
T-SQL, 182 bytes
Golfe:
Ungolfed:
Violino
fonte
PowerShell v3 +, 62 bytes
Um pouco mais do que as outras respostas, mas uma abordagem bacana.
Recebe entrada
$n
. Em seguida, percorre os índices0..$n.count
, usa oWhere-Object
(|?{...}
) para extrair os índices onde o item anterior ou o próximo na matriz está0
e os alimenta novamente na fatia da matriz$n[...]
. Nós então|sort
esses elementos, e tomamos o maior[-1]
.Exemplos
fonte
q, 38 bytes
fonte
{}
para torná-lo uma função.J, 18 bytes
Explicação
fonte
Perl 6 , 53 bytes
Expandido:
fonte
PHP, 66 bytes
Bem direto. Repete a entrada e, quando um número é
0
, ele define$m
o número mais alto dos 2 números adjacentes e qualquer valor anterior de$m
.Execute assim (
-d
adicionado apenas para estética):fonte
C #
7674 bytesExplicação:
Use zip para associar a matriz a ela mesma, mas ignorando o primeiro valor na 2ª referência, para que o item zero se junte ao item um. Multiplique a vezes b, se o resultado for zero, um deles deve ser zero e gerar a + b. Caso contrário, imprima o número inteiro mínimo possível no idioma. Dada a suposição de que sempre teremos um zero e um diferente de zero, esse valor mínimo nunca será gerado como o máximo.
Uso:
fonte
int[]i) {
. Além disso, conto 75 bytes no seu código atual (74 se você remover o espaço).a?b?i.Min()).Max():a:b
using System.Linq;
, não?System.Linq;
faz parte do novo modelo de classe padrão.using
declaração em sua contagem de bytesR,
4854 bytesLê o vetor da entrada do console e assume o máximo de todos os valores adjacentes a 0.
Edit: Pega NAs produzidos na fronteira, graças rturnbull!
fonte
20 0
, porques[w(s==0)+1]
retornaNA
emax
o tratamento padrão deNA
é devolvê-lo. Você pode corrigir adicionando o argumentona.rm=T
ou refazer o código a ser usadosort
(consulte a outra resposta R postada acima).Raquete 183 bytes
Versão detalhada:
Teste:
Saída:
fonte
C 132 bytes
Saídas usando o código de retorno principal:
Sinto que deveria conseguir salvar alguns bytes salvando uma das chamadas atoi, mas não consegui encontrar uma maneira eficiente. (
,t
maist=
mais,
maist
duas vezes é muito longo). Também isso tecnicamente usa um comportamento indefinido (definindo _ [a] como "1"), mas todo compilador que conheço o permite por padrão.Estratégia: preencha o início e o fim do array com 1 e, em seguida, passe pela seção interna verificando cada vizinho.
fonte
PHP
6964 bytesAlguns bytes ligados e desligados de Jörg Hülsermann e Titus. =
(-5)
Requer register_globals ativado. Uso:
http://localhost/notnull.php?i[]=9&i[]=-5i[]=...
Golfe:
fonte
-d register_globals=1
(ou especifique uma versão em que register_globals está ativado por padrão)json_decode
é uma boa ideia.?id[]=1&id[]=2&id[]=3
e, em seguida,$_GET["id"]
devolve uma matriz. Por esta razão json_decode não faz sentido para mim