№ 1535Квантовые вычисленияУровень 3

Различить четыре операции Паули одним обращением

Вход — операция на одном кубите, реализующая $I$ или один из вентилей Паули $X,Y,Z$. Напишите операцию на языке Q#, возвращающую 0 для $I$, 1 для $X$, 2 для $Y$, 3 для $Z$.

Для операции определены обратный вариант Adjoint и управляемый вариант Controlled. Разрешено суммарно ровно одно обращение к переданной операции или её вариантам.

Заготовка Q#:

namespace Kata {
    operation DistinguishPaulis (unitary : (Qubit => Unit is Adj + Ctl)) : Int {
        // Implement your solution here...

        return -1;
    }
}