Entrada:
Uma lista / vetor não vazio em que cada elemento contém um valor / caractere, indicando se você vai contar para cima ou para baixo . Vou usar 1
e -1
, mas você pode escolher o que quiser. Você pode usar apenas dois valores, não pode usar 1,2,3...
e -1,-2,-3...
, para cima e para baixo, respectivamente.
Desafio:
Você vai usar os números na série geométrica 1, 2, 4, 8, 16, 32 ... . Toda vez que você começar a contar para cima ou para baixo, contará em incrementos de 1 , depois 2 , depois 4 e assim por diante. Se você mudar e começar a contar da outra maneira, subtrairá 1 , depois 2 , depois 4 e assim por diante. A saída deve ser o número que você obtém no final.
Exemplos:
No exemplo abaixo, a primeira linha é a entrada, a segunda linha são os números que você está contando para cima / para baixo, a terceira linha é a soma acumulada e a última linha é a saída.
Exemplo 1:
1 1 1 1 1 1 1 1 1 1
1 2 4 8 16 32 64 128 256 512
1 3 7 15 31 63 127 255 511 1023
1023
Exemplo 2:
1 1 1 1 1 1 -1 -1 -1 -1 1 1 1
1 2 4 8 16 32 -1 -2 -4 -8 1 2 4
1 3 7 15 31 63 62 60 56 48 49 51 55
55
Como você pode ver, o primeiro 1
ou -1
"redefine" o valor que estamos contando e sequências consecutivas 1
ou -1
meios duplicando o valor.
Exemplo 3:
-1 -1 1 1 -1 -1 -1
-1 -2 1 2 -1 -2 -4
-1 -3 -2 0 -1 -3 -7
-7
Alguns casos de teste adicionais para explicar alguns casos de canto em potencial.
A entrada está na primeira linha. A saída está no segundo.
1
1
-------
-1
-1
-------
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
0
Este é o código-golfe, pelo que a submissão mais curta em cada idioma vence.
®ì2Ãx
paraxì2
salvar dois bytes.Cubix , 65 bytes
Experimente online!
Assista correr
Como uma breve explicação disso:
fonte
JavaScript (ES6), 38 bytes
fonte
R , 32 bytes
Experimente online!
Este é o mesmo método que alguns outros aqui.
Com a entrada de
-1 -1 1 1 -1 -1 -1
2, 2, 3
e valores-1, 1, -1
3, 3, 7
-3, 3, -7
-7
fonte
Python 3 ,
5756 bytes-1 byte graças a @notjagan
Experimente online!
fonte
s>()
me levou um segundo. Isso é realmente inteligente.Gelatina , 4 bytes
Experimente online!
fonte
C ++ 14, 58 bytes
Recebe entrada por meio do
v
argumento (std::vector
, ou qualquer contêiner iterável), gera saída para os
argumento (por referência). Cada elemento dev
deve ser1
ou-1
.Exemplo de uso e casos de teste.
fonte
Brachylog , 13 bytes
Experimente online!
Usos de Brachylog
_
vez de-
.Explicação:
fonte
Python,
7672 bytesExperimente online!
fonte
Pitão , 12 bytes
Experimente online!
fonte
PHP, 51 bytes
Corra com
-n
ou experimente online .fonte
CJam (13 bytes)
Conjunto de testes online . Este é um bloco anônimo (função) que pega uma matriz de entradas na pilha e deixa um int na pilha. O último teste mostra que ele lida com uma matriz vazia corretamente, fornecendo 0.
A abordagem é a codificação direta do comprimento da execução, seguida por uma decodificação manual da duração da execução de cada execução e conversão de base. Usando o built-in para decodificação de execução, recebo mais um byte com
{e`1/:e~2fb1b}
ou{e`{ae~2b}%1b}
.fonte
05AB1E , 6 bytes
Experimente online!
fonte
γε¬sƶÄ<o*}OO
Haskell,
5453 bytesExperimente online!
Uma recursão simples que dobra o acumulador
k
ou o redefine para1
/-1
e adiciona os valores de cada etapa.fonte
Mathematica, 60 bytes
fonte
Mathematica, 25 bytes
fonte
Java, 91 bytes
fonte
Pitão, 11 bytes
Experimente online
Como funciona
fonte