Todos sabemos que muchos ejercicios solo afectan a la mitad de su cuerpo, por lo que debe hacerlos dos veces, una para cada lado. Dichos ejercicios tienen dos contrapartes, uno para el lado izquierdo y otro para el derecho. Sin embargo, no es necesario ejecutar las dos contrapartes consecutivamente, siempre y cuando los ejercicios para ambos lados estén en el mismo orden. También puede cambiar de lado en su programa de ejercicios, pero no tendría sentido comenzar algunos ejercicios con un lado y otros con el otro.
Desafío
Una parte del ejercicio es una lista de enteros distintos de cero, donde su segunda mitad consiste en los enteros de la primera mitad negados y en el mismo orden, y los signos de los enteros en cada mitad son iguales. El signo de la primera mitad de una parte del ejercicio es su lado principal .
Un conjunto de ejercicios es cero o más partes de ejercicio con el mismo lado principal concatenados juntos.
Dada una lista de enteros distintos de cero como entrada, determine si se trata de un conjunto de ejercicios. Los enteros no son necesariamente únicos. La longitud de la lista no es necesariamente pareja.
Es posible que su solución no use ninguna de las lagunas estándar . Puede usar dos valores consistentes diferentes para la salida. Este es el código de golf , por lo que gana la solución más corta.
Ejemplos
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
es un ejemplo de una parte de ejercicio. La primera mitad es [-5, -1, -7, -6, -5]
, y la última mitad es [5, 1, 7, 6, 5]
, que es cada número entero en la primera mitad negada. Además, los enteros de la primera mitad son todos del mismo signo. El lado principal de esta parte del ejercicio es -1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
es un ejemplo de un conjunto de ejercicios. Sus partes de ejercicio individuales son [3, 6, 5, -3, -6, -5]
y [1, 6, 4, 3, -1, -6, -4, -3]
, y ambas tienen un lado principal 1
.
[4, -4, -5, 5]
, a pesar de que solo consta de partes de ejercicio válidas, no es un conjunto de ejercicios, ya que la primera parte [4, -4]
tiene un lado principal 1
, mientras que la segunda parte [-5, 5]
tiene un lado principal -1
.
Casos de prueba
Casos de prueba 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 prueba 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]
fuente
Respuestas:
Python 2 ,
6967 bytesPruébalo en línea!
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
Java 8,
186183185 bytes+2 bytes debido a una corrección de errores para casos de prueba de tamaño 3 (casi todas las permutaciones de
1
y-1
al final de mi enlace TIO).Definitivamente se puede jugar al golf. El desafío parece ir al grano, pero es bastante difícil de implementar. Especialmente el caso de prueba
[4,-4,-5,5]
fue molesto de arreglar ... Pero funciona ahora. Lo jugará golf desde aquí.Pruébalo en línea.
Explicación:
fuente
R , 91 bytes
Introduce un vector de números separados por espacios en blanco. Salidas
FALSE
válidas yTRUE
no válidas.rle
da la codificación de longitud de ejecución, en este caso de la secuencia de valores positivos y negativos.El caso de borde vacío completamente y totalmente injusto;) agrega la friolera de 15 bytes.
Muchos bytes recortados por @Giuseppe.
Aquí hay una versión de 92 bytes expresada como una función que es mejor para probar:
Pruébalo en línea!
fuente
JavaScript (ES6), 54 bytes
Versión optimizada, inspirada en la respuesta Python de Dennis .
Devuelve 0 o 1 .
Pruébalo en línea!
Versión original, 74 bytes.
Pruébalo en línea!
¿Cómo?
Almacenamos las primeras mitades de todas las partes de ejercicio en b [0] y la segunda mitades en b [1] , el cambio entre b [0] y b [1] cada vez que la señal está cambiando. Las entradas son cuadradas para deshacerse del signo. Prefijamos cada entrada con una coma y sufijo cada parte con un 0 .
Hay cierta lógica adicional para manejar el caso de borde de 'entrada vacía' básicamente sin costo (vea el comentario cerca del final del código fuente).
fuente
Python 2 ,
147130113112106 bytesPruébalo en línea!
Salvado:
fuente
lambda n:cmp(n,0)
puede llegar a ser0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
puede llegar a serl[:-1:2]==l[1::2]
.Retina 0.8.2 , 57 bytes
Pruébalo en línea! Toma una entrada separada por comas, pero el enlace incluye un encabezado que procesa los casos de prueba. Explicación:
Inserte un marcador antes de cada entero positivo.
Cambie las comas entre enteros del mismo signo a guiones bajos.
Eliminar los signos restantes.
Agregue una coma si la entrada no está vacía.
Compruebe que la cadena consta de pares de corridas de los mismos enteros.
fuente
Python 2 , 111 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 155 bytes
Pruébalo en línea!
La inspiración fue la respuesta de @ KevinCruijssen
También gracias a él por corregir 2 casos de prueba míos
fuente
r=0<i
ar=i%2
, ya que los casos de prueba[1,-1,1]
y[-1,1,-1]
están fallando en este momento. Sin embargo, el recuento de bytes sigue siendo el mismo para JS.Stax , 13 bytes
Ejecutar y depurarlo
fuente
Brachylog ,
1814 bytesPruébalo en línea!
Guardado 4 bytes gracias a @ErikTheOutgolfer.
Explicación
fuente
APL (Dyalog Classic) , 48 bytes
Pruébalo en línea!
fuente