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

Управляемая перестановка двух кубитов

Вход — три кубита в произвольном состоянии, хранящиеся в массиве длины 3:

$$\begin{aligned} |\psi\rangle={}&\alpha|000\rangle+\beta|001\rangle+\gamma|010\rangle\\ &+\delta|011\rangle+\epsilon|100\rangle+\zeta|101\rangle\\ &+\eta|110\rangle+\theta|111\rangle. \end{aligned}$$

Напишите операцию на языке Q#, переставляющую второй и третий кубиты тогда и только тогда, когда первый находится в $|1\rangle$. Требуемое состояние:

$$\begin{aligned} &\alpha|000\rangle+\beta|001\rangle+\gamma|010\rangle\\ &+\delta|011\rangle+\epsilon|100\rangle+\eta|101\rangle\\ &+\zeta|110\rangle+\theta|111\rangle. \end{aligned}$$

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

namespace Kata {
    operation FredkinGate (qs : Qubit[]) : Unit is Adj + Ctl {
        // Implement your solution here...
        
    }
}