Skip to main content

EP01

Leia inicialmente o Lab 2.12 de PNK, Comparing voting records using dot-product. O autor fornece em

http://resources.codingthematrix.com/

o arquivo UN_voting_data.txt, com informações sobre certas votações na ONU. Neste arquivo, ocorrem 206 países e regiões e há o registro de 5211 votações.

Neste exercício, você deve escrever um programa Python que, com base nas informações em arquivos como UN_voting_data.txt, identifica alinhamentos entre os países nessas votações, usando o critério descrito no Lab 2.12. Seu programa, que deve chamar-se align.py, deve receber na linha de comando o país de interesse, o nome do arquivo com as votações, e deve ter como saída uma lista ordenada de todos os países, onde a ordem deve ser "por alinhamento": o país mais alinhado primeiro, seguido do segundo país mais alinhado, etc.

Exemplos. Suponha que queremos saber como os países alinham-se com os EUA. Seu programa seria executado da seguinte forma:

$ python align.py United_States_of_America UN_voting_data.txt
United_States_of_America
Israel
United_Kingdom
Canada
Luxembourg
Netherlands
[...]
Cuba
Syria
Belarus
$

A saída acima indica que o país que mais se alinha com os EUA nessas 5211 votações é Israel, seguido do Reino Unido, etc (naturalmente, os EUA alinham-se completamente com eles próprios, e assim eles aparecem primeiro na lista). O país que menos se alinha com os EUA é a Bielorrússia.

No caso da União Soviética, a saída é como segue:

$ python align.py U.S.S.R. UN_voting_data.txt
U.S.S.R.
Ukraine
Belarus
Czechoslovakia
Poland
Bulgaria
Hungary
[...]
Israel
South_Africa
United_Kingdom
United_States_of_America
$

Dados de entrada. Para que você possa experimentar seu programa com dados diferentes, segue abaixo o programa extract.py, que pode ser usado para extrair um dado número de linhas e um dado conjunto de votações de UN_voting_data.txt. Especificados o número de linhas que queremos e o número de votações que queremos, as linhas e votações são escolhidas ao acaso. Por exemplo, se queremos 10 países e 20 votações, podemos fazer assim (8888 é a semente para o gerador de números aleatórios):

$ python extract.py UN_voting_data.txt 10 20 8888
Colombia 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 -1 1
Ghana 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 0 1
San_Marino 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0
South_Africa 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 1 -1 -1 -1
France 1 1 1 1 1 -1 1 -1 0 0 1 0 1 0 0 1 -1 -1 -1 0
Croatia 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0
Uruguay 1 1 1 1 1 0 -1 1 1 1 1 1 1 1 1 1 1 1 -1 1
Peru 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0
Albania 1 0 1 1 0 1 0 0 1 1 1 0 1 0 0 1 -1 1 0 1
Luxembourg 1 0 1 1 1 -1 1 -1 0 0 0 0 1 0 0 1 -1 -1 -1 0
$

Assim, podemos fazer coisas como

$ python extract.py UN_voting_data.txt 100 2000 7777 > 100.2000.7777.txt
$ python align.py United_States_of_America 100.2000.7777.txt | head
United_States_of_America
Israel
Belgium
Italy
New_Zealand
Denmark
Norway
Japan
Ireland
Greece
$

Testes como acima serão feitos com seu programa.

Entrega. Entregue apenas seu programa align.py.