https://github.com/osprogramadores/op-desafios
Soluções para os desafios (por usuário)
https://github.com/osprogramadores/op-desafios
c challenges cpp desafios hacktoberfest java javascript learning learning-by-doing pt-br
Last synced: 5 months ago
JSON representation
Soluções para os desafios (por usuário)
- Host: GitHub
- URL: https://github.com/osprogramadores/op-desafios
- Owner: OsProgramadores
- Created: 2017-07-10T19:44:10.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-05-09T00:17:37.000Z (5 months ago)
- Last Synced: 2025-05-09T01:24:43.706Z (5 months ago)
- Topics: c, challenges, cpp, desafios, hacktoberfest, java, javascript, learning, learning-by-doing, pt-br
- Language: C
- Homepage:
- Size: 2.01 MB
- Stars: 151
- Watchers: 7
- Forks: 281
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Repositório de desafios
## Instruções
Este documento contém informações importantes sobre como enviar o seu desafio,
assim como práticas recomendadas. Os admins recomendam a leitura integral do
documento antes do envio de PRs, mesmo para aqueles que já possuam
familiaridade com git e github.## Conteúdo
Este repositório contém os desafios enviados pelos participantes do grupo
de programação [OsProgramadores](http://t.me/osprogramadores). O site do grupo
contém a [lista de desafios](https://osprogramadores.com/desafios/) com descrições
individuais de cada desafio.## Como contribuir
1. Visite o [repositório op-desafios no github](https://github.com/osprogramadores/op-desafios).
1. Faça um _fork_ deste repositório clicando no botão `Fork` no canto superior
da tela. Isso criará uma cópia completa do repositório sob o seu controle,
no github.1. Faça um clone do repositório para a sua estação de trabalho:
```
git clone https://github.com//op-desafios
```
1. Entre no diretório criado pelo git (`op-desafios`).1. Crie um "git remote" chamado "upstream" apontando para o repositório
principal. Isso facilitará a atualização do seu repositório local:```
git remote add upstream https://github.com/osprogramadores/op-desafios
```1. **Antes de começar a trabalhar em qualquer desafio**: é importante resetar os números de
_commit_ entre a sua cópia local e o repositório principal (isso acontece porque o
repositório principal usa _rebase_ ao invés de _feature branches_). Existem
duas maneiras de efetuar essa operação, mas a mais simples é usar "git reset"
como indicado abaixo:```
git remote update
git reset upstream/master --hard
```> **ATENÇÃO**
>
> Os comandos acima irão reverter **TODAS** as modificações no seu repositório.
> É importante executá-los antes de introduzir qualquer modificação. Se você tem
> modificações a preservar, a maneira mais simples (para um iniciante) é copiar
> os arquivos a serem preservados para outro diretório, efetuar o `git reset`
> indicado acima, e copiar os arquivos de volta.1. Crie um _branch_ de trabalho com um nome adequado. No nosso exemplo, usaremos o nome "dev":
```
git checkout -b dev
```1. Trabalhe normalmente no _branch_ de desenvolvimento. Quando estiver satisfeito
com o resultado, faça o _commit_ e o _push_ com:```
git push origin dev --force
```1. O `git push` transfere o conteúdo do seu branch corrente ("dev" nesse caso)
para a o seu _fork_ no github. Visite a página do seu _fork_ no github
(normalmente, https://github.com/SEU-USUARIO-NO-GITHUB/op-desafios) e clique
no botão para abrir um PR.## O que fazer depois do envio?
Quando um PR é criado, o github envia um email para os admins, que farão a
revisão das modificações e, em caso de aprovação, a incorporação (ou _merge_)
das suas mudanças no repositório principal.Um PR (ou _pull request_) é um **pedido** para incorporar as suas modificações
ao repositório principal. A sua tarefa só estará terminada quando os admins
tiverem incorporado as suas mudanças ao repositório principal (através de uma
operação _merge_).O repositório principal contém testes de integração que procuram por erros
comuns e bloqueiam a aprovação até que estes tenham sido corrigidos. Por isso,
**fique atento ao seu email e a página do seu PR no github**. Verifique que os
testes de integração passaram e procure por mensagens dos admins relacionadas
ao seu PR.Em caso de erros nos testes de integração ou pedido de mudança por parte dos admins,
corrija o problema no seu repositório local e crie outro commit com `git commit`,
seguido por `git push`. **Não crie outro PR, e não use o comando git reset até que
as suas modificações tenham sido incorporadas no repositório principal.**PRs sem atividade por duas semanas serão automaticamente fechados.
## Linguagens de programação e estrutura de diretórios
Ao criar um novo desafio, é importante observar a estrutura de diretórios usada
pelo grupo:```
desafio-XX/
seu_usuario_no_github/
linguagem/
Seu código fonte(...)
README.md
```Onde:
* `seu_usuário_no_github`, é o seu usuário no github. :)
* `linguagem` é o nome de diretório usado para uma das linguagens aceitas:
* `c`: C
* `cpp`: C++
* `csharp`: C#
* `java`: Java
* `javascript`: Javascript
* `go`: Go
* `php`: PHP
* `python`: Python (versão 3.x)
* `rust`: Rust* README.md é um arquivo com comentários sobre a sua implementação e instruções de como executá-la.
> Nota: Apenas desafios feitos em uma das linguagens acima e que possuam o arquivo README.md serão aceitos.
Exemplo de um desafio em Java:
```
desafio-02/johndoe/java/MeuPrograma.java
desafio-02/johndoe/java/README.md
```> **Importante**: Envie um PR por desafio. PRs com múltiplos desafios serão
rejeitados.## Testes de integração
Os testes de integração rodam em todos os PRs e capturam vários erros comuns.
Os admins só farão a revisão do seu PR se os testes de integração estiverem
passando.Algumas dicas básicas:
* Tente limitar ao máximo o envio de bibliotecas adicionais com os seus desafios.
* Não envie arquivos de configuração do seu IDE.
* Arquivos com espaços ou caracteres não ASCII no nome (acentos, Emoji, etc)
não serão aceitos no repositório.* Arquivos com conteúdo binário serão automaticamente rejeitados.
* Alguns editores (quando mal configurados) destroem caracteres UTF-8 (ou
mandam caracteres inválidos). Arquivos com conteúdo UTF-8 inválido serão
bloqueados pela integração.* Arquivos contendo espaços ou tabs no final da linha (_trailing spaces_) serão
rejeitados.* Algumas linguagens de programação (ver abaixo) possuem checagens mais
específicas. Nesse caso, algumas restrições se aplicarão ao código em si
(estilo de formatação, erros, etc). Consulte a próxima seção para maiores
detalhes.## Testes de linguagens específicas
### Go
Use tabs para indentar o seu código (seguindo o padrão Go).
O seu código deverá passar sem erro pelas seguinte ferramentas padrão:
* `golint`
* `go vet`
* `gofmt -s -l`
* `go build`Leia a documentação da linguagem Go sobre como obter essas ferramentas
(normalmente, instaladas por default ou com um comando extra).### Java
1. O código deve ser formatado utilizando o [estilo de desenvolvimento do
Google](https://google.github.io/styleguide/javaguide.html).1. O código será testado utilizando a OpenJDK VM na última versão **LTS** disponível: 17.
1. Utilizamos uma [biblioteca open-source disponibilizada pelo
Google](https://github.com/google/google-java-format) para verificar a
formatação do código. Dentro do repositório dela há mais informações sobre
como integrá-la com ferramentas como Maven e Gradle caso deseje. A versão
utilizada atualmente é a 1.15.0.1. Para formatar os arquivos de acordo com o padrão utilizado, basta seguir os seguintes passos:
```shell
curl -LJO "https://github.com/google/google-java-format/releases/download/v1.15.0/google-java-format-1.15.0-all-deps.jar"
java -jar /google-java-format-1.15.0-all-deps.jar --replace
```1. Pull Requests contendo código em Java serão automaticamente verificados pela
biblioteca indicada. Ao submeter um PR, observe a tela do PR e verifique se
a integração falhou. Em caso de erro, clique no link e verifique as
mensagens de erro.1. Se precisar realizar alguma correção,faça no **mesmo PR** em que criou a
solução original, não precisa abrir outro.### Python
1. Apenas Python 3.x é suportado.
1. Use **espaços** (não tabs!) para indentar o seu código.
1. Use indentação em **4 espaços**.
1. Cheque o seu código com o [pylint](http://pylint.org) antes de enviar. O
arquivo de configuração usado pelo repo está em `ci/pylint3.rc`. Para
checar o seu programa, rode:```
pylint --rcfile=/ci/pylint3.rc
```1. Pull Requests contendo código em Python serão automaticamente verificados
pelo pylint. Ao submeter um PR, observe a tela do PR e verifique se a
integração falhou. Em caso de erro, clique no link e verifique as mensagens
de erro do pylint. Corrija o código, faça outro commit e push.### Javascript
1. O código será inspecionado pela ferramenta [ESlint](https://eslint.org/docs/latest/user-guide/getting-started), utilizando as configurações padrões da ferramenta.
1. Instale NodeJS na sua máquina, [seguindo as instruções aqui](https://nodejs.org/en/download/package-manager/)
1. Feche e abra o prompt de comando e faça o download do plugin do eslint no repositório localmente:
```sh
cd
npm install --save-dev eslint-config-standard-with-typescript@23.0.0 eslint@8.24.0
```1. Cheque o seu código com o eslint antes de enviar. O
arquivo de configuração usado pelo repo está em `ci/.eslintrc.yml`. Para
checar o seu programa, rode:```
npx eslint -c /ci/.eslintrc.yml
```Por exemplo, se seu diretório está em `/home/user/op-desafios`, o arquivo se chama `primos.js` e está na pasta atual, o comando deve ser:
```
npx eslint -c /home/user/op-desafios/ci/.eslintrc.yml primos.js
```1. Pull Requests contendo código em Javascript serão automaticamente verificados
pelo eslint. Ao submeter um PR, observe a tela do PR e verifique se a
integração falhou. Em caso de erro, clique no link e verifique as mensagens
de erro do eslint. Corrija o código, faça outro commit e push.> :warning: Não faça commit da pasta `node_modules` e dos arquivos `package.json` e `package-lock.json`. Não faça `git add *`, adicione *somente* sua pasta de solução no commit.
## Corrigindo um desafio
Qualquer um pode se voluntariar para corrigir os desafios [na lista de pull requests](https://github.com/OsProgramadores/op-desafios/pulls). Você pode usar um script auxiliar para fazer checkout de um fork.
Digamos que você tenha que corrigir o desafio do usuário `MatMercer` na branch `d10`:
```
./checkout-fork.sh MatMercer:d10# os comandos abaixo dependem do desafio e linguagem de programação usada
cd desafio-10/MatMercer/go
make
```## Ainda tem dúvidas?
Em caso de problemas ou dúvidas, entre em contato com um dos administradores
no nosso [canal no Telegram](http://t.me/osprogramadores)