La idea de esto es principalmente de BIO 2017 q1 . Se me ocurrió la idea de publicar este desafío desde mi desafío de Secuencias binarias , ya que a mucha gente parecía gustarle.
Además, este es el primer desafío que publico sin publicar en el sandbox. Lo eliminaré si a nadie le gusta.
Reglas
Tomar en una secuencia de dígitos en ternario (base 3); Esto podría ser como una cadena, una matriz o el valor numérico junto con el número de ceros anteriores.
Para cada fila del triángulo, se genera una fila debajo hasta que solo haya un dígito en la última fila. Para encontrar un dígito debajo de otros dos dígitos, el dígito será el mismo que dos arriba si estos otros dos dígitos arriba son iguales. De lo contrario, será el dígito que no sea igual a ninguno de ellos. Aquí hay un ejemplo:
0 0 1 2 0 1 2 2
0 2 0 1 2 0 2
1 1 2 0 1 1
1 0 1 2 1
2 2 0 0
2 1 0
0 2
1
Solo se espera que devuelva la última fila.
Haz tu código corto.
Casos de prueba
0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0
3&(|2+/\-)~<:@#
3|((2<.#)-@+/\])^:_
, el tuyo es realmente agradable.Lote, 122 bytes
Utiliza expansión binomial. Como señala @MartinEnder, la suma tiene que ser negada (módulo 3) si el número de valores (que se cuentan en el primer bucle) es par, por lo que
n
se establece en uno1
o en2
consecuencia. El segundo ciclo luego calcula la suma a través de los coeficientes binomiales.fuente
APL (Dyalog) , 17 bytes
Pruébalo en línea!
¿Cómo?
2+/⍵
- suma cada dos elementos adyacentes3-
- restar vectorizado de tres3|
- módulo vectorizado por tres⍣
- repetir hasta...1=≢⍺
- solo queda un artículofuente
APL + WIN,
3028 bytes2 bytes guardados por cortesía de Uriel.
Explicación:
Esta es una forma de escribir código de bucle en APL en una sola línea.
fuente
3|
Javascript (ES6), 58 bytes
fuente