Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <stdlib.h>     /* srand, rand */
  2. #include <time.h>       /* time */
  3.  
  4. #include <iostream>
  5. #include "Locker.h"
  6. /*
  7. La clase Locker permite crear objetos casilleros
  8. - cada casillero tiene una contraseña secreta, que se crea al momento de crear el objeto.
  9. - la contraseña tiene 10 digitos, y esta en binario
  10. - la contraseña del locker es privada, y la clase solo cuenta con un método
  11. - el método open recibe un numero, y devuelve cuantos digitos se pudieron emparejar con el password
  12. - Por ejemplo, si el password es 1111100011 y uste intento abrir el casillero con el password  1111000111 el metodo open devolvera  8, ya que solo 8 digitos hicieron match
  13. - Si usted ingresa el password correcto el metodo open devolver 10.
  14. - Por cada ves que intenta abrir el locker, se considerara una penalidad. Es decir, si usted logra abrir el candado al quinto intento, la penalidad sera 4, ya que fallo 4 veces.
  15.  
  16. Escriba un algoritmo que imprima por consola la contraseña del locker
  17.  
  18. Cada tarea vale 0.5 puntos.
  19.  
  20. El que logre desifrar la contraseña del candado con menos penalidad recibira un chocolate.
  21. Para definir el ganador, probaremos el algoritmo con 100 candados, el que logre abrir 100 candados con menos penalidad ganara el premio.
  22.  
  23. */
  24.  
  25. int pow(int n, int i)
  26. {
  27.   if(i == 0 )return 1;
  28.   if(i == 1 )return n;
  29.   int k = n;
  30.   for(int j = 1  ; j < i ; j++)
  31.   k *= n;
  32.   return k;
  33. }
  34.  
  35. int Dec2Bin(int n)
  36. {
  37.   int bin = 0;
  38.   while(n>0)
  39.   {
  40.     if( (n % 2) == 0)
  41.       bin *= 10;
  42.     else {
  43.       bin *= 10;
  44.       bin += 1;
  45.     }
  46.     n /= 2;
  47.   }
  48.  
  49.   return bin;
  50. }
  51.  
  52. int main() {
  53.   srand (time(NULL));
  54.  
  55.   Locker* locker=new Locker();  //inicializa el Locker
  56.  
  57.   int before = locker->open(0); //Pruebo con 0000000000
  58.   int n = 0;    //Guardo la solucion en decimal en n
  59.     for(int i = 0 ; i < 10 ; i++)   //recoro cada bit
  60.     {
  61.       if(before == 10) break;
  62.       int actual = locker->open(Dec2Bin(n+pow(2,9-i)));  //Pruebo cambiando el bit actual que seria el bit 9
  63.       if(actual > before) //si tengo mas matches que la anterior, actualizo la solucion en decimal, y mis suma de matches
  64.       {
  65.         before = actual;
  66.         n +=pow(2,9-i);
  67.       }
  68.       //cout<<i<<" "<<" "<<locker->open(Dec2Bin(n))<<" "<<Dec2Bin(n)<<endl;
  69.     }
  70.     //Muestro resultado
  71.     cout<<Dec2Bin(n)<<endl;
  72.     cout<<locker->score();
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement