Мой журнал Codeforces — это расширение Chrome, которое помогает пользователям Codeforces отслеживать решенные ими проблемы. Одним щелчком мыши расширение сохраняет подробную информацию о текущей проблеме в электронной таблице Google, к которой подключился пользователь. Это позволяет легко вести личный журнал проблем, решенных с течением времени.
Хотите внести свой вклад в это хром-расширение? Перейдите в этот репозиторий: Мой журнал разработки Codeforces.
Хранилище в один клик : сохраните текущую проблему Codeforces, которую вы решили, одним щелчком мыши.
Интеграция с электронными таблицами . Свяжите свою собственную таблицу Google, чтобы хранить и систематизировать задачи в удобном для вас формате.
Сохранены сведения о проблеме : расширение хранит ключевую информацию, такую как URL-адрес проблемы, имя проблемы и рейтинг проблемы.
Посмотрите это видео на YouTube: Как начать работу с My Codeforces Journal
Прежде чем вы сможете использовать расширение, убедитесь, что у вас есть следующее:
Таблица Google, в которой будут храниться проблемы.
Расширение Codeforces Journal Chrome установлено и имеет разрешение на доступ к вашей электронной таблице.
Обязательно прочтите РАЗДЕЛ «РАСПРОСТРАНЕННЫЕ ОШИБКИ» в конце статьи.
Загрузите папку dist
по следующей ссылке: Мой журнал Codeforces.
Откройте Chrome и перейдите по адресу chrome://extensions/
.
Включите режим разработчика в правом верхнем углу.
Нажмите «Загрузить распакованное» и выберите папку, в которой сохраняется папка dist
.
Расширение теперь должно быть видно на вашей странице расширений.
Закрепите расширение на панели инструментов для удобства использования.
Создайте новую таблицу Google.
Назовите таблицу по своему усмотрению.
Нажмите меню «Расширения», а затем нажмите «Скрипт приложения».
Нажмите «Без названия» и переименуйте этот файл сценария приложения в соответствии с именем вашей электронной таблицы.
Скопируйте приведенный ниже код и вставьте его в редактор App Script и сохраните, нажав cmd + S
/ ctrl + S
Нажмите кнопку «Развернуть» в правом верхнем углу и выберите «Новое развертывание».
Добавьте описание по вашему выбору (может совпадать с именем вашей таблицы).
Установите для параметра «Кто имеет доступ» значение «Любой».
Нажмите «Развернуть» и авторизуйте сценарий приложения,
Нажав «Разрешить», выберите учетную запись Google, которую вы использовали для создания электронной таблицы, после чего вам будет показано сообщение «Google не подтвердил это приложение».
Нажмите «Дополнительно» внизу и
Нажмите на имя показанного проекта AppScript, затем нажмите «Разрешить».
Повторно разверните проект AppScript, чтобы убедиться, что ваш проект авторизован правильно.
Скопируйте URL-адрес скрипта, так как это URL-адрес вашего AppScript, и сохраните его для дальнейшего использования в расширении.
Снова нажмите кнопку «Развернуть».
Выберите «Управление развертываниями», после чего появится модальное окно.
Нажмите на кнопку «Редактировать» (значок «Перо»), и теперь кнопка «Развернуть» внизу станет активной.
Нажмите «Развернуть»
Если при авторизации возникла какая-то ошибка, вам снова будет показана кнопка авторизации, либо вам будет предложено скопировать URL-адрес скрипта.
function doPost(e) { try { varsheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // Анализ данных входящего запроса var data; попробуйте {данные = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status":"error","message":"Неверный формат JSON."}').setMimeType(ContentService.MimeType.TEXT); } // Проверяем, является ли запрос проверкой существующей проблемы if (data.action === "checkProblem") { constproblemNameColumn =sheet .getRange("B2:B" +sheet.getLastRow()) .getValues() .плоский(); const проблемаExists = имя_проблемыКолонка.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({статус: "успех", существует: проблемаExists })).setMimeType(ContentService.MimeType.JSON); } // (Здесь ваша существующая логика инициализации и добавления проблемы) if (data.action === "initialize") { var headers = ["Рейтинг", "Проблема", "Статус", "Примечания", " Дата», «Вынос», «Темы»]; if (sheet.getLastRow() === 0 ||sheet.getRange("A1").getValue() === "") { // Логика инициализации остается прежней.sheet.getRange("A1:G1"). слияние(); sheet.getRange("A1").setValue("Лист Codeforces"); sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); лист.getRange("A2:G2").setValues([заголовки]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); лист.setColumnWidth(1, 75); лист.setColumnWidth(2, 185); лист.setColumnWidth(3, 155); лист.setColumnWidth(4, 290); лист.setColumnWidth(5, 80); лист.setColumnWidth(6, 530); лист.setColumnWidth(7, 190); лист.getRange("A2:G1000").setVerticalAlignment("средний"); лист.getRange("C2:C1000").setWrap(true); лист.getRange("D2:D1000").setWrap(true); лист.getRange("F2:F1000").setWrap(true); лист.getRange("G2:G1000").setWrap(true); лист.getRange("A2:A1000").setHorizontalAlignment("центр"); лист.getRange("B2:B1000").setHorizontalAlignment("центр"); лист.getRange("E2:E1000").setHorizontalAlignment("центр"); лист.getRange("G2:G1000").setHorizontalAlignment("центр"); вар newDate = новая дата(); sheet.getRange("E3:E1000").setNumberFormat("дд-ммм-гггг"); лист.insertRowBefore(3); лист .getRange("A3:G3") .setValues([ [9999, "Проблема9999Z", "Решено", "Не удалось реализовать мою интуицию", newDate, "Я понял, как работает рекурсия", "Рекурсия, DP, График" ], ]); return ContentService.createTextOutput( '{"status":"success","message":"Заголовки инициализированы с форматированием, настраиваемой шириной столбца и добавленной строкой."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status":"success","message":"Заголовки уже существуют."}').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; лист.appendRow(newRow); const проблемаNameCell =sheet.getRange(lastRow, 2); if (data.problemUrl) {problemNameCell.setValue(data.problemName).setFormula(`=HYPERLINK("${data.problemUrl}", "${data.problemName}")`); } return ContentService.createTextOutput('{"status":"success","message":"Проблемные данные добавлены с помощью гиперссылки."}').setMimeType( ContentService.MimeType.JSON); } catch (addError) { return ContentService.createTextOutput('{"status":"error","message":"Не удалось добавить данные о проблеме."}').setMimeType( ContentService.MimeType.TEXT); } } } catch (error) { return ContentService.createTextOutput('{"status":"error","message":"' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
Откройте любую страницу проблемы Codeforces.
Решив проблему, щелкните значок расширения «Мой журнал Codeforces», а затем нажмите «Добавить проблему».
Заполните форму и нажмите «Отправить».
Подробности проблемы будут автоматически сохранены в подключенной электронной таблице.
Это расширение требует следующих разрешений:
Активная вкладка : доступ к URL-адресу текущей вкладки при сохранении проблемы.
Хранение : для хранения данных подключенной электронной таблицы.
Сценарии : для запуска JavaScript
Причина . Обычно это происходит, если был отправлен несуществующий идентификатор Codeforces.
Решение : дважды проверьте идентификатор и убедитесь, что он верен.
Причина . Эта ошибка обычно означает, что предоставленный URL-адрес AppScript неверен.
Решение . Проверьте URL-адрес и используйте правильный URL-адрес AppScript.
Дополнительный совет . Эта ошибка также может появиться, если ваш проект AppScript не был должным образом авторизован. Чтобы обеспечить правильную авторизацию:
Во время настройки электронной таблицы дважды разверните проект AppScript; второе развертывание поможет подтвердить полную авторизацию проекта AppScript.
Причина . Это происходит, если проблема, которую вы пытаетесь добавить, не была решена за последние 40 отправок на Codeforces.
Решение : Убедитесь, что вы недавно решили проблему. Если нет, попробуйте это сделать на Codeforces, прежде чем добавлять в электронную таблицу.