2577 - Get Bit

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerință

Se dau mai multe perechi de forma număr, bit. Afișați pentru fiecare pereche valoarea bitului corespunzător din reprezentarea internă pe 64 de biți a numărului dat.

Date de intrare

Programul citește de la tastatură numărul T, iar apoi T linii care conțin, fiecare, câte două numere separate prin spațiu n și b cu semnificația că se cere valoarea bitului de pe poziția b din reprezentarea internă a numărului n.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran, neseparate prin spațiu, cele T valori, determinate, în ordinea dată. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări

  • numerele n sunt memorate cu tipul de date pe 64 de biți, cu semn
  • numărul b este natural, cuprins între 0 și 63, inclusiv

Exemplul 1

Intrare
2
6 0
5 2
Ieșire
Datele introduse corespund restricțiilor impuse.
0 1

Exemplul 2

Intrare
3
7 1
15 2
21 0
Ieșire
Datele introduse corespund restricțiilor impuse.
1 1 1

Rezolvare ver. 1

def validare(T, n, b):
    # Funcție de validare a datelor de intrare
    # Verificăm dacă T este între 0 și 1000, iar n și b conțin numere între 0 și 2^63 - 1 și respectiv 0 și 63
    return 0 <= int(T) <= 1000 and all(0 <= int(num) <= 2 ** 63 - 1 for num in n) and all(
        0 <= int(bit) <= 63 for bit in b)


def getbit(T, n, b):
    # Funcție pentru a obține valoarea bitului corespunzător din reprezentarea internă a numărului
    for i in range(T):
        bit_val = (n[i] & (1 << b[i])) >> b[i]
        print(bit_val, end=" ")


if __name__ == "__main__":
    # Funcția principală a programului
    T = input("Introduceți numărul de perechi de număr, bit: ")
    n = []
    b = []
    for i in range(int(T)):
        # Citirea datelor de intrare și adăugarea lor în liste separate pentru n și b
        pair = input("Introduceți valorile n și b separate prin spațiu pentru perechea {}: ".format(i + 1)).split()
        n.append(int(pair[0]))
        b.append(int(pair[1]))

    if validare(T, n, b):
        # Verificăm dacă datele de intrare corespund restricțiilor impuse
        print("Datele introduse corespund restricțiilor impuse.")
        getbit(int(T), n, b)
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")