+ Empresa: PwC
+ Objetivo: solucionar 5 desafios propostos
@@ Autor: Marco Sabatini @@
Este repositório possui 5 possíveis soluções desenvolvidas em Java para o desafio de código proposto pela PwC. Como não havia exigência para uma linguagem de programação específica, escolhi Java por quatro motivos básicos:
- FAMILIARIDADE: juntamente com C, Java foi a primeira linguagem de programação por onde iniciei meus estudos. Naturalmente, tenho maior familiaridade com ela e um gosto especialmente positivo quando a utilizo.
- UTILIZAÇÃO: diversas instituições, incluindo financeiras, utilizam Java em suas soluções, o que amplia também meu horizonte de atuação profissional.
- VERSATILIDADE: apesar de verbosa, Java é uma linguagem extremamente versátil, possibilidando diversas soluções diferentes para os mesmos problemas, conforme a necessidade de seus desenvolvedores.
- COMUNIDADE: Java possui uma comunidade ativa e bem consolidada que está disposta a trocar informações, criar novidades e solucionar eventuais problemas.
A PwC sugeriu, em seu processo seletivo, um desafio de código para 5 problemas:
- DESAFIO 01: reverter a ordem de palavras em uma frase, mantendo, porém, a ordem de suas letras.
- DESAFIO 02: remover os caracteres duplicados em uma string.
- DESAFIO 03: descobrir a maior substring palíndroma em uma string.
- DESAFIO 04: tornar maiúscula a primeira letra de cada frase.
- DESAFIO 05: verificar se uma string é um anagrama de um palíndromo.
Para todos os desafios foram propostos inputs específicos cuja saída deveria, também, ser uma saída específica.
Os códigos foram criados com a finalidade de demonstrar conhecimento e criatividade. Eles oscilam, desse modo, entre a praticidade e a complexidade. Como pode-se notar, alguns programas poderiam ser facilmente refatorados a fim de que fossem mais simples de ler e mais otimizados em suas estruturas. Para fins didáticos, no entanto, optei por soluções mais completas e, tentei, sempre que possível, diferenciá-las, por meio de uma escrita mais original, de códigos repetidamente encontrados na internet. Afinal, no cotidiano, os problemas que surgem sempre estão além de soluções padronizadas que comumente são transmitidas. Entre as técnicas utilizadas, estão:
- Entrada de dados por meio da classe Scanner;
- Loops (for e while);
- Condicionais (if/else e switch);
- Utilização de métodos próprios;
- Documentação e comentários;
- Stream();
- ArrayList(), LinkedHashSet() e StringBuilder() e seus métodos;
Apesar do esforço, muitas melhorias poderiam ser implementadas. Por exemplo, poderíamos utilizar o loop "do" no lugar de "while" em alguns casos; poderíamos implementar uma consulta na internet em sites de dicionários retornando o significado, se houver, do palíngromo, nos beneficiando, inclusive, da estrutura try/catch; entre outras melhorias possíveis. Por fim, facilitamos o acesso dos códigos. Para acessar a pasta com os desafios, ; para acessar diretamente cada código, basta clicar nos links abaixo:
Note: Para executar os programas: 1) tenha a JVM instalada em seu compudar; 2) clone esse repositório; 3) acesse, pelo terminal, a pasta com os arquivos *.java; 4) execute o comando: java nomeDoArquivo.java.