Ocurrencias de dígitos


12

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ígito 4( 42, -942, 8374). Entonces comenzamos con a 3.
  • 10: Es positivo, así que esperamos. Hay dos números que contienen el dígito 1y / o 0( -10, -200). Entonces la segunda salida es 2.
  • 42: De nuevo positivo, muy adelante. Hay cuatro números que contienen o bien el dígito 4y / o 2( -942, 8374, 728, -200). Entonces la tercera salida es 4.
  • -10: Esta vez es negativo, así que miramos hacia atrás. Solo hay un número que contiene el dígito 1y / o 0(ignoramos el signo menos) ( 10). Entonces la cuarta salida es 1.
  • 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 uno 3en los otros números ( 381), seis 8en los otros números ( -82, -8, 381, 228, 28, -28) y seis 2en los otros números ( -82, 228, 28, -28, 2). Entonces comenzamos con a 13.
  • -82: Es negativo, así que al revés. Hay uno 3en el otro número ( 382) y uno 8en el otro número ( 382). Entonces la segunda salida es 2.
  • ...
  • 228: Es positivo, muy adelante. Hay tres 2que está en los otros números ( 28, -28, -2), y otros tres 2's, y dos 8que está en los otros números ( 28, -28). Entonces esta salida es 8.
  • etc.

Reglas de desafío:

  • Puede suponer que la entrada nunca contendrá 0como 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 228en el ejemplo impar anterior que da como resultado 8(3 + 3 + 2) en lugar de 5(3 + 2).

Reglas generales:

  • Este es el , 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 ]

Respuestas:




4

Java (JDK 10) , 204 bytes

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

Pruébalo en línea!

Créditos


[1,11,-1]Debería volver [3,2,3]. Es una lista extraña, por lo que todos los dígitos cuentan. Primero 1: mirar hacia adelante, tres 1s en total: 11,-1. Segundo 11: mira hacia adelante para cada dígito: uno 1+ uno 1. Tercero -1: Mire hacia atrás, tres 1s 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. 228Aclara esto un poco.)
— Kevin Cruijssen

@KevinCruijssen Debería arreglarse ahora.
— Olivier Grégoire

De hecho lo hace. Ya tenía miedo de que la explicación inicial pudiera haber sido un poco confusa cuando la publiqué. Ahora veré si puedo responder algo a su respuesta. ;)
— Kevin Cruijssen

1
No tengo mucho tiempo tampoco, pero una cosa que puedo campo está añadiendo una nueva variable ,ty cambiando i+(a[i]>0?1:-1)a i+(t=a[i]>0?1:-1), y luego simplemente utilizo j+=ten lugar de j+=a[i]>0?1:-1.
— Kevin Cruijssen

1
Puede guardar 2 si declara, por ejemplo, t = 10 y reemplaza todos esos 10 por t, aunque será menos comprensible
— Java Gonzar





Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.