qc.reset(3);
qc.discard();
var a = qint.new(1, 'alice');
var fiber = qint.new(1, 'fiber');
var b = qint.new(1, 'bob');

function random_bit(q) {
    q.write(0);
    q.had();
    return q.read();
}

// Wygeneruj dwa losowe bity
var send_had = random_bit(a);
var send_val = random_bit(a);

// Przygotuj kubit Alice
a.write(0);
if (send_val // Użyj losowego bitu do ustawienia wartości
    a.not();
if (send_had) // Użyj losowego bitu do zastosowania HAD lub not
    a.had();
qc.nop();
qc.label('');

// Wyślij kubit!
fiber.exchange(a);

// Aktywuj szpiega
var spy_is_present = true;
if (spy_is_present)
{
    var spy_had = 0;
    
    if (spy_had)
        fiber.had();
    var stolen_data = fiber.read();
    fiber.write(stolen_data);
    if (spy_had)
        fiber.had();
}

// Otrzymaj kubit!
var recv_had = random_bit(b);
fiber.exchange(b);
if (recv_had)
    b.had();
var recv_val = b.read();

// Teraz Alice wysyła maila do Boba, żeby
// podać mu swoje ustawienia had i wartość.
// Jeśli ustawienia had się zgadzają, a
// wartość nie, mają szpiega!
if (send_had == recv_had)
    if (send_val != recv_val)
        qc.print('Szpieg złapany!\n');
