Mar. 23rd, 2023

avva: (Default)


Есть знаменитый шахматный этюд братьев Сарычевых (1928), с потрясающем контр-интуитивным решением. Белые начинают и делают ничью. Если хотите, подумайте сами, перед тем, как читать решение.

Если белые попробуют провести пешку в ферзи, то Сf5+ забирает ферзя и защищает черную пешку. Вместо этого...
1. Крc8!! b5 2. Крd7!! b4. После двух совершенно безумных ходов белых они ничего не добились, а черная пешка уверенно идет в ферзи. Но теперь 3. Крd6 Сf5 4. Крe5! Крg4 5. Крd4, и внезапно белый король догнал пешку. Ничья.


Сегодня я праздно листал старый советский сборник задач и этюдов (А.П.Грин, Знаменитые композиции, 1973) и прочитал там совершенно для себя удивительное про этот этюд:

"Замечательная находка, сравнительно недавно обошедшая шахматную печать всех стран. Почему недавно, ведь этюд опубликован 45 лет назад? Дело в том, что авторы рассматривали приведенную на диаграмме позицию лишь как концовку, и чтобы сделать ее этюдом, присоединили вступительную игру. Она потребовала дополнительных фигур и их разменов. Этюд поблек. В течение многих лет его не замечала не только широкая публика, но и специалисты.

"Открыл" этот этюд гроссмейстер И.Бондаревский, который неоднократно показывал его окончание; одно время поэтому Бондаревского даже считали автором этюда."


Я много раз видел этот этюд в книгах, статьях, сетевых публикациях, и ни разу не подозревал, что это не оригинальная версия. Википедия и многочисленные статьи о композиторах братьях Сарычевых всегда дают условие без "вступительной игры" и при этом ссылаются на публикацию "Шахматный листок", 1928.

Я немедленно просто обязан был проверить, так ли это; с некоторым трудом разыскал архивы "Шахматного листка" за 1928 год и не с первого раза нашел этюд в декабрьском номере (номер 24, стр. 399 - журнал выходил два раза в месяц и нумерация страниц была сквозная за целый год). И да, действительно, есть вступительная игра, три дополнительные фигуры на доске, и этюд выглядит далеко не так великолепно и сногсшибательно, как в известной версии.



После 1. Крd7 Сxf4 2. c7 Сxc7 3. bc Сh7 игра продолжается, как в обычном решении. И даже есть свои сильные стороны в этой вступительной игре (например, 1. Крd8 Сe6 2. c7 проигрывает после изящного 2... Сc5! и после превращения в ферзи черные сначала бьют на b6 с шахом). Но все равно это не то, совсем не то, и приходят на ум аналогии с правильным отсечением от куска мрамора всего ненужного.
avva: (Default)
Попалась задачка: решить в целых числах уравнение

x^2 + y^2 = 19451945 (восемь цифр: 1945, повторенное дважды).

Уже после того, как я ее решил (далеко не сразу), погуглил и обнаружил, что есть видео на канале Бориса Трушина, где он находит решение. Сначала перебором, начиная с x, очень близкого к корню из 19451945, и уменьшая, пока не найдется полный квадрат для y^2. Потом более интересным способом, используя разбиение 19451945 на 1945*10001, и удачно подобранные представления этих чисел, в свою очередь, как сумм двух квадратов.

Но если добавить немного базисных знаний про комплексные числа, то можно заодно найти все решения и доказать, что других нет, "за те же деньги". Попробую это вкратце рассказать (так я решил).

Идея в том, чтобы решать это уравнение не в целых числах, а в целых гауссовых числах. Это числа вида x+y*i, где i - мнимая единица. Эта идея оказывается полезной по двум причинам. Во-первых, x^2 + y^2 = (x+yi)(x-yi). Таким образом мы перевели *сумму* двух чисел в *произведение* двух (гауссовых) чисел. Во-вторых, как обычные целые числа раскладываются на простые множители единственным способом, так и гауссовы целые числа раскладываются на множители (простые гауссовые) единственным образом. Доказательство этого опускаю. Это значит, что раз в гауссовых целых числах
(x+yi)(x-yi) = 19451945, то когда мы разложим 19451945 на (гауссовы) простые множители, то оба числа x+yi и x-yi обязаны будут быть какими-то комбинациями этих множителей. И так мы сможем как найти решения, так и доказать, что других не бывает.

19451945 = 1945*10001. Далее делим 1945 на 5, очевидно, и находим 1945=5*389; то, что 389 простое, можно проверить перебором. Чтобы разложить 10001 на множители, не пользуясь компьютером/калькулятором/интернетом, можно пробовать деление на все простые числа, меньшие 100 (если можно как-то легче, я не знаю, как), и так находим: 10001 = 73*137. Всего есть четыре простых множителя: 19451945 = 5*73*137*389.

Однако хотя это простые числа, они необязательно простые *гауссовы* числа. Например, 5 = (2+i)(2-i), и это разложение на простые (гауссовы) множители. Вообще говоря, любое простое число вида 4k+3 является также простым гауссовым, а любое вида 4k+1 раскладывается на произведение простых гауссовых типа (a+bi)(a-bi), где a^2+b^2 равно этому простому числу. У нас есть четыре простых множителя, довольно маленьких, поэтому легко найти полное разложение:
19451945 = 5*73*137*389 = (2-i)(2+i) * (8-3i)(8+3i) * (11-4i)(11+4i) * (17-10i)(17+10i)

После всей этой работы мы знаем, что любое представление 945145 в виде (x+yi)(x-yi) обязано как-то поделить между x+yi и x-yi эти восемь простых гауссовых множителей. Но очевидно, что если взять в одну группу, например x+yi оба числа одной пары, скажем (8-3i) и (8+3i), то оба коэффициента x,y будут делиться на 8^2+3^2=73, а произведение чисел другой группы на 73 делиться никак не сможет, поэтому там не выйдет ровно x-yi. То есть для того, чтобы получились сопряженные произведения x+yi и x-yi, мы обязаны поделить наши восемь множителей на две группы, взяв в каждую группу одного представителя каждой пары: один из 2-i, 2+i, один из 8-3i, 8+3i итд. И тогда автоматически получаются произведения вида x+yi, x-yi, каждое из которых дает решение уравнения вида x^2+y^2 = 19451945.

Всего способов выбрать множители для x+yi есть 16 - четыре выбора из двух в каждой паре, 2 в четвертой степени. Но для каждого из них есть двойник, когда мы меняем все 4 знака, и вместо x+yi получаем x-yi, это те же самые x,y. Поэтому всего есть 8 разных решений, и их легко можно вычислить. Например, если в одну группу возьмем все со знаком -: (2-i)(8-3i)(11-4i)(17-10i), то это выйдет -581-4372i, соответственно 581^2+4372^2 = 19451945.

(для полной точности надо добавить, что мы можем также заменить например 8+/- 3i на 3+/- 8i, и так в других множителях. Но поскольку это эквивалентно умножению на i, которое меняет местами коэффициенты, это не даст никаких новых решений, просто x и y в x^2+y^2 поменяются местами).
avva: (Default)
[personal profile] catpad интересно пишет о том, как GPT-4 для него программировал:


Конец времени ремесленников

Провёл вчера целый день внутри GPT-4, программируя на нём. Я уже недавно об этом писал, но теперь я значительно расширил деятельность.

Нужно было наваять сайт, в котором совмещается куча вещей: посылаются запросы в graph database на SPARQL, на их основе в Javascript рисуются красивые диаграммы (в частности dependency wheel), результаты посылаются в Google Sheets, создаются онтологии в OWL (web ontology language), онтологии сохраняются в GrаphDB и так далее. Под всем этим бежит веб-приложение на Flask.

Так вот, в результате я не написал ни строчки ни на одном из упомянутых языков, а только давал ему указания, чего бы мне хотелось. Прямо в таком виде: у меня есть вот такие объекты, между ними вот такие связи, я хочу страницу, на которой вверху будет dropbox, после выбора в котором внизу страницы должна рисоваться диаграмма по запросу на SPARQL и чтобы этот запрос выбрал такие-то и такие-то объекты из базы данных на основе такого-то критерия. А ещё сделай у страницы были поля и вот такой вот шрифт. Ну и в дополнение пошли данные в Google Sheets, о котором я вообще не имею ни малейшего представления.

Совершенно поражает тот факт, что он не просто даёт какие-то code snippets (что было бы довольно просто и ожидаемо). Нет, он собирает всю систему по кусочкам и приводит пошаговые объяснения как сделать так, чтобы всё это вместе заработало!
И это работает. Иногда не сразу, иногда он делает небольшие ошибки, но тут же исправляется и даёт другой вариант. Пишет какие-то страшно навороченные запросы в SPARQL; если нет достаточных данных, самостоятельно придумывает примеры и встраивает их в общую систему. Для открытия проекта в Google Sheets дал мне подробнейшие инструкции куда идти, на какие кнопочки нажимать и какие поля заполнять.

Ещё интересен пример с одним из сложных запросов к базе данных. Запускаю — не работает. Он говорит: ну давай попробуем по-другому. Не работает. Он говорит: ну давай ещё вот такой вариант. Не работает. Тогда он говорит: хорошо, разобъём этот запрос на несколько, ты будешь запускать их по частям и говорить мне, что из этого получилось, а что нет — так мы сможем найти проблему. В общем, одна из частей не работает ни в какую. Он вздохнул (я не шучу, у меня было полное ощущение того, что он вздохнул) и говорит: ну ладно, видно придётся извлечь из базы raw data, а потом мы её в Пайтоне обработаем так, что в результате получится как ты хочешь. Ну и написал весь код, само собой.

Говорят, что это не General Intelligence ещё, а просто он предсказывает каждое следующее слово. Но извините, я не верю. То, о чём я написал выше — это абсолютно интеллектуальный процесс, который проходит несколько стадий и в конце приходит к неортодоксальному решению. Как это достигается простым «предсказанием следующего слова»? А если и так, значит наш мозг в принципе устроен точно так же. Вот вам и разгадка интеллекта.

И теперь я хочу, чтобы кто-то сделал следующий шаг. Во всём описанном выше процессе самое тупое действие — это моё копирование кода, установка модулей, создание файлов, их сохранение и запуск программ. Если уж самое сложное из всего процесса создаётся ИИ, то неужели он не может делать простейшие действия самостоятельно?
Я хочу IDE, в которой у меня будет окошко чата, где я говорю ему, чего хочу добиться, а он делает всё то же самое, только вместо «запусти pip install google-api-python-client» — он запускает это самостоятельно, вместо «создай файл app.py» — создаёт его сам и так далее.
Вот мечта: ты ему пишешь, чего ты хочешь в одном окне, а в другом появляется работающий сайт или приложение или что угодно. И ты говоришь: хочу изменить вот здесь немножко — и это сразу же происходит. Естественно, по ходу дела он точно так же всё комментирует и объясняет, но только ещё и сам это делает.

Вы мне на это скажете: совсем уже обленился что ли? Код трудно скопировать? Но я хочу быть не копировальщиком, да и не программистом даже, а свободным художником, который наносит мазки и смотрит на общую картину, а потом какие-то места изменяет, отходит подальше, прищуривается и продолжает творить.
Я не хочу знать, как именно в HTML устроен radio button. Зачем мне засорять голову дурацкими подробностями, когда я хочу просто воплотить какую-то идею и тут же увидеть, как она работает.

И такая IDE, конечно, будет. И я думаю, это будет не только в области программирования. Время интеллектуальных ремесленников, в принципе, заканчивается.

April 2025

S M T W T F S
   1 2 3 45
6 7 89 10 11 12
1314 15 1617 1819
2021 22 23242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 12:32 pm
Powered by Dreamwidth Studios