Jurnal Codeforces Saya adalah ekstensi Chrome yang membantu pengguna Codeforces melacak masalah yang telah mereka pecahkan. Hanya dengan satu klik, ekstensi menyimpan detail masalah saat ini ke Google Spreadsheet yang telah dihubungkan pengguna. Hal ini memudahkan untuk menyimpan catatan pribadi tentang masalah yang diselesaikan seiring berjalannya waktu.
Ingin berkontribusi pada ekstensi chrom ini? Buka repo ini: Pengembangan Jurnal Codeforces Saya
Penyimpanan Sekali Klik : Simpan masalah Codeforces saat ini yang telah Anda selesaikan dengan satu klik.
Integrasi Spreadsheet : Tautkan Google Spreadsheet Anda sendiri untuk menyimpan dan mengatur masalah dalam format yang sesuai untuk Anda.
Detail Masalah Diambil : Ekstensi menyimpan informasi penting seperti URL masalah, nama masalah, dan peringkat masalah.
Tonton video youtube ini: Cara memulai Jurnal Codeforces Saya
Sebelum Anda dapat menggunakan ekstensi, pastikan Anda memiliki hal berikut:
Google Spreadsheet tempat masalah akan disimpan.
Ekstensi Chrome Jurnal Codeforces dipasang dan diberi otorisasi untuk mengakses spreadsheet Anda.
Pastikan untuk membaca BAGIAN KESALAHAN UMUM di akhir ini.
Unduh folder dist
dari tautan berikut: Jurnal Codeforces Saya
Buka Chrome dan buka chrome://extensions/
.
Aktifkan mode Pengembang di sudut kanan atas.
Klik Load unpacked dan pilih folder tempat folder dist
disimpan.
Ekstensi sekarang seharusnya terlihat di laman ekstensi Anda.
Sematkan ekstensi pada toolbar agar mudah digunakan.
Buat Google Spreadsheet baru.
Beri nama Spreadsheet sesuai keinginan Anda.
Klik menu "Ekstensi", lalu klik "Skrip Aplikasi".
Klik "Tanpa Judul" dan ganti nama file App Script ini agar sesuai dengan nama Spreadsheet Anda.
Salin kode di bawah ini dan tempel ke editor App Script, dan simpan dengan menekan tombol cmd + S
/ ctrl + S
Klik tombol "Deploy" di kanan atas dan pilih "Deployment Baru".
Tambahkan deskripsi pilihan Anda (bisa sama dengan nama SpreadSheet Anda).
Setel "Siapa yang memiliki akses" ke "Siapa saja".
Klik "Deploy" dan otorisasi App Script,
Setelah mengeklik otorisasi, pilih Akun Google yang Anda gunakan untuk membuat SpreadSheet, lalu Anda akan melihat pesan "Google belum memverifikasi aplikasi ini"
Klik Lanjutan di bagian bawah dan,
Klik nama proyek AppScript yang ditampilkan, lalu klik Izinkan
Terapkan ulang proyek AppScript hanya untuk memastikan proyek Anda telah diotorisasi dengan benar
Salin URL skrip, karena ini adalah URL AppScript Anda, dan simpan untuk digunakan nanti di ekstensi.
Sekali lagi klik tombol "Deploy".
Pilih "Kelola penerapan", dan modal akan muncul
Klik tombol "Edit" (ikon Pena), dan sekarang tombol "deploy" di bagian bawah akan aktif
Klik pada penerapan
Jika ada kesalahan dengan otorisasi, maka Anda akan diperlihatkan tombol otorisasi lagi, atau Anda akan diminta untuk menyalin URL skrip
fungsi doPost(e) { coba { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // Parsing data permintaan masuk var data; coba { data = JSON.parse(e.postData.contents); } catch (parseError) { return ContentService.createTextOutput('{"status":"error","message":"Format JSON tidak valid."}').setMimeType(ContentService.MimeType.TEXT); } // Periksa apakah permintaannya untuk memeriksa masalah yang ada if (data.action === "checkProblem") { const problemNameColumn = sheet .getRange("B2:B" + sheet.getLastRow()) .getValues() .datar(); const problemExists = problemNameColumn.includes(data.problemName); return ContentService.createTextOutput(JSON.stringify({ status: "success", ada: problemExists })).setMimeType(ContentService.MimeType.JSON); } // (Logika 'inisialisasi' dan 'addProblem' yang ada di sini) if (data.action === "initialize") { var headers = ["Rating", "Problem", "Status", "Remarks", " Tanggal", "Bawa Pulang", "Topik"]; if (sheet.getLastRow() === 0 || sheet.getRange("A1").getValue() === "") {/ // Logika inisialisasi tetap sama sheet.getRange("A1:G1"). menggabungkan(); sheet.getRange("A1").setValue("Lembar Kekuatan Kode"); sheet.getRange("A1").setFontSize(13).setHorizontalAlignment("center").setBackground("#ffd966"); sheet.getRange("A2:G2").setValues([header]); sheet.getRange("A2:G2").setFontSize(12).setHorizontalAlignment("center").setBackground("#93c47d"); lembar.setColumnWidth(1, 75); lembar.setColumnWidth(2, 185); lembar.setColumnWidth(3, 155); lembar.setColumnWidth(4, 290); lembar.setColumnWidth(5, 80); lembar.setColumnWidth(6, 530); lembar.setColumnWidth(7, 190); sheet.getRange("A2:G1000").setVerticalAlignment("tengah"); sheet.getRange("C2:C1000").setWrap(benar); sheet.getRange("D2:D1000").setWrap(benar); sheet.getRange("F2:F1000").setWrap(benar); sheet.getRange("G2:G1000").setWrap(benar); sheet.getRange("A2:A1000").setHorizontalAlignment("tengah"); sheet.getRange("B2:B1000").setHorizontalAlignment("tengah"); sheet.getRange("E2:E1000").setHorizontalAlignment("tengah"); sheet.getRange("G2:G1000").setHorizontalAlignment("tengah"); var Tanggal baru = Tanggal baru(); sheet.getRange("E3:E1000").setNumberFormat("hh-mmm-yyyy"); sheet.insertRowBefore(3); sheet .getRange("A3:G3") .setValues([ [9999, "Problem9999Z", "Solved", "Tidak dapat menerapkan intuisi saya", newDate, "Saya memahami cara kerja rekursi", "Rekursi, DP, Grafik" ], ]); return ContentService.createTextOutput( '{"status":"success","message":"Header diinisialisasi dengan pemformatan, lebar kolom khusus, dan penambahan baris."}' ).setMimeType(ContentService.MimeType.TEXT); } else { return ContentService.createTextOutput('{"status":"success","message":"Header sudah ada."}').setMimeType(ContentService.MimeType.TEXT); } } else if (data.action === "addProblem") { coba { const newRow = [data.problemRating, data.problemName, data.problemStatus, data.remarks, data.dateSolved, data.takeaways, data.problemTopics] ; const lastRow = sheet.getLastRow() + 1; sheet.appendRow(baris baru); 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":"Data masalah ditambahkan dengan hyperlink."}').setMimeType( ContentService.MimeType.JSON ); } catch (addError) { return ContentService.createTextOutput('{"status":"error","message":"Gagal menambahkan data masalah."}').setMimeType( ContentService.MimeType.TEXT ); } } } catch (kesalahan) { return ContentService.createTextOutput('{"status":"error","message":"' + error.message + '"}').setMimeType(ContentService.MimeType.TEXT); }}
Buka halaman masalah Codeforces apa pun.
Setelah Anda menyelesaikan masalahnya, klik ikon ekstensi Jurnal Codeforces Saya, lalu klik "Tambahkan Masalah".
Isi formulir, dan tekan "Kirim."
Detail masalah akan disimpan secara otomatis ke spreadsheet yang terhubung.
Ekstensi ini memerlukan izin berikut:
Tab Aktif : Untuk mengakses URL tab saat ini saat menyimpan masalah.
Penyimpanan : Untuk menyimpan detail spreadsheet Anda yang terhubung.
Scripting : Untuk menjalankan JavaScript
Penyebab : Hal ini biasanya terjadi jika ID Codeforces yang tidak ada telah dikirimkan.
Solusi : Periksa kembali ID dan pastikan sudah benar.
Penyebab : Kesalahan ini umumnya berarti URL AppScript yang diberikan salah.
Solusi : Verifikasi URL dan gunakan URL AppScript yang benar.
Tip Tambahan : Kesalahan ini juga dapat muncul jika Proyek AppScript Anda belum diotorisasi dengan benar. Untuk memastikan otorisasi yang tepat:
Selama penyiapan spreadsheet, terapkan Proyek AppScript Anda dua kali; penerapan kedua akan membantu mengonfirmasi bahwa Proyek AppScript telah diotorisasi sepenuhnya.
Penyebab : Ini terjadi jika masalah yang Anda coba tambahkan belum terpecahkan dalam 40 kiriman terakhir Anda di Codeforces.
Solusi : Pastikan Anda telah menyelesaikan masalah baru-baru ini. Jika tidak, cobalah di Codeforces sebelum menambahkannya ke Spreadsheet.