Veja o que já aconteceu no campeonato e aproveite as dicas e as resoluções dos desafios!!!
ETAPA 6 (07/11): ETAPA FINAL
Deu-se início na última quarta-feira, dia 7, à sexta e última etapa do campeonato! Para a etapa final, foram propostos 4 desafios. Com cada desafio valendo 5 pontos, o término do campeonato foi eletrizante e acirrado.
O primeiro desafio, chamado Sequência Alienígena, sofreu as repercussões de um estalo e teve metade de seu enunciado apagado. O intuito do programa era calcular os termos de uma sequência desconhecida, dado os índices recebidos na entrada. Com apenas metade do enunciado, a resolução ficaria clara apenas ao analisar as entradas e saídas. Ao ordenar os índices dados no exemplo com seus termos correspondentes, a sequência obtida é parte da famosa Sequência de Fibonacci.
O segundo desafio, Kero, também podia ser facilmente resolvido ao observar padrões, neste caso, cíclicos. O desafio se trata de um jogo onde o programa deve informar ao jogador qual jogada escolher para sempre ganhar o jogo, dado um Kero específico. Para entender a resolução do desafio, tomaremos como exemplo o Kero 11. Para garantir a vitória do jogador com o valor igual a 11 na última rodada, o jogador precisa garantir que na penútima rodada, sua jogada resulte em 8. Desta forma, se o outro jogador escolher 9, ele pode escolher 11 e ganhar, ou se ele escolher 10, ele ainda pode escolher 11. Para garantir que sua penúltima rodada resulte em 8, ele precisa garantir que a antepenúltima resulte em 5, pelos mesmos motivos. Para que a antepenúltima rodada resulte em 5, o jogo precisa começar, então, com 2. O desafio pode ser resolvido, portanto, subtraindo 3 do Kero até obter o valor da primeira jogada.
O desafio NapoleaoBomNaParty contava com um rico enunciado histórico adaptado ao BXComp. Seu propósito era simular a retirada das tropas francesas de um cerco otomano. Para isso, era necessário simular os dias de cerco, ou os intervalos de 30 minutos de dança de Napoleão. Cada dança de Napoleão era capaz de conter os avanços do exército otomano, que caso não contidos, avançavam 100m a cada 30 minutos. Enquanto isso, independente do avanço otomano, os soldados franceses se retiravam do local. O desafio, resumia-se portanto em calcular o avanço dos otomanos perante os atrasos causados por Napoleão.
O último e mais difícil desafio, Mario, foi adaptado da Maratona de Programação. O desafio tinha como intuito ajudar Mario a alocar seus armários de forma que uma nova alocação ocupe armários contíguos. Dentre as diversas maneiras de resolver tal desafio, uma delas é organizar os armários em um vetor e verificar os armários em intervalos iguais ao tamanho da requisição de armários e encontrar um intervalo que possui o menor número de armários ocupados. O número de armários ocupados em tal intervalo seria o número de trocas a serem feitas para atender o pedido, já que esses armários serão trocados para formar um intervalo contíguo.
Agradecemos a participação de todos durante o decorrer do campeonato e esperamos que a competição foi capaz de contribuir para sua formação e suas habilidades.
Obrigado!
PET-SI
Seguem abaixo os links relativos aos desafios da etapa 6:
(Clique no nome do desafio para baixá-lo)
• Sequencia
• Kero
• NapoleaoBomNaParty
• Mario
ETAPA 5 (31/10): ETAPA DA ALMA
Realizada na quarta-feira, dia 31/10, a quinta etapa, nessa os competidores poderiam usar a Internet para ajudar na resolução dos desafios, que foram: Infestação Alienígena, Dedetizando Alienígenas, Prateleiras (ou Trofeus) e Reabastecendo (ou Munição). Todos os desafios foram contextualizado com o tema de Vida fora da terra.
Os desafios Infestação e Dedetizando eram desafios que exigiam conhecimento na manipulação de matrizes e muita leitura do enunciado. O desafio infestação não recebeu uma se quer solução e o desafio Dedetizando recebeu 2, nesse ultimo havia um problema com a saída do BOCA, como alguns grupos haviam enviado certo porém receberam wrong answer, para compensar a injustiça será dado 1 ponto para cada desafio não resolvido.
O desafio de reabastecimento era outro que necessitava uma boa leitura do enunciado e análise das entradas e saídas, ao fazer a simulação destas no papel ficava mais clara a lógica. Lembrando que Entrada e Saída exemplos, que aparecem no enunciado, fazem de fato parte do enunciado, as vezes contendo até informações que não foram reveladas nas sessões anteriores da descrição do desafio.
O desafio Prateleiras era um desafio também de alta dificuldade que só recebeu uma solução aceita, um dos maiores diferenciais desse para os outros desafios de todo o BXComp2018 foi a ausência de número de casos de teste, nesse desafio as entradas eram para ser recebidas e processadas até o scanner detectar um EOF (End Of File). Mas após uma lida na documentação do Scanner e encontrando o método hasNext() a solução ficava mais clara.
A próxima etapa já é a ultima, não percam, teremos a presença de professores e da Lexis Nexis!
Nos vemos nas proximas etapas e um ótimo campeonato à todos!
PET-SI
Seguem abaixo os links relativos aos desafios da etapa 5:
(Clique no nome do desafio para baixá-lo)
• Infestação Alien
• Prateleiras
• Reabastecendo
• Dedetizando Aliens
ETAPA 4 (17/10): ETAPA DO TEMPO
Realizada na quarta-feira, dia 17/10, a quarta etapa, mostrou-se a mais desafiante até agora. Assim como a anterior, quatro desafios foram apresentados: Carregamento, Sorte, Zoom e Rainhas.
O primeiro desafio, Carregamento, foi o que teve mais submissões aceitas. Seu objetivo era determinar se um grupo de pessoas, com uma determinada capacidade de carga, era capaz de carregar um número de caixas que não podiam ser divididas. Diversas técnicas podem ser empregadas para resolver tal problema. Nossa solução explora recursivamente as combinações de pessoas e caixas até que todas caixas estão sendo carregadas. Outro método possível, seria utilizar um algoritmo guloso, que sempre oferece o pacote mais pesado sobrando à pessoa com mais força disponível.
Para o desafio 2, o BX voltou no tempo e trouxe de volta o desafio Sorte. No entanto, diferenças estranhas dificultaram a vida dos competidores. Além dos dados especiais 1 e 6, o duelo agora conta com um poder especial que cada duelista utiliza. O poder BuracoDeMinhoca troca o primeiro 1 obtido por Strange antes da invocação do poder e o substitui por um 6. O poder TrocaElementar faz com que o último 6 obtido por Strange seja trocado pelo último número obtido por Holmes antes da invocação do poder e o número 6 do Strange substitui o próximo número a ser obtido por Holmes. Como os dois poderes afetam os efeitos dos dados 1 e 6, a melhor maneira de resolver o desafio é armazenar todos os dados, computar as trocas e depois avaliar a pontuação dos competidores.
O desafio Zoom, cujo intuito é calcular a distância de uma aluna e a lousa de sua sala e dada a distância, decidir qual será a configuração de zoom utilizada em sua câmera. Durante a etapa foi constatado que a solução esperada pelo BOCA era incorreta. Após a correção da solução e o rejulgamento dos envios, foi constatado que nenhuma equipe conseguiu resolver o desafio. O problema mais comum encontrado foi a interpretação da tarefa e a saída esperada. Na tarefa, consta que o programa deve calcular a distância em linha reta da aluna e a lousa e determinar o zoom com tal distância. Na saída, consta que o programa deve imprimir a distância arredondada para baixo. Porém, muitos grupos utilizaram a distância arredondada para baixo para determinar o zoom que deverá ser aplicado, imprimindo um resultado errado.
O desafio Rainhas possui uma tarefa clara, no qual um tabuleiro quadrado de xadrez populado por rainhas é dado como entrada e o programa deve determinar se há rainhas se atacando no tabuleiro, lembrando que rainhas movem-se horizontalmente, verticalmente e diagonalmente. Existem diversas maneiras de percorrer a matriz e verificar os conflitos, veja a nossa solução para obter uma inspiração.
Após o problema encontrado no desafio Zoom, a etapa extendeu-se por 15 minutos após o esperado. O grupo PET-SI gostaria de se desculpar pelo inconveniente e agradecer a compreensão de vocês, competidores.
Nos vemos nas proximas etapas e um ótimo campeonato à todos!
PET-SI
Seguem abaixo os links relativos aos desafios da etapa 4:
(Clique no nome do desafio para baixá-lo)
• Carregamento
• Sorte
• Zoom
• Rainhas
ETAPA 3 (10/10): ETAPA DA ALMA
Nesta etapa, ocorrida no dia 10/10, estiveram presentes 16 equipes todas elas dedicadas a resolverem 4 desafios pertinentes à etapa. De forma geral, as equipes conseguiram resolver em torno de 2 à 3 desafios, mostrando uma melhora em relação à etapa 2. A etapa contou com 4 desafios (Teclado, RemoveZeros e CifraDaAlma e Aula).
O desafio Teclado tinha como objetivo remover todas as repetições de um texto dado como entrada e imprimí-lo sem nenhuma repetição na saída. A forma mais simples de resolver este problema é percorrendo todo o texto e para cada caractere percorrido verificar se este é diferente de seu antecessor. Caso seja diferente, significa que não é uma repetição do caractere anterior e ele pode ser impresso, caso contrário, é necessário continuar percorrendo o texto.
No desafio RemoveZeros por sua vez, apesar de mais fácil que o Teclado, continha o enunciado com todos os caracteres repetidos várias vezes. não sendo tão fácil em sua leitura. Porém, para tal, era possível utilizar o código desenvolvido no desafio Teclado e decifrar todo o enunciado deste segundo desafio, dando como entrada ao código o próprio enunciado. Apesar dessa “volta” neste desafio era necessário apenas substituir os caracteres “0” de uma frase por espaços em branco e isso novamente poderia ser resolvido utilizando-se uma simples verificação enquanto se percorre a frase. Caso encontre o zero durante as iterações, substitua por espaço.
O terceiro desafio: CifraDaAlma também apresentava uma proposta razoavelmente simples, tendo apenas que converter cada caractere em outro correspondente conforme o enunciado. A primeira forma de resolução que vêm a mente nesse caso, geralmente é fazer um if/else ou switch/case gigantesco, trabalhoso, porém funcional. Outra forma menos trabalhosa e que dispensa todo esses aninhamentos está justamente na compreensão do caractere como sendo um inteiro. Todos os caracteres de conversão neste desafio eram maiúsculos e iam de A à Z. A distância entre cada caractere de conversão correspondente era de 13. Então para os caracteres de A à M era preciso somá-lo com 13 e para os caracteres de M à Z subtrair 13, isso resulta no seu caractere correspondente.
Dentre todos os desafios, o Aula com certeza foi a pimenta no sorvete do desafio. Este requeria um nível maior em relação aos outros também devido ao seu formato de saída(com tabelação e quebra de linhas). Resumidamente, este desafio consistia de tranformar cada elemento de uma matriz em um novo seguindo o cálculo conforme a função e valores dados na entrada. Na função, a variável x correspondia, neste caso, a cada número pertencente à uma posição da matriz, o resultado da função era então colocado na mesma posição da matriz(do mesma posição de onde o número fo retirado). Entre cada uma das matrizes resultantes, era necessário uma quebra de linha.
Os resultados ao final da etapa foram positivos, tendo bastante erro de quebras de linhas e de espaços mas poucos problemas na compreensão da resolução dos desafios. Continuaremos a acompanhar a adaptação e evolução de todas as equipes durante todas as etapas do campeonato e agradecemos à todos pela participação nesta etapa.
Nos vemos nas proximas etapas e um ótimo campeonato à todos!
PET-SI
Seguem abaixo os links relativos aos desafios da etapa 3:
ETAPA 2 (26/09): ETAPA DA REALIDADE
A etapa da realidade ocorreu no dia 26/09, contou com a presença de 18 equipes e, novamente, foram propostos 3 desafios. O número de grupos que tem conseguido acertar pelo menos 1 desafio está crescendo, então fica claro que as equipes já estão se adaptando ao modelo da competição. Nesta etapa de 3 desafios, cada um valia 4 pontos, os desafios dados foram: Hexadecimalizador, QuantoFalta e DecoPrimo.
O desafio Hexadecimalizador tinha uma proposta simples, converter a base da entrada de decimal para hexadecimal. Para esse desafios elaboramos 2 soluções possíveis, em uma delas a repetição principal pode ser decomposta em 3 passos: 1) Calcular o resto do número na divisão por 16 e guarda-lo; 2) De fato dividir o número inteiro por 16 e arredonda-lo para baixo; 3) A partir do resto, adicionar na string de resposta um valo, se o resto era menor que 10, adiciona-se ele mesmo, caso contrário, adiciona-se a letra correspondente. A outra solução para esse desafio era usando a função toHexString do java, que realiza a conversão e depois chamar o método toUpperCase para deixar a saída conforme foi pedido no desafio. Este desafio serve de estimulo para os participantes estudarem os diversos métodos auxiliares que o java oferece.
O desafio QuantoFalta exigia certa habilidades com o uso de Scanners ou do método Split que o java oferece, além de, claro, uso de raciocínio lógico. A chave para facilitar o tratamento da entrada nesse desafio era pegar a linha toda e usar o split com “:” de parâmetro (se você, competidor, ainda não conhece o split, recomendamos que de uma olhada) e partir disso, transformações de unidade e operações aritméticas simples resolviam o exercício.
O desafio DecoPrimo era o maior em nível de dificuldade, a solução proposta dividia o problema em 2 partes, primeiro gerar um arranjo com os 100 primeiros primos, e, então, decompor os valores da entrada (se possível). Para a primeira parte, eram basicamente 2 laços encadeados, o de fora simplesmente crescia até o arranjo de tamanho 100 estar completamente populado, e o de dentro iria testando se o número dado era divisível por algum de seus anteriores (nesse caso não seria primo e não entraria no arranjo), em nossa solução dividimos essa cadeia de laços em 2 métodos. Na segunda parte, a decomposição, uma série de testes usando resto de divisão e concatenação de strings.
No fim da etapa percebemos muitos errinhos “bestas” como um espaço a menos no final ou a ausência de um ponto final (que nesse caso, diferente do ultimo, da Wrong Answer) mas claramente um desenvolvimento geral de todas as equipes em relação a etapa anterior. O grupo PET-SI agradece a participação de todas as equipes!
Boa sorte!
Nos vemos na próxima etapa…
Seguem abaixo os links com uma das possíveis soluções de cada desafio:
(Clique no nome do desafio para baixá-lo)
• QuantoFalta
• Hexadecimalizador
• DecoPrimo
ETAPA 1 (19/09): ETAPA DO ESPAÇO
A etapa 1 do BXComp 2018 realizada na última quarta-feira, dia 19/09, contou com a presença de todas as 20 equipes e foi a primeira a propor um total de três desafios. Além disso, esta etapa contou com a ilustre presença dos professores Alexandre Freire, Daniel Cordeiro, Fábio Nakano e Ivandŕe Paraboni, os quais ressaltaram a importância da participação dos calouros no campeonato. No início da etapa os competidores foram relembrados de que, a partir dessa, cada etapa convencional valerá 12 pontos e os outros critérios avaliados, como tempo e submissões erradas, serão contabilizados.
Os desafios dados aos competidores foram: 7×1, Frações e Prevendo Triângulos. O desafio 7×1 mostrou-se mais fácil do que os outros dois e teve o maior número de submissões aceitas. O desafio consistia em receber uma conta de adição ou multiplicação e substituir todo número 7 por 0. Este desafio, porém, contou com um toque especial, devido a Etapa do Espaço e teve todos os espaços em branco de seu enunciado removidos. Portanto as equipes precisaram batalhar para entender o desafio proposto.
O desafio Frações similarmente tratava da manipulação de contas matemáticas. Este acabou sendo mais desafiador, os competidores precisavam realizar a operação e simplificar seu resultado. A tarefa mais difícil era encontrar o mínimo divisor comum entre os números para realizar a simplificação. Uma das maneiras de realizar isso, que é demonstrada na solução abaixo, é realizar um while e o operador %. Além disso, este desafio teve um grande número de Presentation Errors. Lembrem-se de sempre atentarem-se às especificações do enunciado quanto aos espaços e quebras de linhas nas impressões da sua submissão.
O desafio Prevendo Triângulos dificultou a etapa dos competidores. Neste desafio, as equipes precisavam determinar o número de triângulos diferentes formados por um conjunto de pontos cartesianos. O enunciado continha a regra necessária para um triângulo válido, o tamanho de um lado é menor que a soma dos outros dois. Porém, uma grande dificuldade é determinar o tamanho de um lado. As equipes precisaram, então recordar-se da distãncia euclideana, que mede a distância em linha reta entre dois pontos cartesianos e mede, portanto um lado do triângulo. Com a complexidade do problema, um considerável número de submissões foram avaliadas com Wrong Answer.
Ao fim da etapa algumas equipes se destacaram. Mas estamos ainda na primeira etapa e ainda há muitos desafios pela frente e muitos balões em jogo. O grupo PET-SI parabeniza todas as equipes pelo desempenho e deseja sorte nas próximas etapas!
Boa sorte!
Nos vemos na próxima etapa…
Seguem abaixo os links com uma das possíveis soluções de cada desafio:
(Clique no nome do desafio para baixá-lo)
• SeteaUm
• PrevendoTriangulos
• Fracoes
ETAPA 0 (12/09): ETAPA DO PODER
Aconteceu na última quarta-feira de setembro (12/09), a etapa “zero” do BXComp 2018. A etapa contou com a presença das equipes, e foi o primeiro contato dos competidores com o sistema utilizado na competição: o sistema BOCA. Na etapa, foram propostos os desafios “Sorte” e “JoCOMPô”. O primeiro apresentava um jogo de números com algumas regras específicas, e o segundo, uma competição de Jo-Ken-Pô.
O primeiro desafio se mostrou o mais complexo, e traz para as equipes o lembrete de que ler brevemente todos os desafios antes de começar a resovê-los pode ser uma boa estratégia. Além disso, algumas informações descritas no enunciado dos desafios mostraram-se cruciais para resolução dos mesmos, e, portanto, todos os participantes devem prestar bastante atenção quando da leitura destes.
Uma outra dúvida encontrada foi em relação à entrada dos desafios, que é fornecida pelo sistema BOCA, e não da responsabilidade das equipes. Além disso, os testes realizados pelo servidor de correção engloba várias testes além daqueles descritos nos exemplos.
Por fim, houve dúvidas sobre a utilização do Scanner, por isso sugerimos que os participantes estudem um pouco sobre seus métodos e como utilizá-los. Em especial, as funções mais utilizadas da classe são as funções next(), nextInt(), nextLine() e hasNext(). Quanto a outras sugestões, informamos às equipes que sigam os seguintes pontos:
• Ler e entender a resolução dos desafios, que estarão, em breve, disponíveis no site do BXCOMP 2018, bem como tentar resolver desafios de edições passadas.
• Durante a etapa, ler todos os desafios e os códigos entregues antes de começar a resolvê-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.
• Pensar em casos de teste que não estão apresentados nos exemplos.
Por fim, é importante ressaltar que nessa etapa, que serviu como aquecimento, cada equipe presente recebeu 4 pontos de participação e não consideramos nenhum critério para desempate. A próxima etapa, entretanto, valerá uma determinada quantia de pontos divididos igualmente entre os desafios propostos. Além disso, nas próximas etapas não forneceremos explicações como o fizemos na etapa 0, então discutam o que aconteceu nesse dia com os membros da sua equipe para que estejam bem preparados.
Boa sorte!
Nos vemos na próxima etapa…
Seguem abaixo os links com uma das possíveis soluções de cada desafio:
(Clique no nome do desafio para baixá-lo)