La description: « Une extension de code Visual Studio pour aider les utilisateurs de Codeforces à coder avec commodité »
CodePal est une extension de code Visual Studio pour vous aider Codeforces Utilisateurs Codez avec commodité. Cette extension est particulièrement destinée aux personnes qui souhaitent gagner du temps dans un concours Codeforces en direct et résoudre facilement des problèmes. Cette extension répond rapidement aux utilisateurs. Il peut filtrer rapidement la liste des problèmes en spécifiant des balises et des notes, créer des dossiers pour les concours et les problèmes contenant des exemples de tests de chaque problème et compiler et exécuter des tests automatiquement. Pour plus de commodité, nous avons créé des boutons pour ouvrir directement les déclarations de problèmes et les pages de soumission sur le navigateur par défaut.
Bref aperçu des technologies utilisées :
NodeJS
- Node.js est un environnement d’exécution JavaScript open source, multiplateforme et back-end qui s’exécute sur le moteur V8 et exécute le code JavaScript en dehors d’un navigateur Web. Node.js nous permet d’utiliser JavaScript pour écrire des outils de ligne de commande et pour les scripts côté serveur, en exécutant des scripts côté serveur pour produire du contenu de page Web dynamique avant que la page ne soit envoyée au navigateur Web de l’utilisateur. Dans notre cas à l’éditeur VSCode.
- Ce n’est qu’avec NodeJS que nous pouvons effectuer des appels d’API à Codeforces pour obtenir toutes les fonctionnalités de nos extensions. Nous utilisons également NodeJS pour récupérer des données sur Internet.
API de codeforce
- L’API Codeforces est extrêmement utile et la plupart de nos fonctionnalités effectuent des appels d’API à Codeforces pour obtenir des informations utiles.
- Mais il ne fournit pas tout. Notre extension utilise une petite quantité de web scraping du site Web de Codeforces pour obtenir les données que l’API ne fournit pas, par exemple des cas de test pour un problème.
- La documentation de l’API Codeforces est petite mais claire.
Manuscrit
- TypeScript est un sur-ensemble typé de JavaScript qui se compile en JavaScript brut. Il propose des classes, des modules et des interfaces pour vous aider à créer des composants robustes.
- Le code TypeScript est transformé en code JavaScript via le compilateur TypeScript ou Babel. Ce JavaScript est un code simple et propre qui s’exécute partout où JavaScript s’exécute : dans un navigateur, sur Node.JS ou dans des applications. Dans notre cas, le fichier JavaScript final s’exécutera sur Node.JS.
- Comme il existe une compilation, Typescript facilite beaucoup le débogage de votre code par rapport à JavaScript.
API de code VS
- C’est la principale raison pour laquelle VS Code est populaire. L’API VS Code possède une pléthore de fonctionnalités utiles qui nous donnent non seulement beaucoup de contrôle sur l’environnement, mais nous facilitent également la compréhension et le codage.
- L’arborescence organisée, les menus contextuels, les raccourcis clavier, les zones de saisie, etc. sont quelques-unes des fonctionnalités de l’API qui ont été utilisées dans cette extension.
- On ne soulignera jamais assez à quel point la documentation Typescript de l’API VS Code est importante et utile. Il est concis, propre et extrêmement instructif. Il a été fortement évoqué ce projet.
Démo : Entrez Handle dans les paramètres et affichez les problèmes, les concours, et profil, avec le statut de soumission sur chaque problème.
Créez des dossiers de problèmes/concours comprenant tous les exemples de tests, compilez et exécutez automatiquement, obtenez des verdicts complets, et afficher l’énoncé du problème et les pages Web de soumission.
Filtrer les problèmes :
Test de stress de votre code :
Caractéristiques de l’extension et leurs détails de mise en œuvre
Afficher la liste complète des problèmes avec leurs balises et évaluations associées : La liste des problèmes ainsi que leurs détails sont disponibles via l’API Codeforces. Une classe de problèmes est gérée et initialisée en récupérant les détails de tous les problèmes à partir de ce point de terminaison d’API. La liste des problèmes récupérés est affichée dans une arborescence dans la barre d’activité sur le côté gauche de la fenêtre.
Filtrez rapidement l’ensemble de problèmes en spécifiant des évaluations, des balises, et statut de la soumission : La liste des problèmes affichés dans l’arborescence est filtrée en interne en fonction des balises du problème, de la plage d’évaluation des problèmes et de l’état de la soumission, puis restituée à l’écran. L’entrée pour les filtres est prise via l’API VS Code.
Affichez les concours en cours, à venir et passés, ainsi que la date et l’heure de début précises, et durée des concours à venir : La liste des concours ainsi que leurs détails sont disponibles via l’API Codeforces. Nous maintenons une classe de concours qui est initialisée en récupérant les détails de tous les concours à partir de ce point de terminaison d’API. La liste des concours est également affichée sous forme d’arborescence sur la barre d’activité à gauche de la fenêtre.
Création rapide de dossier en un seul clic pour les concours de la liste des concours Codeforces et les problèmes de la liste des problèmes Codeforces : Lorsqu’un utilisateur souhaite créer un dossier pour un problème sur Codeforces, un dossier portant le nom du problème est créé et les cas de test du problème particulier sont extraits de la page Web du problème et sont inclus dans le même dossier.
Lorsqu’un utilisateur souhaite créer un dossier de concours, un dossier portant le nom du concours est créé et un dossier pour chaque problème du concours est créé de manière itérative.
Le dossier d’un problème se compose de tous ses exemples de cas de test et d’un fichier programme chargé avec un modèle dont le chemin peut être spécifié dans les paramètres : Ce qui est également inclus dans un dossier de problème est un fichier nommé « Problem_name. {extension} » qui charge tout modèle de démarrage que vous aimez si vous spécifiez le chemin du modèle dans les paramètres de l’extension.
Ajoutez des tests supplémentaires à tout problème : 2 Des fichiers supplémentaires appelés « input_{test_number}.txt » et « output_{test_number}.txt » sont créés où l’utilisateur peut entrer respectivement l’entrée qu’il souhaite et la sortie attendue.
Compilez et exécutez n’importe quel fichier programme par rapport aux cas de test et obtenez des résultats complets : La bibliothèque *child_process* est utilisée pour exécuter la compilation et exécuter des commandes sur le système de l’hôte. Nous nous assurons de terminer un processus de programme en cours au cas où il dépasse 6 secondes d’exécution. Nous mesurons le temps en utilisant des courses de promesses en JavaScript. Nous fixons un délai d’attente de 6 secondes et exécutons également le programme et la promesse acceptée ou rejetée met d’abord fin à l’attente, puis le programme en cours est terminé. Ceci est très important pour indiquer « Délai dépassé » aux utilisateurs.
Le code est exécuté sur chacun des exemples de cas de test déjà présents dans le dossier du problème, et pour chaque test, un fichier est créé avec la sortie produite par le code, qui est comparée au fichier de sortie attendu pour donner le verdict. Un fichier appelé « result.txt » est créé, contenant tous les détails de chacun des tests, y compris l’entrée, la sortie attendue, la sortie obtenue et l’erreur standard, ainsi que le verdict final sur le test. En cas d’erreur de compilation ou d’erreur d’exécution, l’erreur est enregistrée dans un fichier appelé « error.txt ».
Ouvrez l’énoncé du problème ou la page de soumission sur votre navigateur par défaut, d’un simple clic dans VS Code : Un fichier est enregistré appelé « .problem.json » dans le même répertoire que le fichier à problème. Ce fichier json contient l’index du problème et l’ID du concours auquel il faisait partie, des détails suffisants pour construire l’URL du problème. Ainsi, lorsqu’un utilisateur clique sur le bouton « Ouvrir l’énoncé du problème », nous construisons l’URL à l’aide du fichier json et l’ouvrons dans votre navigateur par défaut. De même, la page de soumission de problème peut également être ouverte.
Le compilateur peut être sélectionné et les indicateurs de compilation peuvent être définis via les paramètres codepal : Des commandes sont exécutées pour compiler et exécuter les programmes écrits par l’utilisateur sur son propre système. Ils sont compilés et exécutés en fonction de la langue sélectionnée dans les paramètres CodePal. Nous autorisons également des indicateurs de compilation supplémentaires qu’un utilisateur peut souhaiter ajouter. Nous ajoutons ces drapeaux à la commande pour la compilation. Exemple : « -std=c++14 »
Effectuez des tests de résistance pour trouver un scénario de test de compteur pour votre code : Nous créons 2 fichiers supplémentaires pour l’utilisateur
- Un fichier générateur : Ce fichier est censé être rempli par l’utilisateur pour générer des cas de test aléatoires au format d’entrée spécifié par le problème.
- Un fichier programme : un utilisateur peut écrire la bonne solution ou une solution de force brute avec laquelle il peut vouloir comparer sa propre solution.
Maintenant, nous exécutons le fichier générateur et créons des cas de test, et exécutons de manière itérative à la fois le code de l’utilisateur et le fichier programme qu’il a saisi, sur les cas de test générés autant de fois que l’utilisateur le souhaite. Ils peuvent spécifier le nombre de fois qu’il souhaite que cela continue dans les paramètres. Cela doit s’arrêter dès que la sortie donnée par le code de l’utilisateur et le fichier programme diffèrent.
Bénéficiez d’une expérience personnalisée de visualisation des détails de votre profil Codeforces et de l’état des soumissions de problèmes effectuées, en entrant votre identifiant Codeforces dans les paramètres codepal : Étant donné le handle d’un utilisateur, l’API codeforces peut renvoyer des informations de base sur l’utilisateur. Nous présentons cela dans la section profil utilisateur. L’API codeforces renvoie également l’ensemble de toutes les soumissions effectuées par un utilisateur donné. Nous trions les soumissions selon l’identifiant du problème, puis exécutons un pointeur sur chacune des soumissions et des problèmes de l’utilisateur (qui sont déjà triés selon l’identifiant du problème) et déterminons le statut de soumission d’un problème (réussi, échoué, non tenté).
Langues prises en charge :
- C++ (compilateur : g++)
- C (compilateur : gcc)
- Java (compilateur : javac)
- Python
Noter: Vous pouvez ajouter des indicateurs de compilation supplémentaires via les paramètres codepal (exemple : -std=c++14) et également choisir entre python, python2 ou python3 en fonction de la commande python que vous utilisez sur votre système pour l’exécuter.
Systèmes d’exploitation pris en charge :
Raccourcis clavier:
- Ctrl + Alt + A (*Cmd + Alt + A* pour Mac) : Ajouter des cas de test manuels
- Ctrl + Alt + R (* Cmd + Alt + R * pour Mac): Exécuter des cas de test sur le fichier de solution
- Ctrl + Alt + O (*Cmd + Alt + O* pour Mac) : Ouvrir l’énoncé du problème sur Codeforces
- Ctrl + Alt + S (*Cmd + Alt + S* pour Mac) : Ouvrir la page de soumission de problème sur Codeforces
- Ctrl + Alt + Z (*Cmd + Alt + Z* pour Mac) : Démarrer les tests de résistance
- Ctrl + Shift + Z (*Cmd + Shift + Z* pour Mac) : Forcer l’arrêt du stress test
Conclusion: Construire une extension VS Code est un excellent moyen de comprendre comment fonctionne un éditeur de code aussi populaire que VS Code. De plus, cette extension aide la communauté de la programmation compétitive.
- Cette idée a été mise en œuvre en tant que projet open source. Nous avons actuellement plus de 1200 téléchargements et plus de 550 actifs…