diff --git a/.github/workflows/sync_content.yml b/.github/workflows/sync_content.yml
index dbbb600..b5c2271 100644
--- a/.github/workflows/sync_content.yml
+++ b/.github/workflows/sync_content.yml
@@ -20,6 +20,7 @@ jobs:
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
+ submodules: true
- name: Set up Python
uses: actions/setup-python@v5
@@ -40,12 +41,20 @@ jobs:
working-directory: utils
run: pipenv run python3 download_and_sync_courses.py
+ - name: Pull lint container
+ run: ./utils/lint --only-pull-image
+
+ - name: Fix lints
+ run: |
+ echo "Running lint fix..."
+ ./utils/lint fix --all || true
+ git add .
+
- name: Commit and push changes
id: commit
run: |
git config --global user.name "github-actions"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git add .
# Only commit if there are changes
if git diff --staged --quiet; then
echo "No changes to commit"
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/.gitattributes b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/.gitattributes
similarity index 100%
rename from Courses/omi-public-course/intro/demo-de-objetivo/.gitattributes
rename to Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/.gitattributes
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/.gitignore b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/.gitignore
similarity index 100%
rename from Courses/omi-public-course/intro/demo-de-objetivo/.gitignore
rename to Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/.gitignore
diff --git a/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.json b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.json
new file mode 100644
index 0000000..d571d85
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_8",
+ "title": "python_8"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/statements/es.markdown
new file mode 100644
index 0000000..b8a7b19
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8/statements/es.markdown
@@ -0,0 +1,13 @@
+En esta octava sesión estudiaremos el comportamiento de archivos binarios y de texto a nivel sistema operativo, para luego estudiar su manejo en Python.
+
+## Material de la Sesión
+* [Liga al video de la sesión](https://www.facebook.com/177965472243902/videos/989833928129180/).
+
+Puedes encontrar [aquí](https://docs.google.com/presentation/d/e/2PACX-1vS0Ji_mhme_NWD-81E_YGgIsdDqlWK-9CuhuxI-2gQ8Un1EtVvFVlflICZRGnxQHu1ikJzIMQRGCkuK/pub?start=false&loop=false&delayms=60000) las diapositivas mostradas durante la sesión. También puedes hacer click [aquí](https://colab.research.google.com/drive/1sjliwkWUNgrnaC3NMcF_detkmHj5L8ZK?usp=sharing) para ir a la _Notebook_ de Google Colab utilizada durante esta sesión. También puedes acceder a la [versión alojada en Github](./OmegaUp_py_sesion09.ipynb) de la notebook para descargarla o verla en este portal.
+También puedes encontrar en este directorio los archivos binarios y de texto utilizados en los ejemplos.
+
+## Contacto
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, puedes escribirnos a:
+
+* [mxfuturelab@gmail.com](mailto://mxfuturelab@gmail.com) para contactar al canal de atención de Future Lab.
+* [juan.bolanos@cimat.com](mailto://juan.bolanos@cimat.mx) para contactar al tutor de esta sesión directamente.
diff --git a/Courses/omi-public-course/practice/Contest-Start/.gitattributes b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/.gitattributes
similarity index 100%
rename from Courses/omi-public-course/practice/Contest-Start/.gitattributes
rename to Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/.gitattributes
diff --git a/Courses/omi-public-course/practice/Contest-Start/.gitignore b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/.gitignore
similarity index 100%
rename from Courses/omi-public-course/practice/Contest-Start/.gitignore
rename to Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/.gitignore
diff --git a/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.json b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.json
new file mode 100644
index 0000000..bf614ec
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_3",
+ "title": "python_3"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/statements/es.markdown
new file mode 100644
index 0000000..211c4bc
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3/statements/es.markdown
@@ -0,0 +1,16 @@
+
+
+
+¡Hola! 🤓 Bienvenid@ a la tercer sesión de este curso introductorio a python, que cubre el tema de **Colecciones de Datos**. En esta sesión se explican los conceptos y métodos para cada una de las Colecciones en `Python`🐍 , así mismo se mostrará cómo manipular estas Colecciones.
+
+
+## Material de la Sesión
+
+
+Puedes encontrar aquí [](https://docs.google.com/presentation/d/1R6jK-2L_fuuvn6kmPX93yIuowud2KQgGR6-70TV3u_s/edit?usp=sharing) los slides mostradas en la sesión, que te permitirán entender el funcionamiento de cada una de las Colecciones de datos. [Aquí](https://colab.research.google.com/drive/1bYe02FgL6z6iGQ7OBGa5XTXC_L3e6Q1O?usp=sharing) encontraras el _Notebook_ de Google Colab utilizada durante la sesión. Finalmente podrás encontrar todo el contenido del curso en el repositorio de [Github](https://github.com/futurelabmx/omegaUp.py) para cada una de las sesiones.
+
+## Contacto
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, puedes escribirnos a:
+
+* [mxfuturelab@gmail.com](mailto://mxfuturelab@gmail.com) para contactar al canal de atención de Future Lab.
+* [david.pedroza.segoviano@gmail.com](mailto://david.pedroza.segoviano@gmail.com) para contactar al tutor de esta sesión directamente.
diff --git a/Courses/omi-public-course/practice/New-Test-1/.gitattributes b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/.gitattributes
similarity index 100%
rename from Courses/omi-public-course/practice/New-Test-1/.gitattributes
rename to Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/.gitattributes
diff --git a/Courses/omi-public-course/practice/New-Test-1/.gitignore b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/.gitignore
similarity index 100%
rename from Courses/omi-public-course/practice/New-Test-1/.gitignore
rename to Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/.gitignore
diff --git a/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.json b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.json
new file mode 100644
index 0000000..ae86fbc
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_4",
+ "title": "python_4"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/solutions/es.markdown b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/solutions/es.markdown
new file mode 100644
index 0000000..f70f10e
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/solutions/es.markdown
@@ -0,0 +1 @@
+A
diff --git a/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/statements/es.markdown
new file mode 100644
index 0000000..561cf50
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4/statements/es.markdown
@@ -0,0 +1,17 @@
+En esta sesión se explican que son las estructuras de control de flujo `Python`🐍 y todo lo que podemos hacer con elllas.
+
+## Material de la Sesión
+
+
+Para ver el *Notebook* en línea, correspondiente a esta sesión, haz click aquí: [](https://colab.research.google.com/github/ZaidTheJedi/omegaUp.py/blob/master/Semana%2004/Cheatsheet_curso_python.ipynb)
+
+Si quieres ver las diapositivas utilizadas, haz click aquí: [](https://docs.google.com/presentation/d/e/2PACX-1vSnWUy-7vApWqKdcgNw1Id1vjMcXo6-8H_oTHTv3olGZfE6SCQ5UDZ3OhjNJk7uOTaX0bjCqL4wgTXs/pub?start=false&loop=false&delayms=3000)
+
+## Contacto
+
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, no dudes en escribirnos, estaremos felices de escucharte 😁. Puedes contactarnos en:
+
+✉️ mxfuturelab@gmail.com para contactar al canal de atención de Future Lab.
+
+✉️ Zaidthejedi@gmail.com para contactar al tutor de esta sesión directamente.
+.
diff --git a/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitattributes b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitignore b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.json b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.json
new file mode 100644
index 0000000..4992f45
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_6",
+ "title": "python_6"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/statements/es.markdown
new file mode 100644
index 0000000..d829340
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6/statements/es.markdown
@@ -0,0 +1,13 @@
+ En esta sesión se explican los conceptos de funciones, argumentos, return y docstring en `Python`🐍 , así mismo se mostrará cómo resolver algunos ejercicios de ejemplo.
+
+
+## Material de la Sesión
+
+
+Puedes encontrar [aquí](https://docs.google.com/presentation/d/1Xj0cb-78QBtliR99lfO6OzDkmLmQ1ILDHN-l4SLtopM/edit?usp=sharing) los slides mostradas en la sesión, que te permitirán entender el funcionamiento de cada una de las partes de las funciones. [Aquí](https://colab.research.google.com/drive/1vQYx7pRBxCzxI2BQ961D7o8EUTpIECf3?usp=sharing) encontraras el _Notebook_ de Google Colab utilizada durante la sesión. Finalmente podrás encontrar todo el contenido del curso en el repositorio de [Github](https://github.com/futurelabmx/omegaUp.py) para cada una de las sesiones.
+
+## Contacto
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, puedes escribirnos a:
+
+* [mxfuturelab@gmail.com](mailto://mxfuturelab@gmail.com) para contactar al canal de atención de Future Lab.
+* [david.pedroza.segoviano@gmail.com](mailto://david.pedroza.segoviano@gmail.com) para contactar al tutor de esta sesión directamente.
diff --git a/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitattributes b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitignore b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.json b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.json
new file mode 100644
index 0000000..ffa6ffd
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_2",
+ "title": "python_2"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/statements/es.markdown
new file mode 100644
index 0000000..15d52f6
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2/statements/es.markdown
@@ -0,0 +1,17 @@
+ En esta sesión se explican los tipos de datos elementales en `Python`🐍 y las operaciones básicas que se pueden realizar con ellas. También se da una breve explicación de cómo resolver problemas en [OmegaUp](https://omegaup.com/).
+
+# Material de la Sesión
+
+
+
+Para ver el *Notebook* en línea, correspondiente a esta sesión, haz click aquí: [](https://colab.research.google.com/github/GabrielMissael/omegaUp.py/blob/master/Semana%2002/Cheat_sheet(referencia).ipynb)
+
+Si quieres ver las diapositivas utilizadas, haz click aquí: [](https://docs.google.com/presentation/d/e/2PACX-1vRV5W0jXgXUBJQlMlHl3EUJ5ZcVVRp-yPGEZ7JVTG5ma-FFY7-GRJTxRsIRzfuz27UddDncu3hqvP7y/pub?start=true&loop=true&delayms=60000)
+
+# Contacto
+
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, no dudes en escribirnos, estaremos felices de escucharte 😁. Puedes contactarnos en:
+
+✉️ mxfuturelab@gmail.com para contactar al canal de atención de Future Lab.
+
+✉️ missaelgabo@gmail.com para contactar al tutor de esta sesión directamente.
diff --git a/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitattributes b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitignore b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.json b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.json
new file mode 100644
index 0000000..18f86af
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_9",
+ "title": "python_9"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/math_python/python_9/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/statements/es.markdown
new file mode 100644
index 0000000..2df8c0f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/math_python/python_9/statements/es.markdown
@@ -0,0 +1,16 @@
+En esta sesión se explica el módulo math de la librería standard de python.
+
+## Material de la Sesión
+[Liga al video de la sesión](https://www.facebook.com/watch/live/?v=3272249006175561&ref=watch_permalink)
+
+Para ver el *Notebook* en línea, correspondiente a esta sesión, haz click aquí: [](https://colab.research.google.com/github/ZaidTheJedi/omegaUp.py/blob/master/Semana%2009/Cheatsheet.ipynb)
+
+Si quieres ver las diapositivas utilizadas, haz click aquí: [](https://docs.google.com/presentation/d/e/2PACX-1vS6SvAkurNHS61HWbqYbUqGVNwBcR_91Fdoh0LWodyQ61isn8V6ALVJSZFJdb1FRQeXiqz-bBC0xPY-/pub?start=false&loop=false&delayms=60000)
+
+## Contacto
+
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, no dudes en escribirnos, estaremos felices de escucharte 😁. Puedes contactarnos en:
+
+✉️ mxfuturelab@gmail.com para contactar al canal de atención de Future Lab.
+
+✉️ zaidthejedi@gmail.com para contactar al tutor de esta sesión directamente.
diff --git a/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitattributes b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitignore b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.json b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.json
new file mode 100644
index 0000000..a7c085a
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_7",
+ "title": "python_7"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/objetos/python_7/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/statements/es.markdown
new file mode 100644
index 0000000..d31db75
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/objetos/python_7/statements/es.markdown
@@ -0,0 +1,17 @@
+[](https://docs.google.com/presentation/d/e/2PACX-1vQ0qHp7IhwMphE5_GCjmylO8x2HM0PY7jp2zkg5NlkV4PXJ1nKaju9K4yuhY87tzaWk9HBCEoTeoFF9/pub?start=false&loop=false&delayms=3000)
+[](https://colab.research.google.com/drive/1p3rHsoDwi0fjJnayACZur4NLyJAibkfz?usp=sharing)
+
+En esta sesión, hablaremos sobre objetos en Python. Exploraremos la creación de objetos con aplicaciones interesantes utilizando [Google Colab](https://colab.research.google.com).
+
+## Material de la Sesión
+[Liga al video de la sesión.](https://www.facebook.com/177965472243902/videos/581845935808093)
+
+Puedes encontrar [aquí](https://docs.google.com/presentation/d/e/2PACX-1vQ0qHp7IhwMphE5_GCjmylO8x2HM0PY7jp2zkg5NlkV4PXJ1nKaju9K4yuhY87tzaWk9HBCEoTeoFF9/pub?start=false&loop=false&delayms=3000) las diapositivas mostradas durante la sesión. También puedes hacer click [aquí](https://colab.research.google.com/drive/1p3rHsoDwi0fjJnayACZur4NLyJAibkfz?usp=sharing) para ir a la _Notebook_ de Google Colab utilizada durante esta sesión.
+
+## Contacto
+
+Si tienes dudas y/o comentarios sobre la sesión o sobre el curso en general, puedes escribirnos a:
+
+* [mxfuturelab@gmail.com](mailto:mxfuturelab@gmail.com) para contactar al canal de atención de Future Lab.
+
+* [ferro@cimat.mx](mailto:ferro@cimat.mx) para contactar al tutor de esta sesión directamente.
diff --git a/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitattributes b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitignore b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.distrib.json b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.json b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.json
new file mode 100644
index 0000000..637c0d5
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "python_5",
+ "title": "python_5"
+}
diff --git a/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/statements/es.markdown b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/statements/es.markdown
new file mode 100644
index 0000000..15c86d9
--- /dev/null
+++ b/Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5/statements/es.markdown
@@ -0,0 +1,15 @@
+En esta sesión, veremos un breve repaso de los Strings, para despues revisar las operaciones con Strings y los siguientes métodos:
+
+ - upper()
+ - lower()
+ - isupper()
+ - islower()
+ - startswith()
+ - endswith()
+ - replace()
+
+
+## Material de sesión:
+
+
+La presentación la puedes ver [haciendo click aquí](https://docs.google.com/presentation/d/e/2PACX-1vQC_PUJe1xs84lcbaVQx8MR8psJTHkN8Jeh2ToeaHdkUh_Z1frryExkDY9f5KhQs8hQd50DEI7hNXtE/pub?start=true&loop=false&delayms=3000) y el Notebook [en este link](https://colab.research.google.com/github/futurelabmx/omegaUp.py/blob/master/Semana%2005/Strings_operations_git.ipynb), o puedes descargar la versión alojada en GitHub haciendo [click aquí](https://colab.research.google.com/github/futurelabmx/omegaUp.py/blob/master/Semana%2005/Strings_operations_git.ipynb).
diff --git a/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.distrib.json
index c8e0520..f808a81 100644
--- a/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.distrib.json
+++ b/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.distrib.json
@@ -9,6 +9,7 @@
},
"validator": {
"name": "token",
+ "group_score_policy": "sum-if-not-zero",
"tolerance": 1e-9
}
}
diff --git a/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.json b/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.json
index 1a31674..2141666 100644
--- a/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.json
+++ b/Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez/settings.json
@@ -10,7 +10,8 @@
"Slow": false,
"Validator": {
"Name": "token",
- "Tolerance": 1e-9
+ "Tolerance": 1e-9,
+ "GroupScorePolicy": "sum-if-not-zero"
},
"alias": "Solucion-Tablero-de-Ajedrez",
"title": "Solucion-Tablero-de-Ajedrez"
diff --git a/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitattributes b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitignore b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.json b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.json
new file mode 100644
index 0000000..edbb9c4
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Elefantes-vs-telarana",
+ "title": "Solucion-Elefantes-vs-telarana"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/statements/es.markdown
new file mode 100644
index 0000000..b5030ec
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/phmJDw9wdNs) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitattributes b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitignore b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.json b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.json
new file mode 100644
index 0000000..cac6745
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Mintiendo-sobre-las-cif",
+ "title": "Solucion-Mintiendo-sobre-las-cif"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/statements/es.markdown
new file mode 100644
index 0000000..2d15cfc
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/FN06Hhm9RME) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitattributes b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitignore b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.json b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.json
new file mode 100644
index 0000000..bd6906c
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Baile-de-graduacion",
+ "title": "Solucion-Baile-de-graduacion"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/statements/es.markdown
new file mode 100644
index 0000000..8898911
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion/statements/es.markdown
@@ -0,0 +1 @@
+
diff --git a/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitattributes b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitignore b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.json b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.json
new file mode 100644
index 0000000..12c376f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Giran-que-giran",
+ "title": "Solucion-Giran-que-giran"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/statements/es.markdown
new file mode 100644
index 0000000..b7458c9
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran/statements/es.markdown
@@ -0,0 +1 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/UMmNckLTB5c) con una explicación de la solución.
diff --git a/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitattributes b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitignore b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.json b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.json
new file mode 100644
index 0000000..e5e869c
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-horanuncaessuficiente",
+ "title": "Solucion-horanuncaessuficiente"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/statements/es.markdown
new file mode 100644
index 0000000..0cc8217
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente/statements/es.markdown
@@ -0,0 +1 @@
+
diff --git a/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitattributes b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitignore b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.json b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.json
new file mode 100644
index 0000000..16604ea
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-La-popularidad-cuenta",
+ "title": "Solucion-La-popularidad-cuenta"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/statements/es.markdown
new file mode 100644
index 0000000..c2beb20
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta/statements/es.markdown
@@ -0,0 +1 @@
+
diff --git a/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitattributes b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitignore b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.json b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.json
new file mode 100644
index 0000000..53ebbb8
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Los-Buenos-Amigos-cpp",
+ "title": "Solucion-Los-Buenos-Amigos-cpp"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/statements/es.markdown
new file mode 100644
index 0000000..634c91b
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp/statements/es.markdown
@@ -0,0 +1 @@
+
diff --git a/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitattributes b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitignore b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.json b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.json
new file mode 100644
index 0000000..4c349e1
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Durante-la-comida",
+ "title": "Solucion-Durante-la-comida"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/statements/es.markdown
new file mode 100644
index 0000000..3de3d48
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida/statements/es.markdown
@@ -0,0 +1,7 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/0pFh81HIrY0) con una explicación de la solución.
+
+Para escribir la palabra `'miguel'`, Miguel necesita cada una de las letras `'m'`, `'i'`, `'g'`, `'u'`, `'e'`, `'l'`. Como todas son necesarias y ninguna se repite, la cantidad de veces que pueda escribir la palabra va a depender de cuál de las letras aparece menos veces.
+
+Para calcular eso, necesitamos llevar la cuenta de cuántas veces aparece cada letra, por ejemplo guardando una variable para cada una de las letras al recorrer cada una de las letras de la sopa.
+
+Al final, encontramos el mínimo de entre todas las cuentas que guardamos y ese es el resultado.
diff --git a/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitattributes b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitignore b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.json b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.json
new file mode 100644
index 0000000..c19b942
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Nacho-el-flojo",
+ "title": "Solucion-Nacho-el-flojo"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/statements/es.markdown
new file mode 100644
index 0000000..89b1597
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo/statements/es.markdown
@@ -0,0 +1,7 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/BxkldR1LHDU) con una explicación de la solución.
+
+La tarea consiste en encontrar la respuesta correcta (de entre cuatro posibilidades) para cada ejercicio. Empezamos, entonces por leer la cantidad de ejercicios y repetir la solución esa cantidad de veces.
+
+Para cada ejercicio, tenemos que encontrar la suma de dos vectores de dos dimensiones. La suma de vectores se hace calculando la suma de cada componente de manera independiente (ver [el video](https://youtu.be/BxkldR1LHDU) de la solución para más detalles). Esto quiere decir que hay que leer `x1`, `y1` y `x2`, `y2` y sumar las componentes `x` y las componentes `y`.
+
+De ahí hay que encontra cual de las siguientes 4 vectores coinciden con la respuesta que esperamos encontrar. Teniendo el índice de qué vector es el correcto, hay que imprimir la letra inciso correspondiente.
diff --git a/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitattributes b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitignore b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.json b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.json
new file mode 100644
index 0000000..1270328
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "SolucionTrianguloDePascalNiveles",
+ "title": "SolucionTrianguloDePascalNiveles"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/statements/es.markdown
new file mode 100644
index 0000000..39d7046
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/klBofHN1_MA) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitattributes b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitignore b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.json b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.json
new file mode 100644
index 0000000..ef74015
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-La-risa-en-vacaciones",
+ "title": "Solucion-La-risa-en-vacaciones"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/statements/es.markdown
new file mode 100644
index 0000000..92d71ce
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/8J87ECylkA4) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitattributes b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitignore b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.json b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.json
new file mode 100644
index 0000000..82c7077
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Parentesis",
+ "title": "Solucion-Parentesis"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/statements/es.markdown
new file mode 100644
index 0000000..33b76b7
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/0v3OPlMou8M) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitattributes b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitignore b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.distrib.json b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.json b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.json
new file mode 100644
index 0000000..c1fbc13
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Monito-y-Monita",
+ "title": "Solucion-Monito-y-Monita"
+}
diff --git a/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/statements/es.markdown b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/statements/es.markdown
new file mode 100644
index 0000000..4b3771e
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/HsW0bf2WOow) con una explicación de la solución.
+
diff --git a/Courses/ResolviendoProblemas2021/course_settings.json b/Courses/ResolviendoProblemas2021/course_settings.json
deleted file mode 100644
index 5f162e7..0000000
--- a/Courses/ResolviendoProblemas2021/course_settings.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "Resolviendo Problemas en omegaUp 2021",
- "description": "Resuelve problemas con el equipo omegaUp, aprende tips sobre concursos de programación y gana premios. \n\nREGLAS: Cada lunes se publicará un nuevo problema, tendrás toda la semana para resolverlo, el viernes subiremos la solución al problema y algunos tips. ",
- "objective": "En este curso aprenderás:\n\n* Temas básicos de programación competitiva\n* Tips sobre programaicón competitiva",
- "level": "introductory",
- "alias": "ResolviendoProblemas2021",
- "archived": false,
- "school_id": 3170,
- "school_name": "omegaUp",
- "start_time": 1619938800,
- "languages": [
- "c11-gcc",
- "c11-clang",
- "cpp11-gcc",
- "cpp11-clang",
- "cpp17-gcc",
- "cpp17-clang",
- "java",
- "py2",
- "py3",
- "rb",
- "cs",
- "pas",
- "kp",
- "kj",
- "cat",
- "hs",
- "lua",
- "js"
- ],
- "finish_time": null,
- "is_admin": true,
- "is_teaching_assistant": false,
- "is_curator": false,
- "admission_mode": "public",
- "needs_basic_information": false,
- "show_scoreboard": true,
- "recommended": true,
- "requests_user_information": "no",
- "unlimited_duration": false,
- "student_count": 3601,
- "status": "ok",
- "_id": "687fbf750b4fc467807147"
-}
diff --git a/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitattributes b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitattributes
new file mode 100644
index 0000000..5e5a849
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitattributes
@@ -0,0 +1 @@
+cases/* -diff -delta -merge -text -crlf
diff --git a/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitignore b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitignore
new file mode 100644
index 0000000..9602a2f
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/.gitignore
@@ -0,0 +1,58 @@
+# OS-specific resources
+.DS_Store
+Thumbs.db
+
+# Backup files
+*~
+*.bak
+*.swp
+*.orig
+
+# Packaged files
+*.zip
+*.bz2
+
+# Karel
+*.kx
+
+# Python
+*.pyc
+
+# IDE files
+*.cbp
+*.depend
+*.layout
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+*.hi
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.app
+
+# libinteractive files
+Makefile
+libinteractive/
+libinteractive.jar
diff --git a/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.distrib.json b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.distrib.json
new file mode 100644
index 0000000..c8e0520
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.distrib.json
@@ -0,0 +1,14 @@
+{
+ "cases": {},
+ "limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "validator": {
+ "name": "token",
+ "tolerance": 1e-9
+ }
+}
diff --git a/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.json b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.json
new file mode 100644
index 0000000..c77b428
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/settings.json
@@ -0,0 +1,17 @@
+{
+ "Cases": [],
+ "Limits": {
+ "ExtraWallTime": "0s",
+ "MemoryLimit": 67108864,
+ "OutputLimit": 10485760,
+ "OverallWallTimeLimit": "30s",
+ "TimeLimit": "1s"
+ },
+ "Slow": false,
+ "Validator": {
+ "Name": "token",
+ "Tolerance": 1e-9
+ },
+ "alias": "Solucion-Xbox-Live-Points",
+ "title": "Solucion-Xbox-Live-Points"
+}
diff --git a/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/statements/es.markdown b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/statements/es.markdown
new file mode 100644
index 0000000..bc51c27
--- /dev/null
+++ b/Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points/statements/es.markdown
@@ -0,0 +1,2 @@
+NOTA: [Aquí puedes encontrar el video](https://youtu.be/F7hgHoE7fGQ) con una explicación de la solución.
+
diff --git a/Courses/omi-public-course/course_settings.json b/Courses/omi-public-course/course_settings.json
deleted file mode 100644
index 31c43ad..0000000
--- a/Courses/omi-public-course/course_settings.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "name": "OMI Public Course",
- "description": "demo description",
- "objective": "demo objective",
- "level": "introductory",
- "alias": "omi-public-course",
- "archived": false,
- "school_id": 222,
- "school_name": "Benito Juarez Garcia",
- "start_time": 1742827120,
- "languages": [
- "c11-gcc",
- "c11-clang",
- "cpp11-gcc",
- "cpp11-clang",
- "cpp17-gcc",
- "cpp17-clang",
- "cpp20-gcc",
- "cpp20-clang",
- "java",
- "kt",
- "py2",
- "py3",
- "rb",
- "cs",
- "pas",
- "kp",
- "kj",
- "cat",
- "hs",
- "lua",
- "go",
- "rs",
- "js"
- ],
- "finish_time": 1745432999,
- "is_admin": true,
- "is_teaching_assistant": false,
- "is_curator": false,
- "admission_mode": "public",
- "needs_basic_information": false,
- "show_scoreboard": false,
- "recommended": false,
- "requests_user_information": "no",
- "unlimited_duration": false,
- "student_count": 1,
- "status": "ok",
- "_id": "687fbf7ef02b3240940230"
-}
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/settings.distrib.json b/Courses/omi-public-course/intro/demo-de-objetivo/settings.distrib.json
deleted file mode 100644
index f80ed67..0000000
--- a/Courses/omi-public-course/intro/demo-de-objetivo/settings.distrib.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "cases": {},
- "limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "23ms",
- "TimeLimit": "1ms"
- },
- "validator": {
- "name": "token-caseless",
- "group_score_policy": "sum-if-not-zero",
- "tolerance": 1e-9
- }
-}
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/settings.json b/Courses/omi-public-course/intro/demo-de-objetivo/settings.json
deleted file mode 100644
index 2270f02..0000000
--- a/Courses/omi-public-course/intro/demo-de-objetivo/settings.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "Cases": [],
- "Limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "23ms",
- "TimeLimit": "1ms"
- },
- "Slow": false,
- "Validator": {
- "Name": "token-caseless",
- "Tolerance": 1e-9,
- "GroupScorePolicy": "sum-if-not-zero"
- },
- "alias": "demo-de-objetivo",
- "title": "demo-de-objetivo"
-}
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/statements/es.markdown b/Courses/omi-public-course/intro/demo-de-objetivo/statements/es.markdown
deleted file mode 100644
index 92faa31..0000000
--- a/Courses/omi-public-course/intro/demo-de-objetivo/statements/es.markdown
+++ /dev/null
@@ -1,26 +0,0 @@
-Objetivo
-==========================================
-
-hello this is a sample course to deliver a proof of concept for this year's Gsoc 2025 project Public Courses on github.
-
-I have created a repository which links this course here-
-https://github.com/iqbalcodes6602/omi_public_course
-
-You can submit a PR to this repository to update the changes. Once the pr is merged the changes would reflect in the course..
-
-
-
-As you can see the version of the problem got updated. This was automatically deployed to the course when the pr was merged.
-
-
-
-
-
-
-Please try to change anything in this problem in the Intro folder and submit a PR to the repository.
-
-
-I have also added one problem content to this course by the name 'Practice' which has a problem 'Contest-Start' in it. You can try to change the content of this problem and submit a PR to the repository as well. I have myself tried to adding some test cases to this problem, and it was working fine on that.
-
-
-sample change
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/statements/image-1.png b/Courses/omi-public-course/intro/demo-de-objetivo/statements/image-1.png
deleted file mode 100644
index 3e42649..0000000
Binary files a/Courses/omi-public-course/intro/demo-de-objetivo/statements/image-1.png and /dev/null differ
diff --git a/Courses/omi-public-course/intro/demo-de-objetivo/statements/image.png b/Courses/omi-public-course/intro/demo-de-objetivo/statements/image.png
deleted file mode 100644
index a931e1d..0000000
Binary files a/Courses/omi-public-course/intro/demo-de-objetivo/statements/image.png and /dev/null differ
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.1.in b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.1.in
deleted file mode 100644
index 28ac1ed..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.1.in
+++ /dev/null
@@ -1,5 +0,0 @@
-4
-4 2 5
-3 1 2
-3 3 10
-2000000000 1 2000000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.1.out b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.1.out
deleted file mode 100644
index e69de29..0000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.2.in b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.2.in
deleted file mode 100644
index 1796b33..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.2.in
+++ /dev/null
@@ -1,11 +0,0 @@
-10
-2000000000 2000000000 2000000000
-2000000000 1 2000000000
-2000000000 1 1999999998
-1999999990 1 2000000000
-2000000000 3 2000000000
-2000000000 2000000000 1999999998
-1 1 1
-99990 10 1000000
-100000 20000 2000000000
-998 1 2000000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.2.out b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.2.out
deleted file mode 100644
index e69de29..0000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.3.in b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.3.in
deleted file mode 100644
index f3ee07f..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.3.in
+++ /dev/null
@@ -1,2 +0,0 @@
-1
-8627 2 2
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.3.out b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.3.out
deleted file mode 100644
index e69de29..0000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.4.in b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.4.in
deleted file mode 100644
index f3ee07f..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.4.in
+++ /dev/null
@@ -1,2 +0,0 @@
-1
-8627 2 2
diff --git a/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.4.out b/Courses/omi-public-course/practice/Contest-Start/cases/sin_grupo.4.out
deleted file mode 100644
index e69de29..0000000
diff --git a/Courses/omi-public-course/practice/Contest-Start/settings.distrib.json b/Courses/omi-public-course/practice/Contest-Start/settings.distrib.json
deleted file mode 100644
index 1b69d41..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/settings.distrib.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "cases": {
- "statement_001": {
- "in": "4\n4 2 5\n3 1 2\n3 3 10\n2000000000 1 2000000000",
- "out": "5\n3\n3\n1999999999000000000",
- "weight": 1
- }
- },
- "limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "23.423s",
- "TimeLimit": "1s"
- },
- "validator": {
- "name": "token-caseless",
- "group_score_policy": "sum-if-not-zero",
- "tolerance": 1e-9
- }
-}
diff --git a/Courses/omi-public-course/practice/Contest-Start/settings.json b/Courses/omi-public-course/practice/Contest-Start/settings.json
deleted file mode 100644
index eef36e2..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/settings.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "Cases": [
- {
- "Cases": [
- {
- "Name": "sin_grupo.1",
- "Weight": 1
- },
- {
- "Name": "sin_grupo.2",
- "Weight": 1
- },
- {
- "Name": "sin_grupo.3",
- "Weight": 1
- },
- {
- "Name": "sin_grupo.4",
- "Weight": 1
- }
- ],
- "Name": "sin_grupo"
- }
- ],
- "Limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "23.423s",
- "TimeLimit": "1s"
- },
- "Slow": false,
- "Validator": {
- "Name": "token-caseless",
- "Tolerance": 1e-9,
- "GroupScorePolicy": "sum-if-not-zero"
- },
- "alias": "Contest-Start",
- "title": "Contest-Start"
-}
diff --git a/Courses/omi-public-course/practice/Contest-Start/solutions/es.markdown b/Courses/omi-public-course/practice/Contest-Start/solutions/es.markdown
deleted file mode 100644
index 9858bf3..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/solutions/es.markdown
+++ /dev/null
@@ -1 +0,0 @@
-Escribe aquí la solución de tu problema
diff --git a/Courses/omi-public-course/practice/Contest-Start/statements/es.markdown b/Courses/omi-public-course/practice/Contest-Start/statements/es.markdown
deleted file mode 100644
index 0cce341..0000000
--- a/Courses/omi-public-course/practice/Contest-Start/statements/es.markdown
+++ /dev/null
@@ -1,67 +0,0 @@
-# Contest Start
-
-There are n
- people participating in some contest, they start participating in x
- minutes intervals. That means the first participant starts at time 0, the second participant starts at time x, the third — at time 2⋅x, and so on.
-
-Duration of contest is t minutes for each participant, so the first participant finishes the contest at time t, the second — at time t+x, and so on. When a participant finishes the contest, their dissatisfaction equals to the number of participants that started the contest (or starting it now), but haven't yet finished it.
-
-Determine the sum of dissatisfaction of all participants. new update 60
-
-# Input
-The first line contains a single integer k (1≤k≤1000) — the number of test cases.
-
-Each of the next k lines contains three integers n, x, t (1≤n,x,t≤2⋅109) — the number of participants, the start interval and the contest duration.
-
-# Output
-Print k lines, in the i-th line print the total dissatisfaction of participants in the i-th test case.
-
-# Ejemplo
-
-||input
-4
-4 2 5
-3 1 2
-3 3 10
-2000000000 1 2000000000
-||output
-5
-3
-3
-1999999999000000000
-||description
-In the first example the first participant starts at 0
- and finishes at time 5
-. By that time the second and the third participants start, so the dissatisfaction of the first participant is 2
-.
-
-The second participant starts at time 2
- and finishes at time 7
-. By that time the third the fourth participants start, so the dissatisfaction of the second participant is 2
-.
-
-The third participant starts at 4
- and finishes at 9
-. By that time the fourth participant starts, so the dissatisfaction of the third participant is 1
-.
-
-The fourth participant starts at 6
- and finishes at 11
-. By time 11
- everyone finishes the contest, so the dissatisfaction of the fourth participant is 0
-.
-
-In the second example the first participant starts at 0
- and finishes at time 2
-. By that time the second participants starts, and the third starts at exactly time 2
-. So the dissatisfaction of the first participant is 2
-.
-
-The second participant starts at time 1
- and finishes at time 3
-. At that time the third participant is solving the contest.
-||end
-
-
-# Boundaries
-sdsfasdas
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.in b/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.in
deleted file mode 100644
index 8d04f96..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.in
+++ /dev/null
@@ -1 +0,0 @@
-1 2
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.out b/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.out
deleted file mode 100644
index 00750ed..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/easy.00.out
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.in b/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.in
deleted file mode 100644
index 654d526..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.in
+++ /dev/null
@@ -1 +0,0 @@
-2 3
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.out b/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.out
deleted file mode 100644
index 7ed6ff8..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/easy.01.out
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.in b/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.in
deleted file mode 100644
index 10ec153..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.in
+++ /dev/null
@@ -1 +0,0 @@
-100 200
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.out b/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.out
deleted file mode 100644
index 697cb3a..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/medium.00.out
+++ /dev/null
@@ -1 +0,0 @@
-300
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.in b/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.in
deleted file mode 100644
index fbba5e5..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.in
+++ /dev/null
@@ -1 +0,0 @@
-1234 5678
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.out b/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.out
deleted file mode 100644
index b2b590d..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/medium.01.out
+++ /dev/null
@@ -1 +0,0 @@
-6912
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/sample.in b/Courses/omi-public-course/practice/New-Test-1/cases/sample.in
deleted file mode 100644
index 8d04f96..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/sample.in
+++ /dev/null
@@ -1 +0,0 @@
-1 2
diff --git a/Courses/omi-public-course/practice/New-Test-1/cases/sample.out b/Courses/omi-public-course/practice/New-Test-1/cases/sample.out
deleted file mode 100644
index 00750ed..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/cases/sample.out
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/Courses/omi-public-course/practice/New-Test-1/examples/sample.in b/Courses/omi-public-course/practice/New-Test-1/examples/sample.in
deleted file mode 100644
index 8d04f96..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/examples/sample.in
+++ /dev/null
@@ -1 +0,0 @@
-1 2
diff --git a/Courses/omi-public-course/practice/New-Test-1/examples/sample.out b/Courses/omi-public-course/practice/New-Test-1/examples/sample.out
deleted file mode 100644
index 00750ed..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/examples/sample.out
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/Courses/omi-public-course/practice/New-Test-1/settings.distrib.json b/Courses/omi-public-course/practice/New-Test-1/settings.distrib.json
deleted file mode 100644
index 223d082..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/settings.distrib.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "cases": {
- "sample": {
- "in": "1 2\n",
- "out": "3\n",
- "weight": 1
- }
- },
- "limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "1s",
- "TimeLimit": "1s"
- },
- "validator": {
- "name": "token-numeric",
- "group_score_policy": "sum-if-not-zero",
- "tolerance": 1e-9
- }
-}
diff --git a/Courses/omi-public-course/practice/New-Test-1/settings.json b/Courses/omi-public-course/practice/New-Test-1/settings.json
deleted file mode 100644
index bd2d1ff..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/settings.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "Cases": [
- {
- "Cases": [
- {
- "Name": "easy.00",
- "Weight": 1
- },
- {
- "Name": "easy.01",
- "Weight": 1
- }
- ],
- "Name": "easy"
- },
- {
- "Cases": [
- {
- "Name": "medium.00",
- "Weight": 1
- },
- {
- "Name": "medium.01",
- "Weight": 1
- }
- ],
- "Name": "medium"
- },
- {
- "Cases": [
- {
- "Name": "sample",
- "Weight": 1
- }
- ],
- "Name": "sample"
- }
- ],
- "Limits": {
- "ExtraWallTime": "0s",
- "MemoryLimit": 33554432,
- "OutputLimit": 10240,
- "OverallWallTimeLimit": "1s",
- "TimeLimit": "1s"
- },
- "Slow": false,
- "Validator": {
- "Name": "token-numeric",
- "Tolerance": 1e-9,
- "GroupScorePolicy": "sum-if-not-zero"
- },
- "alias": "New-Test-1",
- "title": "New-Test-1"
-}
diff --git a/Courses/omi-public-course/practice/New-Test-1/solutions/en.markdown b/Courses/omi-public-course/practice/New-Test-1/solutions/en.markdown
deleted file mode 100644
index e3645be..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/solutions/en.markdown
+++ /dev/null
@@ -1,5 +0,0 @@
-To solve this problem, you just needed to mind `long long`s.
-
-```python
-print(sum(int(x) for x in raw_input().strip().split()))
-```
diff --git a/Courses/omi-public-course/practice/New-Test-1/solutions/es.markdown b/Courses/omi-public-course/practice/New-Test-1/solutions/es.markdown
deleted file mode 100644
index ad1304f..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/solutions/es.markdown
+++ /dev/null
@@ -1,5 +0,0 @@
-Para resolver este problema, sólo tienes que tener cuidado de los `long long`.
-
-```python
-print(sum(int(x) for x in raw_input().strip().split()))
-```
diff --git a/Courses/omi-public-course/practice/New-Test-1/statements/en.markdown b/Courses/omi-public-course/practice/New-Test-1/statements/en.markdown
deleted file mode 100644
index 31e0f16..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/statements/en.markdown
+++ /dev/null
@@ -1,13 +0,0 @@
-# Input
-
-Two numbers, $a$ and $b$. update 1
-
-# Output
-
-The sum of both numbers.
-
-# Example
-
-||examplefile
-sample
-||end
diff --git a/Courses/omi-public-course/practice/New-Test-1/statements/es.markdown b/Courses/omi-public-course/practice/New-Test-1/statements/es.markdown
deleted file mode 100644
index 675e794..0000000
--- a/Courses/omi-public-course/practice/New-Test-1/statements/es.markdown
+++ /dev/null
@@ -1,13 +0,0 @@
-# Entrada
-
-Dos números, $a$ y $b$.
-
-# Salida
-
-La suma de ambos números.
-
-# Ejemplo
-
-||examplefile
-sample
-||end
diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md
index 78c232e..3d155de 100644
--- a/DOCUMENTATION.md
+++ b/DOCUMENTATION.md
@@ -90,7 +90,11 @@ pipenv install
```
## Syncing Content from omegaup.com to this repository
-The github actions are configured to push the latest content whenever some changes are pushed in the `sync-course` branch only
+The github actions are configured to push the latest content whenever some changes are pushed in the `sync-course` branch only.
+
+**Adding the required courses**:
+In the ```download_and_sync_courses.py``` file, add the course to the existing list of courese in ```COURSE_ALIASES``` array.
+
**For Admin:**
If a admin want to sync the content from omegaup.com to course github repo, they can run the following commands:
@@ -98,11 +102,11 @@ If a admin want to sync the content from omegaup.com to course github repo, they
```
git checkout sync-course
```
-2. Reset the branch with the main branch:
+1. Reset the branch with the main branch:
```
git reset --hard origin/main
```
-3. Push the changes
+1. Push the changes
```
git push --force
```
diff --git a/README.md b/README.md
index 3492b8b..9ead7fb 100644
--- a/README.md
+++ b/README.md
@@ -5,14 +5,14 @@ Contributors can suggest improvements via **pull requests**, and GitHub Actions
---
-## 📖 Documentation
+## Documentation
A complete guide is available in [Comprehensive Documentation](./DOCUMENTATION.md).
It covers setup, workflows, contribution guidelines, and detailed instructions.
---
-## 📂 Repository Overview
+## Repository Overview
- `.github/` → Workflows for CI, syncing, and modifying assignments
- `Courses/` → Public course content (courses, assignments, problems)
@@ -22,7 +22,7 @@ It covers setup, workflows, contribution guidelines, and detailed instructions.
---
-## 🔑 Key Sections
+## Key Sections
1. [Getting Started](./DOCUMENTATION.md#getting-started)
2. [Syncing Content](./DOCUMENTATION.md#syncing-content-from-omegaupcom-to-this-repository)
@@ -33,6 +33,6 @@ It covers setup, workflows, contribution guidelines, and detailed instructions.
---
-## 📜 License
+## License
This project is licensed under the [License](LICENSE).
diff --git a/problems.json b/problems.json
index 0b6fe80..15e9b6a 100644
--- a/problems.json
+++ b/problems.json
@@ -4,13 +4,70 @@
"path": "Courses/ResolviendoProblemas2021/SP1/Solucion-Tablero-de-Ajedrez"
},
{
- "path": "Courses/omi-public-course/intro/demo-de-objetivo"
+ "path": "Courses/ResolviendoProblemas2021/SP2/Solucion-Durante-la-comida"
},
{
- "path": "Courses/omi-public-course/practice/Contest-Start"
+ "path": "Courses/ResolviendoProblemas2021/SP3/Solucion-Nacho-el-flojo"
},
{
- "path": "Courses/omi-public-course/practice/New-Test-1"
+ "path": "Courses/ResolviendoProblemas2021/solucion-prob-4/Solucion-Xbox-Live-Points"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP5/SolucionTrianguloDePascalNiveles"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP7/Solucion-La-risa-en-vacaciones"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP8/Solucion-Parentesis"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP9/Solucion-Monito-y-Monita"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP10/Solucion-Elefantes-vs-telarana"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP11/Solucion-Mintiendo-sobre-las-cif"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP12/Solucion-Baile-de-graduacion"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP13/Solucion-Giran-que-giran"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP14/Solucion-horanuncaessuficiente"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP15/Solucion-La-popularidad-cuenta"
+ },
+ {
+ "path": "Courses/ResolviendoProblemas2021/SP16/Solucion-Los-Buenos-Amigos-cpp"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/intro_y_variables/python_2"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/colecciones_de_datos/python_3"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/control_de_flujo/python_4"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/operaciones_con_strings/python_5"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/funciones_en_python/python_6"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/objetos/python_7"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/archivos_en_python/python_8"
+ },
+ {
+ "path": "Courses/Curso-de-Python-FutureLabs/math_python/python_9"
}
]
}
diff --git a/utils/download_and_sync_courses.py b/utils/download_and_sync_courses.py
index 5844921..1fc5e98 100644
--- a/utils/download_and_sync_courses.py
+++ b/utils/download_and_sync_courses.py
@@ -24,7 +24,7 @@
# 👇 Add your course aliases here
COURSE_ALIASES = [
"ResolviendoProblemas2021",
- "omi-public-course"
+ "Curso-de-Python-FutureLabs"
]
BASE_COURSE_FOLDER = os.path.abspath(