Entrada:
Uma lista de números inteiros (que nunca conterão zero)
Resultado:
Uma lista do mesmo tamanho com contagens baseadas no seguinte:
- Se o item atual for negativo: verifique todos os itens anteriores a esse item e conte quantas vezes os dígitos ocorreram nesses outros números
- Se o item atual for positivo: verifique todos os itens após esse item e conte quantas vezes o dígito ocorreu nesses outros números
Há uma reviravolta: se o tamanho da lista for uniforme, contamos todos os números apenas uma vez (mesmo que corresponda a vários dígitos) e, se o tamanho for ímpar, contamos todos os dígitos dos números de cada dígito do item atual (duplicado dígitos são contados várias vezes).
Vamos dar alguns exemplos para esclarecer um pouco isso:
Exemplo com lista par:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
O tamanho da lista é par ; portanto, contamos apenas cada número uma vez.
4
: É positivo, então estamos ansiosos. Existem três números dígitos contendo o4
(42
,-942
,8374
). Então começamos com a3
.10
: É positivo, então estamos ansiosos. Existem dois números que contêm o dígito1
e / ou0
(-10
,-200
). Então a segunda saída é2
.42
: Mais uma vez positivo, tão para a frente. Existem quatro números contendo quer o dígito4
e / ou2
(-942
,8374
,728
,-200
). Então a terceira saída é4
.-10
: Desta vez é negativo, então olhamos para trás. Existe apenas um número que contém o dígito1
e / ou0
(ignoramos o sinal de menos) (10
). Então a quarta saída é1
.- etc.
Exemplo com lista ímpar:
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
O tamanho da lista é ímpar , por isso contamos todos os dígitos.
382
: É positivo, então estamos ansiosos. Há um3
nos outros números (381
), seis8
nos outros números (-82, -8, 381, 228, 28, -28
) e seis2
nos outros números (-82, 228, 28, -28, 2
). Então começamos com a13
.-82
: É negativo, então para trás. Há um3
no outro número (382
) e um8
no outro número (382
). Então a segunda saída é2
.- ...
228
: É positivo, tão para a frente. Existem três2
's nos outros números (28
,-28
,-2
), e outras três2
' s, e duas8
's nos outros números (28
,-28
). Então essa saída é8
.- etc.
Regras do desafio:
- Você pode assumir que a entrada nunca conterá
0
como item, pois não é positiva nem negativa. - Você pode assumir que a lista de entrada sempre conterá pelo menos dois itens.
- A E / S é flexível. A entrada / saída pode ser uma matriz / lista de números inteiros, sequência delimitada, matriz de dígitos / caracteres, etc.
- Se o primeiro número da lista for um número negativo ou o último número da lista for um número positivo, será 0 na lista resultante.
- Com listas ímpares, os números que contêm o mesmo dígito várias vezes são contados várias vezes, como
228
no exemplo ímpar acima, resultando em8
(3 + 3 + 2) em vez de5
(3 + 2).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9, 1, 7, 3, 5, 5, 3, 7, 1, 9 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2, 8, 4, 5, 6, 3, 8, 1, 10, 0 ]
Input: [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8, 9, 3, 9, 3, 4, 5, 4, 12 ]
Input: [-1, 11, 11, 1]
Output: [0, 2, 1, 0]
Input: [1, 11, 11, -1]
Output: [3, 2, 1, 3 ]
Input: [-1, 11, 1]
Output: [0, 2, 0]
Input: [1, 11, -1]
Output: [3, 2, 3 ]
δ¢
, nunca vi vetor duplo usado bem, bom.Python 2 ,
149148121116111107 bytesExperimente online!
fonte
Java (JDK 10) , 204 bytes
Experimente online!
Créditos
fonte
[1,11,-1]
deve retornar[3,2,3]
. É uma lista ímpar, então todos os dígitos contam. Primeiro1
: Olhe para a frente, três1
s no total:11,-1
. Segundo11
: Olhe para a frente para cada dígito: um1
+ um1
. Terceiro-1
: Olhar para trás, três1
s no total:-1,11
. (Com listas ímpares você deve olhar para cada dígito, até o mesmo Vou esclarecer isso no desafio, mas o exemplo estranho com número.228
Esclarece isso um pouco.),t
e mudari+(a[i]>0?1:-1)
parai+(t=a[i]>0?1:-1)
, e simplesmente usar emj+=t
vez dej+=a[i]>0?1:-1
.Perl 6 ,
10085 bytesExperimente online!
Usa o operador de multiplicação baggy ⊍.
fonte
Perl 5
-n
, 92 bytesExperimente online!
fonte
JavaScript (Node.js) ,
164.158.140139 bytesExperimente online!
fonte
Ruby , 126 bytes
Experimente online!
fonte
Geléia ,
4342 bytesExperimente online!
fonte