Números unários geralmente representam apenas números inteiros não negativos, mas podemos estendê-los para representar todos os números inteiros da seguinte maneira:
- Um número inteiro positivo N é representado como N
1
's:5 -> 11111
- Um número inteiro negativo -N é representado como um
0
seguido por N1
's:-5 -> 011111
- Zero é representado como
0
Podemos então representar uma lista desses números sem ambiguidade, se usarmos 0
como separador:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
Sua tarefa: pegue uma sequência representando uma lista de números unários assinados e traduza-a em uma lista de números decimais.
Detalhes
Você pode assumir que a entrada é uma lista completa de números unários assinados. Em particular, seu programa não precisará lidar com 1) entrada vazia ou 2) entrada que termina com um separador.
Você pode supor que a magnitude de cada número não exceda 127. Para idiomas com tamanhos máximos de strings ou listas, você pode supor que a entrada e a saída se encaixem nas estruturas de dados do seu idioma, mas seu algoritmo deve teoricamente funcionar para uma lista de qualquer tamanho.
Seu programa ou função pode executar E / S de qualquer uma das maneiras padrão . A entrada pode ser uma sequência ou uma lista de caracteres, seqüências de caracteres únicos, números inteiros ou booleanos. Você pode usar dois caracteres para representar 1
e 0
; se você não usar 1
e 0
, especifique quais caracteres você está usando.
A saída deve ser números decimais em qualquer formato razoável de lista (em particular, deve haver algum tipo de separador entre números). Os números negativos devem ser indicados com um sinal de menos, embora, se o seu idioma tiver um formato diferente para números inteiros negativos, eu também o aceite. Zero pode ser representado na saída como 0
ou -0
.
Casos de teste
1 -> 1
0 -> 0 (or -0, and similarly for the other test cases)
011 -> -2
1101 -> 2,1
1100 -> 2,0
11001 -> 2,-1
110001 -> 2,0,1
11100110001 -> 3,-2,0,1
00000001 -> 0,0,0,-1
01111011111111001111111111111110111111111111111100111111111111111111111110111111111111111111111111111111111111111111 -> -4,8,-15,16,-23,42
01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 -> -127
0
) e o prefixo do sinal negativo ( 0
) sejam os mesmos, embora ainda sejam inequívocos, pois você não pode ter sinais negativos no meio de um número (é 182--693-1
um número? Não, e nem é 1111011000101111
exatamente pelo mesmo motivo).
'0's
, não é tecnicamente unário. Bom desafio!