Desafio
Em uma lista, determine se o agrupamento da lista em execuções de elementos crescentes e decrescentes resultará em uma lista de listas de tamanhos iguais.
Em outras palavras, os "pontos de virada" da lista são espaçados uniformemente.
Exemplo
Aqui está um exemplo: 0, 3, 7, 5, 2, 3, 6
0, 3, 7
aumenta, 7, 5, 2
diminui e 2, 3, 6
aumenta. Portanto, isso é verdade.
Outro exemplo: 1, 4, 6, 8, 5, 3, 5, 7, 9
1, 4, 6, 8
aumenta, 8, 5, 3
diminui e 3, 5, 7, 9
aumenta. Portanto, isso é falso.
Regras e especificações
- Nenhum elemento adjacente será igual
- Todos os números podem estar dentro do intervalo razoável de números do seu idioma
- Você pode assumir que todos os números são números inteiros, se isso o ajudar a enviar seu envio
- Isso é código-golfe , então a resposta mais curta ganha
- Entrada como uma lista em qualquer representação razoável e saída como qualquer valor de verdade / falsidade. Os dois valores devem ser consistentes.
Casos de teste
Input -> Output
1, 3, 5, 8, 6, 4, 2, 3, 5, 7, 6, 4, 2, 5, 7, 9, 6, 4, 2 -> True
1, 3, 5, 7, 6, 4, 5, 7, 9, 8, 6, 4, 2, 3, 5 -> False
2, 3, 6, 4, 2, 3, 7, 5, 3, 4, 6 -> True
3, 6, 4, 8, 5, 7, 3, 5, 2 -> True
8 -> True
1, 3, 5, 7 -> True
4, 5, 7, 6, 8, 9 -> False
6, 4, 2, 3, 5, 4, 2 -> True
8, 5, 3, 2, 4, 6, 5, 3, 2, 5, 7 -> False
Nota : Você não pode presumir que todos os números são de um dígito (a menos que esse seja todo o seu idioma capaz de lidar); os casos de teste refletem isso apenas porque é mais fácil digitar os casos da seguinte maneira: P Aqui estão alguns casos de teste com números fora desse intervalo:
1, 5, 10, 19, 15, 13, 8, 13, 18, 23, 19, 18, 14 -> True
15, 14, 17, 16, 19, 18 -> True
12, 16, 19, 15, 18, 19 -> False
fonte
1, 2, 3, 2
uma entrada válida e, se for considerado verdadeiro ou falso? Nesse exemplo, o próximo valor sendo 1 tornaria verdadeiro, mas 3 tornaria falso.Respostas:
MATL ,
109 bytesExperimente online!
Guardado um byte graças a Luis Mendo!
Explicação:
Suponha que a entrada seja
[0, 3, 7, 5, 2, 3, 6]
::fonte
Gelatina , 6 bytes
Experimente online!
Guardado 1 byte graças a Adnan !
Como funciona
Enquanto jogava golfe, descobri algumas alternativas legais e mais longas:, (em vez disso
IṠŒgL€E
,IṠŒrṪ€E
usa codificação de comprimento de execução).fonte
IṠŒgḂE
deve salvar um byteA
(valor absoluto) substituirḂ
ou existe algum truque que eu não entendoḂ
?Oitava ,
5450 bytesExperimente online!
Explicação
fonte
Wolfram Language (Mathematica) , 38 bytes
Experimente online!
Explicação
fonte
Equal@@(1^Split@Sign@Differences@#)&
é 2 bytes mais curto eEqual@@Im@Split@Sign@Differences@#&
1 byte mais curto que isso.Arg
vez deSign
salvar outro byte.05AB1E ,
87 bytesExperimente online!
-1 graças a Adnan.
fonte
¥0.SγaË
deve salvar um bytea
que não consigo encontrar nos documentos.is_letter(a)
???C (gcc) ,
143140138136135132 bytesr
para armazenar o retorno booleano da função em vez de terminar usandoreturn
.int A[]
paraint*A
(usando um ponteiro em vez de uma matriz).f(int*A,int a)
paraf(A,a)int*A;
.if(d!=...
paraif(d-...
.;j++...j+1
para;...++j
.Experimente online!
Define uma função
f
que examina todos os elementos da lista, exceto o último, e determina a relação desse elemento com o próximo elemento da lista. O número de comparações iguais consecutivas é armazenado na primeira vez em que a relação é invertida, qualquer execução após a execução inicial que diferir no comprimento do comprimento armazenado resulta em uma saída falsa. No final, a relação do penúltimo elemento com o último é analisada para que corresponda ao restante da lista.fonte
f(A,a)int*A;
vez def(int*A,int a)
.Pitão , 11 bytes
Experimente aqui.
fonte
Python 2 ,
10710510397969491 bytesExperimente online!
Python 3 ,
10210097 bytesExperimente online!
fonte
{...}
em vezset(...)
de salvar 3 bytesCasca , 7 bytes
Experimente online!
Como isso funciona
Algumas alternativas fofas:
fonte
JavaScript (ES6), 81 bytes
Isso parece muito longo. Provavelmente estou perdendo alguma coisa aqui ... Retorna um
true
ou outroundefined
.Procura um período 0 <p <a.length de modo que todas as mudanças de direção ocorram a cada p elementos.
Casos de teste
Mostrar snippet de código
fonte
Python 2 , 96 bytes
Experimente online! Saída via código de saída: acidente (1) é falsey, saída limpa (0) é verdade.
Python 2 , 106 bytes
Experimente online!
fonte
(...)[:l]<d
possa ser o inverso de(...)[:l]==d
.Haskell ,
797877 bytesExperimente online!
Dada uma lista
s
,zipWith(<)s$tail s
testa para cada elemento se ele é menor que seu sucessor, por exemplo,s=[2,3,6,4,2,3,7,5,3]
rendimento[True,True,False,False,True,True,False,False]
. Entãogroup
corre dos mesmos elementos em conjunto:[[True,True],[False,False],[True,True],[False,False]]
. Para verificar se todas essas listas têm o mesmo comprimento, substituir seus elementos com1
( veja esta dica ) produzindo[[1,1],[1,1],[1,1],[1,1]]
e verifique se todos os elementos na caudat
da lista igual à cabeçah
:all(==h)t
.Esta abordagem não funciona para listas únicas, mas porque aqueles são sempre verdadeiras, podemos lidar com eles em seu próprio caso:
g[_]=1<3
.fonte
R , 57 bytes
Experimente online!
fonte
Japonês , 15 bytes
Experimente online!
Explicação
fonte
R, 36 bytes
diff
calcula as diferenças sucessivas e depoissign
reduz para ± 1.rle
então o comprimento da execução os codifica. Todos os elementos dissorle
devem ser os mesmos, ou seja, o vetor tem desvio padrão zero.!
então produz a saída lógica correta.fonte
Haskell (Lambdabot), 59 bytes
Com base na resposta de @ Laikoni
fonte
g_=1<3
.Java (OpenJDK 8) ,
437302256188 bytesExperimente online!
fonte
Clojure, 70 bytes
Retorna
1
como verdade enil
(AKA nulo) como falso.fonte
Java (OpenJDK 8) , 135 bytes
Experimente online!
Explicações
fonte
Python 2 ,
11099 bytes-11 bytes graças a @Lynn
Experimente online!
fonte
exec"d=map(cmp,d[:-1],d[1:]);"*2
Ruby , 57 bytes
Experimente online!
fonte