My Codeforces Journal est une extension Chrome qui aide les utilisateurs de Codeforces à suivre les problèmes qu'ils ont résolus. D'un simple clic, l'extension stocke les détails du problème actuel dans une feuille de calcul Google à laquelle l'utilisateur s'est connecté. Cela facilite la tenue d'un journal personnel des problèmes résolus au fil du temps.
Vous souhaitez contribuer à cette extension chrom ? Accédez à ce dépôt : My Codeforces Journal Development
Stockage en un clic : enregistrez le problème Codeforces actuel que vous avez résolu en un seul clic.
Intégration d'une feuille de calcul : associez votre propre feuille de calcul Google pour stocker et organiser les problèmes dans un format qui vous convient.
Détails du problème capturés : l'extension stocke des informations clés telles que l'URL du problème, le nom du problème et l'évaluation du problème.
Regardez cette vidéo YouTube : Comment démarrer avec My Codeforces Journal
Avant de pouvoir utiliser l'extension, assurez-vous de disposer des éléments suivants :
Une feuille de calcul Google où les problèmes seront stockés.
L'extension Codeforces Journal Chrome installée et autorisée à accéder à votre feuille de calcul.
Assurez-vous de lire la SECTION DES ERREURS COURANTES à la fin de ceci.
Téléchargez le dossier dist
à partir du lien suivant : My Codeforces Journal
Ouvrez Chrome et accédez à chrome://extensions/
.
Activez le mode développeur dans le coin supérieur droit.
Cliquez sur Charger décompressé et sélectionnez le dossier dans lequel le dossier dist
est enregistré.
L'extension devrait maintenant être visible sur votre page d'extensions.
Épinglez l’extension sur la barre d’outils pour une utilisation facile.
Créez une nouvelle feuille de calcul Google.
Nommez la feuille de calcul comme vous préférez.
Cliquez sur le menu "Extensions", puis cliquez sur "App Script".
Cliquez sur "Sans titre" et renommez ce fichier App Script pour qu'il corresponde au nom de votre feuille de calcul.
Copiez le code ci-dessous et collez-le dans l'éditeur App Script, puis enregistrez en appuyant sur cmd + S
/ ctrl + S
Cliquez sur le bouton « Déployer » en haut à droite et choisissez « Nouveau déploiement ».
Ajoutez une description de votre choix (peut être identique au nom de votre feuille de calcul).
Définissez « Qui a accès » sur « Tout le monde ».
Cliquez sur "Déployer" et autorisez l'App Script,
Après avoir cliqué sur Autoriser, sélectionnez le compte Google que vous avez utilisé pour créer la feuille de calcul, puis un message "Google n'a pas vérifié cette application" s'affichera.
Cliquez sur Avancé en bas et,
Cliquez sur le nom du projet AppScript affiché, puis cliquez sur Autoriser
Redéployez le projet AppScript juste pour vous assurer que votre projet a été correctement autorisé
Copiez l'URL du script, car il s'agit de votre URL AppScript, et enregistrez-la pour une utilisation ultérieure dans l'extension.
Cliquez à nouveau sur le bouton "Déployer"
Sélectionnez "Gérer les déploiements", puis un modal apparaîtra
Cliquez sur le bouton "Modifier" (l'icône du stylo), et maintenant le bouton "Déployer" en bas deviendra actif
Cliquez sur déployer
S'il existe une erreur avec l'autorisation, le bouton d'autorisation s'affichera à nouveau, ou bien il vous sera demandé de copier l'URL du script.
function doPost(e) { try { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // Analyse les données de la requête entrante var data; essayez { data = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status":"error","message":"Format JSON invalide."}').setMimeType(ContentService.MimeType.TEXT); } // Vérifiez si la requête vise à rechercher un problème existant if (data.action === "checkProblem") { const problemNameColumn = sheet .getRange("B2:B" + sheet.getLastRow()) .getValues() .plat(); const problemExists = problemNameColumn.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({ status: "success", exist: problemExists })).setMimeType(ContentService.MimeType.JSON); } // (Votre logique 'initialize' et 'addProblem' existante ici) if (data.action === "initialize") { var headers = ["Rating", "Problem", "Status", "Remarks", " Date", "À emporter", "Sujets"] ; if (sheet.getLastRow() === 0 || sheet.getRange("A1").getValue() === "") { // La logique d'initialisation reste la même sheet.getRange("A1:G1"). fusionner(); sheet.getRange("A1").setValue("Feuille Codeforces"); sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); sheet.getRange("A2:G2").setValues([en-têtes]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); feuille.setColumnWidth(1, 75); feuille.setColumnWidth(2, 185); feuille.setColumnWidth(3, 155); feuille.setColumnWidth(4, 290); feuille.setColumnWidth(5, 80); feuille.setColumnWidth(6, 530); feuille.setColumnWidth(7, 190); sheet.getRange("A2:G1000").setVerticalAlignment("middle"); sheet.getRange("C2:C1000").setWrap(true); sheet.getRange("D2:D1000").setWrap(true); sheet.getRange("F2:F1000").setWrap(true); sheet.getRange("G2:G1000").setWrap(true); sheet.getRange("A2:A1000").setHorizontalAlignment("center"); sheet.getRange("B2:B1000").setHorizontalAlignment("center"); sheet.getRange("E2:E1000").setHorizontalAlignment("center"); sheet.getRange("G2:G1000").setHorizontalAlignment("center"); var nouvelleDate = nouvelle Date(); sheet.getRange("E3:E1000").setNumberFormat("jj-mmm-aaaa"); feuille.insertRowBefore(3); sheet .getRange("A3:G3") .setValues([ [9999, "Problem9999Z", "Résolu", "Impossible d'implémenter mon intuition", newDate, "J'ai compris comment fonctionne la récursivité", "Récursion, DP, Graphique" ], ]); return ContentService.createTextOutput( '{"status":"success","message":"En-têtes initialisés avec formatage, largeurs de colonnes personnalisées et ligne ajoutée."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status":"success","message":"Les en-têtes existent déjà."}').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 = feuille.getLastRow() + 1; feuille.appendRow(newRow); const problemNameCell = sheet.getRange(lastRow, 2); if (data.problemUrl) { problemNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status":"success","message":"Données du problème ajoutées avec un lien hypertexte."}').setMimeType( ContentService.MimeType.JSON ); } catch (addError) { return ContentService.createTextOutput('{"status":"error","message":"Échec de l'ajout des données du problème."}').setMimeType( ContentService.MimeType.TEXT ); } } } catch (erreur) { return ContentService.createTextOutput('{"status":"error","message":"' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
Ouvrez n’importe quelle page de problème Codeforces.
Une fois que vous avez résolu le problème, cliquez sur l'icône de l'extension My Codeforces Journal, puis cliquez sur « Ajouter un problème ».
Remplissez le formulaire et appuyez sur « Envoyer ».
Les détails du problème seront automatiquement enregistrés dans la feuille de calcul connectée.
Cette extension nécessite les autorisations suivantes :
Onglet Actif : Pour accéder à l'URL de l'onglet courant lors de l'enregistrement du problème.
Stockage : Pour stocker les détails de votre feuille de calcul connectée.
Scripting : Pour exécuter JavaScript
Cause : cela se produit généralement si un ID Codeforces inexistant a été soumis.
Solution : Vérifiez à nouveau l'ID et assurez-vous qu'il est correct.
Cause : Cette erreur signifie généralement que l'URL AppScript fournie est incorrecte.
Solution : vérifiez l'URL et utilisez l'URL AppScript correcte.
Conseil supplémentaire : cette erreur peut également apparaître si votre projet AppScript n'a pas été correctement autorisé. Pour garantir une autorisation appropriée :
Lors de la configuration de la feuille de calcul, déployez votre projet AppScript deux fois ; le deuxième déploiement aidera à confirmer que le projet AppScript est entièrement autorisé.
Cause : Cela se produit si le problème que vous essayez d'ajouter n'a pas été résolu au cours de vos 40 dernières soumissions sur Codeforces.
Solution : assurez-vous d'avoir résolu le problème récemment. Sinon, essayez-le sur Codeforces avant de l'ajouter à la feuille de calcul.