elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Cómo aprender a hacer programas que resuelvan dudas?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo aprender a hacer programas que resuelvan dudas?  (Leído 1,518 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
¿Cómo aprender a hacer programas que resuelvan dudas?
« en: 23 Agosto 2024, 01:37 am »

Para aprender a hacer videojuegos, lo que hice fue pensar cómo serian los más sencillos. Mi conclusión fue uno que se gane simplemente por mover el mouse 1 vez, otro que se gane por presionar alguna tecla 1 vez, etc, y estoy haciendo un programa que cuenta cosas así, así que se supone que estoy aprendiendo a hacer videojuegos.

Para aprender a hacer programas que resuelvan dudas, he pensado cuales son las dudas más sencillas de resolver (sin usar datoes externos, la idea es que el programa averigue experimentando). He pensado en por ejemplo adivinar un número del 1 al 10, obtener un número > 10, en la expresión ... < 9: true poner en ... un valor tal que la expresión resulte lo que diga tras el :, y puedo seguir complicando eso, pero siento que es inútil, sigue siendo un tipo de duda que parece poco útil resolver ¿cómo avanzo entonces? ¿qué camino me conviene seguir?

Si quiero hacer un juego como este:
https://www.youtube.com/watch?v=JPM4y71Jxio
2:00
supongo que debo:
1- Hacer un juego en 2d que no tenga plataformas (o sólo un suelo), ni objetos agarrables, etc, etc, lo más simple posible.
2- Agregar el "3d", o plataformas, u objetos agarrables, etc.
3- Desde la versión simple agregar algo distinto a lo que haya agregado.
4- Mezclar ambas cosas.
5- Lo mismo que el paso 3.
En fin, en teoría se va aprendiendo, y se va pareciendo cada vez más a lo que quiero (que no es una copia exacta de ese juego, pero recién cuando se parezca podría agregarle mis extras).

Si quiero un programa que averigue cómo mejorar el universo, la situación es un poco distinta porque, m, en el proceso quiero hacer programas que resuelvan dudas más sencillas, así que no es exactamente hacer un programa sencillo y agregarle cosas para que se parezca al objetivo final, porque tampoco imagino o comprendo tanto cómo sería, pero es como si quisiera hacer tipos de videojuego más sencillos que otros tipos, por ejemplo:
- Hago un 3 en línea, un 5 en línea, uno en que se pueda elegir el tamaño del tablero, cantidad de jugadores, condición de victoria...
- Hago un ajedrez en que sólo sólo se tenga 1 rey y 1 torre, agrego más piezas hasta que sea un ajedrez normal, le pongo opciones...
Y así sucesivamente, y todo eso me ayudaría a ver mejor cómo sería un juego mejor, posiblemete una mezcla de varios.
Si pudiera hacer un programa que averigue cómo aprovechar mejor el viento, otro cómo los alimentos crecerían mejor, y así sucesivamente, eso me ayudaría a ver mejor cómo sería el que averigue cómo mejorar al universo, además está muy relacionado.
Pero no veo cómo pasar de adivinar numeritos a eso ¿sería sobre adivinar en qué parte de la pantalla colocar ciertos objetos? ¿pero los efectos que tendría el viento en ellos según sus posiciones cómo los averigua? No veo claro por qué es tan complicado o diferente, si lo es. Es fácil saber si un número cumple ciertas condiciones o no, lo podemos decir, prueba números, mira si cumple las condiciones y ya, pero decir si un código que describa los efectos del viento cumple la condición de ser real, es más complicado, es complicado decir cuales son esas condiciones y para colmo generar códigos como ese que describan los efectos del viento es más dificil que simplemente generar números. Ya, pero debe haber cosas de dificultad intermedia. Repito: ¿Cual es el camino, considerando el orden de dificultad? Podría ser algo así:

¿Qué desafíos hay en los ¿? ? Puede haber más que esa cantidad, claro, esto no es una representación exacta.
O así:

Donde cada punto con color es un tipo de desafío, y puede haber más. Aquí yendo en espiral irían alternándose los tipos de desafíos y la dificultad iría aumentando. Tal vez es posible seguir un camino más directo, representado mediante los puntos suspensivos y como en la imagen anterior, no lo sé. ¿Cuales son esos desafíos?


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Re: ¿Cómo aprender a hacer programas que resuelvan dudas?
« Respuesta #1 en: 16 Diciembre 2024, 02:32 am »

Estoy retomando esto.

La duda más simple, digamos, la de decir un número mayor a otro X, conocido, tiene estas características:
- Sólo tiene 1 variable, X.
- La variable es de tipo número positivo entero.
- El candidato (el valor que se prueba como posible solución) no tiene partes, es sólo 1 variable de tipo número positivo entero.
- Sólo tiene 1 condición a cumplir.
- La condición es de tipo "candidato", "símbolo comparador", "valor". El candidato es el valor que se prueba como posible solución.
- Se puede resolver mediante 1 acción.

Pueden nombrarse más, pero no tiene mucho sentido hacerlo, me parece.

¿Cuales serían las siguientes dudas, un poquito más complicadas?

Si agregamos más variables como X, es decir, si por ejemplo hay varios números a superar, eso implica que la condición a cumplir se complicará ¿verdad? Por eso por ahora, prefiero aumentar o complicar otra cosa, algo que no implique complicar otras cosas.

En cuanto a complicar X:
Si lo hacemos negativo, la duda podría ser cual es su número contrario, pero eso implica complicar la condición a cumplir, ya no es comparar 2 números sino que se requiere cierto proceso. Otro ejemplo no se me ocurre, decir un número menor al negativo implicaría complicar al candidato pues ya no podría ser positivo.
Si a X la hacemos decimal, si es positivo, no habría diferencia. Si la duda fuese adivinar X, eso implica complicar al candidato y especialmente el modo conque varía, ya que no es lo mismo sumarle 1 que sumarle distintas cantidades decimales.
Si a X la hacemos un texto, ya no es algo que se pueda superar (si hablamos de longitud, eso es complicar la condición a cumplir). Si la duda fuese adivinar el texto, eso implica complicar al candidato y cómo varía.

Hacer que el candidato tenga partes parece que complica su aplicación, por ejemplo si la duda fuese hallar 2 números que al multiplicarse resulten X, entonces hay que multiplicarlos en vez de simplemente comparar uno.
Además no se me ocurren muchas dudas así, que dado un número haya que decir varios números que deban cumplir alguna condición. ¿Se les ocurre?

Que el candidato sea negativo, decimal o texto, complica el cómo varía. Además X es un positivo entero, así que:
Si el candidato es un negativo ¿para qué? No para superar a X. ¿Para ser superado? Sería demasiado fácil. Otros objetivos complican la condición, creo.
Si el candidato es un decimal ¿para qué? Podría ser porque la situación lo requiere, como si fuese un desafío. Bueno, pero no tiene mucho sentido.
Si el candidato es un texto, no podrá superar a un número. En longitud, ya se ha dicho, es otra cosa. Si el texto representa otro sistema de numeraciòn, puede ser, pero no me gustan ese tipo de dudas, de convertir gramos en moles, número en texto, etc xP

Agregar una condición parece implicar agregar una variable o complicar la complejidad de la condición. Por ejemplo, en vez de que el candidato (C) simplemente deba ser mayor a X, puede ser X < C < Y. Se agregó la variable Y. Si decimos que C deba ser un número primo, eso implica procesos, no una comparación simple.

El tipo de condición a cumplir, sí, por fin, parece poder complicarse sin que eso implique complicar otras cosas. Es lo que quiero complicar, por eso. Teníamos que C > X. Podemos cambiarlo, por ejemplo, a que C sea más largo que X. Esto me lleva a la pregunta de cuales son los procesos que se pueden aplicar en C, que resulten en un valor no azaroso. Ordenados por complejidad.

Dificultad 0: No hay proceso, C se usa como tal:
C > X, o C == X, etc, depende del contexto.

A continuación digo procesos y ejemplos de condición a cumplir, en definitiva son dudas o desafíos, quisiera que agreguen a la lista, y los ordenen por complejidad.
Ah, los procesos no deben implicar variables, más allá de X y C. Por ejemplo C+Y > X no sirve porque se agregó la variable Y.
Y los procesos los clasifico en 4 tipos para más claridad.

Procesos que sólo quitan caracteres (recuérdese que C es entero positivo, así que el caracter 0 no siempre se podría quitar):
- C quita el caracter nro C a X ¿qué valor debe tener C para que luego del proceso se cumpla que C+C < X?
- A X se le quitan caracteres, desde el inicial hasta X ¿qué valor debe tener C para que luego del proceso X sea un número más divisible que antes?
- A X se le quitan caracteres, desde el último hasta X ¿qué valor debe tener C para que luego del proceso X sea un número menos simétrico que antes?

Procesos que no cambian los caracteres, sólo los cambian de lugar:
- Desde el inicio de X se busca un caracter C, y se pone en el lugar C ¿qué valor debe tener C para que luego del proceso X sea mayor que antes?
- Desde el final de X se busca un caracter C, y se pone en el lugar C ¿qué valor debe tener C para que luego del proceso X sea menos ordenado que antes?
- El caracter nro C de X se pone en la posición C+C ¿qué valor debe tener C para que luego del proceso, la potenciación de los caracteres de X sea mayor que antes?

Procesos que sólo agregan caracteres:
- A X se le agrega C en la posición C ¿qué valor debe tener C para que luego del proceso X sea divisible entre C?
- El caracter C de X se agrega en su posición C ¿qué valor debe tener C para que luego del proceso X sea la suma de los caracteres del X original?
- X se agrega al final de X, C veces ¿qué valor de C logra que luego del proceso X sea lo más cercano posible a C*X (el original)?

Procesos matemáticos (que pueden hacer cambios de los otros tipos):
- X=X/C ¿qué valor debe tener C como mínimo para que luego del proceso se cumpla que C>X?
- X=X*C ¿qué valor debe tener C para que los caracteres del nuevo X sean todos iguales?
- X=C/X ¿qué valor debe tener C para que el nuevo X tenga C decimales?

Los procesos que impliquen más de un tipo de proceso, son más complejos que los simples, claro. Parece haber 2 aspectos aquí: El proceso y la condición a cumplir. ¿Se pueden separar? ¿se puede complicar el proceso sin complicar la condición? ¿y viceversa? Creo que me desvié, me suele pasar xP Ahora me siento algo perdido ¿sugerencias?

A ver, el código:
Código:
X = Un número entero positivo
C = 1
Repetir
   Si C > X
      // Solución hallada, fin
   sino
      C++

Supongamos que la mínima complicación que puede hacerse a eso, del tipo de complicación que mencioné, es:
Código:
X = Un número entero positivo
C = 1
Repetir
   Si C+C > X
      // Solución hallada, fin
   sino
      C++

Ahí el proceso está en la condición, pero puede ser algo anterior ¿o no?
Código:
BaseX = Un número entero positivo
C = 1
Repetir
   // Proceso que implica definir X usando BaseX y C.
   Si C > X
      // Solución hallada, fin
   sino
      C++

Supongo que me falta práctica, pero quiero practicar desde lo más sencillo a lo más complicado, así que necesito entender cual es el orden...

La condición puede ser X > BaseX por ejemplo. O SimetriaDeX > SimetriaDeBaseX. No son variables nuevas realmente, son propiedades de las otras. En fin ¿sugerencias? Se me acabaron los puntos para GPT hoy, mañana le pregunto.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines