Título: Retos de java Publicado por: 4dr14n31t0r en 19 Enero 2016, 20:54 pm No se si este es el lugar correcto para proponer retos de java, si no es asi le pido a los moderadores que muevan este hilo al sitio correcto.
Reto 1: Adios punto y coma. ¿Serías capaz de programar en java sin utilizar este simpatico caracter para separar sentencias? EDITO(22/01/2016) Por ejemplo, hacer un algoritmo de ordenamiento sin usar los que ya proporciona java Nota: es posible. Reto 2: Perdido entre las dimensiones ¿A que no eres capaz de crear una función que declare un array de N dimensiones? (Es decir, que devuelva un objeto de una clase generica en el que su atributo generico sea del tipo array de N dimensiones) Si ademas eres capaz de inicializarlo me habrás superado Reto 3: Recursividad sin recursos Supongamos el caso de una funcion recursiva. Lo normal es que cuando se llame a si mismo lo haga pasando por parametro un valor diferente. Por ejemplo, el factorial de un numero es ese por el factorial del anterior. Pero ¿Seria posible hacer recursividad si la funcion no tiene parametros por el cual pasarle nuevos valores cuando se llama asi mismo? Claro que si. Solo habria que usar atributos de la clase en la que implementas la funcion, pero ¿Que tal si te digo que no puedes usar esos atributos? ¿Como harias una funcion recursiva entonces? (Reto añadido el 22/01/2016) Reto 4: Bucles y mas bucles Si quieres sumar todos los numeros de 1 a N, (Es decir, el sumatorio de los primeros N numeros) haces un bucle. Si quieres sumar todos los sumatorios de 1 a N (Sumatorio de sumatorio, llamemosle sumatorio de grado 2) haces un bucle dentro de un bucle. ¿A que no te atreves a sumar el sumatorio de grado G de los numeros de 1 a N? Existe una formula matematica, pero la idea es hacer N bucles dentro de bucles (Reto añadido el 22/01/2016) EDITO(22/01/2016):Respecto del problema del punto y coma, me refiero a no utilizarlo en situaciones que normalmente harian falta. Por ejemplo suponte que tengo un array y quiero ordenarlo, pero tuviera que crear el metodo en lugar de usar uno como Arrays.sort ¿Que hariais entonces? ¿A que ya no parece tan sencillo? De todos modos vosotros tambien podeis sugerir retos en este mismo hilo. Si lo veo edito este mensaje y lo añado por cortesia del que haya sugerido el reto. Título: Re: Retos de java Publicado por: 0xFer en 20 Enero 2016, 04:28 am Hola, me gusta la idea pero los problemas que propones son muy pocos y no me parecen adecuados, por ejemplo el primer problema no es como para sentarse todo el día y teclear lo que sea para ver si encontramos la solución porque con una búsqueda en Google tienes el problema solucionado y da igual lo que se haga porque no se ganaría mucho que digamos en ambos casos, en cambio un problema del tipo "calcular la suma entre los dígitos del número (1 ^ 34627550862)" sería algo como para ponerse con él todo el día y no buscarlo en Google ya que en ese caso ya no tendría su gracias, y si logramos cumplir con el reto entonces tendríamos algo que sería útil para futuros trabajos.
Debemos ir pensando en otros problemas, algo así como 20 ya sería buena idea, claro que ya depende de la dificultad. Te enviaré un MP con más problemas y vemos si publicamos otro hilos un poco más formal con más problemas y reglas definidas. Título: Re: Retos de java Publicado por: crack81 en 20 Enero 2016, 06:11 am Me parece interesante la propuesta si se va hacer algo yo me apunto
saludos... Título: Re: Retos de java Publicado por: fary en 20 Enero 2016, 16:10 pm Son chorradas. Sin ';'.
Código
Título: Re: Retos de java Publicado por: sodark en 20 Enero 2016, 17:23 pm Justo he publicado un post en mi blog. Mas que un problema de programación es un problema "raro", que a mi me dejo bastante flipado.
Os dejo el link http://www.driverlandia.com/importancia-de-como-recorrer-una-matriz/ A ver si sacáis porque sucede esto :D, aún así os dejo el código aquí. Código
Título: Re: Retos de java Publicado por: 0xFer en 20 Enero 2016, 18:53 pm Citar A ver si sacáis porque sucede esto Puedes ver un arreglo de la siguiente forma; dirBase variables que están en direcciones relativas a dirBase 0x0001 4 6 7 8 0x0005 3 6 7 2 0x0009 4 3 10 8 0x00013 1 0 7 1 Cada variable como podrás imaginar tiene una dirección en la memoria, para acceder a un elemento del arreglo en java por ejemplo puedes hacer algo así arreglo[2][3]; esto sería un 8 teniendo en cuenta el arreglo de arriba, pero la computadora lo ve más como una dirección así; Código: [i][j] ->[2][3]->[0x0009][3] ->[0x0009 + 3] -> (La dirección de memoria donde está el 8) nota que solo hay que aumentarle un 3 a la dirección base. Ahora para recorrer un arreglo empezando por filas y luego columnas solo es necesario aumentar un valor a la base, puesto que la base suele ser "i" entonces solo hay que variar el valor de "j", pero si quieres recorrer por columnas entonces tienes que cambiar la dirección base constantemente y luego incrementarlo. Para entenderlo mejor te recomiendo estudiar ASM, la verdad muchas cosas entenderás cuando estudies ese lenguaje. Suerte Título: Re: Retos de java Publicado por: sodark en 20 Enero 2016, 22:22 pm Aunque es cierto lo que dices, realmente el motivo de que haya tanta diferencia se debe a
https://es.wikipedia.org/wiki/Cercan%C3%ADa_de_referencias Vease, cuando tenemos que cargar datos de la memoria a la cache, no solamente se carga la variable que hemos pedido, si no que se carga un bloque entero ya que se entiende que accederemos a la direccion cercana. El problema es que cuando recorremos un array de la segunda forma (y es un array grande) la siguiente posicion a la que vamos a acceder no esta en el bloque que ya hemos cargado, por lo que el sistema tiene que cargar el nuevo bloque, y asi por cada nueva lectura, haciendo que la memoria cache que sirve precisamente para optimizar no sirva para nada. En el caso de una lectura normal, como las posiciones que leemos estan en el mismo bloque, es mas rapido leerlas puesto que leemos de la cache y solo cargamos un bloque cuando ya hemos terminado el otro. No? Título: Re: Retos de java Publicado por: 0xFer en 21 Enero 2016, 00:13 am Pues veo que es otra de las razones. La verdad no sabía eso que acabas de comentar y pues es algo importante a tener en cuenta cuando programas aplicaciones que precisan de la velocidad para funcionar correctamente, quiero decir: no tratar de conmutar entre direcciones de memoria que estén muy alejados.
Saludos... Título: Re: Retos de java Publicado por: 4dr14n31t0r en 22 Enero 2016, 08:53 am Hola, me gusta la idea pero los problemas que propones son muy pocos y no me parecen adecuados, por ejemplo el primer problema no es como para sentarse todo el día y teclear lo que sea para ver si encontramos la solución porque con una búsqueda en Google tienes el problema solucionado y da igual lo que se haga porque no se ganaría mucho que digamos en ambos casos, en cambio un problema del tipo "calcular la suma entre los dígitos del número (1 ^ 34627550862)" sería algo como para ponerse con él todo el día y no buscarlo en Google ya que en ese caso ya no tendría su gracias, y si logramos cumplir con el reto entonces tendríamos algo que sería útil para futuros trabajos. Si con la expresion "1 ^ 34627550862" te refieres a 1 elevado a 34627550862 entonces el resultado es 1, y la suma de sus digitos 1 tambien. De todos modos, si no te referias a eso, no veo el problema en convertir el numero en String y sumar el valor que representa cada caracter. Tambien se puede dividiendo entre 10 y pillando el resto cada vez. Si con retos te refieres a algo como eso, la verdad es que el proposito de este hilo es el de poner problemas lo mas dificiles posibles. Por eso de momento solo hay 4 retos. Tampoco es una tarea facil encontrar un reto muy dificil.Debemos ir pensando en otros problemas, algo así como 20 ya sería buena idea, claro que ya depende de la dificultad. Te enviaré un MP con más problemas y vemos si publicamos otro hilos un poco más formal con más problemas y reglas definidas. Título: Re: Retos de java Publicado por: 4dr14n31t0r en 22 Enero 2016, 09:57 am ¿Vosotros sabeis como se almacenan los arrays en C, verdad? Lo que hace con las matrices es guardar un array de una sola dimension en su lugar, y cambiar el modo en que se calculan el contenido de las posiciones: Multiplica el numero de columnas que tiene cada fila y despues le suma la columna indicada.
Teniendo en cuenta esto, aunque se trate de un array simple realmente tambien pasara lo mismo al acceder de esa forma a los elementos de la matriz: Es mas facil multiplicar una vez y sumar varias veces que lo contrario. Lo que quiero decir es que, incluso aunque los arrays no funcionaran con punteros, seguirian produciendo ese increible retraso de tiempo al cambiar filas por columnas. Título: Re: Retos de java Publicado por: 0xFer en 22 Enero 2016, 16:06 pm No hagas doble post, edita el primero que ha habías hecho.
Mira los problemas de Project Euler (https://projecteuler.net/archives) se ven muy interesantes. Saludos. |