Volta para Casa

Depois de uma semana em Florianópolis, estou novamente em Itajaí. Voltei anteontem no final da tarde e o motivo de não ter postado nada é que eu tinha que acabar um trabalho, o site da BEMFAM: tableless, padrões web, cross-browser, PHP/MySql, totalmente administrável. Esse foi o segundo serviço que eu fiz para a Meetweb, depois da Coalizão Antituberculose. Esse ano estou deixando de trabalhar fora (no Colégio) para pegar esses sites de fora que me rendem um pouco mais e são bem mais legais de se fazer (principalmente quando trabalho com designers).

Na semana em Floripa, além de ir à práia, li três livros que merecem ser sugeridos: o best-seller O Código da Vinci, de Dan Brown; Fortaleza Digital, também de Dan Brown; e Harry Potter e o Enigma do Príncipe, o sexto livro de J. K. Rowling. O estilo do Dan Brown é muito legal. Além de ser um cara extremamente inteligente, criando enigmas muito interessantes durante o livro, ele consegue prender a atenção do leitor de forma incrível. Gostei bastante… Agora estou querendo comprar o seu outro livro, Anjos e Demônios. Ou se alguém quiser me presentear, ficarei grato. :D

Passei o ano novo em um lugar de Laguna chamado “Mato Alto”, uma região que, segundo meus cálculos, está no mínimo uns 10 anos atrasada no tempo. :) O bom é que num lugar desses, não se tem nada pra fazer e então eu aproveitei pra ficar lendo sem stress o livro Algoritmos: Teoria e Prática e; aliás, fiz alguns testes inúteis, como descobrir o custo dos algoritmos de ordenação se forem executados por pessoas. Os resultados são bem interessantes. Por exemplo, o Insertion Sort é MUUUITO mais rápido que o Merge Sort, já que você põe todas as cartas que já foram empilhadas na sua mão e com a outra simplesmente coloca uma carta no meio do bolo. O Merge Sort já é bem mais difícil porque você precisa fazer pilhinhas na mesa… :)

Nessa semana, vou tentar pegar o PhotoX, mas não muito intensamente, porque estou agora mais tranquilo lendo e estudando de leve.

Ah… Finalmente o desktop de minha casa tem um novo HD. Foi uma troca boa… Um HD corrompido de 20gb por um de 80gb… :D Agora tenho um bom lugar pra backups! Já tá particionado pra Linux e pra Windows.

Vou começar a postar alguns artigos explicativos, pequenos tutoriais, sobre coisas simples para quem está iniciando em algoritmos computacionais, PHP, tableless, Linux, etc. Tenho recebido vários e-mails pedindo sugestões de apostilas e essas coisas de onde começar e acho que seria legal até pra aumentar as visitas do meu site, meu pagerank, e conseqüentemente, o dinheiro do Google Adsense. :D Aliás, você já acessou meu site usando Internet Explorer? Acho que o negócio que eu fiz foi um dos mais legais pra ganhar uns trocados com o Firefox / Google Toolbar.

Programação Orientada a Objetos

Estou finalmente começando a aprender orientação a objetos. É claro que o conceito eu já conhecia e até como usar “cin” e “cout” no C++, mas agora resolvi estudar a fundo a Programação Orientada a Objetos, porque vejo que ela está cada vez mais comum entre os programadores. Estou aproveitando pra aprender C++, o que pode ser bastante útil em olimpíadas, para ter strings com o tipo string, poder declarar variáveis no meio, além de programar orientado a objetos.

Hmmm… Eu estava lendo uns tutoriais de introdução a POO e agora vou tentar fazer algumas coisas em C++ e em PHP também (porque é uma linguagem que eu domino mais, fica mais fácil entender POO). Se alguém quiser estudar comigo, entre em contato (e a mesma coisa se alguém tiver uma apostila legal e está afim de ajudar).

XUL

Durante as aulas, estou estudando XUL. É uma linguagem de interface gráfica, tipo um HTML, mas que tem umas coisas bem interessantes. O único problema é que só roda em Mozilla… E também estou aumentando bastante meu conhecimento de JavaScript utilizando XUL e iniciando uma fase nova de tableless com DOM. :)

Meetweb, tableless

Semana passada eu peguei dois serviços da Meetweb. São serviços de converter um site para tableless e programá-lo em PHP usando banco de dados MySql (ou seja, minha especialidade). Por isso também, estou entrando nessa nova fase de tableless que citei no parágrafo acima.

Desvendando os segredos do C

É incrível que quando eu estudei C no início eu passei por alguns conceitos que na época eu achava complicados. Além dos operadores binários que o Paulo Matias me ensinou semana passada, ontem é que eu finalmente aprendi as funções de alocação dinâmica do C… E é tão simples! :D

Olimpíada Regional de Matemática

Ontem fiz a prova da segunda fase (final) da Olimpíada Regional (catarinense) de Matemática. Dos cinco problemas, resolvi quatro e acho que acertei três e meio. Um deles eu pensei certo, mas dei a resposta errada… Mas já que a prova era discursiva, acredito que eles dêem no mínimo metade dos 20 pontos do problema. Não sei se dá pra ganhar medalha, porque a prova tava bem fácil então mais gente deve ter ido bem.

Problemas Lógicos

Estou meio parado quanto a solução de problemas lógicos, mas estou estudando bastante para resolvê-los de forma melhor. Por enquanto, nenhum código novo. Tenho uma lista de problemas da UVa para resolver e ainda falta o último problema do capítulo 1 do USACO Training Gateway (Checkers Challenge).

De volta à resolução de problemas

Resultado do Superprime Rib

Hoje, depois de umas férias de dois meses, resolvi um problema lógico do USACO Training Gateway: o Superprime Rib é um problema bem simples em que precisa-se determinar os primos de N dígitos (com N máximo = 8 ) que, tirando o último dígito, continuam sendo primos. A solução é trivial, uma função recursiva bastante simples que se auto-explica no meu código:

//Superprime Rib - USACO Training Gateway - 2005

/*
ID: contato1
PROG: sprime
LANG: C
*/

#include <stdio.h>
#define NMAX 9
#define INFINITO 100000

int primos[NMAX][INFINITO], cont[NMAX];

int eh_primo(long int num) {
	int i;

	if (num==1||(!(num%2)&&num!=2)) {
		return 0;
	}

	for (i=3; i*i<=num; i+=2) {
		if (!(num%i)) {
			return 0;
		}
	}

	return 1;
}

void funcao(int n) {
	int i, j, num;

	cont[n]=0;

	if (n>1) {
		funcao(n-1);

		for (i=0; i<cont[n-1]; i++) {
			for (j=1; j<=9; j+=2) {
				num=primos[n-1][i]*10+j;
				if (eh_primo(num)) {
					primos[n][cont[n]++]=num;
				}
			}
		}
	} else {
		primos[1][0]=2;
		primos[1][1]=3;
		primos[1][2]=5;
		primos[1][3]=7;
		cont[1]=4;
	}
}

int main() {
	int n, i;

	FILE *in=fopen("sprime.in", "r");
	FILE *out=fopen("sprime.out", "w");
	fscanf(in, "%d", &n);
	fclose(in);

	funcao(n);

	for (i=0; i<cont[n]; i++) {
		fprintf(out, "%d\n", primos[n][i]);
	}
	fclose(out);

	return 0;
}

O problema passou de segunda porque na primeira, por falta de hábito, eu tinha colocado scanf e printf ao invés de usar o sistema da USACO onde deve-se usar arquivos de entrada e saída.

Agora para eu ir para a seção 2 do USACO Training Gateway falta só o programa Checker Challenge, que parece ser complicado.

Instalei os pacotes do Slackware 10.2, que saiu essa semana, no laptop. Não tem nenhuma grande mudança, mas é sempre bom estar com os programas atualizados…

O Paulo Matias (Thotypous) me convidou para fazer parte da equipe de desenvolvimento da distro Guaranix, consertando alguns bugs do XDirectFB (que eu citei aqui). Acho que irei pegar um trabalho com a Meetweb também (o Hugo Dias, para quem eu fiz o serviço da Coalizão Antituberculose me convidou) e estou acabando o site do Colégio Salesiano, que é totalmente administrável em PHP e usa um banco de dados MySql. Ele deve sair semana que vem…

Dia 24 é a segunda fase da Olimpíada Regional de Matemática. Essa semana fiz a folhinha de treinamento e dos seis problemas, consegui fazer cinco (na verdade, alguns problemas - ou todos - eram repetidos do ano anterior e por isso fica mais fácil, porque eu já lembrava o caminho).

© 2005–2020 Tiago Madeira