Ligas de Competencias, problemas, desafíos o retos de programación para resolver

Share this Post Share to Facebook Share to Twitter Email This Pin This
En este espacio me gusta invitarlos a empezar a programar o aprender a nuevos lenguajes de programación, hoy más que nunca se ha visto la necesidad de evolución digital o transformación digital.  Por lo que quiero compartirles en este post donde pueden encontrar ejercicios para empezar a programar porque como cualquier cosa en esta vida, la practica es lo que te va ayudar a mejorar tus habilidades de programación y empezar a resolver problemas.
Existen varias paginas donde plantean problemas de programación y que de acuerdo a los resultados de los programas de cada usuario te va una calificación y se van registrando rackings, o que te pueden dar retroalimentación de tus programas.


Hay otros que son concursos que proponen retos de programación por ejemplo:

En esta publicación veremos un reto o problema de programación de la pagina de UVA, para que puedan practicar su programación, les voy a explicar como lo hice desde cero.

Primer paso tener su cuenta en   https://onlinejudge.org/

problemas de computación

problemas de computación

Una ve creada su cuenta les llegara un correo (vea la carpeta de SPAM) para verificar la cuenta.
Ya dentro lo que vamos hacer es buscar que problemas hay para resolver

Después elijan uno de la lista


Al entrar en uno les mostrara la descripción del problema, les dirá cuales son los datos de entrada y cual debe ser la salida y les muestra un ejemplo de como poder probar su programa y el tiempo en que debe ejecutarse su programa. Las instrucciones están en Inglés.

problemas de computación

Una vez tengan el programa deben comenzar a realizar el análisis del problema. Este es el paso más importante de hacer cualquier programa, entender bien el requerimiento, cuales son los datos de entrada y cuales son los datos de salida esperados.
El problema que yo elegí dice que se van a recibir como entrada el numero de lados de la figura, las coordenadas de las equinas de 2 polígonos separados por espacios por ejemplo


Y al ver esto en un plano cartesiano se vería así, las primeras coordenadas son la figura en rojo y las segundas coordenadas son la figura en verde


Después nos dice calcula el área de todo menos en donde se unen las figuras y esto nos lo dicen textual Calcula el área de la función Exclusive OR 

Ahora debemos pensar como lo vamos a resolver, primero manualmente, por favor no traten de programar primero, es mucho mejor siempre pensar como hacerlo a mano, para poder comprobar los resultados que nos genere el programa.
Entonces para resolver el calculo de un área de esta forma recuerdo que es con formulas de Geometría la siguientes ligas, me gusta compartirles varias porque no siempre entendemos con una forma de explicar 


Ahora vamos a resolverlo a mano, primero calcular el área de todas las figuras y luego voy a restar el área de la parte en que se unen 

  • Área del Rectángulo es igual a 8 unidades
  • Área del Hexágono Irregular 6.5 unidades
  • Área del Triangulo que es la figura que se unen .5 unidades
  • Por lo que resultado es 13.50 esa es el área de la función XOR para ese ejemplo.

Realice el cálculo por medio de determinantes, les muestro mis hojas de mis cálculos





Ahora el siguiente paso es pensar en que lenguaje lo van a programar en mi caso seleccione Python 3.7 ahora hay que traducir en pasos o en un algoritmo lo que hice en papel.

  • Leer datos 2 líneas no mas 
  • Separar mis valores primero en una variable para saber cuantos lados tiene mi figura 
  • Mis siguientes campos en un arreglo por cada figura
  • Después realizar el calculo de área de la primer figura
  • realizar el calculo de área de la segunda figura
  • Obtener los puntos en que se interceptan
  • realizar el calculo del área in que se interceptan
  • Calcular el resultado final
  • Mostrar el resultado en el formato de cadena de largo de 8 con 5 números enteros o espacios y 2 decimales , el punto cuenta como el octavo carácter.

Después de probarlo vamos a subirlo a la página para ello presionamos el botón de submmit en la parte superior derecha y deben seleccionar el lenguaje que utilizaron para programar y copiar su programa o pueden subir el archivo. 



Les dirá que su código de envió
Después cuando los haya calificados los jueces les darán su calificación y verán en que parte del racking están, en mi caso este ejercicio aun no lo resuelvo al 100 pero esta muy entretenido. 



Espero que les haya gustado esta publicación a mi en lo personal me pareció muy entretenida y divertida, además de que es un ejemplo de como pueden aprender a programar ustedes mismo, la práctica les va ir ayudando a plantearse mejor los problemas y a desarrollar mejor o más rápido.

Programa en Python 

Les comparto parte de mi programa para que puedan empezar por ahi e irlo mejorando
lista = []
coordenadas = []
ciclos = 0
ciclos2 = 0
contador = 0
contador2 = 0
contador3 = 0
fig1 = ''
Operacion1 = 0
Operacion2 = 0
resultado = ''
Area1 = 0
Area2 = 0
while fig1 != "0" :
    fig1 = input()
    lista.append(fig1)
ciclos = len(lista) // 2
ciclos2 = ciclos * 2
print(ciclos2)
while contador < ciclos2:
     coordenadas = lista[contador].split(' ')
     coordenadas.append(coordenadas[1])
     coordenadas.append(coordenadas[2])
     contador2 = 1
     Operacion1 = 0
     Operacion2 = 0
     print(coordenadas)
     while contador2 < len(coordenadas) - 2:
           Operacion1 = Operacion1 + int(coordenadas[contador2]) * int(coordenadas[contador2 + 3])
           contador2 = contador2 + 2
     print('Operacion1', Operacion1)
     contador3 = len(coordenadas) - 2 
     while contador3 > 2:
            # print('contador3',contador3)
            Operacion2 = Operacion2 + int(coordenadas[contador3]) * int(coordenadas[contador3 - 1])
            contador3 = contador3 - 2 
     print('Operacion2', Operacion2)
     if (contador % 2) == 0:
        Area2 = (Operacion2 - Operacion1) / 2
     else:
        Area1 = (Operacion2 - Operacion1) / 2
     print('Area1', Area1)
     print('Area2', Area2)
     contador = contador + 1
     Area1 = 0
     Area2 = 0
     
Si ya eres un programador avanzado o te gusta plantear problemas también en esta pagina puedes subirlos o también puedes ser juez.

Espero les haya gustado esta publicación, nos compartan y pueden seguirnos aquí en el blog o en Facebook https://www.facebook.com/Programacionparatodosmsg/

No hay comentarios.:

Publicar un comentario