Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h> /* srand, rand */
- #include <time.h> /* time */
- #include <iostream>
- #include "Locker.h"
- /*
- La clase Locker permite crear objetos casilleros
- - cada casillero tiene una contraseña secreta, que se crea al momento de crear el objeto.
- - la contraseña tiene 10 digitos, y esta en binario
- - la contraseña del locker es privada, y la clase solo cuenta con un método
- - el método open recibe un numero, y devuelve cuantos digitos se pudieron emparejar con el password
- - 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
- - Si usted ingresa el password correcto el metodo open devolver 10.
- - 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.
- Escriba un algoritmo que imprima por consola la contraseña del locker
- Cada tarea vale 0.5 puntos.
- El que logre desifrar la contraseña del candado con menos penalidad recibira un chocolate.
- Para definir el ganador, probaremos el algoritmo con 100 candados, el que logre abrir 100 candados con menos penalidad ganara el premio.
- */
- int pow(int n, int i)
- {
- if(i == 0 )return 1;
- if(i == 1 )return n;
- int k = n;
- for(int j = 1 ; j < i ; j++)
- k *= n;
- return k;
- }
- int Dec2Bin(int n)
- {
- int bin = 0;
- while(n>0)
- {
- if( (n % 2) == 0)
- bin *= 10;
- else {
- bin *= 10;
- bin += 1;
- }
- n /= 2;
- }
- return bin;
- }
- int main() {
- srand (time(NULL));
- Locker* locker=new Locker(); //inicializa el Locker
- int before = locker->open(0); //Pruebo con 0000000000
- int n = 0; //Guardo la solucion en decimal en n
- for(int i = 0 ; i < 10 ; i++) //recoro cada bit
- {
- int actual = locker->open(Dec2Bin(n+pow(2,9-i))); //Pruebo cambiando el bit actual que seria el bit 9
- if(actual > before) //si tengo mas matches que la anterior, actualizo la solucion en decimal, y mis suma de matches
- {
- before = actual;
- n +=pow(2,9-i);
- }
- //cout<<i<<" "<<" "<<locker->open(Dec2Bin(n))<<" "<<Dec2Bin(n)<<endl;
- }
- cout<<Dec2Bin(n)<<endl;
- cout<<locker->score();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement