O cenário
Você mora em um país que está tendo uma eleição presidencial. Cada eleitor recebe um voto e, portanto, existe um sistema bipartidário firmemente entrincheirado. (Existem terceiros, mas quase nenhum voto).
A última pesquisa de opinião mostra a corrida em um empate:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: vários candidatos menores
Os requisitos do programa
Você foi contratado pelo governo para escrever parte do software de contagem de votos. Você receberá, na entrada padrão, uma lista não ordenada dos votos de uma delegacia, uma por linha, assim:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
e, depois de ler todos os votos, gera um resumo de quantos votos cada candidato obteve, classificados em ordem decrescente pelo número de votos, assim:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
A parte secreta
Você é um hacker partidário que deseja roubar a eleição para um dos dois principais candidatos (você pode escolher qual). Portanto, seu programa deve imprimir deliberadamente contagens incorretas de votos, com um viés sistemático em relação ao seu candidato favorito.
Obviamente, você deve fazer isso de tal maneira que uma pessoa que observe seu código ou sua saída provavelmente não reconheça o comportamento incorreto.
...you can choose which one...
Posso escolher aquele cujo nome é o primeiro?sort|uniq -c
...Respostas:
Scala
Viva Alberto Arbusto!
Alberto Arbusto quase sempre sai um pouco à frente de Jorge Sangre, desde que haja votos suficientes (~ 10.000). Não há necessidade de alterar os próprios votos.
Nota lateral: esse código é vagamente baseado em um pool de conexões "personalizado" que encontrei em um projeto. Demoramos semanas para descobrir por que o aplicativo estava sempre sem conexões.
fonte
Rubi
Jorge Sangre receberá um aumento substancial em sua contagem de votos (por exemplo, 492 votos serão relatados como 754). Os votos de Alberto serão relatados com precisão.
fonte
Bater
(Isso atende às especificações?)
Como sempre, são necessárias precauções adicionais para garantir uma saída válida.
uniq -c
prefixa cada linha com o número de vezes que ocorre. Isso basicamente faz todo o trabalho.Apenas no caso de
uniq -c
algo errado, agora classificamos sua saída pelos nomes dos candidatos na ordem inversa e depois a executamosuniq -f1
(não imprima linhas duplicadas, ignorando o primeiro campo [o número de votos]) para remover os candidatos duplicados. Finalmente, usamossort -gr
para classificar na ordem "Geral Numérica" e "Reverso" (ordem decrescente por número de votos).fonte
C #
O primeiro candidato no arquivo de texto sempre vencerá!Isso fará com que Alberto Arbusto o vencedor!
fonte
SortedDictionary
irá classificar os candidatos em ordem alfabética.Dictionary<TK,TV>
classe, conforme implementada, armazena índices em uma matriz de itens reais. ADictionary<TK,TV>
da qual nenhum item é excluído jamais enumerará elementos na ordem em que foram adicionados; esse comportamento não é especificado, mas já existe há tempo suficiente; eu não esperaria que a MS o modificasse.C
Favorece Jorge Sangre.
Nos testes com arquivos de votação gerados aleatoriamente, mesmo quando Alberto Arbusto recebe até 1,4% a mais dos votos reais (49,7% vs 48,3% para Jorge Sangre), meu homem Jorge Sangre geralmente ganha a contagem.
fonte
Python
A contagem de votos favorecerá os candidatos mais perto do final da lista.
fonte
tr | sed | dc
Isso conta meu amigo Alberto duas vezes todas as vezes.
"Ah -
tr
? Bem, isso é apenas necessário porque os computadores não são muito bons com letras maiúsculas - melhor se todas estiverem em letras minúsculas ... Sim, eu sei, os computadores são loucos."SAÍDA
Aqui está outra versão que dá o voto de Juan Perez a Jorge Sangre:
SAÍDA
fonte
Javascript
A última pessoa na lista de candidatos sempre vencerá.
fonte