TopCoder - Campeonatos de Programação ($$$)

pra quem não conhece … www.topcoder.com
é um site que organiza torneios de logica de programação, design e entre outras coisas… muito Geeks heheh

gostaria muito de entrar em contato (via MSN ou MP se possivel) e saber quem participa
ou quer participar…

pretendo formar uma equipe para começar a participar dos torneios por diversão, e kem sabe ganhar uma $$.
no site tem mais informações

para vcs terem uma ideia de como eh o torneio de algoritmos…

eu resolvi um teste deles agora pouco… (levei 55 minutos ¬¬)
nao sei nem se fikou bom o suficiente … mas o importante eh q funciona do jeito q o Enunciado pede…

Enunciado (ingles)

[quote]
Problem Statement

Suppose there is a triangle of digits like the following:
74932
1325
457
92
1
Each digit, with the exception of those in the top row, is equal to the last
digit of the sum of its upper and upper-right neighboring digits.
You will be given a String[] questionMarkTriangle containing a triangle
where only one digit in each row is known and all others are represented
by '?'s (see example 0 for clarification). Each element of questionMarkTriangle
represents a row of the triangle, and the rows are given from top to bottom.
Each element contains exactly one digit (‘0’-‘9’) and the remaining characters
are all '?'s. Restore the triangle and return it as a String[] without '?'s.

Definition
Class: RevealTriangle
Method: calcTriangle
Parameters: String[]
Returns: String[]
Method signature: String[] calcTriangle(String[] questionMarkTriangle)
(be sure your method is public)

Constraints

  • questionMarkTriangle will contain between 1 and 50 elements, inclusive.
  • Element i (0 indexed) of questionMarkTriangle will contain exactly n-i characters, where n is the number of elements in questionMarkTriangle.
  • Each element of questionMarkTriangle will contain exactly one digit (‘0’-‘9’) and all others characters will be '?'s.

Examples
0)
{“4??”,
“?2”,
“1”}
Returns: {“457”, “92”, “1” }
Let’s substitute '?'s with unknown variables:
4ab
c2
1
Having done that, we start solving for the variables from the bottom to the top.
First, we know that the last digit of (c + 2) is 1. Therefore, c must be 9:
4ab
92
1
Now we know that the last digit of (4 + a) is 9, which means a is 5:
45b
92
1
And, finally, the last digit of (5 + b) is 2, so b is 7.

{“1”}
Returns: {“1” }

{"???2", “??2”, “?2”, “2”}
Returns: {“0002”, “002”, “02”, “2” }

{"??5?", “??9”, “?4”, “6”}
Returns: {“7054”, “759”, “24”, “6” }[/quote]

Minha resoluação do problema… 100% funcionando

public class RevealTriangle {
	
	public static void main(String[] args) {
		new RevealTriangle();
	}
	
	public RevealTriangle(){
		String[] param = {"?2???????","?????5??","????7??","?3????","1????","??5?", "??9", "?4", "6"};
		for(int i=0; i<param.length;i++){
			System.out.println(param[i]);
		}
		
		param = calcTriangle(param);
		for(int i=0; i<param.length;i++){
			System.out.println(param[i]);
		}
	}

	public String[] calcTriangle(String[] str){
		int tam = str.length;
		String[] saida = new String[tam];
		saida[tam-1]=str[tam-1];
		
		if(tam>1){
			String linha;
			String linhaBaixo;
			for(int i=tam-2; i>=0; i--){
				linha = str[i];
				linhaBaixo = saida[i+1];
				boolean done = false;
				for(int x=0; !done; x++){
					if(linha.charAt(x)=='?'){
						if(x==0){ // se for o primeiro, pega o da frente
							if(linha.charAt(x+1)!='?'){ //se NAO é ?
								char[] a = linha.toCharArray();
								a[x] = trataNum(linhaBaixo.charAt(x) - linha.charAt(x+1));
								linha = new String(a);
							}
						}else{ // se nao.. pega o de tras
							if(linha.charAt(x-1)!='?'){ //se NAO é ?
								char[] a = linha.toCharArray();
								a[x] = trataNum(linhaBaixo.charAt(x-1) - linha.charAt(x-1));
								linha = new String(a);
							}else{ // se for ?... pega o da frente
								if(linha.charAt(x+1)!='?'){ //se NAO é ?
									char[] a = linha.toCharArray();
									a[x] = trataNum(linhaBaixo.charAt(x) - linha.charAt(x+1));
									linha = new String(a);
								}
							}
						}
					}
					done = true;
					for(int c=0;c<linha.length();c++){
						if(linha.charAt(c)=='?')
							done = false;
					}
					if(x==linha.length()-1)x=-1; 					
				}
				saida[i]=linha.toString();
			}	
		}else{
			return str;
		}
		return saida;
	}
	
	public char trataNum(int x){
		if(x>=10)x-=10;
		if(x<0)x+=10;
		x+=48;
		return (char)x;
	}
}

resolvi outro. agora a pouco…

por enquanto poucas pessoas entraram em contato…
espero q o numero aumente =)
pois é uma otima forma de estudar, e ganhar logica de programação

Enunciado (ingles)

[quote]
Problem Statement

There are some books, each consisting of exactly three parts: introduction,
story and edification. There is a reader who goes through the books and reads
various parts. Each time he finishes reading a part, he adds the name of the
part to the end of a list. He may read zero or more parts from each book, and
he can read them in any order, but he cannot read each part more than once.
Whenever he starts reading a new book, he can no longer go back and read any
parts of books he has looked at previously.
You are given a String[] readParts containing the list created by the reader.
Each element of readParts is “introduction”, “story” or “edification”
(quotes for clarity). Return the maximum possible number of books for which
the reader has read all three parts.

Definition

Class: ReadingBooks
Method: countBooks
Parameters: String[]
Returns: int
Method signature: int countBooks(String[] readParts)
(be sure your method is public)

Constraints

  • readParts will contain between 1 and 50 elements, inclusive.
  • Each element of readParts will be “introduction”, “story” or “edification”
    (quotes for clarity).

Examples
0)
{“introduction”, “story”, “introduction”, “edification”}
Returns: 1
It is possible that the reader has read the introduction from the first book
and all 3 parts from the second one. Of course, it is also possible that he
has read one part from four different books, but we are interested in the
maximal number of books for which all 3 parts have been read.

{“introduction”, “story”, “edification”, “introduction”, “story”, “edification”}
Returns: 2
Two books have been read in their entirety.

{“introduction”, “story”, “introduction”, “edification”, “story”, “introduction”}
Returns: 1

{“introduction”, “story”, “introduction”, “edification”, “story”,
“story”, “edification”, “edification”, “edification”, “introduction”,
“introduction”, “edification”, “story”, “introduction”, “story”,
“edification”, “edification”, “story”, “introduction”, “edification”,
“story”, “story”, “edification”, “introduction”, “story”}
Returns: 5[/quote]

Minha resolução do problema… 100% funcionando

public class ReadingBooks {
	
	public static void main(String[] args) {
		
		new ReadingBooks();
	}
	
	public ReadingBooks(){
		String[] enviar = {"introduction", "story", "introduction", "edification", "story",
				 "story", "edification", "edification", "edification", "introduction",
				 "introduction", "edification", "story", "introduction", "story",
				 "edification", "edification", "story", "introduction", "edification",
				 "story", "story", "edification", "introduction", "story"};
		int i = countBooks(enviar);
		
		System.out.println("Leu no máximo: "+i+" livros!");
	}
	
	boolean part[] = new boolean[3];
	int lidos = 0;
	public int countBooks(String[] parts){
		zera();
		int tipo;
		for(int i=0; i<parts.length; i++){
			tipo = getTipo(parts[i]);
			
			if(!part[tipo]){
				part[tipo]=true;
			}else{
				zera();
				part[tipo]=true;
			}
			
			if(part[0]&&part[1]&&part[2]){
				lidos++;
				zera();
			}
			
		}
		
		return lidos;
	}
	
	public void zera(){
		part[0]=false;
		part[1]=false;
		part[2]=false;
	}
	
	public int getTipo(String part){
		if(part.equals("introduction"))return 0;
		if(part.equals("story"))return 1;
		if(part.equals("edification"))return 2;
		System.out.println("erro");
		return 2;
	}
}

Se você está se divertindo com esse tipo de coisa, sugiro que dê uma olhada no Dojo São Paulo.

Grupo - http://groups.google.com.br/group/dojo_sp?hl=pt-BR
Blog - http://www.dojosp.epistemol.net/

No grupo temos informações do que é o Dojo, como funcionam as reuniões, relatos, fontes de problemas, códigos, etc. Participo há pouco tempo e, se você for de São Paulo, pode aparecer e participar de uma sessão pra ver se gosta. O pessoal é muito bom, bacana e receptivo. Pra quem pretende treinar programação é uma excelente opção. Faça-nos uma visita :wink:

sou de Santos…
mas ano q vem pretendo estar trabalhando em SP…

e kem sabe nao dou uma passada lah…
agradeço o convite =)

sera q nenhum dos seus amigos participa do TopCoder? creio q sim neh heheh
se for algo online eu gostaria de fazer parte

abraços

Não é online não. É presencial. Mas você pode participar das discussões no grupo, baixar os códigos gerados nas sessões, etc.
Ah… pergunte lá grupo se alguém participa do TopCoder (que eu saiba, não tem ninguém).

Tenho diversos amigos que participam do TopCoder. O nível da competição é altissimo. Você vai sentir que é extremamente dificil esses de “lógico de programação”. E a maioria é individual também.

Outro que é interessante é o Project Euler. Alguns dos problemas são bobos e podem ser resolvidos por força bruta, mas outros são bem mais chatos.

EDIT - era www.projecteuler.NET, eu me enganei.

Se puder me apresentar alguns eu agradeço =)
Exatamente esse eh o motivo para participar, o nível…
dah pra sentir o peso do seu cerebro processando quando vc termina um exercicio desses…
vale muito a pena…

obrigado, vou olhar =)

Se puder me apresentar alguns eu agradeço =)
Exatamente esse eh o motivo para participar, o nível…
dah pra sentir o peso do seu cerebro processando quando vc termina um exercicio desses…
vale muito a pena…

obrigado, vou olhar =)[/quote]

Entra na lista: maratona@yahoogroups.com.br

A maior parte do pessoal que eu conheço e que participa é de lá.

[]'s

Se puder me apresentar alguns eu agradeço =)
Exatamente esse eh o motivo para participar, o nível…
dah pra sentir o peso do seu cerebro processando quando vc termina um exercicio desses…
vale muito a pena…

obrigado, vou olhar =)[/quote]

Entra na lista: maratona@yahoogroups.com.br

A maior parte do pessoal que eu conheço e que participa é de lá.

[]'s[/quote]

Nossa, eu não sabia que tinha um grupo do Yahoo pra maratona. Eu participo do TopCoder (meu handler é afonseca) e este ano estou esperando ansioso pela ACM ICPC na regional do Paraná. :slight_smile: Outro que gosta desses problemas (eu acho) é o Paulo Silveira e o irmão dele (devem gostar… pra fazer o que o Paulo Silveira fez no mestrado, ele deve gostar). Aliás, na final brasileira caiu um problema sobre coisas geométricas loucas.

Quem aí participa da ACM ICPC? Eu não faço em Java, mas gosto bastante.

Se puder me apresentar alguns eu agradeço =)
Exatamente esse eh o motivo para participar, o nível…
dah pra sentir o peso do seu cerebro processando quando vc termina um exercicio desses…
vale muito a pena…

obrigado, vou olhar =)[/quote]

Entra na lista: maratona@yahoogroups.com.br

A maior parte do pessoal que eu conheço e que participa é de lá.

[]'s[/quote]

Nossa, eu não sabia que tinha um grupo do Yahoo pra maratona. Eu participo do TopCoder (meu handler é afonseca) e este ano estou esperando ansioso pela ACM ICPC na regional do Paraná. :slight_smile: Outro que gosta desses problemas (eu acho) é o Paulo Silveira e o irmão dele (devem gostar… pra fazer o que o Paulo Silveira fez no mestrado, ele deve gostar). Aliás, na final brasileira caiu um problema sobre coisas geométricas loucas.

Quem aí participa da ACM ICPC? Eu não faço em Java, mas gosto bastante.[/quote]

Tem sim! :lol:

Lá se discute de tudo, menos programação…hehehe…mas é a lista oficial da Maratona. :slight_smile:

Na minha época(não muito tempo atrás) eu tbm esperava ansioso pela regional. Bons tempos!!! Gostava muito de participar da Maratona…

lavh,

Você não tem vontade de fazer os exercícios que foram feitos na maratona passada?
Pega o pdf, vamos trocar umas idéias… tem uns exercícios cabulosos (o da bolha, zak galou, enfim).
Tem também a comunidade no orkut também com a galera.

Abraço.

soh pra avisar…

hj a noite… as 10pm (no Brasil)…
vai ter um SRM…

(exercicios tipo esses apresentados logo acima)
nao tenho certeza de quanto vai valer em dinheiro…
soh sei q eu vou estar participando…

a partir das 6pm estarei no MSN
kem kizer ajuda e trocar informações durante o teste…

MSN: alucardeck@bol.com.br