Entrada:
Una lista de enteros (que nunca contendrá un cero)
Salida:
Una lista del mismo tamaño con recuentos basada en lo siguiente:
- Si el elemento actual es negativo: mire todos los elementos antes de este elemento y cuente cuántas veces ocurrieron los dígitos en esos otros números
- Si el elemento actual es positivo en su lugar: mire todos los elementos después de este elemento y cuente cuántas veces se produjo el dígito en esos otros números
Hay un giro: si el tamaño de la lista es par, solo contamos cada número una vez (incluso si coincide con varios dígitos), y si el tamaño es impar, contamos cada dígito de los números para cada dígito del elemento actual (duplicado los dígitos se cuentan varias veces).
Veamos algunos ejemplos para aclarar esto un poco:
Ejemplo con lista par:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
El tamaño de la lista es par , por lo que solo contamos cada número una vez.
4
: Es positivo, así que esperamos. Hay tres números que contienen el dígito4
(42
,-942
,8374
). Entonces comenzamos con a3
.10
: Es positivo, así que esperamos. Hay dos números que contienen el dígito1
y / o0
(-10
,-200
). Entonces la segunda salida es2
.42
: De nuevo positivo, muy adelante. Hay cuatro números que contienen o bien el dígito4
y / o2
(-942
,8374
,728
,-200
). Entonces la tercera salida es4
.-10
: Esta vez es negativo, así que miramos hacia atrás. Solo hay un número que contiene el dígito1
y / o0
(ignoramos el signo menos) (10
). Entonces la cuarta salida es1
.- etc.
Ejemplo con lista impar:
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
El tamaño de la lista es impar , por lo que contamos cada dígito.
382
: Es positivo, así que esperamos. Hay uno3
en los otros números (381
), seis8
en los otros números (-82, -8, 381, 228, 28, -28
) y seis2
en los otros números (-82, 228, 28, -28, 2
). Entonces comenzamos con a13
.-82
: Es negativo, así que al revés. Hay uno3
en el otro número (382
) y uno8
en el otro número (382
). Entonces la segunda salida es2
.- ...
228
: Es positivo, muy adelante. Hay tres2
que está en los otros números (28
,-28
,-2
), y otros tres2
's, y dos8
que está en los otros números (28
,-28
). Entonces esta salida es8
.- etc.
Reglas de desafío:
- Puede suponer que la entrada nunca contendrá
0
como elemento, ya que no es ni positiva ni negativa. - Puede suponer que la lista de entrada siempre contendrá al menos dos elementos.
- I / O es flexible. La entrada / salida puede ser una matriz / lista de enteros, una cadena delimitada, una matriz de dígitos / caracteres, etc.
- Si el primer número en la lista es un número negativo, o el último número en la lista es un número positivo, será 0 en la lista resultante.
- Con listas impares, los números que contienen el mismo dígito varias veces se cuentan varias veces, como
228
en el ejemplo impar anterior que da como resultado8
(3 + 3 + 2) en lugar de5
(3 + 2).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
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 visto el doble vector usado bien, bonito.Python 2 ,
149148121116111107 bytesPruébalo en línea!
fuente
Java (JDK 10) , 204 bytes
Pruébalo en línea!
Créditos
fuente
[1,11,-1]
Debería volver[3,2,3]
. Es una lista extraña, por lo que todos los dígitos cuentan. Primero1
: mirar hacia adelante, tres1
s en total:11,-1
. Segundo11
: mira hacia adelante para cada dígito: uno1
+ uno1
. Tercero-1
: Mire hacia atrás, tres1
s en total:-1,11
. (Con las listas impares usted debe buscar en cada dígito, incluso el mismo Voy a aclarar esto en el desafío, pero el ejemplo extraña con el número.228
Aclara esto un poco.),t
y cambiandoi+(a[i]>0?1:-1)
ai+(t=a[i]>0?1:-1)
, y luego simplemente utilizoj+=t
en lugar dej+=a[i]>0?1:-1
.Perl 6 ,
10085 bytesPruébalo en línea!
Utiliza el operador de multiplicación holgado ⊍.
fuente
Perl 5
-n
, 92 bytesPruébalo en línea!
fuente
JavaScript (Node.js) ,
164,158,140139 bytesPruébalo en línea!
fuente
Ruby , 126 bytes
Pruébalo en línea!
fuente
Jalea ,
4342 bytesPruébalo en línea!
fuente