//Określ rozmiar rejestru wyjściowego — ustala precyzję 

// naszej odpowiedzi
var m = 4;
// Określ rozmiar rejestru wejściowego, który określi 

// nasz stan własny
var n = 1;
// Ustawienia
qc.reset(m + n);
var qout = qint.new(m, 'output');
var qin = qint.new(n, 'input');
// Inicjalizacja rejestru wyjściowego na zera
qout.write(0);
// Zainicjowanie rejestru wejściowego jako stanu własnego HAD
qin.write(0);
qin.roty(-135);
// Ten stan będzie mieć fazę własną równą 180.
// Dla fazy własnej 0, użylibyśmy zamiast tego qin.roty(45);

// Zdefiniuj naszą warunkową funkcję unitarną
function cont_u(qcontrol, qtarget, control_count) {
    // Dla Hadamard potrzebujemy jedynie wiedzieć, czy control_count
    // jest parzysta czy nieparzysta, jako że wykonanie HAD parzystą liczbę
    // razy nie przynosi żadnego efektu.
    if (control_count & 1)
        qtarget.chadamard(null, ~0, qcontrol.bits(control_count));
}
// Wykonaj prymityw szacowania fazy na rejestrach
phase_est(qin, qout, cont_u);
// Odczytaj rejestr wyjściowy
qout.read();
