Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ganar Dinero,siendo Un Programador De Videojuegos

Iniciado por Guirone, 08 de Diciembre de 2005, 04:28:31 PM

« anterior - próximo »

zupervaca

Cita de: "seryu"string.rotate(180) tambien valdria entonces.
te falto el string.flip(FLIP_VERTICAL); :lol:  

seryu

 realmente, si no puedes usar memoria intermedia, la inversa de string es string. Lo importante no es el orden en el que se guarde, si no el orden en el que se imprima.. Nadie puede decirte que un buffer del tipo {A, B, C} vaya a imprimir en pantalla ABC, eso lo decide tu programa  :P  

Ruben

 Hi,
Citar
nvertir una cadena sin usar memoria intermedia de ningun tipo... ¿alguien puede poner el algoritmo por ahí?

Explicación usando XoR:
A = x
B = y
donde A y B son los elementos que quieres intercambiar y x e y los valores que toman.
Ademas se supone que x xor x => se eliminan las x

1)
A = A xor B = x xor y

2)
B = A xor B = x xor y xor y = x

3)
A = A xor B = x xor y xor x = y

por lo tanto A = y , B = x.


char* reverse(char* s){
  int i = 0;
  int j = 0;

  for(i = 0, j = strlen(s) - 1; i < strlen(s); ++i, --j){
     s[i] ^= s[j];
     s[j] ^= s[i];
     s[i] ^= s[j];
  }
  return s;
}



Creo que deberia ser asi.

Citar
realmente, si no puedes usar memoria intermedia, la inversa de string es string. Lo importante no es el orden en el que se guarde, si no el orden en el que se imprima.. Nadie puede decirte que un buffer del tipo {A, B, C} vaya a imprimir en pantalla ABC, eso lo decide tu programa tongue.gif
No se que quieres decir con esto. :huh:

Un saludo,
-Ruben-

Ruben

 Hi,
no se por que la pantalla del "editar mensaje" me hace cosas extrañas asi tendre que meterlo en este post.

Seryu ya he pillado lo que has dicho , mas vale tarde que nunca (nooo)  (nooo)

Teoricamente el problema te pide que devuelvas/almacenes  la cadena invertida en la misma memoria que te pasen. Si no tambien se podria hacer recursivamente sin memoria auxiliar con printf´s "al comienzo de la vuelta atras".

Un saludo,
-Rubén-

seryu

 A lo que me refiero es que memoria vas a usar hagas lo que hagas. Por ejemplo en tu código se crean 2 ints mas lo que esté generando el srtlen. Incluso aunque solo fuesen operaciones, estas son pasadas a la cpu vía instrucciones, ósea que la memoria al fin y al cabo, se usa siempre.

Por otro lado esa implementación no abarca todos los casos, ya que si la cadena es mayor del rango de un int, tu función casca.

Odio cuando intentan ser específicos en la pregunta de un examen y resulta que no lo es en absoluto. Me dirás que se supone... pero si el lector tiene que suponer algo de una pregunta que pretende no dejar lugar a dudas, mal empezamos el ejercicio.

Es como en un examen de la universidad donde un profesor que no sabia que preguntar puso preguntas "trampa" en plan elegir una resolucion real de windows:

a) 300x100
B) 600x800
c) ninguna de las anteriores

Marcar la B, ya que en ningún lado se especifica si es alto por ancho o viceversa, y dártela como mala. Ir a reclamar y que la den por buena. Es un ejemplo real aunque muy extremo, de lo que me he encontrado en exámenes de programación, incluido en los ciclos superiores.

Faltan informáticos de verdad, no gente que sabe usar el java como el que aprendió a usar photoshop y se sabe los menús de memoria, pero el día que le cambien un nombre o tenga que usar otro programa de retoque, no sabrá porque realmente desconoce la lógica y el proceso, solo sabe la acción final. No sabe abstraerse en conceptos.

Lo bueno de la programación es cuanto se parece a las matematicas, y cuanto no. Para pasarnos una buena tarde de charla de teoría y de curiosidades de los compiladores y de como se organiza la memoria en un x86 o en un sh4, o para tratar de ser prácticos y hacer un puñetero videojuego.


zxs

 
Citarc) Al pasar la prueba anterior, ingeniería inversa de un fichero binario. Tienes que sacar todo lo que puedas de un formato. Te dan un editor hexadecimal y ale, a currar.



mira, pues esto esta divertido, teniamos un compañero y yo que leer unos datos de entrada para un programa de dibujo
y como las versiones nuevas las sacaban cada + de 6 meses, pues nada: editor hexadecimal y a correr

lo cojonudo es que hicimos un exportador/importador mejor que el que el programa sacó a los 6 meses


por cierto puestos a decir chorradas, podemos hacer un documento del estilo:



sueldo_horas_extra = numero_horas_extra NAND 0
sueldo!=numero_horas*euros/hora
sueldo=1 * (-10)e(numero_horas)
posibilidades_de_contratacion=0
(es lo que me ha venido a la cabeza al leer lo de
CitarLuego había que pasar la pregunta de cuánto quieres ganar (esa fue la peor).
)

zupervaca

 la forma de evitar todos los problemas que decis en el otro post es esta, no obstante cuando se invierte una cadena no veo correcto modificar la misma, lo correcto es que se le pase a una funcion una cadena de entrada y que esta devuelva una nueva cadena invertida

<!--POST BOX--> = \ 0 (sin el espacio del medio)

#include <string.h>
#include <conio.h>
#include <stdio.h>

void StringInv( char *psz )
{
char *pszE = psz;
while( *pszE != '<!--POST BOX-->' ) pszE++;
pszE--;
while( psz < pszE )
{
 *psz ^= *pszE;
 *pszE ^= *psz;
 *psz ^= *pszE;
 psz++;
 pszE--;
}
}

void main()
{
char *psz = new char[10];
memcpy( psz, "Hola mundo", 10 );
psz[10] = '<!--POST BOX-->';

printf( psz );
printf( "\n" );
getch();
StringInv( psz );
printf( psz );
getch();
}

Pogacha

 
Cita de: "Jikan"
Citar
What does this code block do?

{
    u_int *source, *end;
    u_int addr_printf, addr_scePrintf;
    int    counter = 0;
    
    addr_printf     = ((u_int) printf & 0xFFFFFF) / 4;
    addr_scePrintf  = ((u_int) scePrintf & 0xFFFFFF) / 4;
    
    source  = (u_int *) sceGsSyncPath;
    end     = source + 195;
    
    while (source < end)
    {
        if ((*source & 0xFF000000) == 0x0C000000)
        {
            // Function call...
            if ((*source & 0xFFFFFF) == addr_printf)
            {            
                *source = 0x0C000000 | addr_scePrintf;
                counter++;
            }
        }
       
        source++;
    }
}

   Vaya, vaya, PS2 en un test. ¿Te harán firmar un NDA antes de darte las preguntas?

   NB: Lo de usar el carácter de terminación de la cadena, según el tío que hacía la entrevista, "no vale". Pero puso cara de sorpresa :D
Es obvio que esta intercambiando una funcion por otra en una parte de la memoria ...

Que me gane ?!!!  :lol:

EDIT: Otra cosa ... meter un strlen como comprobante de un bucle es mala jugada, pues acabas de llevar tu algoritmo a N^2 .

Saludos.

Ruben

 Hi,
a la perfección se tiende con la ganancia de experiencia  (ole)

Gracias por las revisiones de codigo. Tengo que pensar lo del N^2 porque nunca se me habia pasado por la cabeza (nooo)  (nooo) , aunque realmente tampoco me pense mucho la condicion de parada.Simplemente estaba mas atento al algoritmo en si que a como implementarlo....  :(

Por cierto, sigo diciendo que es un problema con ciertas suposiciones , sin entrar a si es un buen metodo para escoger a gente en entrevistas de trabajo. A mi personalmente, me van mas las preguntas generales . :rolleyes:

Un saludo,
Rubén  

synchrnzr

 Ahora sí que ya se ha ido esto a la parra (nooo)

sync

Buffon

 jaja como se ha distorsionado el tema del thread.

Si quieres entrar en una empresa haz un montón de código y presentalo como pruebas.

Repoker

 Me veo incapaz de hacer una entrevista así. Le preguntaría al entrevistador qué es lo que pretende que demuestre exactamente al implementarle esa función. Lo veo totalmente fuera de lugar. No creo que tenga nada que ver con el trabajo que desarrollaras en el futuro, si es que te contratan. Por otra parte, si tienes que dedicarte a hacer funciones como esa todo el día en el curro, maldita sea la gracia.

zupervaca

 realmente en una prueba de este estilo lo que ven es si sabes manejar operadores, punteros y strings muy por encima, al final estas cosas no se usan por que realmente no esta demostrado que sea mas rapido que usar el sistema clasico, todo depende del compilador ya que ... ¿cuantos usais el operador xor para inicializar una variable a cero? me imagino que nadie, en cambio cuando escribimos en asm si que lo hacemos

synchrnzr

 
Citar¿cuantos usais el operador xor para inicializar una variable a cero? me imagino que nadie, en cambio cuando escribimos en asm si que lo hacemos

Me parece que en tu ejemplo estás confundiendo variable por registro del procesador :P

sync






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.