Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save celsobessa/597b41607dc34e7b1063bfefa0a61565 to your computer and use it in GitHub Desktop.
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
# 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
<!--
// 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
// 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