Mostrando las entradas con la etiqueta cualquier lenguaje de programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta cualquier lenguaje de programación. Mostrar todas las entradas

jueves, 19 de junio de 2025

Two Sum | ¿Dos Sumas? | LeetCode | Hasta encontrar trabajo 1

 A decir verdad no sé si exista una traducción literal para "Two Sum", pero bueno, resolvamos esto de una vez por todas con una explicación sencilla, en español y sin dar tanta vuelta a las explicaciones científicas, técnicas o intelectuales porque ya saben que a nosotros los ingenieros nos gusta andar de "pensantes" en todo momento.

Problema (original):

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

 Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Problema (traducido por mí):

Dado un arreglo de enteros y un entero designado, obtener las posiciones en el arreglo de los dos números que sumados deben dar como resultado el entero designado.

Es decir que si tienes un arreglo [2, 7, 11, 15] y tu designado es el 9, entonces tus números que sumados dan esa cantidad son el 2 y el 7, los cuales se encuentran en las posiciones [0] y [1] de nuestro arreglo.

Hay que dar por hecho que en todo momento el entero designado tendrá una solución implícita en el arreglo, así que no te preocupes de poner "validaciones" de ningún tipo, solo asegúrate de buscar la respuesta correcta en el menor tiempo posible.

La respuesta entonces sería [0, 1] o [1, 0], finalmente no importa el orden.

Otro ejemplo:


Sermón:

La lógica de esto no es la gran cosa, en realidad es muy sencillo solo colocar un par de ciclos y finalmente encontrarás la respuesta, el verdadero reto es que tu desarrollo sea rápido, preciso y totalmente funcional.
En programación existen 'N' caminos para llegar al mismo destino, igual que en la vida, así que haz tu mejor esfuerzo, en realidad si puedes resolver un problema de una manera, habrás aprendido algo, aunque no sea lo mejor de lo mejor, habrás llegado al resultado esperado y puedes seguir mejorando siempre.

Lógica:

1.- Recorrer todo el arreglo con un ciclo
2.- Comprobar cada número del arreglo sumado con el resto para encontrar la respuesta
3.- Validar que efectivamente encontramos la respuesta
4.- Retornar la respuesta

Programación:

1.- Coloqué un ciclo for que va desde la posición 0 (variable x) hasta la última del arreglo
2.- Dentro de ese ciclo hice otro que comenzará desde una posición adelante de nuestro primer ciclo (variable y = x + 1) y de igual manera terminará hasta la última posición del arreglo.
3.- Ahora sí, dentro del segundo ciclo comencé a validar si la suma del arreglo en la posición 'x' (ARREGLO[x]) y el arreglo en la posición 'y' (ARREGLO[y])
4.- Una vez encontrado el valor, retorno las posiciones 'x' y 'y'

¿Complejo?, no realmente, ¿óptimo?, no realmente, pero sí funcional, hay otras formas de realizar esta búsqueda más rápidamente, utilizando un estructuras de datos más veloces, pero para aprender eso primero tienes que pasar por esto, y practicar hasta mejorar tanto que tú mismo puedas criticar tu propio código.

Resultado:



¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste

martes, 22 de junio de 2021

Mi primer programa .EXE | Lenguaje C

Tengo cosas interesantes por subir, pero en esta ocasión les traigo el primer programa que hice cuando aprendí a programar, en realidad no fue el primero que hice pero fue el primer programa por el cual me gané una calificación en la escuela.

Aprendí a programar cuando iba en la preparatoria, eso ocurrió en el 2012, comencé haciendo instrucciones en una libreta, "series de pasos a seguir" como definición de algoritmo, posterior a eso aprendí a hacer diagramas de flujo (DFD), en un programita llamado DFD.


Exactamente lo que está en la imagen, así fue como comencé y al inicio no sabía ni entendía cómo funcionaba todo, pero a prueba y error hice que funcionaran mis "programitas".

Mi primer lenguaje de programación fue C, utilizando Borland C++, un IDE bastante austero, lento y visualmente horrible. Estuve en la gloria cuando conocí Visual Studio 2010 y mi evolución fue lo mejor porque cuando conocí PHP todo fue aún mejor, ya no necesitaba un IDE para hacer mis cosas.

En fin... Algún día podré contar las historias completas, por lo pronto dejaré mi primer programa en C, tal cual lo hice por primera vez, sin formato, sin ortografía, sin nada, totalmente basado en mi personalidad.

A lo que vinieron, ¡CÓDIGO FUENTE!

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.






miércoles, 16 de junio de 2021

¿Dónde quedó la bolita? | Omega Up 6

Problema de OmegaUp


Clic en el enlace o la imagen :)


Descripción
Seguramente alguna vez has visto a los magos a hacer el truco de donde quedo la bolita, en el cual debajo de una de entre tres nueces hay una bolita y el mago realiza varios movimientos intercambiando la posición de las nueces hasta que uno no recuerda donde quedo.

A ti siempre te ha llamo la atención este juego y ahora deseas hacerlo mas difícil, en ves de tres utilizarás cuatro nueces. Cada movimiento consiste en intercambiar un par de nueces, por lo que solo existen 6 movimientos básicos de intercambiar...

Lista de movimientos:
1. la 1 por la 2
2. la 1 por la 3
3. la 1 por la 4
4. la 2 por la 3
5. la 2 por la 4
6. la 3 por la 4

A cada uno de estos movimientos los nombramos del 1 al 6 según aparece arriba.
Para poder realizar el truco, debes conocer en que posición quedó la bolita después de realizar una secuencia de estos movimientos.

Deberás realizar un programa que conociendo en que nuez se encuentra la bolita inicialmente, la serie de movimientos llevados a cabo, calcule la posición final de la bolita.

Entrada
Tu programa deberá leer los siguientes datos: en la primera lineal el número P, que indica la nuez en la que se encuentra la bolita (de 1 a 4).
En la segunda lineal el numero M de movimientos a realizar.
En las siguientes M líneas un numero indicando que movimiento (del 1 al 6) es el que se va a realizar.

Salida
Tu programa debe escribir un solo numero indicando la nuez en la que se encuentra la bolita.




LO QUE YO ENTIENDO:

Este sí me costó algo de trabajo, de hecho no me salió como 4 veces, pero al final salió. Primero te dice que debes introducir la posición donde se encuentra la bolita, y el siguiente valor es el número de movimientos que debes hacer. Esa cantidad de valores deben tener un número del 1 al 6 haciendo referencia el movimiento marcado mencionado allá arriba en la lista de movimientos.
Debes encontrar la lógica para hacer el recorrido de todos esos movimientos y que al final te dé el resultado correcto, obviamente pensando no siempre se puede, por eso te comparto mi código para que repases y te llenes de lógica.

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


martes, 15 de junio de 2021

Bisiesto sencillo | Omega Up 5

Problema de OmegaUp


Clic en el enlace o la imagen :)


Descripción
Un año es bisiesto si es divisible entre 4, excepto que sea divisible entre 100. Sin embargo, si un año es divisible entre 100 y además es divisible entre 400, también resulta bisiesto.

Entrada
La primera línea tendrá un número N, que es el año que tendrás que decidir si es o no bisiesto. Todos los años serán mayores a 1600 y menores a 3,000.

Salida
Para el año de la entrada escribe una "S" o una "N", dependiendo de si el año es bisiesto o no respectivamente.


LO QUE YO ENTIENDO:

Se debe ingresar un año de entre el 1600 y el año 3000. Y haciendo la respectiva comparación te debe decir si es bisiesto o no.
Para quienes no tengan el contexto, cada cuatro años febrero tiene 29 días, pero esta condición solo aplica si el año es divisible entre 4 siempre, y divisible entre 100 y 400, pero si solo es divisible entre 100 y no entre 400 esta regla se rompe, por ejemplo el año 200, ese no es bisiesto aunque sea divisible entre 4, porque además es divisible entre 100 y entre 400 no.

Nací el 27 de Febrero de 1996 -> Fue año bisiesto y nací 2 días antes.

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


lunes, 14 de junio de 2021

El Triangulito | Omega Up 4

Problema de OmegaUp


Clic en el enlace o la imagen :)


Descripción
Asunción por algún motivo quiere dibujar un triangulito en la computadora. Como aún no sabe programar interfaces gráficas, lo hace por medio de la consola.

Entrada
Ninguna.

Salida
El dibujo de un triangulo de 4 unidades de altura escrito con el carácter 'o'.

LO QUE YO ENTIENDO:

Se trata de dibujar un pequeño triángulo de 4 caracteres de base por 4 de altura, algo similar a la pirámide de asteriscos que tengo por alguna parte de este blog, deberías buscarla y empaparte de puro conocimiento. Como no se debe centrar, será aún más sencillo.

o
oo
ooo
oooo

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


domingo, 13 de junio de 2021

Abuelita come helados | Omega Up 3

     Problema de OmegaUp


Clic en el enlace o la imagen :)


Descripción
A la abuelita de Andrea le gusta mucho comer helados lo que puede llegar a ser un gran problema (demasiada azúcar). Por esa razón, para que su abuelita no coma demasiados helados, Andrea decidió que por cada helado que coma, su abuelita tendrá que comer 3 champiñones (la abuelita de Andrea odia los champiñones). Ayuda a Andrea a averiguar cuántos champiñones le tiene que dar a su abuelita. Andrea te dará el número de helados que su abuelita haya comido.

Entrada
Número de helados que comerá la abuela. 

Salida
Número de champiñones que deberás darle de castigo.

LO QUE YO ENTIENDO:

En realidad no es muy complicado pensar que por cada helado debes castigarla con 3 champiñones, es decir, la tabla del 3. 
1 es a 3
2 es a 6
...
Etc.

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

sábado, 12 de junio de 2021

ASCII for first four characters | Omega Up 2

Problema de OmegaUp


Clic en el enlace o la imagen :)


Descripción
Escriba un programa que le pida al usuario que ingrese su nombre. Entonces debería imprimir el Equivalente ASCII de cada uno de los primeros cuatro caracteres de su nombre. Por ejemplo, Aquí hay una muestra del programa a continuación.

Entrada
Cualquier texto, ¡CUALQUIERA!
Ejemplo: Kent

Salida
K ASCII value is 75 
e ASCII value is 101 
n ASCII value is 110 
t ASCII value is 116


LO QUE YO ENTIENDO:

Nada que deba explicar, simplemente el código ASCII es código ASCII, es decir, convertir los primeros 4 caracteres que introducimos en números normales de entre el 0 y el 255.
Facilito, únicamente debemos convertir datos de tipo CHAR en INT, nada nuevo.

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


domingo, 25 de abril de 2021

Métodos de Ordenamiento [1] Método de Burbuja

Desde el inicio de los tiempos acomodar/ordenar cosas ha sido una tarea indispensable para muchas personas y en programación no es la excepción. Pero a diferencia de las cosas que ordenamos normalmente, aquí solo es posible ordenar datos.
El método de burbuja sirve para ordenar números de mayor a menor y viceversa, pero hay un principio básico que se debe conocer antes de querer ordenar los números.

CICLOS: Es necesario tener conocimiento en bucles/ciclos si queremos ordenar N cantidad de números.



Sabiendo ciclos y con mucha imaginación es posible tener claro nuestro proceso, estos son los pasos que debes seguir para ordenar números.


Lista de números: 5    17    21    13    4    11    17

Paso 1: Tomar el segundo número de nuestra lista, en este caso es el 17, y lo comparamos con el primero.
                5 es menor que 17 = Sí, entonces no ocurre ningún cambio.

Paso 2: Utilizar el siguiente número y compararlo con el primero.
                5 es menor que 21 = Sí, entonces nuevamente no ocurre nada.

Paso 3: Repetimos el paso 2 hasta el último número.
                5 < 13 = Sí
                5 < 4 = No, aquí ocurre un cambio: 4    17    21    13    5    11    17
                4 < 11 = Sí
                4 < 17 = Sí

Paso 4: "Recortaremos" el recorrido, nuestro número 4 va al inicio y ya se queda guardado así, entonces vamos a comparar del 17 hasta el otro 17:     4    17    21    13    5    11    17.

Y a repetir los pasos del 1 al 3:
                17 < 21 = Sí
                17 < 13 = No, ocurre otro cambio:  13    21    17    5    11    17
                13 < 5 = No, cambio:  5    21    17    13    11    17
                5 < 11 = Sí
                5 < 17 = Sí

Tenemos: 4    5    21    17    13    11    17
Y otra vez:
                21 < 17 = No, cambio:  17    21    13    11    17
                17 < 13 = No, cambio:  13    21    17    11    17
                13 < 11 = No, cambio:  11    21    17    13    17
                11 < 17 = Sí

Tenemos: 4    5    11    21    17    13    17
Y otra vez:
                21 < 17 = No, cambio:  17    21    13    17
                17 < 13 = No, cambio:  13    21    17    17
                13 < 17 = Sí

Tenemos: 4    5    11    13    21    17    17
Y otra vez:
                21 < 17 = No, cambio:  17    21    17
                17 < 17 = No es menor, pero no afecta si hay cambio o no porque son iguales

Tenemos: 4    5    11    13    17    21    17
Y otra vez:
                21 < 17 = No, cambio:  17    21

FINALMENTE: Este es nuestro resultado: 4    5    11    13    17    17    21


Hasta este punto, todos pueden llegar a creer que esto sí es método de burbuja, pero lo que te acabo de explicar es un método de ordenamiento más óptimo que el de la burbuja, ¿POR QUÉ?, porque el algoritmo burbuja dice que debes recorrer todo siempre, iniciar desde el primero hasta el último cada que hagas una iteración, pero en este método vamos guardando los números que ya tenemos identificados y solo acomodamos el resto, se llama ordenamiento por SELECCIÓN.


A lo que vinieron, ¡CÓDIGO FUENTE!

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

NOTA: Si deseas cambiar de mayor a menor o de menor a mayor, solo cambia esta condición en el código y ya  if(a[x] < a[y])            if(a[x] > a[y])

Burbuja



SELECCIÓN

miércoles, 23 de diciembre de 2020

Vector dominante | OmegaUp 1

Problema de OmegaUp


Clic en el enlace o la imagen :)

Descripción
Escribe un programa que lea dos secuencias de n enteros cada una y determine si cada elemento de la primera secuencia es mayor que el elemento respectivo de la otra secuencia.

Entrada
Un entero n seguido de los n enteros de la primera secuencia y los n enteros de la segunda secuencia. Puedes suponer que todos los enteros están en el rango de 1 a 100.

Salida
El valor 1 si se cumple la propiedad descrita o el valor 0 en otro caso.


LO QUE YO ENTIENDO:

El problema te plantea utilizar arreglos, para ser exacto 2 arreglos de la misma longitud, tú defines esa longitud y después los llenas con valores numéricos en un rango de valores de 1 a 100. Si todos los números del primer arreglo son mayores que los del segundo, tu salida debe ser 1, de lo contrario debes regresar un 0 en tu salida.

¿Sencillo, no?

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


domingo, 19 de julio de 2020

Estructura de datos y probabilidad | Rompecráneos 1

He decidido abrir una sección llamada Rompecráneos, que consistirá en resolución de problemas que la gente no encuentra en internet o que quizá está tan ocultos en la red que es imposible encontrarlos, en fin, el día de hoy les traigo este problema:



Define una función que reciba en una estructura de datos, un listado de tamaño variable de pares [nombre | string, importe | float].
Y que regrese de cada par [nombre, importe] la siguiente información:
  1. ¿Es posible que el elemento x sea un total o subtotal? (Calificar con una probabilidad arbitraria de 0% a 100%)


Analicé el problema y llegué la conclusión de que no sé qué debo hacer, es decir, en el código puedo plasmar lo que me está pidiendo, una colección de datos en pares que contenga nombre e importe, ambas variables persistentes en un objeto, pero luego de ahí no sé qué debo hacer exactamente.
Solo puedo imaginar que debo decidir si ese par de datos puede ser un total o un subtotal considerando una sola variable es o no es uno de esos dos valores, en caso de que pueda ser cualquiera de los dos debo decidir qué tan probable es que sí pudiera ser.

Se me ocurrió enlistar una serie de propiedades que un valor total/subtotal pueda tener, como las siguientes:

  1. El valor del importe en la posición x es la suma de todos los otros que no están en la posición x, por lo tanto ese es un total 100% seguro.
  2. El valor en la posición x es mayor que todos los otros valores, sin embargo es menor por poco de la suma del resto de los datos, tiene un 50% de probabilidad de ser un subtotal.
  3. El valor es el menor de toda la lista, 0% de probabilidad de que sea un total o subtotal.
De esa manera fui seleccionando los casos, en realidad no tengo idea de cuál podría ser la solución pero esto es lo único que se me ocurrió, así mismo, planteé el código para que tú me ayudes a resolverlo si te es posible o si lo ves de otra manera, siempre he tenido claro que la mente es grandiosa, mientras que tú piensas en alguna cosa, alguien más está pensando otra similar, igual, o muy diferente que tú, espero que puedan resolver ustedes el problema y si es así háganmelo saber en los comentarios.

Aquí les dejo mi código en C# para que vean cómo lo propuse:


lunes, 6 de julio de 2020

Listas en programación [3] | Listas simples

En la entrada anterior mencioné las listas simples, y también que de simples solo tienen el nombre, y efectivamente tienen un nivel de complejidad un poco más elevado a lo que ya conoces, es decir, "los arreglos".
Es posible manejar las listas como un simple arreglo, le agregamos datos y le quitamos. Pero en esta ocasión utilizaremos espacios de memoria que se comuniquen entre sí utilizando algo que se llama puntero, en C es un poco más complejo hacer el manejo de estos, pero en los lenguajes orientados a objetos es sencillo llevar a cabo este proceso, ya que el manejo de clases y objetos es muy eficaz.

En realidad las listas simples están enlazadas para que cumplan con su función, este enlace apunta a una dirección de memoria, por ello es que si se asigna ese valor a cualquier otra variable, este afectará de forma global.

Podemos tenerlo en cuenta como los changuitos que aparecen en la película de Toy Story, que uno se unía a otro y así, cada chango representa un valor y sus brazos representan ese enlace apuntando a la dirección de memoria.

La siguiente imagen muestra la representación correcta de una lista simple enlazada, el enlace final determinará su límite al tener un valor nulo, es decir, que no hay otra dirección de memoria más, simplemente hasta ahí llega.

Estructuras de datos: listas enlazadas, pilas y colas.

Es posible realizar 3 operaciones básicas en este tipo de listas, bueno, en realidad en todas las listas, pero con pequeñas variaciones.

Agregar: Es posible agregar un dato "siguiente" a la lista, o crear un nuevo nodo que apunte al anterior, es decir, agregar un dato al final o al inicio.

Borrar: Es posible borrar un dato ya sea el primero, el último o buscándolo por su valor, pero siempre de uno en uno, si se llegaran a repetir valores, eliminará el primero que encuentre.

Buscar: Es necesario poder hacer consultas de datos, para verificar si existe el valor, ya sea solo para mostrarlo o también como apoyo para borrar.

En el siguiente código te muestro esas operaciones utilizando ECMA Script 6, es una variación de Javascript más bonita y orientada a objetos, para más información puedes consultar en algún sitio web las diferencias de cada variación.


Prueba la magia:


Y descarga el código si quieres ver cuál es la magia detrás de esto.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic a la imagen para descargar el código en Javascript:

miércoles, 3 de junio de 2020

Listas en programación [2] | Pilas y colas

En la entrada pasada te mostré las maravillosas listas, sin embargo solo fue un concepto muy general y te mostré una manera en la que puedes manejarlas sencillamente. Pero hay listas con propósitos realmente marcados, como lo son las que te voy a mostrar a continuación.

¿Has pensado en alguna ocasión que en realidad los datos pueden ser objetos?, es decir, en la vida real una lista podría representarse como texto en papel, como tu lista de útiles escolares y/o la de la despensa, pero ¿qué tal si pudieran ser personas en su totalidad o animales u objetos tangibles en general?, bien, hay maneras de representar esas situaciones con programación, es necesario saber un poco más sobre programación orientada a objetos (POO), pero eso será para otras entradas más, aunque quizá te hable un poco sobre ella cuando veamos las listas simples, que de simple solo tienen el nombre.


Las mejores webs para crear listas y compartirlas con otros


Bien, las pilas y las colas son herramientas en programación que pueden ser utilizadas para representar acciones relacionadas con sus nombres, por definición tenemos que:

Pila: Lista cuyo valor insertado se agregará siempre al principio, y si se requiere remover un valor de ella se deberá eliminar primero el último que se agregó (First input, last output | El primero en entrar es el primero en salir). El ejemplo más común para esto es cuando apilas un montón de libros y luego debes quitar de uno por uno para acomodarlos.


Pila (informática) - Wikipedia, la enciclopedia libre


Cola: Lista cuyo valor insertado se agregará siempre al final, y si requiere remover un valor de ella se deberá eliminar primero el valor que se encuentra al inicio (First input, first output | El primero en entrar es el primero en salir). El ejemplo más común para esto es imaginar una fila en cualquier sitio, normalmente un banco, la primer persona que se forma es la primera que se va porque la atienden primero.

Cola (informática) - Wikipedia, la enciclopedia libre

En fin, estas listas son de mucha ayuda en varios ejercicios, sin embargo, solo ayudaré un poco a facilitarte código para que veas un súper ejemplo muy sencillo que puedes utilizar en donde tú quieras, recuerda que estos códigos son muy genéricos y aunque yo los haga en Javascript por comodidad, tú puedes pasarlos fácilmente a C#, C++, Python, Java, etc...


Mira este bonito ejemplo:


¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic a la imagen para descargar el código en Javascript:

martes, 2 de junio de 2020

Listas en programación [1]

Ah, las listas, un clásico en el arte de la programación. Existen muchísimos elementos en programación que podemos utilizar para buenas prácticas, o simplemente por la necesidad de utilizarlos, en esta ocasión te voy a mostrar un concepto muy interesante en este arte.


Las mejores webs para crear listas y compartirlas con otros



¿Has alguna vez utilizado una lista para alguna cosa?, ya sea para ir al supermercado o cuando tu jefecita te mandaba a la tienda y se aseguraba de que le llevaras lo que te había pedido, te anotaba lo que quería, y aunque te hacía sentir estúpido, era agradable saber que esa lista haría que fuese imposible equivocarte, pero bueno, no hay motivo para proyectarme con esto.
Una lista es una colección de datos desordenada, ordenada o semiordenada, en este momento no nos interesa qué es cada una, pero por su nombre se sobreentiende el propósito de cada una. Al fin y al cabo el propósito de una lista es tener datos en un sitio donde podremos usarlos y/o al menos conocerlos.

En programación podemos utilizar listas de diferentes manera, y en C# y otros lenguajes existen clases o maneras de simular estos maravillosos objetos, por llamarlos de alguna manera.
La forma más sencilla de simular una lista es utilizando arreglos o arrays, o si eres muy vieja escuela puedes referirte a ellos como vectores, cualquier forma es válida y si el propósito es el mismo, llámala como mejor te guste.

Para este ejercicio utilizaremos una simulación con Javascript y HTML, sé que no es la manera en la que las personas aprenden programación, sin embargo es la más genérica a mi punto de vista, además de que considero que Javascript es hermoso.

Mira este bonito ejemplo:



¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic a la imagen para descargar el código en Javascript:

viernes, 24 de abril de 2020

Tic Tac Toe | Gato | Programación

Hola, hace un buen rato que no he podido subir nada a pesar de que había dicho que sería un poco más constante por eso de la página de facebook, pero bueno, lo mejor es la noticia que trae consigo esta entrada.

Gato, Tic Tac Toe, como lo conozcan en tu país, ciudad o comunidad. Así como lo ves, y como lo imaginaste, ¿recuerdas cuando te aburrías en tu salón de clases y te ponías a jugar esto con tu amigo o amiga?, es bonito recordar eso pero los tiempos cambian, ahora se la pasan en el teléfono haciendo tik toks o algo similar en cualquier red social. Cómo pasan los años.

Bien, la lógica de esto o más bien las reglas son las siguientes:

  1. Solo se puede de 2 jugadores, así que si hay más tendrán que esperar a que les toque, por eso siempre es bueno que solo tengas un mejor amigo, para que el otro no se ponga celoso.
  2. Cada jugador tiene un símbolo, los cuales normalmente son una bolita ( O ) y una equis ( X ). Conocí una persona muy extraña que utilizaba otros símbolos, actualmente le llamaría única y detergente, pero en ese tiempo significaba ser cool y hacerse notar.
  3. El tablero del juego es de 3 x 3 cuadrados, y en cada uno se colocan los símbolos de cada jugador.
  4. Cada jugador solo puede llenar un cuadrado por turno con su símbolo, y el juego se gana cuando alguien logró conectar 3 figuras de manera horizontal, vertical o diagonal.

Demasiadas reglas para un juego tan sencillo que se puede visualizar de la siguiente manera:


Si escribes "Tic Tac Toe" en Google te da el escenario de arribita para que juegues Gato contra su bot, está bonito y las animaciones son una chulada, pero nada como programarlo tú mismo, por ello te voy a dejar el código genérico aquí abajo.


Sí, es obvio que los ingenieros de Google nos dejarán en ridículo de una manera maquiavélica, pero al menos se hace el esfuerzo para obtener algo así. El juego está programado en Javascript (obvio usando también etiquetas HTML), sin embargo el código es muy genérico que si ya tienes algo de experiencia programando vas a poder traducir a cualquier otro lenguaje que te propongas.


Prueba el juego aquí:

¡Gato!







Turno: O


¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Clic en la imagen para descargar:



lunes, 6 de abril de 2020

Ciclo for

Ya te he mostrado ciclos en algunos de mis programas en este blog, quizá los hayas notado o quizá no, casi estoy seguro que la gente solo se roba el código sin prestarle atención a lo que está escrito aquí.

En fin, en esta entrada te voy a orientar lo mejor posible acerca del ciclo for, el tan temido bucle que hace que algunos pierdan la cabeza tratando de entender por qué hace lo que hace. A veces lo hace bien, a veces lo hace mejor, y en ocasiones simplemente ni siquiera se itera nada.

Teoría: Los bucles o ciclos son utilizados en un sin fin de situaciones, te sorprenderías de saber que estás en un ciclo llamado "vida" y que cada uno de tus días es una iteración, pero no estoy para dudas existenciales.
La función de los ciclos en programación es repetir un bloque de código las veces que el programador lo requiera, por ejemplo, si quiere imprimir en pantalla una frase "n" veces él programará el ciclo para que así sea.
De los ciclos que existen, el for es el más sencillo, pues en su estructura contiene todas las propiedades de un ciclo.

Propiedades de un ciclo:

  • Variable(s) de "control": Yo mismo decidí llamarles variables de control, porque es casi en base a ellas que el ciclo funciona, lo controlan hasta que la condición se cumpla. Puse entre comillas la palabra control porque no siempre son responsables de esta función, sin embargo la mayoría de las veces son necesarias.
  • Condición(es): Las condiciones son totalmente necesarias en todos los ciclos, no hay manera de que un ciclo no tenga una condición, estas son responsables de hacer finito el ciclo, muchos programadores cometen el error de hacerlos infinitos y esto hace que los sistemas colapsen, o que el programita desarrollado tenga un error que pueda trabar la computadora.
  • Incremento(s): Igual que las variables, el incremento puede llegar a ser opcional en algunos casos, sin embargo también puede ser responsable de hacer finito el ciclo y ayuda a llevar un conteo de las iteraciones que han ocurrido, este incremento se le puede hacer a las variables de control o si se requiere a cualquier otra variable.


Estructura del ciclo for:

for (variables_control; condiciones; incrementos)
{
  //bloque_de_código;
}

No es nada difícil aprenderse de memoria esta estructura para realizar cualquier programa, sin embargo también hay que aprender la manera de implementarlo de manera correcta o de la mejor manera posible, pues en su estructura existe todo un mundo de posibilidades. Por ejemplo:

Se puede usar la siguiente estructura para contar del 1 al 10:

for (int i = 1; i <= 10; i++)
{
  //bloque_de_código;
}

Pero también es posible usarlo de la siguiente manera::
int i = 0;

for (i = 1; i <= 10; i++)
{
  //bloque_de_código;
}

La diferencia es que en la primera situación, la variable i se declara para usarse únicamente en el bloque de código del ciclo, y en la segunda situación la i se puede usar en el bloque de código completo.

También es posible utilizar más variables en el ciclo, ya sea nada más para asignarles un valor o para declarar su uso, únicamente se coloca una coma después de cada asignación de valor.

for (int i = 1, y = 1; i <= 10; i++)
{
  //bloque_de_código;
}

int i = 0, y = 0;

for (i = 1, y = 1; i <= 10; i++)
{
  //bloque_de_código;
}

Pero ahí no acaba todo, las condiciones pueden ser muy grandes si se desean:


for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i++)
{
  //bloque_de_código;
}

Y si aún quieren más, también los incrementos pueden ser a cualquier cantidad de variables que queramos.

for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i++, y--)
{
  //bloque_de_código;
}

Podemos utilizar las "funciones" ++ o -- para aumentar o decrementar un valor de uno en uno, o se puede hacer una igualación completamente normal como la siguiente:

for (int i = 1, y = 1; (i <= 10 && i >= 1) || y < 10; i = i + 5)
{
  //bloque_de_código;
}

Bueno, esta es la magia del ciclo for, aunque la verdadera magia la notarás el día que medas un ciclo dentro de otro ciclo y hagas maravillas recorriendo arreglos bi y multidimensionales, ahí sí notarás la magia. Mientras te dejo unos programas básicos para que no pierdas la práctica.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

Así de hermoso habría sido conocer los ciclos for en la primaria cuando la maestra te castigaba y te ponía a escribir algo como esto 100 veces.

sábado, 28 de diciembre de 2019

¡Programa que imprime las tablas de multiplicar!



Las tablas de multiplicar, malditas tablas diría yo cuando iba en la primaria. En mi país México en general te enseñan a multiplicar en base a este concepto, consta de 8 o 10 tablas como su nombre lo dice donde se encuentran las multiplicaciones de los 10 números (del 1 al 10) hasta el 10 cada uno, es de 1*1, 1*2,..., 1*10, 2*1, 2*2, y así hasta el máximo que es 10*10.

Resultado de imagen para tablas de multiplicar del 1 al 10

Es un concepto sencillo hasta cierto punto porque únicamente te debes de aprender de memoria esta secuencia de multiplicaciones, pero la tarea se complica cuando tu jefecita es a quien debes decirle cada una de estas sin equivocarte o te irá mal. Finalmente debes demostrar esos conocimientos adquiridos diciéndole cada una a tu maestro(a), y según ya con eso debes tener nociones de cómo multiplicar, aunque la verdad puedes aprender sin tener que memorizar las tablas.

La explicación de aquí es todo lo que necesitas saber para programar este objetivo, únicamente se trata de 10 iteraciones por cada número, y puedes utilizar ciclos y todas esas cosas que se te ocurren, recuerdo que este "mini proyecto" lo hice cuando recién iniciaba y lo hice con 10 printf en lenguaje C, ya luego me di cuenta de que pude haberme ahorrado esas líneas de código si tan solo hubiese investigado, pero bueno, nunca se termina de aprender.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


sábado, 26 de octubre de 2019

¿Cómo imprimir siempre el valor absoluto de un número?

Un número absoluto es aquel que conserva su valor positivo siempre (al menos para mí), es decir, el valor absoluto de todos los números positivos o negativos siempre serán números sin signo, lo que significa que nunca podrán ser menores que cero.

Resultado de imagen para valor absoluto

Justo hoy leía un problema que buscaba en programación mostrar el valor absoluto de cualquier número, pero yo tuve una idea y otras personas tuvieron otra idea, y así un llovedero de ideas para resolver el problema.

Es realmente sencillo si lo observamos desde cualquier punto de vista, pero es obvio que no todo el mundo piensa de la misma manera, por eso es que hoy les comparto el código de lo que hice yo para obtener el valor absoluto de cualquier número ingresado. No es un programa complejo pero es buen ejercicio mental para practicar lógica y sentencias de programación, yo lo resolví únicamente con una condición y una multiplicación.

Creo que estoy publicando mucha basura con tal de obtener ingresos, desde hoy únicamente dejaré esta ventana https://dotnetfiddle.net para que no sea necesario estar yendo de página en página y esperando 5 segundos. Saludos.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.


lunes, 21 de octubre de 2019

Combinaciones de letras para formar una palabra en C#

¿Alguna vez has escuchado sobre la genética?, es absurdo hasta cierto punto escucharlo por aquí, ¿no?, pero no es tan descabellado, pues la genética también está basada en algoritmos muy complejos, realmente complejos.

Imagina esto, tu abuelo y tu abuela, obviamente de familias distintas tuvieron a tu padre, y tu padre con tu madre te tuvieron a ti, es también obvio que tu madre tiene sus propios padres; y quizá ella heredó algo de sus padres, pero tu padre no, hasta que naciste tú. "Abueleaste", dirían en mi humilde pueblo, es decir, tuviste una característica genética que le llevó a familia algunas generaciones "fallidas", es decir, ni tus tíos, ni tu padre, ni tus hermanos obtuvieron esa característica extra que tú tienes. Puede ser desde una marca de nacimiento, hasta color de ojos, cabello, y sin fin de tonterías que las mamás encuentran para justificar por qué su hijo tiene características que "su padre" no (eso sonó a que eres hijo del lechero).

Resultado de imagen para algoritmo genetico

En fin, eso es un algoritmo genético, y en esta ocasión traigo un programa bastante relacionado con el tema, sin embargo es más básico que las morras que dicen "¡WEEEEEEY, NOOOOO!".

Incluye una población, que en este caso sería nuestra frase, nuestra selección sería toda la población, pues queremos cambiar de posición cada una de las letras, pero como no todas cambian siempre, diremos que nuestra selección es variable desde 0 hasta la longitud de nuestra frase. También tenemos un cruce implícito, pues si bien no tenemos una selección fija, tampoco tenemos un cruce distinguible, POR ESO DECIMOS QUE ES PARECIDO AL ALGORITMO GENÉRICO mas no representa la genética en su esplendor.
Y nuestra mutación sería el producto de lo que ocurrió en el cruce, normalmente la mutación es la probabilidad de que ocurra un cambio, pero como nuestra probabilidad está ligada únicamente a la generación de una número aleatorio no tenemos definido un % de mutación, solo tenemos nuestro producto final que obtendrá la palabra idéntica una vez generadas frases al azar con todos los caracteres que la conforman, toma en cuenta que entre más larga sea la palabra, más larga será la espera para que encuentre una resolución.

También podemos decir el el algoritmo genético se relaciona aún más si colocamos un contador de generaciones para saber en cuál fue donde se obtuvo el resultado esperado.



¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Dale clic en el logo del lenguaje de programación que sea de tu gusto y descarga el código.

Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

domingo, 20 de octubre de 2019

Fracciones a decimales y decimales a fracciones en C#



Hacía mucho que no redactaba una entrada para el blog, recientemente acabo de subir una nueva, pero este día también es necesario subir otra nueva.

AHORA SÍ...

Todos hemos tenidos problemas con las fracciones, esos numeritos que tienen abajo otros números, tuvimos conflictos con los numeradores, denominadores, cocientes, divisor, dividendo, y todos esos términos que a final de cuenta tenían significados similares pero cada maestros nos confundía utilizando todas esas distintas formas de llamarle, si de por sí ya era difícil entender, ahora con tanto sinónimo pfff... 

AHORA SÍ YA VA EN SERIO...

Bien, las fracciones o quebrados, como mucha gente latino las conoce son números que representan una porción de algún entero, su nombre viene del latín (la verdad no tengo idea de dónde venga). Siempre en la primaria se nos explica con pasteles o con cosas que se puedan dividir, como una pizza o una galleta, así como en la figura de abajo.

Imagen relacionada

No es tan sencillo como que siempre sea la mitad, también pueden ser octavos, novenos, y tanta cantidad se te ocurra, pero nada puede ser dividido entre cero, y si no me crees pregúntaselo a SIRI.
Cada fracción tiene dos partes, su numerador (la parte de arriba) y el denominador (lo de abajo), que si analizamos bien, las fracciones son simplemente divisiones para "repartir" enteros.

Bueno, en fin, mucha teoría, USTEDES SOLO VIENEN POR EL MALDITO CÓDIGO...



¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Dale clic en el logo del lenguaje de programación que sea de tu gusto y descarga el código.

NOTA:

El programa solo calcula la fracción definitiva, es decir, si tú ingresas 1.5 el programa te regresará 1 + 5/10, en lugar de decir 1 + 1/2, que al final es lo mismo, pero si buscas simplificar la fracción hasta ese punto dale clic AQUÍ.

Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.

sábado, 19 de octubre de 2019

Programa de Código ASCII en C#


Durante el proceso de introducción al mundo de la "computación" te vas a dar cuenta de que en ocasiones dependes del código ascii, si eres de la vieja escuela es muy probable que utilizaras Alt + 64 para escribir el @ cuando escribías tu correo en MSN, pero bueno, no regresaremos a eso porque no estamos aquí para nostalgias, estás aquí para obtener código perrón en varios lenguajes y que hagan exactamente lo mismo.

Resultado de imagen para codigo ascii

De igual manera como cuando hacías tu combinación de teclas para obtener el caracter especial también en programación debes hacerlo, pero simplemente convirtiendo a tipo CHAR cualquier número, siempre y cuando el lenguaje soporte el símbolo resultante, pues no sé a qué se deba que algunos lenguajes impriman símbolos extraños en lugar de imprimir el que debe ser.

La verdad la historia y las explicaciones no son lo mío, por eso aquí les dejo el código para que lo analicen y lo vean y lo amen... Todo lo que ustedes deseen.

¡DESCARGA FAST!

Todo el código que quieras, ¡GRATIS!, programación totalmente gratuita.
Dale clic en el logo del lenguaje de programación que sea de tu gusto y descarga el código.

Comenta, opina, exprésate y déjame saber si quieres algo específico, si algo está mal o si no te gusta algo, para hacer que te guste.