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

Квантовый оракул общего свободного дня

Вы хотите назначить встречу с коллегой Жасмин. У вас обоих пятидневная рабочая неделя. Пятибитные состояния $|x\rangle$ и $|\mathrm{jasmine}\rangle$ задают расписания: 1 означает занятость в этот день, 0 — свободный день.

Входы:

1. Регистр из 5 кубитов в произвольном состоянии $|x\rangle$ с вашим расписанием.
2. Регистр из 5 кубитов в произвольном состоянии $|\mathrm{jasmine}\rangle$ с расписанием Жасмин.
3. Целевой кубит в произвольном состоянии $|y\rangle$.

Напишите операцию на языке Q#, инвертирующую цель, если существует хотя бы один день, когда вы оба свободны, то есть оба соответствующих бита равны 0.

Примеры:

1. При x=10101 и jasmine=01010 ничего не делайте: общего свободного дня нет.
2. При x=10001 и jasmine=01010 инвертируйте цель: оба свободны в среду.
3. При x=00000 и jasmine=00000 инвертируйте цель: оба свободны всю неделю.
4. При x=11111 и jasmine=11111 ничего не делайте: оба заняты всю неделю.

Перед реализацией ответьте: это оракул инверсии цели или фазовый оракул? Подсказка источника: цель меняется по состояниям двух входных регистров; наличие двух регистров не меняет тип оракула.

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

namespace Kata {
    import Std.Arrays.*;

    operation Meeting_Oracle(x : Qubit[], jasmine : Qubit[], y : Qubit)
    : Unit is Adj + Ctl {
        // Implement your solution here...

    }
}