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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18
81  Foros Generales / Foro Libre / Divagando por Youtube en: 12 Agosto 2016, 22:04 pm

Yo no tengo Televisión y hace mas de 10 años que no la veo, para mi Youtube es una forma de  Entretenimiento Random ya que nunca se que que voy a terminar viendo al Final del dia.

Youtube tiene sus algoritmos para mostrarte vídeos Relacionados, pero llega un punto en que dices
Citar
Como chingados llegue a este video

Y asi como hay usuarios Troll que Desvian Temas... Creo yo que también existen videos troll hecho por Usuarios Troll que solo buscan desviar temas, ya saben... típicos vídeos donde el Thumbnail presenta una imagen realmente prometedora y dicha imagen nunca aparece en el video o el video habla de otra cosa. ODIO ESO!!

¿No les a pasado que empiezan viendo un Tema X y terminan viendo un tema Totalmente diferente al que empezaron?

Saludos!


82  Foros Generales / Noticias / Blockchain nueva tecnologia que adoptara el sistema Financiero en: 12 Agosto 2016, 20:55 pm
Un reporte del foro Mundial de Economía, indica que la tecnología introducida por el Bitcoin (El Blockchain) representara el centro de las operaciones de los sistemas financieros en el Mundo.

Dicha tecnología Heredada de sistemas criptograficos a demostrado ser un pilar importante para el registro de operaciones "Económicas" esto es la compra venta de Divisas/Mercancias utilizando el bitcoin.

No significa que los sistemas financieros adopten el bitcoin, simplemente trataran de incorporar lo mejor de este: El Blockchain

Sin duda alguna la tecnología siempre estará a la vanguardia en estos temas


Mas Información en Ingles

http://www.nytimes.com/2016/08/13/business/dealbook/bitcoin-blockchain-banking-finance.html?ref=technology&_r=0

83  Foros Generales / Noticias / Antiguos miembros de Kickass están haciendo crowdfunding para reabrir la web en: 12 Agosto 2016, 16:09 pm
El pasado 21 de julio cerró la página de torrents más famosa y más utilizada en Internet, incluso por encima de ThePirateBay. A pesar de recibir constantes reclamaciones de DMCA que hacían que muchos de los enlaces, sobre todo a series, fueran eliminados a los pocos días de ser subidos, era la página a la que todos iban a comprobar las últimas novedades.

Actualmente han surgido dos mirrors que han vuelto a subir contenido, como son kickass.mx y kickass.cd. Después del cierre surgió kat.am, el cual fue cerrado por las autoridades, y actualmente el dominio ha sido comprado por estafadores, que cuando vas a descargar un enlace torrent, te piden tu cuenta bancaria.


Mas info: http://www.adslzone.net/2016/08/12/antiguos-miembros-kickass-estan-crowdfunding-reabrir-la-web/
84  Programación / Programación C/C++ / Demostracion del problema de Monty Hall en: 11 Agosto 2016, 23:14 pm
Quien no ha visto ese concurso donde hay un solo premio detras de 3 puertas las otras 2 con  Cabras u Ovejas...



La opción adecuada es siempre "cambiar" de puerta cuando te pregunten si te quieres cambiar de la misma..

El programa simula 10 Millones de Juegos 2 veces, en la primera ronda el jugador siempre cambia de puerta y en la segunda ronda el jugador nunca cambia de puerta.

Se demuestra que se tiene 66.6% de probabilidad de ganar si se cambia de puerta, contra 33.3% de probabilidad de ganar si no se cambia  de puerta.

Código
  1. #include<stdio.h>
  2. #include<stdint.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<time.h>
  6.  
  7. #define GOAT 0 //CABRA 0
  8. #define PRIZE 1 //PREMIO 1
  9.  
  10. #define MAX_SIMULATIONS 10000000
  11.  
  12. int main() {
  13. /*unsigned char */
  14. uint8_t position = 0; //Posicion del premio
  15. uint8_t selected = 0; //Posicion seleccionada por el jugado
  16. uint8_t doors[3]; //Puertas
  17. uint8_t can_switch = 0; //La puerta a la cual se puede cambiar
  18. register uint32_t count_win = 0;
  19. register uint32_t simulations = 0;
  20. srand(time(NULL)); //Semilla Random
  21. memset(doors,GOAT,sizeof(uint8_t)*3); //Todas las puertas son Cabras
  22. //< 10000000
  23. while(simulations < MAX_SIMULATIONS) {
  24. position = rand() % 3; //position del Premio Pseudo-Aleatoria
  25. doors[position] = PRIZE; //Guardamos el premio en la position antes seleccionada
  26. selected = rand() % 3; //position elejida por el Jugador
  27.  
  28. switch(selected) { //En base a lo elejido por el jugador
  29. //El encargado del juego valida que puerta tiene otra Cabra y la destapa
  30. //Dandole la oportunida al jugador de cambiar su puerta por la puerta restante
  31. case 0: //Puerta 0 elejida por el Jugador
  32. if(doors[1] == GOAT) { //Si otra puerta 1 Tiene cabra entonces
  33. can_switch = 2; //Le damos la oportunidad de elegir entre la puerta 0 y la puerta 2
  34. }
  35. else { //Caso contrario
  36. can_switch = 1; //Le damos la opotunidad de elegir entre la puerta 0 y la puerta 1
  37. }
  38. break;
  39. case 1: //Repetimos en caso de que seleccione la puerta 1
  40. if(doors[2] == GOAT) {
  41. can_switch = 0;
  42. }
  43. else {
  44. can_switch = 2;
  45. }
  46. break;
  47. case 2: //Repetimos en caso de que seleccione la puerta 2
  48. if(doors[0] == GOAT) {
  49. can_switch = 1;
  50. }
  51. else {
  52. can_switch = 0;
  53. }
  54. break;
  55. }
  56. if(doors[can_switch] == PRIZE) { //Evaluamos si la puerta elejida tiene el premio
  57. count_win++; //Si es asi incrementamos el contador de premios
  58. }
  59. doors[position] = GOAT; //0 //Restablecemos la puerta con premio nuevamente a Cabra
  60. simulations++; //Incrementamos el contador de Simulaciones
  61. }
  62.  
  63. //Imprimimos totales
  64. printf("Total simulations with change %u, win: %u rate: %f\n",simulations,count_win,(float)((float)count_win/(float)simulations));
  65.  
  66. count_win = 0; //Restablecemos contador de premios a 0
  67. simulations = 0; //Restablecemos contador de simulaciones a 0
  68.  
  69. //Como en la siguiente similacion el jugador no cambiara de puerta no es necesario evaluar las otras puertas
  70. while(simulations < MAX_SIMULATIONS) {
  71. position = rand() % 3;
  72. doors[position] = PRIZE;
  73. selected = rand() % 3;
  74. if(doors[selected] == PRIZE) {
  75. count_win++;
  76. }
  77. doors[position] = GOAT; //0
  78. simulations++;
  79. }
  80. printf("Total simulations without change %u, win: %u rate: %f\n",simulations,count_win,(float)((float)count_win/(float)simulations));
  81. return(0);
  82. }
  83.  

Descripción del problema:

https://en.m.wikipedia.org/wiki/Monty_Hall_problem


Salida del codigo arriba mostrado:

Código:
Total simulations with change 10000000, win: 6665613 rate: 0.666561
Total simulations without change 10000000, win: 3335076 rate: 0.333508
Saludos!
85  Programación / Programación C/C++ / La memoria no se inicializa en cero de Forma Automatica en: 8 Agosto 2016, 04:24 am
Repitan despues de mi...

La memoria no se inicializa en 0 de forma automatica.
Los arreglos no se inicializan en 0 de forma automatica.
Las variables no se inicializan en 0 de forma automatica.

Se que es un tema tanto repetitivo y es el causante de muchos errores de programacion.

No existe ninguna garantia de que la memoria este inicializada en 0 todas las veces, hay ocasiones en la que si lo esta y hay ocasiones en la que no esta veamos este ejemplo, el cual muestra de un arreglo de 20 elementos los que su valor inicial no sea 0,

Código
  1. #include<stdio.h>
  2.  
  3. int main() {
  4. int i;
  5. int arreglo[20];
  6. i = 0;
  7. while(i < 20) {
  8. if(arreglo[i] != 0) {
  9. printf("La posicion %i del arreglo no esta inicializada su valor actual es %i\n",i,arreglo[i]);
  10. }
  11. i++;
  12. }
  13. return 0;
  14. }
  15.  
  16.  

La salida de ese codigo compilado con GCC para windows es:

Código:
La posicion 0 del arreglo no esta inicializada su valor actual es 4200160
La posicion 2 del arreglo no esta inicializada su valor actual es 21
La posicion 4 del arreglo no esta inicializada su valor actual es 9966448
La posicion 6 del arreglo no esta inicializada su valor actual es 1
La posicion 8 del arreglo no esta inicializada su valor actual es -1
La posicion 9 del arreglo no esta inicializada su valor actual es -1
La posicion 10 del arreglo no esta inicializada su valor actual es 4200261
La posicion 12 del arreglo no esta inicializada su valor actual es 1
La posicion 14 del arreglo no esta inicializada su valor actual es 4200137
La posicion 16 del arreglo no esta inicializada su valor actual es 3
La posicion 18 del arreglo no esta inicializada su valor actual es 21

Y la segunda vez que lo ejecute fue

Código:
La posicion 0 del arreglo no esta inicializada su valor actual es 4200160
La posicion 2 del arreglo no esta inicializada su valor actual es 21
La posicion 4 del arreglo no esta inicializada su valor actual es 12063600
La posicion 6 del arreglo no esta inicializada su valor actual es 1
La posicion 8 del arreglo no esta inicializada su valor actual es -1
La posicion 9 del arreglo no esta inicializada su valor actual es -1
La posicion 10 del arreglo no esta inicializada su valor actual es 4200261
La posicion 12 del arreglo no esta inicializada su valor actual es 1
La posicion 14 del arreglo no esta inicializada su valor actual es 4200137
La posicion 16 del arreglo no esta inicializada su valor actual es 3
La posicion 18 del arreglo no esta inicializada su valor actual es 21

Como ven algunos valores cambiaron y otros se mantiene similares..

Depende del programador inicializar la memoria correctamente, o por lo menos estar cociente de que es posible que tenga basura en la memoria.

Una forma de inicializar en 0 el arreglo mencioanado al momento de declararlo es:

Código
  1. int arreglo[20] = {0};

otra forma es utilizar las funciones para inicializar con X valor la memoria

Por ejemplo para inicializar con 0:

Código
  1. memset(arreglo,0,sizeof(int)*20);

Saludos!
86  Programación / Programación C/C++ / [Grafo] Base para el Algoritmo de Dijkstra en: 7 Agosto 2016, 02:20 am
Muy buen dia, les dejo la Base para realizar el algoritmo de dijkstra.

La imagen de ejemplo es la que esta en Wikipedia https://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra#/media/File:Dijkstra_Animation.gif

He aqui el código, el ejemplo que muestra que la ruta mas rápida de 1 a 5 tiene un peso total de 20

El código esta medianamente comentado y Imprime lo que esta haciendo en tiempo de ejecución.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. struct nodo {
  6. int id;
  7. //Dato del Nodo
  8. //struct data *datos; //En caso de apuntar a otro tipo de estrucutura
  9. //Variables auxiliar para el Grafo
  10. int peso_actual; //Contenedor del peso actual recorrido para llegar a este nodo
  11. struct nodo *mejor_ruta; //Indice de la mejor ruta para llegar al nodo de la ultima busqueda -1 para datos no inicializados
  12. int visitado; //Variable Entera de Visitado, almacena un numero Ramdon para deteminar si fue visitado o no por el proceso actual
  13. int out;
  14. int total; //Total de vetices conectados a reste Nodo
  15. int *aristas; //En caso de que existan distintos pesos para viajar al X vertice se ponen aqui
  16. struct nodo **vertices; //Distintos vertices que se pueden alcanzar desde este Nodo
  17. //int *vertices; //En caso de aplicar un nodo por indices a un arreglo de nodos
  18. };
  19.  
  20. struct grafo {
  21. int total; // Total de nodos validos en el grafo
  22. int disponible; // Total de espacios asignables en el grafo
  23. struct nodo **nodos; //tabla de acceso rapido a X nodo
  24. };
  25.  
  26.  
  27. struct grafo *add(struct grafo *grafo_actual,int origen, int peso, int destino);
  28. void add_nodo(struct grafo *grafo_actual,int origen,int peso,int destino);
  29. int dijkstra(struct nodo *nodo_a,struct nodo *nodo_b);
  30. int menor_ruta(struct grafo *grafo_actual,int A,int B);
  31.  
  32. int main() {
  33. struct grafo *grafo = NULL;
  34. /*
  35. struct grafo *add(struct grafo *grafo_actual,int origen, int peso, int destino);
  36. */
  37. grafo = add(grafo,1, 7,2);
  38. grafo = add(grafo,1, 9,3);
  39. grafo = add(grafo,1,14,6);
  40. grafo = add(grafo,6, 9,5);
  41. grafo = add(grafo,6, 2,3);
  42. grafo = add(grafo,3,11,4);
  43. grafo = add(grafo,3,10,2);
  44. grafo = add(grafo,2,15,4);
  45. grafo = add(grafo,4, 6,5);
  46. printf("Ruta %i\n",menor_ruta(grafo,1,5));
  47. return 0;
  48. }
  49.  
  50. int menor_ruta(struct grafo *grafo_actual,int A,int B) {
  51. return dijkstra(grafo_actual->nodos[A-1],grafo_actual->nodos[B-1]);
  52. }
  53.  
  54. struct grafo *add(struct grafo *grafo_actual,int origen, int peso, int destino) {
  55. /*
  56. Variables
  57. */
  58. int mayor = destino;
  59. struct nodo **temp = NULL;
  60. /*
  61. Inicializamos el grafo en caso de que no exista
  62. */
  63. if(grafo_actual == NULL) {
  64. grafo_actual = calloc(1,sizeof(struct grafo));
  65. }
  66. /*
  67. Determinamos el indice mayor
  68. */
  69. if(origen > destino) {
  70. mayor = origen;
  71. }
  72. /*
  73. Evaluamos si tenemos espacio suficiente
  74. */
  75. if(mayor > grafo_actual->disponible) {
  76. /*
  77. En caso de no tener espacio suficiente lo reasignamos
  78. */
  79. temp = calloc(mayor,sizeof(struct nodo*));
  80. if(temp) {
  81. if(grafo_actual->nodos) {
  82. memcpy(temp,grafo_actual->nodos,grafo_actual->disponible*sizeof(struct nodo*));
  83. free(grafo_actual->nodos);
  84. grafo_actual->nodos = NULL;
  85. }
  86. grafo_actual->nodos = temp;
  87. grafo_actual->disponible = mayor;
  88. }else {
  89. printf("Memory out!!\n");
  90. exit(0);
  91. }
  92. }
  93. /*
  94. Inicializamos los nodos en caso de que no existan
  95. */
  96. if(grafo_actual->nodos[origen-1] == NULL) {
  97. grafo_actual->nodos[origen-1] = calloc(1,sizeof(struct nodo));
  98. grafo_actual->nodos[origen-1]->id = origen;
  99. grafo_actual->total++;
  100. }
  101. if(grafo_actual->nodos[destino-1] == NULL) {
  102. grafo_actual->nodos[destino-1] = calloc(1,sizeof(struct nodo));
  103. grafo_actual->nodos[destino-1]->id = destino;
  104. grafo_actual->total++;
  105. }
  106.  
  107. /*
  108. Agregamos las Pesos y Aristas
  109. */
  110. add_nodo(grafo_actual,origen,peso,destino);
  111. add_nodo(grafo_actual,destino,peso,origen);
  112.  
  113. /*
  114. Retornamos el grafo_actual
  115. */
  116. return grafo_actual;
  117. }
  118.  
  119. void add_nodo(struct grafo *grafo_actual,int origen,int peso,int destino) {
  120. struct nodo *aux = grafo_actual->nodos[origen-1];
  121. aux->aristas = realloc(aux->aristas,sizeof(int)*(aux->total+1));
  122. aux->vertices = realloc(aux->vertices,sizeof(int)*(aux->total+1));
  123. aux->aristas[aux->total]  = peso;
  124. aux->vertices[aux->total] = grafo_actual->nodos[destino-1];
  125. printf("Uniendo nodos: (%i)--[%i]--(%i)\n",origen,peso,destino);
  126. aux->total++;
  127. }
  128.  
  129. int dijkstra(struct nodo *nodo_a,struct nodo *nodo_b) {
  130. struct nodo *inicio =NULL,*pivote = NULL;
  131. struct nodo **pendientes = NULL; //Arreglo de nodos no visitados a un.
  132. int i,j,total = 0;
  133. int visitado = rand(); //Variable aleatoria para determinar si un Nodo ya fue visitado por esta ocacion
  134. int peso_nuevo; //Variable temporal para evaluar cual es el menor peso al momento de visitar un nodo
  135. i = 0;
  136. pendientes = realloc(pendientes,sizeof(struct nodo*)*(total+1));
  137. pendientes[total] = nodo_a; //Nodo inicial a visitar el el nodo A que se recibio como parametr
  138. nodo_a->peso_actual = 0;
  139. total++;
  140. printf("Buscando ruta de %i a %i\n",nodo_a->id,nodo_b->id);
  141. while(i < total) {
  142. pivote = pendientes[i];
  143. printf("Procesando el nodo %i\n",pivote->id);
  144. if(pivote->out != visitado){ //Si aun no Agotamos el nodo actual
  145. printf("Visitando %i\n",pivote->id);
  146. j = 0;
  147. while(j < pivote->total ) {
  148. if(pivote->vertices[j]->out != visitado) {
  149. if(pivote->vertices[j]->visitado != visitado) {
  150. printf("El subnodo %i no a sido visitado\n",pivote->vertices[j]->id);
  151. pendientes = realloc(pendientes,sizeof(struct nodo*)*(total+1));
  152. pendientes[total] = pivote->vertices[j];
  153. total++;
  154. pivote->vertices[j]->peso_actual = pivote->peso_actual + pivote->aristas[j];
  155. pivote->vertices[j]->mejor_ruta = pivote;
  156. //printf("Ruta de %i a %i vale %i\n",nodo_a->id,pivote->vertices[j]->id,pivote->vertices[j]->peso_actual);
  157. }
  158. else { //Aqui ya lo visitamos, solo validaremos si la ruta pesa menos por este camino que por que se visito previamente
  159. printf("El subnodo %i ya a sido visitado\n",pivote->vertices[j]->id);
  160. //printf("El subnodo %i ya a sido visitado\n",pivote->vertices[j]->id);
  161. peso_nuevo =  pivote->peso_actual + pivote->aristas[j];
  162. printf("%i > %i ? %s\n",pivote->vertices[j]->peso_actual,peso_nuevo,(pivote->vertices[j]->peso_actual > peso_nuevo) ? "si":"no");
  163. if(pivote->vertices[j]->peso_actual > peso_nuevo) { // Si esta condicion se cumple es mas rapido llegar al nodo pivote->vertices[j] mediante el nodo pivote
  164. printf("Nueva mejor ruta a %i con peso de %i\n",pivote->vertices[j]->id,peso_nuevo);
  165. pivote->vertices[j]->peso_actual = peso_nuevo;
  166. pivote->vertices[j]->mejor_ruta = pivote;
  167. }
  168. printf("Ruta de %i a %i vale %i\n",nodo_a->id,pivote->vertices[j]->id,pivote->vertices[j]->peso_actual);
  169. //En caso de que el if no se cumpla es mas rapido llegar al nodo pivote->vertices[j] de la manera en la ya habia sido visitado previamente
  170. }
  171. }
  172. else {
  173. //printf("El subnodo %i ya a sido visitado\n",pivote->vertices[j]->id);
  174. printf("El subnodo %i ya a sido visitado\n",pivote->vertices[j]->id);
  175. peso_nuevo =  pivote->peso_actual + pivote->aristas[j];
  176. printf("%i > %i ? %s\n",pivote->vertices[j]->peso_actual,peso_nuevo,(pivote->vertices[j]->peso_actual > peso_nuevo) ? "si":"no");
  177. if(pivote->vertices[j]->peso_actual > peso_nuevo) { // Si esta condicion se cumple es mas rapido llegar al nodo pivote->vertices[j] mediante el nodo pivote
  178. printf("Nueva mejor ruta a %i con peso de %i\n",pivote->vertices[j]->id,peso_nuevo);
  179. pivote->vertices[j]->peso_actual
  180. = peso_nuevo;
  181. pivote->vertices[j]->mejor_ruta = pivote;
  182. }
  183. printf("Ruta de %i a %i vale %i\n",nodo_a->id,pivote->vertices[j]->id,pivote->vertices[j]->peso_actual);
  184. //En caso de que el if no se cumpla es mas rapido llegar al nodo pivote->vertices[j] de la manera en la ya habia sido visitado previamente
  185. }
  186. pivote->vertices[j]->visitado = visitado;
  187. j++;
  188. }
  189. pivote->out = visitado;
  190. printf("Nodo %i fuera!\n",pivote->id);
  191. }
  192. else {
  193. printf("El nodo %i ya esta fuera\n",pivote->id);
  194. }
  195. i++;
  196. }
  197. free(pendientes);
  198. return nodo_b->peso_actual;
  199. }
  200.  
87  Programación / Programación C/C++ / Optimizar tamaño de estructura de Datos en: 22 Julio 2016, 19:03 pm
Muy buen dia estoy buscando optimizar el tamaño de una estructura dada.

Habia visto que es posible especificar el tamaño de una variable a nivel de bits.

Código
  1. struct nodo {
  2. int id;
  3. unsigned char tabla[4][4];
  4. unsigned char x,y;
  5. struct nodo *aristas[4];
  6. };
  7.  

Quiero optimizar las variables tabla, x é y

Las variables solo tiene valores del 0 al 15, con lo cual 4 bits serian suficientes.

Habia visto que se puede especificar el tamaño de la variable ejemplo:

Código
  1. struct nodo {
  2. int id;
  3. unsigned char tabla[4][4];
  4. unsigned char x:4;
  5. unsigned char y:4;
  6. struct nodo *aristas[4];
  7. };
  8.  

Pero no se hacerlo para la variable tabla.

Saludos!
88  Programación / Programación C/C++ / ¿Existe algo mas eficiente que un arbol binario? en: 22 Julio 2016, 14:52 pm
El punto es en eficiencia de busqueda.

Estaba haciendo el grafo que propuse en

¿Imposible? Juego de Rompecabezas imposible

Casi todo marcha bien con el grafo a excepcion de la parte donde valido si un valor ya existe en el grafo. En el ultimo intento que hice llevaba maa de 140 mil nodos en el grafo y con  cada posible nodo nuevo tenia que validar la existencia de su valor en el grafo (Muy lento)

Posteriormente use arreglo de los nodos existentes (Igualmente lento).

Entonces voy a usar un Arbol Binario.

Y la pregunta es esa ¿Hay algo mas eficiente que un arbol binario?

Lo pregunto por que no me he actualizado en mas de 5 años en estructuras de datos, estaba contemplando una tabla hash pero nunca la estudie y dudo que sea mas eficiente que un arbol binario en lo que se refiere a insercion y busqueda de nodos.

Saludos
89  Programación / Programación C/C++ / ¿Imposible? Juego de Rompecabezas imposible en: 21 Julio 2016, 16:57 pm
Bueno les dejo aquí el código del Juego del imposible...

Se juega usando las teclas w,a,s,d como si fueran las flechas del teclado, esta seguida de un enter.

El reto "imposible" es definir dada la matriz inicial llegar a su forma inversa:

Código:
	[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][  ]

Código:
	[15][14][13][12]
[11][10][ 9][ 8]
[ 7][ 6][ 5][ 4]
[ 3][ 2][ 1][  ]


Y si, es IMPOSIBLE

Código
  1. /*
  2. Juego del Imposible | Programación en C
  3.  
  4. [ 1][ 2][ 3][ 4]
  5. [ 5][ 6][ 7][ 8]
  6. [ 9][10][11][12]
  7. [13][14][15][  ]
  8.  
  9. w
  10. asd
  11.  
  12. Contacto
  13. Twitter: @albertobsd
  14. Email: alberto.bsd@gmail.com
  15. */
  16. #include<stdio.h>
  17.  
  18. void imprimir_tablero();
  19.  
  20. int tabla[4][4];
  21. int x= 3,y =3;
  22.  
  23. int main() {
  24. int i = 0,j =0,contador = 1;
  25. char caracter,enter;
  26. //Inicializar la tabla o matriz de juego
  27. while(i < 4) {
  28. j = 0;
  29. while(j < 4) {
  30. tabla[i][j] = contador;
  31. //printf("[%2i]",tabla[i][j]);
  32. j++;
  33. contador++;
  34. }
  35. printf("\n");
  36. i++;
  37. }
  38. tabla[y][x] = 0;
  39. imprimir_tablero();
  40. do {
  41. caracter = getchar();
  42. enter = getchar();
  43. switch(caracter) {
  44. case 'w': //arriba
  45. if(y <= 2) {
  46. //Movimiento de ficha
  47. tabla[y][x] = tabla[y+1][x];
  48. tabla[y+1][x] = 0;
  49. imprimir_tablero();
  50. y++;
  51. }
  52. else {
  53. printf("Fuera de los limites\n");
  54. }
  55. break;
  56. case 's': //abajo
  57. if(y >= 1) {
  58. //Movimiento de ficha
  59. tabla[y][x] = tabla[y-1][x];
  60. tabla[y-1][x] = 0;
  61. imprimir_tablero();
  62. y--;
  63. }
  64. else {
  65. printf("Fuera de los limites\n");
  66. }
  67. break;
  68. case 'a': //izquierda
  69. if(x <= 2) {
  70. //Movimiento de ficha
  71. tabla[y][x] = tabla[y][x+1];
  72. tabla[y][x+1] = 0;
  73. imprimir_tablero();
  74. x++;
  75. }
  76. else {
  77. printf("Fuera de los limites\n");
  78. }
  79.  
  80. break;
  81. case 'd': //derecha
  82. if(x >= 1) {
  83. tabla[y][x] = tabla[y][x-1];
  84. tabla[y][x-1] = 0;
  85. imprimir_tablero();
  86. x--;
  87. }
  88. else {
  89. printf("Fuera de los limites\n");
  90. }
  91. break;
  92. case '0': //Salida
  93. break;
  94. default:
  95. printf("Caracter Incorrecto");
  96. break;
  97. }
  98. printf("Caracter : %c\n",caracter);
  99. }while(caracter != '0');
  100. return 0;
  101. }
  102.  
  103. void imprimir_tablero() {
  104. int i = 0,j;
  105. while(i < 4) {
  106. j = 0;
  107. while(j < 4) {
  108. if(tabla[i][j] != 0) {
  109. printf("[%2i]",tabla[i][j]);
  110. }
  111. else {
  112. printf("[  ]");
  113. }
  114. j++;
  115. }
  116. printf("\n");
  117. i++;
  118. }
  119. }


Video:



Dejo también un Documento donde se explica de forma matemática por que es imposible el acomodo invertido dada una posición inicial.

http://miscelaneamatematica.org/Misc40/Campos_r.pdf

Aclaro que ese documento no es mio, lo realizaron los autores ahí señalados en el mismo.

Saludos!
90  Foros Generales / Foro Libre / Logran engañar a Pokemon Go por falta de validacion de certificado en: 10 Julio 2016, 04:48 am
En la cuenta de Twitter de Den Delimarsky se puede leer que la aplicación por falta de validacion de certificado es vulnerable a ser engañada mediante un proxy y con llamadas a la API es posible navegar en el mundo de pokemon go desde la comodidad del hogar y sin los peligros de ser atropellado en la calle.

@DennisCode

https://twitter.com/DennisCode/status/751592223330881536

Citar
Pokemon Go... get yourself whatever you want because I can hook directly into the APIs with mitmproxy. No cert check

Saludos!
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines