Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Tachikomaia en 12 Agosto 2019, 13:06 pm



Título: ¿Cómo es un pseudocódigo que varíe una afirmación?
Publicado por: Tachikomaia en 12 Agosto 2019, 13:06 pm
Es decir, que la salida sea algo así:
Código:
Sin modificadores:
K < C
Con +:
K < C+K
C < C+K
Con *:
K < C*K
C < C*K
Con + y *:
K*C < C+K
K < (C+K)*K
K < (C+K)*C
C < (C+K)*K
C < (C+K)*C
C+K < (C+K)*K
C+K < (C+K)*C
K < C*K+K
K < C*K+C
C < C*K+K
C < C*K+C
C*K < C*K+K
C*K < C*K+C
Y creo que sigue, por ejemplo K*C+K < C+K

Luego se agregaría "Con /" y así sucesivamente con cada operación que pueda realizarse en 1 línea de código, es decir, se acepta por ejemplo Floor(C), usar una función "común", pero no crear una. En otras palabras, Floor(C) se puede aplicar en una línea de código, dentro de un if por ejemplo, pero no se acepta por ejemplo Contar0s(C) porque sería una función creada.

C es una variable (abreviación de "Candidato") y K es una constante.

El signo comparador no me interesa vararlo por ahora.

Bueno... ¿qué lógica hay en la lista? Pues... básicamente es combinatoria de C, K y operaciones... tratando de que ciertas combinaciones no se muestren, pero uds hagan lo que puedan...

Idealmente sería:

- No se permite K+K, K*K, etc, porque estructuralmente hablando el resultado de eso es simplemente K, es decir, no le veo sentido a que se repita (Nota) por ejemplo la operación 2+2 si puedo poner simplemente 4.
Nota: Las afirmaciones que se muestran en la salida podrían ser usadas para evaluarse en otros programas, en cuyo caso habría repeticiones; con "repita" me refería a eso.

- No se permite C+C, C*C, C/C, ni cosas que son abarcables por K, es decir, C+C=C*2, C*C=C^2, C/C=1. Los números constantes pueden ser sustituídos por K... C+C=C*K, etc. El punto es que no tiene sentido poner en la lista cosas que están abarcadas por otras cosas de la lista.

- No se permiten estructuras con contenido igual en ambos lados. Las he quitado pero si me quedó alguna sorry.

- El signo "-" me pareció innecesario ya que K puede ser negativo, pero si uds creen que es necesario en algo como *-C en alguna parte, úsenlo. La idea de esto es que estén todas las estructuras de modificaciones posibles, no sé mucho de matemática así que no sé bien cuales serían.

- No se permiten afirmaciones que tras un "reflejo" sean iguales a otras de la lista. Por ejemplo K < C, más allá del símbolo comparador, es igual que C < K, estructuralmente: Hay una K suelta de un lado y una C del otro, de qué lado sea no me importa aquí. Como dije estas afirmaciones podrían ser usadas por otros programas, aunque yo las seleccionaría, y para eso me basta con ver la estructura, y sabiendo que no están las "reflejables" si quisiera una de esas reflejo una de las que hay. Obviamente no es una explicación muy profunda pero tampoco viene mucho al caso entender por qué lo quiero así. Bueno... es que la selección que haría sería en base a lo compleja de la estructura por lo que me da igual si es "A y B" o "B y A".

- No se permite lo simplificable, por ejemplo "(C+C)", es decir, con paréntesis que sobran. No sé más allá de paréntesis si hay algo más que no haya sido explicado y prohibido antes.

Bueno... con respecto a las operaciones, de momento serían estas:
+x
-x
*x
/x
Math.abs(x)
Math.ceil(x)
Math.floor(x)
Math.pow(x, x2)
Math.round(x)
Math.sqrt(x)

En x iría cualquier cosa que incluya C o K

No recuerdo si con pow se puede hacer sqrt, en tal caso sqrt podría ser innecesario.

Gracias y suerte en pila.

Sí, no es para un trabajo, profesor, etc, a menos que alguien espere algo de mí y me pague en cierto modo por ello, quizá algún familiar, no sé, pero daré el crédito al que me ayude. Y digo "suerte en pila" porque no tengo mucha idea de cómo hacerlo, al menos de momento. Tengo un programa que genera todas las palabras posibles, quizá cambiando "A" por "+K" por ejemplo, y así sucesivamente, podría transformarlo en un generador de las combinaciones que necesito... ¿Creen que sí?