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

Различить четыре двухкубитные операции

Вход — операция на двух кубитах, реализующая либо тождественное преобразование $I\otimes I$, либо CNOT с одним кубитом в роли управления и другим в роли цели, либо SWAP.

Напишите операцию на языке Q#, возвращающую 0 для $I\otimes I$, 1 для $CNOT_{12}$, 2 для $CNOT_{21}$, 3 для SWAP. В обозначении $CNOT_{ij}$ кубит $i$ управляет кубитом $j$. Операция принимает массив ровно из двух кубитов; при пустом массиве, одном кубите или более чем двух кубитах она завершится ошибкой.

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

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

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

        return -1;
    }
}

Предложить решение

Войти, чтобы отправить материал.