ETAPAS

ETAPA 07 (01/11) – Distribuindo doces ao final dos jogos

Marcando o início do mês de novembro, chegamos ao fim de nosso campeonato. A etapa 07, última etapa da edição de 2017, foi marcada por uma surpresa interessante: 7 desafios. Como todos sabem, o BXComp é inspirado na maratona de programação e a novidade desta etapa foi uma maneira de aproximar o nível de dificuldade de uma edição da maratona. O nível de dificuldade dos desafios foi bastante inferior ao da maratona, mas o volume de desafios por tempo foi superior. Além disso, os pesos diferentes para dificuldades diferentes de desafios foi outro diferencial desta etapa das demais. Esperava-se que isto tornasse o campeonato mais disputado e o resultado um pouco mais imprevisível.

O resultado dessas mudanças foi muito interessante e positivo. Por meio da projeção do placar no telão do laboratório todos puderam acompanhar a constante mudança de cenário da tabela de pontos e percebemos o quão disputado foi o podium. Em geral, a maioria das equipes resolveu pelo menos dois desafios, muitas resolveram quatro dos sete desafios e apenas os três primeiros lugares conseguiram resolver cinco. Apesar de nenhuma equipe ter resolvido os desafios com pontuação maior, consideramos o desempenho geral excelente e parabenizamos todas as equipes por terem conseguido superar o volume alto de desafios e darem o melhor de si.

Falando um pouquinho sobre os desafios, buscamos equilibrar a dificuldade dos desafios, então os cinco que valiam três pontos tinham uma dificuldade parecida, mas possuíam um nível crescente que curiosamente foi percebido por praticamente todas as equipes. Observamos que a ordem que os desafios foram resolvidos, em geral, condizia com a ordem de dificuldade. Os dois desafios mais difíceis, por outro lado, tinham basicamente o mesmo nível de dificuldade, mas envolviam conceitos diferentes e, portanto, diferentes técnicas de programação.

Os detalhes das resoluções dos desafios e técnicas utilizáveis estão, como sempre, disponíveis em nossas soluções para todos os que tiverem curiosidade em saber como resolvê-los. É importante que deem uma olhada não só nos desafios que não souberam resolver para aprenderem técnicas novas, mas também nos desafios que conseguiram, pois é possível aprender outras formas de resolver o problema e comparar com seus próprios métodos.

Agradecemos a participação de todos durante o decorrer do campeonato. Crescemos muito durante a organização, foi um aprendizado imensurável. Esperamos que tenham gostado de participar, melhorado alguma habilidade e que o interesse pela área e pelo curso tenham aumentado, mesmo que um pouquinho.

 Mais uma vez, obrigado!

 PET-SI.

Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Arbitragem
Desafio 2 – Meteoro
Desafio 3 – Distribuindo
Desafio 4 – Popularidade
Desafio 5 – Telefone
Desafio 6 – Doces
Desafio 7 – HelpSheldon

ETAPA 06 (25/10) – The One Before The Last One

A sexta etapa do BXCOMP foi realizada na quarta-feira (25/10) e foram propostos três desafios: Changing Strings, Water Tank e The Sandwich Problem. O diferencial dessa etapa foram os desafios em inglês, o que exigiu um pouco mais de cuidado das equipes com a interpretação de texto. Cada desafio valia 4 pontos, totalizando, então, 12 pontos para a etapa.
O primeiro desafio, Changing Strings, foi resolvido com muita facilidade pelas equipes. O desafio pedia aos competidores que, dadas duas strings, determinasse qual número mínimo de deslocamentos para frente eram necessárias para que a primeira string se transformasse na segunda. Cada caractere era deslocado individualmente. As equipes resolveram o desafio sem muita dificuldade e disseram que desafios anteriores parecidos ajudaram na rapidez da execução.

O terceiro desafio, The Sandwich Problem, se mostrou o mais complicado da etapa. Apenas duas equipes conseguiram resolvê-lo. Apesar de um enunciado complexo, a resolução deste desafio era bem simples. O desafio consistia em mover sanduíches de um ponto a outro, com restrições no número que podem ser transportados por viagem e uma regra- a cada 100 metros, o ajudante deveria comer 1 sanduíche. A resolução envolvia levar TODOS os sanduíches gradativamente de um ponto para o mais próximo, de tal forma que em um ponto da viagem os sanduíches restantes caberiam no carrinho e o ajudante os entregaria sem realizar mais paradas. Vale ressaltar que caso sobrasse um único sanduíche em qualquer posto anterior da viagem, não valeria a pena buscá-lo, uma vez que isso diminuiria a quantidade de sanduíches a serem entregues.

Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Sandwich
Desafio 2 – Water
Desafio 3 – Strings

ETAPA 5 (18/10) – O fim do Labirinto está próximo

Hoje aconteceu a quinta etapa do BXComp 2017! No geral, o desafio mais resolvido foi o de Dígitos Diferentes. Nesta etapa, tivemos um desafio extra, disponível 30 minutos antes do fim e valendo quatro pontos a mais para as equipes que o resolvessem, ou seja, totalizando 16 pontos disponíveis para esta etapa.
 
Desafio 1 (Multiplicação) – este desafio possuía um nível superior em relação aos outros, ainda que seu enunciado não seja extenso, sua lógica é complicada de ser implementado. Na primeira parte do desafio, os participantes deveriam achar, a partir de um número na entrada, o menor número natural Q cuja multiplicação de seus dígitos resultasse neste número inicial.
 
Por exemplo, 10 teria o resultado de 25, pois 2 * 5 = 10. Na implementação em Java, fizemos um laço que iniciava com o número, tentava dividi-lo por números entre 9 e 2 (incluindo 9 e 2) caso o número fosse divisível por algum número neste intervalo, esse número seria adicionado a uma String resultado e o resultado da divisão passaria para a próxima iteração do laço. Ao final do laço, a String resultado teria a resposta invertida e bastaria invertê-la para ter o número correto. No caso do 10, por exemplo: O maior número entre 9 e 2 que divide 10 é 5 (primeiro laço), 10/5 = 2. O maior número entre 9 e 2 que divide 2 é 2 ( segundo laço), 2/2 = 1. resposta = “52”, basta inverter a String.
 
Na segunda parte do desafio, o Jogo da Multiplicação, os competidores deveriam implementar um código em que os jogadores participavam de maneira perfeita. Por isso, dado um número final, sempre um mesmo jogador iria ganhar caso os dois jogassem de maneira perfeita. Há duas maneiras de resolver este problema.
 
Primeiro, verificar qual a jogada possível para que um jogador ganhe na rodada atual ou para impedir que o outro ganhe. Havia uma dica para isto no enunciado.
 
A outra maneira (que está disponível no site do BXComp) seria encontrar um padrão que, em cada intervalo de números finais possíveis um jogador sempre venceria caso eles jogassem perfeitamente, o padrão seria (sendo N o número final a ser igualado ou ultrapassado):
 
1 <= N <= 9: Igor venceria
9 < N <= 18: Victor venceria
18 < N <= 162: Igor venceria
162 < N <= 324: Victor venceria
 
Ou seja, ao perceber este padrão, bastaria dividir o número final por 18 e, no momento em que N fosse menor ou igual a 18, a condição 1 <= N <= 9: Igor venceria e 9 < N <= 18: Victor venceria seria válida. O código Java no site mostra a implementação desta lógica e talvez isto fique mais claro.
 
Desafio 2 (Dígitos Diferentes) – este desafio foi o único a ser resolvido. Os participantes deveriam verificar, para cada número do intervalo na entrada, quantos números não possuíam dígitos repetidos em sua configuração, adicionar em um contador e imprimi-lo juntamente com o número do respectivo caso de teste.
 
Na resolução do site foi criada uma tabela que continha todas as possibilidades de intervalos em que os índices das linhas são os elementos iniciais do intervalo e os das colunas são os elementos finais. Esta tabela é construída apenas uma vez, antes de receber as entradas e dada uma entrada, basta acessar diretamente o elemento da matriz m[X][Y].
 
Desafio 3 (GuuChokiPaa) – O desafio consistia em dar as respostas certas de acordo com o comando da entrada. Eram apenas dois comandos e muitas equipes tiveram dificuldades em entender o que cada um fazia. Dentre estas dificuldades estão: pensar que o comando “C” fazia algo além de exibir as contagens de configurações no intervalo dado. Este comando não influenciava em nada nas configurações, fazia apenas uma contagem e exibia na tela. Além deste, para o comando “C”, o único problema, talvez, fosse exibir na ordem correta, porque a ordem de impressão era diferente da ordem de troca.
 
O comando “M” é que de fato modificava as configurações de mão dos participantes. Algumas equipes ficaram em dúvida se “M” se tratava de uma rodada ou não. Conforme o enunciado, cada comando “M” era uma nova rodada e os únicos participantes que tinham decidido mudar suas configurações de mão são os indicados no intervalo. Outra dúvida foi: se para determinar o gesto vencedor da rodada, seria necessário considerar apenas o intervalo ou todos os participantes. Como nenhum jogador saiu do jogo, todos participam da rodada e, para determinar o vencedor da rodada, é necessário considerar todo mundo.
 
A maior dificuldade deste desafio, pelas submissões que recebemos, foi nos casos em que nem todas as configurações de mão participavam, ou seja, ninguém usava uma ou duas das configurações possíveis. Nestes casos, como os saldos dependiam dos contadores dos gestos, era necessário desconsiderar os saldos dos gestos que tinham contagem zero e, caso houvesse apenas uma configuração (todo mundo com Guu, por exemplo), apenas o saldo desse gesto seria considerado e, por ser o único, seria o maior saldo.
 
Desafio 4 (Labirintos) – Este desafio foi liberado no final e não foi resolvido. Muitas equipes adotaram a estratégia de se concentrarem nos desafios que já tinham sido liberados e acabaram nem lendo o enunciado. Outras equipes delegaram a tarefa para um integrante ou uma dupla enquanto o resto se concentrava nos outros desafios.
 
Um ponto a se considerar nesta etapa é a importância de estabelecer uma boa estratégia para a resolução dos desafios, lembrando que não existe fórmula para descobrir a melhor, mas é necessário levar em consideração alguns pontos importantes como: tempo, número de desafios, dificuldade dos desafios, etc. Identificando esses pontos, a melhor estratégia ou melhor decisão sairá naturalmente.
 
Apesar de ter um enunciado longo, a resolução deste desafio, em relação aos demais, era muito simples. Após poucas simulações do problema um padrão simples e claro seria visível. Por não haver ciclos, todas as linhas por onde Igor desenhava seria necessário apenas um movimento e, como o começo e o fim eram sempre iguais, ele precisaria passar pelas mesmas linhas para voltar ao ponto inicial. Isso indicava que o mínimo de movimentos necessários seria o dobro do número de linhas. A maior dificuldade desse desafio seria perceber que dois caminhos, por exemplo 1 a 4 e 4 a 1, são considerados iguais e, portanto, a resposta seria 2 *(nLinhas – linhasRepetidas) e para isso, precisaria contar as repetições.

Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Multiplicacao
Desafio 2 – DigitosDiferentes
Desafio 3 – GuuChokiPaa
Desafio 4 – Labirintos

ETAPA 4 (11/10) – 4 É de mais

A quarta etapa do BXCOMP 2017 foi realizada na quarta-feira (4/10) e foram propostos quatro desafios: Constelação, Set, Relógio e Salto. Nessa etapa, houve a novidade da aplicação de 4 desafios (um a mais que o usual) e por isso exigiaum pouco mais das equipes, desde estratégia de organização até o desenvolvimento da lógica de resolução.

O primeiro desafio, Constelação, foi um desafio fácil porem pouco resolvido pelas equipes. O desafio pedia aos competidores que dado um número de pontos, determinasse a quantidade de estrelas formadas (estrelas estas são figuras formada por seguimentos cujo a distância de dois pontos é o mesmo para cada seguimento e a figura passa por todos os pontos). O maior problema desse desafio foi um erro conceitual, pois consideravam uma mesma figura duas vezes na hora de iterar no for. Por exemplo, uma estrela com 8 pontos e distancia 1 entre pontos é igual uma estrela de 8 pontos com distancia 7 e este caso deveria ser desconsiderado.

O segundo desafio, Set, se mostrou o mais complicado da etapa, e apenas uma equipe conseguiu resolvê-lo. O desafio consistia de um jogo na qual era dado uma quantidade de cartas e deveria montar o máximo de set possível (set é um conjunto de 3 cartas que possui 2 características que devem ser iguais ou diferentes para cada característica conforme o enunciado)

O terceiro desafio, Relógio, foi um dos fáceis e foi o mais resolvido da etapa. A tarefa era, dado dois horários (um de início e outro de fim) calcular a diferença entre eles em minutos. A grande questão de muitas equipes é que o horário de início poderia ser maior que o horário de fim e por isso teriam que considerar que a caminhada foi concluída no dia seguinte no horário de fim.

O quarto desafio, Salto, foi um dos desafios mais fáceis. Ele consistia em uma competição baseada em 3 provas. Cada prova tem sua nota e possui peso diferente das demais. O desafio era fazer as medias e falar quem venceu a competição. Porém, esse desafio apresentou um problema técnico e por isso várias equipes perderam tempo neste exercício. Por isso, depois de rejulgamento de todas as submissões desse problema, todas as equipes que enviaram o desafio e acertaram ganharam um ponto para cada desafio não acertado.


Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Constelacao
Desafio 2 – Set
Desafio 3 – Relogio
Desafio 4 – Salto

ETAPA 3 (04/10) – Tesouro dos deuses

A terceira etapa do BXCOMP 2017 foi realizada na quarta-feira (4/10) e foram propostos três desafios: Mensagens de Loki, O Trabalho de Sísifo e Filósofos. Esses desafios eram mais difíceis que os das outras etapas e exigiram um pouco mais das equipes, desde estratégia de
organização até o desenvolvimento da lógica de resolução.

O primeiro desafio, Mensagens de Loki, foi o desafio mais resolvido. O desafio pedia aos competidores que traduzissem várias mensagens codificadas, de acordo com uma regra específica apresentada no enunciado do problema – e que envolvia a sequência de Fibonacci.

O maior problema encontrado pelas equipes nesse desafio, foi da leitura do primeiro caso de teste (que era uma linha de texto) após a leitura do número de casos de testes (um inteiro). Isso porque a primeira chamada da função nextLine( ) logo após a leitura do número inteiro, lê até o fim da linha onde o número está, retornando uma string vazia. Uma das formas de resolver esse problema, é utilizando a função next( ), que fará a leitura do próximo elemento não-vazio, ou adicionado uma chamada à função nextLine( ) logo após a leitura do inteiro.

O segundo desafio, O Trabalho de Sísifo, pedia às equipes que determinassem em quanto tempo o personagem da história chegaria ao topo ou à base da montanha em que estava, ou se ele ficaria parado em algum momento, sendo que ele avançava e recuava um pouco a cada hora.

Para resolver esse desafio, as equipes precisavam perceber pelo enunciado que Sísifo precisaria chegar a uma posição estritamente maior que o tamanho da montanha para chegar ao topo, ou estritamente menor que 0 (antes da base) para voltar à base. Além disso, era necessário fazer a verificação de chegada ao topo logo depois de avançar a cada hora, e antes de executar o recuo.

O terceiro desafio, Filósofos, se mostrou o mais complicado da etapa, e apenas uma equipe conseguiu resolvê-lo. O desafio apresentava uma mesa circular de filósofos que pretendiam comer algumas refeições. Porém, só há um hashi entre cada filósofo, o que significa que, para que um filósofo possa comer, os seus dois “vizinhos” não poderiam estar comendo.

Olhem os códigos disponíveis abaixo e estudem os métodos que não conheciam. Isso poderá ajudá-los em etapas futuras!

Após o fim da etapa, os petianos revelaram aos competidores que havia um segredo em um dos desafios. As três primeiras equipes que conseguissem descobrir esse segredo, poderiam realizar uma etapa especial: uma caça-ao- tesouro!

As equipes que se classificaram para a etapa especial foram: “El Psy Code”, “?” e “Sadbois”. A etapa especial consistia em encontrar petianos em determinados locais. O C.A. Rural foi o primeiro ponto, onde cada grupo deveria escolher um envelope, redirecionando-os para um dos três grupos pesquisa escolhidos: GRIFE, GrIA e GPoPAI. Por fim, o primeiro grupo que chegasse à sala do PET ganharia um vale da loja de jogos STEAM para cada integrante. A equipe “?” foi a vencedora. Parabéns a todos!


Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Loki
Desafio 2 – Sisifo
Desafio 3 – Filosofos

ETAPA 2 (27/09) – O desafio agora é outro

No dia 27/09/2017 foi realizada a etapa 2 do BXComp, também propondo três desafios, valendo 12 pontos cada como na etapa anterior.

Nesta etapa, os competidores deveriam resolver três desafios: Controlando Vagões, Identificando Tautogramas e Festivais. O primeiro desafio necessitou de conhecimentos matemáticos básicos para o tratamento de diversos casos de teste. Basicamente, deveria ser feito um programa que indicasse a lotação do vagão de um trem em cada estação que este passasse. Como de costume, várias submissões foram feitas com erros de apresentação, e apesar de aparentar ser um problema fácil, os competidores disseram ter maiores dificuldades neste. Houveram algumas dúvidas quanto ao uso do método Math.Floor retornar um double e mesmo assim o casting para int ter que ser feito. Esse realmente foi o intuíto do exercício: o aprendizado de um novo método da biblioteca Math.

O segundo desafio consistia em identificar tautogramas, que são uma forma de aliteração onde todas as palavras em uma sentença começam com a mesma letra. Trata-se de um problema de manipulação de strings, o qual foi resolvido com certa facilidade pela maioria dos competidores. Apesar disso, muitos submeteram o desafio com erros de formatação ou colocaram algo que não deviam no código. Os participantes devem dar muita atenção para caracteres como “;”, “{” ou “}” sobrando ou faltando no código. E lembrem-se sempre de nomear a classe de maneira correta! Erros como este foram frequentes nos três desafios com a maioria das equipes. Além disso, as classes não devem possuir packages.

O terceiro e último desafio também tinha certos conceitos matemáticos envolvidos. Dado um inteiro positivo, representando um ano, os participantes deveriam escrever um programa que classificasse tal ano de acordo com alguns critérios. Ao contrário dos demais, para este desafio foi disponibilizado um código incompleto e cheio de erros para que os competidores arrumassem. Claro, havia a possibilidade de cada equipe construir o seu código do zero.

Lembrem-se de estudar durante a semana os tópicos abordados, não só nessa etapa, mas também durante as etapas passadas, pois assuntos anteriores podem voltar a aparecer. Boa sorte!


Abaixo estão os arquivos contendo sugestões para a resolução dos três desafios:
Desafio 1 – Vagões
Desafio 2 – Tautogramas
Desafio 3 – Festivais

ETAPA 1 (20/09) – Agora é pra valer!!!

A etapa 1 do BXComp 2017, realizada na última quarta-feira, contou com a presença de grande parte dos inscritos e foi a primeira a propor um total de três desafios. No início da etapa os competidores foram relembrados de que, a partir dessa, cada etapa vale 12 pontos e os outros critérios avaliados, como tempo e submissões erradas, serão contabilizados.

Os desafios dados aos competidores foram: Rotas, Pesquisa de Satisfação e Sudoku. O primeiro era baseado em um tratamento da entrada, que continha cada caso de teste presente em uma única linha da entrada. Por meio do número inteiro que inicializava cada caso de teste, este servia de apoio para que cada instrução fosse analisada e traduzida separadamente. Muitas equipes mostraram facilidade em resolvê-lo, apesar de algumas submissões conterem erros de apresentação parecidos com os vistos na etapa zero (como quebra de linha faltando ou a mais).

O segundo desafio tinha muitas semelhanças, retirando-se o contexto, com Rotas. Novamente pedia que se analisasse uma entrada que estava condensada em uma única linha para cada caso de teste, contudo, dessa vez não era fornecido um contador do número de caracteres para serem analisados que estavam contidos na linha. Para tal, uma solução seria armazenar o caso de teste em uma variável do tipo String e após armazenar num array os votos individuais por meio do método .split() (usando um espaço simples como delimitador).

O desafio Sudoku era o que mais aparentava apresentar uma dificuldade maior, pois era o mais trabalhoso. Ele exigia que, de fato, cada linha, coluna e região fosse analisada de acordo as regras dadas no enunciado. Com a complexidade do problema, um considerável número de submissões foram avaliadas com Wrong Answer.
Ao fim, a disputa pela liderança está bastante acirrada entre diversas equipes. O grupo PET-SI parabeniza todas as equipes pelo desempenho e deseja sorte nas próximas etapas!


As sugestões de resolução são dadas a seguir:
Desafio 1 – Rotas
Desafio 2 – Pesquisa
Desafio 3 – Sudoku

ETAPA Zero (13/09) – FOI DADA A LARGADA!

Aconteceu na última quarta-feira de setembro (13/09), a etapa “zero” do BXComp 2017. A etapa contou com a presença das equipes inscritas no campeonato e também com a ilustre presença dos professores Alexandre Freire, Fábio Nakano, Flávio Coutinho e Luciano Digiampietri. Antes do começo do campeonato, os professores mencionados conversaram com os alunos e ressaltaram a importância da participação dos calouros no campeonato. Em seguida, os petianos explicaram como é realizada cada etapa e falaram sobre a utilização do sistema BOCA.

Na etapa, foram propostos os seguintes desafios: “Coeficiente Binomial” e “Crescimento Populacional”. O primeiro tinha como objetivo implementar a fórmula do Coeficiente Binomial. Já o segundo desafio buscava estudar o crescimento populacional de dois municípios e determinar o tempo necessário para que a população de um município ultrapasse o do outro.

Na resolução do primeiro desafio era necessário implementar uma fórmula fornecida no desafio. Quanto às respostas, os erros mais comuns estavam relacionados à apresentação delas, geralmente com espaços a mais, falta ou excesso de quebras de linha.

Lembrando que os desafios são julgados esperando a saída da forma exata como foi especificada no seu enunaciado.

Na resolução do segundo desafio era necessário identificar o seu contexto. Apenas o crescimento anual seguia uma progressão aritmética (PA), sendo isso, um dos problemas encontrados na interpretação do desafio. Outra dificuldade encontrada foi não parar a execução do programa quando o contador de anos ultrapassasse 100 anos. Algumas dicas importantes para a próxima etapa são:

• Ler e entender a resolução dos desafios, que estarão, em breve, disponíveis no site do BXCOMP 2017.
• Durante a etap, ler todos os desafios e os códigos entregues antes de começar a resolve-los, a ordem de resolução pode influenciar em seu desempenho.
• Durante a etapa, testar o código em sua máquina, antes de submeter no BOCA, pode te ajudar a perceber quais são os erros.
• Buscar entender bem o problema e todos os seus casos de teste é essencial para a resolução do desafio.

Por fim, é importante ressaltar que nessa etapa, que serviu como aquecimento, cada equipe presente recebeu 4 pontos de participação. A próxima etapa valerá 12 pontos divididos igualmente entre os desafios propostos. Nas próximas etapa, não forneceremos explicações como o fizemos na etapa 0, então discutam o que aconteceu na etapa 0 com os membros da sua equipe para que estejam bem preparados. Boa Sorte!


Seguem abaixo os links com uma das possíveis soluções de cada desafio:

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

Coeficiente Binomial
Crescimento Populacional