Su tarea hoy es escribir un programa o función que tome una matriz de enteros y cuente la cantidad de veces, leyéndola de izquierda a derecha, que el valor cambia. Esto es más fácil de mostrar con un ejemplo:[1 1 1 2 2 5 5 5 5 17 3] => [1 1 1 **2** 2 **5** 5 5 5 **17** **3**] => 4
Caso de prueba:
Input | Output
[] | 0
[0] | 0
[0 1] | 1
[0 0] | 0
[1 2 3 17] | 3
[1 1 1 2 2 3] | 2
[-3 3 3 -3 0] | 3
Este es el código de golf , ¡la menor cantidad de bytes gana!
False
se imprime en su lugar?2+False
y errores, no está bien, pero si lo consigo2
, está bien.0
aceptable?Respuestas:
MATL , 2 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Python 3 , 38 bytes
Pruébalo en línea!
fuente
maximum recursion depth exceeded
.y>()
se evaluará como False , para que el siguiente códigoand
no se ejecute.Haskell , 33 bytes
Pruébalo en línea!
Bonus: versión aritmética sin puntos algo curiosa (44 bytes)
Pruébalo en línea!
Dada una entrada
[1,1,4,3,3,3]
, primero tomamos la diferencia de entradas adyacentes ([0,3,-1,0,0]
), entonces elabs
valor oluta:[0,3,1,0,0]
. Tomar cero a la potencia de cada elemento la primera vez produce[1,0,0,1,1]
, y una segunda vez invierte la lista:[0,1,1,0,0]
((1-)
también funcionaría aquí en lugar de(0^)
). Finalmente tomamos elsum
de la lista para obtener2
.fuente
Python 2 , 42 bytes
Pruébalo en línea!
fuente
Brain-Flak , 50 bytes
Pruébalo en línea!
No produce nada para 0, que en brain-flak es equivalente. Si esto no es aceptable, entonces agregue esto para
+4
bytes:({})
Explicación:
fuente
-0+1 = 1
Brain-Flak , 50 bytes
Pruébalo en línea!
fuente
Haskell , 35 bytes
-8 bytes gracias a H.PWiz.
Fuera de golf por una versión recursiva . Haskell es prácticamente el mejor en recursión y me lo perdí. > _ <
Pruébalo en línea!
Sería increíble si alguien descubriera cómo emplear este consejo .
Solución alternativa, 36 bytes.
Pruébalo en línea!
fuente
uncurry
la funciónf
para que funcione. Estesum.map fromEnum.(zipWith(/=)=<<tail)
es probablemente el más cercano que se obtiene, pero no funcionará con[]
y es de 37 bytes ..Java (OpenJDK 8) , 65 bytes
No es tan corto como me gustaría, pero eso es solo Java para ti.
Pruebe pasando la matriz como una lista delimitada por comas.
Pruébalo en línea!
fuente
a->{int s=0,p=a[0];for(int n:a)s+=p==(p=n)?0:1;return s;}
(57 bytes).a->{int s=0;for(int i:a)s+=a[0]!=(a[0]=i)?1:0;return s;}
Casco , 3 bytes
Pruébalo en línea!
Explicación
fuente
Ohm v2 , 3 bytes
Pruébalo en línea!
Explicación
fuente
sign
construcción!Wolfram Language (Mathematica) , 23
242629bytesPruébalo en línea!
Split[]
.una pequeña explicación
Split
dividirá una matriz en una lista de listas (de los mismos elementos), es decir, se convertirá{1, 2, 2, 3, 1, 1}
en{{1}, {2, 2}, {3}, {1, 1}}
. Entonces,Length@Split@#
es la cantidad de segmentos consecutivos.Max[*****-1, 0]
se utiliza para lidiar con la{}
entrada.fuente
Max[Length@Split@#-1,0]&
Length@Split@#~Max~1-1&
Retina ,
242116 bytesGracias a @MartinEnder por -3 bytes y notando un error
-1 byte gracias a @tsh
-4 bytes gracias a @Leo
Pruébalo en línea!
fuente
Simbólicos Python ,
120117 bytesGolfó 3 bytes al eliminar una conversión explícita a entero (usando unario
+
) para la variable de contador; esto significa que si no hay cambios en la matriz, la salida será enFalse
lugar de0
, pero esto está permitido por meta .Pruébalo en línea!
fuente
Jalea , 3 bytes
Pruébalo en línea!
Cómo funciona
fuente
K (oK) , 8 bytes
Solución:
Pruébalo en línea!
Ejemplos:
Explicación:
Interpretado de derecha a izquierda:
fuente
05AB1E , 3 bytes
Pruébalo en línea!
fuente
Casco , 4 bytes
Pruébalo en línea!
fuente
R , 24 bytes
Pruébalo en línea!
Igual que la respuesta MATL, solo se usa
sum(!!diff))
porque no haynnz
.fuente
rle
sería más corto, pero no,length(rle()$v)
usa demasiados caracteres y está apagado por uno.sum(rle()$v|1)
lugar delength
todos modos. :)Cubix , 24 bytes
Pruébalo en línea
Tenga en cuenta que Cubix usa 0 para indicar que no hay más entradas, por lo que 0 no puede estar en la lista.
Explicación
Desplegado:
Comenzamos en el
0
, empujando el contador (inicializado con0
) y la primera entrada (I
) en la pila.Luego entramos en el bucle. En cada iteración del ciclo, obtenemos la siguiente entrada con
I
. Si es 0, nos hemos quedado sin entradas, por lo que rotamos el contador hacia arriba (p
),O
utput y exit (@
).De lo contrario, tomamos la diferencia de los dos elementos superiores. Si no es cero, giramos el contador hacia arriba, lo incrementamos y lo volvemos a la parte inferior con
p)q
. Luego resaltamos la diferencia;
antes de pasar a la siguiente iteración.Todos los caracteres no mencionados aquí son solo control de flujo. Suelen existir muchos de esos en los programas Cubix.
fuente
0
por a(
, pero eso falla en la entrada vacía.Brain-Flak , 50 bytes
Pruébalo en línea!
Como todos están publicando sus soluciones de 50 bytes, aquí es mía (tengo una de 48 bytes, pero fue una simple modificación de DjMcMayhem, así que sentí que valía la pena publicarla)
Explicación
Esta respuesta utiliza ampliamente la cancelación de valor.
Sin golf parece
Aquí calculamos los deltas hasta que a la pila le quede un elemento, cada vez que acumulamos un valor del bucle interno si el delta no es cero.
Esta es una forma bastante directa de hacerlo.
Para hacer esto golfístico, comenzamos a cancelar el valor. El primero y el que debería ser obvio para cualquier golfista con ataques cerebrales es la altura de la pila. Es un hecho bien conocido que
es lo mismo que
Cuando los valores son modificados por uno, se mantiene lo mismo. Esto nos da
Puede notar que esto ni siquiera nos ahorró bytes, pero no se preocupe, será más útil a medida que avancemos.
Podemos realizar otra reducción, si ve una declaración
en realidad puedes reducirlo a
Esto funciona porque si ingresamos al ciclo
[(...)]
y{}
cancelaremos, y si no lo hacemos, el valor de[(...)]
ya era cero en primer lugar y no necesita ser cancelado. Como tenemos una aparición de este patrón en nuestro código, podemos reducirlo.Eso nos ahorró 2 bytes pero también puso dos negs uno al lado del otro. Estos se pueden combinar para salvarnos otros 2.
Y ese es nuestro código.
fuente
Perl 6 , 18 bytes
Pruébalo
Expandido:
fuente
Gaia , 2 bytes
Pruébalo en línea!
Esto abusa de un error (o función) de Gaia, que la codificación de longitud de ejecución no tiene en cuenta la última ejecución de elementos. Tenga en cuenta que lo he verificado dos veces, funciona para todos los casos de prueba.
ė
- Ejecute la codificación de longitud (con la falla descrita anteriormente).l
- Longitud.fuente
JavaScript (ES6), 35 bytes
fuente
f=([a,...b])=>1/a?!!(a-b[0])+f(b):0
Pyth, 5 bytes
Banco de pruebas.
Explicación:
fuente
APL (Dyalog) , 8 bytes
Pruébalo en línea!
¿Cómo?
⊃,⊢
- la lista, con el primer valor repetido para el caso de un solo elemento2≠/
- lista de cambios, no igual por cada 2 elementos+/
sumafuente
Perl 5 , 37 + 2 (
-ap
) = 39 bytesPruébalo en línea!
fuente
J, 10 bytes
Infijos de longitud 2 ... ¿son desiguales?
2 ~:/\ ]
Resumiendo la lista resultante de
0
s y1
s:+/
Pruébalo en línea!
fuente
[:+/0=-/\
Debería funcionar para creo 9 bytes.Ruby , 31 bytes
Pruébalo en línea!
fuente
.drop(1)
que puedas hacerlo[1..-1]
drop
devuelve un enumerador , no una matriz, por lo que no funciona.size
matriz de todos modos?C (gcc 5.4.0), 61 bytes
Pruébalo en línea!
f
es una función que toma la longitud de la matriz y un puntero al primer elemento de la matriz y devuelve el número de cambios en la matriz;Este envío utiliza un comportamiento indefinido (
*p++!=*p
, p se usa dos veces en una expresión en la que se cambia), que funciona en mi máquina (gcc 5.4.0) y en TIO, pero puede no funcionar en otras implementaciones o versiones.Explicación:
fuente
05AB1E , 3 bytes
Pruébalo en línea!
Una alternativa a la respuesta de Erik.
fuente