Last active
July 29, 2024 18:20
-
-
Save celsobessa/597b41607dc34e7b1063bfefa0a61565 to your computer and use it in GitHub Desktop.
Pseudocódigo e códigos de algoritmo de voto para legislativo, para aulas introdutórias de programação e políticas de aprendizagem de máquina, IA, etc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# VOTO LEGISLATIVO | |
NUMERODECANDIDATOS = X | |
ENQUANTO (NUMERODECANDIDATOS > 0): | |
VERIFICA (CANDIDATO_ESPECTRO) | |
Se DIREITA: | |
Se CENTRODIREITA: | |
IGNORE | |
Se ESQUERDA: | |
PRIORIDADE = PRIORIDADE + 3 | |
Se CENTROESQUERDA: | |
PRIORIDADE = PRIORIDADE + 2 | |
Se CASOPADRÃO: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA (CANDIDATO_GENERO) | |
Se MULHER: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA(CANDIDATO_ETNIA) | |
Se diferente de BRANCO: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA(CANDIDATO_EXPRESSÃO) | |
Se LGBTQIA+: | |
PRIORIDADE = PRIORIDADE + 1 | |
NUMERODECANDIDATOS = NUMERODECANDIDATOS - 1 | |
ORDENA LISTA DE CANDIDATOS | |
Por prioridade (principal) | |
Por gênero | |
Por etnia | |
Por LGBTQIA+ | |
APRESENTA LISTA ORDENADA |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- | |
// VERSÃO COMENTADA | |
--> | |
<!-- Anotamos o número de candidatos para serem avaliados. Deve ser maior que zero para iniciar avaliação --> | |
NUMERODECANDIDATOS = X | |
<!-- Enquanto nossa lista não tiver tamanho zero, executamos o seguinte: --> | |
ENQUANTO (NUMERODECANDIDATOS > 0): | |
<!-- Verificamos o espectro candidato do candidato sendo avaliado --> | |
VERIFICA (CANDIDATO_ESPECTRO) | |
Se DIREITA: | |
Se CENTRODIREITA: | |
<!-- Qualquer uma das condições acima vai executar o comando abaixo --> | |
IGNORE | |
<!-- Se esquerda, damos 3 pontos, se centro esquerda 2 e o caso padrão (que por eliminiação será CENTRO) + 1 --> | |
Se ESQUERDA: | |
PRIORIDADE = PRIORIDADE + 3 | |
Se CENTROESQUERDA: | |
PRIORIDADE = PRIORIDADE + 2 | |
Se CASOPADRÃO: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA (CANDIDATO_GENERO) | |
<!-- Se mulher, aumentamos a prioridade. --> | |
<!-- | |
Note que aqui não diferenciamos se é mulher cis ou trans, para explicitar como | |
certos aspectos de um algorimo são decisões (mesmo que inconscientes) ou invisibilizações. | |
Também poderia se argumentar que pessoas trans (potencialmente) podem ganhar mais um ponto | |
ao se avaliar a variável LGBTQIA+. O que também é uma decisão de desenho do algoritmo. --> | |
Se MULHER: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA(CANDIDATO_ETNIA) | |
<!-- Se a etnia é diferente de branco, aumetamos a prioridade --> | |
Se diferente de BRANCO: | |
PRIORIDADE = PRIORIDADE + 1 | |
VERIFICA(CANDIDATO_EXPRESSÃO) | |
<!-- Se a expressão é diferente de heteronomormativo, aumetamos a prioridade --> | |
Se LGBTQIA+: | |
PRIORIDADE = PRIORIDADE + 1 | |
<!-- subtraímos um do número de candidatos, ou a avaliação vai se repetir indefinidamente --> | |
NUMERODECANDIDATOS = NUMERODECANDIDATOS - 1 | |
ORDENA LISTA DE CANDIDATOS | |
Por prioridade (principal) | |
Por gênero | |
Por etnia | |
Por LGBTQIA+ | |
APRESENTA LISTA ORDENADA |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Implementação número 1 | |
const candidatos = [ | |
{ | |
nome: "Candidata1", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "mulher", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidata2", | |
prioridade: 0, | |
espectro: "esquerda", | |
genero: "mulher", | |
etnia: "branca", | |
expressao: true, | |
}, | |
{ | |
nome: "Candidata3", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "mulher", | |
etnia: "negra", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidata4", | |
prioridade: 0, | |
espectro: "esquerda", | |
genero: "mulher", | |
etnia: "negra", | |
expressao: true, | |
}, | |
{ | |
nome: "Candidata_5", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "mulher", | |
etnia: "indigena", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_06", | |
prioridade: 0, | |
espectro: "centrodireita", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_07", | |
prioridade: 0, | |
espectro: "centroesquerda", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_08", | |
prioridade: 0, | |
espectro: "esquerda", | |
genero: "homem", | |
etnia: "branca", | |
expressao: true, | |
}, | |
{ | |
nome: "Candidato_09", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "mulher", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_10", | |
prioridade: 0, | |
espectro: "centro", | |
genero: "homem", | |
etnia: "indigena", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_11", | |
prioridade: 0, | |
espectro: "centro", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_12", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_13", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_14", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "homem", | |
etnia: "negra", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_15", | |
prioridade: 0, | |
espectro: "esquerda", | |
genero: "homem", | |
etnia: "negra", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_16", | |
prioridade: 0, | |
espectro: "esquerda", | |
genero: "homem", | |
etnia: "negra", | |
expressao: true, | |
}, | |
{ | |
nome: "Candidato_17", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
{ | |
nome: "Candidato_18", | |
prioridade: 0, | |
espectro: "direita", | |
genero: "homem", | |
etnia: "branca", | |
expressao: false, | |
}, | |
]; | |
console.log("candidatos PRÉ avaliação"); | |
console.log(candidatos); | |
const avaliar = async function(candidatos) { | |
let numeroCandidatos = candidatos.length; | |
let i = 0; | |
while (i < numeroCandidatos) { | |
console.log(`candidate ${[i]} espectro is ${candidatos[i].espectro}`); | |
if (candidatos[i].espectro === 'direita' || candidatos[i].espectro === 'centrodireita') { | |
console.log(`candidato ${[i]} espectro é de direita: ${candidatos[i].espectro}`); | |
i++; | |
continue; | |
} | |
switch (candidatos[i].espectro) { | |
case "esquerda": | |
candidatos[i].prioridade = candidatos[i].prioridade + 3; | |
break; | |
case "centroesquerda": | |
candidatos[i].prioridade = candidatos[i].prioridade + 2; | |
break; | |
default: | |
candidatos[i].prioridade = candidatos[i].prioridade + 1; | |
} | |
switch (candidatos[i].genero) { | |
case "mulher": | |
candidatos[i].prioridade = candidatos[i].prioridade + 1; | |
break; | |
default: | |
break; | |
} | |
switch (candidatos[i].etnina) { | |
case "branco": | |
break; | |
default: | |
candidatos[i].prioridade = candidatos[i].prioridade + 1; | |
break; | |
} | |
switch (candidatos[i].expressao) { | |
case true: | |
candidatos[i].prioridade = candidatos[i].prioridade + 1; | |
break; | |
default: | |
break; | |
} | |
i++; | |
} | |
} | |
avaliar(candidatos); | |
// console.log('candidatos pós avaliação'); | |
// console.log(candidatos); | |
candidatos.sort((a, b) => b.prioridade - a.prioridade); | |
console.log('candidatos pós avaliação e ordenamento prioridade'); | |
console.log(candidatos); | |
// ordena por prioridade, e então por gênero, e então por etnia, e então por participação em comunidade LGBTQIA+ | |
candidatos.sort((a, b) => { | |
// ordena por prioridade | |
let ordem = b.prioridade - a.prioridade; | |
// se prioridades iguais, então ordena também por gênero | |
if (ordem === 0) { | |
if (a.genero === b.genero) { | |
ordem = 0; | |
} else if (a.genero === "mulher") { | |
ordem = -1; | |
} | |
// se prioridade e genero são iguais, prioriza etnias que não sejam "branca" | |
if (ordem === 0) { | |
if (a.etnia === b.etnia) { | |
ordem = 0; | |
} else if (a.etnia === "branca") { | |
ordem = 1; | |
} else { | |
ordem = -1; | |
} | |
} | |
// se prioridade, gênero e etnias são iguais, priorizar os que se identificam como LGBTQIA+ | |
if (ordem === 0) { | |
if (a.expressao === b.expressao) { | |
ordem = 0; | |
} else if (a.expressao === true) { | |
ordem = 1; | |
} else { | |
ordem = -1; | |
} | |
} | |
} | |
return ordem; | |
}); | |
console.log("candidatos pós avaliação e ordenamento por prioridade, gênero e etnia"); | |
console.log(candidatos); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment