Post

Entorno de Desarrollo

Para la programación competitiva en C++

En Android 12 y posteriores, suele haber el error “Process completed (signal 9)” dentro de termux. Para solucionarlo, favor de ir a este blog por Andronix

Tabla de Contenidos:

Conectar Git con GitHub

  1. Primero crearemos una cuenta de GitHub https://github.com/signup
  2. Después creamos un repositorio (proyecto) en https://github.com/new
  3. Luego descargamos git desde la pagina oficial https://git-scm.com/downloads o con el gestor de paquetes de cada sistema operativo
    • En Windows en powershell logo Powershell con el comando:
      1
      
       winget update ; winget install -e --id Git.Git
      
    • En MacOs con el gestor de paquetes homebrew logo homebrew:
      1
      
       brew update && brew install git
      
    • En Android con la terminal termux y el comando:
      1
      
       pkg update && pkg install git
      
    • En iOS/iPadOS con la terminal ish logo ish y los comandos:
      1
      2
      3
      
       apk update 
       apk add git openssh
       ssh-keygen -A
      
  4. Si se esta en Windows, revisa qué este actualizado, si no esta en la ultima versión, comprobamos que esta instalado el cliente de OpenSSH.
  5. En una terminal creamos nuestro usuario local de git (es opcional que los datos sean iguales a los de GitHub) con los comandos:
    1
    
    git config --global user.name "Usuario"
    
    1
    
    git config --global user.email "correo@ejemplo.com" 
    
  6. comprobamos nuestros datos con el comando:
    1
    
     git config --list
    
  7. En la misma terminal creamos una llave pública de ssh:
    1
    
    ssh-keygen -t ed25519 -C "correo@ejemplo.com"
    
  8. Copiamos los datos del archivo generado en Windows en la ruta: C:\Users\%USERNAME%\.ssh\id_ed25519.pub (para windows tiene el icono de Microsoft publisher Microsoft publisher logo y se puede abrir con el bloc de notas ) , para los demás sistemas operativos suele estar en ~/.ssh/id_ed25519.pub y lo conectamos con nuestra cuenta de GitHub a través de https://github.com/settings/ssh/new, dándole un nombre (puede ser el modelo de tu dispositivo) y pegando la los datos copiados (llave).
  9. Por último descargamos nuestro repositorio, en una terminal navega hacia tu carpeta de destino, yo recomiendo la carpeta de Documentos (Documents) o Escritorio (Desktop).

Mucho ojo 👁️ en Windows, estas carpetas suelen estar bajo C:\Users\%USERNAME%\One Drive\

1
git clone git@github.com:"Usuario de GitHub"/"Proyecto".git

Una vez ya tengamos conectado nuestra cuenta y hallamos descargado el proyecto, los tres comandos principales de git que usaremos en la terminal son:

1
2
3
git commit -m "mensaje del commit" # cambios locales a "pushear"
git push # pusheas los cambios junto con el commit hacia GitHub
git pull # descargas los cambios actuales desde GitHub

Compiladores en línea (Online)

La ventaja de usar un IDE en línea es la disponibilidad en cualquier dispositivo, la desventaja evidentemente es que al no tener conexión a internet no puedes utilizarlo aparte de que en algunos deberás guardar tus códigos manualmente en algún otro medio o plataforma.

  • USACO IDE es un IDE de colaboración en tiempo real creado por el USA Computing Olympiad (USACO)
  • onlinegdb este es el compilador en línea recomendado por el club, debido a que permite guardar los códigos al iniciar sesión junto con la compatibilidad completa con nuestra plantilla de C++
  • Programiz es un compilador en línea para acompañar sus cursos de programación
  • cpp.sh la ventaja de este editor es poder comparar las diferencias entre distintos estándares de C++ y distintos niveles de optimización del compilador, lo único malo es que no permite directivas #pragma ni la librería <bits/stdc++.h>
  • pythontutor este es un muy buen debuger en línea ya que contiene representaciones gráficas para visualizar nuestros códigos y también permite el uso de la librería <bits/stdc++.h>, lo malo es que no tiene entrada de usuario (no permite std::cin), junto con otras cosas incompatibles

IDEs en la nube (Cloud)

  • Replit es una plataforma para colaborar en tiempo real con código, la desventaja es que el plan gratuito solo te permite tener 3 proyectos públicos
  • Google Colab es un servició totalmente gratuito por parte de Google para usar Jupyer Noteeboks, para ejecutar C++ tendremos que usar el comando %%writefile para escribir hacia archivos, como lo seria el archivo in.txt donde pondremos todas las entradas del programa (necesario para la función freopen) y el archivo .cpp el cual compilaremos con el comando !g++ y ejecutaremos de esta manera !./a.out

Google Colab ejemplo

  • Github codespaces es VScode dentro de un servidor de Linux en la nube, compatible con todas las extensiones que desees.
    • GitHub Free 15 GB de espacio al mes con 120 horas
    • GitHub Pro 20 GB de espacio al mes con 180 horas

Recuerda que tienes acceso de forma gratuita a GitHub Pro por ser estudiante

  • cs50.dev es GitHub codespaces gratuito y sin limite de tiempo, hosteado por la universidad de Harvard para el acompañamiento de sus cursos, este es el editor en la nube recomendado por el club.

cs50.dev ejemplo

cs50.dev también es de mucha utilidad para correr otros IDEs en la nube como lo es el caso de Rstudio para R

VScode IDE

No confundir con Visual Studio. VScode es el editor recomendado por el Club, esto debido principalmente por su amplio catalogo de extensiones. Para instalarlo podemos hacerlo desde su pagina web o usando el gestor de paquetes

  • En Windows en powershell logo Powershell con el comando:
    1
    
    winget install -e --id  Microsoft.VisualStudioCode --override '/SILENT /mergetasks="!runcode,addcontextmenufiles,addcontextmenufolders"'
    
  • En MacOs con el gestor de paquetes homebrew logo homebrew:
    1
    
    brew install --cask visual-studio-code
    
  • En Android con la terminal termux hay dos opciones:
    1. Usar vscode-server (aplicación en línea similar a https://vscode.dev/, la cual tiene extensiones limitadas) que será accesible en cualquier navegador del dispositivo en las urls localhost:8080 o 127.0.0.1:8080, se instala con los comandos:
      1
      2
      
        pkg update && pkg install tur-repo code-server
        code-server # este es el comando para ejecutar el servidor de vscode
      
    2. con el escritorio nativo con los comandos:
      1
      
        pkg update && pkg install tur-repo code-oss
      
  • En iOS/iPadOS no se puede amenos que se use un escritorio emulado

Extensiones para VScode

  • C/C++ logo C/C++ esta es la extensión necesaria para poder correr código de C++ dentro de VScode
  • code runner logocode runner esta es una extensión opcional que acelera el proceso de compilación en VScode
  • Error lens logoError lens esta extensión nos muestra los errores que va dando el IDE o el compilador.
  • Prettier logoPrettier esta extensión le da formato a nuestro código al presionar la combinación de teclas shift + alt + F
  • CPH logoCompetitive Programming Helper esta es la extensión para poder, probar los códigos antes de publicar y también podremos subir directamente los códigos a codeforces de una manera muy rápida

Temas recomendados para VScode:

Integrar Codeforces con VScode

cph setting imagen

CPH Submit puede no funcionar del todo bien en navegadores basados en chromium, por lo que pueden intentar descargar una version más antigua o usar firefox.

Para usarlas, ten tu sesión de codeforces activa y también ten abierto VScode, cuando abras un problema en codeforces haz click en la extensión de competitive companion (el circulo verde con una cruz), después cámbiate a VScode donde veras unas opciones donde eligieras cpp, y listo podrás pobrar y publicar tu código desde vscode.

Instalar el compilador en Windows

  • Primero tenemos que descargar el gestor de paquetes msys2 desde su página oficial www.msys2.org/ o desde el gestor de paquetes integrado en Windows winget a través de una terminal (Powershell powershell logo), con el comando:
1
winget update ; winget install -e --id MSYS2.MSYS2
  • Ya instalado, abrimos la terminal de MSYS2 UCRT64 msys2 ucrt64 logo y ejecutamos el siguiente comando (acepta presionando Enter 2 veces):
1
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

La descarga puede fallar en la red institucional. Si ocurre un fallo, intenta de nuevo o prueba en otra red Wi-Fi.

msys2 toolchain

  • Ya terminada la instalación del compilador, procederemos a agregar el compilador al path. Para ello, buscamos alguna de estas palabras clave: “variables”, “path”, “variables del sistema” en el buscador de Windows y abriremos la aplicación con icono de una computadora con una palomita computadora con una palomita, allí abriremos las variables y editaremos el path agregando la dirección: C:\msys64\ucrt64\bin.

path de windows

  • ya instalada la extensión C/C++ en VScode iremos hacia las configuraciones de la extensión.

configuración de la extensión C/C++

  • Ahi buscamos la opción que diga “compiler path”, la cual nos mandara nos manda al archivo settings.json:

imagen de settings.json

  • Agregaremos estas líneas a los corchetes internos, teniendo cuidado de no borrar otras configuraciones.
    1
    2
    3
    4
    5
    6
    7
    
    
          "C_Cpp.default.compilerPath": "C:/msys64/ucrt64/bin",
          "C_Cpp.clang_format_path": "C:/msys64/ucrt64/bin",
          "code-runner.executorMap": {
              "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -g && $dir$fileNameWithoutExt"
          }
    
    
  • Con esto ya podremos compilar y ejecutar el código dentro de VScode dándole click al símbolo de reproducir en la parte superior derecha del editor o con la extensión code runner presionando las teclas ctrl + alt + N.

Aveces al abrir una carpeta o proyecto, el compilador no detectara la libreria de <bits/stdc++.h>, para solucionar esto, presionaremos f1 para abrir el “command palette” y dentro de “C/C++: Edit Configurations (UI)” pondremos de nuevo el “Compiler Path”, pero ahora incluyendo el compilador g++: C:/msys64/ucrt64/bin/g++.exe

C/C++ Config UI

Instalar el compilador en MacOS

Las Macs con chips M1,M2 o M3 usan la arquitectura ARM. Si ves el error Bad CPU type in executable (os error 86), instala Rosetta con: bash softwareupdate --install-rosetta

con gcc/g++

  1. Primero, si no lo tenemos instalado ya, procedemos a instalar el gestor de paquetes de la comunidad para MacOs homebrew logo homebrew abriendo una terminal y ejecutando el comando, para después dar varios enters:
    1
    
     /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. después en instalamos el compilador gcc (el cual incluye g++ y la libreria <bits/stdc++.h>)
    1
    2
    3
    4
    
     brew analytics off
     brew update && brew install gcc
     sudo rm /usr/local/bin/g++
     sudo ln -s $(ls /usr/local/bin/g++-*) /usr/local/bin/g++
    
  3. Al final tenemos que recargar la terminal y/o Vscode, para ver reflejados los cambios

con Clang (Xcode)

  • Este es el compilador por defecto en Xcode logo Xcode y para instalar Clang (LLVM) ejecutaremos este comando en la MacOS terminal logo terminal:
    1
    
      xcode-select install
    
  • Clang no incluye la librería <bits/stdc++>, necesaria para usar la plantilla del club, por lo que tendremos que instalarla manualmente con los siguientes comandos:
    1
    2
    3
    
      mkdir /usr/local/include/bits
      echo '#define _GLIBCXX_HOSTED 1' > /usr/local/include/bits/stdc++.h
      curl -sS https://raw.githubusercontent.com/gcc-mirror/gcc/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h >> /usr/local/include/bits/stdc++.h
    

Recuerda comentar o eliminar las líneas #pragma GCC optimize("Ofast,unroll-loops") y #pragma GCC target("avx2") de la plantilla de C++, debido a qué estas no son compatibles con Clang y darán un error de compilación!

Entorno de desarrollo en móviles

En ambos casos recomendamos más el uso de IDEs en la nube en especial el de la página https://cs50.dev/

cs50.dev ejemplo

Entorno de desarrollo en Android

Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador OTG o con un adaptador a USB C.

terminal nativa + editor de código

Termux es la terminal nativa de Android, esta disponible en la PlayStore, pero suele estar desactualizada por lo que recomiendo descargarlo directamente en GitHub o a través de la tienda open-source fdroid

Dentro de la terminal para poder instalar el compilador ejecutamos los siguientes comandos:

1
2
pkg update && pkg upgrade
pkg install build-essential

Para compilar un archivo de C++, primero navegamos a la carpeta donde este el archivo, recomiendo guardarlos en la carpeta de descargas del dispositivo (downloads), después compilamos el archivo con la extensión .cpp y para ejecutar el archivo resultante lo hacemos con ./a.out:

1
2
3
cd ~/storage/downloads/
g++ archivo.cpp
./a.out

Para los editores de código el club recomienda cualquiera de estas dos opciones:

  1. Squircle CE logo Squircle CE: disponible en la PlayStore logo PlayStore o en fdroid logo fdroid
  2. Acode logo Acode: disponible en la PlayStore logo PlayStore o en fdroid logo fdroid

También recomiendo usar el explorador de archivos por defecto en Android “files” ya que este te permite acceder fácilmente a los archivos dentro de termux, si no se tiene esta aplicación instalada se puede instalar esta versión similar: files por marcapps

escritorio nativo

Esto es recomendado para dispositivos de gama alta o dispositivos de más reciente y para usuarios un poco más avanzados, se necesitara instalar termux-x11 y seguir la guía de instalación de su GitHub y para el escritorio se ocupa seguir esta guía por DroidMaster aparte que tendrás que instalar extensiones manualmente para code-oss (VScode de termux).

Android Desktop

Entorno de desarrollo en iOS/iPadOS

Para un mejor desempeño al programar, recomiendo utilizar un teclado y/o mouse externo, ya sean por Bluetooth o por USB con un adaptador/dongle lighting o con un adaptador/dongle a USB C.

terminal emulada + editor de código

iOS no tiene una terminal nativa sin jailbreak, por lo qué la mejor opción es usar la terminal emulada:

  • ish logo ish con la que podremos compilar nuestros códigos de forma local.

Para descargar el compilador, dentro de ish ejecutaremos los siguientes comandos:

1
2
apk update && apk upgrade
apk add build-base

para compilar código es tan fácil como agregar los archivos .cpp a la carpeta root desde el explorar de archivos de iOS (files) dentro de la carpeta de iSH y ejecutarlos con ./a.out

1
2
g++ archivo.cpp
./a.out

Para el editor de código el club recomienda:

escritorio emulado

  • Esto se hace a través de UTM logo UTM SE y es recomendado especialmente para iPads, ya que la aplicación corre algo lento debido a que es emulado, pero para un mejor rendimiento recomiendo usar Debian 11 (LXDE) y para instalar VScode recomiendo seguir esta guía oficial

Debian Desktop

se puede llegar a un mejor rendimiento usando un tipo de para-virtualización con SPICE y JIT con TGC, pero ocupa un conociemiento más avanzado y en especial ocupa más pasos.

Referencias

Esta publicación tiene la licencia CC BY 4.0 del autor.

Diseñado con ❤️ por Ariel Parra.

© CPC-GALLOS. Algunos derechos reservados.

Hecho con Jekyll usando el tema Chirpy