El escenario
Vives en un país que está teniendo elecciones presidenciales. Cada votante obtiene un voto y, por lo tanto, existe un sistema bipartidista firmemente arraigado. (Existen terceros, pero apenas obtienen votos).
La última encuesta de opinión muestra la carrera en un punto muerto:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: varios candidatos menores
Los requisitos del programa
El gobierno lo contrató para escribir parte del software de conteo de votos. Se le dará, en una entrada estándar, una lista desordenada de los votos de un precinto, uno por línea, de esta manera:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
y, después de leer todos los votos, genera un resumen de cuántos votos obtuvo cada candidato, ordenados en orden descendente por número de votos, de esta manera:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
La parte oculta
Eres un pirata partidista que quiere robar las elecciones para uno de los dos candidatos principales (puedes elegir cuál). Por lo tanto, su programa debe imprimir deliberadamente conteos de votos incorrectos , con un sesgo sistemático hacia su candidato favorito.
Por supuesto, debe hacer esto de tal manera que una persona que mira su código o su salida probablemente no reconozca el comportamiento incorrecto.
...you can choose which one...
¿Puedo elegir aquel cuyo nombre es el primero?sort|uniq -c
...Respuestas:
Scala
¡Viva Alberto Arbusto!
Alberto Arbusto casi siempre saldrá un poco por delante de Jorge Sangre, siempre que se emitan suficientes votos (~ 10,000). No hay necesidad de alterar los votos en sí.
Nota al margen: este código se basa libremente en un grupo de conexiones "personalizado" que encontré en un proyecto. Nos llevó semanas descubrir por qué la aplicación estaba perpetuamente sin conexiones.
fuente
Rubí
Jorge Sangre obtendrá un impulso sustancial en su conteo de votos (por ejemplo, 492 votos serán reportados como 754). Los votos de Alberto serán reportados con precisión.
fuente
Golpetazo
(¿Cumple esto con la especificación?)
Como siempre, esto toma precauciones adicionales para garantizar una salida válida.
uniq -c
prefija cada línea con la cantidad de veces que ocurre. Esto básicamente hace todo el trabajo.En caso de
uniq -c
que algo salga mal, ahora ordenamos su salida por los nombres de los candidatos en orden inverso, luego lo ejecutamosuniq -f1
(no imprima líneas duplicadas, ignorando el primer campo [el número de votos]) para eliminar cualquier candidato duplicado. Finalmente, usamossort -gr
para ordenar en orden "numérico general" y "inverso" (orden descendente por número de votos).fuente
DO#
¡El primer candidato en el archivo de texto siempre ganará!¡Hará que Alberto Arbusto sea el ganador!
fuente
SortedDictionary
será ordenar los candidatos en orden alfabético.Dictionary<TK,TV>
clase, tal como está implementada, almacena índices en una matriz de respaldo de elementos reales. UnaDictionary<TK,TV>
de la que nunca se eliminan elementos enumerará elementos en el orden en que se agregaron; dicho comportamiento no se especifica, pero ha estado en su lugar el tiempo suficiente, no esperaría que MS lo cambie alguna vez.do
Favorece a Jorge Sangre.
En las pruebas con archivos de votación generados aleatoriamente, incluso cuando Alberto Arbusto recibe hasta 1.4% más de los votos reales (49.7% vs 48.3% para Jorge Sangre), mi hombre Jorge Sangre generalmente gana la cuenta.
fuente
Pitón
El recuento de votos favorecerá a los candidatos más cerca del final de la lista.
fuente
tr | sed | corriente continua
Esto cuenta a mi amigo Alberto dos veces cada vez.
"¿Oh ...
tr
? Bueno, es necesario porque las computadoras no son muy buenas con mayúsculas, mejor si están en minúsculas ... Sí, lo sé, las computadoras están locas".SALIDA
Aquí hay otra versión que le da el voto de Juan Pérez a Jorge Sangre:
SALIDA
fuente
JavaScript
La última persona en la lista de candidatos siempre ganará.
fuente