My Codeforces Journal es una extensión de Chrome que ayuda a los usuarios de Codeforces a realizar un seguimiento de los problemas que han resuelto. Con solo un clic, la extensión almacena los detalles del problema actual en una hoja de cálculo de Google que el usuario ha conectado. Esto facilita mantener un registro personal de los problemas resueltos a lo largo del tiempo.
¿Quieres contribuir a esta extensión de Chrome? Vaya a este repositorio: My Codeforces Journal Development
Almacenamiento con un clic : guarde el problema actual de Codeforces que ha resuelto con un solo clic.
Integración de hojas de cálculo : vincule su propia hoja de cálculo de Google para almacenar y organizar problemas en el formato que más le convenga.
Detalles del problema capturados : la extensión almacena información clave, como la URL del problema, el nombre del problema y la clasificación del problema.
Mire este vídeo de YouTube: Cómo empezar con My Codeforces Journal
Antes de poder usar la extensión, asegúrese de tener lo siguiente:
Una Hoja de Cálculo de Google donde se almacenarán los problemas.
La extensión Codeforces Journal Chrome instalada y autorizada para acceder a su hoja de cálculo.
Asegúrese de leer la SECCIÓN DE ERRORES COMUNES al final de este artículo.
Descargue la carpeta dist
desde el siguiente enlace: My Codeforces Journal
Abra Chrome y vaya a chrome://extensions/
.
Habilite el modo de desarrollador en la esquina superior derecha.
Haga clic en Cargar descomprimido y seleccione la carpeta donde se guarda la carpeta dist
.
La extensión ahora debería estar visible en su página de extensiones.
Fije la extensión en la barra de herramientas para facilitar su uso.
Crea una nueva hoja de cálculo de Google.
Nombra la hoja de cálculo como prefieras.
Haga clic en el menú "Extensiones" y luego haga clic en "App Script".
Haga clic en "Sin título" y cambie el nombre de este archivo de App Script para que coincida con el nombre de su hoja de cálculo.
Copie el código a continuación, péguelo en el editor de App Script y guárdelo presionando las teclas cmd + S
/ ctrl + S
Haga clic en el botón "Implementar" en la parte superior derecha y elija "Nueva implementación".
Agregue una descripción de su elección (podría ser la misma que el nombre de su hoja de cálculo).
Establezca "Quién tiene acceso" a "Cualquiera".
Haga clic en "Implementar" y autorice el script de la aplicación.
Al hacer clic en autorizar, seleccione la cuenta de Google que utilizó para crear la hoja de cálculo y luego se le mostrará el mensaje "Google no ha verificado esta aplicación".
Haga clic en Avanzado en la parte inferior y,
Haga clic en el nombre del proyecto AppScript que se muestra, luego haga clic en Permitir
Vuelva a implementar el proyecto AppScript solo para asegurarse de que su proyecto haya sido autorizado correctamente
Copie la URL del script, ya que esta es su URL de AppScript, y guárdela para usarla más adelante en la extensión.
Haga clic nuevamente en el botón "Implementar"
Seleccione "Administrar implementaciones" y luego aparecerá un modal
Haga clic en el botón "Editar" (el ícono del lápiz) y ahora se activará el botón "implementar" en la parte inferior.
Haga clic en implementar
Si existe algún error con la autorización, se le mostrará el botón de autorización nuevamente o se le mostrará que copie la URL del script.
función doPost(e) { intentar { var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // Analiza los datos de la solicitud entrante var data; intente {datos = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status":"error","message":"Formato JSON no válido."}').setMimeType(ContentService.MimeType.TEXT); } // Comprobar si la solicitud es para comprobar si hay un problema existente if (data.action === "checkProblem") { const problemNameColumn = hoja .getRange("B2:B" + hoja.getLastRow()) .getValues() .departamento(); const problemaExists = problemaNameColumn.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({ estado: "éxito", existe: problemaExists })).setMimeType(ContentService.MimeType.JSON); } // (Su lógica existente de 'inicializar' y 'agregarProblema' aquí) if (data.action === "initialize") { var headers = ["Calificación", "Problema", "Estado", "Observaciones", " Fecha", "Para llevar", "Temas"]; if (sheet.getLastRow() === 0 ||sheet.getRange("A1").getValue() === "") { // La lógica de inicialización sigue siendo la mismasheet.getRange("A1:G1"). unir(); Sheet.getRange("A1").setValue("Hoja de fuerzas de código"); Sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); hoja.getRange("A2:G2").setValues([encabezados]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); hoja.setColumnWidth(1, 75); hoja.setColumnWidth(2, 185); hoja.setColumnWidth(3, 155); hoja.setColumnWidth(4, 290); hoja.setColumnWidth(5, 80); hoja.setColumnWidth(6, 530); hoja.setColumnWidth(7, 190); hoja.getRange("A2:G1000").setVerticalAlignment("medio"); hoja.getRange("C2:C1000").setWrap(true); hoja.getRange("D2:D1000").setWrap(true); hoja.getRange("F2:F1000").setWrap(true); hoja.getRange("G2:G1000").setWrap(true); hoja.getRange("A2:A1000").setHorizontalAlignment("centro"); hoja.getRange("B2:B1000").setHorizontalAlignment("centro"); hoja.getRange("E2:E1000").setHorizontalAlignment("centro"); hoja.getRange("G2:G1000").setHorizontalAlignment("centro"); var nuevaFecha = nueva Fecha(); hoja.getRange("E3:E1000").setNumberFormat("dd-mmm-aaaa"); hoja.insertRowBefore(3); hoja .getRange("A3:G3") .setValues([ [9999, "Problema9999Z", "Resuelto", "No pude implementar mi intuición", newDate, "Entendí cómo funciona la recursividad", "Recursión, DP, Gráfico" ], ]); return ContentService.createTextOutput( '{"status":"success","message":"Encabezados inicializados con formato, anchos de columna personalizados y fila agregada."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status":"success","message":"Los encabezados ya existen."}').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 última fila = hoja.getLastRow() + 1; hoja.appendRow(nuevaFila); const problemaNameCell = hoja.getRange(lastRow, 2); if (data.problemUrl) { problemNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status":"success","message":"Datos del problema agregados con hipervínculo."}').setMimeType( ContentService.MimeType.JSON ); } catch (addError) { return ContentService.createTextOutput('{"status":"error","message":"Error al agregar datos del problema."}').setMimeType( ContentService.MimeType.TEXT ); } } } catch (error) { return ContentService.createTextOutput('{"status":"error","message":"' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
Abra cualquier página de problemas de Codeforces.
Una vez que haya resuelto el problema, haga clic en el ícono de la extensión My Codeforces Journal y luego haga clic en "Agregar problema".
Complete el formulario y presione "Enviar".
Los detalles del problema se guardarán automáticamente en la hoja de cálculo conectada.
Esta extensión requiere los siguientes permisos:
Pestaña Activa : Para acceder a la URL de la pestaña actual al guardar el problema.
Almacenamiento : para almacenar los detalles de su hoja de cálculo conectada.
Secuencias de comandos : para ejecutar JavaScript
Causa : esto suele ocurrir si se envió una identificación de Codeforces que no existe.
Solución : vuelva a verificar la identificación y asegúrese de que sea correcta.
Causa : este error generalmente significa que la URL de AppScript proporcionada es incorrecta.
Solución : verifique la URL y utilice la URL de AppScript correcta.
Consejo adicional : este error también puede aparecer si su proyecto AppScript no ha sido autorizado adecuadamente. Para garantizar la autorización adecuada:
Durante la configuración de la hoja de cálculo, implemente su proyecto AppScript dos veces; la segunda implementación ayudará a confirmar que el proyecto AppScript está completamente autorizado.
Causa : esto ocurre si el problema que está intentando agregar no se resolvió en sus últimos 40 envíos en Codeforces.
Solución : asegúrese de haber resuelto el problema recientemente. De lo contrario, inténtelo en Codeforces antes de agregarlo a la hoja de cálculo.