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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 [71] 72
701  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 16 Julio 2018, 11:50 am
eso pasa por no leer....

no estás haciendo matemática normal... estás en Lógica binaria

esa expresión es equivalente a

A y (B o C) = (A y B) o (A y C)

que es lo mismo que vengo diciendo de más atrás
Ok, pero había leído los axiomas, con eso debería alcanzar ¿desde cuando un axioma requiere de un principio o de otro axioma para ser válido?

También hay otra cosa que para mí no encaja.

En wikipedia se dice que el + equivale a la "o" y que el * equivale a "y".

También dan 2 ejemplos de propiedad distributiva aplicable a lógica binaria.

El 1ero es:

Esa expresión equivale a:
A y (B o C) = A y B o A y C.

Lo que tú has dicho.

Pero la cuestión era el 2ndo ejemplo, y es el que has citado:


Y me dices "esa expresión equivale a A y (B o C) = (A y B) o (A y C)"

Me parece que en realidad "esa" equivale a:
A o (B y C) = (A o B) y (A o C)


Pero bueno, lo principal ya está ¿no? Más allá de tu supuesto despiste creo que ya entendí.

Citar
en este caso
Código:
V1<V2 y V1<V3 o V1<V4
V1<V2 y (V1<V3 o V1<V4)

la primera y la segunda expresión son diferentes... (lee mis paraffos anteriores... "o" separa, estás forzandolos a unirse con parentesis entonces cambiaste la logica
Claro, lo comenté:
En esta otra:
V1<V2 y V1<V3 o V1<V4
Tiene sentido porque lo que quiero hacer es producir todas las posibles expresiones y si a esa le pongo paréntesis en ciertos sitios el resultado puede cambiar. Una forma, y probablemente la única que tiene sentido para mí, sería así:
V1<V2 y (V1<V3 o V1<V4)

No es que no me haya dado cuenta.

Citar
sobre las posibilidades, para eso están las formulas estadísticas, revisa sobre formulas de permutaciones
Veré qué encuentro.

Citar
a tus otras 2 dudas ese es tu trabajo XD la parte complicada de ese codigo (que tampoco es tanto) es la algoritmia... y eso es lo que tu tienes que sentarte a hacer...
Tsk. Ya se me ocurrió más o menos una forma, pero si plantee el tema fue porque no tenía idea de cómo hacer eso, especialmente el filtro (cosa que aún no sé salvo probando distintos valores a ver si dan distintos resultados, lo cual es poco eficiente).
Una duda offtopic: ¿Qué otra parte es complicada en otros casos?
702  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 16 Julio 2018, 04:48 am
se han vuelto exacesivamente larga las respuesta me da pereza leer tanto XD

explica puntualmente si tienes dudas XD
Ok, por ahora sólo te diré 2 bastante simples se supone.

1-
Citar
creo que fallaste matematica de basica XD

2+(3*4) = 2+3*4

se usa parentesis para que la gente menos acostumbrada no se equivoqe debido al orden de operandos

pero tu erras al hacer una suma distributiva... eso no existe... en multiplicación existe porque la multiplicación es una "suma abreviada"...
En wikipedia dice:

A*(B+C) = A*B+A*C
Comprobemos.
2*(3+4) = 2*7 = 14
2*3+2*4 = 6+8 = 14
Correcto.

Ahora el que digo que está mal.

A+(B*C) = (A+B)*(A+C)
2+(3*4) = 2+12 = 14
(2+3)*(2+4) = 5*6 = 30


https://es.wikipedia.org/wiki/L%C3%B3gica_binaria#Axiomas

Dije que el ejemplo está mal, que debería ser:
A+(B*C) = A*B+A*C
4+(10*7) = 4+70 = 74
4*10+4*7 = 40+28 = 68
Bueno, tienes razón, me equivoqué, no es como digo, pero con los otros números me dió bien:
2+(3*4) = 2+12 = 14
2*3+2*4 = 6+8 = 14

Y eso no quita que el ejemplo de ellos esté mal.

Comprobación 2 del 1er caso:
5*(7+3) = 5*10 = 50
5*7+5*3 = 35+15 = 50

¿Cual es el problema? ¿pusieron un ejemplo que no existe o qué?


Duda 2:
Dada una expresión condicional así:
V1<V2
ponerle paréntesis es absurdo. Pero si se le quisiera poner, digamos que sólo hay una forma:
(V1<V2)

NOTA: Ponerlos así por ejemplo (V1)<V2 no me interesa, estoy hablando de las subcondiciones no de las variables.

En esta otra expresión:
V1<V2 y V1<V3
también es absurdo. Pero las posibilidades serían:
V1<V2 y (V1<V3)
(V1<V2 y V1<V3)
(V1<V2 y (V1<V3))
(V1<V2) y V1<V3
(V1<V2) y (V1<V3)
((V1<V2) y (V1<V3))

En esta otra:
V1<V2 y V1<V3 o V1<V4
Tiene sentido porque lo que quiero hacer es producir todas las posibles expresiones y si a esa le pongo paréntesis en ciertos sitios el resultado puede cambiar. Una forma, y probablemente la única que tiene sentido para mí, sería así:
V1<V2 y (V1<V3 o V1<V4)
Pero mi duda es cuales serían las posibilidades, independientemente de si son absurdas o no. Es como lo que hice en los casos anteriores, te muestro un poco:
V1<V2 y V1<V3 o (V1<V4)
V1<V2 y (V1<V3 o V1<V4)
V1<V2 y (V1<V3 o (V1<V4))
V1<V2 y (V1<V3) o V1<V4
V1<V2 y (V1<V3) o (V1<V4)
V1<V2 y ((V1<V3) o (V1<V4))
Y sigue y se complica.

Duda alternativa:
¿Cómo sería un pseudocódigo para que un programa produzca todas esas posibilidades?

Duda alternativa 2:
¿Cómo sería un pseudocódigo para que un programa produzca sólo las posibilidades que no sean repetidas (o absurdas)?
703  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 15 Julio 2018, 05:34 am
A veces llega algún usuario, al que resulta extremadamente difícil de ayudar, por varias razones...
En mi caso suele ocurrir cuando pido algo difícil de entender y/o resolver. Otros factores influyen pero creo que ese es bastante clave.

Citar
- La primera es porque tiene conocimientos excesivamente sesgados (de algunas cosas parece tener cierto conocimiento y de otras cosas simples, lagunas completas).
¿No es normal?

Citar
- Quieren que las cosas se ajusten a su modo de hacer, cuando lo inevitable que es que para algo existente sea 'el nuevo' el que deba adaptarse a lo que hay.
Esto es amplio, no sé a cuántas cosas te refieres. Creo que todos los involucrados deben tener cierta flexibilidad.

Citar
- Insisten en lo que creen entender, sin meditar las respuestas que se les dan... pasan por encima (si es que las leen), como aquel que pisa una alfombra que está ahí para ser pisada.
Ya fue explicado. Es que a uno algunos métodos resultan difíciles, entonces intenta 1ero lo que le parece más fácil.

Citar
El caso es que tú encajas en este tipo de usuarios
No sé el 2ndo punto pero los demás sí, supongo.

Citar
donde la dificultad, no radica en lo que se pide (que es relativamente fácil) si no en hacer entender lo que se dice...
Veamos...

"C1 or C2 and C3 or C4
No entiendo cómo se interpreta eso"

Sí, eso es fácil de resolver, gracias a uds lo aprendí.

Pero parece que lo plantee mal o algo porque El Benjo y alguien en otro foro me analizaron mis interpretaciones de eso, las cuales sí sabía cómo resolver, pero eso que pedí no lo analizaron xD

Lo planteo de otro modo:
¿Cómo se interpreta esto
C1 or C2 and C3 or C4?
¿como si fuese así
(C1 o C2) y (C3 o C4)?
¿o así C1 o (C2 y C3) o C4?
¿o así C1 o (C2 y (C3 o C4))?

Ya sé que la respuesta es C1 o (C2 y C3) o C4. Lo que estamos hablando es si decirme cómo se interpreta una o cada una de esas cosas resuelve mi duda o no. La respuesta es no.

Es como si dijera que no sé cómo se interpreta la palabra amigo. Por ejemplo:
A- De un ser, ser interesado en favorecerlo.
B- De un ser, ser que suele acompañarlo y ayudarlo.
C- De un ser A, ser dispuesto a sacrificar todo por el beneficio de A.
Y la gente me responda qué significa A, B y C. Yo no pregunté eso. ¿Se entiende?

Tampoco entiendo cuántas formas de interpretar hay, cómo verlas todas.
Esto también ya lo resolví. Aunque la duda de fondo sería dónde tiene sentido meter paréntesis, lo cual he planteado en un nuevo tema.
Ahora que pienso capaz que no me estoy explicando bien de nuevo... A ver. Una expresión puede cambiar su resultado si se meten paréntesis en ciertos lugares. ¿Cuales son las posibles alteraciones de los resultados y cómo se logran? ¿cómo puedo hacer que dada una expresión, un programa genere (como si hiciera una lista) todas las alteraciones posibles sin repetir?
Ejemplo:
Tenemos la expresión C1 or C2 && C3 or C4
Posibles paréntesis (en rojo puse los casos que no causan cambios, los casos que quiero que el programa evite generar):
1- (C1 or C2) && C3 or C4
2- (C1 or C2 && C3) or C4
3- C1 or (C2 && C3) or C4
4- C1 or (C2 && C3 or C4)
5- C1 or C2 && (C3 or C4)
6- ((C1 or C2) && C3) or C4


Y se puede seguir. Pero la verdad me entrevero bastante en cuales son los posibles lugares. Y la interpretación también me lleva un poco de tiempo. Por eso mismo, este proceso de:
1- Generar todas las alteraciones posibles por paréntesis.
2- Descartar las que no cambien el resultado.
lo quiero automatizar.

Cuando hice el tema pensaba: "Ya que esto es tan difícil, voy a ver si puedo evitar tener que usar paréntesis, capaz que puedo generar los cambios sin tener que usarlos."

Es como si quisiera generar textos al azar pero no supiera indicar a la computadora en qué casos "esta" lleva tilde. Tengo 2 opciones: Reviso las frases y los pongo manualmente, o intentar buscar una forma de poder generar frases que digan lo mismo pero sin usar esa palabra.

Bueno, me aburrí de analizar tanto mi texto, algunas cosas que pedí eran fáciles para uds, otras las expliqué mal parece, y más no me acuerdo ni analizaré.

Ah: El Benjo al final me dijo:
"Sigue las reglas del orden de evaluación de los operadores"
pero claro, yo no sabía de qué me estaba hablando, ni idea. Sí, tienes razón en eso. Pero era deducible que yo no lo sabía ¿no?

Citar
Es como dar las respuestas correctas a alguien que luego tomará tu texto, lo traducirá al chino, luego al hebreo, luego al latín luego al ruso, luego al inglés, luego al estonio, luego al portugués y al final de nuevo al español, para luego intentar digerirlo... se perderá todo el sentido tras tanta traducción, siempre sucede de un idioma a otro, luego cuantas más atraviese, más distancia existirá entre el original y la traducción final, de hecho puede que al final, no tenga nada que ver con el original y hasta haya dificultades para saber qué tema trataba.
Lo veo medio exagerado, pero cada uno tiene su forma de interpretar las cosas, sí.

Citar
Intentaré por última vez, arrojar un poco de luz en tu oscuridad y me conformaré solo con que intentes entenderlo, sin más pretensiones, que luego avances a partir de ahí o sigas en tu luna es cosa tuya...
Por lo que he leído vas a decirme cosas que ya había entendido. Parece en vano. Preferiría que me hubieras respondido mis nuevas dudas.

Citar
1 - Los paréntesis también son operadores (no los ignores).
Nunca los ignoré, pero hay casos en que sobran.

A que son operadores no había prestado atención.

Si me preguntabas cual era la estructura de una expresión condicional te decía:
Valor1 Comparador Valor2
Ej: A < B

Y de una más compleja:
Valor1 Comparador1 Valor2 Operador Valor3 Comparador2 Valor4
Ej: A < B && C <= D

Con el nuevo dato que me das tengo que usar un nombre más específico que "Operador" ¿cual me recomiendas?

Perdona si te cae mal lo que digo, pero esa info que me das y esta:
Citar
Igual que '+' es para una operación aritmética y 'and' para una operación lógica, un paréntesis aplica una operación de 'prioridad' (orden de ejecución).
Es una lástima que en prácticamente ningún lenguaje se describa así... como un operador de prioridad. Quizás porque todo parte de un cuerpo matemático, en el que se da por sentado que todo el mundo que pretende aprender algo de programación tiene al menos una base matemática mínima... o dicho de otro modo, que no se considera necesario explicarlo porque se da por sobreentendido.
No me cambia (salvo en mi forma de llamar a las cosas, como dije arriba) ¿qué se supone que debo hacer con eso que me dices? Que los paréntesis cambian el orden conque se aplican las cosas lo sabía desde niño, como casi cualquier otra persona. Si los paréntesis son "operadores" o no, no me sirve de mucho saberlo, me parece. Tú mismo dices que casi ningún lenguaje enseña eso. E intentas que yo, que no tengo estudios técnicos, sepa semejante cosa que deduzco la mayoría no sabe. Gracias pero no debiste molestarte en eso.
A mí los tecnicismos no me llaman mucho saberlos.

Citar
2 - Es bueno aprender (en realidad si uno estudió, recordar, porque es algo que puede olvidarse), el significado de las propiedades (conceptos mtemáticos): distributivas (que reparten), conmutativas, asociativas (que conecta, que lo une...).
No soy de forzarme a memorizar cosas, si las veo muchas veces me quedan y sino no.
Nunca lo aprendí, resolvía las ecuaciones como podía sin saber cómo se llamaban los métodos que usaba.

Más allá de los nombres parecen métodos para simplificar expresiones, pero el único que no es obvio es la distributiva.
https://es.wikipedia.org/wiki/L%C3%B3gica_binaria#Axiomas
Luego hay números negativos y otras cosas que tendría que ver qué son, pero en este momento no le veo mucho sentido a ponerme a leer eso raro.

No sé si me estás diciendo algo más que eso, perdona pero no te entiendo.
Citar
Una sencilla forma de entenderlo, es que en programación los operadores lógicos cumplen dichas funciones, y particularmente resultan mucho más fácil de entender
Si con funciones te refieres a propiedades, lo entiendo. Lo demás no sé, hablas de que los matemáticos usan términos difíciles, que concuerdo, y luego
Citar
en programación hay cierta licencia, gracias a que hay muchos programadores que son autodidactas.
Tampoco se puede caer en 'describo todo con mi propio lenguaje', porque entonces no nos entenderíamos. Habría tantas formas de llamar a algo como personas y eso tampoco puede ser... ambos extremos incurren en ineficacia.
Con lo cual también concuerdo. Pero nunca lo he negado ni nada así.

Citar
Citar
Si es tan simple como dices, entonces bárbaro, pero yo no sabía y antes de hacer la prueba menos.
De hecho había planteado este tema a un programador que conozco y me dijo que la interpretación dependía del lenguaje, que no había una respuesta única. Tú mismo también me preguntaste por mi lenguaje como si fuese relevante.
Para ayudarte a entender mejor los paréntesis
Nunca tuve problemas en interpretar paréntesis, sino el orden de prioridad de los or y and cuando no había paréntesis que me lo indicaran.

Lo que me confunde de los paréntesis es, como expliqué arriba, dada una expresión sin ellos, dónde es que meterlos causa alteración y dónde no. Pero lo puedo saber si lo pienso. Lo que no sé es la regla general, una que pueda poner en un programa para que me diga "aquí, acá o allá". Ya lo expliqué...
https://foro.elhacker.net/programacion_general/automatizar_complicamiento_de_duda_y_de_programa_que_intenta_resolverla-t485721.0.html

Te lo explico de otro modo.
Suponte que tengo la ecuación:
1+2*3+4*5 = 27
Y te digo: Quiero que el resultado sea 30 ¿cuántas formas hay de variarla para que el resultado sea ese? Muchos ¿no? Ejemplos:
A: 4+2*3+4*5 = 30
B: 1+3*3+4*5 = 30
etc

Bueno, lo que quiero con los paréntesis es algo similar. El programa produce una expresión sin ellos y yo quiero que produzca otras con paréntesis de modo que cambien el resultado de la 1era, es decir, que sea una expresión diferente.
Aunque a diferencia de la analogía, yo quiero que cada resultado pueda ser diferente, no quiero alteraciones que siempre terminen dando lo mismo que otras.

Así se producen todas las combinaciones de texto posibles, o casi:
A
B
C
...
Z
AA

Así se producen todas las expresiones condicionales posibles que no modifican variables:
V1 < V2
V1 <= V2
V1 == V2
V1 != V2
V2 < V1
V2 <= V1
(sep, los símbolos > y => no los uso).
V1 < V2 && V1 < V3
etc, etc
¡Pero llega un punto en que tiene sentido poner paréntesis porque así las expresiones generadas son distintas! ¿Pero exactamente dónde tiene sentido meterlos? Eso es lo que no entiendo. Alguna regla habrá. Dije
"Cuando implican algún "or" no implicado por otros, y hay "&&" fuera."
pero creo que no es correcto.


Citar
y espero que entonces (al menos), acabes de otorgarle la importancia que merece... y por lo tanto aplicarlo, en vez de querer matarlo (obviarlo).
Me parece que no has entendido.

Nunca dije que los paréntesis fuesen algo "malo", sólo que se me complicaba hacer un programa que generara expresiones con paréntesis que tuvieran razón de ser y entonces quería expresarlas de modo diferente.
Es como si quisiera hacer una máquina de hacer anillos usando basura pero como no sé producir diamantes con ella preguntara si hay algo similar (podría ser una laparita). No estoy diciendo que el diamante sea malo, sólo que no sé producirlo bien con las herramientas o materiales que tengo.

Además ya he dicho que los usaré porque sino las expresiones me quedan muy largas. Una posible alternativa sería ifs anidados pero estoy más bien decidido a usar paréntesis. La duda sigue siendo cómo el programa los puede poner. Más o menos ya expliqué esa duda.

Citar
¿Eres capaz en esta lista de determinar quienes son los hijos de quién?.[/b] Imposible...
De acuerdo.

Citar
Bueno, esta lista de nombres equivale a 'tus' expresiones, y la lista jeráquica a una expresión expresada con paréntesis
Afff, creo que te entendí, pero me estás explicando una cosa que ya sabía.

Me estás diciendo que esto:
V1 < V2 && (V1 < V3 or V2 == V4)
no se puede interpretar igual que esto
V1 < V2 && V1 < V3 or V2 == V4
que sería imposible saber que eso habría que interpretarlo como si la or fuese a aplicarse 1ero.

Si es eso, no te preocupes, lo sabía desde antes (aunque al no saber la forma correcta de interpretar lo último, sí creía que "se podía" como posibilidad, pero no que podía deducirse a ciencia cierta que se había querido decir eso. Es como que alguien escriba "VELA", quite la V, y me pregunte qué escribió, evidentemente puedo adivinar pero sería casualidad).

Lo que no sabía era cómo se interpretaba eso último, así sin paréntesis. Ya me dijeron que las && se aplican antes que las or, lo probé en mi lenguaje y es así, asunto resuelto.


Si me estás hablando de otra cosa no estoy de acuerdo con lo que dices (si es lo que pienso). Si te digo que una expresión es así
V1 < V2 && V1 < V3 or V2 == V4
sin paréntesis, es porque no los tiene, ni los requiere. Si los requiriera los pondría, no te preocupes.

No los quitaría por una cuestión estética o algo así, si los quito es sólo en casos en que sobran.

Citar
en cambio tus expresiones son solo listas...

Vamos a demostrarlo...

z= A + 3 * 5 - B + W / 5 AND T - 2 + X OR P OR H
Podemos obviar los operadores (nos quedamos con los identificadores y las constantes numéricas)y pongámoslos en columna:

Z
A
3
5
B
W
5
T
2
X
P
H

Como se ve es una lista plana, todos al mismo nivel, todos 'hijos' de un supuesto padre... como tus expresiones.
Yo jamás hice una cosa así ni plantee hacerla  :o

Citar
Espero que ahora veas claramente adonde lleva no usar paréntesis. Su uso cordina, da sentido específico...
Nunca lo puse en duda.

Citar
del mismo modo colocar un paréntesis en sitio equivocado cambia el sentido (y el resultado) de la expresión...
Puede suceder, sí, es parte de lo que quiero que haga mi programa a la hora de ponerlos en las expresiones que genere.
Por las dudas: No es que quiera que mi programa interprete mal las cosas o de forma random, es que quiero que invente expresiones que luego yo usaría en otro sitio. ¿Viste los videojuegos que generan mapas al azar? Bueno, esto sería similar, sólo que en vez de hacer mapas serían expresiones.

Citar
es adecuado que ciertos operandos estén entre paréntesis... si deben ejecutarse antes.
Siempre lo tuve claro.

Aunque en un caso como A<B or (A<C && C==D)
no los usaría. ¿Es un problema?
Se supone que el resultado es el mismo. Lo demás va en la forma de entender de cada uno, si le queda fácil o no. A mí los goto me resultan más fáciles que los do while en algunos casos.

Citar
Te decía en otro mensaje más arriba, que otra forma es separar una expresión en las subexpresiones que las componen, de modo que sean simples... pero eso da bastante trabajo y tampoco limita la posibilidad de error por confusión...
No me di cuenta. Voy a pensar algunas cosas y si no me funcionan y me acuerdo reviso eso.

Citar
Es decir desmontando cada expresión con su propios términos, no requiere paréntesis, pero puedes ver como crece la cantidad de expresiones.
Por eso decidí que el programa sí genere expresiones con paréntesis. Lo entendí por el tema de la propiedad distributiva.

Citar
La otra forma como ya he expresado varias veces es la notación polaca (no 'el polaco', ni 'en polaco', no es un idioma notación quiere decir "forma, sistema que se usa para expresar conceptos más o menos abstractos", el tipo que lo ideó era polaco, eso sí...).
xD
Vale.

Citar
Resumiendo, no puedes vivir sin paréntesis
Se podría pero sería extenso, como has dicho.

Citar
si te cuesta entender los paréntesis
Me cuesta entender cual es la regla que determina donde alteran las interpretaciones. Y si me la has dicho no la he entendido. Una regla es algo así:
"Cuando implican algún "or" no implicado por otros, y hay "&&" fuera."
pero creo que no es correcto.


Citar
por lo que alcanzo a entender de como te explicas es que tienes alguna función que 'genera' operandos y operadores (ignoro si al azar o si basado en algo específico)... entonces dado lo poco que he leído respcto de lo que intentas hacer, intuyo que tu programa también debe generar los paréntesis, porque como ya te señalé en el punto 1, y como me he extendido en explicaciones a lo largo de la respuesta, son operadores de prioridad, o si quieres jerárquicos (si se entiende como un árbol), cada paréntesis de apertura aumenta (profundiza) la jerarquía y cada cierre la reduce...
Tendré que traer un pseudocódigo para que se entienda  :-\
Pero sí, es como dices. El tema es evitar que los ponga en lugares donde no cambiarán los resultados.

Citar
en C por ejemplo, un comedero de cabeza para los principantes es olvidarse de terminas las expresiones convenientemente con ';'
Jajaja, en AS es igual.

Lo que me reventaba era Clipper... ni me acuerdo pero creo que ni siquiera te decía en qué línea estaba el problema. Una locura.

Citar
Espero que con los ejemplos explícitos que te he expuesto más arriba, puedas finalmente entender la utilidad de la prioridad
Eso lo entiendo, ciertos operadores cambian la prioridad... Que los paréntesis lo hacen lo tuve siempre claro, desde niño digo.
704  Foros Generales / Sugerencias y dudas sobre el Foro / ¿Spoiler? en: 14 Julio 2018, 07:06 am
Eso que oculta parte de los mensajes hasta que el lector les hace clic.

Sirve para ocultar cosas que puedan ser obvias para algunos.

O sea... me gustaría que en el foro pusieran eso.

Gracias.
705  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 13 Julio 2018, 01:48 am
Los paréntesis no son necesarios si y sólo si la expresión está en forma normal disyuntiva.

Para el que quiera saber más:
https://es.wikipedia.org/wiki/Forma_normal_disyuntiva
http://mathforum.org/library/drmath/view/51857.html

PD: cualquier fórmula en lógica proposicional se puede normalizar a forma normal disyuntiva.
¿Seguro que eso está relacionado con el tema? Además el 1er link dice ejemplos de FND que tienen paréntesis. Capaz que no entendí bien.

engel lex:
Citar
si quieres expresarlo sin parentesis te toca distribuir (respondiendo a esto)
Ok, gracias por recordármelo, no lo había conscientizado bien.

Considerando que se alarga tanto la expresión preferiría otra cosa. Aunque sea usar paréntesis.

Algo que me confunde es que el 2ndo ejemplo acá
https://es.wikipedia.org/wiki/L%C3%B3gica_binaria#Axiomas
de Propiedad distributiva, tiene un paréntesis y la transformación también, pero creo que el estado inicial no los requiere xD
2+(3*4) = 2+3*4
A<B || (C<D && E<F) = A<B || C<D && E<F

¿?

Además, me da 14, pero si hago (2+3)*(2+4) me da 30!!!
 :o :o

Creo que se confundieron :D es (2*3)+(2*4), y sigue siendo innecesario usar los paréntesis.

- En primer lugar tienes dificultad para entender... lo que se te dice.
No todo pero varias cosas sí.

Citar
Pasas de largo por las soluciones, como esperando una receta mágica (que no existe).
No me di cuenta.
La de las propiedades distributivas sí, creo que no había entendido el alcance o utilidad de eso, pero si miras más arriba verás que tenía una duda (que de hecho ya había planteado), por lo cual como solución me pareció dudosa.
Otra cosa que recuerdo me saltee es tu función de año bisiesto porque no sé qué es eso y además no suelo usar funciones con parámetros. Pensé que podía hacer una solución más sencilla. ¿No existe? Aparentemente sí, distribuir, pero como dije la expresión queda muy larga (o al menos me imagino que se puede alargar mucho si inicialmente ya era larga) así que no me gusta. Mira mi nuevo tema para más info.

EDIT: La notación polaca lo había olvidado. Perdona, tengo problemas de atención o estoy enfocado en varias cosas a la vez, o sea que no me concentro del todo en una en concreto, no sé. Lo voy a pensar si no veo algo mejor. No lo hago ahora mismo porque me parece un asunto difícil.

Citar
- En segundo lugar 'tu lenguaje' al margen de calificarlo, ni siquiera lo conoces a fondo aún 'siendo tu favorito' como dices.
Eso no es tanto problema porque se va averiguando según se necesite.
Una cosa que me descolocó en su momento es el típico problema de la inexactitud al trabajar con números muy pequeños, decimales, y si tiene ese problema puede tener otros (de hecho, he encontrado, creo), pero obviamente no me voy a poner a crear mi propio lenguaje desde 0.
Hay muchas funciones y cosas que no conozco, mientras no me parezcan necesarias no las voy a intentar aprender o ver cómo funcionan...

Citar
Cualquier lenguaje por miserable que sea, admitirá paréntesis para resolver la precedencia de operadores (debe importarte nada que un operador sea 'or', 'and' ó '+', '/', o cualquier otro... un operador es un operador sea del tipo que sea y a tí debe bastarte con saber que como tal cualquier operador tiene un valor de precedencia (prioridad en ser resuelto cuando no tiene paréntesis que lo delimite)
Si es tan simple como dices, entonces bárbaro, pero yo no sabía y antes de hacer la prueba menos.
De hecho había planteado este tema a un programador que conozco y me dijo que la interpretación dependía del lenguaje, que no había una respuesta única. Tú mismo también me preguntaste por mi lenguaje como si fuese relevante.

Citar
Esto quiere decir que siempre que tu pongas una expresión ordenada por precedencia, tampoco necesitarás usar paréntesis... pero esa forma la podrás usar en determinadas ocasiones, en otras ocasiones resultará forzado, poco natural y por tanto difícil de leer  y/o erscribir... aparte dle tiempo perdido en ello (solo por evitar colocar unos paréntesis).
El tema es que yo quisiera que los coloque un programa (en un sitio al azar pero sólo en tanto cambien el resultado), y sino, si no apunto tan arriba, es que yo no sé en cuántos lugares posibles se pueden poner, dada una expresión. Obviamente dependerá de la expresión. En mi nuevo tema puse info de eso.
Pensé que crear expresiones sin paréntesis sería más sencillo que con ellos. Estoy hablando de crearlas con un programa.

Citar
Pero no entiendo a que viene tanto problema con los paréntesis...
Bueno, si no lo había explicado en todo este tema, ahora sí lo acabo de hacer. Y sino, mira mi nuevo tema.

Citar
que un lenguaje no admita directamente la notación polaca no es problema, precisamente para eso como programador uno programa el algoritmo que precise al problema que surja.
Lo pensaré si no veo una solución más sencilla.

Citar
La mayoría de lenguajes carecen de interpretación para dicha notación, pero el compilador de todos y cada uno de ellos, acaba teniendo una implementación del algortimo para convertir la expresiones que el programador escribe en el lenguaje, para pasarlo a notación polaca...
Yo creo que tendría que hacer lo inverso: Que el programa genere expresiones en polaco y luego las transforme a normal sin paréntesis. Porque el problema que quería evitar es que las generadas tengan paréntesis, porque no sé cómo hacer eso bien, ya te lo expliqué. Pero si las genera en polaco yo no las puedo copiar y pegar en un código, y es para eso para que las quiero. Me dijiste que transformar expresiones normales a polaco era difícil. Yo tendría que hacer lo inverso, cosa que supongo también es difícil, y más si quería evitar que fuesen con paréntesis, que encima no sabía si era posible (me hablaste de reordenar, pero eso no siempre sirve). Ahora veo que sin paréntesis se alarga demasiado así que sin paréntesis no me serviría, pero en fin, esa solución que me das me parece difícil de aplicar, aunque la pensaré si no veo algo más simple.

Citar
Es que insisito... para qué necesitas NO PONER paréntesis, cuando poniéndolos solo de un vistazo queda perfectamente claro y ordenado, sin importar lo compleja que sea una expresión????.

Es que tu te empeñas en no usar paréntesis por simple cabezonería... es como pretender prescindir de barcos o aviones y querer cruzar el océano a nado, y tu preguntas si puedes cruzarlo sin morir en el intento... maneras hay, pero ya son ganas de morir en el intento. Cuando en barco o avión el trayecto es seguro y rápido.
Porque quiero que las expresiones las genere un programa. Hacer que genere Variable1 Comparador1 Variable2 Operador1 y así todo lo que quiera, es fácil, pero si quisiera hacer que ponga paréntesis por ahí no tengo mucha idea. Acordate además que cuando inicié este tema ni siquiera sabía eso del orden de procedencia o sea que para mí era un lío mayor que ahora.

No soy consciente de tanto en el tema pero me imagino que puede haber expresiones que tengan paréntesis dentro del otro, y hablo de que tenga sentido que los tengan, no porque sí. Entonces, yo tenía 2 opciones:
A- Entender en qué sitios tiene sentido que haya paréntesis (o sea no sólo detectar si en caso de haberlos tienen sentido, sino mirar una expresión que no los tenga y poder decir "tienen sentido aquí, o aquí, o aquí y aquí, etc"), y en lo posible indicárselo al programa que genere las expresiones.
B- Evitar que las expresiones generadas tengan paréntesis.

B parece más simple ¿cierto? Sólo tenía que confirmar si toda expresión se podía convertir sin problema a una sin paréntesis.

Digamos que construir barcos o aviones me pareció más difícil que nadar :laugh:
A veces es así, por ejemplo si programar fuese tan fácil te podrías crear un programador que haga todos los programas que quieras en vez de hacerlos tú mismo. Pero supongo que no puedes hacerlo. Ergo te pones a hacer todos los programas. Es lo normal.

Citar
Vaya hombre... me he hecho un lío... buen chiste.... a estas horas, un poco de humor no viene mal.
Lo decía por:

"los operadores aparecen a ambos lados y el operador en medio."

"Los operadores van delante, los operadores detrás."

Citar
XOR no es más complejo que OR ni AND, sino a su mismo nivel...

Tabla de verdad de XOR
----------------------------
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

En resumen es TRUE si solo una de ellas es TRUE. Si se aplica a más de 2 operandos es TRUE, si el número de evaluaciones TRUE es impar, FALSE si son pares...

1 xor 1 xor 1 xor 1 = 0   (4 unos, son pares luego = FALSE)
1 xor 1 xor 1 xor 0 = 1   ( 3 unos, son impares luego es = TRUE)

XOR te puede ahorrar muchas comparaciones...  
Me parece más difícil de entender que los otros operadores, pero con lo último que dices tendré que ver.

Citar
A no ser que vivas en Marte, y las teclas de paréntesis se hayan fastidiado y no tengas posibilidades de arreglarlo...
Jaja, de hecho donde vivo estamos en invierno y cuando tengo el teclado bajo las frazadas poner los paréntesis es bastante tedioso xD
Es en serio, al no ver las teclas se me hace complicado (shift+...), pero no es por esto que planteé la duda.


De ese fragmento de PDF se podría deducir que se pueden usar en ifs para alterar el orden de && y ||, pero de hecho no da ejemplos de ello.
706  Programación / Programación General / Re: Ayuda para crear un bot en: 12 Julio 2018, 10:19 am
EL problema aqui es que lo unico que he logrado avanzar es en que el programa reconozca las imagenes del juego tales como enemigos y objetos para recojer pero mas nada.
Lo que necesito es un ejemplo de como interactuar con esa informacion.
Sigo sin entender bien de qué hablas, quizá ignoro demasiado del tema.

Me imagino por ejemplo que si el enemigo está a la derecha y tu bot quiere escapar de él entonces debería moverse hacia la izquierda esquivando obstáculos, ideando un trayecto para no quedar en un hueco, aunque eso último es un tanto difícil de lograr, por ejemplo en Age of Empires 2 no lo lograron del todo...
También deberías considerar varios enemigos a la vez porque si hay uno en la izquierda y otro en la derecha entonces le convendrá moverse hacia abajo o arriba.

Lo de agarrar objetos es cosa más bien tuya, los eliminas de la pantalla y de la lista de cosas en la pantalla. Y los agregas en la lista de objetos de tu bot.

Citar
Exacto pero no logro encajar esos datos con instrucciones.( ni me imagino siquiera como)
Creo que haciendo muchas funciones. Función huir, función atacar, función buscar enemigo, acercarse a objeto...

Adermás, olvido esto pero creo que se puede, en vez de usar ifs, hacer llamadas a funciones variables. Por ejemplo: Llamar función "Peligro"+poderenemigo. Creo que requiere eval, no sé si tu lenguaje lo permite. Lo que logras con eso es que se active Peligro1, o Peligro2, etc, según el caso. Puedes sumar cosas en la llamada de modo que abarques todas las situaciones posibles que te interesen. Tenés que ver qué cosas te interesan y si puedes manifestarlas con un número o palabra, en lo posible sin usar ifs.
Un ejemplo:
BotfunciónBLFFFR
Significa:
El enemigo nro1 está cerca de tu Base, y cerca de ti, en Left.
El enemigo nro2 está Far de tu base, y Far de ti.
El enemigo nro3 está Far de tu base, y carca de ti, en Right.
Con eso armas la función como quieras, o sea pones en ella qué quieres que se haga. Y así con cada función posible. Puedes usar subfunciones para evitar repetir cosas.

No sé hasta qué punto es un buen método, pero a falta de otras respuestas...

Citar
En eso pense porque la idea ( o lo que creo) es que el programa tenga la menor asistencia posible.
¿A qué llamas asistencia? ¿que no requiera constantes instrucciones de ti como jugador?

Citar
Los humanos no somos perfectos ni hacemos las cosas exactamente es por eso que deberia tener comportamientos erráticos espontáneos  que simulen a un ser humano.
Entonces en tu caso una IA que aprenda me parece ultra complicada, no puedo ayudarte, nunca pensé ni me interesa hacer una que cometa "errores a propósito" xD
Ponele random, o sea, posibilidad de hacer ciertas tonterías en ciertos casos.


A ver, me imagino un juego de este estilo:
https://www.youtube.com/watch?v=MO9Buh0B494
Capaz que en tu caso se pueden mover en diagonal o se ve en diagonal (tipo Final Fantasy Tactics), aunque te recomiendo este
https://www.youtube.com/watch?v=PJ2KJc61WZ4

¿Lograste que tu tanque se mueva según lo indiques?
¿que no pueda pasar por obstáculos?
¿que agarre los ítems y tengan efecto o se agreguen a la lista de usables, y realmente sean usables y tengan efecto?
¿que dispare cuando lo indiques?
¿que el disparo rompa cosas?
------------------
¿aparecen tanques enemigos?
¿se mueven?
¿chocan con obstáculos?
¿te buscan?
¿te disparan?
¿sus disparos te matan?
¿tú los matas con tus disparos?
----------------
¿tu bot se mueve en busca de enemigos?
¿les dispara?
¿sus disparos los matan?
¿lo pueden matar?
¿huye?
¿te ayuda si ve que estás en peligro?
¿busca ítems?
¿tienen efecto?

¿algo más?
707  Programación / Programación General / Automatizar complicamiento de duda y de programa que intenta resolverla. en: 12 Julio 2018, 09:06 am
¿Este foro no permite spoilers?
En la sección mensajes, de ayuda, no encontré. Son útiles para ocultar cosas que puedan ser redundantes o irrelevantes para algunos...

En otro tema yo plantee parte de un método para lograr lo que dice el título, pero como dicho método me resulta tan complicado voy a plantear el asunto desde 0 a ver si a uds se les ocurre algún método que me sea más fácil.

Estos son probablemente la duda más simple y el programa más simple que intenta resolverla:
Código:
Candidato = 0
Hacer
   Candidato++
Mientras Candidato < 5
Mostrar "Una solución es " + Candidato
Por si no queda claro, la duda allí es qué número entero es > 4. Y  ese programa es una búsqueda por fuerza bruta. Aquí tienen info:
https://es.wikipedia.org/wiki/B%C3%BAsqueda_de_fuerza_bruta

¿Y por qué el programa no es
Candidato = 5
?
Porque ese no implica un intento de resolver la duda, o búsqueda de solución, es simplemente la solución. La idea es formar un método para que un programa busque respuestas que nosotros no sepamos (o como si no las supiéramos, si estamos practicando hacer estos programas), no darle las soluciones.
Más o menos automatizar nuestra forma de buscar respuestas.

¿Y cómo se puede complicar la duda y al programa?
Por lo que pensé sería haciendo cualquiera de estas cosas:
- Aumentar cantidad de variables de la situación inicial. O complicarlas.
- Aumentar cantidad de candidatos. O...
- Complicar método conque varía algún candidato.
- Aumentar cantidad de efectos involuntarios (EFI). O complicarlos.
- Aumentar cantidad de condiciones en que algún EFI se aplique o que debe cumplir para que se aplique. O...
- Aumentar cantidad de efectos de algún candidato. O....
- Aumentar cantidad de condiciones en que algún candidato sea aplicable o que debe cumplir para que lo sea. O...
- Aumentar cantidad de condiciones en que un estado responde la duda (siempre y cuando no sean tantas), o que debe cumplir para resolverla. O...
- Aumentar cantidad de soluciones que se quiere.

Quizá hay más, quizá algunas que dije sobran. Si quieren las explico, pero la que más me interesa en este momento es la que puse en negrita (y nótese que dejé la "O..." fuera) y parece que da para rato, así que empecemos por esa y luego vemos.

Significa, dada una condición, ponerle otras alternativas (or) o agregarle otras (and).

En el ejemplo tenemos
Candidato < 5
Como la duda y las cosas en él son tan simples, no se puede hacer mucho. El programa de complicamiento debería ser capaz de determinar qué se puede y qué no, pero no me voy a complicar con eso aún. Simplemente vamos a poner otras complicaciones antes de continuar. Por ejemplo agregar un candidato. Vamos a llamarles K1 y K2. Nos queda:
Código:
K1 = 0
K2 = 0
Hacer
   K1++
   Si K1==10
      K1 = 0
      K2++
   fin del si
Mientras K1 < 5
Mostrar "Una solución es " + K1 + " y " + K2
Nótese que también se complicó el método de variar los candidatos. Y quizá algo más.

Idealmente, la cosa sería pegar ese código en el programa complicador y que le agregue condiciones donde corresponde. Pero no intento algo tan ideal aún. Me sirve que genere X condiciones al azar (en este caso X=2), las copio, y las pongo en ese código sustituyendo las que había.

Cosas así
4 < K1 && K1 == K2 || 9 < K2
sé generar.

¿Entonces cual es mi problema?
- No sé exactamente cuando/dónde tiene sentido poner paréntesis.
- No sé cómo evitar redundancias al agregar condiciones.


Creo que eso, en ese orden de importancia.

Para condiciones and me dijeron un método para evitar contradicciones (supongo que también sirve para condiciones or... ¿its ok?), aunque aún no lo apliqué del todo, tengo que ver. Consiste en darle un valor a cada posible variable y elegir el operador en base a una comparación entre ellas. O sea, el operador no se elige al azar. Suena bien, tan sencillo que me aburre hacerlo.
Intenté que las "variables" pudieran ser: Candidatos, Variables o Fijas.
Las variables son algo que usaría en el futuro, se refieren a lo que describe la situación, por ejemplo dónde están las fichas en el tablero. Las fijas son valores fijos. O sea, cuando creo las condiciones pueden ser por ejemplo K1 < K2 o puede ser K1 < F1, siendo F1 un número que permanecerá fijo todo el programa de búsqueda.
Toda condición debe tener una K o V.
El siguiente código es un poco viejo así que en vez de K digo C.
Código:
X = 0;
Lets = "CVF";
Cs = 0;
Vs = 0;
Fs = 0;
// Elegible.
Vars = 10;
//
CVs = 0;
do {
X = X+1;
LetX = Lets.charAt(random(3));
set (LetX+"s", eval(LetX+"s")+1);
set ("Var"+X, LetX + eval(LetX+"s"));
set (eval("Var"+X), random(Vars+1));
if ( LetX != "F" ) {
CVs = CVs+1;
set ("CVs"+CVs, LetX + eval(LetX+"s"));
}
} while (X<Vars);
if ( CVs == 0 ) {
Fs = Fs-1;
LetX = Lets.charAt(random(2));
set (LetX+"s", eval(LetX+"s")+1);
set ("Var"+X, LetX + eval(LetX+"s"));
set (eval("Var"+X), random(Vars+1));
CVs = CVs+1;
set ("CVs"+X, LetX + eval(LetX+"s"));
}
Me genera, por ejemplo, esto:
Citar
 Variable _level0.X = 10
  Variable _level0.Lets = "CVF"
  Variable _level0.Cs = 3
  Variable _level0.Vs = 5
  Variable _level0.Fs = 2
  Variable _level0.Vars = 10
  Variable _level0.CVs = 8
  Variable _level0.LetX = "V"
  Variable _level0.Var1 = "C1"
  Variable _level0.C1 = 7
  Variable _level0.CVs1 = "C1"
  Variable _level0.Var2 = "V1"
  Variable _level0.V1 = 8
  Variable _level0.CVs2 = "V1"
  Variable _level0.Var3 = "C2"
  Variable _level0.C2 = 0
  Variable _level0.CVs3 = "C2"
  Variable _level0.Var4 = "V2"
  Variable _level0.V2 = 7
  Variable _level0.CVs4 = "V2"
  Variable _level0.Var5 = "V3"
  Variable _level0.V3 = 3
  Variable _level0.CVs5 = "V3"
  Variable _level0.Var6 = "F1"
  Variable _level0.F1 = 6
  Variable _level0.Var7 = "V4"
  Variable _level0.V4 = 4
  Variable _level0.CVs6 = "V4"
  Variable _level0.Var8 = "F2"
  Variable _level0.F2 = 9
  Variable _level0.Var9 = "C3"
  Variable _level0.C3 = 0
  Variable _level0.CVs7 = "C3"
  Variable _level0.Var10 = "V5"
  Variable _level0.V5 = 4
  Variable _level0.CVs8 = "V5"
Siempre genera alguna variable V o C, de hecho genera 2 listas: Vars y CVs, lo que facilitaría que las condiciones siempre tengan alguna C o V. Me faltaría la parte de elegir 2 variables, el operador, y repetir eso cierta cantidad de veces. Más tarde lo hago.

----------------------------------------------------------------------------------------

- No sé exactamente cuando/dónde tiene sentido poner paréntesis.

Pensé:
Cuando implican algún "||" no implicado por otros, y hay "&&" fuera.
pero creo que no es correcto.


Con que tenga sentido me refiero a que pueda ponerse (lo cual cambiaría la condición, sí, es la idea), no que deba ponerse.

Por ejemplo acá tiene sentido:
K1 < K2 && K2 < K3 || K3 < K4
así:
K1 < K2 && (K2 < K3 || K3 < K4)

De hecho sólo estoy pensando, pero yo quisiera que los ponga el programa, no sé bien cómo. Considerando que tendría variables Op1, Op2, etc (operadores), sería cuestión de ver si alguna es "||" y... el resto no sé bien.


Quizá sea posible evitar este asunto si en vez de paréntesis pusiera ifs anidados o alguna otra cosa. De hecho, yo suelo usar más ifs y goto que whiles, aunque también se podría usar whiles anidados creo...

Escucho ideas.

----------------------------------------------------------------------------------------

- No sé cómo evitar redundancias al agregar condiciones.

Básicamente, mi problema es que como las variables son elegidas al azar pueden ocurrir cosas como:
K1 < K2 && K2 < K3 || K1 < K3
lo cual resulta redundante porque... si se cumple la última se cumplen las demás, no tiene sentido decirlas.

No todas las redundancias aparecen por una condición or, ejemplo:
K1 < K2 && K2 < K3 && K1 < K3
Parece lo mismo pero no sé si siempre es tan así.

Cosas como:
K1 == K1
creo que sé evitarlas.


Gracias.
708  Programación / Programación General / Re: Ayuda para crear un bot en: 7 Julio 2018, 18:09 pm
No sé mucho del tema, pero me da la impresión de que quien debe dar información eres tú.

En 1er lugar, cuando leí bot, pensé que te referías a un programa que haga cosas por Internet. Pero no se me pasó por la cabeza que pudiera ser para un videojuego. Según he visto usaste bien la palabra, pero si se trata de algo así entonces lo asocio con una inteligencia artificial. No sé los demás, pero capaz que entraron al tema pensando que hablabas de un "chateador" y al ver que era otra cosa no pudieron ayudarte, y los que sí pueden no entraron al tema porque no sabían que hablabas de algo que no es "chatear". Es una hipótesis...

Por último, hablas de matar en un mapa ¿pero cuántas dimensiones tiene? ¿tiene obstáculos? ¿plataformas? ¿cómo mata? ¿hablas de un shooter o más bien algo como Warcraft 3?

También uno se podría preguntar como qué humano, o cómo es un humano, pero digamos que es demasiado. Yo te recomendaría, si otro no dice algo, que pienses en "copiarte", o sea, crear una copia de ti, pensar qué harías tú.

En caso de videojuego estilo Warcraft, por ejemplo, si uno de tus soldados se encuentra con algún enemigo, lejos de tu base:
Código:
¿Crees que le ganas?
   S: Machacarlo.
   N: ¿Crees que conoce donde está tu base?
      S: ¿Crees que va distraídamente a ella?
         S: Machacarlo.
         N: ¿Crees que conviene machacarlos en tu base?
            S: ¿Tu soldado tiene menos rango que el enemigo?
               S: ¿Crees conveniente que tu soldado corra a la base?
                  S: Que corra a tu base.
                  N: Machacar al enemigo.
                  Nota: Otra opción sería alejarse, pero si el enemigo lo persigue entonces probablemente lo hiera y se aleje de la base.
               N: Mientras tenga rango y resistencia suficiente, atacar. Si se acercan, acercarte a tu base.
            N: ¿Tu soldado tiene menos rango que los enemigos?
               S: Mientras lo estén persiguiendo, huir al punto más alejado de ellos y las bases.
               N: Mientras tenga rango y resistencia suficiente, atacarlos. Si se acercan, acercarte al punto más alejado de ellos y las bases.
      N: ¿Crees que va distraídamente a ella?
         S: Machacarlo.
Bueno, me cansé, pero la idea es atacar, acercarte a tu base o alejarse, según la ocasión. Parece que es más fácil hacerlo a la inversa:

Si ves un enemigo lejos de tu base:

Atacar si:
- Supones que vencerías a tu enemigo.
- No tiene el rango suficiente como para contraatacar.
- No conoce la ubicación de tu base, se dirige a ella, y tú tienes la resistencia suficiente como para atacar, que te ataque, comenzar a huir (lejos de tu base) y que te persiga.
- Conoce la ubicación de tu base, no se dirige a ella, crees conveniente atacarlo cerca de ella, y tienes la resistencia suficiente como para atacarlo, que te ataque, comenzar a huir (hacia tu base) y que te persiga.

Acercarte a tu base si:
- Conoce su ubicación, crees conveniente atacarlo cerca de ella, y te está persiguiendo.

Alejarte de tu y del enemigo base si:
- No conoce su ubicación y te está persiguiendo.

También depende del tipo de soldado.

Tendrías que hacer esto para más casos, por ejemplo si un enemigo llega a tu base. Aunque en ese caso parece obvio qué hacer.

Lo ideal sería que la IA pudiera aprender, pero es muy difícil así como para empezar.


Por otro lado, yo te intenté responder sobre la estrategia, pero codificar cómo aplicar las acciones también es difícil, quizá más. Pero para eso se necesita tener un poco del código del juego, si no das más datos menos puedo ayudarte.

Suerte y si hallas una solución publícala en lo posible!
709  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 7 Julio 2018, 07:22 am
Acabo de probar esto
Código:
if (0<1 && 0<2 && 9<3 or 8<4 or 0<5 && 8<6 && 9<7 or 9<8) {
V = 0;
}
Y la condición no se cumple. ¿Conclusiones de cómo se interpreta? Escucho.

NOTA: Puse números en vez de variables porque así me es más fácil modificarlos y ver si se cumplen o no. Está claro que jamás voy a poner subcondiciones que dan siempre el mismo resultado xD

Podemos resumir cada subcondición mediante un número fácilmente porque lo que está a la derecha es como un identificador:
0<1: subcondición nro 1
0<2: subcondición nro 2
etc

Si se cumplen la 1, 2 y 3, entonces la condición se cumple. Ya lo comprobé, les puse 0 delante a las 3 y 9 delante en las demás, o sea, sólo se cumplieron esas 3 y con eso ya alcanzó.

Es como si se hiciera esto:
(0<1 && 0<2 && 0<3) or (8<4 or 0<5 && 8<6 && 9<7 or 9<8)

Si se cumple la 4. se cumple la condición, ya está confirmado.

Es así:
(0<1 && 0<2 && 9<3) or (0<4) or (0<5 && 8<6 && 9<7 or 9<8)

Si se cumple la 5, 6 y 7, se cumple la condición. Si falla una y las demás, no se cumple.

(0<1 && 0<2 && 9<3) or (0<4) or (0<5 && 8<6 && 9<7) or (9<8)

Listo...

En conclusión, es como si las or marcaran el final de un paréntesis y el inicio de otro.

Todo esto puede parecer muy obvio, pero yo no sabía si se interpretaba así:
(0<1 && 0<2) && (9<3 or 8<4 or 0<5) && (8<6 && (9<7 or 9<8)
o de alguna de las no sé cuántas formas posibles.


Ahora la siguiente pregunta que había planteado.

Cosas como esta:
(9<1 or 0<2) && (9<3 or 0<4)
¿Se pueden expresar sin paréntesis, en una condición, tal como se hace en el lenguaje que he mostrado
(porque las notaciones polacas que me comentaron son interesantes, pero en el Action Script que uso no creo que sean válidas)?

No se me ocurre.

Lo que se podría hacer es usar ifs anidados (me lo habían comentado pero no me dieron detalles, recién ahora lo entiendo):
Código:
if (9<1 or 0<2) {
if (9<3 or 0<4) {
}
}

Creo que mis dudas en este sentido están resueltas.

Gracias.

no se si me desvío o te ayudo pero vamos...
Yo diría que hiciste ambas cosas xD

Creo que te desviaste porque creo que me hablaste de cómo interpretar cosas que tienen paréntesis, lo cual yo ya sé, yo lo que quería era entender cómo se interpreta algo que no los tiene.

Pero me ayudaste porque me hablaste de que "y" une y "o" separa. La verdad eché un vistazo a tu post hace rato y no entendí mucho, pero tu idea se ve que me quedó y me ayudó con el análisis que hice arriba.

Citar
amarillo y rojo o azul

aquí vemos el orden usual de evalución https://msdn.microsoft.com/es-es/library/2bxt6kc4.aspx el orden como en el idioma es "y" < "xor" < "o" es decir primero "y" que "o"

vamos a comprar un carro que sea (rojo y amarillo)... o (azul).... ya que el "y" incluye
Qué interesante. Recientemente había empezado a escribir así por ejemplo "rojo (y amarillo) o azul", porque sino veía una ambigüedad. Con tu forma de poner paréntesis también está bien, lo que quiero decir es que el problema o la duda yo l@ tenía no sólo en programación sino en el lenguaje natural también. Y aunque se diga que está clarísimo yo lo seguiría agarrando con pinzas, o con paréntesis, jaja.

También me gustó tu idea de resumir conjuntos de subcondiciones. Eso de llamarles "amarillo" por ejemplo. Me puede servir.

Citar
(A y B) y (C o D)

ambas partes deben cumplirse para ser cierto así que podemos usar "y" que une como propiedad distributiva


(A y B y C) o (A y B y D)
¿Pero esto sirve de algo? Alargaste la expresión. Y no es que hayas quitado los paréntesis.
710  Programación / Programación General / Re: Duda sobre expresiones condicionales. en: 6 Julio 2018, 01:19 am
El Benjo:
Sin paréntesis me hago un lío en casos como este:
((A y B) y (C o D) o (E y F)) o G
Creo que tendré que usarlos. El problema es que un programa que genere ese tipo de expresiones, con paréntesis, me parece bastante difícil. Por otro lado ¿cómo expresarías eso, sin paréntesis? Porque mi pregunta era si se podía expresar cualquier cosa sin paréntesis. Yo pensé que sí, pero como no me da la mente para interpretar de izquierda a derecha como si tuviese sólo una interpretación, ya no sé.

El artículo de wikipedia está interesante, pero difícil, no lo entendí del todo. En el 2ndo ejemplo de propiedad distributiva no han quitado los paréntesis. ¿Y se supone que el and tiene prioridad como si fuese un *?

"Mi lenguaje", no es un lenguaje del que podamos decir nada, si no especificas...
Digamos que tienes razón en que no pueden decir nada al respecto, pero yo no pedí que hablaran de ello.
Dije que no sé si mi lenguaje admite paréntesis en las condiciones, ejemplo "V1<V2 or (V1==V2 and V2==V3)" ni cómo las toma, lo cual evidentemente es algo que yo debo averiguar, no pedí ayuda con eso.

Citar
¿¿¿Es alguno conocido que usas con regularidad, tu preferido, uno propio que estés haciendo???
Action Script de Macromedia Flash 5. Es prácticamente el único que uso y mi favorito.

Citar
Pués no, no inventaste nada...
Puse inventar entre comillas, significa en ese caso que la expresión se tome con pinzas, que no es tan literal. Nunca había visto paréntesis en una condición para separar partes or-and, y se los puse, o sea que desde mi punto de vista es algo nuevo.

Citar
Supongo que habrás ido a la escuela, y habrás dado algo de matemáticas... y si tienes algo de memoria, podrías recordar que los paréntesis se aplican para dar prioridad y agrupar cordinadamente las expresiones...
Sí.

Citar
En cualquier caso considera que una gramática que no tiene adecuadamente delimitado el orden de precedencia () se dice que es una gramática ambigua, y por consiguiente una misma expresión puede ser interpretada de modo diferente... lo cual se considera un grave error de diseño.
Exacto, las expresiones que mencioné parecen ser ambiguas, es lo que quisiera saber cómo arreglar, en lo posible sin usar paréntesis.

Citar
No está bien formulada la pregunta... Como sigue sí:
¿Hay alguna forma de de formular expresiones que no requieran paréntesis?.
No entiendo tu critica.

Ante mi pregunta
"¿Cualquier relación puede expresarse sin necesidad de paréntesis, y se interpretaría bien?"
no veo un problema.

La que tú preguntas parece responderse sólo, como ¿hay alguna forma de hacer triángulos que no requiera algún ángulo >90? Claro, la mayoría no lo requieren.

El problema son las expresiones que parecen requerirlo (a algún paréntesis) ¿realmente lo requieren o hay otra forma de decirlas que no use paréntesis?

Por ejemplo si digo "rojo" y pregunto ¿hay alguna forma de expresar ese color sin mencionar la "o"? Me puedes decir "Sí, red", entre otras cosas.

EDIT:
En tu caso diciendo "requiera" en vez de "requieran", ahí sí.
Porque si dices "requieran" pareces referirte a las expresiones, no a LA forma o método.

...

Hombre, yo estoy hablando de los operadores AND y OR.

Tú me vienes con +, *, -.

Por el link que me dió El Benjo parece que se pueden traducir a eso, pero intenta no entreverarme ¿estamos hablando de lo mismo o no?

Notación de infijo (o normal): Las que solemos usar, porque las entendemos bién al 'leerlas', los operadores aparecen a ambos lados y el operador en medio.
Ejemplos: A o B
(A y B) o (C-(D y E)) <-- nota que los ejemplos son los mismos para los 3, para que veas las diferencias).
Notación de prefijo (o polaca): Los operadores van delante, los operadores detrás.
Ejemplos: oAB; oyABC-yDE
Notación de sufijo (o postfijo, inversa):Los operandos van delante, los operadores al final.
Ejemplos: ABo; AByCoDEy-


En tus descripciones de los operadores te has hecho un lío, pero la idea la entendí gracias a los ejemplos.

EDIT2: El "xor" y cosas así más complejas que and y or creo que no las necesito, pero supongo que acortan ciertas expresiones, veremos...

Citar
Las dos últimas suelen llamarse Notación polaca (la de sufijo: polaca inversa), y no precisan el uso de paréntesis...
Probablemente sea la respuesta que necesitaba. Lo que no entiendo bien es cómo se interpretaría cada uno, pero sería cuestión de investigar y de práctica.

Citar
Para pasar una expresión de infijo (normal) a una notación de sufijo, suele recurrirse al algoritmo Shunting yard, y en general suele hacerse uso de una pila para ello...
Más bien necesito lo inverso, pero veremos.

Citar
Supongo que si te cuesta entender expresiones simples
Sí, la verdad que sí. Pero si son como las expresiones matemáticas entonces no. ¿Cómo interpretarías esto, si fueses de izquierda a derecha?
A y B y C o D o E y F o G

Yo
ABC o D o E y (F o G)

Pero si fuese como en matemática sería:
ABC o D o EF o G

Citar
va a serte harto difícil implementar una pila
Ni siquiera sé de lo que me estás hablando. Para mí pila es un "aparato" que se guarda en otros para darle energía, o una montaña con cierto orden.
Ni te preocupes en aclarármelo, sólo te comento.

Voy a tener que practicar cosas. Nos veremos.
Páginas: 1 ... 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 [71] 72
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines