En este blog encontrarás lo que estás buscando. Mucha gente no está muy familiarizada con la programación, ni siquiera están estudiando algo referente a la carrera de Informática, Sistemas o algo relacionado con el desarrollo de software, pero necesitan conocimientos básicos que al final de la materia van a olvidar porque no les interesa, aquí yo estoy dispuesto a donar código fuente sencillo.
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
Los extrañé, así que regresé. Tendré una nueva dinámica medio parecida a lo que venía haciendo desde antes de comenzar con todo esto de la IA y de mis actividades de regalarles el código, en realidad son buenas noticias porque probablemente esto no me tome demasiado tiempo, pero sí les regale mucho código a ustedes.
Esta será una nueva sección a la cual llamaré: Resolviendo problemas hasta conseguir otro trabajo, actualmente y desde que inicié el blog tengo un trabajo como desarrollador de software, soy una persona realmente enfocada y trato de mejorar siempre.
La justificación de esto es la siguiente, tengo trabajo claro que sí, pero disfrutaría muchísimo tener la oportunidad de ejercer esta profesión tan espectacular como lo es el desarrollo de software, ya sea desarrollando o liderando proyectos.
Disfruto mucho de esto y espero que sea de su agrado leer entradas de este tipo, igual próximamente les estaré compartiendo resultados, avances de mis entrevistas y quizá alguno que otro problema. También me gustaría compartirles algunos consejos respecto a lo laboral y a lo no tan laboral que desde luego tienes que enfrentar antes de conseguir trabajo, durante tu proceso de recién egresado, principiante buscando un trabajo, proceso de entrevistas y contratación.
NO TOCARÉ TEMAS MONETARIOS, porque lo último que quiero es que les vaya mal por estar buscando el trabajo soñado, bien pagado y fácil, ningún trabajo así es fácil de conseguir pero claro que sí es posible de lograr, estudiando, practicando y obviamente desarrollando.
Todo el código que aparece aquí es de ustedes y para ustedes, links directos en todo el blog, si alguno se rompe háganmelo saber en los comentarios.
El día de hoy hay ningún programa de regalo, pero les comparto la página en la que estaré resolviendo problemas.
LINK: https://leetcode.com
Se registran y se ponen a programar si es de su agrado, suerte y ¡éxito!
PD: Agregué un nuevo menú, a ver qué tal nos va en este proceso, creo que por el momento agregaré los programas que vaya haciendo y eventualmente iré subiendo entradas sobre eso.
Efectivamente, soy un boomer conociendo nueva tecnología, pero es parte del trabajo de alguien que se dedica a las tecnologías de la información.
Hace tiempo cuando recién entraba al mundo de la computación conocí chatbots muy austeros que lograban impresionar a la gente de ese tiempo, unos 20 años atrás, como lo fue CleverBot, y hace unos 10 años más o menos llegó SimSimi.
Supongo que no es necesario el contexto, pero por si no lo sabías estas dos tecnologías por llamarlos de alguna manera, sí evolucionaron, "SÍ APRENDIERON". Hablo solo de los más comerciales, quizá existan más por ahí perdidos en el limbo, pero específicamente estos dos dieron mucho de qué hablar porque eran la sensación del momento, es decir, que pudieras "chatear" con alguien ya era una novedad, pero chatear con la misma computadora y te respondiera cual si fuera una persona resultaba muy atractivo para todo el mundo.
Hoy día, esa tecnología dejó un poco atrás los pañales, pues si en esos momentos los chats podían sostener una conversación ligeramente fluida y comprensible, ahora ChatGPT ha roto la barrera entre la coherencia y el razonamiento humano. Logra entender instrucciones complejas, logra realizar operaciones que quizá muchos imaginamos pero jamás imaginamos vivirlas.
Mi experiencia con esta IA específicamente ha sido pedirle código fuente, código que obviamente analizo y ejecuto para realizar alguna actividad específica, obviamente necesita entrenamiento, pero fuera de ello te da muchísimas opciones libres de derechos, libres de todo lo que puedas encontrar en internet y sobre todo una explicación lógica de por qué fue lo que hizo así.
No hay ningún motivo para pensar que esta tecnología en algún momento nos va a reemplazar, pues siempre ha ocurrido algo revolucionario que vuelve posible que el trabajo de cien hombres lo pueda realizar uno solo utilizando una máquina, pero esto siempre da pauta a nuevas oportunidades de trabajo, de actividades, de un montón de funciones.
Recomiendo 100% esta herramienta, puede ser útil para casi cualquier ámbito. Justo hace unos días un amigo le pidió que hiciera un invitación para un bautizo, pero no porque la necesitara, sino porque es estúpidamente inteligente la herramienta y todos los días aprende más y más.
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.
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.
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.
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.
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.
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.
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: 417 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 511 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 51113 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 5111317 21 17
Y otra vez:
21 < 17 = No, cambio: 17 21
FINALMENTE: Este es nuestro resultado: 4 511131717 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])
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.
¿Alguna vez has escuchado expresión regular o regex?, si no has escuchado ninguna de las dos, este es tu día de suerte, en realidad no tanto, pero sí lo escucharás un poco por aquí.
Resulta que en mi trabajo necesitaba validar que un número de serie tuviera ciertas características mamalonas para pudiera dejar pasar al siguiente proceso, así que estuve considerando todos los puntos:
Todas las letras de la serie deben ser mayúsculas.
No puede haber espacios ni caracteres especiales, únicamente números hexadecimales (Es decir del 0 al 9 y de la A a la F).
Todos los números de serie contienen 10 dígitos y ninguno puede comenzar con la letra F o el 0, yo no puse las reglas.
Bueno, al final no son tantas reglas como pensé, pero bueno, así fue mi pequeña situación en el trabajo, comencé a hacer las validaciones poniendo condiciones y lo primero que hice fue, tomar el dato que entraba (obviamente se debe enviar un número de serie), y puse un ToUpper() y listo, ya con eso solucioné la primera regla, ¡PERFECTO!
Pero la cosa no acabó ahí, ahora debía validar la segunda, pero como se me hizo ligeramente más complicada me salté a la tercera y puse unas condiciones if que me ayudaran a validar que el primer caracter, es decir, la primera posición (valor[0]) en la cadena leída; no fuera un CERO o una EFE, facilito también, pero a la hora de la verdad, estuve pensando muy tonta y estúpidamente que debía hacer un ciclo que comprobara cada uno de los 10 caracteres, no había problema, lo hacía y ya, pero luego de recordar mis días de universidad me di cuenta de que había una manera más sencilla y nada tardada de hacer eso.
Las Regex
O expresiones regulares, como les quieran llamar, son lo mismo, pero en programación así se les conoce más comúnmente, perfecto, ahora que recordé que con eso puedo hacer más sencillo el proceso, ¿ahora cómo carajo la implemento?, nada que StackOverflow no tenga.
Utilicé esta página: https://regex101.com
En ella puedes validar si tu expresión regular está correcta y las cadenas que permite, ahora solo falta el programita perrón que les mostrará lo que hice. Por cierto, la expresión regular que "diseñé" fue esta:
^([1-9A-E])([0-9A-F]{9})$
Pueden ignorar el primero y el último signo (^ y $), el símbolo de potencia (gorrito) representa el inicio de una expresión regular y el símbolo de dinero representa el final, no es necesario, simplemente es para marcar límites en caso de cualquier cosa.
Si alguna vez pensaste en recortar una palabra, obtener las primeras letras o las últimas de ella, te voy a confesar que existe una manera y no es tan complicada, ni siquiera debes realizar un ciclo o algo similar, simplemente debes invocar la función en cualquier lenguaje y listo.
Un substring o subcadena es una minicadena dentro de la cadena de caracteres completa, es decir, un fragmento de ella, voy a poner un ejemplo muy común en el recorte de palabras, y no, no es la barbaridad que estás pensando, es algo más sencillo, ¡los meses del año!
Los meses del año en muchos sitios aparecen de la siguiente manera: DÍA / MES /AÑO, sin embargo, en muchos sitios el año y el varían, los días se representan siempre de la misma manera, días del 1 al 31.
Mientras que los meses pueden ser del 1 al 12, de Enero hasta Diciembre o de Ene hasta Dic, de esa manera se ahorran importante espacio y no dejan de comunicar lo que debe ser.
¿Es realmente sencillo, no?, sí, sí lo es, y aquí abajo te muestro el código, vamos a mostrar todos los meses del año previamente introducidos en una lista de tipo string o en un arreglo y observa la magia.
¡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.
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:
¿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:
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.
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.
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:
Si no tienes conocimiento de base de datos no te preocupes, en esta entrada solamente me voy a desahogar un poco, en realidad no ocurrió algo tan malo pero cometí un error de estudiante, un error que cometerás cuando comiences a trabajar con bases de datos y es el siguiente:
DELETE [TABLE_NAME]
Seguramente has visto alguna sentencia así, ¿qué hay de raro en ella?, la sintaxis está correcta, aunque en algunos gestores he notado que también puedes ponerle un FROM como en la sentencia SELECT, pero bueno, ese no es el punto, ¿analizaste bien ahora sí?
UPDATE [TABLE_NAME] SET COLUMN1 = ''
¿Y ahora?, claro que no es difícil, basta con leer el título y notarás que falta la palabra WHERE, este error es demasiado cliché en el mundo de la programación, específicamente en el mundo de las bases de datos. En todas las instituciones donde utilizan bases de datos (actualmente TODAS), está prohibido que algún desarrollo pueda ejecutar una sentencia así, sin embargo, en el ambiente de pruebas o el servidor donde los programadores dan vida a sus Frankensteins esa debe ser una regla que se pueden saltar.
Esto me ocurrió a mí hace unos pocos días, resulta que por error no seleccioné la consulta completa, sino una mitad, desde un gestor visual de base de datos te permite ejecutar sentencias únicamente marcándolas con el mouse y dando clic en ejecutar. Obviamente no fue grave, sin embargo sí me metí en problemas porque tuve que solicitar un respaldo, tuve que justificar por qué quería ese respaldo y también tuve que preguntar a otras personas si sus pruebas se habían visto afectadas por borrar toda la información.
En fin, espero que esto jamás te ocurra en tu trabajo y si ocurre ponte pilas y desactiva la función autocommit del gestor, creo que eso me habría ahorra mucho tiempo, estrés y amistades, pero no lo sabía. Desactivar esa opción te permitirá dar un rollback a la consulta SQL que acabas de ejecutar para que los cambios no se reflejen en tu base de datos, espero que te haya sido de ayuda esta mini entrada sin nada de código pero con mucho conocimiento. Saludos, descarga código, pon peticiones en los comentarios, dale muchos clics a la publicidad de la página o dóname por paypal, MUCHAS GRACIAS.
Hoy mientras me encontraba en el trabajo revisando al monstruo (el sistema que hace funcionar la empresa), me di cuenta de que las condiciones eran una barbaridad (como diría mi jefecita). En fin, las condiciones eran demasiadas pero en ocasiones eran repetitivas y prácticamente abarcaban el 80% del bloque de código, entonces decidí unificar todas las condiciones parecidas que iba encontrando y se me ocurrió poner en google lo siguiente:
Cuando se trata de programación las búsquedas en inglés o en ruso son lo mejor (Obviamente el ruso es menos común). Así que si quieres buscar algo de programación y pretendes encontrarlo pronto debes buscarlo en ese idioma, la cantidad de información que existe es grandísima, si en español encuentras 1GB de información quizá en inglés encuentres hasta 1000 veces esa cantidad.
En fin, las condiciones trataban de validar que una variable de tipo string no estuviera vacía y tampoco tuviera un valor nulo (null), para ello se hacía la siguiente condición:
if(varString != null && varString != "")
Y la secuencia de validaciones era un sin fin de condiciones similares, a lo que en mi búsqueda encontré una súper función de la librería string que permite hacer esa validación con un solo método enviando una única ocasión la variable a validar y de respuesta te regresa un true o un false.
String.IsNullOrEmpty(variable)
Tan bonita que es la función que les muestro, esta función permite validar si una variable de tipo string es nula, está vacía o si únicamente contiene espacios en blanco.
Espero que te haya servido esta función, quizá en algún otro lenguaje exista o quizá no, pero al menos sabemos que en C# es posible explotarla de todas las maneras que consideremos necesaria, nos vemos en la próxima entrada.
En mis estadísticas aparece la pequeña cantidad de gente que visita mi blog, es una suma considerable pensando en que a veces duro hasta meses sin publicar nada, esto se debe a mi falta de tiempo, y que a veces prefiero simplemente descansar a seguir programando porque en ocasiones en el trabajo un simple error me toma mucho tiempo, eso me provoca estrés y fastidio de seguir programando y siempre es necesario tomarse un respiro sobre esas situaciones, aunque he llegado a pensar que mis problemas de día a día podría "documentarlos" en entradas, es decir, si me topo con una situación que requiera investigación, tiempo e incluso aprender alguna tecnología nueva.
Para compartir todo con las personas que están atentas a alguna publicación o para quienes solo entran buscando resolver sus dudas existenciales, muchas personas me agradecen y otras solo tomar el código y se van, pero está bien, la visita me ayuda muchísimo y sé que a ellos también, por lo tanto no es indispensable que se quedan conmigo todo el tiempo, yo sé que cada persona investigará y buscará por su cuenta siempre, así como yo lo hice en mis tiempos de estudiante y que sigo haciéndolo ahora que ya tengo un trabajo en esta rama.
Imagen para que tenga miniatura la entrada :)
Les agradezco muchísimo el apoyo, la página de "Links de descarga directos" habla por sí solo cuando observo la cantidad de visitas que tiene, y si tuviera una estadística de las veces que la gente ha descargado los programas que les regalo estoy totalmente seguro que me llevaría la sorpresa de que han sido descargados más de 1000 veces (en conjunto).
Seré un poco más activo en cuanto a estas situaciones y trataré de revivir mi página de Facebook que fue borrada por cuestiones de políticas mal implementadas, ni compartía spam, ni siquiera hice alusión a ganar dinero a que se suscribieran forzosamente al canal ni nada relacionado a ello, sin embargo el monopolio de esa red social reprime a mucha gente que como yo trata de que su trabajo crezca como debe de ser, pero como genero más para mí que para ellos no soy digno de usar la plataforma como publicidad para mi blog.
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.
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:
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.
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.
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.
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:
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.
¿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: