Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - _TTFH_3500

#11
Programación C/C++ / Desofuscar codigo
22 Noviembre 2018, 03:17 AM
Queria compartir el siguiente codigo que genera un Donut 3D (solo funciona en la terminal de Linux o la de MinGW) y mi intento por desofuscarlo.


             k;double sin()
         ,cos();main(){float A=
       0,B=0,i,j,z[1760];char b[
     1760];printf("\x1b[2J");for(;;
  ){memset(b,32,1760);memset(z,0,7040)
  ;for(j=0;6.28>j;j+=0.07)for(i=0;6.28
>i;i+=0.02){float c=sin(i),d=cos(j),e=
sin(A),f=sin(j),g=cos(A),h=d+2,D=1/(c*
h*e+f*g+5),l=cos      (i),m=cos(B),n=s\
in(B),t=c*h*g-f*        e;int x=40+30*D*
(l*h*m-t*n),y=            12+15*D*(l*h*n
+t*m),o=x+80*y,          N=8*((f*e-c*d*g
)*m-c*d*e-f*g-l        *d*n);if(22>y&&
y>0&&x>0&&80>x&&D>z[o]){z[o]=D;;;b[o]=
".,-~:;=!*#$@"[N>0?N:0];}}/*#****!!-*/
  printf("\x1b[H");for(k=0;1761>k;k++)
   putchar(k%80?b[k]:10);A+=0.04;B+=
     0.02;}}/*****####*******!!=;:~
       ~::==!!!**********!!!==::-
         .,~~;;;========;;;:~-.
             ..,--------,*/

Código (cpp) [Seleccionar]
#include <math.h>
#include <stdio.h>
#include <string.h>

#define PI 3.14
#define HEIGHT 22
#define WIDTH 80

const float R2 = 2; // Distancia del centro del Toroide a la mitad: (   )   |---(-. )
const char* illumination = ".,-~:;=!*#$@";

int main(){
float zbuffer[HEIGHT][WIDTH];
char framebuffer[HEIGHT][WIDTH];
float A = 0, C = 0; // Ejes X y Z sobre los que rota el Toroide
printf("\x1b[2J"); // Borrar Pantalla

while (true) {
memset(zbuffer, 0.0, HEIGHT * WIDTH * sizeof(float)); // Fondo a distancia infinita
memset(framebuffer, ' ', HEIGHT * WIDTH * sizeof(char)); // Pantalla vacia

for (float B = 0; B < 2 * PI; B += 0.07) // Eje Y sobre el que rota el Toroide
for (float phi = 0; phi < 2 * PI; phi += 0.02) { // Eje del toroide (perpendicular al centro)
float
sin_phi = sin(phi),
cos_phi = cos(phi),
sinA = sin(A),
cosA = cos(A),
sinB = sin(B),
cosB = cos(B),
sinC = sin(C),
cosC = cos(C),
// Solo otro par de valores que precalculamos
h = cosB + R2,
t = h * sin_phi * cosA - sinA * sinB,
// Distancia inversa del observador al centro del Toroide
D = 1 / (h * sin_phi * sinA + cosA * sinB + 5);
int
// Posicion de la pantalla donde se renderiza un punto del Toroide
x = 40 + 30 * D * (h * cos_phi * cosC - sinC * t),
y = 12 + 15 * D * (h * cos_phi * sinC + cosC * t),
/* La luz proviene de arriba y atras del observador (0, 1, -1)
   que tiene modulo 2, hay 12 tonos de luz: 0..11, 11 / sqrt(2) = 8
   L = 8 * (y - z); */
L = 8 * ((sinA * sinB - sin_phi * cosA * cosB) * cosC -
sin_phi * sinA * cosB - cosA * sinB - cos_phi * cosB * sinC);
// LAS MATRICES TIENEN INDICES i VERTICAL Y j HORIZONTAL
// MIENTRAS QUE LAS GRAFICAS TIENEN x HORIZONTAL E y VERTICAL
if (x > 0 && x < WIDTH && y > 0 && y < HEIGHT && zbuffer[y][x] < D) {
/* Si el punto actual es mas cercano a la pantalla que alguno calculado
   previamente entonces sobrescribir al anterior */
if (L < 0) L = 0; // Sombra
framebuffer[y][x] = illumination[L];
zbuffer[y][x] = D; // Guardar profundidad
}
}
printf("\x1b[H"); // Mover el cursor a la esquina superior izquierda
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++)
putchar(framebuffer[i][j]); // Mostrar Toroide
putchar('\n');
}
A += 0.04;
C += 0.02;
}
return 0;
}
#12
Programación C/C++ / Re: duda con función en c
13 Noviembre 2018, 12:26 PM
Código (cpp) [Seleccionar]
int calcular(int a, char op, int b) {
  int result;
  switch(op) {
    case '+':
      result = a + b;
      break;
\\ Agregar los demás casos
    default:
      printf("Operación no válida\n");
      assert(false);
      break;
  }
  return res;
}


int c = calcular(2, '+', 2);
assert(c == 4);
#13
Cita de: El_Andaluz en  6 Noviembre 2018, 04:35 AM
Hostia que guay eso de contar el tiempo en Star Wars y el tamaño en campos de fútbol.

Hay un YouTuber que cuenta masa, distancia y volumen en Toyota Corolla
#14
GNU/Linux / Gestor de descargas para Linux
5 Noviembre 2018, 15:18 PM
Busco un gestor de descarga para Linux que sea portable (no tengo permisos de root para instalarlo) sin interfax grafica (que se ejecute desde terminal) y que me permita descargar de servidores como Mega, 1fichier o Google Drive.
Algo como MiPony pero que pueda pasar los links desde la terminal.
#15
Lo consegui:
Código (cpp) [Seleccionar]

uint buscarIndice(const uint* A, uint i, uint c) {
uint l = 1, r = i;
while (l <= r) {
uint m = (l + r) / 2;
if (A[m - 1] <= c) {
if (A[m] <= c)
l = m + 1;
else
return m;
} else
r = m - 1;
}
return 0;
}
#16
El siguiente codigo se ejecuta en orden lineal con respecto al tamaño del arreglo A, mi pregunta es cómo hacer dicho codigo más eficiente, digamos O(log n), la idea que tengo es hacer busqueda binaria, es decir, dividir A a la mitad ((i-1) / 2) y buscar en cada mitad.
Pero:

  • Si encuentro un i > 0 en la primera mitad deberia buscar en la segunda. (podria existir un i mayor)
  • Si no encuentro un i > 0 en la segunda mitad debería buscar en la primera si no lo hice antes. (ya que podria existir un i > 0)
Por lo que sigue siendo O(n) en el peor caso, quiza no sea posible implementarlo en O(log n)

Código (cpp) [Seleccionar]
/* A[1..n] esta ordenado de menor a mayor
* Devuelve el mayor indice i' menor o igual a i tal que A[i'] <= c
* o cero si no se encuentra. Cota superior asintotica: O(n)
*/
void buscarIndice(const uint* A, uint &i, const uint c) {
while (i > 0 && A[i] > c)
i--;
}


El siguente codigo es O(n^2), lo que si es seguro es que como A está ordenado es posible implementarlo en O(n log n) (La demostración queda a cargo del lector) ¿Alguna idea de por donde empezar?
Código (cpp) [Seleccionar]
for (uint j = 1; j <= n; j++) {
uint i = j; // No es ortodoxo modificar j
buscarIndice(A, i, c);
hacerAlgoUtilCon(i);
}
#17
Dado un arreglo desordenado con n elementos, el siguiente código retorna una permutación tal que al aplicarla al arreglo original los elementos quedan ordenados.

Código (cpp) [Seleccionar]
#include <stdio.h>

typedef unsigned int uint;

void Swap(int &a, int &b) {
int t = a;
a = b;
b = t;
}

int* BubbleSort(const int* A, uint n) {
int* P = new int[n];
for (uint i = 0; i < n; i++)
P[i] = i;
bool ordenado;
do {
ordenado = true;
for (uint i = 1; i < n; i++)
if (A[P[i-1]] > A[P[i]]) {
Swap(P[i-1], P[i]);
ordenado = false;
}
} while (!ordenado);
return P;
}

int main() {
uint n;
printf("Ingrese la cantidad de numeros: ");
scanf("%u", &n);
printf("Ingrese los numeros:\n");
int* A = new int[n];
for (uint i = 0; i < n; i++)
scanf("%d", &A[i]);
int* P = BubbleSort(A, n);
printf("Los numeros ordenados son:\n");
for (uint i = 0; i < n; i++)
printf("%d ", A[P[i]]);
printf("\n");
delete[] A;
delete[] P;
return 0;
}


Pero lo hace en tiempo O(n^2), en cambio el siguiente codigo: https://www.geeksforgeeks.org/merge-sort/ retorna el arreglo ordenado en tiempo O(n log(n))
¿Cómo puedo modificar MergeSort para obtener una permutación ordenada en lugar de ordenar el propio arreglo?

#18
Si buscas algo en Google y vas al fondo de la pagina verás algo como:

CitarPaís 00000, Direccion aproximada - De tu dirección de Internet - Usar la ubicación precisa  - Más información

Haz click en "Usar la ubicación precisa" y te pedira acceso a tu ubicación, dale a Rechazar.

Si no funciona, desde Firefox ve a Herramientas*->Opciones->Idioma
en "Seleccione su idioma preferido para mostrar las páginas" click en Seleccionar...
Busca "Español [ES]" en el cuadro de dialogo y click en Agregar, luego en Subir para que aparezca arriba del todo, click en Aceptar.
Ve a Google y aparecerá: "Ofrecido por Google en: Español" haces click en Español y listo.

*"Herramientas" es el menú desplegable con un icono de tres rayas debajo del boton de cerrar, también puedes pulsar la tecla Alt y usar la barra superior.
#19
Basicamente:

http://southpark.cc.com/episodios-en-espanol/s21e03-especial-de-feriado


"Si una persona tiene descendencia afroamericana no pueden tacharlo de racista"
No tiene ningún sentido, pero hay gente que piensa así.
#20
Pude solucionarlo, marque la particion como activa pero me salia un mensaje de error:
Falta bootmgr Ctrl+Alt+Supr para reiniciar

Copie los archivos bootmgr y bootmgr.efi desde C:\Windows\Boot\EFI|PCAT  a C:\
Luego me salia el siguiente error:
The Boot Configuration Data for your PC is missing or contains errors. \BOOT\BCD

Inicie desde un LiveCD y copie la partición System Reserved a C:\ et Voilà! todo funciona sin problemas.

El USB de instalación de Windows 7 no me detectaba la instalación y por ende no me dejaba repararla.