A ideia disso é principalmente da BIO 2017, primeiro trimestre . Tive a ideia de postar esse desafio no meu desafio de Seqüências binárias , pois muitas pessoas pareciam gostar.
Além disso, este é o primeiro desafio que publiquei sem postar na sandbox. Vou excluí-lo se ninguém gostar.
Regras
Pegue uma sequência de dígitos em ternário (base 3); pode ser uma string, uma matriz ou o valor numérico, juntamente com o número de zeros anteriores.
Para cada linha do triângulo, uma linha abaixo é gerada até que haja apenas um dígito na última linha. Para encontrar um dígito abaixo de dois outros dígitos, o dígito será igual a dois acima, se esses dois dígitos acima forem iguais. Caso contrário, será o dígito que não é igual a nenhum deles. Aqui está um exemplo:
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
Você só deve retornar a última linha.
Faça seu código curto.
Casos de teste
0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0
3&(|2+/\-)~<:@#
3|((2<.#)-@+/\])^:_
- o seu é muito bom.Lote, 122 bytes
Usa expansão binomial. Como o @MartinEnder aponta, a soma deve ser negada (módulo 3) se o número de valores (que são contados no primeiro loop) for par, então
n
estiver definido como um1
ou de2
acordo. O segundo loop calcula a soma pelos coeficientes binomiais.fonte
APL (Dyalog) , 17 bytes
Experimente online!
Quão?
2+/⍵
- soma cada dois itens adjacentes3-
- subtrair vetorizado de três3|
- módulo vetorizado por três⍣
- repetir até...1=≢⍺
- resta apenas um itemfonte
APL + WIN,
3028 bytes2 bytes salvos, cortesia de Uriel.
Explicação:
Essa é uma maneira de escrever código de loop no APL em uma única linha.
fonte
3|
Javascript (ES6), 58 bytes
fonte