Idea de proyecto | Código amigo

Descripción: «Una extensión de código de Visual Studio para ayudar a los usuarios de Codeforces a codificar con comodidad»

CodePal es una extensión de código de Visual Studio para ayudar a los usuarios de Codeforces a codificar con comodidad. Esta extensión es especialmente para las personas que desean ahorrar tiempo en un concurso de Codeforces en vivo y resolver problemas cómodamente. Esta extensión responde rápidamente a los usuarios. Puede filtrar rápidamente la lista de problemas especificando etiquetas y clasificaciones, crear carpetas para concursos y problemas que contengan pruebas de muestra de cada problema y compilar y ejecutar pruebas automáticamente. Para mayor comodidad, hemos creado botones para abrir directamente declaraciones de problemas y páginas de envío en el navegador predeterminado.

NodeJS

  • Node.js es un entorno de tiempo de ejecución JavaScript back-end, multiplataforma y de código abierto que se ejecuta en el motor V8 y ejecuta el código JavaScript fuera de un navegador web. Node.js nos permite usar JavaScript para escribir herramientas de línea de comandos y para secuencias de comandos del lado del servidor: ejecutar secuencias de comandos del lado del servidor para producir contenido de página web dinámico antes de que la página se envíe al navegador web del usuario. En nuestro caso al editor de VSCode.
  • Solo con NodeJS podemos realizar llamadas API a Codeforces para obtener todas las funciones de nuestras extensiones. También usamos NodeJS para raspar datos web de Internet.

API de fuerza de código

  • La API de Codeforces es extremadamente útil y la mayor parte de nuestras funciones realizan llamadas API a Codeforces para obtener información útil.
  • Pero no proporciona todo. Nuestra extensión utiliza una pequeña cantidad de web scraping del sitio web de Codeforces para obtener los datos que la API no proporciona, por ejemplo, casos de prueba para un problema.
  • La documentación de la API de Codeforces es pequeña pero clara.

TypeScript

  • TypeScript es un superconjunto escrito de JavaScript que se compila en JavaScript simple. Ofrece clases, módulos e interfaces para ayudarlo a crear componentes sólidos.
  • El código TypeScript se transforma en código JavaScript a través del compilador TypeScript o Babel. Este JavaScript es un código limpio y simple que se ejecuta en cualquier lugar donde se ejecute JavaScript: en un navegador, en Node.JS o en aplicaciones. En nuestro caso, el archivo JavaScript final se ejecutará en Node.JS.
  • Dado que hay una compilación, Typescript hace que sea mucho más fácil depurar su código en comparación con JavaScript.

API de código VS

  • Esta es la razón principal por la que VS Code es popular. La API de VS Code tiene una gran cantidad de características útiles que no solo nos brindan mucho control sobre el entorno, sino que también nos facilitan la comprensión y la codificación.
  • La vista de árbol organizada, los menús contextuales, las combinaciones de teclas, los cuadros de entrada, etc. son algunas de las características de la API que se han utilizado en esta extensión.
  • No se puede enfatizar lo suficiente lo importante y útil que es la documentación de VS Code API Typescript. Es conciso, limpio y extremadamente informativo. Se hizo mucha referencia a este proyecto.

Ingrese Manejar en la configuración y vea problemas, concursos y perfil, con el estado de envío de cada problema.

Cree carpetas de problemas/concursos que incluyan todas las pruebas de muestra, compile y ejecute automáticamente, obtenga veredictos completos y vea la declaración del problema y las páginas web de presentación.

Filtrar a través de problemas:

Prueba de estrés de su código:

Ver la lista completa del conjunto de problemas junto con sus etiquetas y calificaciones asociadas: la lista de problemas junto con sus detalles están disponibles a través de la API de Codeforces. Se mantiene una clase de problema que se inicializa al obtener detalles de todos los problemas desde este punto final de la API. La lista de problemas obtenida se muestra en una vista de árbol en la barra de actividad en el lado izquierdo de la ventana.

Filtre rápidamente a través del conjunto de problemas especificando calificaciones, etiquetas y estado de envío: la lista de problemas que se representan en la vista de árbol se filtra internamente en función de las etiquetas de problema, el rango de calificación del problema y el estado de envío y se vuelve a presentar en la pantalla . La entrada para los filtros se toma a través de la API de VS Code.

Vea los concursos actualmente en curso, los próximos y todos los pasados ​​y también vea la fecha de inicio precisa, la hora y la duración de los próximos concursos: la lista de concursos junto con sus detalles están disponibles a través de la API de Codeforces. Mantenemos una clase de concurso que se inicializa al obtener los detalles de todos los concursos desde este punto final de la API . La lista de concursos también se muestra en una vista de árbol en la barra de actividades en el lado izquierdo de la ventana.

Creación rápida de carpetas con un solo clic para Concursos de la lista de concursos de Codeforces y Problemas de la lista de problemas de Codeforces: Cuando un usuario desea crear una carpeta para un problema en Codeforces, se crea una carpeta con el nombre del problema y casos de prueba de el problema en particular se extraen de la página web del problema y se incluyen en la misma carpeta.  

Cuando un usuario desea crear una carpeta de concurso, se crea una carpeta con el nombre del concurso y se crea iterativamente una carpeta para cada problema del concurso.

La carpeta de un problema consta de todos sus casos de prueba de muestra y un archivo de programa cargado con una plantilla cuya ruta se puede especificar en la configuración: Lo que también se incluye en una carpeta de problema es un archivo denominado «Problem_name.{extension}» que se carga cualquier plantilla de inicio que desee si especifica la ruta de la plantilla en la configuración de la extensión.

Agregue pruebas adicionales a cualquier problema: 2 Archivos adicionales llamados «input_{test_number}.txt» y «output_{test_number}.txt» se crean donde el usuario puede ingresar la entrada que desea y la salida esperada respectivamente.

Compile y ejecute cualquier archivo de programa contra los casos de prueba y obtenga resultados integrales: la biblioteca *child_process* se utiliza para ejecutar la compilación y ejecutar comandos en el sistema del host. Nos aseguramos de finalizar el proceso de un programa en ejecución en caso de que supere los 6 segundos de ejecución. Medimos el tiempo usando carreras de promesas en JavaScript. Establecemos un tiempo de espera de 6 segundos y también ejecutamos el programa y cualquier promesa que acepte o rechace primero finaliza la espera y luego finaliza el programa en ejecución. Esto es muy importante para indicar «Límite de tiempo excedido» a los usuarios.

El código se ejecuta en cada uno de los casos de prueba de muestra que ya están presentes en la carpeta del problema, y ​​para cada prueba se crea un archivo con la salida producida por el código, que se compara con el archivo de salida esperado para dar el veredicto. Se crea un archivo llamado “result.txt”, que contiene todos los detalles de cada una de las pruebas, incluida la entrada, la salida esperada, la salida obtenida y el error estándar, junto con el veredicto final de la prueba. En caso de un error de compilación o un error de tiempo de ejecución, el error se registra en un archivo llamado «error.txt».

Abra la declaración del problema o la página de envío en su navegador predeterminado, con un solo clic en VS Code: se guarda un archivo llamado «.problem.json» en el mismo directorio que el archivo del problema. Este archivo json contiene el índice del problema y el ID del concurso del que formaba parte, detalles suficientes para construir la URL del problema. Entonces, cuando un usuario hace clic en el botón «abrir declaración de problema», construimos la URL con la ayuda del archivo json y la abrimos en su navegador predeterminado. Del mismo modo, también se puede abrir la página de envío de problemas.

Se puede seleccionar el compilador y se pueden configurar los indicadores de compilación a través de la configuración de Codepal: Los comandos se ejecutan para compilar y ejecutar los programas escritos por el usuario en su propio sistema. Se compilan y ejecutan en función del idioma que se haya seleccionado en la configuración de CodePal. También permitimos indicadores de compilación adicionales que un usuario puede querer agregar. Agregamos estas banderas al comando para compilar. Ejemplo: “-std=c++14”

Realice pruebas de estrés para encontrar un caso de prueba de contador para su código: creamos 2 archivos más para el usuario

  • Un archivo generador: se supone que el usuario debe completar este archivo para generar casos de prueba aleatorios en el formato de entrada especificado por el problema.
  • Un archivo de programa: un usuario puede escribir la solución correcta o una solución de fuerza bruta con la que puede querer comparar su propia solución.

Ahora, ejecutamos el archivo generador y creamos casos de prueba, y ejecutamos iterativamente tanto el código del usuario como el archivo de programa que ingresó, contra los casos de prueba generados tantas veces como el usuario quiera. Pueden especificar la cantidad de veces que desea que esto continúe en la configuración. Esto se detendrá tan pronto como la salida proporcionada por el código del usuario y el archivo del programa difieran.

Obtenga una experiencia personalizada al ver los detalles de su perfil de Codeforces y el estado de los envíos de problemas realizados, ingresando su identificador de Codeforces en la configuración de codepal: dado el identificador de un usuario, la API de Codeforces puede devolver información básica sobre el usuario. Lo presentamos en la sección de perfil de usuario. La API de Codeforces también devuelve el conjunto de todos los envíos realizados por un usuario determinado. Clasificamos los envíos según la identificación del problema y, luego, ejecutamos un puntero entre los envíos y los problemas del usuario (que ya están ordenados según la identificación del problema) y determinamos el estado de envío de un problema (Aprobado, Fallido, Sin intento).

  • C++ (compilador: g++)
  • C (compilador: gcc)
  • Java (compilador: javac)
  • Python

Nota: puede agregar banderas de compilación adicionales a través de la configuración de Codepal (ejemplo: -std=c++14) y también elegir entre python, python2 o python3 dependiendo del comando python que use en su sistema para ejecutar.

  • ventanas
  • linux
  • MAC
  • Ctrl + Alt + A (*Cmd + Alt + A* para Mac): agregar casos de prueba manuales
  • Ctrl + Alt + R (*Cmd + Alt + R* para Mac): Ejecutar casos de prueba en el archivo de solución
  • Ctrl + Alt + O (* Cmd + Alt + O * para Mac): Abrir declaración de problema en Codeforces
  • Ctrl + Alt + S (* Cmd + Alt + S * para Mac): Abrir página de envío de problemas en Codeforces
  • Ctrl + Alt + Z (*Cmd + Alt + Z* para Mac): Iniciar prueba de esfuerzo
  • Ctrl + Shift + Z (*Cmd + Shift + Z* para Mac) : Forzar Detención de Pruebas de Estrés

Crear una extensión de VS Code es una excelente manera de comprender cómo funciona un editor de código tan popular como VS Code. Además, esta extensión ayuda a la comunidad de programación competitiva.

  • Esta idea se ha implementado como un proyecto de código abierto. Actualmente tenemos más de 1200 descargas y más de 550 instalaciones activas.
  • Puedes instalar nuestra extensión aquí .
  • Para saber más sobre CodePal y su base de código, puede visitar su repositorio público aquí .
  • Puede encontrar una guía de uso detallada aquí .
  • Janmansh Agarval
  • Niranjan Yadiyala
  • Aditya Chirania
  • Praveen Reddy

Publicación traducida automáticamente

Artículo escrito por janmanshh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *