Skip to content

Instantly share code, notes, and snippets.

@renzon
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renzon/9612518 to your computer and use it in GitHub Desktop.
Save renzon/9612518 to your computer and use it in GitHub Desktop.
EstatiscaPythonBrasil
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
CADERNOS = [[13, 8, 19],
[3, 18, 4],
[14, 9, 20],
[14, 8, 10],
[1, 7, 2],
[3, 2, 10],
[10, 16, 7],
[16, 8, 12],
[6, 2, 11],
[16, 19, 20],
[14, 13, 21],
[6, 21, 17],
[6, 3, 20],
[4, 7, 17],
[1, 17, 11],
[4, 1, 10],
[5, 15, 2],
[12, 9, 18],
[19, 1, 15],
[1, 14, 5],
[14, 18, 11],
[11, 21, 8],
[2, 9, 19],
[13, 6, 18],
[3, 11, 12],
[11, 16, 9],
[3, 15, 17],
[5, 12, 4],
[2, 4, 8],
[18, 8, 17],
[8, 3, 5],
[15, 14, 6],
[7, 9, 13],
[12, 1, 21],
[10, 5, 13],
[14, 19, 12],
[6, 1, 8],
[10, 20, 11],
[9, 5, 17],
[13, 2, 12],
[15, 20, 4],
[6, 9, 10],
[21, 15, 16],
[1, 3, 9],
[11, 19, 5],
[16, 4, 14],
[7, 6, 12],
[15, 10, 12],
[7, 8, 20],
[1, 13, 20],
[20, 21, 2],
[14, 17, 2],
[5, 7, 21],
[15, 8, 9],
[3, 21, 19],
[13, 16, 3],
[12, 17, 20],
[6, 5, 16],
[10, 18, 21],
[4, 6, 19],
[2, 18, 16],
[13, 17, 15],
[7, 19, 18],
[14, 7, 3],
[13, 4, 11],
[18, 16, 1],
[10, 19, 17],
[11, 15, 7],
[21, 4, 9],
[18, 20, 5]]
class FrequenciaDeBloco(object):
def __init__(self, bloco, posicoes_disponiveis=3):
self.posicoes = [0 for i in xrange(posicoes_disponiveis)]
self.bloco = bloco
self.ocorrencias_totais = 0
def colocar_em_posicao(self, posicoes_permitidas):
posicao_escolhida = posicoes_permitidas[0]
for p in posicoes_permitidas[1:]:
if self.posicoes[posicao_escolhida] > self.posicoes[p]:
posicao_escolhida = p
self.posicoes[posicao_escolhida] += 1
self.ocorrencias_totais += 1
return posicao_escolhida
def __str__(self):
return 'Frequencia do bloco %s: %s' % (self.bloco, self.posicoes)
class CadernosBalanceados(object):
def __init__(self):
self._cadernos = []
self._frequencias_de_blocos = {}
def __getitem__(self, item):
return self._cadernos[item]
def adicionar_caderno(self, caderno):
def encontrar_ou_criar_frequencia(bloco):
if bloco not in self._frequencias_de_blocos:
self._frequencias_de_blocos[bloco] = FrequenciaDeBloco(bloco)
return self._frequencias_de_blocos[bloco]
frequencias = [encontrar_ou_criar_frequencia(b) for b in caderno]
frequencias.sort(key=lambda freq: freq.ocorrencias_totais)
posicoes_possiveis = range(len(caderno))
caderno_alterado = range(len(caderno))
for freq in frequencias:
posicao_escolhida = freq.colocar_em_posicao(posicoes_possiveis)
posicoes_possiveis.remove(posicao_escolhida)
caderno_alterado[posicao_escolhida] = freq.bloco
self._cadernos.append(caderno_alterado)
def __str__(self):
return 'Cadernos: '+str(self._cadernos)+'\n'+\
'\n'.join([str(freq) for freq in self._frequencias_de_blocos.itervalues()])
cadernos_balanceados = CadernosBalanceados()
for caderno in CADERNOS:
cadernos_balanceados.adicionar_caderno(caderno)
print cadernos_balanceados
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment