Todos sabemos que muitos exercícios afetam apenas metade do seu corpo, então você deve executá-los duas vezes, uma de cada lado. Tais exercícios têm duas contrapartes, uma para o lado esquerdo e outra para a direita. No entanto, não há necessidade de executar as duas contrapartes consecutivamente, desde que os exercícios para os dois lados estejam na mesma ordem. Você também pode alternar entre os lados do seu programa de exercícios, mas não faria sentido começar alguns exercícios com um lado e outros com o outro.
Desafio
Uma parte do exercício é uma lista de números inteiros diferentes de zero, em que sua segunda metade consiste nos números inteiros da primeira metade negados e na mesma ordem, e os sinais dos números inteiros em cada metade são iguais. O sinal da primeira metade de uma parte do exercício é o seu lado principal .
Um conjunto de exercícios é zero ou mais partes do exercício com o mesmo lado principal concatenado juntos.
Dada uma lista de números inteiros diferentes de zero como entrada, determine se é um conjunto de exercícios. Os números inteiros não são necessariamente únicos. O comprimento da lista não é necessariamente uniforme.
Sua solução não pode usar nenhuma das brechas padrão . Você pode usar dois valores consistentes diferentes para a saída. Isso é código-golfe , então a solução mais curta vence.
Exemplos
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
é um exemplo de uma parte do exercício. A primeira metade é [-5, -1, -7, -6, -5]
, e a última metade é [5, 1, 7, 6, 5]
, que é cada número inteiro na primeira metade negado. Além disso, os números inteiros da primeira metade são todos do mesmo sinal. O lado principal desta parte do exercício é -1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
é um exemplo de um conjunto de exercícios. Suas partes individuais do exercício são [3, 6, 5, -3, -6, -5]
e [1, 6, 4, 3, -1, -6, -4, -3]
, e ambos têm o lado principal 1
.
[4, -4, -5, 5]
, apesar de consistir apenas em partes válidas do exercício, não é um conjunto de exercícios, uma vez que a primeira parte [4, -4]
tem lado principal 1
, enquanto a segunda parte [-5, 5]
tem lado principal -1
.
Casos de teste
Casos de teste válidos:
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]
Casos de teste inválidos:
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
fonte
Respostas:
Python 2 ,
6967 bytesExperimente online!
fonte
Gelatina , 10 bytes
Experimente online!
fonte
Java 8,
186183185 bytes+2 bytes devido a uma correção de bug para casos de teste de tamanho 3 (quase todas as permutações
1
e-1
no final do meu link TIO).Definitivamente, você pode jogar golfe .. O desafio parece direto ao ponto, mas é bem difícil de implementar. Especialmente o caso de teste
[4,-4,-5,5]
foi chato de corrigir. Mas funciona agora. Vai jogar golfe daqui a baixo.Experimente online.
Explicação:
fonte
R , 91 bytes
Insere um vetor de números separados por espaço em branco. Saídas
FALSE
válidas eTRUE
inválidas.rle
fornece a codificação do comprimento da execução, neste caso da sequência de valores positivos e negativos.O caso completo e totalmente injusto da borda vazia;) adiciona uns 15 bytes impressionantes.
Muitos bytes eliminados pelo @ Giuseppe.
Aqui está uma versão de 92 bytes, expressa como uma função que é melhor para testar:
Experimente online!
fonte
JavaScript (ES6), 54 bytes
Versão otimizada, inspirada na resposta Python de Dennis .
Retorna 0 ou 1 .
Experimente online!
Versão original, 74 bytes
Experimente online!
Quão?
Nós armazenamos as primeiras metades de todas as partes do exercício em b [0] e as segundas metades em b [1] , alternando entre b [0] e b [1] cada vez que o sinal está mudando. As entradas são quadradas para se livrar do sinal. Prefixamos cada entrada com uma vírgula e sufixamos cada parte com um 0 .
Existe alguma lógica extra para lidar com o caso de borda de 'entrada vazia' basicamente sem nenhum custo (veja o comentário no final do código-fonte).
fonte
Python 2 ,
147130113112106 bytesExperimente online!
Salvou:
fonte
lambda n:cmp(n,0)
pode se tornar0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
pode se tornarl[:-1:2]==l[1::2]
.Retina 0.8.2 , 57 bytes
Experimente online! Recebe entrada separada por vírgula, mas o link inclui o cabeçalho que processa casos de teste. Explicação:
Insira um marcador antes de cada número inteiro positivo.
Altere as vírgulas entre números inteiros do mesmo sinal para sublinhados.
Exclua os sinais restantes.
Acrescente uma vírgula se a entrada não estiver vazia.
Verifique se a sequência consiste em pares de execuções dos mesmos números inteiros.
fonte
Python 2 , 111 bytes
Experimente online!
fonte
JavaScript (Node.js) , 155 bytes
Experimente online!
Inspiration was @ KevinCruijssen's answer
Também agradeço a ele por corrigir 2 casos de teste meus
fonte
r=0<i
parar=i%2
, desde os casos de teste[1,-1,1]
e[-1,1,-1]
está falhando no momento. A contagem de bytes continua a mesma para JS, no entanto.Stax , 13 bytes
Execute e depure
fonte
Braquilog ,
1814 bytesExperimente online!
Guardado 4 bytes graças a @ErikTheOutgolfer.
Explicação
fonte
APL (Dyalog Classic) , 48 bytes
Experimente online!
fonte