My Codeforces Journal é uma extensão do Chrome que ajuda os usuários do Codeforces a rastrear os problemas que resolveram. Com apenas um clique, a extensão armazena os detalhes do problema atual em uma planilha do Google que o usuário conectou. Isso facilita manter um registro pessoal dos problemas resolvidos ao longo do tempo.
Quer contribuir para esta extensão chrom? Vá para este repositório: My Codeforces Journal Development
Armazenamento com um clique : salve o problema atual do Codeforces que você resolveu com um único clique.
Integração com planilhas : vincule sua própria planilha do Google para armazenar e organizar problemas no formato que mais lhe convier.
Detalhes do problema capturados : a extensão armazena informações importantes, como URL do problema, nome do problema e classificação do problema.
Assista a este vídeo do youtube: Como começar a usar o My Codeforces Journal
Antes de poder usar a extensão, certifique-se de ter o seguinte:
Uma planilha do Google onde os problemas serão armazenados.
A extensão Codeforces Journal para Chrome instalada e autorizada a acessar sua planilha.
Certifique-se de ler a SEÇÃO DE ERROS COMUNS no final deste artigo.
Baixe a pasta dist
no seguinte link: My Codeforces Journal
Abra o Chrome e vá para chrome://extensions/
.
Ative o modo Desenvolvedor no canto superior direito.
Clique em Carregar descompactado e selecione a pasta onde a pasta dist
está salva.
A extensão agora deve estar visível na sua página de extensões.
Fixe a extensão na barra de ferramentas para facilitar o uso.
Crie uma nova planilha do Google.
Nomeie a planilha como preferir.
Clique no menu “Extensões” e depois em “App Script”.
Clique em “Sem título” e renomeie este arquivo App Script para corresponder ao nome da sua planilha.
Copie o código abaixo e cole-o no editor do App Script e salve pressionando a tecla cmd + S
/ ctrl + S
Clique no botão “Implantar” no canto superior direito e escolha “Nova implantação”.
Adicione uma descrição de sua escolha (pode ser igual ao nome da sua planilha).
Defina “Quem tem acesso” como “Qualquer pessoa”.
Clique em "Implantar" e autorize o App Script,
Ao clicar em autorizar, selecione a Conta do Google que você usou para criar a planilha e você verá a mensagem "O Google não verificou este aplicativo"
Clique em Avançado na parte inferior e,
Clique no nome do projeto AppScript mostrado e clique em Permitir
Reimplante o projeto AppScript apenas para garantir que seu projeto foi autorizado corretamente
Copie o URL do script, pois este é o URL do AppScript, e salve-o para uso posterior na extensão.
Clique novamente no botão "Implantar"
Selecione "Gerenciar implantações" e um modal aparecerá
Clique no botão "Editar" (o ícone da caneta) e agora o botão "implantar" na parte inferior ficará ativo
Clique em implantar
Se houver algum erro com a autorização, será mostrado o botão de autorização novamente, ou então será mostrado que você deve copiar o URL do script
function doPost(e) { try { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // analisa os dados da solicitação recebida var data; tente {dados = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status":"error","message":"Formato JSON inválido."}').setMimeType(ContentService.MimeType.TEXT); } // Verifica se a solicitação é para verificar um problema existente if (data.action === "checkProblem") { const problemNameColumn = sheet .getRange("B2:B" + sheet.getLastRow()) .getValues() .plano(); const problemaExists = problemaNameColumn.includes(data.problemName); retornar ContentService.createTextOutput(JSON.stringify({ status: "sucesso", existe: problemaExists })).setMimeType(ContentService.MimeType.JSON); } // (Sua lógica existente de 'initialize' e 'addProblem' aqui) if (data.action === "initialize") { var headers = ["Rating", "Problem", "Status", "Observações", " Data", "Retirada", "Tópicos"]; if (sheet.getLastRow() === 0 || sheet.getRange("A1").getValue() === "") { // A lógica de inicialização permanece a mesma sheet.getRange("A1:G1"). mesclar(); sheet.getRange("A1").setValue("Codeforces Sheet"); sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); sheet.getRange("A2:G2").setValues([cabeçalhos]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); planilha.setColumnWidth(1, 75); planilha.setColumnWidth(2, 185); planilha.setColumnWidth(3, 155); planilha.setColumnWidth(4, 290); planilha.setColumnWidth(5, 80); planilha.setColumnWidth(6, 530); planilha.setColumnWidth(7, 190); sheet.getRange("A2:G1000").setVerticalAlignment("meio"); planilha.getRange("C2:C1000").setWrap(true); planilha.getRange("D2:D1000").setWrap(true); planilha.getRange("F2:F1000").setWrap(true); planilha.getRange("G2:G1000").setWrap(true); sheet.getRange("A2:A1000").setHorizontalAlignment("centro"); sheet.getRange("B2:B1000").setHorizontalAlignment("centro"); sheet.getRange("E2:E1000").setHorizontalAlignment("centro"); sheet.getRange("G2:G1000").setHorizontalAlignment("centro"); var novaData = nova Data(); sheet.getRange("E3:E1000").setNumberFormat("dd-mmm-aaaa"); planilha.insertRowBefore(3); sheet .getRange("A3:G3") .setValues([ [9999, "Problem9999Z", "Resolvido", "Não foi possível implementar minha intuição", newDate, "Entendi como funciona a recursão", "Recursão, DP, Gráfico" ], ]); return ContentService.createTextOutput( '{"status":"success","message":"Cabeçalhos inicializados com formatação, larguras de coluna personalizadas e linha adicionada."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status":"sucesso","message":"Cabeçalhos já existem."}').setMimeType(ContentService.MimeType.TEXT); } } else if (data.action === "addProblem") { try { const newRow = [data.problemRating, data.problemName, data.problemStatus, data.remarks, data.dateSolved, data.takeaways, data.problemTopics] ; const lastRow = sheet.getLastRow() + 1; planilha.appendRow(newRow); const problemaNameCell = sheet.getRange(lastRow, 2); if (data.problemUrl) { problemNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status":"success","message":"Dados do problema adicionados com hiperlink."}').setMimeType( ContentService.MimeType.JSON ); } catch (addError) { return ContentService.createTextOutput('{"status":"error","message":"Falha ao adicionar dados do problema."}').setMimeType( ContentService.MimeType.TEXT ); } } } catch (erro) { return ContentService.createTextOutput('{"status":"error","message":"' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
Abra qualquer página de problema do Codeforces.
Depois de resolver o problema, clique no ícone da extensão My Codeforces Journal e, a seguir, clique em “Adicionar problema”.
Preencha o formulário e pressione “Enviar”.
Os detalhes do problema serão salvos automaticamente na planilha conectada.
Esta extensão requer as seguintes permissões:
Aba Ativa : Para acessar a URL da aba atual ao salvar o problema.
Armazenamento : para armazenar os detalhes da planilha conectada.
Scripting : Para executar JavaScript
Causa : Isso normalmente ocorre se um ID Codeforces inexistente foi enviado.
Solução : verifique novamente o ID e certifique-se de que esteja correto.
Causa : Este erro geralmente significa que o URL do AppScript fornecido está incorreto.
Solução : verifique o URL e use o URL AppScript correto.
Dica adicional : Este erro também pode aparecer se o seu projeto AppScript não tiver sido devidamente autorizado. Para garantir a autorização adequada:
Durante a configuração da planilha, implante seu projeto AppScript duas vezes; a segunda implantação ajudará a confirmar se o projeto AppScript está totalmente autorizado.
Causa : Isso ocorre se o problema que você está tentando adicionar não foi resolvido nos últimos 40 envios no Codeforces.
Solução : certifique-se de ter resolvido o problema recentemente. Caso contrário, experimente no Codeforces antes de adicioná-lo à planilha.