ETAPAS

ETAPA 7 (21/10) – E A EQUIPE CAMPEÃ FOI … #DESCUBRA

A última etapa do BXCOMP 2015 foi realizada na quarta-feira (21/9) e contou com a presença de catorze das vinte equipes inscritas, além dos representantes das empresas que apoiaram culturalmente o campeonato, Paulo Mirleu da TecSinapse e Marcos Soledade da Quantica, de professores do curso de SI – Fábio Nakano, Flávio Coutinho, Luciano Digiampietri e Sarajane Marques Peres (tutora do grupo PET-SI) – e da imprensa da EACH. Excepcionalmente nesta etapa, o ranking fora atualizado concomitantemente com as submissões das equipes, permitindo que elas acompanhassem a classificação em tempo real.

Nesta etapa, o nível de dificuldade estava mais voltado à lógica matemática. Foram contemplados os seguintes desafios: Identifying Expressions, Termo de Compromisso, De volta para o Passado e Dobradura.

O primeiro desafio, Identifying Expressions, mostrou-se como o de maior nível de dificuldade do campeonato, e exigia-se dos competidores a compreensão do enunciado em um nível básico de língua inglesa. Neste problema, era necessário que o competidor permutasse os operandos de adição, subtração e multiplicação entre um conjunto de números fornecidos como entrada, a fim de se obter uma expressão algébrica válida.

O segundo desafio, Termo de Compromisso, consistia em um exercício de decodificação de strings recebidos como entrada. Eram apresentados os passos para realizar a codificação de uma string e a equipe deveria implementar o processo inverso para decodificar a mesma.

O terceiro desafio, De Volta para o Passado, foi produzido em comemoração à emblemática data do dia 21 de outubro de 2015, os competidores precisavam ajudar Martino e Doc Brownie a ativarem sua “máquina do tempo” através do desenvolvimento de um programa que verificasse uma condição estabelecida no enunciado. A principal dificuldade encontrada nesse desafio foi que algumas equipes utilizaram uma variável do tipo inteiro para armazenar o número fornecido como entrada, mas havia casos de teste em que o número ultrapassava a capacidade da mesma. A solução para esse problema seria o uso de uma variável do tipo long ou da classe BigInteger.

Por último, o desafio Dobradura pedia a elaboração de um algoritmo que calculasse os números de papéis resultantes a partir do recorte de uma folha quadrada submetida a um determinado número de “operações de dobradura”.

Dessa vez, devido a um maior grau de dificuldade encontrado nos desafios, nenhuma equipe resolveu todos os exercícios propostos dentro do tempo determinado para a etapa. Entretanto, nove equipes conseguiram solucionar o desafio De volta para o Passado, mais voltado para a programação, e apenas quatro equipes resolveram os desafios Termo de compromisso e Dobradura, mais voltados para lógica matemática. Em relação ao desafio Identifying Expressions, por ser o desafio mais difícil do campeonato, conforme anteriormente citado, nenhuma equipe conseguiu resolvê-lo.

No final da disputa, a equipe “Milionário e José Rick” sagrou-se como a campeã; a equipe “Bags without handle” garantiu o segundo lugar; e a equipe “Dunder Mifflin” completou o pódio com o terceiro lugar.

Durante a cerimônia de premiação, Marcos e Paulo discorreram brevemente sobre as empresas aos quais estavam representando e, juntamente com os professores, congratularam os competidores pelo empenho e dedicação apresentados durante todo o campeonato. Por fim, as medalhas foram entregues às três equipes mais bem colocadas pelos ex-petianos que ajudaram a organização durante o campeonato.

Encerramos mais uma edição do BXCOMP e agradecemos a todos que participaram pelo sucesso de mais um campeonato!

Final_BX


Seguem os links para os desafios da sétima etapa, cada um acompanhado de uma possível solução. Com eles em mãos, é possível identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 6 (14/10) – O dobro de pontos, o dobro de pressão

A sexta etapa do BXComp -etapa TecSinapse – ocorreu nesta quarta-feira (14/10) e foi a penúltima do campeonato. Com o campeonato em sua reta final e os desafios valendo o dobro, a programação ficou ainda mais sob pressão. Participaram da etapa quinze das vinte equipes inscritas no campeonato e, durante a abertura, que contou com a presença do coordenador do curso, o Prof. Dr. Luciano Digiampietri, foi feita uma introdução da empresa TecSinapse, sua área de atuação e alguns de seus principais clientes.

Na etapa, foram propostos três desafios, desenvolvidos em parceria com a TecSinapse, que tem apoiado o campeonato, e contextualizados com base em soluções reais desenvolvidas pela empresa. O primeiro era o desafio “Jolie” em que, a partir da localização do usuário e do conceito mínimo exigido por ele para um salão de beleza, bem como das localizações e conceitos dos salões de beleza na área, deveriam ser retornados, em ordem de menor distância, os salões que atendessem ao critério de conceito do cliente.

Devido a um espaço em branco a mais no arquivo de entrada dos casos de teste no BOCA (sistema que utilizamos para fazer os julgamentos), foi necessário revisar as submissões manualmente após o fim da etapa. Isso ocorreu porque uma das soluções possíveis para a leitura da entrada do desafio seria ler as linhas de entrada utilizando o método “nextLine” da classe Scanner, transformando-as em   inteiros com o método “parseInt” da classe “Integer”. Com o espaço em branco, gerava-se uma exceção neste método, que poderia ter prejudicado algumas equipes. Ao fim da análise, conclui-se que além das duas equipes que haviam acertado o desafio durante a etapa, mais uma equipe teria acertado se não houvesse esse erro. Assim, três equipes resolveram o desafio “Jolie”.

Ressaltamos que, apesar de o uso do “nextLine” ser uma abordagem possível, ele exige mais cuidados com o código, pois vários detalhes podem resultar em erros de execução. Por isso, em casos em que a quantidade de números inteiros que devem ser lidos é conhecida, é preferível utilizar o método “nextInt” da classe Scanner, específico para ler entradas de números inteiros.

O segundo desafio, “Entrega Rápida” era o mais simples e não por coincidência foi o desafio com maior número de acertos: doze das quinze equipes presentes acertaram o desafio. Sua proposta era encontrar o melhor período do dia para fazer uma entrega, dados um ponto de origem e um de destino representados por letras do alfabeto e os tempos levados para percorrer os trechos entre esses dois pontos em quatro períodos do dia. Cada trecho correspondia aos “espaços” entre as letras que separam alfabeticamente a origem do destino.

O terceiro desafio, contextualizado com a distribuição de automóveis de uma montadora para as concessionárias, tinha como tarefa verificar se era possível atender minimamente aos pedidos das concessionárias com a produção da montadora. Atender minimamente aos pedidos significava atender pelo menos um dos pedidos de cada concessionária. Esse desafio teve nove acertos e todas as equipes que acertaram esse desafio acertaram também o desafio “Entrega Rápida”.

O campeonato está quase no fim, mas ainda temos mais uma etapa para vocês aproveitarem, se divertirem e aprender. Que mudanças podem ter ocorrido no ranking após mais uma etapa valendo o dobro de pontos? Isso vocês só saberão semana que vem, já que, conforme definimos no regulamento, o ranking da sexta etapa não será divulgado.

Aguardamos a presença de vocês na próxima quarta-feira, dia 21/10, para prestigiar o encerramento de nosso campeonato, com a entrega das medalhas às equipes mais bem colocadas e de uma premiação surpresa à equipe que conquistar o primeiro lugar. Ansiosos pelo gran finale? Nós estamos! Não deixem de comparecer :)

 


Seguem os links para os desafios da sexta etapa, cada um acompanhado de uma possível solução. Com eles em mãos, é possível identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 5 (07/10) – Programação level hard

A quinta etapa do BXComp 2015 ocorreu na quarta-feira (7/10) e contou com a participação de catorze das vinte equipes inscritas, bem como do coordenador do curso, o Profº. Luciano Digiampietri.

Nessa etapa, foram propostos três desafios: Tempo Livre, RPG e Onda Triangular. No primeiro, além do número de casos de testes, recebia-se como entrada um inteiro que indicava o número de atividades desenvolvidas por um estudante ao longo de um dia (considerando-se o período das 10h00min às 22h00min), cada qual especificada posteriormente a partir de seu horário de início, de término e breve descrição. O objetivo deste desafio era encontrar, dentre todas as atividades listadas, o maior intervalo de tempo livre. No segundo desafio, contextualizava-se um jogo RPG em que cada personagem poderia ser descrito a partir de três atributos – vida, poder e agilidade -, com possível variação dos respectivos valores para cada qual. O objetivo deste desafio era verificar, baseando-se nas regras previamente definidas para as batalhas, se um herói conseguiria destruir os monstros de uma simulação com seus atributos e, então, salvar a princesa. No terceiro e último desafio, recebia-se como entrada, além do número de casos de testes, dois valores inteiros que indicavam a frequência e amplitude máxima de uma onda triangular, caracterizada por uma ascendência linear até a crista e posterior descendência linear até a amplitude mínima. Neste sentido, a tarefa consistia em desenhar uma onda triangular de amplitude mínima 1, com a frequência e amplitude máxima previamente informados, desconsiderando-se seus vales.

Entre os erros de submissão cometidos nessa etapa, destacam-se “Runtime Error”, “Compilation Error”, “Presentation Error” e, principalmente, “Wrong answer”. No primeiro desafio, o erro mais cometido foi imprimir o horário de término do intervalo de tempo livre ao invés do horário de início deste. No segundo, por sua vez, o erro mais comum foi não tratar a situação em que herói e personagem apresentavam valores iguais para agilidade, porém o poder do monstro era maior, o que, pela regra, o faria atacar primeiro. Por fim, no terceiro desafio o erro mais frequente foi a apresentação errônea da onda, sem a quebra de linha após cada caso de teste.

Lembrando que cada desafio submetido corretamente valeu 4 pontos para a equipe e, nesta etapa, foram consideradas as submissões erradas, bem como tempo de resolução dos desafios como critério de desempate. A próxima etapa, que ocorrerá dia 14/09, será a etapa especial da TecSinapse e, assim como a Etapa Quantica, valerá o dobro de pontos. Aproveitem o feriadão e pratiquem bastante programação! Até a próxima :)


Seguem os links para os desafios da quinta etapa, cada um acompanhado de uma possível solução. Com eles em mãos, é possível identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 4 (30/09) – Quatro desafios? E agora?

Chegou a quarta etapa do BXComp e, junto com ela, um maior desafio do que os próprios quatro desafios propostos: como ministrar o tempo e atenção dos integrantes de cada equipe para maximizar o desempenho.

Foram propostos quatro desafios: “Tradutor de Braille”, “Quem é o maior”, “Somando Placas” e “Alô, Alô, Marciano!”. Em “Tradutor de Braille”, a tarefa era elaborar um programa que traduzisse uma mensagem, composta apenas por dígitos, de decimal para Braille. No segundo, “Quem é o maior?”, um programa que, dada uma palavra como entrada, respondesse se o balanceamento da palavra de entrada era ou não possível segundo as regras de balanceamento expostas no enunciado e, em caso positivo, como se dava esse balanceamento. Em “Somando Placas”, a partir dos algarismos de placas de carro fornecidas como entrada, o objetivo era somá-los até obter um número de um só algarismo. E, por último, em “Alô, Alô, Marciano!”, o programa precisava fornecer a quantidade de dedos que o marciano deveria possuir para que o número de bolinhas fornecido por ele (e passado via entrada) fosse igual ao número, em base decimal, contado por um terráqueo (também dado como entrada do programa).

Aparentemente, a grande maioria das equipes seguiu o conselho dado no final da terceira etapa e iniciaram sua participação com a leitura de todos os desafios para poder mensurar qual apresentava menor dificuldade, começando então pelo Desafio 3 – Placas, que, também pela visão da organização, seria o desafio de mais fácil e rápida resolução. Com isso, 14 equipes resolveram pelo menos um dos desafios propostos e dentre essas, 13 submeteram primeiro o Desafio 3.

Dos outros 3 desafios propostos, o Desafio 1 – Braille, foi resolvido por 6 equipes, o Desafio 2 – Balanceamento, por 4, e o Desafio 4 – Marciano, também por 4 equipes.

Uma das dificuldades que percebemos que alguns competidores tiveram nessa etapa foi a necessidade de utilização do tipo “BigInteger” e não do tipo inteiro na resolução do Desafio 1 – Braille, pois, aparentemente, não era de conhecimento de todos que não é possível usar o tipo inteiro para números maiores do que 231. O valor limite do tipo inteiro possui 10 dígitos somente  e no enunciado do exercício era especificado que o número de entrada – número do processo – teria de 1 a 20 dígitos. É importante ainda ressaltar que, para as equipes que utilizaram o tipo “String” para a leitura dos dígitos do processo passados como entrada, isso não foi um problema.

Nessa etapa ainda foi fornecido, no código de um dos desafios, o método de leitura da entrada (utilizando a classe “Scanner” e seu método “hasNext”), mas lembramos que é sempre recomendável conhecer essa classe e seu métodos, pois, em breve, a leitura da entrada deixará de ser fornecida.


Seguem os links para os desafios da quarta etapa, cada um acompanhado de uma possível solução. Com eles em mãos é possível identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 3 (23/09) – O dobro de pontos, o dobro de dificuldade

A terceira etapa do BXComp 2015 ocorreu na quarta-feira (23/09) e contou com a participação de dezenove das vinte equipes inscritas. Essa foi a primeira etapa temática desta edição e contou com a presença de Guilherme, funcionário da Quantica e egresso do curso Sistemas de Informação da EACH-USP que falou sobre mais uma parceria entre a empresa e o campeonato.

Para esta etapa foram propostos, novamente, 3 desafios: É plágio?Topografia e As crônicas do Pacífico. Para o primeiro desafio, as equipes tinham que determinar, a partir de duas sequências de notas musicais, se o segundo trecho consistia num plágio do primeiro. Em Topografia, era solicitada uma análise de um terreno para buscar possíveis buracos baseados na profundidade de cada marcação do solo e seus vizinhos. Já o último desafio, As Crônicas do Pacífico, tinha uma proposta mais lógica no qual era necessário encontrar uma solução para um enigma.

Entretanto, o nível de dificuldade foi mais elevado do que os desafios das últimas etapas e isso se refletiu na quantidade de acertos: apenas 5 submissões corretas sendo que nenhuma equipe conseguiu acertar mais de 1 desafios.

A maior dificuldade encontrada nas submissões foi o modo de apresentação da resposta. Diversas equipes acertaram a resolução do desafio, mas não respeitaram as determinações do enunciado e, por isso, tiveram como resposta um Presentation Error. Para os que não se recordam quais as possíveis causas de erros é recomendado olhar o manual referente ao BOCA (http://goo.gl/8tuWWu) novamente para as próximas etapas, já que eventuais dúvidas acerca do conteúdo do manual não serão mais respondidas pelos organizadores. É importante também que as equipes fiquem atentas na hora da submissão e verifiquem se o código Java corresponde ao desafio selecionado.

Outro ponto que causou problemas para algumas equipes foi o uso dos métodos da classe Scanner, pois em um dos desafios não havia condição de parada e para isso seria necessário o uso do método hasNext() para a leitura da entrada. Aqui também sugerimos olhar o Manual do Calouro (http://goo.gl/w9hWGc).

Outra sugestão para as equipes é adotar uma estratégia que otimize o tempo de resolução. Dividir os desafios entre os membros pode ser uma boa escolha. 

Além disso, sempre é recomendável conhecer como funcionam os métodos da classe Scanner, já que futuramente a leitura da entrada deixará de ser fornecida.

Seguem os links para os desafios da segunda etapa, cada um acompanhado de uma possível solução. Com eles em mãos é possível identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 2 (16/09) – Ué… 3 desafios?!

A segunda etapa do BXComp 2015 ocorreu na quarta-feira (16/09), e contou com a participação das vinte equipes inscritas. Inicialmente, os petianos explicaram a dinâmica de pontuação e critério de desempate que, a partir desta etapa, passou a valer – os critérios podem ser conferidos no regulamento do campeonato – para o campeonato.

Nessa etapa, foram propostos três desafios: SomaString, Arbitragem e Calendário. No primeiro, a entrada era composta por um inteiro que indicava o número de frases que seriam utilizadas para os testes. O desafio consistia em ler os números que apareciam na frase e imprimir o somatório desses números e a quantidade de números que apareceram. No segundo desafio, os competidores recebiam como entrada um conjunto de resultados de partidas de futebol e deveriam imprimir a diferença entre a pontuação atual de uma equipe e sua pontuação caso um gol de cada partida, convertido para a equipe, fosse anulado. Por fim, o terceiro desafio consistia em calcular a diferença de dias entre duas datas que apareciam em cada linha do conjunto de testes.

Entre os erros de submissões acometidos nessa etapa tem-se Runtime Error, Wrong Answer e Presentation Error. No primeiro desafio, o erro mais cometido era não tratar o “zero”, pois ele não alterava o valor da soma, mas deveria ser contado no número de algarismos aparecidos. No desafio Arbitragem, não houveram problemas significativos. No terceiro desafio, um erro em que alguns se depararam consistia em calcular a diferença entre as datas por valor absoluto ao invés de trabalhar em dias.

Outra observação importante é quanto ao cuidado na formatação da saída. A resposta deve ser exatamente igual às mostradas nos enunciados dos desafios. Caracteres errados, letras a mais, acentuação e outros casos retornam resposta errada (Wrong Answer). Espaços, tabulações e linhas a mais retornam o erro Presentation Error.

Lembrando que cada desafio submetido corretamente valeu 4 pontos para a equipe e, nesta etapa, foram consideradas as submissões erradas, bem como tempo de resolução dos desafios como critério de desempate. A próxima etapa ocorrerá no dia 23/09. Aproveitem o intervalo e pratiquem a programação, pois essa é a melhor forma de treinar :)


Seguem os links para os desafios da segunda etapa, cada um acompanhado de uma possível solução. Com eles em mãos podem identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)

ETAPA 1 (02/09) – Começa mais um BXCOMP!

A primeira etapa do BXComp 2015 ocorreu na quarta-feira (02/09), e contou com a participação de dezenove das vinte equipes inscritas. Inicialmente, os professores Fabio Nakano, Luciano Digiampietri e Marcelo Lauretto recepcionaram os alunos e destacaram a importância da aplicação dos conhecimentos adquiridos no campeonato durante a graduação e da experiência de uma competição aos moldes das maratonas de programação oficiais. Em seguida, os petianos explicaram a dinâmica de uma etapa e a manipulação do sistema BOCA.

Nessa etapa, foram propostos dois desafios: MarioKart e Ousadia. No primeiro, a entrada era composta por um conjunto de valores referentes aos tempos gastos por Guime e seus amigos em uma competição de Mario Kart, de forma que, dependendo da colocação (Ranking do menor para o maior tempo) de Guime comparado aos seus amigos, uma mensagem deveria ser impressa. No segundo desafio, os competidores recebiam como entrada uma matriz de inteiros e o seu programa deveria retornar o valor absoluto da diferença entre a somatória dos valores da diagonal principal e a somatória dos valores da diagonal secundária.

No geral, as submissões que continham erros eram bastante semelhantes. No desafio MarioKart, um erro recorrente foi não tratar alguma das condições explicitadas no texto, principalmente as condições em que aconteciam os empates, tanto de Guime com o primeiro colocado, quanto de Guime com o último colocado. Com isso, é importante reiterar a necessidade de grande atenção durante a leitura dos problemas e que serão feitos testes além daqueles dados como exemplo. Já no desafio Ousadia, o erro mais comum foi durante a manipulação da matriz, na qual, durante as iterações, algumas equipes tentavam acessar índices inválidos, negativos ou além dos limites da matriz.

Outra observação importante é quanto ao cuidado na formatação da saída. A resposta deve ser exatamente igual às mostradas nos enunciados dos desafios. Caracteres errados, letras a mais, acentuação e outros casos retornam resposta errada (Wrong Answer). Espaços, tabulações e linhas a mais retornam o erro Presentation Error.

Como preparação para as próximas etapas, sugerimos que os competidores leiam os manuais referentes ao BXComp e ao sistema BOCA. Agora que já tiveram uma experiência no campeonato e interação com o sistema BOCA, os manuais podem ser ainda mais úteis. Prestem mais atenção durante a leitura dos desafios. A compreensão dos mesmos é, obviamente, primordial para que possam soluciona-los.

Lembrando que cada desafio submetido corretamente valeu 1 ponto para a equipe e, nesta etapa, não serão consideradas as submissões erradas nem tempo de resolução dos desafios. Entretanto, a partir da próxima etapa, esses dois critérios serão muito importantes para a classificação, visto que serão utilizados como critério de desempate (para entender como é feito o desempate entre equipes, consulte o regulamento do BXComp 2015). E, além disso, as etapas valerão 12 pontos a partir de agora. Por isso, aproveitem nossas dicas e se preparem para a próxima etapa, no dia 16 de setembro.


Seguem os links para os desafios da primeira etapa, cada um acompanhado de uma possível solução. Com eles em mãos podem identificar os erros que cometeram e evitar que eles aconteçam novamente.

(Clique no nome do desafio para baixá-lo)