Rastreador P61447


Statement
 

pdf   zip

thehtml

Un robot rastreador es aquel que intenta seguir una línea. Uno de los diseños más comunes consiste en tener una fila de sensores situada delante del robot, perpendicular a la dirección de la marcha. Asumiendo que nuestros sensores son binarios (cada sensor nos da un 0 si no detecta línea, y un 1 si sí la detecta), una lectura como la siguiente

1000111000

querría decir que disponemos de 10 sensores, y que el sensor de más a la izquierda y tres de los sensores del medio han detectado línea.

En este problema te pedimos que programes un algoritmo sencillo de rastreo de líneas, que a partir de las lecturas de esta fila de sensores decida cómo debe girar el robot. En concreto, sea x el primer sensor empezando por la derecha que detecte línea, y sea n el número total de sensores (en el ejemplo anterior, n=10, x=4). Tu programa deberá escribir un número M entre el −90 (giro máximo a la izquierda) y el 90 (giro máximo a la derecha) en función de los valores de x y n, según la fórmula

M = 90 − 180
x−1
n−1
. 

En el ejemplo anterior se tendría, pues, M=30. Si el valor resultante de M no es entero, redondéalo hacia el 0.

Entrada

En una línea, el número de casos 0≤ k≤ 1000, seguido de k líneas, cada una de las cuales contiene una lectura de la fila de sensores. Las lecturas se te pueden pasar de dos formas distintas: en binario, o codificadas en decimal. Una lectura en binario son siempre 10 bits (0 o 1), donde siempre se cumple que el bit de más a la izquierda tiene el valor 1. Una lectura en decimal es un número del 2 al 999999999=109−1 que, al ser pasado a binario (base 2), produce la lectura de los sensores. Por ejemplo, el número decimal 214 se corresponde con el número binario 11010110, puesto que

     
214= 107· 2 = (53· 2 + 1)· 2 = (26· 2 +1)· 22 + 2 = 13· 24+22 + 2 = (6· 2+1)· 24+22+2          
 = 3· 26+24+22+2 = (1· 2+1)· 26 +24 +22+2= 27 + 26 +24 + 22 + 2 = 11010110b.          

Salida

Escribe tantas líneas como casos, con la dirección que debe seguir el robot. En caso que la entrada sea binaria, siempre tendrás n=10. Si la entrada es en decimal, debes asumir que n és el mínimo número de dígitos binarios que necesitas para representar el número dado (n=8 en el ejemplo anterior).

Puntuación

  • Test1:  ‍50 Puntos ‍

    Resolver varios casos donde todas las entradas son en binario.

  • Test2:  ‍50 Puntos ‍

    Resolver varios casos de todo tipo.

Public test cases
  • Input

    6
    1000111000
    1000000000
    1010000000
    1000111001
    1000000001
    1000000110
    

    Output

    30
    -90
    -50
    90
    90
    70
    
  • Input

    6
    214
    216
    384
    258
    123456788
    987654320
    

    Output

    64
    12
    -67
    67
    76
    65
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++