Dada uma lista de números inteiros positivos, determine se existe um elemento que é maior que seus dois vizinhos ou menor que seus dois vizinhos (um "bump"). Para ficar claro, um solavanco nunca pode ser o primeiro ou o último item da lista, porque eles têm apenas um vizinho.
Seu programa deve gerar um dos dois valores consistentes, cada um correspondente a uma lista sem bumps ou a uma lista com bumps. Quais são os valores não são importantes, você pode escolhê-los.
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
[] -> False
[1] -> False
[1,2] -> False
[1,2,1] -> True
[1,2,2] -> False
[1,2,3] -> False
[1,2,2,1] -> False
[1,2,2,3] -> False
[1,2,1,2] -> True
[1,3,2] -> True
[3,1,2] -> True
[2,2,2] -> False
code-golf
number
array-manipulation
decision-problem
Assistente de Trigo
fonte
fonte
[1,3,3]
(garante que as respostas utilizando o algoritmo de Dennis levam o sinal dos incrementos em vez de apenas usando-se os incrementos)[1,2,2]
? Ou eu estou esquecendo de alguma coisa?[1,2,2]
são os mesmos que os sinais desses deltas, mas esse não é o caso[1,3,3]
.Respostas:
Geléia , 5 bytes
Retorna 0 se houver um aumento, 1 se não houver.
Experimente online!
Como funciona
fonte
JavaScript (ES6), 38 bytes
Retorna um booleano.
Casos de teste
Mostrar snippet de código
Quão?
Usamos a para armazenar o valor anterior de n . Definimos x como 1 se a <n , -1 se a> n ou 0 se a = n . E testar se old_x * x <0 , o que só é possível se ( old_x = 1 e x = -1 ) ou ( old_x = -1 e x = 1 ).
Como x é inicializado para a função de retorno de chamada anônima de some () , ele é coagido ao NaN durante a primeira iteração, o que torna o teste falso.
fonte
Haskell , 42 bytes
Experimente online!
Explicação
Primeiro, temos a função
f
que pega uma função binária e uma lista e aplica a função binária a todos os pares adjacentes da lista.Então nossa função principal se aplica
f(-)
à lista de entradas. Isso calcula a lista de diferenças. Em seguida, aplicamosf(*)
à lista para multiplicar todos os pares adjacentes. Por fim, perguntamos se algum par é menor que zero.Um número na lista final só pode ser negativo se for o produto de um número negativo e positivo da lista de diferenças. Portanto, para produzir uma entrada negativa (e depois retornar true), a lista original deve mudar de crescente para decrescente ou vice-versa, ou seja, deve ter um bump.
fonte
Python 2 , 43 bytes
Retorna True se houver um erro, erros se não houver. ( permitido por padrão )
Experimente online!
fonte
Oitava com Pacote de Imagens,
3432 bytes2 bytes salvos graças a @StewieGriffin !
Experimente online!
Explicação
Calcula diferenças consecutivas, organiza-as em blocos deslizantes de comprimento 2, obtém o produto de cada bloco e testa se esse produto é negativo.
fonte
0||prod(...)
economiza 2 bytes. Você também pode pular toda aany
peça e usar a definição padrão de verdade / falsidade para salvar 5 bytes .any
. Obrigado pela0||
ideia!R, 48 bytes
Experimente online!
Como funciona passo a passo usando c (1,4,1,4) como exemplo:
Como bônus, aqui está uma solução de tamanho e conceito semelhante usando o pacote
zoo
:fonte
embed
existe. É muito ruim querowProds
ecolProds
não existe como aliases em R.rowSums
erowMeans
....colSums
remodelará a entrada em uma matriz com base em entradas adicionais que provavelmente têm um aplicativo de golfe em algum lugar .... agora só preciso encontrar uma!matrixStats
pacote.function(x)any(matrixStats::colProds(embed(diff(x),2)))<0
. Mas, para algo que não seja código de golfe, este pacote é realmente um tesouro.Haskell , 33 bytes
Experimente online!
True
se houver um solavanco, erros se não houver.fonte
l`zip3`tail l$drop 2l
é apenas um cabelo mais curto. Gostaria de saber se a correspondência de padrões é de alguma forma ainda mais curta?Perl 6 , 39 bytes
Experimente online!
$_
é o argumento da lista para essa função anônima..[1..*]
é a mesma lista, mas com o primeiro elemento descartado.Zcmp
fecha as duas listas junto com ocmp
operador, resultando em uma lista deOrder
valores. Por exemplo, para uma lista de entrada,1, 2, 2, 2, 1
isso resultaria na listaMore, Same, Same, Less
.Agora só precisamos saber se essa lista contém dois elementos adjacentes
More, Less
ouLess, More
. O truque que usei é converter a lista em uma string delimitada por espaço~
e testar se ela contém substringre L
ous M
. (O primeiro não pode ser apenase L
porqueSame
também termina com um "e".)O operador de correspondência inteligente retorna um
Match
objeto (se a correspondência for bem-sucedida) ouNil
(se não foi o caso); portanto,so
converte o que quer que seja em um valor booleano.fonte
Wolfram Language (Mathematica) , 40 bytes
Experimente online!
fonte
Rubi ,
5546 bytesExperimente online!
Um lambda aceitando uma matriz e retornando booleano.
-9 bytes: Substitua
(x<y&&y>z)||(x>y&&y<z)
por(y-x)*(y-z)>0
(graças ao GolfWolf )fonte
|
vez de||
, economizando 1 byte.PostgreSQL 173 bytes
fonte
Java 8,
10810410186847972 bytes-2 bytes graças a @ OlivierGrégoire .
-13 bytes graças a @Nevay .
Experimente online.
fonte
-1
.a->{int i=a.length;for(;i-->2;)i|=(a[i]-a[--i])*(a[i]-a[i-1])>>-1;return-~i|3;}
(retorna-1
para casos3
verdadeiros , para casos de falsey) - ou, se estiver usando a presença / ausência de uma exceção como valor de retorno 55 bytes:a->{for(int i=0;++i>0;)i|=(a[i-1]-a[i])*(a[i]-a[i+1]);}
a->{int i=a.length,p=0;for(;i-->1;)i|=p*(p=a[i]-a[i-1])>>-1;return-i>1;}
R ,
5856 bytesExperimente online!
Economizou 2 bytes graças a Giuseppe
fonte
{}
por -2 bytes.c()
éNULL
que não é o mesmo que o vetor vazio de números inteiros,integer(0)
enquanto no MATLAB[]
é umdouble
por padrão, mas se você deseja mantê-lo dessa maneira, isso é perfeitamente razoável.J ,
1615 bytes-1 byte graças a FrownyFrog
Experimente online!
Original: 16 bytes
2-/\]
- diferenças de cada item adjacente2*/\
- produtos de cada item adjacente[:<./
- o mínimo0>
- é negativo?Experimente online!
fonte
f=.
bytes de atribuição . Por favor, tenha em mente que eu sou relativamente novo usuário :)1 e.0>2*/\2-/\]
Japt , 11 bytes
-5 bytes graças a @ETHproductions
Experimente online! |Casos de teste
Isso usa o algoritmo de Dennis
fonte
Japonês , 9 bytes
Experimente online!
Um mashup da resposta de Oliver com a abordagem usada por várias outras respostas.
fonte
Anexo , 39 bytes
Experimente online!
Muito feliz com o resultado.
Explicação
Esta é uma composição de quatro funções:
Delta
obtém as diferenças entre os elementos. =Então,
Sign
é aplicada a cada diferença, dando uma série de1
s,0
s, e-1
s. =Então,
Slices&2
fornece todas as fatias de comprimento dois da matriz, fornecendo todos os pares de diferenças.Finalmente,
Any&:&{_*~?Sum[__]}
é equivalente a, para entradax
:Ele procura por elementos que somam zero, mas não são zero. Se qualquer par de elementos existir, haverá um aumento.
fonte
MATL , 8 bytes
Experimente online!
fonte
Casca , 7 bytes
Experimente online!
Explicação
fonte
Oitava , 33 bytes
Experimente online!
Explicação:
fonte
Braquilog , 10 bytes
Experimente online!
Sucede (
true.
) se houver um solavanco e falha (false.
) se não houver um solavanco.Explicação
Isso já é bastante legível:
fonte
05AB1E , 7 bytes
Experimente online!
Explicação
fonte
0‹
que basicamente verifica o número em busca de um sinal negativo?d
usado para verificar se o topo da pilha continha apenas[0-9]
, que é o oposto do que queremos aqui. Mas agora é mais inteligente e negativo / flutuadores também são contados como números.a
visto onegative
sinal e retornado verdadeiro ou algo assim ... Mas acho que você está certo, estou lembrando do seud
truque.Braquilog , 10 bytes
Experimente online!
Não é tão elegante e elegante quanto a resposta de 10 bytes existente do @ Fatalize, mas funciona!
fonte
Casca , 9 bytes
Experimente online!
Usa o algoritmo de Dennis.
fonte
Perl 5 , 54 + 2 (
-pa
) = 56 bytesExperimente online!
fonte
Python 2 , 60 bytes
Experimente online!
Praticamente a mesma coisa, mas pensei que seria mais curto ...
Python 2 , 63 bytes
Experimente online!
fonte
Pyt ,
117 bytesSaídas 1 se houver um aumento, 0 caso contrário
Experimente online!
Resposta do Haskell do Assistente do Porto de Trigo
Maneira antiga (11 bytes):
Experimente online!
Retorna False se houver um aumento, True caso contrário
Resposta da geléia do Porto de Dennis
fonte
Wolfram Language (Mathematica) ,
3736 bytesFornece o oposto das respostas do caso de teste (Falso e Verdadeiro invertidos). Anexar um
!
para mudar para o formato normal.OU
Saída também invertida, então substitua
FreeQ
porMatchQ
para a forma normal.Explicação: Pegue o sinal das diferenças da sequência. Se a sequência resultante inclui {1, -1} ou {-1,1}, há um aumento. O valor absoluto das diferenças de {1, -1} ou {-1,1} é 2 em ambos os casos.
Raspe outro byte ao quadrado da lista final em vez de pegar o valor absoluto:
Experimente online!
fonte
Perl, 35 bytes
Inclui
+3
para-p
bump.pl
:Correr como:
fonte
Julia 0.6 ,
5756 bytesBasicamente, apenas a resposta python totalmente humana. -1 byte do usuário71546
Experimente online!
Julia 0.6 , 39 bytes
Estilo de recursão Lispy, também conhecido como resposta python de Dennis. Retorna
true
quando existe um bump; caso contrário, gera um erro. Talvez deva ter 42 bytes, já que você precisa dividi-lo ao chamar. Por exemplo, paraa=[1,2,1]
você ligar comof(a...)
.f(a)=f(a...)
removeria essa necessidade, mas é mais longa. Preciso melhorar uma recursão e não gosto muito de escrever código que gera um erro.Experimente online!
fonte
for
não é necessário;)