33bits
[Hilo Oficial] Esto también es otro arte...el ARTE de programar - Versión para impresión

+- 33bits (https://33bits.net/foro)
+-- Foro: Temas de debate (https://33bits.net/foro/Foro-Temas-de-debate)
+--- Foro: Off Topic (https://33bits.net/foro/Foro-Off-Topic)
+--- Tema: [Hilo Oficial] Esto también es otro arte...el ARTE de programar (/Tema-Hilo-Oficial-Esto-tambi%C3%A9n-es-otro-arte-el-ARTE-de-programar)

Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33


Re:Esto también es otro arte...el ARTE de programar - Margaruga - 29-10-2012

Eso tuvo que ser muy frustrante. Sí, Led supongo que tienes razón, hay cosas que no van y por mucho que empujes no van a ir...


Re:Esto también es otro arte...el ARTE de programar - Joanor - 29-10-2012

Led, si que tienes razón, entretenerme si que me entretenía. Y me gustaba, pero no es lo mío.


Re:Esto también es otro arte...el ARTE de programar - thewazaa - 29-10-2012

Joanor. Aún lo dejases en su momento, te puedes seguir planteando estos problemas a lo Layton. Al final es lo que son.

Fijate, el primer problema que han colocado es tipico de un Layton (lo hubieran puesto con un 30 o 40 en vez de un 1000 para que la gente pudiera contar a mano...

Lo de dividir un número en unidades, decenas, centenas... bueno, ese no es de Layton, pero su variante, cambiar de base, si

Lo de analizar una funcion de bool... bueno, con un planteamiento algo diferente podría ser de Layton. De hecho lo primero que hice en ese, fué resolverlo a mano, creando a partir de ahí un conjunto de reglas que convertir en código.

Es decir, entrenerte, puedes entretenerte, se te de bien o mal prorgamar.

Al final acaba siendo un ejercicio de pensar y logica... y va bien para la edad mental.

Y más ahora que te has puesto el careto de la abuelita de Link y las neuronas ya no funcionan como antes Big Grin


Re:Esto también es otro arte...el ARTE de programar - Led Zeppelin - 29-10-2012

Hola.

Lo importante es que te guste con lo que estés ahora, no hay nada peor que dedicarte a algo que al final acaba por no gustarte, es capaz de amargarte la vida.

La relación de la programación con los puzles me parece interesante porque alguna vez lo pensé.

Un saludo.


Re:Esto también es otro arte...el ARTE de programar - Margaruga - 01-11-2012

Otro problemilla.

El palíndromo más grande producto de dos números de dos dígitos cada uno es 9009 (91* 99). Encontrar el mayor palindromo producto de dos números de 3 dígitos.




Re:Esto también es otro arte...el ARTE de programar - thewazaa - 01-11-2012

La solucion obvia es

I=999
Mientras i>=100
  J=i
  Mientras j>=100
    K = i*j
    Si palindromo(k) devolver k(i*j)
    J--
  I--

Fncion palindromo(k)
  K2=k
  Mientras k2>0
    R =k2%10
    K2/=10
    N=n*10+r
    Si n==k2 o k2/10==n devolver true
    Si n>k2 devolver false
  Devolver k==n

La funcion palindromo gira el numero y mira si se ha conseguido el numero original... Pero trucado porque con la mitad del numero tengo de sobras, para verificar.

El bucle para ateas porque pbviamente cuando mas grande el numero mayor es el resultado...

Aunque estudiandolo seguramente se puede sacar algo mejor. Me dice el sentido comun que seguramente este palindromo comienza y acaba con nueve... Y eso limitaria las posibilidades. Pero tendria que estudiarlo en detalle y no soy tan bueno en mates


Re:Esto también es otro arte...el ARTE de programar - Margaruga - 01-11-2012

Joder, yo hice algo parecido (lo obvio como bien dices) pero no se me ocurrió algo tan simple como empezar a multiplicar por el final X-D Que pocas luces tengo a veces. Gracias por la solución thewazaa.


Re:Esto también es otro arte...el ARTE de programar - thewazaa - 02-11-2012

Igualmente la solución la tengo mal. Es verdad que el mayor resultado se consigue con los numeros más grandes... pero con los dos numeros mas grandes. El sistema de bucles que he puesto no es correcto. Teniendo en cuenta que estamos hablando del cuadrado, por ejemplo, no es lo mismo la area de 5*5 que 9*1...

A entender: tal como está la cosa podria llegar a quedarme (en el caso de 2 cifras) con un 99*1, que obviamente no es el palindromo más grande.

Así, veamos:

99 -> encuentra 91. palindrom

Y tocaría hacer:

98, 97, 96, 95. Acabar. ¿porque?

porque la raiz de 9009 es 94,91. Y la area mas grande de dos lados donde la suma de ellas es mayor es un cuadrado. Cuando se hace hasta el 95 no se puede conseguir ningun valor superior al 91*99, que sea palindromo.

Con esos pequeños ajustes el código será a prueba de fallos.




Re:Esto también es otro arte...el ARTE de programar - thewazaa - 02-11-2012

La corrección, con un correcto sistema de control para evitar errores, en base lo dicho anteriormente.

I=999
k2 = infinito
Mientras i>=100
  J=i
  si i*j<k2
    devolver k2(i2*j2)
  Mientras j>=100
    K = i*j
    Si palindromo(k) y (k2 es infinito o k2<k)
      k2(i2*j2) = k(i*j)
    J--
  I--
devolver k2(i2*j2)

Fncion palindromo(k)
  K2=k
  Mientras k2>0
    R =k2%10
    K2/=10
    N=n*10+r
    Si n==k2 o k2/10==n devolver true
    Si n>k2 devolver false
  Devolver k==n



Re:Esto también es otro arte...el ARTE de programar - Margaruga - 02-11-2012

Vale, ahora sí que te ha quedado redonda la solución Smile


Re:Esto también es otro arte...el ARTE de programar - thewazaa - 02-11-2012

Ya de paso, si alguien se molesta a acabar de resolver la siguiente ecuación
Código:
    cba
    fed
-------
┬á  jihg
  nmlk
rqpo
-------
gsttsg  <- pos 1
gstutsg <- pos 2

g' = d*a
h' = d*b + g'/10
i' = d*c + h'/10

k' = e*a
l' = e*b + k'/10
m' = e*c + l'/10

o' = f*a
p' = f*b + o'/10
q' = f*c + p'/10


g = g'%10
h = h'%10
i = i'%10
j = i'/10

k = k'10
l = l'%10
m = m'%10
n = m'/10

o = o'%10
p = p'%10
q = q'%10
r = q'/10

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

Pos sol 1.

s' = h+k
t' = i+l+o + s'%10
t'' = j+m+p + t'%10
s'' = n+q + t''%10
g'' = r + s'' // Supossicio que no hi ha mes xifres

g = g
s = s'/10
t = t'/10
t = t''/10
s = s''/10
g = g''/10

Se podrá llegar a la solución ideal con menor esfuerzo.

Obviamente, da un palo terrible.


Re:Esto también es otro arte...el ARTE de programar - thewazaa - 02-11-2012

De el tercer problema... ofrezco dos versiones. Una para ascii y otra normal.

string a
for int i=0; i<a.length; i++
  converitr a[i]

La funcion convertir es la que tiene dos versiones.

Version 1:

funcion convertir (c)
de[] = {a,b,c,d,e,f...}
a[] = {A,B,C,D,E,F...}
si c en de
    devolver a[posicion de c en d]
devolver c

Version 2 // Dependerá segun la codificacion de caracteres

funcion convertir(c)
  si c entre 97 y 122
    devolver c-(97-65)
  si c... (los otros casos, depende de la codificacion de caracteres, para ascii podeis basaros en lo siguiente: http://www.elcodigoascii.com.ar/codigos-ascii-extendidos/letra-n-tilde-enie-minuscula-codigo-ascii-164.html)
  sino devolver c

La más facil de implementar es la primera. Además te ahorras lios cuando cambias la codificación de caracteres en algún código (se suele usar codigos parecidos en linux para limpiar lo que se llaman "caracteres windows". Caracteres que no estan recogidos en una codificacion de caracteres pero microsoft se los ha sacado de la manga.

La segunda es la que usa el SO.