{"id":27118341,"url":"https://github.com/osprogramadores/op-desafios","last_synced_at":"2025-05-16T12:08:00.280Z","repository":{"id":37270377,"uuid":"96814966","full_name":"OsProgramadores/op-desafios","owner":"OsProgramadores","description":"Soluções para os desafios (por usuário)","archived":false,"fork":false,"pushed_at":"2025-05-09T00:17:37.000Z","size":2112,"stargazers_count":151,"open_issues_count":4,"forks_count":281,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-05-09T01:24:43.706Z","etag":null,"topics":["c","challenges","cpp","desafios","hacktoberfest","java","javascript","learning","learning-by-doing","pt-br"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OsProgramadores.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-07-10T19:44:10.000Z","updated_at":"2025-05-09T00:17:41.000Z","dependencies_parsed_at":"2024-05-22T20:48:42.911Z","dependency_job_id":"590c3fdb-e432-4a2f-9968-49027cfb0980","html_url":"https://github.com/OsProgramadores/op-desafios","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OsProgramadores%2Fop-desafios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OsProgramadores%2Fop-desafios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OsProgramadores%2Fop-desafios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OsProgramadores%2Fop-desafios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OsProgramadores","download_url":"https://codeload.github.com/OsProgramadores/op-desafios/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254527087,"owners_count":22085918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","challenges","cpp","desafios","hacktoberfest","java","javascript","learning","learning-by-doing","pt-br"],"created_at":"2025-04-07T07:37:28.211Z","updated_at":"2025-05-16T12:08:00.224Z","avatar_url":"https://github.com/OsProgramadores.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Repositório de desafios\n\n## Instruções\n\nEste documento contém informações importantes sobre como enviar o seu desafio,\nassim como práticas recomendadas. Os admins recomendam a leitura integral do\ndocumento antes do envio de PRs, mesmo para aqueles que já possuam\nfamiliaridade com git e github.\n\n## Conteúdo\n\nEste repositório contém os desafios enviados pelos participantes do grupo\nde programação [OsProgramadores](http://t.me/osprogramadores). O site do grupo\ncontém a [lista de desafios](https://osprogramadores.com/desafios/) com descrições\nindividuais de cada desafio.\n\n## Como contribuir\n\n1. Visite o [repositório op-desafios no github](https://github.com/osprogramadores/op-desafios).\n\n1. Faça um _fork_ deste repositório clicando no botão `Fork` no canto superior\n   da tela. Isso criará uma cópia completa do repositório sob o seu controle,\n   no github.\n\n1. Faça um clone do repositório para a sua estação de trabalho:\n   ```\n   git clone https://github.com/\u003cseu_usuario_no_github\u003e/op-desafios\n   ```\n1. Entre no diretório criado pelo git (`op-desafios`).\n\n1. Crie um \"git remote\" chamado \"upstream\" apontando para o repositório\n   principal. Isso facilitará a atualização do seu repositório local:\n\n   ```\n   git remote add upstream https://github.com/osprogramadores/op-desafios\n   ```\n\n1. **Antes de começar a trabalhar em qualquer desafio**: é importante resetar os números de\n   _commit_ entre a sua cópia local e o repositório principal (isso acontece porque o\n   repositório principal usa _rebase_ ao invés de _feature branches_). Existem\n   duas maneiras de efetuar essa operação, mas a mais simples é usar \"git reset\"\n   como indicado abaixo:\n\n   ```\n   git remote update\n   git reset upstream/master --hard\n   ```\n\n   \u003e **ATENÇÃO**\n   \u003e\n   \u003e Os comandos acima irão reverter **TODAS** as modificações no seu repositório.\n   \u003e É importante executá-los antes de introduzir qualquer modificação. Se você tem\n   \u003e modificações a preservar, a maneira mais simples (para um iniciante) é copiar\n   \u003e os arquivos a serem preservados para outro diretório, efetuar o `git reset`\n   \u003e indicado acima, e copiar os arquivos de volta.\n\n1. Crie um _branch_ de trabalho com um nome adequado. No nosso exemplo, usaremos o nome \"dev\":\n\n   ```\n   git checkout -b dev\n   ```\n\n1. Trabalhe normalmente no _branch_ de desenvolvimento. Quando estiver satisfeito\n   com o resultado, faça o _commit_ e o _push_ com:\n\n   ```\n   git push origin dev --force\n   ```\n\n1. O `git push` transfere o conteúdo do seu branch corrente (\"dev\" nesse caso)\n   para a o seu _fork_ no github. Visite a página do seu _fork_ no github\n   (normalmente, https://github.com/SEU-USUARIO-NO-GITHUB/op-desafios) e clique\n   no botão para abrir um PR.\n\n## O que fazer depois do envio?\n\nQuando um PR é criado, o github envia um email para os admins, que farão a\nrevisão das modificações e, em caso de aprovação, a incorporação (ou _merge_)\ndas suas mudanças no repositório principal.\n\nUm PR (ou _pull request_) é um **pedido** para incorporar as suas modificações\nao repositório principal. A sua tarefa só estará terminada quando os admins\ntiverem incorporado as suas mudanças ao repositório principal (através de uma\noperação _merge_).\n\nO repositório principal contém testes de integração que procuram por erros\ncomuns e bloqueiam a aprovação até que estes tenham sido corrigidos. Por isso,\n**fique atento ao seu email e a página do seu PR no github**. Verifique que os\ntestes de integração passaram e procure por mensagens dos admins relacionadas\nao seu PR.\n\nEm caso de erros nos testes de integração ou pedido de mudança por parte dos admins,\ncorrija o problema no seu repositório local e crie outro commit com `git commit`,\nseguido por `git push`. **Não crie outro PR, e não use o comando git reset até que\nas suas modificações tenham sido incorporadas no repositório principal.**\n\nPRs sem atividade por duas semanas serão automaticamente fechados.\n\n## Linguagens de programação e estrutura de diretórios\n\nAo criar um novo desafio, é importante observar a estrutura de diretórios usada\npelo grupo:\n\n```\ndesafio-XX/\n  seu_usuario_no_github/\n    linguagem/\n      Seu código fonte(...)\n      README.md\n```\n\nOnde:\n\n* `seu_usuário_no_github`, é o seu usuário no github. :)\n\n* `linguagem` é o nome de diretório usado para uma das linguagens aceitas:\n  * `c`: C\n  * `cpp`: C++\n  * `csharp`: C#\n  * `java`: Java\n  * `javascript`: Javascript\n  * `go`: Go\n  * `php`: PHP\n  * `python`: Python (versão 3.x)\n  * `rust`: Rust\n\n* README.md é um arquivo com comentários sobre a sua implementação e instruções de como executá-la.\n\n\u003e Nota: Apenas desafios feitos em uma das linguagens acima e que possuam o arquivo README.md serão aceitos.\n\nExemplo de um desafio em Java:\n\n```\ndesafio-02/johndoe/java/MeuPrograma.java\ndesafio-02/johndoe/java/README.md\n```\n\n\u003e **Importante**: Envie um PR por desafio. PRs com múltiplos desafios serão\n  rejeitados.\n\n## Testes de integração\n\nOs testes de integração rodam em todos os PRs e capturam vários erros comuns.\nOs admins só farão a revisão do seu PR se os testes de integração estiverem\npassando.\n\nAlgumas dicas básicas:\n\n* Tente limitar ao máximo o envio de bibliotecas adicionais com os seus desafios.\n\n* Não envie arquivos de configuração do seu IDE.\n\n* Arquivos com espaços ou caracteres não ASCII no nome (acentos, Emoji, etc)\n  não serão aceitos no repositório.\n\n* Arquivos com conteúdo binário serão automaticamente rejeitados.\n\n* Alguns editores (quando mal configurados) destroem caracteres UTF-8 (ou\n  mandam caracteres inválidos). Arquivos com conteúdo UTF-8 inválido serão\n  bloqueados pela integração.\n\n* Arquivos contendo espaços ou tabs no final da linha (_trailing spaces_) serão\n  rejeitados.\n\n* Algumas linguagens de programação (ver abaixo) possuem checagens mais\n  específicas. Nesse caso, algumas restrições se aplicarão ao código em si\n  (estilo de formatação, erros, etc).  Consulte a próxima seção para maiores\n  detalhes.\n\n## Testes de linguagens específicas\n\n### Go\n\nUse tabs para indentar o seu código (seguindo o padrão Go).\n\nO seu código deverá passar sem erro pelas seguinte ferramentas padrão:\n\n* `golint`\n* `go vet`\n* `gofmt -s -l`\n* `go build`\n\nLeia a documentação da linguagem Go sobre como obter essas ferramentas\n(normalmente, instaladas por default ou com um comando extra).\n\n### Java\n\n1. O código deve ser formatado utilizando o [estilo de desenvolvimento do\n   Google](https://google.github.io/styleguide/javaguide.html).\n\n1. O código será testado utilizando a OpenJDK VM na última versão **LTS** disponível: 17.\n\n1. Utilizamos uma [biblioteca open-source disponibilizada pelo\n   Google](https://github.com/google/google-java-format) para verificar a\n   formatação do código. Dentro do repositório dela há mais informações sobre\n   como integrá-la com ferramentas como Maven e Gradle caso deseje. A versão\n   utilizada atualmente é a 1.15.0.\n\n1. Para formatar os arquivos de acordo com o padrão utilizado, basta seguir os seguintes passos:\n\n   ```shell\n   curl -LJO \"https://github.com/google/google-java-format/releases/download/v1.15.0/google-java-format-1.15.0-all-deps.jar\"\n   java -jar \u003ccaminho-para-o-jar-baixado\u003e/google-java-format-1.15.0-all-deps.jar --replace \u003clista-arquivos-java\u003e\n   ```\n\n1. Pull Requests contendo código em Java serão automaticamente verificados pela\n   biblioteca indicada. Ao submeter um PR, observe a tela do PR e verifique se\n   a integração falhou. Em caso de erro, clique no link e verifique as\n   mensagens de erro.\n\n1. Se precisar realizar alguma correção,faça no **mesmo PR** em que criou a\n   solução original, não precisa abrir outro.\n\n### Python\n\n1. Apenas Python 3.x é suportado.\n\n1. Use **espaços** (não tabs!) para indentar o seu código.\n\n1. Use indentação em **4 espaços**.\n\n1. Cheque o seu código com o [pylint](http://pylint.org) antes de enviar. O\n   arquivo de configuração usado pelo repo está em `ci/pylint3.rc`. Para\n   checar o seu programa, rode:\n\n   ```\n   pylint --rcfile=\u003cdiretorio_do_seu_repo\u003e/ci/pylint3.rc \u003cnome_do_seu_arquivo.py\u003e\n   ```\n\n1. Pull Requests contendo código em Python serão automaticamente verificados\n   pelo pylint. Ao submeter um PR, observe a tela do PR e verifique se a\n   integração falhou. Em caso de erro, clique no link e verifique as mensagens\n   de erro do pylint. Corrija o código, faça outro commit e push.\n\n### Javascript\n\n1. 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.\n\n1. Instale NodeJS na sua máquina, [seguindo as instruções aqui](https://nodejs.org/en/download/package-manager/)\n\n1. Feche e abra o prompt de comando e faça o download do plugin do eslint no repositório localmente:\n   ```sh\n   cd \u003cdiretorio_do_seu_repo\u003e\n   npm install --save-dev eslint-config-standard-with-typescript@23.0.0 eslint@8.24.0\n   ```\n\n1. Cheque o seu código com o eslint antes de enviar. O\n   arquivo de configuração usado pelo repo está em `ci/.eslintrc.yml`. Para\n   checar o seu programa, rode:\n\n   ```\n   npx eslint -c \u003cdiretorio_do_seu_repo\u003e/ci/.eslintrc.yml \u003ccaminho_arquivo.js\u003e\n   ```\n\n   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:\n\n   ```\n   npx eslint -c /home/user/op-desafios/ci/.eslintrc.yml primos.js\n   ```\n\n1. Pull Requests contendo código em Javascript serão automaticamente verificados\n   pelo eslint. Ao submeter um PR, observe a tela do PR e verifique se a\n   integração falhou. Em caso de erro, clique no link e verifique as mensagens\n   de erro do eslint. Corrija o código, faça outro commit e push.\n\n\u003e :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.\n\n## Corrigindo um desafio\n\nQualquer 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.\n\nDigamos que você tenha que corrigir o desafio do usuário `MatMercer` na branch `d10`:\n\n```\n./checkout-fork.sh MatMercer:d10\n\n# os comandos abaixo dependem do desafio e linguagem de programação usada\ncd desafio-10/MatMercer/go\nmake\n```\n\n## Ainda tem dúvidas?\n\nEm caso de problemas ou dúvidas, entre em contato com um dos administradores\nno nosso [canal no Telegram](http://t.me/osprogramadores)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosprogramadores%2Fop-desafios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosprogramadores%2Fop-desafios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosprogramadores%2Fop-desafios/lists"}