Depois que todas as tarefas são enviadas, é criado um dicionário que mapeia o número do aluno para o hash do arquivo.
Esse dicionário, mapa de hash ou mapeamento (seja qual for o idioma), terá a seguinte aparência:
{100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}
A chave é o número do aluno e o valor é o hash.
Nossa tarefa é escolher os trapaceiros! Os trapaceiros são os que têm hashes idênticos.
Dada a entrada {100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}
, a função deve retornar (ou imprimir) o seguinte texto:
100 has identical files to 430
104 has identical files to 332
Observe como os arquivos onde os hashes são exclusivos não são mencionados.
Além disso, a ordem é importante aqui :
{100: "aabb", 202: "aabb", 303: "ab", 404: "aabb"}
deve retornar (imprimir) o seguinte texto:
100 has identical files to 202,404
É incorreto imprimir um dos seguintes:
202 has identical files to 100,404
100 has identical files to 404, 202
Você deve imprimi-lo em termos de como ele aparece no dicionário. Em alguns idiomas, passar por um dicionário é aleatório; portanto, nesse caso especial, você pode alterar o método de entrada, de modo que possa passar por ele de maneira ordenada.
Mais exemplos:
{} # prints nothing
{100: "ab", 303: "cd"} # prints nothing again
{100: "ab", 303: "cd", 404: "ab"}
100 has identical files to 404
{303: "abc", 304: "dd", 305: "abc", 405: "dd", 606: "abc"}
303 has identical files to 305,606
304 has identical files to 405
O menor código vence!
303 has identical files to [305, 606]
vez de 303 has identical files to 305,606
?