Matrices Alternas
Una matriz alterna es una lista de cualquier longitud en la que dos valores (no necesariamente diferentes) se alternan. Es decir, todos los elementos indexados pares son iguales, y todos los elementos indexados impares son iguales.
Su tarea es escribir un programa o función que, cuando se le da una lista de enteros positivos, genera / devuelve truthy
si es alternativo o falsy
no.
Este es el código de golf , por lo que gana el código más corto (en bytes).
Casos de borde:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Otros casos de prueba:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Ejemplo
Aquí hay un ejemplo con el que puede probar su solución, escrito en Python 3 (no golfizado):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Respuestas:
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
2
a otros números inmediatamente generaliza el desafío!Ɲ
no existía cuando se publicó el desafío.brainfuck, 34 bytes
Toma la matriz como valores de byte en una cadena y emite
\x00
falso y\x01
verdadero.Pruébalo en línea.
Esto mantiene la estructura.
a b 1 c
en la cinta, donde
c
está el carácter actual,b
es el carácter anterior ya
es el carácter anterior anterior, siempre que la matriz esté alternando. Si se encuentra una falta de coincidencia, el puntero se mueve hacia la izquierda de tal manera quea
,b
y la1
bandera se convierte en cero, y esta situación continuará hasta que se consuma toda la entrada.fuente
R,
2423 bytesLee un vector en STDIN, toma los dos primeros elementos de ese vector y verifica la igualdad. Si las longitudes de
a[1:2]
y a no coinciden, R se repetiráa[1:2]
para coincidir con la longitud de a. Dará una advertencia sobre hacerlo, pero funcionará.Sorprendentemente, esto incluso funciona para entradas vacías, no estoy seguro de por qué, pero lo rodaré.
Guardado 1 byte gracias a @MickyT
fuente
all((a=scan())==a[1:2])
MATL ,
76 bytesPara matrices alternas esto genera una matriz de unidades no vacía, lo cual es cierto. Para matrices no alternas, la matriz contiene al menos un cero y, por lo tanto, es falsa (ver aquí ).
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Tomemos
[1 2 1 2]
como ejemplo la entrada.fuente
JavaScript (ES6), 27 bytes
Casos de prueba
Mostrar fragmento de código
fuente
Retina , 25 bytes
Pruébalo en línea!
En lugar de hacer coincidir una entrada con valores alternos (lo que lleva a algunos efectos de borde molestos en una expresión regular), estoy haciendo coincidir las entradas que no son válidas y luego niego el resultado después.
El beneficio de hacer coincidir una entrada no válida es que esta es una propiedad que se puede verificar localmente, y no necesita tratar especialmente la entrada vacía o corta: cualquier entrada es inválida si contiene dos valores distintos que están separados por una posición.
Entonces, la primera etapa cuenta el número de coincidencias de las
\b(\d+),\d+,(?!\1\b)
cuales coincide y captura un valor, luego coincide con el siguiente valor y luego afirma que el tercer valor en secuencia es diferente. Esto da cero para entradas válidas y algo positivo para valores no válidos.La segunda etapa simplemente cuenta el número de coincidencias de
^0
que es1
si la primera etapa volvió0
y1
lo contrario.fuente
Mathematica, 29 bytes
Un puerto del algoritmo MATL de Luis Mendo. Función sin nombre que toma una lista de números (o incluso objetos más generales) y devuelve
True
oFalse
. Comprueba si las sumas de elementos consecutivos son todas iguales. LamentablementeMost
yRest
ahogarse en la lista vacía, por lo que debe probarse por separado.Mathematica, 33 bytes
Función sin nombre que toma una lista de números (o incluso objetos más generales) y devuelve
True
oFalse
. La funciónDifferences[#,1,2]
toma las diferencias, no de pares consecutivos de enteros, sino de pares de enteros a una distancia de dos. Luego, solo verificamos si la lista resultante no tiene más que ceros.Como beneficio adicional, para un byte más (cambie el
2
a#2
), obtenemos una función que ingresa una lista de enteros y otro entero positivo#2
, y verifica si la lista de entrada es el resultado de entrelazar#2
secuencias constantes periódicamente entre sí. Por ejemplo,evalúa a
True
.fuente
Haskell,
2726 bytesEsto se evalúa como una función anónima que resuelve el desafío. La idea es eliminar los dos primeros números de la lista, comprimir con la lista original usando igualdad y verificar que el resultado solo contenga
True
s. Pruébalo en línea!Gracias a nimi por 1 byte!
fuente
and.(zipWith(==)=<<drop 2)
Guarda un byte.retina ,
393228 bytesPruébalo en línea!
¡Guardado 7 bytes gracias a Martin ! ¡Salvé otros 3 gracias a Kobi ! Y a Kritixi por una idea para otro 1.
Opcionalmente, hacemos coincidir un número que ocupa la entrada completa, cualquier par de números, o cualquier par de números, seguido del mismo par cualquier número de veces y, opcionalmente, no incluye el segundo número al final. Podría guardar 2 bytes si la entrada fuera unaria.
fuente
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
alternativa de 29 bytes. Esto no coincide,1,,1
.Pyth, 9 bytes
Explicación
fuente
Q
s al código. Los agregué en la explicación para aclarar lo que estaba sucediendo, pero en realidad no están en el código.Brachylog , 15 bytes
Pruébalo en línea!
Explicación
fuente
APL, 7 bytes
Explicación:
2⍴⊢
: reforma la matriz de entrada en 2⍴⍴
: da nueva forma al resultado por el tamaño original de la entrada, repitiendo elementos⊢≡
: ver si el resultado de eso es igual a la entrada originalCasos de prueba:
fuente
Java 8, 63 bytes
Esta es una expresión lambda para un
Predicate< int[ ] >
Explicación: inicialice el resultado a 0. Para cada elemento, Biteise O el resultado con la diferencia entre el elemento actual y el elemento 2 indica anteriormente. devolver
true
si el resultado es igual a 0. De lo contrario, devolverfalse
fuente
Perl 6 ,
49 4342 bytesIntentalo
Intentalo
Intentalo
Expandido:
fuente
$_[1]
puede ser un byte más corto como.[1]
. El cuerpo del lambda interno puede ser un byte más corto como{.[0]!=a||.[1]!=b}
..[1]
. Tampoco!=
parece funcionar si no es seguido por un espacio. Creo que$_!=3
se está analizando algo así como si estuviera escrito como!( $_ = 3 )
Python 2 , 35 bytes
Pruébalo en línea!
fuente
J, 8 bytes
Explicación
Casos de prueba
fuente
{.
Take con$
Shape.Haskell ,
3332 bytesPruébalo en línea! o Verificar los casos de prueba. -1 byte gracias a Zgarb.
fuente
[]
, pero por alguna razón ghc no puede inferir el tipo correcto para[]
. Funciona si se prueba junto con el otro caso de prueba, consulte Verificar las cajas de prueba.f(a:x@(_:b:_))=a==b&&f x
bash,
565438 bytesGuarde esto como una secuencia de comandos y pase la lista de números como argumentos (para una lista de n elementos, pasará n argumentos). La salida es el código de salida: 0 (para verdadero) si la lista está alternando, y 1 (para falso) de lo contrario.
(La devolución de salida en el código de salida está permitida en los métodos de E / S estándar PPCG).
Esto funciona de forma recursiva:
fuente
Python 2.7, 38 bytes
Casos de prueba:
fuente
Pyke, 6 bytes, sin competencia
Pruébalo aquí!
Permitir que el nodo de remodelación tome una lista y una cadena
fuente
Shenzen IO (ensamblador),
8376 bytes, sin competenciaShenzen io es un juego de rompecabezas donde puedes codificar tu código en un lenguaje ensamblador especial.
Desafortunadamente, solo puede usar enteros entre -999 y 999 como entradas o salidas, y no hay forma de saber si una matriz ha terminado. Así que supuse que la matriz se escribió en una ROM que se envuelve después de leer la última celda. Esto significa que solo se pueden usar matrices, lo cual es la razón por la que no es compatible.
Código:
Explicación:
Lo siento si algo de esto es confuso, esta es mi primera respuesta de código de golf.
EDITAR: eliminó 7 bytes reemplazando bucles por código de ejecución única
fuente
Ruby, 23 bytes
fuente
Rubí,
131119 bytesLambda
a
espera una matrizx
y devuelve verdadero si hay 0 o 1 valores únicos para los elementos indexados impares y 0 o 1 valores únicos para los elementos indexados pares en la matriz.Byte-safers notables
def
!arr[1]
vs.arr.length < 2
&
vs&&
Casos de prueba
fuente
Dart, 46 bytes
Corre con:
fuente
C #, 54 bytes
Filtrar matriz para mostrar valores que no coinciden con el primer valor para pares y el segundo valor para probabilidades. Si no hay ningún resultado, devuelve verdadero.
fuente
Japt,
76 bytesPruébalo o ejecuta todos los casos de prueba
fuente
C #, 66 bytes
Función anónima que recibe una matriz entera y devuelve 1 si la matriz es alterna y 0 en caso contrario.
Programa completo con función no protegida y casos de prueba:
fuente
Octava, 51 bytes
La entrada es un conjunto de celdas de enteros positivos.
Pruébalo en línea!
fuente
Clojure, 70 bytes
Comprueba que el recuento distintivo de cada segundo elemento es 1, y maneja colecciones vacías como un caso especial. También probé muchos enfoques basados en
reduce
ygroup-by
no mucha suerte allí.fuente
Otra opción con R: 36 bytes.
Y creo que he encontrado una versión mucho más corta: 15 bytes
fuente