¡Después de que @ MartinBüttner logró exactamente 10,000 reputación , ahora tenemos tres filas completas de 10k usuarios en la página de usuarios ! Ahora, dado que todos somos programadores aquí, nos gusta automatizar las cosas en lugar de hacerlo manualmente. Su desafío es escribir un programa para felicitar automáticamente a los nuevos usuarios de 10k.
Especificación
Entrada
La entrada será nlíneas de números separados por espacios. (Si lo desea, también puede tomar una sola lista separada por comas de números separados por espacios, si eso acorta su código). Por ejemplo:
10 20 30 40 50
15 25 35 45 55
20 30 40 50 60
O:
10 20 30 40 50,15 25 35 45 55,20 30 40 50 60
Cada lista de números representa una lista de valores de reputación de los usuarios en un solo día.
Salida
El resultado será la misma cantidad de nlíneas (o una lista separada por comas de la misma longitud). Cada elemento de línea / lista será:
:Dsi hubo un usuario cuya reputación se convirtió en> = 10,000- Múltiples correos separados por espacios
:Dsi hubo varios usuarios que cumplieron o pasaron el conteo de 10,000 repeticiones. Por ejemplo,:D :D :Dpara 3 nuevos usuarios de 10k.
- Múltiples correos separados por espacios
:(y luego detener la salida adicional si la entrada es ambigua o imposible (más sobre esto en la siguiente sección).- nada si ninguna de estas condiciones es cierta.
Ambigüedad
Es posible que la entrada sea ambigua. Para los propósitos de este desafío, asumimos que:
- El límite de reputación es de 200 por día, ignorando aceptaciones y recompensas y similares por el bien del desafío.
- Los usuarios no pueden perder reputación (nuevamente por simplicidad y por el desafío).
La entrada se considera ambigua cuando es imposible determinar qué valores de reputación corresponden a qué usuario. Por ejemplo, en la entrada 10 20,30 40, no puede saber si el usuario de 10 repeticiones se convirtió en el usuario de 30 repeticiones o en el usuario de 40 repeticiones.
La entrada se considera imposible cuando los usuarios de un día no podrían haberse convertido en usuarios del día siguiente. Por ejemplo, en la entrada 10 20,310 320, esta situación es claramente imposible porque los usuarios no podrían haber ganado 300 reputación en un día. Los usuarios que pierden reputación también son imposibles.
Casos de borde
- Los valores iniciales de reputación pueden comenzar en cualquier cosa (es decir, un usuario puede comenzar con 1337 reputación).
- No hay salida para el primer elemento de línea / lista.
- La entrada siempre será sintácticamente válida, lo que significa que los valores de reputación siempre serán enteros positivos, siempre habrá la misma cantidad de valores de reputación por elemento de línea / lista, etc.
- Los valores de reputación no están ordenados; Pueden estar en cualquier orden.
Casos de prueba
Entrada: 9900,10000
Salida::D
Entrada: 9900 9950 9910,10100 9950 9910,10300 10150 10110
Salida::D,:D :D
Entrada: 10 20 30,42 10 20,10 242 20,442 42 10,0 0 0,442 42 10
Salida:,,,:(
Entrada: 10 20,15 25,15 25
Salida:,,
Entrada: 9999 9998 9997,10000 9998 9997,10000 10000 9997,10300 10000 10000
Salida::D,:D,:(
Entrada: 100,90,80,70
Salida::(
Entrada: 10000 10000 10000 9999,10000 10000 10000 10000,10010 10020 10030 10040
Salida::D,:(
Entrada: 9999 9998 9997 9996,10196 10197 10198 10199,10399 10199 10197 10196
Salida::D :D :D :D,
(i.e. a user can start with 1337 reputation).Me gustó este porque era mi representante ... hace 5 minutos hasta que alguien votó por una de mis respuestas xD