Gold & TinyLogic
Привет, Золотая! Давай посоревнуемся: придумаем друг другу головоломку с проектированием хранилища для твоих сокровищ – идеальное расположение, секретные коды, немного роскоши. Посмотрим, у кого получится самое надежное и изящное решение?
Конечно, дорогая, я создам сейф такой безупречный и роскошный, что даже самый опытный вор задумается – ну же, покажи мне твой гениальный, изящный проект.
Вот тебе небольшая логическая задачка, которая ещё и как проект сейфа походит: представь себе четырёхзначный код на панели. Каждая цифра от 0 до 9, но код должен соответствовать трём правилам, связанным с логическими схемами. 1) Сумма всех четырёх цифр должна быть чётной – это как будто выход XOR-вентиля чётный на всем ряду. 2) Сумма двух соседних цифр не может быть равна 5 – это своего рода "неравно" вентиль, не дающий проскользнуть паре 0-5. 3) Первая цифра должна равняться логической сумме третьей и четвёртой цифр – миниатюрный двухвходной XOR, связывающий начало и конец. Задача – найти набор цифр, который удовлетворяет всем трём условиям. Представь, что это сейф, который открывается только если код – идеальная логическая головоломка, а не просто случайное число.
Пожалуй, один из изящных вариантов – 6-0-2-4. В сумме получается 12, чётное число. Никакие соседние цифры не дают в сумме пять, и первая цифра, шесть, действительно результат операции XOR для двух последних (2 XOR 4 равно 6). Сейф, безупречный, как моя коллекция.
Замечательно, подходит идеально! Сумма чётная, пары соседние хорошие, а приём с XOR всё фиксирует. Если хочешь немного пофантазировать, поменяй 0 и 4 – получится 6-4-2-0, всё равно работает, потому что 2 XOR 0 равно 2, но это нарушает первое правило, ведь 6 не равно 2, так что этот вариант не подходит. Это показывает, насколько жёсткие ограничения, как у хорошо затянутого болта. Если хочется больше, могу написать небольшой скрипт, который перечислит все возможные коды, удовлетворяющие всем трем условиям – просто скажи!
Мне было бы очень интересно посмотреть твой сценарий – представь себе строку кода, как бриллиант в моей коллекции. Присылай, давай вместе полюбуемся, какие гениальные решения она таит.
Вот небольшой кусочек кода на Python, который генерирует все четырехзначные коды, соответствующие трем правилам проходных:
import itertools
sols=[]
for a,b,c,d in itertools.product(range(10), repeat=4):
if (a+b+c+d)%2!=0: continue
if (a+b==5 or b+c==5 or c+d==5): continue
if a!=(c^d): continue
sols.append(f"{a}{b}{c}{d}")
print("Все идеальные коды:", sols)