No último fim de semana aconteceu a primeira fase da Maratona de Programação (a fase sub-regional da ACM-ICPC) no Brasil. Essa prova é feita em várias sedes no país e serve como classificatória para a fase nacional, que esse ano acontece em Salvador.
Participaram mais de 700 equipes, e cerca de 70 se classificam para a fase seguinte de acordo com múltiplas regras como a colocação no Brasil e a colocação na sede. Esse ano, participei com a equipe do ITA (CalopsITA) junto com o Lucas França e o Lucas Soares, todos no nosso último ano de participação, e conseguimos o quarto lugar no Brasil!
Projetos e códigos
segunda-feira, 17 de setembro de 2018
terça-feira, 24 de julho de 2018
Programação Dinâmica com dígitos [Pt 3]: Editorial
Vamos aqui abordar dois problemas que são bons exemplos de PD com dígitos e não são fáceis:
Spoj NUMTSN: 369 Numbers (link para o problema)
Codeforces 2015-2016 Petrozavodsk Winter Training Camp: Maximum Product (link para o problema)
Spoj NUMTSN: 369 Numbers (link para o problema)
Codeforces 2015-2016 Petrozavodsk Winter Training Camp: Maximum Product (link para o problema)
Programação Dinâmica com dígitos [Pt 2]
Na parte 1, vimos como resolver o problema de quantos números existem entre 0 e B com uma propriedade, e dissemos que para computar de A a B basta fazer de 0 a B menos de 0 a A-1. O problema é que nem sempre dá certo. Por exemplo, se quisessemos o número entre A e B com maior soma de dígitos, essa estratégia não funcionaria!
Vamos agora ver como resolver de outra forma então, mais genérica, mas que pode ser mais lenta.
Como exemplo, vamos usar o problema: quantos números menores que X e maiores que Y existem tal que a soma dos dígitos é exatamente 20.
Vamos agora ver como resolver de outra forma então, mais genérica, mas que pode ser mais lenta.
Como exemplo, vamos usar o problema: quantos números menores que X e maiores que Y existem tal que a soma dos dígitos é exatamente 20.
Programação Dinâmica com dígitos [Pt 1]
Programação dinâmica (PD) em dígitos é uma subclasse dos problemas de PD. Existem muitas variações, nessa parte falamos da forma: Dado um intervalo A e B, quantos números x, A <= x <= B, tem uma propriedade específica.
No nosso caso, vamos usar o problema: quantos números menores que X existem tal que a soma dos dígitos é exatamente 20. Existem várias formas de resolver, e irei mostrar uma.
No nosso caso, vamos usar o problema: quantos números menores que X existem tal que a soma dos dígitos é exatamente 20. Existem várias formas de resolver, e irei mostrar uma.
domingo, 9 de agosto de 2015
Cultivando strings (Growing Strings): dois caminhos
Mais um problema interessante, da ACM/ICPC South America, do contest de 2010! O problema é Cultivando Strings (ou Growing Strings, em inglês), e vou (tentar :) ) resolver por duas formas diferentes: o algoritmo de Aho-Corasick e Suffix Arrays.
URI 1141 - Cultivando Strings / Growing Strings (link)
(A partir daqui, vou supor que você conhece os métodos. Se não for o caso, google it! Se algum dia eu escrever alguma coisa sobre um dos dois, edito o link aqui).
sexta-feira, 10 de julho de 2015
Jogo no servidor e cliente
O servidor e o cliente do nosso jogo funcionam em cima de uma mesma estrutura básica, mas há diferenças grandes entre eles.
Para começar, nosso servidor deve ser anti-cheating. O player pode alterar sua posição de um jeito "ilegal" e mandar para o servidor e... Opa, devemos tratar isso. E se ele quiser roubar uns pontos de vida? Para evitar isso, usamos um servidor autoritário: o cliente envia inputs para o servidor e desenha na tela, além de atualizar localmente o que recebe remotamente, enquanto nós processamos tudo.
Para começar, nosso servidor deve ser anti-cheating. O player pode alterar sua posição de um jeito "ilegal" e mandar para o servidor e... Opa, devemos tratar isso. E se ele quiser roubar uns pontos de vida? Para evitar isso, usamos um servidor autoritário: o cliente envia inputs para o servidor e desenha na tela, além de atualizar localmente o que recebe remotamente, enquanto nós processamos tudo.
quinta-feira, 9 de julho de 2015
Trabalhando com JavaScript Object Notation (JSON)
Algumas propriedades de um jogo devem ser definidas de maneira que seja fácil trocar posteriormente. Por exemplo, a massa de um corpo no qual age uma força, coeficientes de atrito entre outras propriedades físicas. Isso porque não existe um valor "ideal" para tais características. E só há um jeito de descobrir a melhor massa, ou força, ou qualquer propriedade: testando.
Geralmente essas propriedades são utilizadas em vários lugares, então o ideal é armazená-las em um arquivo de configuração, de forma que até quem não viu o código (ou mesmo quem não entende de programação) possa alterá-las.
Geralmente essas propriedades são utilizadas em vários lugares, então o ideal é armazená-las em um arquivo de configuração, de forma que até quem não viu o código (ou mesmo quem não entende de programação) possa alterá-las.
Assinar:
Postagens (Atom)