Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - good

Páginas: 1 2 [3] 4
31
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:28:22 pm »
porcierto, no hay que limitarse a lo que haya dentro de la función, podeis usar estructuras

32
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:25:51 pm »
La más eficiente sin tu último requerimiento sería esta:

function factorial ($numero){
	
return 
$numero == $numero $numero factorial($numero 1);
}


esta solución tardaría lo mismo que la anterior, puedes optimizar este mismo código para que sea mucho más eficiente

33
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:22:07 pm »
La forma más eficiente –según creo– es usando recursividad. En breve lo subo.

He actualizado el enunciado

34
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:19:01 pm »
Hola Good,

Verás, no se si llegas a entenderme bien. A lo que yo voy es a decirte que por muy "eficaz" y rápida crees una función dará igual si la llamas 5000 veces. La función no sabe cuantas veces la está llamando por lo tanto no se puede hacer nada respecto a ello.

Si, visto de esa forma si que es mas corto de elaborar. Bien visto así Physlet, enhorabuena.

Un saludo,
Siquillote.

sigue siendo "ineficiente" en cuestión de rapidez

35
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:10:02 pm »
Hola Good,

Verás, la cosa del reto (según a mi entender) es crear una función que elabore ese algoritmo no hacer que si a partir de X numero vaya mas rápido o lento o si llamas a la funcion 80 veces en tu script, ¿No crees?.

Un saludo,
Ángel.

el reto es buscar la solución más rápida y eficiente, es un problema en el que se tiene en cuenta la eficiencia (velocidad) del proceso para cualquier caso (llamar solo una vez a la función o llamarla tantas veces como sea necesario)

36
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 22:05:25 pm »
Hola Good,

La verdad no entiendo porque dices que no es lo suficientemente rápido... a mi ni me tarda milésimas. En cuanto a que dices que se puede optimizar yo creo que es "imposible". Se utilizan los métodos exactos y concisos, ni mas ni menos. Hombre, se podría simplificar quitando la función pero como tu pedías una función...

Un saludo,
Siquillote.

hay una manera de hacerlo más eficiente. Éste que has hecho funciona bien, sí, pero siempre tiene que realizar el cálculo completo, por ejemplo, si lo probaras así:

factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);
factorial (1000);

seguramente no sería tan rápido xD

37
Los Retos PHPeros / Re:[RETO] calcular factorial
« en: 25 de Agosto de 2011, 21:57:55 pm »
vale, pero no es lo suficientemente rápido, se puede optimizar!

38
Los Retos PHPeros / [RETO] calcular factorial
« en: 25 de Agosto de 2011, 21:28:04 pm »
hola! la idea es crear una función como por ejemplo factorial($n);, y que devuelva el factorial de n (n!)

A ver quien hace el procedimiento más rápido!! :D


El factorial de 3 es 1*2*3, el de 5 es 1*2*3*4*5... etc

NOTA EXTRA:
he pensado en limitar el número que se pase por input, la función solo procesa números del 0 al 15

39
Los Retos PHPeros / Re:[Reto] Backtracking 1 (Con solución c++)
« en: 25 de Agosto de 2011, 21:25:54 pm »
No es por nada pero... No te estás explicando nada en los enunciados de estos retos.
Apenas estoy comenzando el estudio de los grafos, pero de igual forma este enunciado no explica nada.

Saludos.

no hay nada que explicar... combinaciones, lo pillas? xDD

40
Los Retos PHPeros / Re:[Reto][Solución] Sudoku (backtracking 3)
« en: 15 de Agosto de 2011, 14:43:09 pm »
Una solución posible (hay una manera más eficiente pero no la sé xD) es ésta:

Código: [Seleccionar]
#include <iostream>
#include <vector>
using namespace std;

typedef vector<vector<int> > VVI;
typedef vector<pair<int, int> > VPII;

bool se_puede (VVI& v, int xx, int y, int numero) {
for (int i = 0; i < 9; ++i) {
if (v[xx][i] == numero) return false;
else if (v[i][y] == numero) return false;
}

int fil = 3*(xx/3);
int col = 3*(y/3);
for (int i = fil; i < fil+3; ++i) {
for (int x = col; x < col+3; ++x) {
if (v[i][x] == numero) return false;
}
}
return true;
}

void backtrack (VVI& sudoku, VPII& pos, int count) {
if (count == pos.size()) {
for (int i = 0; i < 9; ++i) {
for (int x = 0; x < 8; ++x) cout << sudoku[i][x] << " ";
cout << sudoku[i][8];
cout << endl;
}
} else {
pair<int, int> p = pos[count];
int posX = p.first;
int posY = p.second;
for (int i = 0; i < 9; ++i) {
if (se_puede(sudoku, posX, posY, i+1)) {
sudoku[posX][posY] = i+1;
backtrack(sudoku, pos, count+1);
sudoku[posX][posY] = 0;
}
}
}
}

int main () {
VVI sudoku(9, vector<int>(9));
VPII blank;
for (int i = 0; i < 9; ++i) {
for (int x = 0; x < 9; ++x) {
cin>>sudoku[i][x];
if (sudoku[i][x] == 0) blank.push_back(make_pair(i, x));
}
}
backtrack(sudoku, blank, 0);
}

la función se_puede devuelve true sí un número (int numero) se puede poner en una casilla específica para un tablero dado.

41
Los Retos PHPeros / Re:[Reto] Sudoku (backtracking 3)
« en: 13 de Agosto de 2011, 22:26:15 pm »
Lo que yo hice para éste fue crear tres funciones booleanas: una que me dijera si un número estaba en una fila dada, otra que me decía si lo estaba en una columna y la otra si lo estaba en un cierto cuadrado de 3x3

El backtracking funcionaba de la siguiente manera:

Empezaba en la primera casilla con un 0, y probaba allí todas los números posibles en este orden:

Primero probaba un número y llamaba a la función para que hiciera el backtracking, y cuando ésta terminaba (si es que lo hacia), volvía a poner la casilla en valor 0

El Código no es muy largo, talvez cuesta entender, yo tardé un tiempo en comprender el backtracking xDD pero bueno, si quereis puedo poner una solución

42
Los Retos PHPeros / [Reto] Sudoku (backtracking 3)
« en: 13 de Agosto de 2011, 22:01:49 pm »
Hola,

Podrías hacer un programa sencillo que resuelva un sueoku?

Entrada:

Un sudoku, 9 filas de 9 columnas cada una inidicando con 0 las casillas vacías.

Salida:

Una solución al sudoku pasado por la entrada



Ejemplo de entrada:

0 0 7 0 0 0 0 0 2
0 0 0 1 3 0 0 8 6
2 0 0 0 8 4 0 0 5
0 3 1 8 0 0 0 0 4
0 7 0 9 0 0 0 0 0
5 9 0 0 7 0 0 3 0
3 0 4 0 0 1 0 5 0
0 0 0 5 0 0 0 0 0
0 0 0 0 0 0 8 0 0

Ejemplo de Salida:

8 1 7 6 5 9 3 4 2
9 4 5 1 3 2 7 8 6
2 6 3 7 8 4 1 9 5
6 3 1 8 2 5 9 7 4
4 7 2 9 1 3 5 6 8
5 9 8 4 7 6 2 3 1
3 8 4 2 9 1 6 5 7
7 2 9 5 6 8 4 1 3
1 5 6 3 4 7 8 2 9



El truco de este problema es saber qué números se pueden poner, es decir, no sería eficiente probar todos los número [1,9] inclusive, el programa tardaría demasiado tiempo. Yo recomendaría hacer alguna(s) funciones para saber qué números pueden encajar en cada casilla (teniendo en cuenta la fila en la que estamos, la columna y el cuadrado de 3x3)

Fuente: Olimpiada informática española

43
Los Retos PHPeros / [Reto] Backtracking 2
« en: 13 de Agosto de 2011, 21:53:43 pm »
Hola,

Este problema puede resolverse modificando un poco la solución dada para el anterior

Se trata de hacer lo mismo, pero usando un número n de 0 y un número m de 1

Entrada:

Dos números enteros que corresponden a los valores de n y m

Salida:

Todas las combinaciones posibles usando n 1 y m 0



Ejemplo de entrada:

5 2

Ejemplo de salida:

0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0



Éste se puede resolver modificando un poco el código del anterior

Fuente: Online Judge www.jutge.org

44
Los Retos PHPeros / [Reto] Backtracking 1 (Con solución c++)
« en: 13 de Agosto de 2011, 21:46:14 pm »
Hola,

Lo que hay que hacer es generar todas las combinaciones posibles de 0 y 1 de longitud n, para una n dada.

Entrada:

Un número entero con el valor de n

Salida:

Todas las combinaciones de 0 y 1 de longitus igual a n;



Ejemplo de entrada:

3

Ejemeplo de salida:

000
001
010
011
100
101
110
100



Se tiene que resolver mediante backtracking (http://en.wikipedia.org/wiki/Backtracking)



fuente: olimpiada informática española



Solución posible: (c++)

Código: [Seleccionar]
#include <iostream>
#include <vector>
using namespace std;

typedef vector<int> VI;

void imprime_vector (VI& v) {
for (int i = 0; i < int(v.size()); ++i) cout << v[i];
cout << endl;
}

void combinaciones (int count, VI& v) {
if (int(v.size()) == count) {
imprime_vector(v);
return;
}
v[count] = 0;
combinaciones(count+1, v);
v[count] = 1;
combinaciones(count+1, v);
}

int main () {
int n;
cin>>n;
VI v(n);
combinaciones(0, v);
}

45
Los Retos PHPeros / Re:[Reto] Parser
« en: 13 de Agosto de 2011, 21:26:43 pm »
tengo una solución de coste lineal en c++

Páginas: 1 2 [3] 4