Этого треда уже нет.
Это копия, сохраненная 31 июля 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
-164830752456239024.jpg165 Кб, 807x538
Развлекаюсь PoppyFanboy !VTLpv6lgGw 215254 В конец треда | Веб
Развлекаюсь
-164830752456239028.jpg59 Кб, 396x594
PoppyFanboy !VTLpv6lgGw 2 215255
Не так давно просмотрел первые три лекции курса 6.042J от MIT по дискретной математике, они оказались весьма занятными. У меня наконец-то устаканилось в голове, что такое строгая и обычная индукция и почему она работает. Узнал, что оказывается, еще в тридцатых прошлого века умный мужик Гёдель доказал, что не существует одновременно непротиворечивого и полного набора аксиом, что гарантирует наличие по крайней мере одной недоказуемой теоремы. Это забавно

Позавчера начал было читать книгу по Java от Joyce Farrell, но еле осилил первую часть: безумно скучно, очень сухой текст Единственный плюс - наличие всяких упражнений в конце каждой главы, но я лучше буду пока что брать задания для практики с euler project и с еще одного сайта, который указан в шапке Java-треда на /pr/

Вместо упомянутой выше книги начал Core Java Vol. 1. Пока что нормально: автор периодически рассказывает про всякие интересные штуки напрямую не относящиеся к джаббе, что радует. Дошел пока что только до главы 3.5, надо бы чуть ускориться

По мере того, как читаю, постепенно адаптируюсь к англицкому языку, надеюсь, скоро начну воспринимать его чуть лучше, чем сейчас

За завтра нужно почитать про представление целых чисел со знаком и чисел с плавающей точкой в памяти компьютера (а то чет чувствую себя дауничем, когда слышу про мантиссу), сделать домашние упражнения для 6.042J и посмотреть следующую лекцию в 6.042J. В остальное время буду пробовать Core Java вперемешку с упражнениями из Euler Project (тупо руку набивать).

Недавно смотрел требования для бакалавра в MIT по программе 6-3, и там, в общем, нужно пройти курс 6.004 по архитектуре компьютера. Потом хочу изучить его, но там в Prerequisites указано A rudimentary knowledge of programming language concepts (C language or 6.001) and electrical fundamentals (6.002) is assumed. Не знаю, осилю ли я его без знаний в области электротехники. Я, конечно, полистаю школьный учебник по физике или посмотрю что-нибудь на yt, может быть, этого и будет достаточно

Жесть я, конечно, за сегодня устал: пытался побегать, но выдохся после первого километра. Темп 5 мин/км, наверное, пока что слишком быстрый для меня. Или 5 минут слишком долгий отрезок непрерывного бега. Попробую, может быть, послезавтра еще раз побегать. Не знаю, есть ли смысл в этом

Открыл для себя, что листья герани офигительно помогают при насморке: комкаешь кусочки листов, засовываешь в нос, некоторое время дышишь через нос, потом все сначала через некоторое время. Уже второй день хожу с прочищенным носом, тупо каеф
-164830752456239028.jpg59 Кб, 396x594
PoppyFanboy !VTLpv6lgGw 2 215255
Не так давно просмотрел первые три лекции курса 6.042J от MIT по дискретной математике, они оказались весьма занятными. У меня наконец-то устаканилось в голове, что такое строгая и обычная индукция и почему она работает. Узнал, что оказывается, еще в тридцатых прошлого века умный мужик Гёдель доказал, что не существует одновременно непротиворечивого и полного набора аксиом, что гарантирует наличие по крайней мере одной недоказуемой теоремы. Это забавно

Позавчера начал было читать книгу по Java от Joyce Farrell, но еле осилил первую часть: безумно скучно, очень сухой текст Единственный плюс - наличие всяких упражнений в конце каждой главы, но я лучше буду пока что брать задания для практики с euler project и с еще одного сайта, который указан в шапке Java-треда на /pr/

Вместо упомянутой выше книги начал Core Java Vol. 1. Пока что нормально: автор периодически рассказывает про всякие интересные штуки напрямую не относящиеся к джаббе, что радует. Дошел пока что только до главы 3.5, надо бы чуть ускориться

По мере того, как читаю, постепенно адаптируюсь к англицкому языку, надеюсь, скоро начну воспринимать его чуть лучше, чем сейчас

За завтра нужно почитать про представление целых чисел со знаком и чисел с плавающей точкой в памяти компьютера (а то чет чувствую себя дауничем, когда слышу про мантиссу), сделать домашние упражнения для 6.042J и посмотреть следующую лекцию в 6.042J. В остальное время буду пробовать Core Java вперемешку с упражнениями из Euler Project (тупо руку набивать).

Недавно смотрел требования для бакалавра в MIT по программе 6-3, и там, в общем, нужно пройти курс 6.004 по архитектуре компьютера. Потом хочу изучить его, но там в Prerequisites указано A rudimentary knowledge of programming language concepts (C language or 6.001) and electrical fundamentals (6.002) is assumed. Не знаю, осилю ли я его без знаний в области электротехники. Я, конечно, полистаю школьный учебник по физике или посмотрю что-нибудь на yt, может быть, этого и будет достаточно

Жесть я, конечно, за сегодня устал: пытался побегать, но выдохся после первого километра. Темп 5 мин/км, наверное, пока что слишком быстрый для меня. Или 5 минут слишком долгий отрезок непрерывного бега. Попробую, может быть, послезавтра еще раз побегать. Не знаю, есть ли смысл в этом

Открыл для себя, что листья герани офигительно помогают при насморке: комкаешь кусочки листов, засовываешь в нос, некоторое время дышишь через нос, потом все сначала через некоторое время. Уже второй день хожу с прочищенным носом, тупо каеф
3 215298
>>215255
Это у тебя такие развлечения?
IMG20180714230547.jpg340 Кб, 1538x2048
PoppyFanboy !VTLpv6lgGw 4 215384
Не успел сделать за сегодня всего, что запланировал. Обидно за свою лень

Прорешал задания с первых двух recitations на 6.042J (это вроде как аналог наших семинаров/практик). Почитал про well-ordering principle (про то, что в любом наборе неотрицательных целых чисел найдется наименьшее): вроде можно использовать в доказательствах, но в большинстве случаев можно заменить обычной индукцией. И ещё well-ordering principle эквивалентен аксиоме индукции. Не знаю, где это применяется, странная штука, хотя, может быть, в некоторых случаях доказательства будут получаться короче, чем через индукцию, не знаю

Еще рорешал первый Problem Set из 6.042J. Простой. Тем не менее, второй сет (который я за сегодня не успел сделать) обещает быть гораздо объемнее и сложнее

Случайно узнал про Парадокс Рассела, ну и, соответственно, о том, что наивная теория множеств противоречива. Выходит, не так уж и легко найти даже хотя бы непротиворечивый набор аксиом. Это забавно

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

Core Java не успел дальше посмотреть
Решил первые два задания с euler project. Были довольно простые, но вот третье я уже сам не решил. Пришлось подсмотреть решение. Там в основе используется вроде вот этот факт
https://proofwiki.org/wiki/Composite_Number_has_Prime_Factor_not_Greater_Than_its_Square_Root
надо будет завтра пробежаться по доказательству и реализовать решение

Посмотрел про дополнительный код и представление чисел с плавающей запятой. Вроде все понятно

Завтра основной упор надо будет сделать на решении задачек с Euler Project и изучении Core Java. Досмотрю ещё четвертую лекцию. Если останется время, попробую порешать второй проблем сет

Не так давно приснилось, как я брожу по зданию какого-то университета: какие-то темные коридоры, куча лестниц, обшарпанные аудитории. Причем сон был по ощущениям довольно длительный. В общем, классный экспириенс. Жаль, что подобное мне снится раз в сто лет

>>215298
На данный момент - да
IMG20180714230547.jpg340 Кб, 1538x2048
PoppyFanboy !VTLpv6lgGw 4 215384
Не успел сделать за сегодня всего, что запланировал. Обидно за свою лень

Прорешал задания с первых двух recitations на 6.042J (это вроде как аналог наших семинаров/практик). Почитал про well-ordering principle (про то, что в любом наборе неотрицательных целых чисел найдется наименьшее): вроде можно использовать в доказательствах, но в большинстве случаев можно заменить обычной индукцией. И ещё well-ordering principle эквивалентен аксиоме индукции. Не знаю, где это применяется, странная штука, хотя, может быть, в некоторых случаях доказательства будут получаться короче, чем через индукцию, не знаю

Еще рорешал первый Problem Set из 6.042J. Простой. Тем не менее, второй сет (который я за сегодня не успел сделать) обещает быть гораздо объемнее и сложнее

Случайно узнал про Парадокс Рассела, ну и, соответственно, о том, что наивная теория множеств противоречива. Выходит, не так уж и легко найти даже хотя бы непротиворечивый набор аксиом. Это забавно

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

Core Java не успел дальше посмотреть
Решил первые два задания с euler project. Были довольно простые, но вот третье я уже сам не решил. Пришлось подсмотреть решение. Там в основе используется вроде вот этот факт
https://proofwiki.org/wiki/Composite_Number_has_Prime_Factor_not_Greater_Than_its_Square_Root
надо будет завтра пробежаться по доказательству и реализовать решение

Посмотрел про дополнительный код и представление чисел с плавающей запятой. Вроде все понятно

Завтра основной упор надо будет сделать на решении задачек с Euler Project и изучении Core Java. Досмотрю ещё четвертую лекцию. Если останется время, попробую порешать второй проблем сет

Не так давно приснилось, как я брожу по зданию какого-то университета: какие-то темные коридоры, куча лестниц, обшарпанные аудитории. Причем сон был по ощущениям довольно длительный. В общем, классный экспириенс. Жаль, что подобное мне снится раз в сто лет

>>215298
На данный момент - да
Fis !!uhWTgau.YI 5 215409
>>215254 (OP)
Хорошие у тебя развлечения, молодец. Сам планирую прорешивать 1-3 задачки в день по алгоритмам, из Euler Project в том чисе.
По джаве люто советую вот этот цикл статей https://dou.ua/lenta/articles/java-beginner-guide-1/
Я в своё время этим был очень сильно замотивирован, после прочтения.
6 215414
ты так и не посмотрел >>215255

>За завтра нужно почитать про представление целых чисел со знаком и чисел с плавающей точкой в памяти компьютера (а то чет чувствую себя дауничем, когда слышу про мантиссу)

IMG20180710140843.jpg69 Кб, 640x436
PoppyFanboy !VTLpv6lgGw 7 215541
Чет надо, наверное, четко определиться со временем, когда мне заниматься программированием и прочими вещами, чтобы было более четкое ощущение времени. А то сегодня вроде и занимался, но все равно не очень-то много успел. Ещё завтра попробую проснуться чуть раньше, чем сегодня, надо как-то немного выправить режим сна

Сделал третью и четвертую задачки из Euler Project.

В третьей надо было найти наибольший простой делитель числа. Сам не додумался, но алгоритм простой: при входном числе n перебираем целые числа от 2 до корня из n в поисках делителя, если нашли, то делим n и все по новой. В конце от n остаётся только его наибольший простой делитель. Это все основывается на том факте, что у любого составного числа n найдется простой делитель <= sqrt(n) (доказательство там оказалось простым, просто предположить обратное). Тем самым можно здорово уменьшить сложность перебора с O(n) до О(sqrt(n))

В четвертой задаче надо было найти наибольшее по значению число-палиндром, которое бы могло быть представлено как произведение двух n-значных чисел. Просто перебором. Основную сложность составило написание метода, который бы определял, является ли число палиндромом. То есть да, можно довольно легко реализовать решение с использованием string-ов, но гораздо интереснее было бы обойтись без этого. Сам я пришел к какому-то громоздкому решению, которое вычленяло из числа отдельные его цифры и сравнивало их. До того, что можно было довольно легко перевернуть число и сравнить его с изначальным сам, к сожалению, не додумался: нашел идею в интернете и реализовал

Почитал немного дальше Core Java.

Оказалось, что делить на два с помощью побитового сдвига >> можно не только положительные целые, но и отрицательные (засчет того, что знаковый бит сохраняется). Только округление в другую сторону, то есть -127 >> 1 будет -64

Прорешал три задачи из второго проблем сета 6.042J. Первые две были простыми, третья - посложнее. Там довольно длинное условие, но основная идея а том, что есть поле nxn клеток, часть из которых заражённые. Каждую минуту здоровая клетка, которая соседствует (не по диагонали) с по крайней мере двумя заражёнными, так же заражается. Нужно доказать, что если изначально заражённых клеток меньше, чем n, то никогда не наступит того момента, когда будут заражены все клетки. Основная суть в том, что периметр заражённой поверхности не увеличивается с течением времени (когда заражается новая клетка, мы теряем по крайней мере две старые грани и у нас появляются не более чем две новые грани). Изначально у нас периметр заражённой поверхности по условию <= 4(n-1) (т.к. по индукции у нас меньше, чем n заражённых клеток, и у каждой клетки максимум 4 свободных грани), значит никак не может в конечном итоге получиться так, что заражены абсолютно все клетки

Побегал сегодня: 2 минуты бега + 1 минута шагом. В таком режиме прозанимался 21 минуту, дальше стало тяжко, не в последнюю очередь из-за палящего солнца. В общей сложности прошел/пробежал 3.5 км

Завтра хочу больший упор сделать на 6.042J: досмотрю четвертую лекцию, посмотрю пятую, дорешаю (надеюсь) задания из второго проблем сета. Если успею, посмотрю, какие задания разбирались на семинарах

>>215414
Я почитал про это, ты просто, наверное, не заметил
>>215384

> Посмотрел про дополнительный код и представление чисел с плавающей запятой. Вроде все понятно



>>215409
Спасибо, хорошие статьи. Потом чуть детальнее прочитаю
IMG20180710140843.jpg69 Кб, 640x436
PoppyFanboy !VTLpv6lgGw 7 215541
Чет надо, наверное, четко определиться со временем, когда мне заниматься программированием и прочими вещами, чтобы было более четкое ощущение времени. А то сегодня вроде и занимался, но все равно не очень-то много успел. Ещё завтра попробую проснуться чуть раньше, чем сегодня, надо как-то немного выправить режим сна

Сделал третью и четвертую задачки из Euler Project.

В третьей надо было найти наибольший простой делитель числа. Сам не додумался, но алгоритм простой: при входном числе n перебираем целые числа от 2 до корня из n в поисках делителя, если нашли, то делим n и все по новой. В конце от n остаётся только его наибольший простой делитель. Это все основывается на том факте, что у любого составного числа n найдется простой делитель <= sqrt(n) (доказательство там оказалось простым, просто предположить обратное). Тем самым можно здорово уменьшить сложность перебора с O(n) до О(sqrt(n))

В четвертой задаче надо было найти наибольшее по значению число-палиндром, которое бы могло быть представлено как произведение двух n-значных чисел. Просто перебором. Основную сложность составило написание метода, который бы определял, является ли число палиндромом. То есть да, можно довольно легко реализовать решение с использованием string-ов, но гораздо интереснее было бы обойтись без этого. Сам я пришел к какому-то громоздкому решению, которое вычленяло из числа отдельные его цифры и сравнивало их. До того, что можно было довольно легко перевернуть число и сравнить его с изначальным сам, к сожалению, не додумался: нашел идею в интернете и реализовал

Почитал немного дальше Core Java.

Оказалось, что делить на два с помощью побитового сдвига >> можно не только положительные целые, но и отрицательные (засчет того, что знаковый бит сохраняется). Только округление в другую сторону, то есть -127 >> 1 будет -64

Прорешал три задачи из второго проблем сета 6.042J. Первые две были простыми, третья - посложнее. Там довольно длинное условие, но основная идея а том, что есть поле nxn клеток, часть из которых заражённые. Каждую минуту здоровая клетка, которая соседствует (не по диагонали) с по крайней мере двумя заражёнными, так же заражается. Нужно доказать, что если изначально заражённых клеток меньше, чем n, то никогда не наступит того момента, когда будут заражены все клетки. Основная суть в том, что периметр заражённой поверхности не увеличивается с течением времени (когда заражается новая клетка, мы теряем по крайней мере две старые грани и у нас появляются не более чем две новые грани). Изначально у нас периметр заражённой поверхности по условию <= 4(n-1) (т.к. по индукции у нас меньше, чем n заражённых клеток, и у каждой клетки максимум 4 свободных грани), значит никак не может в конечном итоге получиться так, что заражены абсолютно все клетки

Побегал сегодня: 2 минуты бега + 1 минута шагом. В таком режиме прозанимался 21 минуту, дальше стало тяжко, не в последнюю очередь из-за палящего солнца. В общей сложности прошел/пробежал 3.5 км

Завтра хочу больший упор сделать на 6.042J: досмотрю четвертую лекцию, посмотрю пятую, дорешаю (надеюсь) задания из второго проблем сета. Если успею, посмотрю, какие задания разбирались на семинарах

>>215414
Я почитал про это, ты просто, наверное, не заметил
>>215384

> Посмотрел про дополнительный код и представление чисел с плавающей запятой. Вроде все понятно



>>215409
Спасибо, хорошие статьи. Потом чуть детальнее прочитаю
IMG20180718101139.jpg856 Кб, 600x827
PoppyFanboy !VTLpv6lgGw 8 215650
Доделал второй Problem Set для 6.042J. Вроде несложные задачи

Досмотрел четвертую лекцию и большую часть пятой.

Все-таки я был не совсем прав насчёт ненужности well-ordering principle. Естественно, это утверждение нужно и много где используется и не везде решение через индукцию будет лучше. Пример тому - доказательство основной теоремы арифметики

В конце четвертой лекции все пришло к выводу о том, что {m представимо как линейная комбинация a и b <=> gcd(a, b) делит m}. Ну и тогда в итоге получается, что в задачах про переливание воды между сосудами с объемами в a и b литров можно получить в одном из сосудов любое число литров воды кратное gcd(a, b)

Ещё там было про всякие свойства gcd, про алгоритм Евклида. Про расширенный алгоритм Евклида почитал здесь
http://e-maxx.ru/algo/export_extended_euclid_algorithm
(в лекции был приведен алгоритм, который хорош для выполнения на бумаге, однако алгоритмизимовать его тяжело, а по алгоритме по ссылке гораздо проще написать рекурсивный метод). Сделал его на джаве, вроде работает

В пятой лекции было про криптографию, про вариации шифрования Тьюринга, и про то, как их можно взломать, еще про сравнения по модулю и малую теорему Ферма

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

Завтра повторю все пройденное на лекциях, большую часть времени постараюсь уделить Java Core и Euler Project. Если успею, досмотрю пятую лекцию. Ещё попробую под вечер побегать. В этот раз попробую 2 минуты бега + 1.5 минуты шагом, но прозанимаюсь так не менее, чем 25 минут

Все ещё чувствую, что могу быть гораздо более продуктивным. Основная проблема в том, что я могу тупо зависнуть на одном каком-то моменте, пытаясь его понять, хотя надо двигаться вперед, а непонятные на данный момент вещи оставить на потом. Завтра попробую заниматься 25-минутками и без зависаний
BZvd4QLBL5Y.jpg75 Кб, 500x720
PoppyFanboy !VTLpv6lgGw 9 215792
Решил сегодня лечь спать много раньше, чем обычно, поэтому не очень много сделал за сегодня, хотя мог бы еще заниматься часа 3 минимум. Лучше завтра пораньше с утра позанимаюсь

Медленно продвигаюсь по Core Java. Сегодня было в основном про строки: то, что они immutable, про UTF-8 и UTF-16 (и сложности при разборе строк посимвольно; ну, вернее по code unit-ам), про StringBuilder (насколько я понял, используется, когда нужно конкатенировать кучу строк, чтобы не плодить новые строки в куче) и про String.format (вроде разобрался с основными флагами: выравнивание по правому/левому краю, выставление точности для флоатов, незначащие нули и разделители), ну и еще там про стандартный ввод через Scanner

В шестой задаче в Euler Project нужно было найти наименьшее общее кратное для первых n натуральных чисел. Только вот о формуле lcm(a, b) = ab / gcd(a, b) я вспомнил не сразу, поэтому сначала накатал жуткий (и вроде как рабочий) код, который разбивает каждое число от 1 до n на простые, отбирает наибольшие степени и в конце перемножает. Мало того, что работает медленнее чем через формулу, так еще требует O(n) дополнительной памяти. Мда

В седьмой там все просто: найти разность (1^2 + 2^2 + ... + n^2) - (1 + 2 + ... + n)^2, просто по формуле. Но меня немного озадачил вопрос того, как вообще эти формулы вывели? Понятно, что можно проверить их истинность через индукцию, но для этого все равно нужно сделать предположение. Как оказалось, есть весьма простой способ:
https://brilliant.org/wiki/sum-of-n-n2-or-n3/
очень красиво

Решил не бегать, вообще. На самом деле, у меня уже был опыт того, как я с нуля проапгрейдил свою выносливость до результатов 3 км за ~13:50 мин. и 5 км за ~26 мин. (для меня это действительно был большой прогресс, но за 3 месяца без тренировок все откатилось почти что на стартовую). Однако после бега я вообще ничем не мог заниматься: тупо лежал и отдыхал. Вместо этого я лучше буду делать упражнения для спины, это будет, я думаю, полезнее

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

Еще попробую с завтрашнего дня записывать то, чем и сколько я занимаюсь в течение дня. Не стану накатывать никаких приложений на мобилку, будет достаточно текстовых записей в заметках на телефоне

Завтра утром начну с Core Java и минимум двух задач из Euler Project. В течение дня разберусь с остатком пятой лекции 6.042J. Еще посмотрю задачи с recitations и третий Problem Set того же курса 6.042J. Вообще у меня в планах пройти курс MIT по SICP (ну и книжку почитать, соответственно), и вот я думаю, может быть, мне и его начать параллельно? Пока не знаю, но если завтра останется время, бален а оно должно остаться, ну почему я такой медленный, я же не так уж и много планирую, сколько можно то попробую почитать SICP
BZvd4QLBL5Y.jpg75 Кб, 500x720
PoppyFanboy !VTLpv6lgGw 9 215792
Решил сегодня лечь спать много раньше, чем обычно, поэтому не очень много сделал за сегодня, хотя мог бы еще заниматься часа 3 минимум. Лучше завтра пораньше с утра позанимаюсь

Медленно продвигаюсь по Core Java. Сегодня было в основном про строки: то, что они immutable, про UTF-8 и UTF-16 (и сложности при разборе строк посимвольно; ну, вернее по code unit-ам), про StringBuilder (насколько я понял, используется, когда нужно конкатенировать кучу строк, чтобы не плодить новые строки в куче) и про String.format (вроде разобрался с основными флагами: выравнивание по правому/левому краю, выставление точности для флоатов, незначащие нули и разделители), ну и еще там про стандартный ввод через Scanner

В шестой задаче в Euler Project нужно было найти наименьшее общее кратное для первых n натуральных чисел. Только вот о формуле lcm(a, b) = ab / gcd(a, b) я вспомнил не сразу, поэтому сначала накатал жуткий (и вроде как рабочий) код, который разбивает каждое число от 1 до n на простые, отбирает наибольшие степени и в конце перемножает. Мало того, что работает медленнее чем через формулу, так еще требует O(n) дополнительной памяти. Мда

В седьмой там все просто: найти разность (1^2 + 2^2 + ... + n^2) - (1 + 2 + ... + n)^2, просто по формуле. Но меня немного озадачил вопрос того, как вообще эти формулы вывели? Понятно, что можно проверить их истинность через индукцию, но для этого все равно нужно сделать предположение. Как оказалось, есть весьма простой способ:
https://brilliant.org/wiki/sum-of-n-n2-or-n3/
очень красиво

Решил не бегать, вообще. На самом деле, у меня уже был опыт того, как я с нуля проапгрейдил свою выносливость до результатов 3 км за ~13:50 мин. и 5 км за ~26 мин. (для меня это действительно был большой прогресс, но за 3 месяца без тренировок все откатилось почти что на стартовую). Однако после бега я вообще ничем не мог заниматься: тупо лежал и отдыхал. Вместо этого я лучше буду делать упражнения для спины, это будет, я думаю, полезнее

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

Еще попробую с завтрашнего дня записывать то, чем и сколько я занимаюсь в течение дня. Не стану накатывать никаких приложений на мобилку, будет достаточно текстовых записей в заметках на телефоне

Завтра утром начну с Core Java и минимум двух задач из Euler Project. В течение дня разберусь с остатком пятой лекции 6.042J. Еще посмотрю задачи с recitations и третий Problem Set того же курса 6.042J. Вообще у меня в планах пройти курс MIT по SICP (ну и книжку почитать, соответственно), и вот я думаю, может быть, мне и его начать параллельно? Пока не знаю, но если завтра останется время, бален а оно должно остаться, ну почему я такой медленный, я же не так уж и много планирую, сколько можно то попробую почитать SICP
10 215821
>>215792

>Еще попробую с завтрашнего дня записывать то, чем и сколько я занимаюсь в течение дня.


Как насчет того, чтобы написать свое собственное приложение, куда все это можно будет записывать? :^)
homuras tongue.gif9,9 Мб, 640x360
11 215836
Хороший дневник, жаль код показывать стесняешься.
PoppyFanboy !VTLpv6lgGw 12 215946
Зафейлился сегодня по полной: к середине дня перестал отслеживать, чем занимаюсь, зарядку для спины не сделал, лекцию не досмотрел. Ну ничего, бывает, завтра будет супер много свободного времени, успею доделать все, что не успел за предыдущие дни

Чет меня немного выбило из колеи обилие всяких классов в Java для записи/чтения файлов (ну и не только файлов). Насколько я понял, есть две параллельно существующие иерархии классов, во главе которых стоят InputStream/OutputStream и Reader/Writer. Подклассы первых двух классов предоставляют возможность чтения/записи побайтово, в то время как Reader/Writer манипулируют с потоками character-ов. Один из подклассов Writer - это OutputStreamWriter (своего рода мост между OutputStream и потоком character-ов, в конструкторе требуется указать какой-нибудь OutputStream в качестве аргумента). От OutputStreamWriter наследуется FileWriter, менее гибкий, нельзя задать кодировку (используется дефолтная), но зато удобнее работать с файлами.

Для работы с файлами через OutputStreamWriter нужно предварительно создать объект класса FileOutputStream (который наследуется от OutputStream) и потом уже создать OutputStreamWriter

С этим вроде понятно, но все ещё остаются вопросы по поводу того, зачем нужны PrintStream и PrintWriter. Вроде как для форматированного вывода, но я пока не до конца во всем этом разобрался

Решил седьмую задачу из Project Euler (найти n-ное простое число) двумя способами: просто перебирать по порядку все числа, проверяя их на простоту, и через решето Эратосфена. Плюс первого решения в том, что можно вводить сколь угодно большие данные (ну, если опустить то, что размер переменных все же ограничен). Решение через Эратосфена изначально подразумевает, что мы ищем простые числа меньшие какого-то большого числа + выделяется много памяти, но зато вроде должно работать чуть быстрее

https://github.com/PoppyFanboy
Тепер буду выкладывать свой говнокод туда, как-то сразу не подумал

>>215836
Спасибо :3

>>215821
Это хорошая идея, но я пока что не планировал заниматься разработкой под андроид, по крайней мере до того момента, пока не разберусь с основными концептами джавы. А там дальше, может быть, попробую посмотреть курс по разработке под андроид от каких-нибудь geekbrains

Вообще мне действительно стоит начать делать в фоновом режиме какой-нибудь мини-проект. Попробую пока что сделать змейку в консоли
PoppyFanboy !VTLpv6lgGw 12 215946
Зафейлился сегодня по полной: к середине дня перестал отслеживать, чем занимаюсь, зарядку для спины не сделал, лекцию не досмотрел. Ну ничего, бывает, завтра будет супер много свободного времени, успею доделать все, что не успел за предыдущие дни

Чет меня немного выбило из колеи обилие всяких классов в Java для записи/чтения файлов (ну и не только файлов). Насколько я понял, есть две параллельно существующие иерархии классов, во главе которых стоят InputStream/OutputStream и Reader/Writer. Подклассы первых двух классов предоставляют возможность чтения/записи побайтово, в то время как Reader/Writer манипулируют с потоками character-ов. Один из подклассов Writer - это OutputStreamWriter (своего рода мост между OutputStream и потоком character-ов, в конструкторе требуется указать какой-нибудь OutputStream в качестве аргумента). От OutputStreamWriter наследуется FileWriter, менее гибкий, нельзя задать кодировку (используется дефолтная), но зато удобнее работать с файлами.

Для работы с файлами через OutputStreamWriter нужно предварительно создать объект класса FileOutputStream (который наследуется от OutputStream) и потом уже создать OutputStreamWriter

С этим вроде понятно, но все ещё остаются вопросы по поводу того, зачем нужны PrintStream и PrintWriter. Вроде как для форматированного вывода, но я пока не до конца во всем этом разобрался

Решил седьмую задачу из Project Euler (найти n-ное простое число) двумя способами: просто перебирать по порядку все числа, проверяя их на простоту, и через решето Эратосфена. Плюс первого решения в том, что можно вводить сколь угодно большие данные (ну, если опустить то, что размер переменных все же ограничен). Решение через Эратосфена изначально подразумевает, что мы ищем простые числа меньшие какого-то большого числа + выделяется много памяти, но зато вроде должно работать чуть быстрее

https://github.com/PoppyFanboy
Тепер буду выкладывать свой говнокод туда, как-то сразу не подумал

>>215836
Спасибо :3

>>215821
Это хорошая идея, но я пока что не планировал заниматься разработкой под андроид, по крайней мере до того момента, пока не разберусь с основными концептами джавы. А там дальше, может быть, попробую посмотреть курс по разработке под андроид от каких-нибудь geekbrains

Вообще мне действительно стоит начать делать в фоновом режиме какой-нибудь мини-проект. Попробую пока что сделать змейку в консоли
4459.jpg140 Кб, 1080x1080
PoppyFanboy !VTLpv6lgGw 13 216122
Более-менее структурировал свои конспекты к курсу 6.042J. Также досмотрел пятую лекцию: было про малую теорему Ферма, функцию и теорему Эйлера и про шифрование RSA (как составляются публичный и секретный ключи и почему вообще вся эта схема работает)

Похрустел костями, сделал зарядку для спины, надо однозначно вводить это как ежедневную практику

Решил восьмую задачу из Euler Project (дана последовательность цифр, нужно выделить n идущих подряд цифр, дающих в произведение наибольшее число). Поначалу подумал, что можно как-нибудь решить ее без выделения подстрок и подсчета всех возможных произведений, но так и не пришел ни к чему адекватному, поэтому написал просто перебор

Ну и девятую решил, опять же, перебор, ничего интересного

Чем больше узнаю про потоки ввода/вывода в джаве, тем сильнее запутываюсь: в некоторых классах есть форматированный вывод, в некоторых - нет, где-то есть readLine(), а где-то нет. В этом надо получше разобраться, но, наверное, немного позже. Пока что будет достаточно использовать FileReader + Scanner для чтения файлов и FileWriter для записи в файл. Меня, правда, несколько напрягает, что я не могу указать конкретную кодировку, в которой производить чтение/запись, но, я думаю, пока что это не будет для меня особой проблемой

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

Нашел проект CodingBat, тоже задачи по программированию, но в большей степени ориентированные на использование инструментов языка. Надо попробовать

Завтра посвящу большую часть свободного времени Core Java и практике программирования. Начну делать консольную змейку. Если останется время, попробую почитать SICP. Постараюсь завтра сделать больше, чем я сделал за сегодня все время говорю это, но пока еще по сути ни одного нормального продуктивного дня не было, но это ведь не значит, что можно все бросить
4459.jpg140 Кб, 1080x1080
PoppyFanboy !VTLpv6lgGw 13 216122
Более-менее структурировал свои конспекты к курсу 6.042J. Также досмотрел пятую лекцию: было про малую теорему Ферма, функцию и теорему Эйлера и про шифрование RSA (как составляются публичный и секретный ключи и почему вообще вся эта схема работает)

Похрустел костями, сделал зарядку для спины, надо однозначно вводить это как ежедневную практику

Решил восьмую задачу из Euler Project (дана последовательность цифр, нужно выделить n идущих подряд цифр, дающих в произведение наибольшее число). Поначалу подумал, что можно как-нибудь решить ее без выделения подстрок и подсчета всех возможных произведений, но так и не пришел ни к чему адекватному, поэтому написал просто перебор

Ну и девятую решил, опять же, перебор, ничего интересного

Чем больше узнаю про потоки ввода/вывода в джаве, тем сильнее запутываюсь: в некоторых классах есть форматированный вывод, в некоторых - нет, где-то есть readLine(), а где-то нет. В этом надо получше разобраться, но, наверное, немного позже. Пока что будет достаточно использовать FileReader + Scanner для чтения файлов и FileWriter для записи в файл. Меня, правда, несколько напрягает, что я не могу указать конкретную кодировку, в которой производить чтение/запись, но, я думаю, пока что это не будет для меня особой проблемой

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

Нашел проект CodingBat, тоже задачи по программированию, но в большей степени ориентированные на использование инструментов языка. Надо попробовать

Завтра посвящу большую часть свободного времени Core Java и практике программирования. Начну делать консольную змейку. Если останется время, попробую почитать SICP. Постараюсь завтра сделать больше, чем я сделал за сегодня все время говорю это, но пока еще по сути ни одного нормального продуктивного дня не было, но это ведь не значит, что можно все бросить
04618680732f0840fbbc8911b7911e71.jpg642 Кб, 1000x1200
14 216145
Примешь мой грязный, мерзкий, пульсирующий пулл-реквест в своё нетронутое лоно?

Способ с решетом Эратосфена можно было бы тоже улучшить, оценивая верхнюю границу через https://en.wikipedia.org/wiki/Prime_number_theorem (https://math.stackexchange.com/a/1259), но там уже думать надо :P.
vuGEZMLRQTg.jpg42 Кб, 632x614
PoppyFanboy !VTLpv6lgGw 15 216169
>>216145
Спасибо, хорошая идея, на небольших значениях n должно работать немного быстрее

Оценка верхней границы n-ного простого тоже годно, теперь Эратосфен работает гораздо быстрее
Kirishima.Touka.full.1769314.jpg713 Кб, 1000x1373
PoppyFanboy !VTLpv6lgGw 16 216232
Закончил третью главу в Core Java, там не особо много интересного было: про BigInteger/BigDecimal и массивы. Сделал задачку из Project Euler, одну, мда. Начал делать змейку. За основу взял следующий концепт: каждый блок змейки - объект класса SnakeBlock содержит в себе свои координаты на поле и ссылку next на следующий блок. Таким образом, нам достаточно хранить только ссылку на голову и хвостовой сегмент змейки. Сдвинуть змейку с места можно двумя способами. Первый - пройтись по всем сегментам змейки с хвоста и заменить координаты каждого предыдущего блока на координаты следующего, координаты головного блока изменить в соответствии с направлением, куда движется змейка. Второй вариант - тупо отцепить хвостовой блок и прицепить новый головной. Первый получается дольше по времени, второй будет отъедать больше памяти. Вообще еще есть вариант хранить все поле целиком в двумерном массиве integer-ов, где сегменты змейки пронумерованы от 1 до n, начиная с головы. И когда нужно двигаться, мы проходим от новой головы до хвоста, увеличивая все на единицу, и отбрасываем в конце хвост, зануляя его. Но этот вариант прямо уж слишком много памяти съедает, если поле будет большим. Еще неожиданно осознал, что нормальную консольную змейку я вряд ли сделаю, потому что всякие KeyEvent-ы есть только в классах для gui, то есть либо быстро разбираться в gui, либо делать цикл, который будет непрерывно проверять, была ли нажата клавиша

CodingBat оказался таким себе проектом: задачек много, но все какие-то однообразные и простые

SICP не посмотрел и решил пока что не трогать, лучше сосредоточусь на другом

Забыл сделать зарядку сегодня, нужно походу ставить напоминания

В ближайшее время (где-то до воскресенья) буду в разъездах, без доступа к компу, так что придется довольствоваться Java компилятором на телефоне. Змейку, соответственно, тоже вряд ли смогу продолжать делать. Да и вообще, на самом деле, не знаю, сколько у меня будет свободного времени

Понял, что мне нужно четко определить свои цели и приоритеты на ближайшие день, неделю и месяц

За следующие (начиная с сегодняшнего) семь дней я хочу:
- пройти 4 лекции из 6.042J
- освоить как минимум четвертую главу из Core Java
- каждый день решать 3 задачи из Project Euler
- по возможности решать задачи с codeforces (начиная с простых)

За следующий месяц:
- пройти 6.042J на три четверти
- сделать игру змейку с gui
- пройти 4-7 главы Core Java
- нарешать как можно больше задач с Project Euler, Codeforces и с любых других проектов в разделах по типу "coding interview preparation"

я понимаю, что, скорее всего, в лучшем случае сделаю только половину запланированного, но сейчас у меня по крайней мере есть вектор, куда двигаться. До этого я метался из стороны в сторону, хватался то за одно, то за другое, долго думал, а нужно ли мне делать то, нужно ли мне изучать это, и в итоге топтался на месте, сейчас постараюсь следовать плану и заниматься более организованно
Kirishima.Touka.full.1769314.jpg713 Кб, 1000x1373
PoppyFanboy !VTLpv6lgGw 16 216232
Закончил третью главу в Core Java, там не особо много интересного было: про BigInteger/BigDecimal и массивы. Сделал задачку из Project Euler, одну, мда. Начал делать змейку. За основу взял следующий концепт: каждый блок змейки - объект класса SnakeBlock содержит в себе свои координаты на поле и ссылку next на следующий блок. Таким образом, нам достаточно хранить только ссылку на голову и хвостовой сегмент змейки. Сдвинуть змейку с места можно двумя способами. Первый - пройтись по всем сегментам змейки с хвоста и заменить координаты каждого предыдущего блока на координаты следующего, координаты головного блока изменить в соответствии с направлением, куда движется змейка. Второй вариант - тупо отцепить хвостовой блок и прицепить новый головной. Первый получается дольше по времени, второй будет отъедать больше памяти. Вообще еще есть вариант хранить все поле целиком в двумерном массиве integer-ов, где сегменты змейки пронумерованы от 1 до n, начиная с головы. И когда нужно двигаться, мы проходим от новой головы до хвоста, увеличивая все на единицу, и отбрасываем в конце хвост, зануляя его. Но этот вариант прямо уж слишком много памяти съедает, если поле будет большим. Еще неожиданно осознал, что нормальную консольную змейку я вряд ли сделаю, потому что всякие KeyEvent-ы есть только в классах для gui, то есть либо быстро разбираться в gui, либо делать цикл, который будет непрерывно проверять, была ли нажата клавиша

CodingBat оказался таким себе проектом: задачек много, но все какие-то однообразные и простые

SICP не посмотрел и решил пока что не трогать, лучше сосредоточусь на другом

Забыл сделать зарядку сегодня, нужно походу ставить напоминания

В ближайшее время (где-то до воскресенья) буду в разъездах, без доступа к компу, так что придется довольствоваться Java компилятором на телефоне. Змейку, соответственно, тоже вряд ли смогу продолжать делать. Да и вообще, на самом деле, не знаю, сколько у меня будет свободного времени

Понял, что мне нужно четко определить свои цели и приоритеты на ближайшие день, неделю и месяц

За следующие (начиная с сегодняшнего) семь дней я хочу:
- пройти 4 лекции из 6.042J
- освоить как минимум четвертую главу из Core Java
- каждый день решать 3 задачи из Project Euler
- по возможности решать задачи с codeforces (начиная с простых)

За следующий месяц:
- пройти 6.042J на три четверти
- сделать игру змейку с gui
- пройти 4-7 главы Core Java
- нарешать как можно больше задач с Project Euler, Codeforces и с любых других проектов в разделах по типу "coding interview preparation"

я понимаю, что, скорее всего, в лучшем случае сделаю только половину запланированного, но сейчас у меня по крайней мере есть вектор, куда двигаться. До этого я метался из стороны в сторону, хватался то за одно, то за другое, долго думал, а нужно ли мне делать то, нужно ли мне изучать это, и в итоге топтался на месте, сейчас постараюсь следовать плану и заниматься более организованно
UdB7fABtV-0.jpg350 Кб, 1454x2160
PoppyFanboy !VTLpv6lgGw 17 216359
Сегодня толком ни на что не было времени. Посмотрел шестую лекцию, было про теорию графов: определение самих графов, ряд понятий, связанных с ними. Довольно подробна была рассмотрена задача о раскраске графа (Graph Coloring Problem, не знаю точно, как на русском). Суть в том, чтобы используя наименьшее количество различных цветов, раскрасить вершины графа так, чтобы никакие две смежные вершины не были бы одного цвета. Лектор еще привел кучу примеров, где существование эффективного алгоритма для решения этой задачи было бы крайне полезно (составление эффективных расписаний (здесь вершины - это айтемы расписания, некоторые из которых не могут проходить в одно и то же время, а цвета - временные промежутки), обновление серверов, распределение радиочастот по вышкам). Показал жадный алгоритм для нахождения хоть какого-то решения, доказал оценку сверху для него. Забавно, но в некоторых случаях, когда этот алгоритм хоть и дает самое оптимальное решение, но оценка сверху при этом получается оочень грубой (например, в случае, когда граф представляет из себя центральную вершину + исходящие из нее ребра)

Кодить с телефона практически невозможно (но других вариантов у меня пока что нет), так что с тремя задачами в день я погорячился. Сделал 12 задачу из Project Euler (там запутанное условие, но в основе лежит написание метода, который бы искал количество делителей: я просто перебрал числа от 2 до n/2, не знаю, наверное, есть что-то более эффективное, потом посмотрю)

В 13 задаче по Project Euler нужно найти первые 10 цифр из старших разрядов суммы ста пятидесятизначных чисел. Конечно, тут можно считерить, использовав класс BigInteger, но я лучше попробую реализовать как-нибудь по-другому. Сначала была идея как-то суммировать, начиная со старших разрядов, я подумал, что они сделают наибольший вклад в первые 10 цифр суммы, но потом понял, что при достаточном количестве чисел в сумме младшие разряды тоже могут отразиться на старших, копейка рубль бережет, мда. Так что, наверное, лучше будет реализовать полноценное сложение в столбик. Ближайшее время буду делать это, остальные задачи из Project Euler отложу, все равно неудобно с мобилки писать

Я недавно словил состояние какой-то растерянности из-за того, что не мог найти никакого списка "toy projects", отсортированных по сложности. У самого сейчас идей не очень много, но, я думаю, по мере того, как буду продолжать знакомиться с джавой, что-нибудь придумаю или найду, что скопировть. Все-таки на данный момент я изучил только работу со строками, массивы, ветвление и прочие базовые вещи; с таким набором далеко не уйдешь
UdB7fABtV-0.jpg350 Кб, 1454x2160
PoppyFanboy !VTLpv6lgGw 17 216359
Сегодня толком ни на что не было времени. Посмотрел шестую лекцию, было про теорию графов: определение самих графов, ряд понятий, связанных с ними. Довольно подробна была рассмотрена задача о раскраске графа (Graph Coloring Problem, не знаю точно, как на русском). Суть в том, чтобы используя наименьшее количество различных цветов, раскрасить вершины графа так, чтобы никакие две смежные вершины не были бы одного цвета. Лектор еще привел кучу примеров, где существование эффективного алгоритма для решения этой задачи было бы крайне полезно (составление эффективных расписаний (здесь вершины - это айтемы расписания, некоторые из которых не могут проходить в одно и то же время, а цвета - временные промежутки), обновление серверов, распределение радиочастот по вышкам). Показал жадный алгоритм для нахождения хоть какого-то решения, доказал оценку сверху для него. Забавно, но в некоторых случаях, когда этот алгоритм хоть и дает самое оптимальное решение, но оценка сверху при этом получается оочень грубой (например, в случае, когда граф представляет из себя центральную вершину + исходящие из нее ребра)

Кодить с телефона практически невозможно (но других вариантов у меня пока что нет), так что с тремя задачами в день я погорячился. Сделал 12 задачу из Project Euler (там запутанное условие, но в основе лежит написание метода, который бы искал количество делителей: я просто перебрал числа от 2 до n/2, не знаю, наверное, есть что-то более эффективное, потом посмотрю)

В 13 задаче по Project Euler нужно найти первые 10 цифр из старших разрядов суммы ста пятидесятизначных чисел. Конечно, тут можно считерить, использовав класс BigInteger, но я лучше попробую реализовать как-нибудь по-другому. Сначала была идея как-то суммировать, начиная со старших разрядов, я подумал, что они сделают наибольший вклад в первые 10 цифр суммы, но потом понял, что при достаточном количестве чисел в сумме младшие разряды тоже могут отразиться на старших, копейка рубль бережет, мда. Так что, наверное, лучше будет реализовать полноценное сложение в столбик. Ближайшее время буду делать это, остальные задачи из Project Euler отложу, все равно неудобно с мобилки писать

Я недавно словил состояние какой-то растерянности из-за того, что не мог найти никакого списка "toy projects", отсортированных по сложности. У самого сейчас идей не очень много, но, я думаю, по мере того, как буду продолжать знакомиться с джавой, что-нибудь придумаю или найду, что скопировть. Все-таки на данный момент я изучил только работу со строками, массивы, ветвление и прочие базовые вещи; с таким набором далеко не уйдешь
1532199235144.png1,6 Мб, 3840x2160
18 216380
15174234743100.jpg383 Кб, 2048x2048
PoppyFanboy !VTLpv6lgGw 19 216469
Сегодня освободился только под вечер. Не стану искать себе оправданий, большую часть времени вечером я успешно потратил непонятно на что. Завтра постараюсь получше распорядиться свободным временем, которого у меня и без того сейчас не особо много

Доделал сложение в столбик, завтра проверю его на том большом наборе пятидесятизначных чисел. Есть подозрение, что я где-то мог не доглядеть что-то

В разделе курса "Readings" обычно дается несколько больше информации, чем на лекциях, так и сейчас в шестой лекции не освещалась задача составления свадебных пар между множествами мужчин и женщин (суть примерно в следующем: изначально нам известно, что множество мужчин и больше множества женщин, а также известно,, какие из мужчин и женщин мы можем составить; в итоге нам нужно определить, можно ли всех переженить так, чтобы всем мужчинам досталась женщина). Там довольно подробно все это рассматривается, доказвается теорема, определяющее достаточное и нобходимое условие для существования решения задачи (Hall's Matching Theorem). Завтра почитаю про это, если будет время

Неожиданно дошло, что в игре "Змейка" вовсе необязательно хранить все поле или создавать отдельный класс для сегментов змейки. Достаточно хранить массив координат сегментов, расположенных по порядку от головного до хвостового. Когда нужно будет двигаться, мы просто сдвинем все координаты. Но, на самом деле, тут теперь возникает проблема с изменением размера змейки: придется создавать новый массив каждый раз, когда змейка съедает жука, или изначально запастись массивом размерности равной площади поля (в варианте, где каждый сегмент - это отдельный объект, можно довольно легко цеплять новые объекты в цепочку). В общем, пока что наиболее првлекательным мне кажется изначальный вариант с сегментами-объектами. Как будет доступ к компу, бегло познакомлюсь с JavaFX или Swing и начну уже реализовывать

>>216380
О, выглядит вкусно. Спасибо большое
20 216481
>>216469
А что, нельзя сделать массив динамическим? Нельзя ли просто пушить в массив сегменты тела змейки, когда она съедает яблоко(или жука, как ты говоришь)?
cc2.png51 Кб, 994x1044
PoppyFanboy !VTLpv6lgGw 21 216485
>>216481
А, блин, ну да, ты прав, можно и лучше сделать так

Просто я все думал о том, как же была реализована змейка во всяких тетрисах. Там ведь поле 10 на 20, вряд ли возможно сохранить все координаты сегментов змейки. Вот тут
http://jumptuck.com/2012/09/20/snake-game-arm-microcontroller/
кто-то пришел к интересному решению: хранить координаты головы, хвоста и координаты угловых сегментов змейки. Однако такая схема тоже может выродиться в хранение всех-всех координат, если змейка будет делать слишком много поворотов.

То есть тут если хранить все координаты, то нужно ограничивать длину змейки (как раз в тетрисе, кажется, примерно так и было сделано: по достижении определенный длины игра начиналась заново, но на большей скорости). А если хранить угловые координаты, то придется ограничивать количество мест, в которых змея может согнуться (что было бы забавным усложнением в правилах игры, но вряд ли позволяло бы комфортно играть)

В общем, не знаю, кроме этих двух вариантов в голову ничего не приходит
chaoschild45.png2,1 Мб, 1920x1080
22 216488
>>216469>>216481
ArrayList работает как std::vector, выделяя с запасом, он здесь лучше всего подходит, имхо.

>>216485
Ты разве под кофеварку пишешь, чтобы эти ограничения на тебя вообще влияли? На современных компьютерах ты намного раньше упрёшься в CPU, чем в RAM, можно хранить хоть 10000×10000, но вот обновление такой змейки уже будет притормаживать.

С координатами углов очень хорошая идея (и не сильно сложнее клеточек по отдельности), да. Что важнее, в этом варианте каждый кадр будет обновляться около 2 клеток, голова и хвост, а не O(snakeLen). Учитывая сказанное выше о CPU, ты должен присмотреться к варианту с углами именно по этой причине, а не из-за памяти.
23 216489
(Через секунду дошло, что в варианте с LinkedList тоже будет обновление 2 клеток, ок.)
1533337813056.jpg175 Кб, 1080x1350
PoppyFanboy !VTLpv6lgGw 24 216736
Ох, все совсем грустно, но ничего, в воскресенье утром я приеду домой, и тогда будет гораздо больше времени на штуки, которыми я хочу заниматься. Второго августа был пиздецки долгий и нудный день, не было практически ни единой возможности почитать/посмотреть что-нибудь, разве что пока я ехал в машине. Бтв, тот день был настолько жаркий, что я всю дорогу мог наблюдать миражи на дороге. Как будто вдалеке, почти на уровне горизонта, на дороге была разлита небесного цвета жидкость, в которой отражался ближний свет фар автомобилей

Программу, которая складывает в столбик, проверю дома: слишком уж мне неохота маяться с наэкранной клавиатурой, чтобы вбить входные данные

>>216469

> задача составления свадебных пар между множествами мужчин и женщин (суть примерно в следующем: изначально нам известно, что множество мужчин и больше множества женщин, а также известно,, какие из мужчин и женщин мы можем составить; в итоге нам нужно определить, можно ли всех переженить так, чтобы всем мужчинам досталась женщина)


ебац, надо, наверное, хотя бы бегло просматривать напечатанный текст, прежде чем публиковать. Я имел в виду следующее:

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

Не успел до конца еще дочитать про это сегодня: дошел только до доказательства Hall's Matching Theorem (как раз необходимое и достаточное условие для решения вышеприведённой задачи); там осталось посмотреть какое-то другое условие для существования решения (судя по всему, работающее только в одну сторону)

Посмотрел почти полностью седьмую лекцию. Было про Stable Marriage Problem: у каждого парня и девушки есть список нравящихся им персон (обязательно противоположного пола, иначе - гроб-гроб-кладбище и решение будет не всегда), нужно составить пары так, чтобы не нашлось парня и девушки, которые бы любили друг друга больше, чем своих супруг (то есть чтобы ни у кого не было возможности изменять с кем-либо). Как оказалось, решение для этой задачи существует всегда и есть даже алгоритм, который работает не более, чем за n^2+1 итераций (внутри итераций все работает за O(1)). Особенность алгоритма в том, что в итоге мы получим такое паросочетание, что из всех возможных паросочетаний у мужчин будет наиболее "благоприятный" вариант супруги, а у женщин - наименее (ну, или наоборот, зависит от построения алгоритма). То есть, если, скажем есть два варианта паросочетаний: в первом абстрактная Маша забирает себе парня, стоящего у нее в списке на первом месте, а во втором варианте ей попадается тот, которого она пометила как наименее привлекательного, то при условии, что других возможных паросочетаний нет, алгоритм непременно выдаст Машу за парня, которого она, возможно, всей душой ненавидит. Тем не менее, у Маши не будет возможности изменять, ведь никто из оставшихся парней не любит Машу столь же сильно, как свою супругу. Такая грустная история

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

Уфф, теперь хоть совесть не грызет из-за того, что не пишу сюда. Надеюсь, на этот раз вышло не особо косноязычно. Завтра будет еще один вынужденно-непродуктивный день, но ничего, уже совсем скоро все наладится

>>216488
Да мне просто очень интересно вдруг стало, как раньше люди выкручивались при малых объемах доступной памяти Не знаю, насколько это правда, но слышал, что когда просчитывали траекторию полета Гагарина, основной проблемой СССР-овских ЭВМ была не низкая по сравнению с машинами США производительность, а малый запас памяти. Так что это, судя по всему, было своего рода искусством - уложиться в заданный объем. Слышал из третьих уст миллион лет назад, так что ничего не утверждаю А про то, что я скорее об CPU головой ударюсь - это ты прав. В варианте с хранением углов еще ведь нужно на каждом шаге змейки проверять, не совпал ли хвостовой сегмент с каким-либо из углов, и если да, то удалять его. Так что в среднем вариант со связанным списком будет работать, наверное, даже быстрее (или, как ты сказал, примерно так же). Энивей, как приеду домой, попробую реализовать оба из них
1533337813056.jpg175 Кб, 1080x1350
PoppyFanboy !VTLpv6lgGw 24 216736
Ох, все совсем грустно, но ничего, в воскресенье утром я приеду домой, и тогда будет гораздо больше времени на штуки, которыми я хочу заниматься. Второго августа был пиздецки долгий и нудный день, не было практически ни единой возможности почитать/посмотреть что-нибудь, разве что пока я ехал в машине. Бтв, тот день был настолько жаркий, что я всю дорогу мог наблюдать миражи на дороге. Как будто вдалеке, почти на уровне горизонта, на дороге была разлита небесного цвета жидкость, в которой отражался ближний свет фар автомобилей

Программу, которая складывает в столбик, проверю дома: слишком уж мне неохота маяться с наэкранной клавиатурой, чтобы вбить входные данные

>>216469

> задача составления свадебных пар между множествами мужчин и женщин (суть примерно в следующем: изначально нам известно, что множество мужчин и больше множества женщин, а также известно,, какие из мужчин и женщин мы можем составить; в итоге нам нужно определить, можно ли всех переженить так, чтобы всем мужчинам досталась женщина)


ебац, надо, наверное, хотя бы бегло просматривать напечатанный текст, прежде чем публиковать. Я имел в виду следующее:

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

Не успел до конца еще дочитать про это сегодня: дошел только до доказательства Hall's Matching Theorem (как раз необходимое и достаточное условие для решения вышеприведённой задачи); там осталось посмотреть какое-то другое условие для существования решения (судя по всему, работающее только в одну сторону)

Посмотрел почти полностью седьмую лекцию. Было про Stable Marriage Problem: у каждого парня и девушки есть список нравящихся им персон (обязательно противоположного пола, иначе - гроб-гроб-кладбище и решение будет не всегда), нужно составить пары так, чтобы не нашлось парня и девушки, которые бы любили друг друга больше, чем своих супруг (то есть чтобы ни у кого не было возможности изменять с кем-либо). Как оказалось, решение для этой задачи существует всегда и есть даже алгоритм, который работает не более, чем за n^2+1 итераций (внутри итераций все работает за O(1)). Особенность алгоритма в том, что в итоге мы получим такое паросочетание, что из всех возможных паросочетаний у мужчин будет наиболее "благоприятный" вариант супруги, а у женщин - наименее (ну, или наоборот, зависит от построения алгоритма). То есть, если, скажем есть два варианта паросочетаний: в первом абстрактная Маша забирает себе парня, стоящего у нее в списке на первом месте, а во втором варианте ей попадается тот, которого она пометила как наименее привлекательного, то при условии, что других возможных паросочетаний нет, алгоритм непременно выдаст Машу за парня, которого она, возможно, всей душой ненавидит. Тем не менее, у Маши не будет возможности изменять, ведь никто из оставшихся парней не любит Машу столь же сильно, как свою супругу. Такая грустная история

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

Уфф, теперь хоть совесть не грызет из-за того, что не пишу сюда. Надеюсь, на этот раз вышло не особо косноязычно. Завтра будет еще один вынужденно-непродуктивный день, но ничего, уже совсем скоро все наладится

>>216488
Да мне просто очень интересно вдруг стало, как раньше люди выкручивались при малых объемах доступной памяти Не знаю, насколько это правда, но слышал, что когда просчитывали траекторию полета Гагарина, основной проблемой СССР-овских ЭВМ была не низкая по сравнению с машинами США производительность, а малый запас памяти. Так что это, судя по всему, было своего рода искусством - уложиться в заданный объем. Слышал из третьих уст миллион лет назад, так что ничего не утверждаю А про то, что я скорее об CPU головой ударюсь - это ты прав. В варианте с хранением углов еще ведь нужно на каждом шаге змейки проверять, не совпал ли хвостовой сегмент с каким-либо из углов, и если да, то удалять его. Так что в среднем вариант со связанным списком будет работать, наверное, даже быстрее (или, как ты сказал, примерно так же). Энивей, как приеду домой, попробую реализовать оба из них
sage PoppyFanboy !VTLpv6lgGw 25 216999
Добрался домой
566.jpg128 Кб, 1920x1080
PoppyFanboy !VTLpv6lgGw 26 217058
Ффак, зачем я такой живу. В общем, минус день, вообще ничего не делал. Сейчас на ночь глядя пытаться что-то из себя изобразить нет смысла, чувствую себя так себе (наверное, из-за того, что пришлось встать сегодня в пять утра), так что возложу все сегодняшние проблемы на завтрашнего меня. Мда, чувствую себя жалким.

Составил себе список на завтра:
1) ≥ 1.5 часа: Core Java
2) ≥ 1 часа: разбирать основы JavaFX, чтобы можно было сделать змейку (от идеи делать ее в консоли отказался, так как там нет нормально реализованных events, чтобы можно было отслеживать нажатия клавиш)
3) ≥ 1 часа: писать логику для змейки (две разных реализации)
4) Повторить пройденный материал из 6.042J по флеш-карточкам (лекции 1-5)
5) Сделать флеш-карточки для лекций 6-7
6) 45 минут - Problem Set 3 (6.042J)
7) В остальное время решать задачки из Project Euler / еще откуда-нибудь

Тут вроде и не очень-то много для того количества времени, которое у меня есть завтра, но что-то мне подсказывает, что я и этого не сделаю толком. Ну да ладно, все равно мне ничего более не остается, кроме как попробовать еще раз

Недавно заметил, что меня очень сильно отвлекают фоновые шумы, в том числе музыка. Бывает, в наушниках что-то играет, а я тупо втыкаю в монитор, застопорившись на каком-то моменте, и не могу дальше сдвинуться. Постараюсь завтра поменьше включать музыку на фоне
584d11e75c423ca6ca9dd4703a565fe8.jpg76 Кб, 1000x679
27 217059
>>217058
Нян! А я наоборот как-то, всю жизнь не мог кодить (и вообще заниматься умственным трудом) под музыку, но последнее время замечаю, что вполне получается. В лучшем случае мозг вырос и распараллелился, в худшем я решаю слишком простые задачи.
you-are-a-pirate.webm11,5 Мб, webm,
534x360, 1:36
PoppyFanboy !VTLpv6lgGw 28 217170
Кое-что поделал в рамках разработки игры: теперь можно управлять змейкой. Пока что выглядит все просто отвратно: куча полей, объявленных не как private, три класса в одном файле (SnakeGame.java), да и в целом мне не очень все это нравится чисто эстетически

За рассуждениями о том, как лучше представить змейку в памяти компьютера я совсем забыл, что мне еще ее как-то надо будет отрисовывать. Тут я нашел пока что два варианта: отрисовывать каждый кадр отдельно на Canvas или же создать несколько объектов типа javafx.scene.shape.Rectangle и менять их координаты. Сегодня пробовал реализовать второй вариант: для этого пришлось добавить дополнительное поле типа Rectangle в класс SnakeBlock, чтобы можно было менять координаты блоков и тем самым автоматически изменять их местоположение на экране. Удобно, вроде потом к этому всему как-то можно прикрутить анимацию (но не в этот раз). Первый вариант тоже можно было бы довольно легко реализовать: чтобы передвинуть змейку не нужно перерисовывать все, достаточно нарисовать один квадратик и закрасить хвостовой квадрат цветом фона (плюс не нужно было бы менять координаты всех сегментов змейки, как во втором варианте с Rectangle), но я чет затупил. Не знаю, буду ли потом реализовывать этот вариант (просто в качестве практического задания). Пусть пока что остается, как есть. Рефакторинг сделаю, и будет нормально, наверное

Пытаюсь писать комментарии на англицком языке. Пока что туговато и криво, но пусть будет, все какая-никакая практика

https://github.com/PoppyFanboy/snakegame

Немного почитал Core Java. Осознал, что для того, чтобы сделать объект по-настоящему immutable нужно помимо того, что сделать все поля приватными и запретить доступ к методам-мутаторам, еще и объявить класс объекта как final. Если не запретить наследование от этого класса, то можно сварганить нечто подобное:
https://stackoverflow.com/questions/12306651/why-would-one-declare-an-immutable-class-final-in-java
и передать вот такой объект-самозванец в метод, который принимает супер-класс. Метод думает, что обращается с иммутабельным объектом, но на деле объект может быть изменен извне таким образом, что аксессор какого-нибудь приватного поля может выдать вообще что угодно

Повторил материал с 1-5 лекций

Где-то четверть того времени, что занимался, продержался без чего-либо на фоне, больше не смог стерпеть. Вероятно, из-за этого потратил определенное количество времени впустую. Ну ничего, все прошло не так уж плохо

Больше ничего не сделал. Слишком много времени провозился со змейкой. Завтра буду смотреть восьмую лекцию из 6.042J, решать задачки из Project Euler, прорешаю третий Problem Set, сделаю флеш-карточки для лекций 6-7 (по своим конспектам)

Бтв, там прошла неделя с того дня, когда я напланировал себе кучу всего. Нет смысла подводить какие-то итоги, я даже половину не выполнил. Тем не менее, не скажу, что само составление подобного списка целей оказалось бесполезным. Напротив, когда задано какое-то направление гораздо проще двигаться вперед. На следующую неделю не буду составлять список целей, буду просто чередовать практику и теорию, пока что мне есть, чем заняться в обоих областях

>>217059
Вероятно, у всех по-разному работает
you-are-a-pirate.webm11,5 Мб, webm,
534x360, 1:36
PoppyFanboy !VTLpv6lgGw 28 217170
Кое-что поделал в рамках разработки игры: теперь можно управлять змейкой. Пока что выглядит все просто отвратно: куча полей, объявленных не как private, три класса в одном файле (SnakeGame.java), да и в целом мне не очень все это нравится чисто эстетически

За рассуждениями о том, как лучше представить змейку в памяти компьютера я совсем забыл, что мне еще ее как-то надо будет отрисовывать. Тут я нашел пока что два варианта: отрисовывать каждый кадр отдельно на Canvas или же создать несколько объектов типа javafx.scene.shape.Rectangle и менять их координаты. Сегодня пробовал реализовать второй вариант: для этого пришлось добавить дополнительное поле типа Rectangle в класс SnakeBlock, чтобы можно было менять координаты блоков и тем самым автоматически изменять их местоположение на экране. Удобно, вроде потом к этому всему как-то можно прикрутить анимацию (но не в этот раз). Первый вариант тоже можно было бы довольно легко реализовать: чтобы передвинуть змейку не нужно перерисовывать все, достаточно нарисовать один квадратик и закрасить хвостовой квадрат цветом фона (плюс не нужно было бы менять координаты всех сегментов змейки, как во втором варианте с Rectangle), но я чет затупил. Не знаю, буду ли потом реализовывать этот вариант (просто в качестве практического задания). Пусть пока что остается, как есть. Рефакторинг сделаю, и будет нормально, наверное

Пытаюсь писать комментарии на англицком языке. Пока что туговато и криво, но пусть будет, все какая-никакая практика

https://github.com/PoppyFanboy/snakegame

Немного почитал Core Java. Осознал, что для того, чтобы сделать объект по-настоящему immutable нужно помимо того, что сделать все поля приватными и запретить доступ к методам-мутаторам, еще и объявить класс объекта как final. Если не запретить наследование от этого класса, то можно сварганить нечто подобное:
https://stackoverflow.com/questions/12306651/why-would-one-declare-an-immutable-class-final-in-java
и передать вот такой объект-самозванец в метод, который принимает супер-класс. Метод думает, что обращается с иммутабельным объектом, но на деле объект может быть изменен извне таким образом, что аксессор какого-нибудь приватного поля может выдать вообще что угодно

Повторил материал с 1-5 лекций

Где-то четверть того времени, что занимался, продержался без чего-либо на фоне, больше не смог стерпеть. Вероятно, из-за этого потратил определенное количество времени впустую. Ну ничего, все прошло не так уж плохо

Больше ничего не сделал. Слишком много времени провозился со змейкой. Завтра буду смотреть восьмую лекцию из 6.042J, решать задачки из Project Euler, прорешаю третий Problem Set, сделаю флеш-карточки для лекций 6-7 (по своим конспектам)

Бтв, там прошла неделя с того дня, когда я напланировал себе кучу всего. Нет смысла подводить какие-то итоги, я даже половину не выполнил. Тем не менее, не скажу, что само составление подобного списка целей оказалось бесполезным. Напротив, когда задано какое-то направление гораздо проще двигаться вперед. На следующую неделю не буду составлять список целей, буду просто чередовать практику и теорию, пока что мне есть, чем заняться в обоих областях

>>217059
Вероятно, у всех по-разному работает
msSVndDHDQ.jpg208 Кб, 1080x1080
PoppyFanboy !VTLpv6lgGw 29 217249
Опять слил день впустую, но на этот раз решил не ложиться спать, а сделать хоть что-нибудь в ущерб сну

По совету @runewalsh немного пофиксил змейку. Там действительно на данный момент нет необходимости различать блоки змейки (а была бы необходимость в этом, то использовать связные списки тут уже незачем, достаточно будет ArrayList)

Посмотрел восьмую лекцию: было про деревья, связанные с ними определения, свойства деревьев, spanning trees, про то, что в любом связном графе можно выделить spanning tree, ну и доказательство работоспособности жадного алгоритма по построению минимального остовного дерева (для взвешенных графов). Там были приведены два варианта алгоритма: первый с самого начала строит дерево, а второй - строит граф без циклов (оба на каждом шаге присоединяют доступное ребро с наименьшим весом) - алгоритмы Прима и Краскала, соответственно

Частично прорешал Problem Set 3: задачи на теорию чисел, вроде не очень сложные

Чет мне вообще неудобно сидеть за столом. То ли стул плохой, то ли стол слишком высокий/низкий, то ли я как-то неправильно сижу, не знаю. Гораздо удобнее заниматься, сидя/лежа на кровати. Но это, наверное, для спины не очень здорово

Не знаю, как я завтра проснусь, может, и не стоило так поздно ложиться.
enum.png19 Кб, 748x393
30 217278
>>217249
Всё это прекрасно, но зачем ты обфусцируешь код? X)
В таких ситуациях у меня обычно всплывают идеи сделать массив смещений и индексировать его энумом, т. е.

enum Direction { NORTH, EAST, SOUTH, WEST }
class Offset {
int x, y;
Offset(int x, int y) { this.x = x; this.y = y;}
}
...
static Offset[] DIRECTIONS = new Offset[]{ new Offset(0, -1), new Offset(+1, 0), new Offset(0, +1), new Offset(-1, 0) };
...
// int x, y, Direction d
x += DIRECTIONS[d.ordinal()].x;
y += DIRECTIONS[d.ordinal()].y;

не уверен, что так проще, но вот.
PoppyFanboy !VTLpv6lgGw 31 217283
>>217278
Не знал про то, что есть метод, который возвращает порядковый номер константы из объявления перечисления, поэтому меня и понесло куда-то не туда. Так действительно гораздо проще, спасибо, пофиксил :3
a2b46f978dfd741a8ab06f060c6280e1.png603 Кб, 752x980
32 217286
>>217283
А не, можно ещё круче:

enum Direction {
    NORTH, EAST, SOUTH, WEST;

    // ну или оставить единственным Offset'ом, здесь для краткости
    static int[] DXS = { 0, +1, 0, -1 };
    static int[] DYS = { -1, 0, +1, 0 };

    int dx() { return DXS[this.ordinal()]; }
    int dy() { return DYS[this.ordinal()]; }
}
...
x += d.dx();
y += d.dy();

:D
И остальные методы, типа ableToChange, туда же.
830.jpg99 Кб, 960x639
PoppyFanboy !VTLpv6lgGw 33 217353
Наплодил в своей змейке кучу классов и методов, не знаю, насколько все это оправданно, но вроде выглядит по крайней мере не супер-уродливо. Добавил генератор яблок на поле + возможность поставить стенки, вроде все работает. Теперь нужно приделать увеличение скорости, подсчет очков и тогда можно будет делать GUI с кнопочками, менюшками, scoreboard-ами и прочими штуками

Посмотрел, что такое Codewars и остался приятно удивлен: довольно много заданий, структурированных по сложности и категориям + можно проверить свой код на наборе тестов. Единственная проблема - некоторые страницы сайта не открываются ни под каким браузером, кроме интернет эксплорера к слову, через эксплорер, хоть и отображаются все страницы сайта, но невозможно отправить код на проверку. Тем не менее, если немножко извернуться, то вполне можно пользоваться. Судя по тому, что пишут в интернетах, такая проблема возникает у всех пользователей win7-8, для codewars нужна как минимум десятка (не знаю, как это и почему). Можно было бы обновиться до последней винды, но мне слишком лень этим заниматься

Чет я забросил Project Euler, завтра обязательно нужно будет порешать что-нибудь. Еще завтра хочу посмотреть девятую лекцию по дискретке и дорешать третий Problem Set. Змейку трогать особо не буду, и так сегодня с ней почти весь день провозился ну, по правде сказать, не весь день, а во время свободное от плевания в потолок

>>217286
Вот это уже some next level shit, выглядит максимально вкусно
sage PoppyFanboy !VTLpv6lgGw 34 217354
>>217353
бтв наконец-то пересел с javac компилятора на IDE, думаю, пока что я достаточно наигрался со связкой командная строка + блокнот. Поставил себе intellij idea в основном потому, что ни эклипс, ни нетбинс ни под какими предлогами не хотели запускаться/устанавливаться, хотя я вроде правильно прописал все эти CLASSPATH, PATH, JAVA_HOME Вроде пока что нормально, но пугает обилие подсказок на экране и авторедактор. Потом надо будет покопаться в настройках и отключить автоматическое indentation, а то оно пока что больше мешает, чем сохраняет время
sage PoppyFanboy !VTLpv6lgGw 35 217427
Проснулся супер-поздно, часов так в одиннадцать-двенадцать утра (до этого старался вставать не позже девяти). Хотел было продолжить смотреть лекции по теории графов, но что-то не задалось: там опять лекции читает какой-то неопытный чел, почти невозможно его слушать. Попробовал читать Readings к лекциям по теории графов, но не выдержал и тридцати минут. Так я все и забросил. Весь день чувствую себя подавленным. Ничего не хочется делать, или, может, хочется не делать ничего. Мне кажется, основная проблема в том, что я ставлю слишком абстрактные цели и не записываю их никуда: просто планирую в голове. Завтра надо будет составить полный список того, чем я бы хотел заниматься в ближайшее время и разбить каждый пункт по шагам. А потом начать выполнять. С последним обычно всегда возникают проблемы, вот как сегодня, не знаю, что с этим делать. В интернетах в таких случаях обычно советуют найти себе мотивацию к действию, но это ведь полнейший бред: какая-то попытка угодить себе и состоянию своего комфорта, скрыть свое безволие за жирным слоем абстракции. Все эти бесконечные паблики и аккаунты на тумблере, в которых постятся красивые рабочие столы, красочно оформленные конспекты и прочее барахло, которые якобы должны вдохновлять и мотивировать на действие. Если уж на то пошло, то само действие должно мотивировать на его выполнение, ждать, пока наступит благоприятное время для какой-либо деятельности - нелепо. Наблюдая подобное, в голове сразу же всплывает образ Манилова из Мертвых душ, брр. И другая крайность: громкие цитаты вроде "Push yourself because because no one else is going to do it for you", "Fall 7 times, get up 8", грубые призывы к действию от людей, которые и сами-то ничем не лучше меня в плане дисциплины. Тоже, с моей точки зрения, абсолютно лишняя вещь, которая никак не помогает, ведь все прекрасно знают, что нужно делать для того, чтобы достичь "успеха": много работать, уметь отдыхать, правильно питаться, рано ложиться и вставать, составлять планы и расписания, ставить цели, вести ежедневник и прочие очевидные вещи. Почему же в таком случае так много людей каждый день тонут в прокрастинации? Я не знаю, знал бы - не писал все это, скорее всего, все это индивидуально, и нет никакого универсального рецепта. Навязывание идеи о том, что чувствовать себя в упадке - неправильно, обесценивание чужих проблем - все, из чего состоят подобные призывы. Людям, находящимся в упадке, скорее нужно сочувствие со стороны другого человека, чтобы кто-то признал значимость трудностей, через которые проходит человек. А вот что еще хуже, чем все, о чем я написал выше, - это всевозможные "истории успеха". Авторы подобных книг возможно ощущают, что пишут прямо-таки пошаговый гайд к достижению великих целей. По мне так, гораздо полезнее будет почитать про то, как кто-то потерпел глобальную неудачу, хотя и это особо не имеет смысла: у всех изначально разные возможности, индивидуальные истории особо не помогут. В общем, не знаю, я ничего не знаю
sage PoppyFanboy !VTLpv6lgGw 35 217427
Проснулся супер-поздно, часов так в одиннадцать-двенадцать утра (до этого старался вставать не позже девяти). Хотел было продолжить смотреть лекции по теории графов, но что-то не задалось: там опять лекции читает какой-то неопытный чел, почти невозможно его слушать. Попробовал читать Readings к лекциям по теории графов, но не выдержал и тридцати минут. Так я все и забросил. Весь день чувствую себя подавленным. Ничего не хочется делать, или, может, хочется не делать ничего. Мне кажется, основная проблема в том, что я ставлю слишком абстрактные цели и не записываю их никуда: просто планирую в голове. Завтра надо будет составить полный список того, чем я бы хотел заниматься в ближайшее время и разбить каждый пункт по шагам. А потом начать выполнять. С последним обычно всегда возникают проблемы, вот как сегодня, не знаю, что с этим делать. В интернетах в таких случаях обычно советуют найти себе мотивацию к действию, но это ведь полнейший бред: какая-то попытка угодить себе и состоянию своего комфорта, скрыть свое безволие за жирным слоем абстракции. Все эти бесконечные паблики и аккаунты на тумблере, в которых постятся красивые рабочие столы, красочно оформленные конспекты и прочее барахло, которые якобы должны вдохновлять и мотивировать на действие. Если уж на то пошло, то само действие должно мотивировать на его выполнение, ждать, пока наступит благоприятное время для какой-либо деятельности - нелепо. Наблюдая подобное, в голове сразу же всплывает образ Манилова из Мертвых душ, брр. И другая крайность: громкие цитаты вроде "Push yourself because because no one else is going to do it for you", "Fall 7 times, get up 8", грубые призывы к действию от людей, которые и сами-то ничем не лучше меня в плане дисциплины. Тоже, с моей точки зрения, абсолютно лишняя вещь, которая никак не помогает, ведь все прекрасно знают, что нужно делать для того, чтобы достичь "успеха": много работать, уметь отдыхать, правильно питаться, рано ложиться и вставать, составлять планы и расписания, ставить цели, вести ежедневник и прочие очевидные вещи. Почему же в таком случае так много людей каждый день тонут в прокрастинации? Я не знаю, знал бы - не писал все это, скорее всего, все это индивидуально, и нет никакого универсального рецепта. Навязывание идеи о том, что чувствовать себя в упадке - неправильно, обесценивание чужих проблем - все, из чего состоят подобные призывы. Людям, находящимся в упадке, скорее нужно сочувствие со стороны другого человека, чтобы кто-то признал значимость трудностей, через которые проходит человек. А вот что еще хуже, чем все, о чем я написал выше, - это всевозможные "истории успеха". Авторы подобных книг возможно ощущают, что пишут прямо-таки пошаговый гайд к достижению великих целей. По мне так, гораздо полезнее будет почитать про то, как кто-то потерпел глобальную неудачу, хотя и это особо не имеет смысла: у всех изначально разные возможности, индивидуальные истории особо не помогут. В общем, не знаю, я ничего не знаю
bench.jpg3,5 Мб, 2540x2540
PoppyFanboy !VTLpv6lgGw 36 217622
Съездил загород, подальше от интернета, шума автомобилей и прочих прелестей жизни в крупном городе. Почти ничего не делал, только читал и конспектировал Readings к лекциям по графам. Сейчас, когда приехал, прикрутил к змейке счетчик очков. Счетчик засунул в javafx.scene.text.Text, но хотел изначально поместить в javafx.scene.control.TextField. С последним чет не задалось: в процессе игры постоянно в рандомный момент вылетало NullPointerException, которое я никак не мог отловить, с Text такого вроде не случается. Не знаю, из-за чего это

Чувствую себя лучше, наверное
6a10cc6d330d1cc224c63c4627050ea6.png1,1 Мб, 1280x720
Рируру !!gYmpHned/k 37 217628
Я, строго говоря, не знаю Джавы, так что могу сейчас ерунду сказать, но...
Не используй Thread.sleep для геймплейных задержек. (И в таймерах.) (И вообще лучше не надо, если не знаешь, что делаешь.) (NO ONE KNOWS)

Как вообще организуют реалтаймовые штуки.
У тебя есть мир (зд. змейка).
У мира есть метод update(float dt), прокручивающий его на dt секунд вперёд.

В случае змейки там будет что-то вроде:

class World { ...
  Snake snake;
  float speed = 2.0; // ходов/с
  float turnDelay = 0; // сколько времени уже выполняется текущий ход

  void update(float dt) {
    turnDelay += dt;
    while (turnDelay >= 1.0 / speed) { // прошло достаточно времени? speed — ходов/с, тогда 1.0/speed — время на 1 ход
      snake.move();
      turnDelay -= 1.0 / speed;
    }
  }
}

При этом dt следует вычислять на основании времени, реально прошедшего с прошлого апдейта, например, curNano = System.nanoTime(); world.update((curNano - prevNano) ⃰1e-9); prevNano = curNano. Это отвяжет змейку от прихотей Timer (This class does not offer guarantees about the real-time nature of task scheduling) и флуктуаций, вносимых системным планировщиком потоков. Можно быть уверенным, что 1 секунда, прошедшая в реальности, соответствует 1 секунде суммарных dt.

Таймер всё ещё остаётся идеальным местом для дёргания World.update, однако ввиду гибкого dt его период будет влиять на плавность анимации и потребление CPU, а не скорость геймплея.

Связанные мелочи разной степени (не)очевидности:
(1) для первого апдейта prevNano не будет, придётся сфабриковать dt = 0 или просто пропустить апдейт (если вдуматься, это не костыль: между N выборками времени естественным образом размещаются N-1 апдейтов);
(2) то же самое касается пауз и прочего, когда игровое время не отсчитывается и prevNano становится невалидной;
(3) если каким-то чудом в dt пройдёт сразу 10 секунд, в моём варианте змейка честно прокрутится на все 10 секунд вперёд. Технически это правильное поведение, но может заставить игрока врезаться после лага или ещё чего. Может быть смысл ограничивать dt сверху.
(4) while и turnDelay -= turnTime вместо if и turnDelay = 0 корректно переносят остатки времени: например, если апдейты тикают каждые 0,7 секунд, а змейка ходит каждую секунду, будет
turnDelay = 0
turnDelay = 0,7
turnDelay = 1,4, (>= 1.0 — ход, -= 1.0) turnDelay = 0,4
turnDelay = 1,1, (>= 1.0 — ход, -= 1.0) turnDelay = 0,1
turnDelay = 0,8
turnDelay = 1,5, (>= 1.0 — ход, -= 1.0) turnDelay = 0,5
turnDelay = 1,2, (>= 1.0 — ход, -= 1.0) turnDelay = 0,2
turnDelay = 0,9
turnDelay = 1,6, (>= 1.0 — ход, -= 1.0) turnDelay = 0,6 (и т. д.)

Прошло 0,7 × 8 = 5,6 секунд, и за них змейка сделала 5 ходов, как и должно быть.
Конечно, в реальности апдейты будут плавнее, чем 0,7 сек, соответственно, кумулятивная временная ошибка при неиспользовании всего вышеописанного — меньше. Но она будет.
6a10cc6d330d1cc224c63c4627050ea6.png1,1 Мб, 1280x720
Рируру !!gYmpHned/k 37 217628
Я, строго говоря, не знаю Джавы, так что могу сейчас ерунду сказать, но...
Не используй Thread.sleep для геймплейных задержек. (И в таймерах.) (И вообще лучше не надо, если не знаешь, что делаешь.) (NO ONE KNOWS)

Как вообще организуют реалтаймовые штуки.
У тебя есть мир (зд. змейка).
У мира есть метод update(float dt), прокручивающий его на dt секунд вперёд.

В случае змейки там будет что-то вроде:

class World { ...
  Snake snake;
  float speed = 2.0; // ходов/с
  float turnDelay = 0; // сколько времени уже выполняется текущий ход

  void update(float dt) {
    turnDelay += dt;
    while (turnDelay >= 1.0 / speed) { // прошло достаточно времени? speed — ходов/с, тогда 1.0/speed — время на 1 ход
      snake.move();
      turnDelay -= 1.0 / speed;
    }
  }
}

При этом dt следует вычислять на основании времени, реально прошедшего с прошлого апдейта, например, curNano = System.nanoTime(); world.update((curNano - prevNano) ⃰1e-9); prevNano = curNano. Это отвяжет змейку от прихотей Timer (This class does not offer guarantees about the real-time nature of task scheduling) и флуктуаций, вносимых системным планировщиком потоков. Можно быть уверенным, что 1 секунда, прошедшая в реальности, соответствует 1 секунде суммарных dt.

Таймер всё ещё остаётся идеальным местом для дёргания World.update, однако ввиду гибкого dt его период будет влиять на плавность анимации и потребление CPU, а не скорость геймплея.

Связанные мелочи разной степени (не)очевидности:
(1) для первого апдейта prevNano не будет, придётся сфабриковать dt = 0 или просто пропустить апдейт (если вдуматься, это не костыль: между N выборками времени естественным образом размещаются N-1 апдейтов);
(2) то же самое касается пауз и прочего, когда игровое время не отсчитывается и prevNano становится невалидной;
(3) если каким-то чудом в dt пройдёт сразу 10 секунд, в моём варианте змейка честно прокрутится на все 10 секунд вперёд. Технически это правильное поведение, но может заставить игрока врезаться после лага или ещё чего. Может быть смысл ограничивать dt сверху.
(4) while и turnDelay -= turnTime вместо if и turnDelay = 0 корректно переносят остатки времени: например, если апдейты тикают каждые 0,7 секунд, а змейка ходит каждую секунду, будет
turnDelay = 0
turnDelay = 0,7
turnDelay = 1,4, (>= 1.0 — ход, -= 1.0) turnDelay = 0,4
turnDelay = 1,1, (>= 1.0 — ход, -= 1.0) turnDelay = 0,1
turnDelay = 0,8
turnDelay = 1,5, (>= 1.0 — ход, -= 1.0) turnDelay = 0,5
turnDelay = 1,2, (>= 1.0 — ход, -= 1.0) turnDelay = 0,2
turnDelay = 0,9
turnDelay = 1,6, (>= 1.0 — ход, -= 1.0) turnDelay = 0,6 (и т. д.)

Прошло 0,7 × 8 = 5,6 секунд, и за них змейка сделала 5 ходов, как и должно быть.
Конечно, в реальности апдейты будут плавнее, чем 0,7 сек, соответственно, кумулятивная временная ошибка при неиспользовании всего вышеописанного — меньше. Но она будет.
1274.jpg371 Кб, 2376x2000
PoppyFanboy !VTLpv6lgGw 38 217698
Не особо много за сегодня сделал. Немного поколупал змейку: заменил начинку метода run() в таймере на нечто более привлекательное по совету выше, добавил черновое увеличение скорости по истечении определенного времени, добавил menu bar с единственным работающей кнопкой Exit, добавил паузу на клавишу "P". В результате добавления меню класс SnakeGame как-то нездорОво разросся, надо бы, наверное, разбить его на два класса: один будет реализовывать GUI (всякие меню и всплывающие окна), а другой будет отрисовывать и апдейтить змейку. В планах добавить возможность выбрать лабиринт для змейки (как в Snake II на нокии 3310) и скореборды (не знаю, сделать отдельный для каждого лабиринта или привязать к каждому лабиринту свой множитель очков).

Сделал флэш-карточки по графам, завтра нужно будет пробежаться по пройденному материалу и добить Readings по графам

Завтра желейно железно сделаю хотя бы парочку задач из Project Euler и Codewars, а то сколько можно уже их не делать

>>217628
Спасибо большое за развернутый ответ, имплементировал в свою змейку нечто подобное, привязка к времени в наносекундах гораздо удобнее

>Не используй Thread.sleep для геймплейных задержек. (И в таймерах.) (И вообще лучше не надо, если не знаешь, что делаешь.) (NO ONE KNOWS)


С мультипоточностью я действительно пока что знаком только на уровне использования таймеров, так что да, постараюсь поосторожнее с этим
EoaFhxIC5E8waifu2xartnoise2tta1.png297 Кб, 650x648
Рируру !!gYmpHned/k 39 217739
>>217698
#i♥bikeshed

Во-первых, почему я предложил флоаты и секунды (а, только тогда нужны или даблы, или приведения типов/f-ки в литералах, т. е. 1e-9f) — потому что в случае с лонгами «/» даёт целочисленное деление. В твоих масштабах до нулей всё равно далеко, так что особой разницы нет, разве что в несущественной погрешности (1000000/6 ⃰6=999996), удобстве выражения в единицах СИ (1.0f vs. 1000000000L) и в странном (хотя бы идеологически) ограничении на целочисленность «реальной» speed.

Во-вторых, я предложил конструкцию
cur = nanoTime()
update(prev - cur)
prev = cur // не nanoTime()
потому что update занимает ненулевое время, которое в этом случае выбрасывается из учёта, хотя не должно.

Рассмотрим, что происходит, если таймер срабатывает каждые 0.5s, а апдейты занимают 0.1s.
Rt — реальное время (то же, которое сообщает nanoTime), приведённое к 0.
Ut — время, учтённое update'ами.

Rt = 0s, Ut = 0s, update(0) ⇒
Rt = 0.1s, Ut = 0s, lastMove = 0.1s, след. срабатывание таймера ⇒
Rt = 0.5s, Ut = 0s, update(Rt - lastMove = 0.4s) ⇒
Rt = 0.6s, Ut = 0.4s, lastMove = 0.6s, след. срабатывание таймера ⇒
Rt = 1.0s, Ut = 0.4s, update(Rt - lastMove = 0.4s) ⇒
Rt = 1.1s, Ut = 0.8s, lastMove = 1.1s, след. срабатывание таймера ⇒
Rt = 1.5s, Ut = 0.8s, update(Rt - lastMove = 0.4s) ⇒
Rt = 1.6s, Ut = 1.2s, ...

Возникает прогрессирующая рассинхронизация, которой нет в моём варианте:

Rt = 0s, Ut = 0s, _curRt = 0s, update(0) ⇒
Rt = 0.1s, Ut = 0s, lastMove = _curRt = 0s, след. срабатывание таймера ⇒
Rt = 0.5s, Ut = 0s, _curRt = 0.5s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 0.6s, Ut = 0.5s, lastMove = _curRt = 0.5s, след. срабатывание таймера ⇒
Rt = 1.0s, Ut = 0.5s, _curRt = 1.0s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 1.1s, Ut = 1.0s, lastMove = _curRt = 1.0s, след. срабатывание таймера ⇒
Rt = 1.5s, Ut = 1.0s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 1.6s, Ut = 1.5s, ...

Впрочем, когда период таймера — милли-, а время обновления змейки — сотни наносекунд, ошибка будет от силы десяток секунд за сутки, да...
EoaFhxIC5E8waifu2xartnoise2tta1.png297 Кб, 650x648
Рируру !!gYmpHned/k 39 217739
>>217698
#i♥bikeshed

Во-первых, почему я предложил флоаты и секунды (а, только тогда нужны или даблы, или приведения типов/f-ки в литералах, т. е. 1e-9f) — потому что в случае с лонгами «/» даёт целочисленное деление. В твоих масштабах до нулей всё равно далеко, так что особой разницы нет, разве что в несущественной погрешности (1000000/6 ⃰6=999996), удобстве выражения в единицах СИ (1.0f vs. 1000000000L) и в странном (хотя бы идеологически) ограничении на целочисленность «реальной» speed.

Во-вторых, я предложил конструкцию
cur = nanoTime()
update(prev - cur)
prev = cur // не nanoTime()
потому что update занимает ненулевое время, которое в этом случае выбрасывается из учёта, хотя не должно.

Рассмотрим, что происходит, если таймер срабатывает каждые 0.5s, а апдейты занимают 0.1s.
Rt — реальное время (то же, которое сообщает nanoTime), приведённое к 0.
Ut — время, учтённое update'ами.

Rt = 0s, Ut = 0s, update(0) ⇒
Rt = 0.1s, Ut = 0s, lastMove = 0.1s, след. срабатывание таймера ⇒
Rt = 0.5s, Ut = 0s, update(Rt - lastMove = 0.4s) ⇒
Rt = 0.6s, Ut = 0.4s, lastMove = 0.6s, след. срабатывание таймера ⇒
Rt = 1.0s, Ut = 0.4s, update(Rt - lastMove = 0.4s) ⇒
Rt = 1.1s, Ut = 0.8s, lastMove = 1.1s, след. срабатывание таймера ⇒
Rt = 1.5s, Ut = 0.8s, update(Rt - lastMove = 0.4s) ⇒
Rt = 1.6s, Ut = 1.2s, ...

Возникает прогрессирующая рассинхронизация, которой нет в моём варианте:

Rt = 0s, Ut = 0s, _curRt = 0s, update(0) ⇒
Rt = 0.1s, Ut = 0s, lastMove = _curRt = 0s, след. срабатывание таймера ⇒
Rt = 0.5s, Ut = 0s, _curRt = 0.5s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 0.6s, Ut = 0.5s, lastMove = _curRt = 0.5s, след. срабатывание таймера ⇒
Rt = 1.0s, Ut = 0.5s, _curRt = 1.0s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 1.1s, Ut = 1.0s, lastMove = _curRt = 1.0s, след. срабатывание таймера ⇒
Rt = 1.5s, Ut = 1.0s, update(_curRt - lastMove = 0.5s) ⇒
Rt = 1.6s, Ut = 1.5s, ...

Впрочем, когда период таймера — милли-, а время обновления змейки — сотни наносекунд, ошибка будет от силы десяток секунд за сутки, да...
1307.jpg134 Кб, 1100x757
PoppyFanboy !VTLpv6lgGw 40 217776
Опять непонятно как распределил время, толком не заметил, как пролетел весь день. Неет, ну так не пойдет, никак не могу заставить себя отмечать, на что я трачу свое время

Сделал три задачки из Project Euler. С пятнадцатой чего-то я долго возился. Там задача сводится к последовательному обходу всех диагоналей в матрице. Несложно, но я все время путался в индексах. Вообще, там, наверное, по смыслу больше подошел бы рекурсивный алгоритм, надо бы такой вариант тоже реализовать (ну, там просто с конца рекурсивно идем по всем возможным путям)

https://www.geeksforgeeks.org/count-divisors-n-on13/
Нашел довольно интересный алгоритм вычисления количества делителей числа. Там указано, что он работает за O(n^(1/3)), но, на самом деле, это не совсем так. Перед началом работы самого алгоритма, который выполняется за O(n^(1/3)) там проводятся вычисления в ходе которых мы получаем: просеянный через решето Эратосфена массив "prime", в котором содержится информация о простоте чисел, чей квадрат меньше или равен m (m - верхняя граница для алгоритма), массив "a" самих простых чисел чей квадрат меньше или равен m, а также массив "primeSquare", в котором содержится информация о том, является ли число квадратом простого

Сам алгоритм заключается в следующем: мы находим для каждого простого делителя числа n меньшего, чем n^(1/3), наибольшую степень, с которой он входит в n, а затем довольно легко вычисляем количество делителей, которые можно составить из этих простых делителей (на это как раз и уходит O(n^(1/3)), так как простые числа в массиве "a" изначально отсортированы по возрастанию)

У нас остаются простые делители большие или равные n^(1/3), но таких может быть не более двух различных, поэтому нам только остается проверить, чем является остаточек от числа n: единицей, простым числом, квадратом простого числа или произведением двух простых (последнее определяется методом исключения, так как пятого варианта не дано)

Выигрыш (относительно алгоритма за O(sqrt(n))) тут будет только когда нам нужно будет многократно определять количества делителей для некоторого достаточно большого набора чисел, но, но, но нужно заранее определить верхнюю грань m (то есть либо заранее договариваться, либо проходить через весь набор чисел, чтобы определить наибольшее)

Эх, завтра рано вставать, так не хочется

>>217739

>#i♥bikeshed


хех, ну, я бы не сказал, что мы обсуждаем совсем уж незначительные вещи, все-таки с секундами код выглядит чуть более читабельным
Про учет времени выполнения апдейта понял

Чуть позже поправлю все это, спасибо за содержательные комменты :3
1307.jpg134 Кб, 1100x757
PoppyFanboy !VTLpv6lgGw 40 217776
Опять непонятно как распределил время, толком не заметил, как пролетел весь день. Неет, ну так не пойдет, никак не могу заставить себя отмечать, на что я трачу свое время

Сделал три задачки из Project Euler. С пятнадцатой чего-то я долго возился. Там задача сводится к последовательному обходу всех диагоналей в матрице. Несложно, но я все время путался в индексах. Вообще, там, наверное, по смыслу больше подошел бы рекурсивный алгоритм, надо бы такой вариант тоже реализовать (ну, там просто с конца рекурсивно идем по всем возможным путям)

https://www.geeksforgeeks.org/count-divisors-n-on13/
Нашел довольно интересный алгоритм вычисления количества делителей числа. Там указано, что он работает за O(n^(1/3)), но, на самом деле, это не совсем так. Перед началом работы самого алгоритма, который выполняется за O(n^(1/3)) там проводятся вычисления в ходе которых мы получаем: просеянный через решето Эратосфена массив "prime", в котором содержится информация о простоте чисел, чей квадрат меньше или равен m (m - верхняя граница для алгоритма), массив "a" самих простых чисел чей квадрат меньше или равен m, а также массив "primeSquare", в котором содержится информация о том, является ли число квадратом простого

Сам алгоритм заключается в следующем: мы находим для каждого простого делителя числа n меньшего, чем n^(1/3), наибольшую степень, с которой он входит в n, а затем довольно легко вычисляем количество делителей, которые можно составить из этих простых делителей (на это как раз и уходит O(n^(1/3)), так как простые числа в массиве "a" изначально отсортированы по возрастанию)

У нас остаются простые делители большие или равные n^(1/3), но таких может быть не более двух различных, поэтому нам только остается проверить, чем является остаточек от числа n: единицей, простым числом, квадратом простого числа или произведением двух простых (последнее определяется методом исключения, так как пятого варианта не дано)

Выигрыш (относительно алгоритма за O(sqrt(n))) тут будет только когда нам нужно будет многократно определять количества делителей для некоторого достаточно большого набора чисел, но, но, но нужно заранее определить верхнюю грань m (то есть либо заранее договариваться, либо проходить через весь набор чисел, чтобы определить наибольшее)

Эх, завтра рано вставать, так не хочется

>>217739

>#i♥bikeshed


хех, ну, я бы не сказал, что мы обсуждаем совсем уж незначительные вещи, все-таки с секундами код выглядит чуть более читабельным
Про учет времени выполнения апдейта понял

Чуть позже поправлю все это, спасибо за содержательные комменты :3
sage PoppyFanboy !VTLpv6lgGw 41 217777
>>217776
Да, забыл сказать, что так и не закончил Readings по графам, там сейчас Planar Graphs с кучей странных определений (я так понимаю, чтобы избежать углубления в геометрию и топологию), завтра-послезавтра доразбираюсь с этим точно
sage PoppyFanboy !VTLpv6lgGw 42 217874
Очень сильно вымотался за сегодня и ничего не успел в плане программирования

Дочитал четвертую главу Core Java. Поверхностно почитал про javadoc. Запоминать всю эту информацию пока что нет смысла, это нужно просто практиковать. К змейке особо никакой документации не напишешь, так как почти все методы и классы с дефолтным уровнем доступа. Потом, когда буду более углубленно изучать алгоритмы и структуры данных, попробую писать документацию к библиотеке своих реализаций алгоритмов

От Planar Graphs плавятся мозги: в доказательствах куча дыр, факт, который лежит в основе всех дальнейших рассуждений дается без доказательства (впрочем, я не особо-то и хочу смотреть его док-во), но в целом вроде понятно, хоть и идет довольно туго. Не знаю, пригодится ли мне это, но теперь я знаю, как можно плюс-минус формально доказать невозможность выполнения того "Теста на аутизм", где нужно к трем домам провести воду, свет и еще что-то так, чтобы линии не пересекались

1) Завтра 100% добью Planar Graphs, ибо терпеть это уже нет сил. Ну и повторю еще раз весь пройденный материал по графам
2) Начну пятую главу Core Java
остальное по ситуации, либо змейка, либо Project Euler

Прошлой ночью по своим меркам очень мало спал, да еще и проснулся рано, так что пойду-ка я на боковую, все равно в голове каша
BZvd4QLBL5Y.jpg66 Кб, 540x500
PoppyFanboy !VTLpv6lgGw 43 217963
Дочитал Readings по графам, повторил бОльшую часть пройденных материалов, завтра повторю все оставшееся. Теория чисел и материал с первых лекций по графам уже очень хорошо запомнился. Завтра начну читать Readings по ориентированным графам (он раза в три короче предыдущего, так что это ненадолго)

Почитал немного Core Java, пока что ничего сверхинтересного

Решил две задачи из Project Euler (16 и 17). Первая была простая: просто посчитать сумму цифр для произвольной степени двойки (не стал использовать очевидный BigInteger, просто оценил количество цифр в конечном произведении, создал массив для хранения цифр и перемножил все вручную). Со второй чуть сложнее: для произвольного натурального числа нужно подсчитать количество букв в его словесном представлении. Я решил пойти чуть дальше и написал программу, которая преобразовывает число из цифрового вида в набор числительных. Получилось какое-то жуткое решение, не исключено, что в нем нет дырок. Я попытался реализовать что-то типа Finite State Machine, но вышло как-то не очень. Возможно стоит создать отдельный класс для FSM, не знаю
SqhbHfEFMLkwaifu2xartnoise1tta1.png2,5 Мб, 2560x1357
44 217972
>>217963
Мой паскале-вариант, без препасса по числу (сначала тоже был с препассом, но потом я попробовал наугад всё перевернуть и идти от младших разрядов, и вроде получилось): https://ideone.com/e22efD.
С автоматом интересный подход, конечно. Если так вспомнить, им решают и обратную задачу хд.
mKIIvRuWIts.jpg132 Кб, 1148x1200
PoppyFanboy !VTLpv6lgGw 45 218098
Ленивый день. Directed Graphs не начал, оставшийся материал не повторил. За сегодня только поковырял змейку. Разделил класс SnakeGame на два: в одном осталась отрисовка змейки, апдейты змейки и прочая логика игры, а во второй (GUIPart) я засунул реализации меню. Стало однозначно лучше. Сделал очень грубый и черновой вариант scoreboard-ов (чтение из файла + наполовину работающий gui, запись новых рекордов пока что не реализована). Кнопка New Game вроде теперь тоже работает

Надо будет завтра бегло посмотреть, что из себя представляет использование XML + javafx, а то я уже устал создавать бесконечные объекты, а затем крепить их к Pane-объектам. Может быть, если там все не очень сложно, то потом малость переделаю реализацию gui для змейки. Мне вряд ли когда-нибудь пригодится опыт работы с javafx, все же на java вроде не особо часто пишут десктоп приложения, но изучать параллельно какой-нибудь C#, чтобы на нем писать GUI-приложения в вижуал студии, я пока что не хочу. Лучше буду пока что придерживаться одного языка

>>217972
Красивое решение. Мне особенно понравились моменты с IfThen(result <> '', ' ') и с определением того, нужно ли форсить "and" через (tripNo = 0) and (rest <> 0). Я как-то не подумал о том, что можно ведь отождествить "and", который идет после сотен (one hundred and twenty-three) и "and", который ставится в словесном представлении чисел без младших сотен, но с наличием более старших разрядов (one million and one). Ну и про "9223372 триллиона" я тоже не подумал.

В общем, завтра надо будет доделать/переделать свой вариант
46 218100
>>218098
Очередной обоссаный программист. Какой же ты уникальный, пиздец просто. Хуй тебе на лицо в подарок.
sage PoppyFanboy !VTLpv6lgGw 47 218194
Доповторял пройденный материал из 6.042J. Кое-что успело подзабыться, но я все восстановил. Приятно, когда читаешь вопрос по какой-то теме и уже знаешь на него ответ

Начал читать шестой Readings (Directed Graphs): сначала было немного про Tournament Graphs, а затем пошли разные Communication Networks. Больше почти ничего не делал: сначала не мог приступить никак, а как начал, так уже и день закончился звучит просто максимально комично

Завтра все же поделаю то, что планировал на сегодня и, наверное, начну читать CLRS
DkFrUATU8AEbg6T.jpeg51 Кб, 1200x811
PoppyFanboy !VTLpv6lgGw 48 218283
Засунул GUI змейки в FXML. Все оказалось довольно просто: пишется .fxml файл, где расписываются по тегам все элементы интерфейса, к .fxml файлу прикрепляется класс-контроллер. Элемент gui в .fxml помечается fx:id = "foobar", в классе контроллере объявляется поле foobar соответствующего типа и помеченное аннотацией @FXML, и теперь при загрузке .fxml файла поле foobar будет автоматически инициализировано ссылкой на соответствующий элемент гуи. Чтобы привязать действие к элементу гуи, вообще почти ничего делать не надо: просто пишешь в нужном теге .fxml файла свойство onAction = "#methodName" и определяешь этот метод в классе контроллере. Сам .fxml файл загружается через FXMLLoader. Вроде удобно: реализация гуи + его стилизация естественным образом отделяется от методов, относящихся к внутренней логике приложения

Переделал свое решение 17 задачи ну как переделал, воспроизвел по памяти чужое решение, мда, конечные автоматы тут, может быть, и уместны, но, действительно, разве что при решении обратной задачи (ее надо бы тоже потом попробовать реализовать)

Начал читать CLRS. Ну как "начал", прочитал только вступительную главу. Я почему-то изначально ожидал сухой текст, но оказалось, что вполне неплохо написано
1waifu2xartnoise2tta1.png1,5 Мб, 1080x1800
49 218312

>if (n < 0) n = -n;


Хорошая попытка, но здесь вылезает один-единственный крайний случай с багофичей two's complement, из-за которого я не сделал так же: и для Int, и для Long T.MIN_VALUE == −T.MIN_VALUE :'D. (https://www.youtube.com/watch?v=wDN_EYUvUq0&t=2896).
DlDwgSAX4AE0L7.jpeg241 Кб, 821x1200
PoppyFanboy !VTLpv6lgGw 50 218409
Весь день сегодня как в тумане. Только немного почитал CLRS про анализ сортировки вставкой и все

У меня не получается систематизировать свою деятельность: либо я не могу начать, либо не делаю перерывы, когда надо. Завтра попробую еще раз заставить себя заниматься кусочками по 25 минут Сколько уже раз я писал подобное тут? Почитаю про Communication Networks и продолжу изучать Core Java. В оставшееся время буду доделывать скореборды для змейки. Не знаю, может быть, я слишком долго вожусь с этим проектом, но мне хочется допилить его до конца

>>218312
Охх, точно, там же положительные числа кодируются от 00...01 до 01...11, а отрицательные от 10...00 до 11...11
elsGZRVZQrc.png341 Кб, 512x449
51 218411
Глянь пулл-реквесты, хотя я мог ерунду сделать.
DlEop7OVAAATFnq.jpg188 Кб, 984x1024
PoppyFanboy !VTLpv6lgGw 52 218533
Сегодня было неожиданно мало свободного времени, поэтому ничего не успел

Дочитал шестой Readings. Было про Butterfly Network и Beneš network. Последняя примечательна тем, что для любой Routing Problem предоставляет n "switch-disjoint" путей для каждого пакета (по одному с каждого входного узла), то есть пакеты не будут нигде скапливаться. Особенно забавно, что такой вариант сети абсолютно по всем параметрам лучше, чем тривиальное решение с n^2 свичами (для n входов и n выходов)

Остался всего один Readings из 6.042J про Relations and Partial Orders, и я покрою весь материал с лекций, которые читает неопытный аспирант. После этого можно будет вернуться к просмотру лекций опытного профессора

Завтра буду делать то, что не успел сегодня (つω`。)

>>218411
Спасибо. Я благодарен тебе за помощь, но, мне кажется, будет неправильным просто так взять и принять такой объемный пулл-реквест при том, что основной целью всего, что я делаю является не достижение конечного результата в виде функционирующего приложения, а получение опыта программирования. Я действительно ценю подобную поддержку, но не могу принять её вот в таком объёме( Я нахожу для себя крайне важным сам путь от идеи до реализации (при том, что идея может быть в том числе позаимствованная), поэтому я лучше сам попробую реализовать LGBTQ+ змейку и идею с выделением никнеймов с помощью кавычек и использованием \" \\ нотаций (но потом, как сделаю свое кривое решение, все же поподробнее почитаю твой код)

Ой, да, и сорре, что "проигнорировал" твои Issues в задачах из Project Euler: глупый гитхаб не выводит их в уведомления а глупый я не заметил
серенькую циферку около слова Issues
. Я потом везде все поправлю, сейчас не успеваю
99EF9A4D5B6AED2E35.jpg132 Кб, 900x675
53 218543
>>218533
Ну ла-адно~ Закрой тогда, мне лень (´ω`). Ты прост не «подписан» на свои репозитории. Меня автоподписывает, можно отключить, но было включено по дефолту, хм-м.

У меня ещё рандомные идеи были, за которые я бы и так не брался, но вдруг тебя заинтересуют:

— Через 5 минут я прочитал, что функцию, близкую к тому, что я по привычке расписал в 100-строчную портянку, выполняет стандартный StreamTokenizer, поддерживающий чтение строк в Java-нотации. Насколько я понимаю, нет стандартного метода, чтобы, наоборот, подготовить строку для него, но, возможно, будет достаточно простой замены этих https://docs.oracle.com/javase/tutorial/java/data/characters.html персонажей на их Java-эскейпы.

— Массив ячеек можно линеаризовать — хранить в одномерном массиве WIDTH×HEIGHT и обращаться к (x, y) через y×WIDTH+x (ты в одном месте уже интерпретируешь его таким образом). Для сохранения абстракции вынести в отдельный класс, выставляющий наружу привычные get(x, y) и set(x, y, value). Если посмотреть шире, массив ячеек тебе вообще не нужен и «поле» могло бы быть таким же списком объектов с проверкой коллизии перебором, что и змейка. Однако если, наоборот, корректно заносить и стирать сегменты змейки на поле, можно будет проверять коллизии за 1 обращение. Также, сейчас это вроде-как-невозможно, но если в будущем объекты смогут перекрываться, их можно будет комбинировать через побитовые операции, например, бит 0 — «в этой клетке есть змейка» и т. д., так что, с одной стороны, клетки останутся голыми интами вместо объектов, с другой — проползающая змейка не затрёт собой остальное.

— Мне кажется, было бы относительно просто прикрутить плавную анимацию. В каждый момент у тебя есть прошедшее время хода tPassed и полное tFull. Можно рисовать каждый сегмент не сразу, а в позиции tPassed/tFull ⃰100% между предыдущей и текущей. В этом случае придётся перенести отрисовку в какой-нибудь AnimationTimer и отделить её от move или где она там ещё выполняется, но это и к лучшему. Ну и такая связанная мелочь, при изменении скорости aka tFull нужно сохранять процент завершённости хода, т. е. подкручивать tPassed (даже без плавной анимации это более естественно).

— (Самое главное напоследок.) Всюду используются int somethingX = ..., somethingY = ..., somethingOtherX = ..., somethingOtherY = ... . Мне кажется хорошей идеей вынести координаты в IntVec2 / IVec2 / Int2 (Offset на максималках). В этот векторный класс, который во избежание головной боли должен быть иммутабельным, можно будет добавить разные няшности, такие как IntVec2 plus(IntVec2 b) — покомпонентное сложение, или IntVec2 withX(int x) — иммутабельный аналог присваивания x. Кроме того, класс поля, линейный или нет, мог бы поддерживать обращение сразу по IntVec2.
99EF9A4D5B6AED2E35.jpg132 Кб, 900x675
53 218543
>>218533
Ну ла-адно~ Закрой тогда, мне лень (´ω`). Ты прост не «подписан» на свои репозитории. Меня автоподписывает, можно отключить, но было включено по дефолту, хм-м.

У меня ещё рандомные идеи были, за которые я бы и так не брался, но вдруг тебя заинтересуют:

— Через 5 минут я прочитал, что функцию, близкую к тому, что я по привычке расписал в 100-строчную портянку, выполняет стандартный StreamTokenizer, поддерживающий чтение строк в Java-нотации. Насколько я понимаю, нет стандартного метода, чтобы, наоборот, подготовить строку для него, но, возможно, будет достаточно простой замены этих https://docs.oracle.com/javase/tutorial/java/data/characters.html персонажей на их Java-эскейпы.

— Массив ячеек можно линеаризовать — хранить в одномерном массиве WIDTH×HEIGHT и обращаться к (x, y) через y×WIDTH+x (ты в одном месте уже интерпретируешь его таким образом). Для сохранения абстракции вынести в отдельный класс, выставляющий наружу привычные get(x, y) и set(x, y, value). Если посмотреть шире, массив ячеек тебе вообще не нужен и «поле» могло бы быть таким же списком объектов с проверкой коллизии перебором, что и змейка. Однако если, наоборот, корректно заносить и стирать сегменты змейки на поле, можно будет проверять коллизии за 1 обращение. Также, сейчас это вроде-как-невозможно, но если в будущем объекты смогут перекрываться, их можно будет комбинировать через побитовые операции, например, бит 0 — «в этой клетке есть змейка» и т. д., так что, с одной стороны, клетки останутся голыми интами вместо объектов, с другой — проползающая змейка не затрёт собой остальное.

— Мне кажется, было бы относительно просто прикрутить плавную анимацию. В каждый момент у тебя есть прошедшее время хода tPassed и полное tFull. Можно рисовать каждый сегмент не сразу, а в позиции tPassed/tFull ⃰100% между предыдущей и текущей. В этом случае придётся перенести отрисовку в какой-нибудь AnimationTimer и отделить её от move или где она там ещё выполняется, но это и к лучшему. Ну и такая связанная мелочь, при изменении скорости aka tFull нужно сохранять процент завершённости хода, т. е. подкручивать tPassed (даже без плавной анимации это более естественно).

— (Самое главное напоследок.) Всюду используются int somethingX = ..., somethingY = ..., somethingOtherX = ..., somethingOtherY = ... . Мне кажется хорошей идеей вынести координаты в IntVec2 / IVec2 / Int2 (Offset на максималках). В этот векторный класс, который во избежание головной боли должен быть иммутабельным, можно будет добавить разные няшности, такие как IntVec2 plus(IntVec2 b) — покомпонентное сложение, или IntVec2 withX(int x) — иммутабельный аналог присваивания x. Кроме того, класс поля, линейный или нет, мог бы поддерживать обращение сразу по IntVec2.
hamantha.webm3 Мб, webm,
720x480, 0:39
PoppyFanboy !VTLpv6lgGw 54 218635
Сегодня полдня просидел в очередях в больнице, записался на дневной стационар, с завтрашнего дня начнутся всякие обследования, которые возможно подтвердят мою негодность к армии, посмотрим

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

>>218543
StreamTokenizer - занятная штука. Замен на эскейпы (внутри кавычек) вроде как хватает, чтобы StreamTokenizer спокойно проглотил строку

С представлением игрового поля пока что не знаю, как поступить, еще подумаю немного. С использованием integer-а как массив boolean-ов интересная идея, но, наверное, в змейке не найдет применения (ну, только если не добавить какие-нибудь бонусы, позволяющие на время проходить сквозь стены, что, по-моему, было бы неправильно и делало бы игру слишком завязанной на рнг). Наверное, все же сделаю список объектов, которые бы реализовывали интерфейс с абстрактными методами paint(), belongs(IntVec2 v) (чтобы проверять, наткнулась ли змейка на стену/саму себя). Только в таком случае надо будет отделить объект яблока от остальных, чтобы змейка таки смогла его съесть

Анимацию потом попробую, но в последнюю очередь

Векторы действительно стоит добавить, а то код запутанно выглядит местами
PoppyFanboy !VTLpv6lgGw 55 218636
>>218635
звук из вебмки куда-то пропал, ну что за день сегодня такой

https://www.youtube.com/watch?v=pOljw0z5asI
sage PoppyFanboy !VTLpv6lgGw 56 218767
Эх, на обследовании ничего не подтвердилось, я оказался слишком здоровым. И хоть еще остается добрая половина от общего числа анализов и прочих процедур, я почти уверен, что у меня так ничего и не найдут, не знаю, к сожалению или к счастью

Сегодня опять делал скорборды для змейки: добавил классы Record и Board, реализовал методы для чтения таблицы рекордов и записи нового рекорда. Остается не очень много: сделать вывод окна с просьбой ввести ник (если достигнут новый рекорд), а после ввода никнейма сделать так, чтобы открывалась нужная страница таблицы рекордов с подсвеченным никнеймом

Завтра опять рано вставать в больницу. В последние пару дней я спал меньше шести часов в сутки, но недосыпа не ощущается. Странно, обычно мне нужно гораздо больше сна, чтобы нормально себя чувствовать

Если завтра будет время, то буду читать CLRS, решать Problem Set-ы из 6.042J и повторять пройденный материал по нему же
sage 57 218775
>>218767
Алсо, а ты ВК есть, добавишь меня? ^_^"
sage PoppyFanboy !VTLpv6lgGw 58 218915
>>218775
Мне была бы удобнее телега
@pf_tg
трамвайчик.gif2,4 Мб, 600x338
PoppyFanboy !VTLpv6lgGw 59 219030
Не помню, что делал последние пару дней. В какой-то момент недосып все-таки оказал свое влияние и я малость поломался. Сегодня весь день впустую потратил на написание визуальной фичи для змейки. Я хотел сделать так, чтобы ширина змейки была визуально меньше ширины клетки, но в итоге получилось жуткое решение, поддержка которого просто невозможна: ту же плавную анимацию тут добавить уже практически невозможно. В итоге я добавил все, что написал, в отдельную ветку, которая, судя по всему, останется тупиковой ("experimental1" branch в моем гитхабе, просто памятник моей глупости). И это при том, что есть еще куча вещей, которые нужно сделать в рамках проекта: доделать класс IntVector (убрать модули по умолчанию) и закончить его интеграцию в остальные классы, немного переделать regex-ы, добавить везде "try with resources", доделать интерфейс для записи рекордов и еще много чего (причем сделать-то это не очень много времени займет), но нет, я потратил кучу времени на непонятно что. Все-таки прежде всего нужно добиться функциональности, а только потом добавлять всякие красивости

Сейчас пойду, пожалуй, спать, как-то мне не очень хорошо. Не знаю, что завтра буду делать, в голове просто пусто
r.gif132 Кб, 400x400
Рируру !!gYmpHned/k 60 219060
>>219030
А мне нравится.

#сомнительные_предложения
Введём функцию lineWrap, которая работает как на пикрелейтеде, т. е. врапается по краям экрана аналогично змейке.

public static void lineWrap(GraphicsContext gc, double x1, double y1, double x2, double y2) {
    final double width = GAME_WIDTH, height = GAME_HEIGHT;

    // Привести линию к 0 <= x1 <= width, 0 <= y1 <= height.
    double Ox = floor(x1 / width) ‌ ‌ ⃰ width, Oy = floor(y1 / height) ‌ ‌ ⃰ height;
    x1 -= Ox; y1 -= Oy;
    x2 -= Ox; y2 -= Oy;

    // точка относительно длины линии (x1, y1)→(x2, y2), на которой завершится рисование на текущем этапе; 1.0 — вся линия.
    double segmentEnd;

    // Рисовать сегмент до конца линии (тогда всё) либо экрана (тогда врапнуть и продолжить).
    do {
        double dOx = 0, dOy = 0; // сдвиг экрана (системы координат) после врапа
        segmentEnd = 1.0;

        // Найти край экрана, пересекаемый линией. 0 — левый, 1 — правый, 2 — верхний, 3 — нижний.
        for (int edge = 0; edge < 4; edge++) {
            if (edge == 0 && x2 < 0 || edge == 1 && x2 > width || edge == 2 && y2 < 0 || edge == 3 && y2 > height) {
                double curSegmentEnd =
                    edge == 0 ? x1 / (x1 - x2) : edge == 1 ? (width - x1) / (x2 - x1) :
                    edge == 2 ? y1 / (y1 - y2) : /‌ ‌ ⃰ edge == 3 ? ‌ ‌ ⃰/ (height - y1) / (y2 - y1);

                // Ближе, чем предыдущее пересечение? (aka это первый раз, или предыдущее пересечение было ложно-положительным)
                if (curSegmentEnd < segmentEnd) {
                    segmentEnd = curSegmentEnd;

                    // Экран сдвинется в направлении этого края.
                    dOx = edge == 0 ? -width : edge == 1 ? width : 0.0;
                    dOy = edge == 2 ? -height : edge == 3 ? height : 0.0;
                }
            }
        }

        double segmentX2 = x1 + (x2 - x1) ‌ ‌ ⃰ segmentEnd, segmentY2 = y1 + (y2 - y1) ‌ ‌ ⃰ segmentEnd;
        gc.strokeLine(x1, y1, segmentX2, segmentY2);
        x1 = segmentX2 - dOx;
        y1 = segmentY2 - dOy;
        x2 -= dOx; y2 -= dOy;
    } while (segmentEnd < 1.0);
}

С одной стороны, это ещё пострашнее твоего варианта, да.
(Зная, что в твоём случае линия всегда строго вертикальна или горизонтальна, можно сильно упростить... но... общее решение...)
С другой, с этим отрисовка SnakeBlock сводится к

public static void paint(GraphicsContext gc, SnakeBlock b1, SnakeBlock b2) {
    ...
    int dx = b2.coords.getX() - b1.coords.getX(), dy = b2.coords.getY() - b1.coords.getY();
    if (dx > FIELD_WIDTH/2) dx -= FIELD_WIDTH;
    if (dx < -FIELD_WIDTH/2) dx += FIELD_WIDTH;
    if (dy > FIELD_WIDTH/2) dy -= FIELD_HEIGHT;
    if (dy < -FIELD_WIDTH/2) dy += FIELD_HEIGHT;

    lineWrap(gc,
        b1.coords.getX() ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5, b1.coords.getY() ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5,
        (b1.coords.getX() + dx) ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5, (b1.coords.getY() + dy) ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5);
},

где dx и dy занимаются тем же, что твои abs'ы — угадывают, в каком направлении смотрел блок, чтобы подготовить корректные (возможно, «искусственно» вылезающие за края) координаты для lineWrap. Чуть красивее было бы передать само направление, если бы оно было на руках.
r.gif132 Кб, 400x400
Рируру !!gYmpHned/k 60 219060
>>219030
А мне нравится.

#сомнительные_предложения
Введём функцию lineWrap, которая работает как на пикрелейтеде, т. е. врапается по краям экрана аналогично змейке.

public static void lineWrap(GraphicsContext gc, double x1, double y1, double x2, double y2) {
    final double width = GAME_WIDTH, height = GAME_HEIGHT;

    // Привести линию к 0 <= x1 <= width, 0 <= y1 <= height.
    double Ox = floor(x1 / width) ‌ ‌ ⃰ width, Oy = floor(y1 / height) ‌ ‌ ⃰ height;
    x1 -= Ox; y1 -= Oy;
    x2 -= Ox; y2 -= Oy;

    // точка относительно длины линии (x1, y1)→(x2, y2), на которой завершится рисование на текущем этапе; 1.0 — вся линия.
    double segmentEnd;

    // Рисовать сегмент до конца линии (тогда всё) либо экрана (тогда врапнуть и продолжить).
    do {
        double dOx = 0, dOy = 0; // сдвиг экрана (системы координат) после врапа
        segmentEnd = 1.0;

        // Найти край экрана, пересекаемый линией. 0 — левый, 1 — правый, 2 — верхний, 3 — нижний.
        for (int edge = 0; edge < 4; edge++) {
            if (edge == 0 && x2 < 0 || edge == 1 && x2 > width || edge == 2 && y2 < 0 || edge == 3 && y2 > height) {
                double curSegmentEnd =
                    edge == 0 ? x1 / (x1 - x2) : edge == 1 ? (width - x1) / (x2 - x1) :
                    edge == 2 ? y1 / (y1 - y2) : /‌ ‌ ⃰ edge == 3 ? ‌ ‌ ⃰/ (height - y1) / (y2 - y1);

                // Ближе, чем предыдущее пересечение? (aka это первый раз, или предыдущее пересечение было ложно-положительным)
                if (curSegmentEnd < segmentEnd) {
                    segmentEnd = curSegmentEnd;

                    // Экран сдвинется в направлении этого края.
                    dOx = edge == 0 ? -width : edge == 1 ? width : 0.0;
                    dOy = edge == 2 ? -height : edge == 3 ? height : 0.0;
                }
            }
        }

        double segmentX2 = x1 + (x2 - x1) ‌ ‌ ⃰ segmentEnd, segmentY2 = y1 + (y2 - y1) ‌ ‌ ⃰ segmentEnd;
        gc.strokeLine(x1, y1, segmentX2, segmentY2);
        x1 = segmentX2 - dOx;
        y1 = segmentY2 - dOy;
        x2 -= dOx; y2 -= dOy;
    } while (segmentEnd < 1.0);
}

С одной стороны, это ещё пострашнее твоего варианта, да.
(Зная, что в твоём случае линия всегда строго вертикальна или горизонтальна, можно сильно упростить... но... общее решение...)
С другой, с этим отрисовка SnakeBlock сводится к

public static void paint(GraphicsContext gc, SnakeBlock b1, SnakeBlock b2) {
    ...
    int dx = b2.coords.getX() - b1.coords.getX(), dy = b2.coords.getY() - b1.coords.getY();
    if (dx > FIELD_WIDTH/2) dx -= FIELD_WIDTH;
    if (dx < -FIELD_WIDTH/2) dx += FIELD_WIDTH;
    if (dy > FIELD_WIDTH/2) dy -= FIELD_HEIGHT;
    if (dy < -FIELD_WIDTH/2) dy += FIELD_HEIGHT;

    lineWrap(gc,
        b1.coords.getX() ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5, b1.coords.getY() ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5,
        (b1.coords.getX() + dx) ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5, (b1.coords.getY() + dy) ‌ ‌ ⃰ SIZE + SIZE ‌ ‌ ⃰ 0.5);
},

где dx и dy занимаются тем же, что твои abs'ы — угадывают, в каком направлении смотрел блок, чтобы подготовить корректные (возможно, «искусственно» вылезающие за края) координаты для lineWrap. Чуть красивее было бы передать само направление, если бы оно было на руках.
61 219110
>>219060
Люди, которые пишут код в постах на дваче, должны гореть в аду. Есть же pastebin, екарный бабай.
мимо
48597.jpg66 Кб, 1100x580
PoppyFanboy !VTLpv6lgGw 62 219114
Сегодня опять в основном ковырял змейку:
- немного доделал класс IntVector
- поправил баг с генерацией еды (теперь, если сгенерировать яблоко невозможно, то метод generateFood() возвращает false, таким образом, можно будет добавить возможность "выиграть" в змейке)
- позакрывал везде стримы (используя try with resources)
- немного доделал регекспы (как оказалось, из второго аргумента метода replaceAll(String, String) можно делать ссылки на группы из первого в виде $n)
- во внутренней реализации змейки заменил связный список на ArrayList (признаюсь, идею с увеличением длины змейки я нагло упер из того пулл-реквеста (*/_\); ну слишком уж мне понравилась идея с добавлением нового элемента на второе место в ArrayList-е, таким образом, по сравнению с моей реализацией через связные списки несколько изменяется механика увеличения змейки + будь змейка цветной, блоки довольно логично бы стакались)
- во внутренней реализации класса Field заменил массив из integer-ов на HashSet из элементов, которые реализуют интерфейс ObjectOnField (это сама Змейка и стенки лабиринта (которые реализованы, но еще не добавлены))
- класс Main теперь будет содержать в себе статичное поле со ссылкой на основное окно игры (это очень сильно повышает связность классов, но ничего другого в голову не лезет: для того, чтобы сделать окна со скорбордами и просьбой ввести никнейм, были модальными, необходимо указать окно-родитель; можно было как-нибудь через аргументы каких-нибудь методов передать ссылку на родительское окно, но это только запутывает; я думаю, это как раз тот случай, когда можно использовать goto от парадигмы ООП (¬_¬;))
- через использование "observer pattern" реализовал уведомление GUI об окончании игры в случае столкновения змейки с препятствием
- почти закончил скорборды: теперь корректно отображаются окна с просьбой ввести никнейм (и я только сейчас вспомнил, что забыл проверить, не является ли вводимая строка в поле никнейма пустой, надо будет поправить потом, сейчас лень)

Со скорбордами остается реализовать вывод таблицы рекордов сразу после ввода никнейма (чтобы было видно, на каком месте оказался игрок с новым рекордом)
Еще я давно думал насчет обработки клавиш управления: сейчас за каждый тик таймера обрабатывается только одна нажатая клавиша, но, вполне возможно, имеет смысл создать очередь из двух-трех нажатых клавиш, чтобы можно было, не подбирая тайминги, делать несколько поворотов подряд для резких поворотов)

Хотел еще сегодня почитать CLRS, но я чего-то устал, завтра обязательно поизучаю. Там вроде будет про Divide and Conquer и Merge Sort

>>219060
Я пока что не разбирался, но приблизительно понял, о чем ты. Чуть позже посмотрю поподробнее, спасибо большое
48597.jpg66 Кб, 1100x580
PoppyFanboy !VTLpv6lgGw 62 219114
Сегодня опять в основном ковырял змейку:
- немного доделал класс IntVector
- поправил баг с генерацией еды (теперь, если сгенерировать яблоко невозможно, то метод generateFood() возвращает false, таким образом, можно будет добавить возможность "выиграть" в змейке)
- позакрывал везде стримы (используя try with resources)
- немного доделал регекспы (как оказалось, из второго аргумента метода replaceAll(String, String) можно делать ссылки на группы из первого в виде $n)
- во внутренней реализации змейки заменил связный список на ArrayList (признаюсь, идею с увеличением длины змейки я нагло упер из того пулл-реквеста (*/_\); ну слишком уж мне понравилась идея с добавлением нового элемента на второе место в ArrayList-е, таким образом, по сравнению с моей реализацией через связные списки несколько изменяется механика увеличения змейки + будь змейка цветной, блоки довольно логично бы стакались)
- во внутренней реализации класса Field заменил массив из integer-ов на HashSet из элементов, которые реализуют интерфейс ObjectOnField (это сама Змейка и стенки лабиринта (которые реализованы, но еще не добавлены))
- класс Main теперь будет содержать в себе статичное поле со ссылкой на основное окно игры (это очень сильно повышает связность классов, но ничего другого в голову не лезет: для того, чтобы сделать окна со скорбордами и просьбой ввести никнейм, были модальными, необходимо указать окно-родитель; можно было как-нибудь через аргументы каких-нибудь методов передать ссылку на родительское окно, но это только запутывает; я думаю, это как раз тот случай, когда можно использовать goto от парадигмы ООП (¬_¬;))
- через использование "observer pattern" реализовал уведомление GUI об окончании игры в случае столкновения змейки с препятствием
- почти закончил скорборды: теперь корректно отображаются окна с просьбой ввести никнейм (и я только сейчас вспомнил, что забыл проверить, не является ли вводимая строка в поле никнейма пустой, надо будет поправить потом, сейчас лень)

Со скорбордами остается реализовать вывод таблицы рекордов сразу после ввода никнейма (чтобы было видно, на каком месте оказался игрок с новым рекордом)
Еще я давно думал насчет обработки клавиш управления: сейчас за каждый тик таймера обрабатывается только одна нажатая клавиша, но, вполне возможно, имеет смысл создать очередь из двух-трех нажатых клавиш, чтобы можно было, не подбирая тайминги, делать несколько поворотов подряд для резких поворотов)

Хотел еще сегодня почитать CLRS, но я чего-то устал, завтра обязательно поизучаю. Там вроде будет про Divide and Conquer и Merge Sort

>>219060
Я пока что не разбирался, но приблизительно понял, о чем ты. Чуть позже посмотрю поподробнее, спасибо большое
call-me-tonight-600.jpg56 Кб, 600x332
Рируру !!gYmpHned/k 63 219118
>>219114
Я на самом деле не уверен, что это даёт какие-либо преимущества. Можешь считать обоснованием, почему твой «дубовый» вариант был не так уж и плох (а если ещё на спрайты заменить...). Максимум его можно доработать по тому же принципу для работы с пикселями вместо полевых координат, если тебя испугали постоянные ⃰ SIZE.

...Ой. Пока писал, появилась другая идея, сильно проще (и универсальнее).
Влоки, которые пересекают край экрана, нужно нарисовать дважды, второй раз с таким смещением, чтобы они вылезли с противоположного края.
Пусть ширина экрана 405 пикселей и ты рисуешь в точке (400, 100) прямоугольник 20×10.
Он вылезает за правый край (это придётся обнаруживать руками).
Поэтому рисуем его дважды — в (400, 100) и (400−WIDTH = −5, 100).
Визуально 5 левых пикселей будут в исходной точке, а 15 правых — врапнутся на левый край экрана.
По аналогии для остальных краёв.
Вариант универсален и сработает без изменений хоть со спрайтами, хоть вообще в 3D.

>>219110
Я понимаю, но это часть художественного замысла, как и хештег. Вынести в пейстбин будет всё равно, что вынести на сторонний ресурс или вообще в картинку сам текст.
2437.jpg109 Кб, 800x826
PoppyFanboy !VTLpv6lgGw 64 219344
>>219118
Хм, то есть расширить метод отрисовки прямоугольника, интересно

За последние два дня, можно сказать, ничего не делал (ну, вернее я все же почитал немного CLRS и реализовал merge sort, insertion sort и binary search, но это не считается), по-прежнему не могу нормально сфокусироваться в тишине, но когда включаю что-то на фон, теряю продуктивность. Знаю, уже писал об этом сюда, не знаю, что с этим делать. Короче, завтра хотя бы два раза по 25 минут позанимаюсь в тишине я обещаю, я стану лучше

Завтра рано вставать, поэтому пойду спать пораньше. Завтра буду читать Core Java и решать какие-нибудь задачки (по программированию и по математике из 6.042J). Змейку пока что отложу, наверное

...

В реализации двоичного поиска в стандартной библиотеке Java (https://pastebin.com/kksbWULq) в случае отсутствия искомого элемента в массиве возвращается не просто произвольное отрицательное целое число, а индекс массива i, в котором содержится наименьшее число, превзощедшее по значению искомый элемент, в форме -(i + 1). Ну или же i еще будет количеством элементов строго меньших искомого элемента. Тут как нельзя кстати полезно то, что Integer.MIN_VALUE на единицу больше Integer.MAX_VALUE: даже если поиск будет производиться в массиве максимальной длины, и искомый элемент будет больше всех элементов массива, то все равно вернется корректное "-(Integer.MAX_VALUE + 1)"

С доказательством корректности самого алгоритма поиска проблем нет (просто методом математической индукции), а вот для того, чтобы доказать, что в случае ненахождения искомого элемента возвращаемое отрицательное значение корректно, я думаю, нужно рассмотреть все варианты массивов, которые за одну итерацию цикла while переводят алгоритм в терминальную стадию

Случай 1: массив из двух элементов (вернее, мы выделили его из основного) low будет указывать на первый элемент, high - на второй, поэтому в качестве серединного элемента будет выбран первый элемент массива. Если он меньше, чем key, то массив делится на две части и выбирается правая, это нам неинтересно. Если же больше, то алгоритм переходит в терминальную стадию (элемент не найден), при этом low продолжает указывать на первый элемент из массива, то есть в итоге алгоритм вернет -(low + 1), а так как a[low - 1] < key (так как иначе в ходе алгоритма не была бы выбрана эта часть массива), то low - наименьший индекс массива такой, что a[low] > key

Случай 2: массив из одного элемента. Аналогично можно рассмотреть два случая (key > a[mid] и key < a[mid]) и опять же получить, что алгоритм выдает наименьший индекс элемента массива, превосходящего по значению key

Фух, теперь вроде у меня уложилось это

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

Единственная проблема - в таком варианте сортировка теряет стабильность (в том случае, если в массиве содержится несколько "одинаковых" элементов, нет никаких
гарантий, что алгоритм выберет первый попавшийся / последний элемент среди "одинаковых"), так что нет гарантии и того, что сохранится относительный порядок одинаковых элементов после сортировки. Так что тут тоже палка о двух концах
2437.jpg109 Кб, 800x826
PoppyFanboy !VTLpv6lgGw 64 219344
>>219118
Хм, то есть расширить метод отрисовки прямоугольника, интересно

За последние два дня, можно сказать, ничего не делал (ну, вернее я все же почитал немного CLRS и реализовал merge sort, insertion sort и binary search, но это не считается), по-прежнему не могу нормально сфокусироваться в тишине, но когда включаю что-то на фон, теряю продуктивность. Знаю, уже писал об этом сюда, не знаю, что с этим делать. Короче, завтра хотя бы два раза по 25 минут позанимаюсь в тишине я обещаю, я стану лучше

Завтра рано вставать, поэтому пойду спать пораньше. Завтра буду читать Core Java и решать какие-нибудь задачки (по программированию и по математике из 6.042J). Змейку пока что отложу, наверное

...

В реализации двоичного поиска в стандартной библиотеке Java (https://pastebin.com/kksbWULq) в случае отсутствия искомого элемента в массиве возвращается не просто произвольное отрицательное целое число, а индекс массива i, в котором содержится наименьшее число, превзощедшее по значению искомый элемент, в форме -(i + 1). Ну или же i еще будет количеством элементов строго меньших искомого элемента. Тут как нельзя кстати полезно то, что Integer.MIN_VALUE на единицу больше Integer.MAX_VALUE: даже если поиск будет производиться в массиве максимальной длины, и искомый элемент будет больше всех элементов массива, то все равно вернется корректное "-(Integer.MAX_VALUE + 1)"

С доказательством корректности самого алгоритма поиска проблем нет (просто методом математической индукции), а вот для того, чтобы доказать, что в случае ненахождения искомого элемента возвращаемое отрицательное значение корректно, я думаю, нужно рассмотреть все варианты массивов, которые за одну итерацию цикла while переводят алгоритм в терминальную стадию

Случай 1: массив из двух элементов (вернее, мы выделили его из основного) low будет указывать на первый элемент, high - на второй, поэтому в качестве серединного элемента будет выбран первый элемент массива. Если он меньше, чем key, то массив делится на две части и выбирается правая, это нам неинтересно. Если же больше, то алгоритм переходит в терминальную стадию (элемент не найден), при этом low продолжает указывать на первый элемент из массива, то есть в итоге алгоритм вернет -(low + 1), а так как a[low - 1] < key (так как иначе в ходе алгоритма не была бы выбрана эта часть массива), то low - наименьший индекс массива такой, что a[low] > key

Случай 2: массив из одного элемента. Аналогично можно рассмотреть два случая (key > a[mid] и key < a[mid]) и опять же получить, что алгоритм выдает наименьший индекс элемента массива, превосходящего по значению key

Фух, теперь вроде у меня уложилось это

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

Единственная проблема - в таком варианте сортировка теряет стабильность (в том случае, если в массиве содержится несколько "одинаковых" элементов, нет никаких
гарантий, что алгоритм выберет первый попавшийся / последний элемент среди "одинаковых"), так что нет гарантии и того, что сохранится относительный порядок одинаковых элементов после сортировки. Так что тут тоже палка о двух концах
bisect.png7 Кб, 310x303
Рируру !!gYmpHned/k 65 219352
>>219344

>в том случае, если в массиве содержится несколько "одинаковых" элементов, нет никаких гарантий, что алгоритм выберет первый попавшийся / последний элемент среди "одинаковых"



Есть, если делить на ‘<’ и ‘≥’ (или наоборот) и искать точную границу между ними, а не на ‘<’, ‘>’ и ‘о, да тут же =, дальше не на что смотреть, го сразу return’ ох, Oracle....

В питоновском модуле bisect вот так сделано. Обе функции возвращают индекс, по которому можно вставить искомый элемент, чтобы массив остался отсортированным. Единственное отличие между left- и right-версиями — при наличии элементов, равных искомому, left-версия вернёт индекс первого из них, а right — за последним, т. е.

>arr = [111, 222, 222, 222, 222, 333]


>bisect_left(arr, 222) = 1


>bisect_right(arr, 222) = 5.

PoppyFanboy !VTLpv6lgGw 66 219994
Не сильно успешно (читай совсем плохо), но что-то делаю

30 августа
Почитал Core Java и решил 18 задачу из Project Euler

31 августа
Вроде полностью доделал скорборды: все сохраняется, загружается, после ввода никнейма показывается таблица рекордов с выделенной новой записью. Случайно заметил одну штуковину: StreamTokenizer обрабатывает строки с цифрой на первом месте как "число + строка", то есть никнеймы с цифрами на первых позициях нужно брать в кавычки при записи в файл.

Еще все-таки сделал змейку чуть тоньше. Получилось реализовать это чуть лучше и короче, чем в предыдущий раз

1 сентября
Неожиданно заметил, что из-за того, что сначала проверяю, безопасно ли для змейки делать следующий ход, и только потом передвигать змейку, игра завершается на следующем ходе в случае, когда голова змейки идет сразу за хвостом. Немного переделал: теперь столкновения обрабатываются постфактум, и вроде как нормально

Не помню, что еще делал

2 сентября (это сегодня)
Почитал седьмой Readings из 6.042J: там про отношения на множествах, их свойства, про отношения по типу R: A -> A, опять же их свойства (рефлексивность, симметричность, транзитивность и их производные), partial orders, отношения эквивалентности и классы эквивалентности
Еще немного порешал задачи с CodeWars (на 6 kyu). Довольно простые, в основном связаны с обработкой строк. Наверное, надо попробовать потом 5 kyu или поискать посложнее на 6 kyu

Алсо в последние несколько дней я начал рисовать всякую ерунду (эллипсы, кубы, воронки, ну вот это вот все с drawabox.com). Довольно медитативно. Не знаю, получится ли из этого что-нибудь, какой-то конкретной цели у меня нет, пока что буду использовать как способ отвлечься

Довольно безуспешно борюсь с желанием постоянно что-то слушать на фоне бтв, сегодня доломал свои затычки, которые прослужили на удивление долго, я даже не помню, когда их покупал; может быть это знак свыше? хах Такое ощущение, будто отрываю от себя что-то, не хочется полностью расставаться с медиа контентом, будь то музыка (которая в последнее время даже удовольствия не приносит) или японские мультики. Наверное, буду совмещать с рисованием, в остальное время постараюсь воздерживаться

Где-то неделю назад попробовал заменить стул со спинкой на табуретку, и стало прямо гораздо лучше. Никогда бы не подумал

Завтра мне должны повесить на сутки прибор для суточного мониторинга, и это будет последнее обследования в рамках попыток выявления у меня проблем с сердцем. Похоже на то, что у меня действительно просто медленное сердце, и это никак не связано с какими-то серьезными сердечными болезнями

Завтра, может быть, схожу на дискретную математику в универ. Будет тот же лектор, что и на первом курсе и, сука, я максимально расстроен: в прошлом учебном году весь этот предмет был настолько одним большим недоразумением, что я вот сейчас заново прохожу теорию графов, теорию чисел и прочие штуковины. Если честно, вообще нет желания выходить на учебу: опять будет миллиард часов математики, большую часть из которой я просто забуду после экзаменов (всякие теория групп, подробности матанализа, топология). В теории в следующем году будет чуть больше computer science штуковин, но я уже и не надеюсь

В соседнем треде узнал про школу 21 от сберанка. Занятная вещь, но смущает одновременная "закрытость" и "открытость" всей этой системы: с одной стороны, вход туда доступен для любого человека за бесплатно (правда возрастом только от 18 до 30), но, с другой, я не могу нагуглить ни одного примера проекта, которые они там делают, ни одного отзыва, вообще ничего, только куча новостных статей с пересказом текста, написанного на сайте школы (хотя, как мне кажется, как раз на самом старте проекта должно быть максимальное количество отзывов). Ну да ладно, в любом случае, сейчас у меня нет возможности жить в дс, так что буду просто наблюдать за развитием событий

В общем, буду продолжать пытаться что-то из себя изобразить. В ближайшее время основная цель - избавиться от зависимости от медиа контента

>>219352 ♥♥♥
PoppyFanboy !VTLpv6lgGw 66 219994
Не сильно успешно (читай совсем плохо), но что-то делаю

30 августа
Почитал Core Java и решил 18 задачу из Project Euler

31 августа
Вроде полностью доделал скорборды: все сохраняется, загружается, после ввода никнейма показывается таблица рекордов с выделенной новой записью. Случайно заметил одну штуковину: StreamTokenizer обрабатывает строки с цифрой на первом месте как "число + строка", то есть никнеймы с цифрами на первых позициях нужно брать в кавычки при записи в файл.

Еще все-таки сделал змейку чуть тоньше. Получилось реализовать это чуть лучше и короче, чем в предыдущий раз

1 сентября
Неожиданно заметил, что из-за того, что сначала проверяю, безопасно ли для змейки делать следующий ход, и только потом передвигать змейку, игра завершается на следующем ходе в случае, когда голова змейки идет сразу за хвостом. Немного переделал: теперь столкновения обрабатываются постфактум, и вроде как нормально

Не помню, что еще делал

2 сентября (это сегодня)
Почитал седьмой Readings из 6.042J: там про отношения на множествах, их свойства, про отношения по типу R: A -> A, опять же их свойства (рефлексивность, симметричность, транзитивность и их производные), partial orders, отношения эквивалентности и классы эквивалентности
Еще немного порешал задачи с CodeWars (на 6 kyu). Довольно простые, в основном связаны с обработкой строк. Наверное, надо попробовать потом 5 kyu или поискать посложнее на 6 kyu

Алсо в последние несколько дней я начал рисовать всякую ерунду (эллипсы, кубы, воронки, ну вот это вот все с drawabox.com). Довольно медитативно. Не знаю, получится ли из этого что-нибудь, какой-то конкретной цели у меня нет, пока что буду использовать как способ отвлечься

Довольно безуспешно борюсь с желанием постоянно что-то слушать на фоне бтв, сегодня доломал свои затычки, которые прослужили на удивление долго, я даже не помню, когда их покупал; может быть это знак свыше? хах Такое ощущение, будто отрываю от себя что-то, не хочется полностью расставаться с медиа контентом, будь то музыка (которая в последнее время даже удовольствия не приносит) или японские мультики. Наверное, буду совмещать с рисованием, в остальное время постараюсь воздерживаться

Где-то неделю назад попробовал заменить стул со спинкой на табуретку, и стало прямо гораздо лучше. Никогда бы не подумал

Завтра мне должны повесить на сутки прибор для суточного мониторинга, и это будет последнее обследования в рамках попыток выявления у меня проблем с сердцем. Похоже на то, что у меня действительно просто медленное сердце, и это никак не связано с какими-то серьезными сердечными болезнями

Завтра, может быть, схожу на дискретную математику в универ. Будет тот же лектор, что и на первом курсе и, сука, я максимально расстроен: в прошлом учебном году весь этот предмет был настолько одним большим недоразумением, что я вот сейчас заново прохожу теорию графов, теорию чисел и прочие штуковины. Если честно, вообще нет желания выходить на учебу: опять будет миллиард часов математики, большую часть из которой я просто забуду после экзаменов (всякие теория групп, подробности матанализа, топология). В теории в следующем году будет чуть больше computer science штуковин, но я уже и не надеюсь

В соседнем треде узнал про школу 21 от сберанка. Занятная вещь, но смущает одновременная "закрытость" и "открытость" всей этой системы: с одной стороны, вход туда доступен для любого человека за бесплатно (правда возрастом только от 18 до 30), но, с другой, я не могу нагуглить ни одного примера проекта, которые они там делают, ни одного отзыва, вообще ничего, только куча новостных статей с пересказом текста, написанного на сайте школы (хотя, как мне кажется, как раз на самом старте проекта должно быть максимальное количество отзывов). Ну да ладно, в любом случае, сейчас у меня нет возможности жить в дс, так что буду просто наблюдать за развитием событий

В общем, буду продолжать пытаться что-то из себя изобразить. В ближайшее время основная цель - избавиться от зависимости от медиа контента

>>219352 ♥♥♥
twittersakuraxxx09051.jpg345 Кб, 2000x2000
PoppyFanboy !VTLpv6lgGw 67 220329
Как-то я вымотался за последние два дня: мало спал, наконец-то, закончил с этими обследованиями сердца (осталось дождаться результата), сходил в универ

В общем, по своей невнимательности (я полагаю, уже находящейся в какой-то хронической стадии) я перепутал расписания: как оказалось, дискретной математики у меня больше не будет (если вспомнить, как она преподавалась на первом курсе, это к лучшему), но зато будет дифференциальная геометрия, и чего-то первая лекция чуть не вогнала меня в какое-то уныние: я, конечно, понимаю, что каждая лекция должна быть в меру непонятной, но не настолько же. Я вечером потом правда разобрался с ней по своим конспектам, но, надеюсь больше подобного не будет. Там было про "Теорию Катастроф" (в данном контексте катастрофа - скачкообразное изменение состояния системы при плавном изменении ее параметров), параболические "качалки", ее метацентр, соприкасающаяся окружность к плоской кривой (ну, я думаю, конкретно эта тема раскроется потом чуть лучше), определение уравнения и того, как выглядит эволюта параболы, и то, как нужно перемещать центр тяжести параболической качалки, чтобы вызвать "катастрофу" (вот про последнее я вообще толком ничего не понял, конкретно, почему вдруг качалка должна скачкообразно перевалиться с одного бока на другой). В теории это должна была быть вводная лекция, которая бы рассматривала простую для понимания физическую задачу и плавно подводила к понятиям дифференциальной геометрии, но на деле получилось скомканное изложение некоторых положений из книги по теории катастроф ("Catastrophe Theory and Its Applications" - Tim Poston, Ian Stewart), пестрящее белыми пятнами в виде всяких недосказанностей и отсылок к фактам, принимающихся без доказательств (я, конечно, понимаю, что порою без этого никак, но тут ведь есть свобода в выборе наглядного примера для введения, неужели не было варианта получше?) Все это перемешивается с тем, что мне не очень-то интересна дифференциальная геометрия, но на данный момент нет варианта перепоступить куда-то или перевестись, да и, насколько я понял, наличие математики в таком объеме в принципе характерно для доброй половины computer science направлений в университетах (а в том же MIT к этому еще вроде как подключается курс по физике), так что ладно уж, будь, что будет

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

В общем, все эти два дня я в основном ходил в больницу, разбирался с дифференциальной геометрией и алгеброй. Удалось только совсем немного почитать седьмой Readings: там было про связь DAGs (Directed Acyclic Graphs) и posets (не могу, меня так сильно раздражает русскоязычное их наименование, а в особенности акроним ЧУМ, брр). И там было еще про транзитивное сокращение (которое вообще транзитивный остов, но мне не нравится это слово; вообще все русскоязычные термины в теории графов какие-то странные, и я в них постоянно путаюсь: цепь, путь, маршрут, минимальное остовное дерево (моя личная ненависть к слову "остовный" + на английском опять же более удачное название "Minimum Spanning Tree", из которого к тому же еще и красивая аббревиатура получается: MST)) и про транзитивное замыкание. Над первым я чет сначала малость подзавис: завтра доразберусь с этим (завтра у меня выходной, так что будет много свободного времени). На рисование, к сожалению, в эти два дня не было времени, завтра покалякую

Выхожу теперь из дома без наушников: как-то непривычно идти по улице в относительной тишине

Завтра разберу материал с сегодняшней лекции по алгебре, дочитаю седьмой Readings, повторю старые материалы из 6.042J - это основное
Почитаю CLRS, порисую (пока что кубы, ага)
Если останется время, поделаю задачи по программированию
twittersakuraxxx09051.jpg345 Кб, 2000x2000
PoppyFanboy !VTLpv6lgGw 67 220329
Как-то я вымотался за последние два дня: мало спал, наконец-то, закончил с этими обследованиями сердца (осталось дождаться результата), сходил в универ

В общем, по своей невнимательности (я полагаю, уже находящейся в какой-то хронической стадии) я перепутал расписания: как оказалось, дискретной математики у меня больше не будет (если вспомнить, как она преподавалась на первом курсе, это к лучшему), но зато будет дифференциальная геометрия, и чего-то первая лекция чуть не вогнала меня в какое-то уныние: я, конечно, понимаю, что каждая лекция должна быть в меру непонятной, но не настолько же. Я вечером потом правда разобрался с ней по своим конспектам, но, надеюсь больше подобного не будет. Там было про "Теорию Катастроф" (в данном контексте катастрофа - скачкообразное изменение состояния системы при плавном изменении ее параметров), параболические "качалки", ее метацентр, соприкасающаяся окружность к плоской кривой (ну, я думаю, конкретно эта тема раскроется потом чуть лучше), определение уравнения и того, как выглядит эволюта параболы, и то, как нужно перемещать центр тяжести параболической качалки, чтобы вызвать "катастрофу" (вот про последнее я вообще толком ничего не понял, конкретно, почему вдруг качалка должна скачкообразно перевалиться с одного бока на другой). В теории это должна была быть вводная лекция, которая бы рассматривала простую для понимания физическую задачу и плавно подводила к понятиям дифференциальной геометрии, но на деле получилось скомканное изложение некоторых положений из книги по теории катастроф ("Catastrophe Theory and Its Applications" - Tim Poston, Ian Stewart), пестрящее белыми пятнами в виде всяких недосказанностей и отсылок к фактам, принимающихся без доказательств (я, конечно, понимаю, что порою без этого никак, но тут ведь есть свобода в выборе наглядного примера для введения, неужели не было варианта получше?) Все это перемешивается с тем, что мне не очень-то интересна дифференциальная геометрия, но на данный момент нет варианта перепоступить куда-то или перевестись, да и, насколько я понял, наличие математики в таком объеме в принципе характерно для доброй половины computer science направлений в университетах (а в том же MIT к этому еще вроде как подключается курс по физике), так что ладно уж, будь, что будет

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

В общем, все эти два дня я в основном ходил в больницу, разбирался с дифференциальной геометрией и алгеброй. Удалось только совсем немного почитать седьмой Readings: там было про связь DAGs (Directed Acyclic Graphs) и posets (не могу, меня так сильно раздражает русскоязычное их наименование, а в особенности акроним ЧУМ, брр). И там было еще про транзитивное сокращение (которое вообще транзитивный остов, но мне не нравится это слово; вообще все русскоязычные термины в теории графов какие-то странные, и я в них постоянно путаюсь: цепь, путь, маршрут, минимальное остовное дерево (моя личная ненависть к слову "остовный" + на английском опять же более удачное название "Minimum Spanning Tree", из которого к тому же еще и красивая аббревиатура получается: MST)) и про транзитивное замыкание. Над первым я чет сначала малость подзавис: завтра доразберусь с этим (завтра у меня выходной, так что будет много свободного времени). На рисование, к сожалению, в эти два дня не было времени, завтра покалякую

Выхожу теперь из дома без наушников: как-то непривычно идти по улице в относительной тишине

Завтра разберу материал с сегодняшней лекции по алгебре, дочитаю седьмой Readings, повторю старые материалы из 6.042J - это основное
Почитаю CLRS, порисую (пока что кубы, ага)
Если останется время, поделаю задачи по программированию
sage PoppyFanboy !VTLpv6lgGw 68 220526
Блен, в общем, вчера ничего не успел: весь день разбирался с алгеброй. Причем опять делал это крайне непродуктивно и без перерывов: мне все кажется, что вот, еще пять минут, и до меня дойдет доказательство какой-то очередной теоремы, и вот я уже сижу, перечитывая доказательство десять минут, полчаса, и только тогда все вдруг становится на свои места, хотя по-хорошему не надо было тратить столько времени на это: лучше было бы пропустить и потом со свежим взглядом еще раз перечитать доказательство. Никак не могу от этого избавиться. Еще вчера всё-таки порисовал немного: эллипсы вроде стали чуть ровнее (когда рисую от плеча), с кубами пока что не особо: зафейлил упражнение на drawabox, где нужно нарисовать кучу кубов, образующих сферу, ноя вроде примерно понял, где допустил ошибки, потом попробую еще раз

Сейчас осознал, что полностью забыл матан (в частности всякие теоремы и определения для функций от нескольких переменных), а его еще целых два семестра будет, так что, наверное, ближайшее время буду вкатываться обратно, хоть мне и не очень хочется. Эх, возможно, поступать туда, куда я поступил, было в какой-то степени ошибкой, но переводиться сейчас куда-то у меня сейчас тоже нет желания
DiQSatZUEAA7GzX.jpeg83 Кб, 640x807
PoppyFanboy !VTLpv6lgGw 69 220620
Какое-то уныние началось: сегодня только немного повторил матан. Пойду-ка я спать: завтра весь день буду в универе, будет неприятно сдохнуть от недосыпа под конец

Одна из моих давних проблем - английский язык, вернее то, что я его не знаю ни черта. Ну как, читать книжки по программированию/математике и смежным темам, смотреть видео на ютабе я еще могу, но художественная литература, да даже новости - уже все, не хватает словарного запаса, и приходится переводить чуть ли не каждое слово. Про разговорные навыки я вообще молчу: монолог/диалог, все дается с трудом и получается криво и косноязычно. И мне не было бы нужды ныть из-за этого (худ. литературу, будучи быдлом, я даже на русском не читаю, говорить что-то заумное на английском и подавно нет нужды), если бы не предмет английского в вузе. Не знаю как, но по итогу отборочных тестирований я попал в группу вместе с теми, кто действительно умели нормально говорить. Ладно, я решил перетерпеть: сдал кучу монологов (которые предполагалось говорить опираясь только на какой-то план, но мне приходилось полностью писать весь текст), читал худ. литературу, еще что-то сдавал, в итоге получил зачет, и вроде вздохнул с облегчением. Но английский и не собирался отставать от меня: как оказалось, теперь у меня будет "английский по специальности", и это ни разу не легче того, что было до этого. Как бы да, теперь вместо худ. литературы нужно будет прочитать 60к знаков чего-то около computer science, пройти какой-нибудь курс на сайте вроде coursera, но меня пугает то, что в конце курса английского меня ждет защита чего-то там на английском. И все, теперь это меня угнетает: разговорного английского у меня и близко нет, а тут вот такое. Я, конечно, понимаю, что, возможно, я преувеличиваю значимость всего этого, но все равно неприятно. А еще задали к понедельнику подготовить десятиминутный (на двоих) рассказ про какой-нибудь университет. Я просто не знаю, я на русском-то не знаю, о чем столько говорить мне, а на английском... Да еще к тому же я хрен даже по референсу что-то выдам нормальное. Придется опять весь текст писать что ли? Как вообще научиться нормально говорить? У меня и мыслей-то никаких нет, чтобы воспроизвести их на ходу в устной форме. Я не знаю, все у меня как-то не так. Хорошо, что хоть английский теперь только один раз в неделю. Такое ощущение, что только у меня одного проблемы с ним: тем, кто не попал в продвинутую группу, нормально, потому что они тупо делают какие-то упражнения, тем, кто попал в продвинутую группу, тоже нормально, ведь они знают язык на том уровне, чтобы более-менее свободно что-то там говорить. А я, а я, мда

Все как будто валится из рук

Бтв, пришли результаты обследований моего сердца и, в общем, все слишком хорошо
DiQSatZUEAA7GzX.jpeg83 Кб, 640x807
PoppyFanboy !VTLpv6lgGw 69 220620
Какое-то уныние началось: сегодня только немного повторил матан. Пойду-ка я спать: завтра весь день буду в универе, будет неприятно сдохнуть от недосыпа под конец

Одна из моих давних проблем - английский язык, вернее то, что я его не знаю ни черта. Ну как, читать книжки по программированию/математике и смежным темам, смотреть видео на ютабе я еще могу, но художественная литература, да даже новости - уже все, не хватает словарного запаса, и приходится переводить чуть ли не каждое слово. Про разговорные навыки я вообще молчу: монолог/диалог, все дается с трудом и получается криво и косноязычно. И мне не было бы нужды ныть из-за этого (худ. литературу, будучи быдлом, я даже на русском не читаю, говорить что-то заумное на английском и подавно нет нужды), если бы не предмет английского в вузе. Не знаю как, но по итогу отборочных тестирований я попал в группу вместе с теми, кто действительно умели нормально говорить. Ладно, я решил перетерпеть: сдал кучу монологов (которые предполагалось говорить опираясь только на какой-то план, но мне приходилось полностью писать весь текст), читал худ. литературу, еще что-то сдавал, в итоге получил зачет, и вроде вздохнул с облегчением. Но английский и не собирался отставать от меня: как оказалось, теперь у меня будет "английский по специальности", и это ни разу не легче того, что было до этого. Как бы да, теперь вместо худ. литературы нужно будет прочитать 60к знаков чего-то около computer science, пройти какой-нибудь курс на сайте вроде coursera, но меня пугает то, что в конце курса английского меня ждет защита чего-то там на английском. И все, теперь это меня угнетает: разговорного английского у меня и близко нет, а тут вот такое. Я, конечно, понимаю, что, возможно, я преувеличиваю значимость всего этого, но все равно неприятно. А еще задали к понедельнику подготовить десятиминутный (на двоих) рассказ про какой-нибудь университет. Я просто не знаю, я на русском-то не знаю, о чем столько говорить мне, а на английском... Да еще к тому же я хрен даже по референсу что-то выдам нормальное. Придется опять весь текст писать что ли? Как вообще научиться нормально говорить? У меня и мыслей-то никаких нет, чтобы воспроизвести их на ходу в устной форме. Я не знаю, все у меня как-то не так. Хорошо, что хоть английский теперь только один раз в неделю. Такое ощущение, что только у меня одного проблемы с ним: тем, кто не попал в продвинутую группу, нормально, потому что они тупо делают какие-то упражнения, тем, кто попал в продвинутую группу, тоже нормально, ведь они знают язык на том уровне, чтобы более-менее свободно что-то там говорить. А я, а я, мда

Все как будто валится из рук

Бтв, пришли результаты обследований моего сердца и, в общем, все слишком хорошо
sage PoppyFanboy !VTLpv6lgGw 70 220908
Короче, минус неделя. Не с той ноги я пошел в универ. За выходные особо ничего не сделал: только повторял матан (уже почти весь, то, что осталось повторить, мне пока что и не осбо нужно), готовился к завтрашнему докладу по английскому (это действительно какая-то серьезная проблема у меня, мне все же пришлось полностью напечатать весь текст и запомнить его), и по мелочи там еще что-то. Очень много спал: 9-10 часов. По утрам очень тяжело просыпаться, даже если уже спал, более чем на протяжении семи часов: только снова опускаю голову на подушку, чтобы еще немного полежать, как отрубаюсь. Я полагаю, это из-за того, что я просыпаюсь, прерывая какую-то там фазу сна, но покупать умные девайсы для отслеживания сна мне не хочется. Придется пытаться просыпаться через силу в одно и то же время

Единственное хорошее - то, что сегодня я более-менее успешно практиковал своевременный отдых и переключение задач - это действительно работает

Я обещаю, я стану лучше
sage PoppyFanboy !VTLpv6lgGw 71 221204
Плавно ползущие черви почти готовы ( ° ʖ °)
69098574p0master1200waifu2xartnoise0scaletta1-2.png1 Мб, 1148x780
Рируру !!gYmpHned/k 72 221218
>>221204
That's gross!
PoppyFanboy !VTLpv6lgGw 73 221342
>>221218
Тут уже ничего не поделаешь ¯\_(ツ)_/¯

Чего-то я не выспался сегодня. Нет сегодня желания расписывать, что да как, но все же хочу кратко обозначить, так, для себя

- Вчера сделал плавную анимацию для змейки. Для этого пришлось немного переделать отрисовку, но вроде все работает. Там осталось убрать баг с исчезающей едой и с исчезающим сегментом змейки + наверное, надо все же перенести анимацию из таймера для апдейтов движения змейки в сетке в другой

- Вчера все же ответил этот доклад/презентацию по английскому. В общем, я так думаю, нет смысла особо запариваться по поводу несоответствия моего уровня навыка говорения и того уровня, что от нас требуют. Как-нибудь сдам (это, конечно, не означает, что мне не надо улучшать знание английского, просто сейчас несколько другие приоритеты)

- Сегодня немного успел сделать, во многом потому, что долго промаялся с пикрилейтед задачей. Она супер простая, но очевидное решение, как обычно бывает, - самое неэффективное, и мне потребовалось некоторое время для того, чтобы догнать, что можно отсортировать массив с числами, а затем просто сделать два поиска: bisect_left и bisect_right. Асимптотика у этого решения хуже, чем у первого (из-за nlgn сортировки), но при заданных в задании ограничениях второй алгоритм справляется лучше

- Еще начал разбираться с последней лекцией по матанализу. Стандартные теоремы и определения дифференциального исчисления (там определение производной, теорема Лагранжа, вот это вот все) для функций от нескольких переменных такие странные, пока что довольно слабо укладывается в голове

- Никак не получается найти времени для рисования ну как "не получается", я просто все еще хреново распределяю время

...

https://www.youtube.com/watch?v=NWeyUpqnKuk
74 221350
>>221342
Что от меня хотят на втором пике, вообще не вдупляю.
f78f718b1d2e078b1e3641770b9b3f52waifu2xartnoise1tta1-2.png1,3 Мб, 1400x803
75 221360
>>221350
Ты очередной собрат авторши соседнего треда по разуму? Дан массив A и ~запросы~ к нему. Каждый ~запрос~ выражен двумя числами — (L, R), и на него нужно ответить одним числом — количеством элементов массива, удовлетворяющих L ≤ Ai ≤ R.

Кстати, если не было: https://ru.wikipedia.org/wiki/Интерполяционный_поиск.
11.jpg151 Кб, 847x1000
PoppyFanboy !VTLpv6lgGw 76 221819
Пока что ничего особо интересного не происходит: в среду в основном занимался всякими университетскими штуковинами вроде домашних заданий и разбора материалов с лекций, в четверг ни на что времени не осталось из-за того, что надо было сгонять к стоматологу, ну а в пятницу тем более времени не было: пять пар - с утра до вечера

В последнее время слишком много сплю, вот даже если взять сегодняшний день: вроде и постарался лечь пораньше, проспал положенные семь с половиной часов, и все равно еле проснулся, а в иные дни, бывает, я так и засыпаю опять

На следующей неделе решил не ходить на лекции по матанализу, просто бесполезно: в определенный момент я перестаю вникать в суть происходящего, расписанного на четырех досках и начинаю просто бездумно переписывать символы. Не в последнюю очередь виновато то, в каком формате производятся все доказательства: все ключевые утверждения перенумеровываются и, когда нам требуется использовать что-то из уже доказанного, дается просто ссылка на это утверждение. Казалось бы, все в порядке, все четко следует одно из другого, но на деле доказательство выглядит как нечто неструктурированное и запутанное как программа с миллиардом goto, ведущих непонятно куда. Так что лучше уж я разберусь сам дома по чужим конспектам вместо того, чтобы тратить кучу времени на переписывание лекций с доски в тетрадь (хорошо, что есть люди, которые могут делать это за меня ¯\(︶ω︶)/¯)

Не получается регулярно что-то рисовать, последний раз занимался этим в среду. Пределал задание с кубами, образующими "сферу". Получилось не сильно лучше, чем в первый раз, но сейчас я хоть как-то отрисовал все кубы. Но все равно самые крайние (которые повернуты почти на 90 градусов) получились какими-то вытянутыми. Эх, ну ладно, пока что отложу это упражнение и пойду дальше. Кубы, сами по себе, кстати, тоже пока что не особо выходят, завтра, наверное разберусь чуть лучше. Может быть, я слишком близко располагаю точки схода, так что куб деформируется?

Сегодня занимался всем понемногу: поделал английский для универа (будь он проклят, создается ощущение, что я только им и занимаюсь, хоть и прилагаю минимальные старания), немного поразбирал лекции по матану (разобрался с достаточным условием существования производной для функции от нескольких переменных и с доказательством равенства смешанных производных для функций от двух переменных), повторил пройденные материалы из 6.042J (как оказалось, я много чего порядочно подзабыл, но сейчас вроде как восстановил). Продолжил седьмой readings, но прошел совсем немного: лишь только про единственность транзитивного сокращения для ориентированных ациклических графов, и про топологическую сортировку на частично упорядоченных множествах (про ее существование)

Завтра надо будет разобраться с последней лекцией по дифференциальной геометрии (и по возможности с парой задач с практик), почитать из CLRS про умножение полиномов и порисовать. С тем, чем еще буду заниматься, разберусь уже завтра

>>221360
Нет, не было, спасибо, было интересно почитать. Выходит, что можно даже задать функцию, которая бы приближенно оценивала зависимость индекса от ключей, а не ограничиваться дефолтной линейной

...

https://www.youtube.com/watch?v=slazi2PpYUo
11.jpg151 Кб, 847x1000
PoppyFanboy !VTLpv6lgGw 76 221819
Пока что ничего особо интересного не происходит: в среду в основном занимался всякими университетскими штуковинами вроде домашних заданий и разбора материалов с лекций, в четверг ни на что времени не осталось из-за того, что надо было сгонять к стоматологу, ну а в пятницу тем более времени не было: пять пар - с утра до вечера

В последнее время слишком много сплю, вот даже если взять сегодняшний день: вроде и постарался лечь пораньше, проспал положенные семь с половиной часов, и все равно еле проснулся, а в иные дни, бывает, я так и засыпаю опять

На следующей неделе решил не ходить на лекции по матанализу, просто бесполезно: в определенный момент я перестаю вникать в суть происходящего, расписанного на четырех досках и начинаю просто бездумно переписывать символы. Не в последнюю очередь виновато то, в каком формате производятся все доказательства: все ключевые утверждения перенумеровываются и, когда нам требуется использовать что-то из уже доказанного, дается просто ссылка на это утверждение. Казалось бы, все в порядке, все четко следует одно из другого, но на деле доказательство выглядит как нечто неструктурированное и запутанное как программа с миллиардом goto, ведущих непонятно куда. Так что лучше уж я разберусь сам дома по чужим конспектам вместо того, чтобы тратить кучу времени на переписывание лекций с доски в тетрадь (хорошо, что есть люди, которые могут делать это за меня ¯\(︶ω︶)/¯)

Не получается регулярно что-то рисовать, последний раз занимался этим в среду. Пределал задание с кубами, образующими "сферу". Получилось не сильно лучше, чем в первый раз, но сейчас я хоть как-то отрисовал все кубы. Но все равно самые крайние (которые повернуты почти на 90 градусов) получились какими-то вытянутыми. Эх, ну ладно, пока что отложу это упражнение и пойду дальше. Кубы, сами по себе, кстати, тоже пока что не особо выходят, завтра, наверное разберусь чуть лучше. Может быть, я слишком близко располагаю точки схода, так что куб деформируется?

Сегодня занимался всем понемногу: поделал английский для универа (будь он проклят, создается ощущение, что я только им и занимаюсь, хоть и прилагаю минимальные старания), немного поразбирал лекции по матану (разобрался с достаточным условием существования производной для функции от нескольких переменных и с доказательством равенства смешанных производных для функций от двух переменных), повторил пройденные материалы из 6.042J (как оказалось, я много чего порядочно подзабыл, но сейчас вроде как восстановил). Продолжил седьмой readings, но прошел совсем немного: лишь только про единственность транзитивного сокращения для ориентированных ациклических графов, и про топологическую сортировку на частично упорядоченных множествах (про ее существование)

Завтра надо будет разобраться с последней лекцией по дифференциальной геометрии (и по возможности с парой задач с практик), почитать из CLRS про умножение полиномов и порисовать. С тем, чем еще буду заниматься, разберусь уже завтра

>>221360
Нет, не было, спасибо, было интересно почитать. Выходит, что можно даже задать функцию, которая бы приближенно оценивала зависимость индекса от ключей, а не ограничиваться дефолтной линейной

...

https://www.youtube.com/watch?v=slazi2PpYUo
sage PoppyFanboy !VTLpv6lgGw 77 221930
Опять проснулся поздно
nhk.jpg49 Кб, 640x360
PoppyFanboy !VTLpv6lgGw 78 222116
В воскресенье так и не почитал про перемножение полиномов за O(nlgn): весь день разбирался с дифференциальной геометрией (и сейчас я вообще не понимаю, что там было такого сложного, что я так долго этим занимался). Под конец дня немного порисовал кубики: старался рисовать их во всяких необычных ракурсах; вроде получаются чуть лучше, но все равно иногда получается так, что тыльная грань больше лицевой (из-за чего все ломается).

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

Надо заставлять себя дробить время на 25-минутки и не заниматься чем-то одним более часа подряд, но мне так не хочется. Сентябрь такой серый. Не только из-за погоды

...

https://www.youtube.com/watch?v=PU7D66TuHkE
DnTsihLVAAA1Ys.jpg large.jpg162 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 79 222267
Окей, один час на одно занятие - слишком мало, нужно как минимум два или даже два с половиной.

За сегодня вообще ничего не сделал, только получше разобрался с алгеброй, ну и на пары сходил, и то не на все. Хотел порешать задачки по программированию, но намертво залип на первой же: вроде решение правильное, но на четвертом тесте тестирующая система выдает "Wrong Answer". Само задание до ужаса простое - сводится к алгоритму интерполяционного (ну или бинарного, не знаю, насколько здесь это важно, данные же распределены произвольно), но все равно не могу увидеть, где я не прав (https://ideone.com/LNkGUb). Самое интересное, что проблема точно не в реализации интерполяционного поиска, потому что при его замене на бинарный поиск ошибка остается. Не знаю, в общем

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

I. для универа (не все, но наиболее приоритетное):
1) Домашка по программированию (там ерунда, но надо сделать к четвергу)

2) Контрольная по алгебре (следующий вторник):
- разобрать остаток теории
- прорешать задачи с практик
- прорешать домашние задания

3) Разобрать лекции по матану (их две в неделю, так что нужно нагнать побыстрее)

4) Задания с практик по матанализу и домашние задания (там относительно сложные задания)

5) Разобрать лекции по алгебре (вторые по сложности лекции после матанализа)

II. по около программированию:
1) CLRS: перемножение полиномов (потому что уже давно хотел почитать)
2) 6.042J (сколько я уже мучаю этот курс, надо ускоряться)
3) Доделать змейку (нужно уже дропать это поскорее и приступать к чему-то новому)
4) Core Java (ну, хотя бы один язык программирования надо же нормально изучить)
5) Решение задачек по программированию

III. ну и отдельной категорией: рисование

Каждый день постараюсь делать что-то по каждой из трех категорий (обязательно равномерно, то есть чтобы не было так, что в одной категории сделаны два пункта, а в другой - ноль), внутри каждой категории - в порядке важности. Такой вариант распределения активностей крайне уязвим для неожиданных обстоятельств, но, я думаю, это все равно лучше, чем заниматься большим количеством активностей, но в меньших объемах для каждой активности (вот как раз сегодня в этом убедился: прошло 25x2 минут, я успел только повторить теорию по алгебре, а мне уже нужно делать что-то другое)

В общем, попробую вот так. Надеюсь, у меня получится совмещать универ и самообразование. Пока что получается не очень, мне даже стыдно за это Я не виноват, это все заговор!

...

https://www.youtube.com/watch?v=dVUmSgzgOqs
DnTsihLVAAA1Ys.jpg large.jpg162 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 79 222267
Окей, один час на одно занятие - слишком мало, нужно как минимум два или даже два с половиной.

За сегодня вообще ничего не сделал, только получше разобрался с алгеброй, ну и на пары сходил, и то не на все. Хотел порешать задачки по программированию, но намертво залип на первой же: вроде решение правильное, но на четвертом тесте тестирующая система выдает "Wrong Answer". Само задание до ужаса простое - сводится к алгоритму интерполяционного (ну или бинарного, не знаю, насколько здесь это важно, данные же распределены произвольно), но все равно не могу увидеть, где я не прав (https://ideone.com/LNkGUb). Самое интересное, что проблема точно не в реализации интерполяционного поиска, потому что при его замене на бинарный поиск ошибка остается. Не знаю, в общем

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

I. для универа (не все, но наиболее приоритетное):
1) Домашка по программированию (там ерунда, но надо сделать к четвергу)

2) Контрольная по алгебре (следующий вторник):
- разобрать остаток теории
- прорешать задачи с практик
- прорешать домашние задания

3) Разобрать лекции по матану (их две в неделю, так что нужно нагнать побыстрее)

4) Задания с практик по матанализу и домашние задания (там относительно сложные задания)

5) Разобрать лекции по алгебре (вторые по сложности лекции после матанализа)

II. по около программированию:
1) CLRS: перемножение полиномов (потому что уже давно хотел почитать)
2) 6.042J (сколько я уже мучаю этот курс, надо ускоряться)
3) Доделать змейку (нужно уже дропать это поскорее и приступать к чему-то новому)
4) Core Java (ну, хотя бы один язык программирования надо же нормально изучить)
5) Решение задачек по программированию

III. ну и отдельной категорией: рисование

Каждый день постараюсь делать что-то по каждой из трех категорий (обязательно равномерно, то есть чтобы не было так, что в одной категории сделаны два пункта, а в другой - ноль), внутри каждой категории - в порядке важности. Такой вариант распределения активностей крайне уязвим для неожиданных обстоятельств, но, я думаю, это все равно лучше, чем заниматься большим количеством активностей, но в меньших объемах для каждой активности (вот как раз сегодня в этом убедился: прошло 25x2 минут, я успел только повторить теорию по алгебре, а мне уже нужно делать что-то другое)

В общем, попробую вот так. Надеюсь, у меня получится совмещать универ и самообразование. Пока что получается не очень, мне даже стыдно за это Я не виноват, это все заговор!

...

https://www.youtube.com/watch?v=dVUmSgzgOqs
PoppyFanboy !VTLpv6lgGw 80 222421
Сделал домашнее задание по программированию, почитал CLRS про перемножение полиномов (еще не закончил), порисовал, начал решать задачи по алгебре (чисто чтобы закинуть крючок и завтра было больше желания этим заняться). Не очень продуктивно но завтра будет лучше!

Приятно, когда четко определена последовательность действий, но при этом нет конкретных временных рамок. Мне пока что нравится

По рисованию с кубами, наверное, пока что все. Они далеко не идеальны, но просто я хочу делать уже что-то другое. Перейду ко второму уроку

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

...

https://www.youtube.com/watch?v=KJNWlMiL1zM
PoppyFanboy !VTLpv6lgGw 81 222831
Сегодня очень долго спал, часов девять, только сейчас очухался. Сегодняшний день уже довольно сильно испорчен, но все же попробую поделать что-нибудь. Думаю закончить готовиться к контрольной по алгебре, почитать 6.042J, порисовать и поразбирать матанализ.

Вот эти червеобразные штуковины из второго урока с drawabox пока что выходят не очень: плохо получается вписывать эллипсы, из-за чего куча грязи, пока еще толком не разобрался как рисовать сгибы, выбираю слишком простые ракурсы/

20.09
Прорешал половину задачек к контрольной по алгебре, почти дочитал про полиномы в CLRS (надо будет реализовать все это потом), порисовал, ничего особо интересного.

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

...

https://www.youtube.com/watch?v=v5SZ4bCM-Kc
sage PoppyFanboy !VTLpv6lgGw 82 223045
Ничего не делал, только в каком-то вялом режиме разбирался с алгеброй все эти два дня, и вроде как даже почти все прорешал, но на фоне того, что больше за это время я вообще ничего не сделал полезного это выглядит просто смешно. Что это? Осенняя хандра? В голове туман, очень не хочется, чтобы так продолжалось. Почти все время убивают вещи, касающиеся универа, прямо очень обидно. Чувствую, что недостаточно хорошо стараюсь, могу же наверняка гораздо лучше.

Не знаю, почему, но некоторым людям мне не хочется помогать: в таких случаях либо максимально вежливо отказываюсь, либо прилагаю минимум усилий. А если помогаю без желания, то это не приносит никакого удовлетворения. Вот взять вчера: попросили помочь с алгеброй, я нехотя хоть и добился за полчаса объяснений понимания задачи со стороны одногруппника, но это вообще ничего мне не принесло. Единственное, что пронеслось у меня в голове: "Фух, наконец-то, он отстал от меня". Так, наверное, не должно быть. Может быть, на подсознательном уровне мне просто неприятен этот человек, поэтому так получается. Иногда бывает совершенно наоборот: делаешь для человека по максимуму, даже если знаешь, что никакой выгоды с этого не получишь. Нормально ли это? Не знаю, наверное, да. А если и нет, то все равно не стоит задаваться такими вопросами.

Сейчас на практике по алгебре у нас действие группы на множество и конечно порожденные абелевы группы, и я понятия не имею, что интересного со всем этим можно сделать. Только решать задачи из сборника Кострикина, все, больше нигде нет применения. Причем это ведь еще и быстро все забудется потом поэтому ощущение ненужности этих знаний просто удваивается.

Вообще не понимаю, на кой черт мне сдалась теория групп. Все, что мне оттуда нужно - это группа комплексных корней из единицы, которая используется при перемножении полиномов за О(nlgn), а больше я вообще не вижу, где ее можно применить на практике. Это не исключает того, что теория групп, да и вообще математика - красивая и стройная наука, но, блин, мне не очень хочется. Глядя на то, как сейчас мучается парень, перешедший ко мне в группу из какого-то другого универа (с понижением на один курс), я понимаю, что хрен бы у меня получилось перевестись даже на почти смежное направление на моем же факультете, где поменьше математики. Так что пусть будет, как есть.

У меня уже относительно давно, недели две назад, практически перестал звучать один из наушников. Я уже мысленно их похоронил и только ожидал момента, когда они окончательно сдохнут, чтобы купить новые. И вот сейчас мне резко ударило в голову: ну не может же быть так, чтобы просто на одном наушнике дропнулась громкость. И, короче, да, оказалось, что достаточно было их почистить. Мда, получается, я две недели слушал музыку в моно на одно ухо.

Вот уже пошла не-помню-какая неделя с того момента, когда я во что-то играл. До этого в основном играл в третий дарк, иногда на мышке кликал кружочки в осу (мне просто нравилось попадать в ритм, карт сложнее, чем на две-три звезды я не про). Третий дарк забросил сразу, когда дошел до гиганта Йорма. Это было какое-то смертельное уныние, я даже толком не знаю, почему у меня эта игра вызывала такие ощущения. По воспоминаниям первый дарк соулс мне зашел гораздо лучше, но он и попроще последующих частей был, может, из-за этого они мне не понравились. Не знаю, в любом случае, играть сейчас ни во что не хочется. Хотя вот визуальную новеллу по Steins Gate я бы, может, и заценил. Не сильно давно смотрел аниме, и мне безумно понравилось. Хоть там и есть несколько спорных моментов, которые неплохо было бы просто безжалостно вырезать, но в целом очень достойно, как по мне. Еще случайно из соседнего треда узнал, что оказывается, у психопаспорта есть второй сезон и вдобавок полнометражка. Вряд ли буду смотреть в ближайшее время, не очень хочется. Да и, как мне кажется, это аниме не нуждается во втором сезоне: первый представляет из себя вполне цельную историю, не оставляющую недосказанностей.

Вообще я не так часто смотрю японские мультики, но некоторые представители безумно нравятся.

Случайно услышал песенку Murder by Death - True Dark, очень понравилась. Потом надо будет полистать другие песни этого же исполнителя

Не знаю, что будет завтра. Надо разобраться с лекцией по алгебре и по алгебре же дорешать оставшиеся две задачи к контрольной. Еще постараюсь порисовать и поделать змейку. Ну а если вдруг случится чудо, и у меня останется еще время, то почитаю 6.042J.

Что-то не так я делаю со своей жизнью
sage PoppyFanboy !VTLpv6lgGw 82 223045
Ничего не делал, только в каком-то вялом режиме разбирался с алгеброй все эти два дня, и вроде как даже почти все прорешал, но на фоне того, что больше за это время я вообще ничего не сделал полезного это выглядит просто смешно. Что это? Осенняя хандра? В голове туман, очень не хочется, чтобы так продолжалось. Почти все время убивают вещи, касающиеся универа, прямо очень обидно. Чувствую, что недостаточно хорошо стараюсь, могу же наверняка гораздо лучше.

Не знаю, почему, но некоторым людям мне не хочется помогать: в таких случаях либо максимально вежливо отказываюсь, либо прилагаю минимум усилий. А если помогаю без желания, то это не приносит никакого удовлетворения. Вот взять вчера: попросили помочь с алгеброй, я нехотя хоть и добился за полчаса объяснений понимания задачи со стороны одногруппника, но это вообще ничего мне не принесло. Единственное, что пронеслось у меня в голове: "Фух, наконец-то, он отстал от меня". Так, наверное, не должно быть. Может быть, на подсознательном уровне мне просто неприятен этот человек, поэтому так получается. Иногда бывает совершенно наоборот: делаешь для человека по максимуму, даже если знаешь, что никакой выгоды с этого не получишь. Нормально ли это? Не знаю, наверное, да. А если и нет, то все равно не стоит задаваться такими вопросами.

Сейчас на практике по алгебре у нас действие группы на множество и конечно порожденные абелевы группы, и я понятия не имею, что интересного со всем этим можно сделать. Только решать задачи из сборника Кострикина, все, больше нигде нет применения. Причем это ведь еще и быстро все забудется потом поэтому ощущение ненужности этих знаний просто удваивается.

Вообще не понимаю, на кой черт мне сдалась теория групп. Все, что мне оттуда нужно - это группа комплексных корней из единицы, которая используется при перемножении полиномов за О(nlgn), а больше я вообще не вижу, где ее можно применить на практике. Это не исключает того, что теория групп, да и вообще математика - красивая и стройная наука, но, блин, мне не очень хочется. Глядя на то, как сейчас мучается парень, перешедший ко мне в группу из какого-то другого универа (с понижением на один курс), я понимаю, что хрен бы у меня получилось перевестись даже на почти смежное направление на моем же факультете, где поменьше математики. Так что пусть будет, как есть.

У меня уже относительно давно, недели две назад, практически перестал звучать один из наушников. Я уже мысленно их похоронил и только ожидал момента, когда они окончательно сдохнут, чтобы купить новые. И вот сейчас мне резко ударило в голову: ну не может же быть так, чтобы просто на одном наушнике дропнулась громкость. И, короче, да, оказалось, что достаточно было их почистить. Мда, получается, я две недели слушал музыку в моно на одно ухо.

Вот уже пошла не-помню-какая неделя с того момента, когда я во что-то играл. До этого в основном играл в третий дарк, иногда на мышке кликал кружочки в осу (мне просто нравилось попадать в ритм, карт сложнее, чем на две-три звезды я не про). Третий дарк забросил сразу, когда дошел до гиганта Йорма. Это было какое-то смертельное уныние, я даже толком не знаю, почему у меня эта игра вызывала такие ощущения. По воспоминаниям первый дарк соулс мне зашел гораздо лучше, но он и попроще последующих частей был, может, из-за этого они мне не понравились. Не знаю, в любом случае, играть сейчас ни во что не хочется. Хотя вот визуальную новеллу по Steins Gate я бы, может, и заценил. Не сильно давно смотрел аниме, и мне безумно понравилось. Хоть там и есть несколько спорных моментов, которые неплохо было бы просто безжалостно вырезать, но в целом очень достойно, как по мне. Еще случайно из соседнего треда узнал, что оказывается, у психопаспорта есть второй сезон и вдобавок полнометражка. Вряд ли буду смотреть в ближайшее время, не очень хочется. Да и, как мне кажется, это аниме не нуждается во втором сезоне: первый представляет из себя вполне цельную историю, не оставляющую недосказанностей.

Вообще я не так часто смотрю японские мультики, но некоторые представители безумно нравятся.

Случайно услышал песенку Murder by Death - True Dark, очень понравилась. Потом надо будет полистать другие песни этого же исполнителя

Не знаю, что будет завтра. Надо разобраться с лекцией по алгебре и по алгебре же дорешать оставшиеся две задачи к контрольной. Еще постараюсь порисовать и поделать змейку. Ну а если вдруг случится чудо, и у меня останется еще время, то почитаю 6.042J.

Что-то не так я делаю со своей жизнью
sage PoppyFanboy !VTLpv6lgGw 83 223391
https://www.math.unl.edu/~mbrittenham2/classwk/990s08/public/myasnikov.1.free.groups.pdf

Короче, суть вот в чем. Изначально для "свободной группы порожденной множеством S" дается конструктивное определение: множество S расширяется до A = S ∪ S-1, из элементов множества A составляется множество слов W, определяются сокращение и вставка для слов (убрать/добавить s-1s) и, наконец, задается свободная группа W/~ (где ~ - отношение эквивалентности, два слова находятся в отношении, если одно может быть получено из другого вставками и сокращениями) - группа классов слов с операцией конкатенации.

Теперь составим эквивалентное определение свободной группы: группу G называют свободной, если существует порождающее множество X такое, что любое непустое сокращенное слово из элементов X (сокращенное существует и единственно - можно доказать) определяет нетривиальный (не являющийся нейтральным) элемент из G

док-во эквивалентности определений

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

<=: очевидно (конструктивное определение соответствует второму определению)

(универсальное свойство)
Окей, с этим определились. Теперь рассмотрим диаграмму (1.3 The universal property of free groups) и предположение с ней связанное: о том, что группа G (с порождающим множеством X) является свободной тогда и только тогда, когда для произвольной группы H и произвольного отображения f: X -> H существует единственный гомоморфизм такой, что f = f*(i) (тождественно равны, иначе говоря, диаграмма коммутирует)

Доказательство в одну сторону:
Допустим, G является свободной FX группой (по конструктивному определению), значит, всякий его элемент g может быть представлен в качестве конкатенации элементов из {X U X-1}: g = xi1e1 ... xinen.
Теперь определим отображение f'(g) := f(xi1)e1 ... f(xin)en
Проверим, что получили гомоморфизм (ну там более-менее очевидно)

Доказательство в другую сторону:
Предположим, что выполняется правая часть предположения. Пусть H := FX, f(xi) := [xi] - однобуквенное слово слово, тогда по предположению существует единственный гомоморфизм f'. Пусть w - ненулевое сокращенное слово в H, для него существует элемент g такой, что f'(g) = w, значит, так как w нетривиальный, а f' - гомоморфизм, то g не может быть нейтральным элементом. Таким образом, мы пришли ко второму определению свободной группы.

Следствие: если f: X -> H такое, что Im(f) = X, то f' - изоморфизм, так как равны размерности групп. Таким образом, среди свободных групп, порожденных множеством X, можно с точностью до изоморфизма рассматривать только FX

а, блин, еще здорово было бы, если бы это нормально рассказали на лекции. Я в целом все это понимаю, но все равно чувствую себя некомфортно

Сука, а на лекции было так: конструктивное определение, определение свободной группы со свободными образующими (говорят, что G - свободная со свободными образующими (g1, .., gn), если существует изоморфизм Fn -> G, где fi -> gi, то есть вот как раз просто так без доказательств используется следствие, полученное в конца + определение ни от куда не следует), потом для свободной группы со свободными образующими f1, ..., fn доказывается теорема о существовании гомоморфизма между ней и G, порожденной элементами g1, ..., gn. То есть вообще хрен пойми какой порядок получается, и зачем нужна последняя теорема тоже непонятно. Ну это бред, короче, искусственно устанавливаются связи вместо того, чтобы одно получалось следствием из другого. Я с этого момента, наверное, не буду так подробно разбираться, ну его.

Ну, короче, да, у ничего не успеваю. Вот вчера-сегодня пытался осознать выше описанное. Если бы я не пытался провести параллели с тем, что было на лекции, я бы проглотил материал по ссылке гораздо быстрее, а так я все пытался понять, что же лектор имел в виду и как это соотносится с тем, что у Мясникова. Зачем лектор вообще сократил описание свободных групп до вот такой ерунды. Лучше бы он в более общих чертах без доказательств, но рассказал бы в плюс-минус той же последовательности, что и Мясников.

Тут еще недавно, пока ехал в автобусе, до меня вдруг в полной мере дошло, почему в решете эратосфена мы проходим до корня из n: если у нас где-то там есть составное большее корня из n, то оно раскладывается на два числа a >= sqrt(n), b <=sqrt(n), то есть оно будет уже вычеркнуто на момент, когда итератор цикла достигнет sqrt(n)
sage PoppyFanboy !VTLpv6lgGw 83 223391
https://www.math.unl.edu/~mbrittenham2/classwk/990s08/public/myasnikov.1.free.groups.pdf

Короче, суть вот в чем. Изначально для "свободной группы порожденной множеством S" дается конструктивное определение: множество S расширяется до A = S ∪ S-1, из элементов множества A составляется множество слов W, определяются сокращение и вставка для слов (убрать/добавить s-1s) и, наконец, задается свободная группа W/~ (где ~ - отношение эквивалентности, два слова находятся в отношении, если одно может быть получено из другого вставками и сокращениями) - группа классов слов с операцией конкатенации.

Теперь составим эквивалентное определение свободной группы: группу G называют свободной, если существует порождающее множество X такое, что любое непустое сокращенное слово из элементов X (сокращенное существует и единственно - можно доказать) определяет нетривиальный (не являющийся нейтральным) элемент из G

док-во эквивалентности определений

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

<=: очевидно (конструктивное определение соответствует второму определению)

(универсальное свойство)
Окей, с этим определились. Теперь рассмотрим диаграмму (1.3 The universal property of free groups) и предположение с ней связанное: о том, что группа G (с порождающим множеством X) является свободной тогда и только тогда, когда для произвольной группы H и произвольного отображения f: X -> H существует единственный гомоморфизм такой, что f = f*(i) (тождественно равны, иначе говоря, диаграмма коммутирует)

Доказательство в одну сторону:
Допустим, G является свободной FX группой (по конструктивному определению), значит, всякий его элемент g может быть представлен в качестве конкатенации элементов из {X U X-1}: g = xi1e1 ... xinen.
Теперь определим отображение f'(g) := f(xi1)e1 ... f(xin)en
Проверим, что получили гомоморфизм (ну там более-менее очевидно)

Доказательство в другую сторону:
Предположим, что выполняется правая часть предположения. Пусть H := FX, f(xi) := [xi] - однобуквенное слово слово, тогда по предположению существует единственный гомоморфизм f'. Пусть w - ненулевое сокращенное слово в H, для него существует элемент g такой, что f'(g) = w, значит, так как w нетривиальный, а f' - гомоморфизм, то g не может быть нейтральным элементом. Таким образом, мы пришли ко второму определению свободной группы.

Следствие: если f: X -> H такое, что Im(f) = X, то f' - изоморфизм, так как равны размерности групп. Таким образом, среди свободных групп, порожденных множеством X, можно с точностью до изоморфизма рассматривать только FX

а, блин, еще здорово было бы, если бы это нормально рассказали на лекции. Я в целом все это понимаю, но все равно чувствую себя некомфортно

Сука, а на лекции было так: конструктивное определение, определение свободной группы со свободными образующими (говорят, что G - свободная со свободными образующими (g1, .., gn), если существует изоморфизм Fn -> G, где fi -> gi, то есть вот как раз просто так без доказательств используется следствие, полученное в конца + определение ни от куда не следует), потом для свободной группы со свободными образующими f1, ..., fn доказывается теорема о существовании гомоморфизма между ней и G, порожденной элементами g1, ..., gn. То есть вообще хрен пойми какой порядок получается, и зачем нужна последняя теорема тоже непонятно. Ну это бред, короче, искусственно устанавливаются связи вместо того, чтобы одно получалось следствием из другого. Я с этого момента, наверное, не буду так подробно разбираться, ну его.

Ну, короче, да, у ничего не успеваю. Вот вчера-сегодня пытался осознать выше описанное. Если бы я не пытался провести параллели с тем, что было на лекции, я бы проглотил материал по ссылке гораздо быстрее, а так я все пытался понять, что же лектор имел в виду и как это соотносится с тем, что у Мясникова. Зачем лектор вообще сократил описание свободных групп до вот такой ерунды. Лучше бы он в более общих чертах без доказательств, но рассказал бы в плюс-минус той же последовательности, что и Мясников.

Тут еще недавно, пока ехал в автобусе, до меня вдруг в полной мере дошло, почему в решете эратосфена мы проходим до корня из n: если у нас где-то там есть составное большее корня из n, то оно раскладывается на два числа a >= sqrt(n), b <=sqrt(n), то есть оно будет уже вычеркнуто на момент, когда итератор цикла достигнет sqrt(n)
sage PoppyFanboy !VTLpv6lgGw 84 223395
Аа, я не знаю. Лучше сначала разобраться со всем материалам по лекциям, а потом в спокойном режиме самообразовываться или делать в параллели? Теорию необходимую для решения всяких задачек нам объясняют на практических занятиях, так что лекции, получается, существуют где-то в параллельном измерении, и торопиться с ними особо нет нужды, но просто я в то же время не хочу, чтобы было как в прошлом году, когда я провел обе сессии в режиме 3 дня учу - сдаю - goto 10. Так что да, надо пытаться как-то совмещать, не особо подробно разбирать доказательства, сдавать всякие вещи для зачетов.

Моя проблема в том, что я слишком последовательный: не могу отложить что-то даже на один день: если начал, то надо закончить именно сейчас. От этого надо как-то избавляться.

Завтра поразбираю задачки по матану, надо будет еще сделать домашку по программированию. А в остальном все то же, что планировал на еще вчера
sage PoppyFanboy !VTLpv6lgGw 85 223827
26.09
Сделал домашку по программированию, поразбирал матанализ, немного порисовал. Хочу сделать uml-диаграмму для змейки, чтобы проще было ориентироваться: как-то уже немного путаюсь

27.09
Весь день убил на разбор лекций по матанализу. Ужасно непродуктивно

28.09
Целый день был в универе. Вечером немного порисовал

опять какое-то уныние. Завтра ничего не буду делать касательно университетских штук, позанимаюсь чем-нибудь поинтереснее
PoppyFanboy !VTLpv6lgGw 86 224174
Вчера и сегодня большую часть времени ковырял змейку: исправил несколько багов, синхронизировал изменение размеров окна с размерами игрового поля (там единственное осталось сделать так, чтобы размер клетки игрового поля в пикселях был кратен пяти, чтобы можно было сделать змейку шириной в n/5-ых от ширины клетки; это и сейчас можно сделать, но если ширина змейки нецелое число, то она, во-первых, выглядит размыто по краям, а во-вторых, при движении змейка оставляет кучу незатертых пикселей).

Зарегистрировал ultimate-версию идеи, и опробовал встроенную возможность создавать UML-диаграммы: мне не особо понравилось, чет оно как-то странно работает тут. Для меня главный недостаток в том, что вроде как нельзя вставлять комментарии к методам и полям прямо в диаграмму классов (вообще, вполне вероятно, сам концепт диаграммы классов не подразумевает наличия в нем какой-то дополнительной справочной информации, а должна только отражать связи между сущностями, так что я зря тут ругаюсь). После неудачи со встроенным плагином установил опенсорс PlantUML: тут уже можно вообще почти что-угодно пихать в узлы графа, даже картинки. Немного огорчает отсутствие поддержки экспорта в pdf (только картинкой), но, в целом, нормально. Поначалу я оптимистично хотел заделать полную диаграмму классов для всей змейки, но меня хватило только на маленький кусочек: надоело. Наверное, подобными вещами стоит заниматься во время или даже до разработки самого проекта к слову, пикрил диаграмма уже не особо актуально, хоть и была создана только вчера; это еще раз наводит на мысль о том, что встроенный редактор UML все же лучше справляется со своей задачей (отображать структуру приложения), автоматически добавляя все методы и поля из класса на диаграмму, нежели PlantUML, в котором все связи и наполнение для узлов диаграммы нужно прописывать руками. Так что с самого начала мне был нужен не UML-редактор, а какое-нибудь удобное средство для визуализации диаграмм

Сегодня еще порисовал немного: дефолтные круги, несколько кубов, несколько типа объемных штуковин. Сделал еще одну попытку нарисовать пересечение нескольких геометрических фигур, но как-то не вышло: с пересечением цилиндра и сферы я еще вроде разобрался, но вот как рисовать пересечение конуса и цилиндра, пока что не понял. В уме тоже не очень хорошо представляю. Надо будет скачать какой-нибудь блендер и посмотреть, как это вообще все выглядит как-то даже стыдно это выкладывать: кубы тут вообще максимально кривыми получились; ну да ладно, пусть будет

Сейчас сидел разбирался с последними лекциями по дифференциальной геометрии. Пока что относительно несложно: лектор довольно подробно расписывает все на доске, так что восстановить лекцию по конспектам вполне реально

Завтра попробую проснуться пораньше: это наверняка очень хреново отразится на моем физическом состоянии, но мне просто нужно быстро вырваться из бесконечного круга "поздно лег - поздно встал" и сместить немного режим.

Завтра обязательно продолжу 6.042j, я уже откладываю это непонятно сколько раз

...

https://www.youtube.com/watch?v=CfbCLwNlGwU
PoppyFanboy !VTLpv6lgGw 86 224174
Вчера и сегодня большую часть времени ковырял змейку: исправил несколько багов, синхронизировал изменение размеров окна с размерами игрового поля (там единственное осталось сделать так, чтобы размер клетки игрового поля в пикселях был кратен пяти, чтобы можно было сделать змейку шириной в n/5-ых от ширины клетки; это и сейчас можно сделать, но если ширина змейки нецелое число, то она, во-первых, выглядит размыто по краям, а во-вторых, при движении змейка оставляет кучу незатертых пикселей).

Зарегистрировал ultimate-версию идеи, и опробовал встроенную возможность создавать UML-диаграммы: мне не особо понравилось, чет оно как-то странно работает тут. Для меня главный недостаток в том, что вроде как нельзя вставлять комментарии к методам и полям прямо в диаграмму классов (вообще, вполне вероятно, сам концепт диаграммы классов не подразумевает наличия в нем какой-то дополнительной справочной информации, а должна только отражать связи между сущностями, так что я зря тут ругаюсь). После неудачи со встроенным плагином установил опенсорс PlantUML: тут уже можно вообще почти что-угодно пихать в узлы графа, даже картинки. Немного огорчает отсутствие поддержки экспорта в pdf (только картинкой), но, в целом, нормально. Поначалу я оптимистично хотел заделать полную диаграмму классов для всей змейки, но меня хватило только на маленький кусочек: надоело. Наверное, подобными вещами стоит заниматься во время или даже до разработки самого проекта к слову, пикрил диаграмма уже не особо актуально, хоть и была создана только вчера; это еще раз наводит на мысль о том, что встроенный редактор UML все же лучше справляется со своей задачей (отображать структуру приложения), автоматически добавляя все методы и поля из класса на диаграмму, нежели PlantUML, в котором все связи и наполнение для узлов диаграммы нужно прописывать руками. Так что с самого начала мне был нужен не UML-редактор, а какое-нибудь удобное средство для визуализации диаграмм

Сегодня еще порисовал немного: дефолтные круги, несколько кубов, несколько типа объемных штуковин. Сделал еще одну попытку нарисовать пересечение нескольких геометрических фигур, но как-то не вышло: с пересечением цилиндра и сферы я еще вроде разобрался, но вот как рисовать пересечение конуса и цилиндра, пока что не понял. В уме тоже не очень хорошо представляю. Надо будет скачать какой-нибудь блендер и посмотреть, как это вообще все выглядит как-то даже стыдно это выкладывать: кубы тут вообще максимально кривыми получились; ну да ладно, пусть будет

Сейчас сидел разбирался с последними лекциями по дифференциальной геометрии. Пока что относительно несложно: лектор довольно подробно расписывает все на доске, так что восстановить лекцию по конспектам вполне реально

Завтра попробую проснуться пораньше: это наверняка очень хреново отразится на моем физическом состоянии, но мне просто нужно быстро вырваться из бесконечного круга "поздно лег - поздно встал" и сместить немного режим.

Завтра обязательно продолжу 6.042j, я уже откладываю это непонятно сколько раз

...

https://www.youtube.com/watch?v=CfbCLwNlGwU
.jpg91 Кб, 965x836
PoppyFanboy !VTLpv6lgGw 87 224323
Проснулся поздно: не смог заставить себя проснуться. Ничего особо не делал, только сходил на пары и повспоминал, о чем там вообще говорилось в седьмом Readings из 6.042j. Я бы мог сейчас еще посидеть что-нибудь поделать ночью, но, пожалуй, пойду спать: весь день ходил никакой, сейчас тоже не особо хорошо себя чувствую.

Довольно много времени (где-то два часа в день, когда езжу на пары) трачу на транспорт, и никак не использую это время: просто залипаю в окно. Не могу быстро переключаться с одного на другое, после пробуждения обычно где-то в течение часа ничего не делаю. Изученные вещи быстро забываются, из-за этого приходится относительно часто очень много чего повторять я думаю, имеет смысл перенести все конспекты в один вордовский файл, проиндексировать их, сделать экселевскую таблицу со списком тем, разбив их на четыре группы в зависимости от того, насколько хорошо я помню материал, и потом повторять все это с частотой обратно пропорциональной тому, насколько хорошо я знаю материал; завтра попробую так сделать с частью конспектов по дискретной математике

Пиздец, мне так стыдно за себя.

Окей, завтра попробую почитать что-нибудь в автобусе. Дома: порисую, порешаю задачки по матану, начну реализовывать умножение полиномов за O(nlg(n))
PoppyFanboy !VTLpv6lgGw 88 224485
Дочитал в транспорте седьмой Readings из 6.042J: про применение partially ordered sets для планирования операции (ну, то есть poset определяет, какие операции должны предшествовать каким, и получается, что некоторые операции можно выполнять условно одновременно), антицепи (вот как раз множества uncomparable между собой элементов), и в конце про Dilworth's Lemma (для любого t > 0 и для любого poset размерности n выполняется по крайней мере одно из следующих утверждений: в poset есть цепь длины > t, в poset есть антицепь размерности >= n/t). Из последней леммы следует довольно интересное следствие о том, что в любой последовательности различных n чисел можно выделить строго возрастающую/убывающую подпоследовательность длины sqrt(n).

С доказательством у меня как-то туго, у меня не получается. Понятно, что надо использовать последнюю лемму для t = sqty(n), но у меня ничего не выходит. Вот, что есть. Рассмотрим последовательность из n чисел и введем на нем partial ordering "<": a < b iff a предшествует b в последовательности и а меньше, чем b. Допустим, что существует антицепь размерности >= sqrt(n), иначе говоря, существует число а из последовательности такое, что оно больше или равно как минимум {sqrt(n)} последующих чисел из последовательности. И тут надо либо надо прийти к противоречию с чем-то, либо найти цепь длины sqrt(n). А как это сделать, непонятно. Может быть, как-то по индукции тут надо сообразить, не знаю пока что.

Реализовал класс для комплексных чисел, начал делать класс для полиномов.

Порисовал немного: завтра еще порисую по заданиям со второго урока, и можно будет, наверное, переходить к третьему.

Матанализ не успел, завтра порешаю.

Опять поздно ложусь спать. Даже слишком поздно, если учесть, что я проснулся в 7 утра по мск
uYNb8DPUoHM.jpg139 Кб, 1024x954
PoppyFanboy !VTLpv6lgGw 89 224486
>>224485

> Допустим, что существует антицепь размерности >= sqrt(n), иначе говоря, существует число а из последовательности такое, что оно больше или равно как минимум {sqrt(n)} последующих чисел из последовательности



вот тут ошибка. Сформулирую по-другому: пусть A - антиценпь такая, что |A| ≥ √n. Внутри нее для любых двух элементов (т.ч. а левее b) выполняется a > b (так как все различные, то можно не писать ≥), иначе бы были два сравнимых элемента и А не было бы антицепью. Но тогда получается, что элементы из А образуют последовательность a1 < ... am, где m = √n, то есть это убывающая последовательность длины √n (ну тут корень берется с округлением вниз).

Если же предположение

>Допустим, что существует антицепь размерности >= sqrt(n)


не выполняется, то по лемме существует цепь a1 < ... < am, где m > √n

таким образом, в любой последовательности из n различных чисел у нас есть строго монотонная подпоследовательность длины √n

а теперь спать
sage PoppyFanboy !VTLpv6lgGw 90 224592
В голове какая-то каша. Жаль, что нельзя просто нажать на кнопку и перезагрузиться.

So far за день ничего полезного не сделал
PoppyFanboy !VTLpv6lgGw 91 224881
Вчера в основном разбирал лекции по матанализу, немного порешал диффуры, немного поразбирал перемножение полиномов (вроде как сделал FFT для общего случая, но еще не тестил на предмет ошибок).

Сегодня весь день был на парах, только вот сейчас немного порисовал: все еще так себе выходят всякие около-объемные штуки.

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

...

Уже столько времени прошло, а меня до сих пор прет с треков gorillaz
https://www.youtube.com/watch?v=0nOGy52xygY
New Canvas.png64 Кб, 1337x777
Рируру !!gYmpHned/k 92 224896
>>224881
FFT(n=8) использует 8 значений (8√1)1~8 и FFT(n=4)
FFT(n=4) использует 4 значения (4√1)1~4 и FFT(n=2)
FFT(n=2) использует 2 значения (2√1)1~2 и FFT(n=1).
Дочерние FFT переиспользуют ранее вычисленные корни (см. рис.).
Можно сразу посчитать Ndepth=0 корней и идти по ним с удваивающимся шагом.

По аналогии с минусом для второй половины, такой предрасчёт корней можно ещё ускорить, честно считая только первый квадрант (во втором будет (x, y) ⇒ (-y, x)), или вообще только первые 45° (от 45° до 90° будет root(i, x, y) ⇒ root(n/4-i, y, x)).
.jpg295 Кб, 1349x1800
PoppyFanboy !VTLpv6lgGw 93 224971
Ну такое, можно было и лучше гораздо

Разобрался с несколькими задачками по матану, которые не понял на практических занятиях (там в основном были про частные производные и дифференциалы функций от нескольких переменных): они оказались довольно простыми, просто на практиках мы решали их с использованием какой-то сложной теоремы, хоть там и есть намного более простые решения.

Немного переделал FFT: сделал предварительное вычисление корней из единицы, в классе для комплексных чисел оставил только тригонометрическое представление. В итоге, в ходе обсуждения возможных вариантов реализации FFT с Рируру, пришел к тому, что последнее изменение придется либо откатывать обратно, либо вообще делать два разных класса для двух представлений комплексного числа: все портит сложение комплексных чисел в одном месте в FFT, которое не позволяет использовать исключительно тригонометрическое представление числа.

Сделал уродливое (как внешне, так и в плане реализации) меню с настройками для змейки. Надо будет потом переделать, а то вышло какое-то лютое месиво в .fxml файле

Не очень много, и не все, что я хотел. Завтра весь день хочу уделить всяким университетским предметам (я немного сильно отстаю от лекций, так что мне побыстрее нужно нагнать упущенный материал): продолжить делать задачки по матанализу, поразбирать лекции по геометрии и лекции по алгебре (вот тут будет сложно: вспоминая, как долго я разбирался с универсальным свойством для свободных групп, мне даже приступать не хочется). В оставшееся время надо хотя бы немного порисовать и повторить какую-то долю пройденного материала по околопрограммированию (то, что я планировал сделать еще сегодня). А, и еще домашнее задание по английскому: там вроде несложно, но надо хотя бы посмотреть.
anon-4572901.jpeg1,5 Мб, 4096x3012
PoppyFanboy !VTLpv6lgGw 94 225071
Да как это работает? Почему? Я же недавно проснулся, вот только зубы почистил. Я вообще не ощущаю времени. Весь день угробил только на одну алгебру, и не заметил.

И я не то чтобы много прошел, просто в какой-то момент на чем-то подзавис, и так прошло несколько часов. В итоге, все что я сделал - повторил и свободные группы (как оказалось, это все гораздо глубже, чем я думал: там по теореме о гомоморфизмах получается, что вообще любая группа изоморфна факторгруппе некоторой свободной группы F по ее некоторой нормальной подгруппе; таким образом, мы нашли новое представление для групп; вот, например, симметрическую группу S3 можно записать как <S, T | S3, T2, TSTS>; только хрен поймешь, как нормально выводить это представление, и зачем оно надо), начал разбираться с конечно порожденными абелевыми группами, и тут внезапно выясняется, что лектор не дал доказательства для двух супер-важных теорем (обосновав это нехваткой времени): первая про то, что если G - конечно порожденная, то любая подгруппа G тоже конечно порожденная, а вторая - что если G - конечно порожденная группа без кручения (кто вообще эти термины придумывает, на английском тоже будет torsion-free; короче, это группа, в которой все элементы имеют конечный порядок), то она изоморфна Z^n. И я такой уверенный сразу полез искать доказательства, ввел запрос на английском, чтобы мне гугол сразу в лицо выдал идеально оформленное доказательство на ProofWiki, иии... из относительно адекватного я нашел только странные доказательства с math.stackexchange. Они все используют понятие базиса для групп, но, блин, там чтобы его использовать, нужно доказать ряд теорем (хотя бы про то, что у всех базисов одна размерность, про типа линейную независимость и прочее). В общем, нашел только это более-менее такое:

https://math.stackexchange.com/questions/1002490/subgroup-of-finitely-generated-abelian-group-is-finitely-generated?rq=1

По второй теореме вообще ничего не вышло найти адекватного, только это:

http://sch57.ru/files/mathcamp/2016//seniors/3.GroupTheoryII/s2.pdf
http://sch57.ru/files/mathcamp/2016//seniors/3.GroupTheoryII/s3.pdf

И тут тоже используется понятие базиса для группы. Я попробовал разобраться, но в самом конце s2.pdf скипается шаг доказательства, который я не понимаю. Короче, не знаю, я не хочу на этом особо останавливаться. Я не могу, это уже просто смешно.

Плюсом ко всему, тут еще выяснилось, что в этом семестре, собственно, как и в двух предыдущих, состоится занимательная рубрика "Коллоквиум по Алгебре", в который как правило выносится максимально конченая тема. В прошлый раз это были билинейные квадратичные формы, которые я забыл почти моментально после сдачи, сейчас же это будет теория полей: шестнадцать с половиной страниц формата а4 плейн текста, прямо как я люблю.

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

Как жить-то вообще?

А вот так: завтра у меня будет 7 часов чисто свободного времени (до полуночи) + 1 ч. 40 мин. в автобусе. Вычту 1 час, чтобы была подушка и время на поесть, и распределю время так: 50 минут на рисование, 1 час на полиномы из CLRS + 30 минут повторение материалов, оставшееся время пополам: алгебра (лекции) и матанализ (задачи). В задачах и лекциях не висеть больше 15 минут на одной задаче или теореме, время делить на 25-минутки. Думаю, буду делать в таком порядке: алгебра, матан, рисование, CLRS. Ну а в автобусе попробую почитать Core Java.

Ну еще раз, ну с понедельника, ну может получится, ну хотя бы один день по плану, ну пожалуйста, почему я такая амеба. По вечерам строю такие планы, а с утра просыпаюсь с хреновым настроением по дефолту
anon-4572901.jpeg1,5 Мб, 4096x3012
PoppyFanboy !VTLpv6lgGw 94 225071
Да как это работает? Почему? Я же недавно проснулся, вот только зубы почистил. Я вообще не ощущаю времени. Весь день угробил только на одну алгебру, и не заметил.

И я не то чтобы много прошел, просто в какой-то момент на чем-то подзавис, и так прошло несколько часов. В итоге, все что я сделал - повторил и свободные группы (как оказалось, это все гораздо глубже, чем я думал: там по теореме о гомоморфизмах получается, что вообще любая группа изоморфна факторгруппе некоторой свободной группы F по ее некоторой нормальной подгруппе; таким образом, мы нашли новое представление для групп; вот, например, симметрическую группу S3 можно записать как <S, T | S3, T2, TSTS>; только хрен поймешь, как нормально выводить это представление, и зачем оно надо), начал разбираться с конечно порожденными абелевыми группами, и тут внезапно выясняется, что лектор не дал доказательства для двух супер-важных теорем (обосновав это нехваткой времени): первая про то, что если G - конечно порожденная, то любая подгруппа G тоже конечно порожденная, а вторая - что если G - конечно порожденная группа без кручения (кто вообще эти термины придумывает, на английском тоже будет torsion-free; короче, это группа, в которой все элементы имеют конечный порядок), то она изоморфна Z^n. И я такой уверенный сразу полез искать доказательства, ввел запрос на английском, чтобы мне гугол сразу в лицо выдал идеально оформленное доказательство на ProofWiki, иии... из относительно адекватного я нашел только странные доказательства с math.stackexchange. Они все используют понятие базиса для групп, но, блин, там чтобы его использовать, нужно доказать ряд теорем (хотя бы про то, что у всех базисов одна размерность, про типа линейную независимость и прочее). В общем, нашел только это более-менее такое:

https://math.stackexchange.com/questions/1002490/subgroup-of-finitely-generated-abelian-group-is-finitely-generated?rq=1

По второй теореме вообще ничего не вышло найти адекватного, только это:

http://sch57.ru/files/mathcamp/2016//seniors/3.GroupTheoryII/s2.pdf
http://sch57.ru/files/mathcamp/2016//seniors/3.GroupTheoryII/s3.pdf

И тут тоже используется понятие базиса для группы. Я попробовал разобраться, но в самом конце s2.pdf скипается шаг доказательства, который я не понимаю. Короче, не знаю, я не хочу на этом особо останавливаться. Я не могу, это уже просто смешно.

Плюсом ко всему, тут еще выяснилось, что в этом семестре, собственно, как и в двух предыдущих, состоится занимательная рубрика "Коллоквиум по Алгебре", в который как правило выносится максимально конченая тема. В прошлый раз это были билинейные квадратичные формы, которые я забыл почти моментально после сдачи, сейчас же это будет теория полей: шестнадцать с половиной страниц формата а4 плейн текста, прямо как я люблю.

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

Как жить-то вообще?

А вот так: завтра у меня будет 7 часов чисто свободного времени (до полуночи) + 1 ч. 40 мин. в автобусе. Вычту 1 час, чтобы была подушка и время на поесть, и распределю время так: 50 минут на рисование, 1 час на полиномы из CLRS + 30 минут повторение материалов, оставшееся время пополам: алгебра (лекции) и матанализ (задачи). В задачах и лекциях не висеть больше 15 минут на одной задаче или теореме, время делить на 25-минутки. Думаю, буду делать в таком порядке: алгебра, матан, рисование, CLRS. Ну а в автобусе попробую почитать Core Java.

Ну еще раз, ну с понедельника, ну может получится, ну хотя бы один день по плану, ну пожалуйста, почему я такая амеба. По вечерам строю такие планы, а с утра просыпаюсь с хреновым настроением по дефолту
cmWS1CQbxNA.jpg376 Кб, 2048x2048
PoppyFanboy !VTLpv6lgGw 95 225214
Я все перепутал: сегодня было в теории только 5 часов свободного времени (от семи до полуночи), поделал почти все, что планировал, но в очень небольших масштабах, и не уложился до полуночи. По алгебре разобрался с доказательством теоремы, которая следует из тех двух, о которых я упоминал в предыдущем посте (о том, что конечная абелева раскладывается в прямую сумму какой-то подгруппы H и G/Gtors; бтв, скорее всего, H - группа, образованная элементами базиса G, но это напрямую не доказывается), по матану решил одну задачу (хах), порисовал (тоже совсем немного, начал третий урок с листочками на дравабох, но пока что не очень получается), начал переделывать полиномы (разбиение класса комплексных на два), но там вообще мизерный прогресс. Повторить материалы не успел. В течение дня немного читал Core Java.

Очень много времени уходит на всякую бытовую ерунду, очень долго отхожу после сна, когда прихожу с пар, минимум минут 40 занимаюсь всякой ерундой. Отслеживать время слишком сложно: постоянно забываю переключить задачу в трекере.

Завтра точно будет 7 часов свободного времени. Из них: 1.5 - буфер, 50 мин. - рисование, 1.5 - полиномы, 1.5 - лекции по матанализу, 1 - повторение, 40 мин. - задачи по матану. В течение дня буду читать следующий Readings из 6.042J или смотреть следующую лекцию оттуда же

Пока что основной упор на всякие университетские штуки. У меня была мысль какое-то время тупо трайхардить лекции и задачки, чтобы побыстрее нагнать все предметы, а потом больше времени уделять другим вещам, но, как мне кажется, это хреновая затея: нужно хоть какое-то разнообразие, иначе я быстро выдохнусь.
sage PoppyFanboy !VTLpv6lgGw 96 225216
>>225214

> H - группа, образованная элементами базиса G


аа, блин, что за бред я несу, у G вообще может не быть базиса. Там H вроде как образовывается набором из n различных элементов из G, где n - размерность базиса G/Gtors (вот у этой группы уже точно есть базис, потому что она без кручения). n элементов можно выбрать произвольные, главное - чтобы различные.
.jpg114 Кб, 520x731
PoppyFanboy !VTLpv6lgGw 97 225375
Не выходит у меня с планированием времени. Сегодня немного читал 6.042J, немного поразбирал лекции по матанализу, почти полностью разобрался с полиномами (в последнем коммите я там много чего напутал, сейчас почти пофиксил: все еще не работает, но я хотя бы знаю, в чем у меня там ошибка).

Завтра выходной: надо будет закончить полиномы, сделать домашнее задание по программированию (для универа), порешать диффуры, порешать задачки по матану, порисовать, повторить что-нибудь из пройденного и начать компилировать конспекты в один нормальный файл (который день уже планирую, так и не начал). Если останется время, надо будет порешать проблем сеты к 6.042J (я там их почти не трогал, так что накопилось довольно много). А если останется еще времени, то буду дальше ковырять змейку или еще что-нибудь, не знаю пока что. Не буду ставить конкретные временные рамки, просто постараюсь ни на чем подолгу не зависать.

Все, что я делаю никак не систематизировано, не знаю, как это исправлять. Такое ощущение, что я топчусь на месте и занимаюсь какой-то ерундой.

Сегодня трекинг времени опять окончился неудачей: опять забыл переключить. Я даже не знаю, поможет ли мне это более четко осознавать течение времени, потому что еще ни разу, ни один день не удавалось нормально отследить.

Я сейчас сижу, смотрю на все это, и как-то особенно остро, именно в данный момент, осознаю свою никчемность. Я хочу работать в более быстром темпе, но понятия не имею, как. Перестать слушать музыку на фоне? Дропнуть вообще весь медиа контент? Нужно больше физической активности? Я не знаю. Каждый вечер мне хочется сделать следующий день максимально продуктивным, но всякий раз на утро следующего дня я просыпаюсь с хреновым настроением и без желания делать что-либо, только под конец дня немного разгоняюсь, но уже поздно, пора строить новые планы, большинство из которых, конечно же, останутся просто на бумаге. Эмм, ладно, наверное, завтра будет лучше. Обидно просто, что я вроде как и занимаюсь там чем-то, но прогресса - ноль.

https://www.youtube.com/watch?v=fyx_VkXOzzQ
.jpg114 Кб, 520x731
PoppyFanboy !VTLpv6lgGw 97 225375
Не выходит у меня с планированием времени. Сегодня немного читал 6.042J, немного поразбирал лекции по матанализу, почти полностью разобрался с полиномами (в последнем коммите я там много чего напутал, сейчас почти пофиксил: все еще не работает, но я хотя бы знаю, в чем у меня там ошибка).

Завтра выходной: надо будет закончить полиномы, сделать домашнее задание по программированию (для универа), порешать диффуры, порешать задачки по матану, порисовать, повторить что-нибудь из пройденного и начать компилировать конспекты в один нормальный файл (который день уже планирую, так и не начал). Если останется время, надо будет порешать проблем сеты к 6.042J (я там их почти не трогал, так что накопилось довольно много). А если останется еще времени, то буду дальше ковырять змейку или еще что-нибудь, не знаю пока что. Не буду ставить конкретные временные рамки, просто постараюсь ни на чем подолгу не зависать.

Все, что я делаю никак не систематизировано, не знаю, как это исправлять. Такое ощущение, что я топчусь на месте и занимаюсь какой-то ерундой.

Сегодня трекинг времени опять окончился неудачей: опять забыл переключить. Я даже не знаю, поможет ли мне это более четко осознавать течение времени, потому что еще ни разу, ни один день не удавалось нормально отследить.

Я сейчас сижу, смотрю на все это, и как-то особенно остро, именно в данный момент, осознаю свою никчемность. Я хочу работать в более быстром темпе, но понятия не имею, как. Перестать слушать музыку на фоне? Дропнуть вообще весь медиа контент? Нужно больше физической активности? Я не знаю. Каждый вечер мне хочется сделать следующий день максимально продуктивным, но всякий раз на утро следующего дня я просыпаюсь с хреновым настроением и без желания делать что-либо, только под конец дня немного разгоняюсь, но уже поздно, пора строить новые планы, большинство из которых, конечно же, останутся просто на бумаге. Эмм, ладно, наверное, завтра будет лучше. Обидно просто, что я вроде как и занимаюсь там чем-то, но прогресса - ноль.

https://www.youtube.com/watch?v=fyx_VkXOzzQ
1539217111761.jpeg166 Кб, 891x1200
PoppyFanboy !VTLpv6lgGw 98 225479
Еще один фейл в копилку: проспал девять часов, весь день болела голова, очень мало чего сделал.

Выскреб кучу мусора из стола и немного убрал комнату, сделал одну задачку по матанализу (ну блин, я не знаю, тупо висел над ней минут сорок, потом до меня в один момент дошло, и я решил ее за 5 минут), сделал домашнее задание по проге для универа

Доделал полиномы: вроде работает, вроде почти полностью понимаю, как оно работает (теперь надо подумать над отдельной реализацией перемножения полиномов для случая с целыми числами: чтобы не использовать флоаты; пока что не знаю, насколько там сильная появляется погрешность, он вроде и так неплохо справляется, правда я еще не тестил полиномы с большими степенями, может быть, там будет проявляться).

Порисовал немного листочки

Завтра надо бы сходить на две лекции по матанализу, который я целенаправленно последние несколько недель.

Все как-то печально

Завтра надо будет порешать диффуры и матан, начать, сука, повторять пройденное в рамках Core Java, CLRS и 6.042j и восполнять образовавшиеся пробелы, порисовать. В оставшееся время буду делать змейку: там надо немного переделать меню с опциями, переделать увеличение скорости игры, добавить лабиринты и еще довольно много всего.
В течение дня продолжу читать девятый Readings из 6.042j, чет у меня нет настроения смотреть лекции, или есть, не знаю.

Попробую завтра весь день провести без использования наушников
PoppyFanboy !VTLpv6lgGw 99 225582

>Попробую завтра весь день провести без использования наушников


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

Сегодня опять полдня болела голова, пока я все же не сдался: выпил таблетку и лег на полчаса подремать. Вышло довольно приятно: не только голова прошла, но и получше себя стал чувствовать в целом. Может быть стоит почаще так делать, только время правильно подбирать: чтобы не совсем поздно, а то ведь не усну потом вовремя (ха, когда я вообще последний раз ложился спать вовремя, о чем это я).

Порешал матанализ: в этот раз зашло полегче, но все равно вот наткнулся на второй-пикрилейтед задачу
Ну, типа окей, u = u(x, y) = u(x(r, phi), y(r, phi))
Теперь можно взять частные производные первого порядка по r и по phi
Так как там сложная функция, то раскладывается по правилу цепочки, или как оно там называется
Отсюда мы получаем систему из двух уравнений относительно неизвестных ∂u/∂x и ∂u/∂y. Решаем, находим неизвестные, но нам-то нужно найти ∂2u/∂x2 и ∂2u/∂y2. Для этого ищем частные производные уже второго порядка: ∂2u/∂r2, ∂2u/∂φ2, ∂2u/∂r∂φ, ∂2u/∂φ∂r. В выражениях для них встретятся уже найденные ∂u/∂x и ∂u/∂y, а также ∂2u/∂y2, ∂2u/∂y∂x, ∂2u/∂x∂y, ∂2u/∂x2. Опять система уравнений, только уже из четырех уравнений и с четырьмя неизвестными. Окей, это теоретически можно решить, но я вообще не вывожу столько вычислений, а более простого способа не вижу (ну разве что предположить, что u принадлежит классу C2, и сократить кол-во уравнений во второй системе на одну штуку за счет равенства ∂2u/∂y∂x = ∂2u/∂x∂y). Короче, забил на это, такие вещи должны считать компьютеры, а не люди.

Порешал диффуры: как оказалось, на практике все пока что не очень сложно, количество типов уравнений и, как следствие, количество методов их решения пока что сильно ограничено.

Порисовал немного, пока что так себе. Все еще листики и стебельки.

Таки начал что-то повторять и компилировать в один файл, но совсем немного успел.

В течение дня читал 6.042j: про нахождение closed forms различных сумм (ну вроде геометрической/арифметической прогрессий, суммы степеней и прочих) и неожиданно про задачу построения стабильной башни из n блоков такой, чтобы расстояние от центра тяжести башенки до наиболее сильно выступающей фигуры было наибольшим. Пока что не дочитал. Интересно, как решение этой задачи потом свяжется с вычислением сумм.

Завтра весь день в univere, а послезавтра внезапный невыходной: когда-то давно у нас пропали две практики по матанализу, и вот их перенесли на эту субботу. Meh, не очень хочется ехать, и в основном потому, что придется переться в непривычное место, искать там нужную аудиторию и прочее, а в силу своего топологического кретинизма я вообще не уверен, что найду даже нужное здание.

Сегодня было лучше, чем вчера, но все равно плохо. На завтрашний день я никаких надежд не возлагаю, думаю, только поделаю змейку.
PoppyFanboy !VTLpv6lgGw 99 225582

>Попробую завтра весь день провести без использования наушников


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

Сегодня опять полдня болела голова, пока я все же не сдался: выпил таблетку и лег на полчаса подремать. Вышло довольно приятно: не только голова прошла, но и получше себя стал чувствовать в целом. Может быть стоит почаще так делать, только время правильно подбирать: чтобы не совсем поздно, а то ведь не усну потом вовремя (ха, когда я вообще последний раз ложился спать вовремя, о чем это я).

Порешал матанализ: в этот раз зашло полегче, но все равно вот наткнулся на второй-пикрилейтед задачу
Ну, типа окей, u = u(x, y) = u(x(r, phi), y(r, phi))
Теперь можно взять частные производные первого порядка по r и по phi
Так как там сложная функция, то раскладывается по правилу цепочки, или как оно там называется
Отсюда мы получаем систему из двух уравнений относительно неизвестных ∂u/∂x и ∂u/∂y. Решаем, находим неизвестные, но нам-то нужно найти ∂2u/∂x2 и ∂2u/∂y2. Для этого ищем частные производные уже второго порядка: ∂2u/∂r2, ∂2u/∂φ2, ∂2u/∂r∂φ, ∂2u/∂φ∂r. В выражениях для них встретятся уже найденные ∂u/∂x и ∂u/∂y, а также ∂2u/∂y2, ∂2u/∂y∂x, ∂2u/∂x∂y, ∂2u/∂x2. Опять система уравнений, только уже из четырех уравнений и с четырьмя неизвестными. Окей, это теоретически можно решить, но я вообще не вывожу столько вычислений, а более простого способа не вижу (ну разве что предположить, что u принадлежит классу C2, и сократить кол-во уравнений во второй системе на одну штуку за счет равенства ∂2u/∂y∂x = ∂2u/∂x∂y). Короче, забил на это, такие вещи должны считать компьютеры, а не люди.

Порешал диффуры: как оказалось, на практике все пока что не очень сложно, количество типов уравнений и, как следствие, количество методов их решения пока что сильно ограничено.

Порисовал немного, пока что так себе. Все еще листики и стебельки.

Таки начал что-то повторять и компилировать в один файл, но совсем немного успел.

В течение дня читал 6.042j: про нахождение closed forms различных сумм (ну вроде геометрической/арифметической прогрессий, суммы степеней и прочих) и неожиданно про задачу построения стабильной башни из n блоков такой, чтобы расстояние от центра тяжести башенки до наиболее сильно выступающей фигуры было наибольшим. Пока что не дочитал. Интересно, как решение этой задачи потом свяжется с вычислением сумм.

Завтра весь день в univere, а послезавтра внезапный невыходной: когда-то давно у нас пропали две практики по матанализу, и вот их перенесли на эту субботу. Meh, не очень хочется ехать, и в основном потому, что придется переться в непривычное место, искать там нужную аудиторию и прочее, а в силу своего топологического кретинизма я вообще не уверен, что найду даже нужное здание.

Сегодня было лучше, чем вчера, но все равно плохо. На завтрашний день я никаких надежд не возлагаю, думаю, только поделаю змейку.
sage PoppyFanboy !VTLpv6lgGw 100 225827
Последние два дня ничего не делал, только ходил на пары (было довольно уныло: по матану задачки с какими-то долгими вычислениями, по диффурам тоже ничего интересного). В последнее время довольно часто болит голова, никогда не было такого.

За сегодня как-то сильно вымотался, хоть и был всего лишь на двух внеплановых парах матанализа, и больше вообще ничего не делал. Наверное, стоило подремать немного сразу после того, как пришел с пар. Очень хочется спать сейчас.

>>225582

>но нам-то нужно найти ∂2u/∂x2 и ∂2u/∂y2. Для этого ищем частные производные уже второго порядка: ∂2u/∂r2, ∂2u/∂φ2, ∂2u/∂r∂φ, ∂2u/∂φ∂r



тупой, тупой, глупый я. Мы же уже получили выражение для первых частных производных u. Чтобы найти вторые, нужно, внезапно, продифференцировать первые. Вау, вот ето да

Завтра надо будет сделать домашку по англицкому (там какой-то перевод вроде, еще не смотрел), поразбирать лекции по геометрии, поделать проблем сеты из 6.042j, почитать CLRS, порисовать, повторить пройденное. Если останется время, буду дальше мучить змейку.

Постараюсь поменьше юзать наушники.

Охх, если сейчас засну, то, может быть, завтра встану пораньше

завтра завтра завтра завтра завтра завтразавтра завтра завтра
PoppyFanboy !VTLpv6lgGw 101 226148
блин, потерял пост: забылся и закрыл браузер, вроде даже дважды, в кэше пусто. НУ ладно, тогда вкратце (но картиночек побольше).

Проснулся где-то только в восемь и то очень хотелось спать. Сделал англицкий, поразбирал геометрию, повторил CLRS и прочитал оттуда новую третью главу (упражнения в конце еще не делал), посрисовывал цветочки с фоток, совсем немного порешал третий проблем сет из 6.042J.

Первую половину дня не использовал наушники, потом все же воткнул, чем немного снизил продуктивность. Почти отследил весь день, результат заметно лучше, чем в предыдущие разы.

В целом, неплохо, но могло быть намного лучше.

Не знаю, что завтра, не хочу никуда идти, хочу сидеть дома и заниматься всякой ерундой.

Сегодня приснилось, что я мог телепортироваться, но конкретное место задать было нельзя. В итоге меня занесло в какое-то болото, из которого мне пришлось добираться до ближайшего вокзала, чтобы обратно доехать. Хотел даже запостить сюда (во сне) сигну на руке, что мол вот, какой я крутой, за считанные секунды выбрался в какие-то ебеня, но не мог нормально подобрать ракурс. А затем вокзал превратился в нечто похожее на кинотеатр, затем в аптеку, и уже дальше пошла какая-то бессвязная ерунда.

https://www.youtube.com/watch?v=4Yybgr3cSAU
15 октября 2018 PoppyFanboy !VTLpv6lgGw 102 226281
супер-сухой день, ничего интересного
ненавижу приходить домой затемно
тупая осень, но хоть погода нормальная
не знаю, что зимой буду делать: темно, снег и холодно, брр

большую часть дня провел без затычек в ушах (воткнул только когда сел рисовать)

таки впервые полностью отследил день от начала и до конца. Единственная проблема - приложение (aTimeLogger) составляет диаграммы только по дням, а не для произвольного промежутка времени. Это просто супер-тупо

пытался делить время, пришел к тому, что 50 на 10, наверное, более предпочтительный вариант, чем более мелкое деление

в течение дня урывками продолжал читать 6.042j, пока что интересно. Та задача про построение башни из n блоков с максимальным overhang оказалась подводкой к гармоническим числам (максимально возможный "перевес" для башни из n блоков Sn = Hn/2). И там же по совпадению встретилась формула Стирлинга, которую я только вчера видел в CLRS

сарафанное радио передает, что по маршруту, по которому я езжу из универа, в течение некоторого времени (ну, услышанная цифра в три года явно преувеличена, но кто знает) будут постоянные пробки. Хорошо, что там рядом трамвай ходит, можно объехать (там от этого выходят только одни профиты: мало того, что пробку можно быстро объехать, так еще и скипается ebuchii П-образный переход, на который уходит как минимум минут семь времени)

когда пришел домой, сразу же лег подремать, но никакого буста это не дало

Дома решал задачки по матанализу: конкретно считал пределы функций от нескольких переменных (в задачнике все довольно простые: либо на что-то сократить, чтобы избавиться от неопределенности, либо перейти к полярным координатам, и там тоже все сокращается) и делал задачки на равномерную непрерывность (там основная сложность в подборе контрпримера, когда доказываешь отсутствие равномерной непрерывности)

Срисовал цветочек. Очень долго с ним мучился, получилось такое, мда. Но было забавно наслаивать друг на друга лепестки

Совсем-совсем немного поковырял змейку, не коммитил, только очертил для себя, что дальше делать

---

завтра опять матанализ, змейка, рисование, повторение (которое сегодня не успел)
в течение дня Core Java
если останется время, порешаю задачки по программированию (там у меня висит недоделанная по крайней мере одна)
а если еще останется время (это вряд ли), то начну читать, что там по теории полей

https://www.youtube.com/watch?v=p99R2G2QowA
15 октября 2018 PoppyFanboy !VTLpv6lgGw 102 226281
супер-сухой день, ничего интересного
ненавижу приходить домой затемно
тупая осень, но хоть погода нормальная
не знаю, что зимой буду делать: темно, снег и холодно, брр

большую часть дня провел без затычек в ушах (воткнул только когда сел рисовать)

таки впервые полностью отследил день от начала и до конца. Единственная проблема - приложение (aTimeLogger) составляет диаграммы только по дням, а не для произвольного промежутка времени. Это просто супер-тупо

пытался делить время, пришел к тому, что 50 на 10, наверное, более предпочтительный вариант, чем более мелкое деление

в течение дня урывками продолжал читать 6.042j, пока что интересно. Та задача про построение башни из n блоков с максимальным overhang оказалась подводкой к гармоническим числам (максимально возможный "перевес" для башни из n блоков Sn = Hn/2). И там же по совпадению встретилась формула Стирлинга, которую я только вчера видел в CLRS

сарафанное радио передает, что по маршруту, по которому я езжу из универа, в течение некоторого времени (ну, услышанная цифра в три года явно преувеличена, но кто знает) будут постоянные пробки. Хорошо, что там рядом трамвай ходит, можно объехать (там от этого выходят только одни профиты: мало того, что пробку можно быстро объехать, так еще и скипается ebuchii П-образный переход, на который уходит как минимум минут семь времени)

когда пришел домой, сразу же лег подремать, но никакого буста это не дало

Дома решал задачки по матанализу: конкретно считал пределы функций от нескольких переменных (в задачнике все довольно простые: либо на что-то сократить, чтобы избавиться от неопределенности, либо перейти к полярным координатам, и там тоже все сокращается) и делал задачки на равномерную непрерывность (там основная сложность в подборе контрпримера, когда доказываешь отсутствие равномерной непрерывности)

Срисовал цветочек. Очень долго с ним мучился, получилось такое, мда. Но было забавно наслаивать друг на друга лепестки

Совсем-совсем немного поковырял змейку, не коммитил, только очертил для себя, что дальше делать

---

завтра опять матанализ, змейка, рисование, повторение (которое сегодня не успел)
в течение дня Core Java
если останется время, порешаю задачки по программированию (там у меня висит недоделанная по крайней мере одна)
а если еще останется время (это вряд ли), то начну читать, что там по теории полей

https://www.youtube.com/watch?v=p99R2G2QowA
sage PoppyFanboy !VTLpv6lgGw 103 226453
В последнее время как-то нечего писать сюда: ничего не происходит, я все так же стагнирую, время уходит в никуда. Сегодня был на парах, на которых ничего не понял, что-то делал дома. В голову лезет слишком много негативных мыслей

Оказалось, что для физкультуры в этом году нужно опять собирать анализы, так не хочется этим заниматься. Балльная система в прошлом году была довольно лояльной (набрал 345 из 400 необходимых к концу этого учебного года баллов, сходив туда от силы пару раз): за вечер накликал онлайн тестов на 200, остальное получил ни за что: просто отмечался в листочке почти перед каждым занятием и уходил. Наверное, стоило абьюзить эту схему сильнее, потому что сейчас такое уже, вероятнее всего, не прокатит.

На втором курсе посещение физкультуры свободное, но только после половины седьмого вечера. То есть будет три с половиной человека, и тут уже вряд ли можно будет по-быстрому отметиться и свалить, скрывшись за спинами более добросовестных студентов

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

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

Осень пока что радует относительно неплохой погодой, позволяя не надевать теплые вещи и ходить удобной легкой куртке

>отслеживание времени


Фейл. Тут даже не столько важен результат, сколько сам процесс: всегда можно посмотреть, чем занимался последние n часов

>меньше использовать наушники


Фейл

>подремать в середине дня


Чек. Даже вроде заснул ненадолго, но никакого буста опять не дало

>повторение пройденного


Фейл

>Core Java в течение дня


Фейл, только чуть-чуть почитал

>матанализ


Что-то поделал, но мало (но времени на это ушло много)

>рисование


Срисовал еще один цветок и какое-то плотоядное растение

>змейка


Почти сделал лабиринты

Потратил суммарно где-то часа три в никуда

Субъективная оценка: 3/10

---

завтра выходной:
- матанализ задачи (в пятницу контрольная)
- разбор лекций по матанализу
- теория полей
- повторение (приоритет)
- рисование
- решение задачек по программированию

если останется время: CLRS

дополнительно:
- использовать наушники исключительно для изоляции от мешающих шумов
- если в чем-либо нет прогресса на протяжении 25 минут, дропать это и переходить к чему-то другому

вот я и скатился в формат итоги дня - планы на следующий день
sage PoppyFanboy !VTLpv6lgGw 103 226453
В последнее время как-то нечего писать сюда: ничего не происходит, я все так же стагнирую, время уходит в никуда. Сегодня был на парах, на которых ничего не понял, что-то делал дома. В голову лезет слишком много негативных мыслей

Оказалось, что для физкультуры в этом году нужно опять собирать анализы, так не хочется этим заниматься. Балльная система в прошлом году была довольно лояльной (набрал 345 из 400 необходимых к концу этого учебного года баллов, сходив туда от силы пару раз): за вечер накликал онлайн тестов на 200, остальное получил ни за что: просто отмечался в листочке почти перед каждым занятием и уходил. Наверное, стоило абьюзить эту схему сильнее, потому что сейчас такое уже, вероятнее всего, не прокатит.

На втором курсе посещение физкультуры свободное, но только после половины седьмого вечера. То есть будет три с половиной человека, и тут уже вряд ли можно будет по-быстрому отметиться и свалить, скрывшись за спинами более добросовестных студентов

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

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

Осень пока что радует относительно неплохой погодой, позволяя не надевать теплые вещи и ходить удобной легкой куртке

>отслеживание времени


Фейл. Тут даже не столько важен результат, сколько сам процесс: всегда можно посмотреть, чем занимался последние n часов

>меньше использовать наушники


Фейл

>подремать в середине дня


Чек. Даже вроде заснул ненадолго, но никакого буста опять не дало

>повторение пройденного


Фейл

>Core Java в течение дня


Фейл, только чуть-чуть почитал

>матанализ


Что-то поделал, но мало (но времени на это ушло много)

>рисование


Срисовал еще один цветок и какое-то плотоядное растение

>змейка


Почти сделал лабиринты

Потратил суммарно где-то часа три в никуда

Субъективная оценка: 3/10

---

завтра выходной:
- матанализ задачи (в пятницу контрольная)
- разбор лекций по матанализу
- теория полей
- повторение (приоритет)
- рисование
- решение задачек по программированию

если останется время: CLRS

дополнительно:
- использовать наушники исключительно для изоляции от мешающих шумов
- если в чем-либо нет прогресса на протяжении 25 минут, дропать это и переходить к чему-то другому

вот я и скатился в формат итоги дня - планы на следующий день
sage PoppyFanboy !VTLpv6lgGw 104 226560
2/10
sage PoppyFanboy !VTLpv6lgGw 105 226613
проспал пару
приперся ко второй
вторую пару отменили
окей
sage PoppyFanboy !VTLpv6lgGw 106 226691
Последние два дня пролетели как-то слишком уж быстро.

Вчера

разбирался с лекциями по матанализу (там пошла какая-то муть про достаточные условия обратимости линейных оператоов, которые я в интернете толком найти не смог, но вроде разобрался по конспектам, и неравенства Лагранжа для R->Rn и Rm->Rn по аналогии с теоремой лагранжа для вещественных функций),

порешал задачек к контрольной, начал смотреть теорию полей (текст вполне ожидаемо пестрит фразами вроде "нетрудно проверить (проверьте!)" или "тогда, как показывает нетрудная выкладка (проведите ее!)", авторка за каким-то хреном использует термины из теории категорий вместо более привычных понятий, в общем весело),

срисовал какой-то маленький цветущий кактус: получилась чего-то какая-то мазня

и помучил змейку, все.

Не повторял ничего, время не отслеживал.

Сегодня большую часть времени мучил змейку:
- внезапно пришла здравая идея переместить все методы, создающие различные окна (скорборды, настройки, окно с вводом никнейма) в их классы-контроллеры и сделать их статическими. То есть получается что-то вроде фабричного метода с побочным эффектом создания окна. Плюс в том, что можно избавиться от сеттеров, передающих какие-то данные в новые окна: фабричный метод имеет доступ к приватным полям класса-контроллера по ссылке.

- еще что-то там по мелочи переделал

- вроде долелал меню с настройками: можно выбрать режим игры (три классических опции сложности, отличающихся интервалом прироста скорости змейки, и режим Дзен, в котором просто выбираешь скорость и она не изменяется до конца игры) и лабиринт

- хотел сделать так, чтобы перед началом игры высвечивалось "Ready Set Go" (в одном из лабиринтов слишком мало свободного пространства, из-за чего легко врезаться в стенку на самом старте), но чет не задалось: не получилось выровнять надписи по центру, не знаю почему, да и пришлось бы еще продумывать, как игра должна вести себя при нажатии на паузу во время отсчета,

- поэтому сделал по-другому: в самом начале игры просто добавил небольшое замедление

- не знаю, имеет ли смысл оставлять для каждого лабиринта по таблице рекордов: у меня ведь количество очков вычисляется с учетом множителя, зависящего от выбранного режима игры и лабиринта, все можно засунуть в одну таблицу

Еще сегодня порешал матанализ: локальные экстремумы и условные локальные экстремумы. Метод Лагранжа выглядит как какой-то странный ритуал.

В транчпорте почти дочитал девятый Readings из 6.042j

Завтра контрольная по матану, надеюсь, не придется потом переписывать (просто лень).

Наверное, все же нет смысла полностью отказываться от музыки во время занятий: если без слов, то вполне неплохо заходит. Недавно наткнулся вот на это:
https://youtu.be/gqxiQsWB7OY
https://youtu.be/7NfB5rnmsr8
не знаю, что меня тут зацепило, просто приятно слушать. Ну и вот это тоже неплохо:
https://youtu.be/kcRuVwgOXI4
https://youtu.be/i_uDYCdC-5E

Ммда, сегодня опять 2/10: не делал нормальных перерывов, много отвлекался, мало сделал

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

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

завтра завтра завтра завтра
sage PoppyFanboy !VTLpv6lgGw 106 226691
Последние два дня пролетели как-то слишком уж быстро.

Вчера

разбирался с лекциями по матанализу (там пошла какая-то муть про достаточные условия обратимости линейных оператоов, которые я в интернете толком найти не смог, но вроде разобрался по конспектам, и неравенства Лагранжа для R->Rn и Rm->Rn по аналогии с теоремой лагранжа для вещественных функций),

порешал задачек к контрольной, начал смотреть теорию полей (текст вполне ожидаемо пестрит фразами вроде "нетрудно проверить (проверьте!)" или "тогда, как показывает нетрудная выкладка (проведите ее!)", авторка за каким-то хреном использует термины из теории категорий вместо более привычных понятий, в общем весело),

срисовал какой-то маленький цветущий кактус: получилась чего-то какая-то мазня

и помучил змейку, все.

Не повторял ничего, время не отслеживал.

Сегодня большую часть времени мучил змейку:
- внезапно пришла здравая идея переместить все методы, создающие различные окна (скорборды, настройки, окно с вводом никнейма) в их классы-контроллеры и сделать их статическими. То есть получается что-то вроде фабричного метода с побочным эффектом создания окна. Плюс в том, что можно избавиться от сеттеров, передающих какие-то данные в новые окна: фабричный метод имеет доступ к приватным полям класса-контроллера по ссылке.

- еще что-то там по мелочи переделал

- вроде долелал меню с настройками: можно выбрать режим игры (три классических опции сложности, отличающихся интервалом прироста скорости змейки, и режим Дзен, в котором просто выбираешь скорость и она не изменяется до конца игры) и лабиринт

- хотел сделать так, чтобы перед началом игры высвечивалось "Ready Set Go" (в одном из лабиринтов слишком мало свободного пространства, из-за чего легко врезаться в стенку на самом старте), но чет не задалось: не получилось выровнять надписи по центру, не знаю почему, да и пришлось бы еще продумывать, как игра должна вести себя при нажатии на паузу во время отсчета,

- поэтому сделал по-другому: в самом начале игры просто добавил небольшое замедление

- не знаю, имеет ли смысл оставлять для каждого лабиринта по таблице рекордов: у меня ведь количество очков вычисляется с учетом множителя, зависящего от выбранного режима игры и лабиринта, все можно засунуть в одну таблицу

Еще сегодня порешал матанализ: локальные экстремумы и условные локальные экстремумы. Метод Лагранжа выглядит как какой-то странный ритуал.

В транчпорте почти дочитал девятый Readings из 6.042j

Завтра контрольная по матану, надеюсь, не придется потом переписывать (просто лень).

Наверное, все же нет смысла полностью отказываться от музыки во время занятий: если без слов, то вполне неплохо заходит. Недавно наткнулся вот на это:
https://youtu.be/gqxiQsWB7OY
https://youtu.be/7NfB5rnmsr8
не знаю, что меня тут зацепило, просто приятно слушать. Ну и вот это тоже неплохо:
https://youtu.be/kcRuVwgOXI4
https://youtu.be/i_uDYCdC-5E

Ммда, сегодня опять 2/10: не делал нормальных перерывов, много отвлекался, мало сделал

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

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

завтра завтра завтра завтра
sage PoppyFanboy !VTLpv6lgGw 107 226790
В контрольной по матанализу сделал кучу арифметических ошибок, придется потом переписывать, ну и ладно.

Нет, все, бесполезно, четыре часа сна слишком сильно сказываются на мне, я не готов делать сейчас что-либо, лучше пойду спать. Какой же я придурок, надо было раньше ложиться, а я опять затянул, хоть и не делал ничего полезного (только немного поразбирал теорию полей). Если моя жизнь - это качели, то они, блядь, просто неподвижно висят. Я не хочу, чтобы так продолжалось и дальше, что же это такое. Сколько там уже месяцев прошло? Три? Да, верно, почти три. Здорово.

Эмм, окей, еще один план, что мне еще остается делать:
- домашнее задание по английскому
- повторить залпом вообще все и составить таблицу с уровнем знания всех тем
- порешать диффуры (через неделю контрольная) - 2 часа
- Core Java - 2 часа - хочу максимально продвинуться
- разбор лекций по алгебре - 1.5 часа - там просто пошло что-то странное, и я на лекциях слабо понимаю, что вообще происходит
- решение задачек по программированию
- рисование

Теперь этот дневник превратился в бесконечный поток нытья
sage PoppyFanboy !VTLpv6lgGw 108 226932

>домашнее задание по английскому


чек

>повторить залпом вообще все и составить таблицу с уровнем знания всех тем


не успел, но начал

>порешать диффуры


чек. Вырабатываю примерный алгоритм решения.

>Core Java


чек, но не особо много прошел. Оказывается, у enum тоже могут быть конструкторы, но только приватные: с их помощью можно задавать начальные значения для полей перечислений (прямо при объявлении ELEMENT(аргументы конструктора)). В связи с этим переделал класс GameMode в змейке в перечисление и заодно поправил немного класс Labyrinth.

>разбор лекций по алгебре


чек, но мало

>решение задачек по программированию


не успел

>рисование


срисовал крапиву, как-то так себе

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

Стараюсь меньше ставить что-то фоном, вроде помогает лучше концентрироваться.

С отслеживанием времени фейл, все время забываю переключать активности.

Завтра опять диффуры, теория полей, змейка, повторение, рисование. Если успею, то (в порядке убывания приоритета): Core Java, 6.042J, решение задачек в конце третьей главы CLRS.

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

Пора спать
1540166088974.jpg51 Кб, 712x533
PoppyFanboy !VTLpv6lgGw 109 227062
Змейка готова
Ну, вернее будет сказать, наконец-то, приняла более-менее завершенную форму. Я, наверное, доволен результатом: получилась какая- никакая структура из пакетов и классов, это была хорошая практика доведения проекта до конца и самое главное: оно живое. Завтра надо будет составить список вещей, которые я вынес из всего этого и что можно было бы сделать лучше.

Сегодня большую часть времени решал диффуры: вроде во всем, что мы проходили, разобрался. В некоторых примерах (в частности в Риккати и в уравнениях, которые можно привести к удобному виду с помощью "интегрирующего множителя") приходится проявлять математическую смекалочку, которой я беспощадно обделен: никогда не получалось подбирать какие-то хитрые замены переменных или как-то по-умному что-то группировать для упрощения решения.

Порисовал немного: срисовал какие-то мухоморы и ветку яблони. Пока что я стараюсь строить картинку, а не просто копировать линии. Немного забиваю на рисование рандомных вещей из головы, наверное, не стоит так делать

Все, больше ничего сегодня не делал. На самом деле, это было вполне ожидаемо: вчера переусердствовал - сегодня ничего не хочется делать. Нужен какой-то баланс.

Ттак, завтра будут пары и не очень много свободного времени. Думаю, в течение дня начну читать четвертую главу CLRS, а дома поразбираю алгебру, поповторяю пройденное (надо все упорядочить в голове, но я все никак не могу; какая же у меня плохая память), порисую, подведу итоги касательно змейки, если будет время, порешаю задачки по программированию.

Опять планирую слишком много.

Убил режим сна за одни выходные. Попробовать что ли теперь его так же рывком вернуть обратно? Скорее всего, ничего не получится: 6 часов сна для меня - минимум, если меньше, то становится совсем уж дурно.

Зарядку сегодня не делал, время не отслеживал, наушники почти не вытаскивал, в этом плане максимальный фейл.
saharu54.jpg261 Кб, 2048x1536
PoppyFanboy !VTLpv6lgGw 110 227193
Опять началось. Большую часть времени разбирал алгебру, но прошел ничтожно мало. Нашел довольно красивое (самое верхнее) доказательство одной теоремы:
https://math.stackexchange.com/questions/59903/finite-subgroups-of-the-multiplicative-group-of-a-field-are-cyclic

У нас лектор ее доказывал примерно так же, как это сделал пользователь @faith (по той же ссылке), но мне больше нравится решение с использованием функции Эйлера: все же за ним стоит гораздо меньше теории, чем за решением через разложение конечно-порожденной абелевой. Не столь, наверное, важна теорема, сколько частное следствие из нее: если рассмотреть поле F из m элементов, то F будет циклической группой из (m - 1) элемента.

Совсем немного поповторял теорию чисел, конкретно gcd и расширенный алгоритм Евклида.
Начал четвертую главу CLRS: там более подробно про divide and conquer, пока что интересно.

>список вещей, которые я вынес из всего этого и что можно было бы сделать лучше


Что нового:
- JavaFX (fxml, css, классы-контроллеры)
- StreamTokenizer
- update(double time) -> draw() нужное число раз
- Просто практика

Что можно было сделать лучше:
- Заранее продумывать структуру (можно неформальные схемы)
- Комментировать сразу, для более подробных комментариев использовать /
/
- В репозитории на гитхабе корневой делать папку, в которой содержатся src и out (для проектов, которые предполагают какой-то интерфейс взаимодействия с пользователем), чтобы можно было просто положить рядом .jar
- Писать более осмысленные коммит-месседжи и вообще получше разобраться с гитом

Все, остальное время просто тупил.
Не получается делать что-либо без какого-то фона:
- Надо начать делать taskName
- Не могу начать, хочется включить что-нибудь фоном
- Включаю
- Минус 60% работоспособности, много туплю и вообще бездарно трачу время (при этом даже не отдыхая физически)
- В какой-то момент отвлекаюсь на что-то и теряю концентрацию полностью
При этом если хотя бы полчаса заставлять себя что-то делать без фонового контента, вроде как втягиваюсь.
Надо что-то с этим делать (сказал я в двадцатый раз, и ничего серьезного не предпринял)

Не вышло проснуться пораньше, не вышло лечь пораньше но вот завтра, завтра все обязательно будет лучше, ведь так?
Завтра: повторение, решение задачек по программированию, теория полей, Core Java. В течение дня надо будет выбрать, какой проект делать следующим (вообще для личного использования хочется сделать утилиту для поиска постов, фильтра и сортировки тредов (по количеству постов и дате)).
Плюсом ко всему: уберсложный челлендж - день без наушников и вообще какого-либо фонового контента. Пока что на один день, а дальше посмотрим.

Вот бы стать тупо машиной, но нет, мне слишком далеко до этого. Я обещаю, завтра постараюсь особенно хорошо. Правда-правда!
Так, три часа ночи, кажется, это моя остановка

https://www.youtube.com/watch?v=qYUKWFt_K6Q
https://www.youtube.com/watch?v=oX_-5j71ib4
https://www.youtube.com/watch?v=WWtIOWPl_Sw
https://www.youtube.com/watch?v=K56FOm3nOMI

Раньше вообще не заходили его треки в рамках проекта Joji, но вот композиции из последних нескольких клипов прямо очень хороши
https://www.youtube.com/watch?v=PEBS2jbZce4
https://www.youtube.com/watch?v=zbxAB7rTpDc

В этой игре такой разнообразный и в какой-то мере самобытный саундтрек
https://www.youtube.com/watch?v=BcFIR6Bft9g
saharu54.jpg261 Кб, 2048x1536
PoppyFanboy !VTLpv6lgGw 110 227193
Опять началось. Большую часть времени разбирал алгебру, но прошел ничтожно мало. Нашел довольно красивое (самое верхнее) доказательство одной теоремы:
https://math.stackexchange.com/questions/59903/finite-subgroups-of-the-multiplicative-group-of-a-field-are-cyclic

У нас лектор ее доказывал примерно так же, как это сделал пользователь @faith (по той же ссылке), но мне больше нравится решение с использованием функции Эйлера: все же за ним стоит гораздо меньше теории, чем за решением через разложение конечно-порожденной абелевой. Не столь, наверное, важна теорема, сколько частное следствие из нее: если рассмотреть поле F из m элементов, то F будет циклической группой из (m - 1) элемента.

Совсем немного поповторял теорию чисел, конкретно gcd и расширенный алгоритм Евклида.
Начал четвертую главу CLRS: там более подробно про divide and conquer, пока что интересно.

>список вещей, которые я вынес из всего этого и что можно было бы сделать лучше


Что нового:
- JavaFX (fxml, css, классы-контроллеры)
- StreamTokenizer
- update(double time) -> draw() нужное число раз
- Просто практика

Что можно было сделать лучше:
- Заранее продумывать структуру (можно неформальные схемы)
- Комментировать сразу, для более подробных комментариев использовать /
/
- В репозитории на гитхабе корневой делать папку, в которой содержатся src и out (для проектов, которые предполагают какой-то интерфейс взаимодействия с пользователем), чтобы можно было просто положить рядом .jar
- Писать более осмысленные коммит-месседжи и вообще получше разобраться с гитом

Все, остальное время просто тупил.
Не получается делать что-либо без какого-то фона:
- Надо начать делать taskName
- Не могу начать, хочется включить что-нибудь фоном
- Включаю
- Минус 60% работоспособности, много туплю и вообще бездарно трачу время (при этом даже не отдыхая физически)
- В какой-то момент отвлекаюсь на что-то и теряю концентрацию полностью
При этом если хотя бы полчаса заставлять себя что-то делать без фонового контента, вроде как втягиваюсь.
Надо что-то с этим делать (сказал я в двадцатый раз, и ничего серьезного не предпринял)

Не вышло проснуться пораньше, не вышло лечь пораньше но вот завтра, завтра все обязательно будет лучше, ведь так?
Завтра: повторение, решение задачек по программированию, теория полей, Core Java. В течение дня надо будет выбрать, какой проект делать следующим (вообще для личного использования хочется сделать утилиту для поиска постов, фильтра и сортировки тредов (по количеству постов и дате)).
Плюсом ко всему: уберсложный челлендж - день без наушников и вообще какого-либо фонового контента. Пока что на один день, а дальше посмотрим.

Вот бы стать тупо машиной, но нет, мне слишком далеко до этого. Я обещаю, завтра постараюсь особенно хорошо. Правда-правда!
Так, три часа ночи, кажется, это моя остановка

https://www.youtube.com/watch?v=qYUKWFt_K6Q
https://www.youtube.com/watch?v=oX_-5j71ib4
https://www.youtube.com/watch?v=WWtIOWPl_Sw
https://www.youtube.com/watch?v=K56FOm3nOMI

Раньше вообще не заходили его треки в рамках проекта Joji, но вот композиции из последних нескольких клипов прямо очень хороши
https://www.youtube.com/watch?v=PEBS2jbZce4
https://www.youtube.com/watch?v=zbxAB7rTpDc

В этой игре такой разнообразный и в какой-то мере самобытный саундтрек
https://www.youtube.com/watch?v=BcFIR6Bft9g
PoppyFanboy !VTLpv6lgGw 111 227307
Охх, совсем позабыл, что звездочки ⃰ тут используются для форматирования текста
>>227193

> если рассмотреть поле F из m элементов, то F ⃰ будет циклической группой из (m - 1) элемента


> Комментировать сразу, для более подробных комментариев использовать / ⃰ ⃰ ⃰/



Уже непонятно какие сутки сплю не больше шести часов, а вчера вообще спал только четыре с половиной. Забавно, что сонливость сегодня проявилась только с утра, и больше меня в сон уже не клонило... Какой я придурок, так же нельзя делать. Плюсом ко всему в последнее время очень плохо ем: просто лень что-то готовить с собой в универ, а в самом универе лень стоять в очереди в столовой. Чувство голода в определенный момент напоминает о том, что пора бы уже протолкнуть в себя что-нибудь съедобное, но потом незаметно отступает, и мне все сходит с рук. Надо с этим что-то делать.

Хотел сегодня лечь спать пораньше, чтобы и выспаться, и встать пораньше, но что-то пошло не так. Не знаю, что делать, опять поспать мало и сделать еще одну попытку сдвинуть режим или забить на все и отдохнуть? Склоняюсь ко второму, да, наверное, так и сделаю.

В течение этого семестра по английскому мне надо пройти какой-нибудь курс (наверное, можно не полностью) на coursera или edx для получения зачета, а еще прочитать сколько-то там символов из любой книги "по специальности" (математика/информатика). Со вторым я, скорее всего, уже давно справился (CLRS и Core Java), а вот первое даже не начинал. Разрываюсь между тем, чтобы взять Edx версию 6.042J и по-быстрому с ним расправиться или же взять что-то вообще другое (но я же и без этого ничего не успеваю, так что буду халтурить; но, впрочем, я и не обещал никому, что буду добросовестно учиться).

> повторение


есть, перенес в вордовский файл почти все конспекты по теории чисел, составил для них табличку с уровнем знаний

> решение задачек по программированию


решил только одну, которая у меня висела уже давно и я уже знал, как ее решать

> теория полей


почитал. "(убедитесь в этом!)" и "как уже говорилось в главе IV" intensifies. Я все же правильно сделал, что начал читать это заранее: очень много доказательств скипается, и приходится искать или выводить их самому.

> Core Java


забыл

> Рисование


не успел

Почти ничего не слушал фоном: концентрация была лучше, это радует. Завтра тоже постараюсь без фонового сопровождения.
Время почти не отслеживал, но старался делать перерывы. Зарядку не делал.

Все еще не решил, какой проект буду лепить следующим, завтра определюсь.

Ну, окей, сегодня было 3/10 по условной шкале без четких критериев. Это лучше, чем вчера, но все равно не очень хорошо.

Завтра ура выходной: повторение, немного диффуров (в пятницу контрольная), Core Java, разбор лекций по матанализу, решение упражнений в конце третьей главы CLRS, рисование (вот этим займусь строго не позже семи вечера вне зависимости от обстоятельств).

...

Одна из моих самых любимых future funk компиляций
https://www.youtube.com/watch?v=Bi2lnYuberc
PoppyFanboy !VTLpv6lgGw 111 227307
Охх, совсем позабыл, что звездочки ⃰ тут используются для форматирования текста
>>227193

> если рассмотреть поле F из m элементов, то F ⃰ будет циклической группой из (m - 1) элемента


> Комментировать сразу, для более подробных комментариев использовать / ⃰ ⃰ ⃰/



Уже непонятно какие сутки сплю не больше шести часов, а вчера вообще спал только четыре с половиной. Забавно, что сонливость сегодня проявилась только с утра, и больше меня в сон уже не клонило... Какой я придурок, так же нельзя делать. Плюсом ко всему в последнее время очень плохо ем: просто лень что-то готовить с собой в универ, а в самом универе лень стоять в очереди в столовой. Чувство голода в определенный момент напоминает о том, что пора бы уже протолкнуть в себя что-нибудь съедобное, но потом незаметно отступает, и мне все сходит с рук. Надо с этим что-то делать.

Хотел сегодня лечь спать пораньше, чтобы и выспаться, и встать пораньше, но что-то пошло не так. Не знаю, что делать, опять поспать мало и сделать еще одну попытку сдвинуть режим или забить на все и отдохнуть? Склоняюсь ко второму, да, наверное, так и сделаю.

В течение этого семестра по английскому мне надо пройти какой-нибудь курс (наверное, можно не полностью) на coursera или edx для получения зачета, а еще прочитать сколько-то там символов из любой книги "по специальности" (математика/информатика). Со вторым я, скорее всего, уже давно справился (CLRS и Core Java), а вот первое даже не начинал. Разрываюсь между тем, чтобы взять Edx версию 6.042J и по-быстрому с ним расправиться или же взять что-то вообще другое (но я же и без этого ничего не успеваю, так что буду халтурить; но, впрочем, я и не обещал никому, что буду добросовестно учиться).

> повторение


есть, перенес в вордовский файл почти все конспекты по теории чисел, составил для них табличку с уровнем знаний

> решение задачек по программированию


решил только одну, которая у меня висела уже давно и я уже знал, как ее решать

> теория полей


почитал. "(убедитесь в этом!)" и "как уже говорилось в главе IV" intensifies. Я все же правильно сделал, что начал читать это заранее: очень много доказательств скипается, и приходится искать или выводить их самому.

> Core Java


забыл

> Рисование


не успел

Почти ничего не слушал фоном: концентрация была лучше, это радует. Завтра тоже постараюсь без фонового сопровождения.
Время почти не отслеживал, но старался делать перерывы. Зарядку не делал.

Все еще не решил, какой проект буду лепить следующим, завтра определюсь.

Ну, окей, сегодня было 3/10 по условной шкале без четких критериев. Это лучше, чем вчера, но все равно не очень хорошо.

Завтра ура выходной: повторение, немного диффуров (в пятницу контрольная), Core Java, разбор лекций по матанализу, решение упражнений в конце третьей главы CLRS, рисование (вот этим займусь строго не позже семи вечера вне зависимости от обстоятельств).

...

Одна из моих самых любимых future funk компиляций
https://www.youtube.com/watch?v=Bi2lnYuberc
PoppyFanboy !VTLpv6lgGw 112 227413
Не сделал и половины о того, что запланировал.

Проспал где-то часов десять и, наверное, так бы и дальше спал, если бы не разбудил звонок мобильного телефона. Дочитал пятую главу Core Java: там было про java.lang.reflection, про всякие преколы с получением доступа к приватным полям и о том, как этого можно попытаться избежать

(никак. Перед тем, как сделать что-то очень плохое небезопасное, обычно применяется метод checkPermission экземпляра класса SecurityManager и в зависимости от ответа либо выбрасывается исключение, либо ничего не происходит, но это при условии, что экземпляр SecurityManager вообще был создан. По умолчанию он не создается, так что придется прописать отдельно System.setSecurityManager(new SecurityManager()); Разрешения на выполнение тех или иных операций определяются в абстрактном классе Policy, который, в свою очередь, по умолчанию берет их из файла java.policy, находящегося где-то в недрах папки jdk. Разрешение задается парой наследник класса Permission + наименование разрешения. Так, чтобы можно было включить игнор модификаторов доступа в java.lang.reflection (при условии дефолтного SecurityManager), необходимо, чтобы в java.policy было что-то вроде

grant {
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};

)
PoppyFanboy !VTLpv6lgGw 113 227415
Если в .policy файле нет какого-то разрешения, то проверка checkPermission будет выбрасывать исключение, так что будет невозможно выполнить определенные "небезопасные" действия. Так, выше упомянутого "suppressAccessChecks" в java.policy по умолчанию нет, поэтому, чтобы запретить доступ к приватным полям через java.lang.reflection, достаточно создать экземпляр SecurityManager (который по умолчанию загрузит все permissions из java.policy, среди которых не будет "suppressAccessChecks").

Также есть еще вариант при вызове javac в параметрах указать свой .policy файл, который будет либо дополнять, либо переписывать стандартный. А еще можно реализовать абстрактный метод Policy, переопределив там метод getPermissions (так, чтобы он возвращал только те разрешения, которые хотим мы).

И казалось бы, все здорово, но:
- java,policy может быть переписан как угодно.
- программу можно скомпилировать через javac вообще с любыми policy файлами.
- если изначально уже задан SecurityManager (например, вторым способом), то попытка в коде вызвать Policy.setPolicy(new MyPolicy()) сама может привести к выбросу исключения, если изначально не дано разрешение на переопределение SecurityManager (а это вполне может быть). И это вроде как не дает от доступа к приватным полям и методам, но в то же время не дает запустить программу, что как бы так себе решение (потому что запрет на изменение SecurityManager не связан логически с запретом доступа к приватным полям).

То есть практически невозможно адекватным способом запретить reflections использовать Так что, я так понимаю, по поводу возможного доступа к приватным методам и полям особо не нужно заботиться: есть оно и есть.

Порисовал: не осилил срисовку степлера. Заодно скину то, что срисовывал за 21 число и еще там когда-то.
Тему для проекта не выбрал, вообще забыл про это. Но я, наверное, все же не буду делать поиск по разделу, о котором когда-то там упоминал, лучше что-нибудь другое.
Наушники вынужденно использовал, время не отслеживал, зарядку не делал.

Какой-то странный день: опять время утекло как-то незаметно, и я опять ложусь спать поздно.

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

Когда-нибудь у меня получится

...

https://www.youtube.com/watch?v=bbBAMTF-yY4
https://www.youtube.com/watch?v=YSjsNzffUGQ
https://www.youtube.com/watch?v=VOGWqtGJ1GI
PoppyFanboy !VTLpv6lgGw 113 227415
Если в .policy файле нет какого-то разрешения, то проверка checkPermission будет выбрасывать исключение, так что будет невозможно выполнить определенные "небезопасные" действия. Так, выше упомянутого "suppressAccessChecks" в java.policy по умолчанию нет, поэтому, чтобы запретить доступ к приватным полям через java.lang.reflection, достаточно создать экземпляр SecurityManager (который по умолчанию загрузит все permissions из java.policy, среди которых не будет "suppressAccessChecks").

Также есть еще вариант при вызове javac в параметрах указать свой .policy файл, который будет либо дополнять, либо переписывать стандартный. А еще можно реализовать абстрактный метод Policy, переопределив там метод getPermissions (так, чтобы он возвращал только те разрешения, которые хотим мы).

И казалось бы, все здорово, но:
- java,policy может быть переписан как угодно.
- программу можно скомпилировать через javac вообще с любыми policy файлами.
- если изначально уже задан SecurityManager (например, вторым способом), то попытка в коде вызвать Policy.setPolicy(new MyPolicy()) сама может привести к выбросу исключения, если изначально не дано разрешение на переопределение SecurityManager (а это вполне может быть). И это вроде как не дает от доступа к приватным полям и методам, но в то же время не дает запустить программу, что как бы так себе решение (потому что запрет на изменение SecurityManager не связан логически с запретом доступа к приватным полям).

То есть практически невозможно адекватным способом запретить reflections использовать Так что, я так понимаю, по поводу возможного доступа к приватным методам и полям особо не нужно заботиться: есть оно и есть.

Порисовал: не осилил срисовку степлера. Заодно скину то, что срисовывал за 21 число и еще там когда-то.
Тему для проекта не выбрал, вообще забыл про это. Но я, наверное, все же не буду делать поиск по разделу, о котором когда-то там упоминал, лучше что-нибудь другое.
Наушники вынужденно использовал, время не отслеживал, зарядку не делал.

Какой-то странный день: опять время утекло как-то незаметно, и я опять ложусь спать поздно.

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

Когда-нибудь у меня получится

...

https://www.youtube.com/watch?v=bbBAMTF-yY4
https://www.youtube.com/watch?v=YSjsNzffUGQ
https://www.youtube.com/watch?v=VOGWqtGJ1GI
15083256431740.jpg395 Кб, 1280x1810
PoppyFanboy !VTLpv6lgGw 114 227547
>>227415

>Завтра порешаю диффуры, порисую, повторю пройденное, продолжу читать CLRS (может быть, поделаю оттуда упражнения). НУ, и как обычно: поменьше использовать наушники, делать перерывы, отслеживать время, вот это вот все.



Громко рассмеялся в лицо вчерашнему себе (но не настолько громко, чтобы ко мне пришли ругаться на шум посреди ночи)
Мало того, что вообще ничего не делал, так еще и потратил сегодняшний день в никуда абсолютно бездарно. Лекции по матанализу опять почему-то отменили, и я вместо них пошел ужираться в kfc (да, для меня поход туда - целое событие в виду того, что фаст-фуд стараюсь есть не чаще раза-двух в месяц; последняя такая мекка как раз была 21 сентября): взял курицу, какую-то небольшую штуку в лаваше, картошку и колу пепси. Героически умяв все, естественно, за один присест и поплакав о спущенных понятно куда 400 рублях (как-то дорого), я потопал домой.

И тут у меня сохранились только обрывки воспоминаний о том, как я смотрел Higashi no Eden вместо того, чтобы смотреть девочек-десантницкакое-то проходное аниму, местами забавно, но пересматривать вряд ли когда-нибудь буду, слушал The Caretaker - Everywhere at the End of Time (первые три акта stages) все никак не соберусь нормально послушать четвертый и пятый и вообще безжалостно сжигал время, отведенное мне для благих деяний.

Опомнился вот только к третьему часу ночи, вспомнил, что завтра контрольная по диффурам, и все же сел и немного повторил составленный мною алгоритм их решения (на основе того, что мы прошли на данный момент).

son, I am disappoint мне правда стыдно за свое поведение

Была сейчас нездоровая идея не спать двое суток, но позаниматься чем-нибудь полезным, но, наверное, нет. Однажды был опыт подобного во время экзаменов, и я не очень хочу опять вот это вот: галлюцинаций слуховых/визуальных не было, но просто было не очень хорошо. Так что великие свершения откладываются на вечер пятницы и выходные.

В предыдущем посте как-то неприлично много опечаток, ошибок и недописанных предложений, надо бы мне немного лучше контролировать это дело.

...

https://www.youtube.com/watch?v=ErsSCH3jtT4
https://www.youtube.com/watch?v=YVXW1xyoFPI
https://www.youtube.com/watch?v=E6Niqxw_Yz0
15083256431740.jpg395 Кб, 1280x1810
PoppyFanboy !VTLpv6lgGw 114 227547
>>227415

>Завтра порешаю диффуры, порисую, повторю пройденное, продолжу читать CLRS (может быть, поделаю оттуда упражнения). НУ, и как обычно: поменьше использовать наушники, делать перерывы, отслеживать время, вот это вот все.



Громко рассмеялся в лицо вчерашнему себе (но не настолько громко, чтобы ко мне пришли ругаться на шум посреди ночи)
Мало того, что вообще ничего не делал, так еще и потратил сегодняшний день в никуда абсолютно бездарно. Лекции по матанализу опять почему-то отменили, и я вместо них пошел ужираться в kfc (да, для меня поход туда - целое событие в виду того, что фаст-фуд стараюсь есть не чаще раза-двух в месяц; последняя такая мекка как раз была 21 сентября): взял курицу, какую-то небольшую штуку в лаваше, картошку и колу пепси. Героически умяв все, естественно, за один присест и поплакав о спущенных понятно куда 400 рублях (как-то дорого), я потопал домой.

И тут у меня сохранились только обрывки воспоминаний о том, как я смотрел Higashi no Eden вместо того, чтобы смотреть девочек-десантницкакое-то проходное аниму, местами забавно, но пересматривать вряд ли когда-нибудь буду, слушал The Caretaker - Everywhere at the End of Time (первые три акта stages) все никак не соберусь нормально послушать четвертый и пятый и вообще безжалостно сжигал время, отведенное мне для благих деяний.

Опомнился вот только к третьему часу ночи, вспомнил, что завтра контрольная по диффурам, и все же сел и немного повторил составленный мною алгоритм их решения (на основе того, что мы прошли на данный момент).

son, I am disappoint мне правда стыдно за свое поведение

Была сейчас нездоровая идея не спать двое суток, но позаниматься чем-нибудь полезным, но, наверное, нет. Однажды был опыт подобного во время экзаменов, и я не очень хочу опять вот это вот: галлюцинаций слуховых/визуальных не было, но просто было не очень хорошо. Так что великие свершения откладываются на вечер пятницы и выходные.

В предыдущем посте как-то неприлично много опечаток, ошибок и недописанных предложений, надо бы мне немного лучше контролировать это дело.

...

https://www.youtube.com/watch?v=ErsSCH3jtT4
https://www.youtube.com/watch?v=YVXW1xyoFPI
https://www.youtube.com/watch?v=E6Niqxw_Yz0
PoppyFanboy !VTLpv6lgGw 115 228129
Все плохо

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

Еще раз убедился в том, насколько отвратительная у меня память: пропускаю через себя информацию и тут же забываю большую часть. Вот так и случилось с 50% материалов из всего, что я проходил по околопрограммированию. В связи с этим какое-то время назад я решил перенести все конспекты в более читабельный вид, а заодно повторить все еще раз. Только вот сейчас я понимаю, что смысла в этом особо-то нет: все повторится снова, я снова все забуду.

Я много раз слышал, что чтобы что-то запомнить на более долгое время, необходимо воспроизводить материал, и я очень сильно пренебрегаю этим. Теперь буду каждый день пробегаться по пройденному материалу и пытаться воспроизводить то, что вспоминается с трудом. Только для начала надо будет все же доделать "реставрацию" конспектов и досоставлять список тем. На этих выходных я прошел от самого начала курса 6.042J и почти до конца теории графов. Я бы не сказал, что я прямо все забыл, большую часть я, конечно, помню, но вот важные детали упускаю.

Также я решил, что пока не прорешаю проблем сеты по предыдущим темам из 6.042J, не буду двигаться дальше (в том числе, пока не реализую все упомянутые алгоритмы на графах). То же самое с CLRS: я там еще не сделал упражнения из третьей главы, а уже начал четвертую. Нет смысла в том, чтобы просто читать такую литературу: необходимо сразу применять на практике. И Core Java это тоже касается: я хоть и читаю ее в последнее время исключительно с открытой IDE, проверяя все сразу же, но даже этого, наверное, мало: надо попробовать к каждой теме делать микро-проект, пусть он будет супер-вымученным и бессмысленным, но будет покрывать пройденные темы.

В связи всем выше перечисленным мне придется замедлиться еще сильнее, но прорабатывать все более тщательно, иначе просто нет смысла: влетает и вылетает.

В общем, да, за эти пару выходных все, что я сделал - это переделал конспекты по теории чисел и теории графов и попытался нарисовать что-то из головы. Моей ошибкой было то, что я взял слишком косплексную для меня идею: so far надо брать что-то более мелкое. Как итог получилось криво и косо, отчасти, потому что таковыми же являются мои конечности, отчасти, из-за того, что в какой-то момент я начал торопиться. Короче, вернусь к срисовкам пока что, но постараюсь также рисовать что-то более-менее из головы.

Ну, резюмируя вышесказанное:
- каждый день повторять пройденное, но забытое
- тщательнее прорабатывать материалы
- смириться с медленным темпом

Кстати, в качестве следующего более-менее объемного проекта я попробую сделать zip-архиватор. Как раз у меня с java.io дела не очень обстоят.

Завтра на английском надо будет доказывать рандомную теорему, внезапно, на английском (чтобы потом получить зачет без экзаменов). Особо не готовился, попробую доказать теорему Эйлера, не знаю, что из этого выйдет.

Завтра будет: повторение пройденного (вернее того, что я успел перенести в обновленную версию конспектов), решение проблем сетов и задач с recitations из 6.042J, задачи по алгебре (для универа), рисование. Здесь довольно мало пунктов, да, но постараюсь выполнить их все на более-менее нормальном уровне. В автобусе попытаюсь дальше поразбираться с теорией полей.

Ну, э-э, вот как-то так. В моем городе неожиданно началась зима: стало настолько холодно, что завтра придется переходить на более теплую обувь, и выпал первый снег. Очень не хочется зиму, ужасное время года.

...

Чет захотелось послушать его
https://youtu.be/_oD70Z6QOqs
https://youtu.be/Er7MCTb30hA

https://youtu.be/sCzJQRVbWtE
https://youtu.be/o2zf28T0LFU
PoppyFanboy !VTLpv6lgGw 115 228129
Все плохо

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

Еще раз убедился в том, насколько отвратительная у меня память: пропускаю через себя информацию и тут же забываю большую часть. Вот так и случилось с 50% материалов из всего, что я проходил по околопрограммированию. В связи с этим какое-то время назад я решил перенести все конспекты в более читабельный вид, а заодно повторить все еще раз. Только вот сейчас я понимаю, что смысла в этом особо-то нет: все повторится снова, я снова все забуду.

Я много раз слышал, что чтобы что-то запомнить на более долгое время, необходимо воспроизводить материал, и я очень сильно пренебрегаю этим. Теперь буду каждый день пробегаться по пройденному материалу и пытаться воспроизводить то, что вспоминается с трудом. Только для начала надо будет все же доделать "реставрацию" конспектов и досоставлять список тем. На этих выходных я прошел от самого начала курса 6.042J и почти до конца теории графов. Я бы не сказал, что я прямо все забыл, большую часть я, конечно, помню, но вот важные детали упускаю.

Также я решил, что пока не прорешаю проблем сеты по предыдущим темам из 6.042J, не буду двигаться дальше (в том числе, пока не реализую все упомянутые алгоритмы на графах). То же самое с CLRS: я там еще не сделал упражнения из третьей главы, а уже начал четвертую. Нет смысла в том, чтобы просто читать такую литературу: необходимо сразу применять на практике. И Core Java это тоже касается: я хоть и читаю ее в последнее время исключительно с открытой IDE, проверяя все сразу же, но даже этого, наверное, мало: надо попробовать к каждой теме делать микро-проект, пусть он будет супер-вымученным и бессмысленным, но будет покрывать пройденные темы.

В связи всем выше перечисленным мне придется замедлиться еще сильнее, но прорабатывать все более тщательно, иначе просто нет смысла: влетает и вылетает.

В общем, да, за эти пару выходных все, что я сделал - это переделал конспекты по теории чисел и теории графов и попытался нарисовать что-то из головы. Моей ошибкой было то, что я взял слишком косплексную для меня идею: so far надо брать что-то более мелкое. Как итог получилось криво и косо, отчасти, потому что таковыми же являются мои конечности, отчасти, из-за того, что в какой-то момент я начал торопиться. Короче, вернусь к срисовкам пока что, но постараюсь также рисовать что-то более-менее из головы.

Ну, резюмируя вышесказанное:
- каждый день повторять пройденное, но забытое
- тщательнее прорабатывать материалы
- смириться с медленным темпом

Кстати, в качестве следующего более-менее объемного проекта я попробую сделать zip-архиватор. Как раз у меня с java.io дела не очень обстоят.

Завтра на английском надо будет доказывать рандомную теорему, внезапно, на английском (чтобы потом получить зачет без экзаменов). Особо не готовился, попробую доказать теорему Эйлера, не знаю, что из этого выйдет.

Завтра будет: повторение пройденного (вернее того, что я успел перенести в обновленную версию конспектов), решение проблем сетов и задач с recitations из 6.042J, задачи по алгебре (для универа), рисование. Здесь довольно мало пунктов, да, но постараюсь выполнить их все на более-менее нормальном уровне. В автобусе попытаюсь дальше поразбираться с теорией полей.

Ну, э-э, вот как-то так. В моем городе неожиданно началась зима: стало настолько холодно, что завтра придется переходить на более теплую обувь, и выпал первый снег. Очень не хочется зиму, ужасное время года.

...

Чет захотелось послушать его
https://youtu.be/_oD70Z6QOqs
https://youtu.be/Er7MCTb30hA

https://youtu.be/sCzJQRVbWtE
https://youtu.be/o2zf28T0LFU
1540855182095.png1 Мб, 900x1200
PoppyFanboy !VTLpv6lgGw 116 228273
>>228129

> повторение пройденного (вернее того, что я успел перенести в обновленную версию конспектов), решение проблем сетов и задач с recitations из 6.042J, задачи по алгебре (для универа), рисование. В автобусе попытаюсь дальше поразбираться с теорией полей.



Поделал всего, кроме рисования. Как-то времени вообще ни на что не хватает.

Доказательство теоремы на английском сдал, вроде было не очень сложно: нужно просто знать все необходимые термины, а предложения строятся по максимально простым шаблонам, и ты просто на автомате меняешь их.

Вот это забавная штука
https://en.m.wikipedia.org/wiki/Cyclotomic_polynomial
Ее можно применить в доказательстве того, что простых чисел вида (1 + nk), где n фиксируется, а k - просто целое, бесконечно много.

Завтра надо будет поделать задачки по матанализу (в среду переписывание контрольной), порисовать, повторить пройденное, поделать упражнения из CLRS. Опять планирую меньше, чем делаю обычно, чтобы были больше шансы выполнить все от начала до конца.

Все еще стараюсь не думать о будущем и жить сегодняшним днем.
DqaooK4U8AApNbQ.jpeg138 Кб, 690x1001
PoppyFanboy !VTLpv6lgGw 117 228424
День прошел настолько быстро, что я даже опомниться не успел. Пока что все довольно скучно: порешал задачи по матанализу, порешал упражнения из третьей главы CLRS, порисовал всякую ерунду из головы (в основном это были анатомически неправильные животные). Как-то мало я за сегодня сделал. Все же надо планировать столько, чтобы 100% не сделать а потом хныкать был какой-то челлендж. В противном случае как-то нет особо мотивации перевыполнить план.

Завтра мой заслуженный третий выходной на неделе отбирает переписывание контрольной по матанализу и стоматолог, эх.

Очень сильно забил на лекции: сижу и просто переписываю с доски в тетрадь, вообще не вникаю. Думаю, надо будет попробовать разбирать лекции без вникания в доказательства, а сами доказательства разбирать параллельно, но в более медленном темпе. Не знаю, почему я так раньше не делал, наверное, думал, что смогу успеть везде.

Короче, заведомо невыполнимый план на завтра: разбор лекций по матанализу, Core Java, повторение пройденного, начну разбираться с zip архиватором (пока что вообще не знаю толком, с чего начать, надо изучить вопрос), рисование (попробую порисовать жуков из третьего урока на drawabox). Если останется время: теория полей и решение задачек из CLRS или 6.042J.

Алсо нужно продолжать пытаться отслеживать свои активности, иначе вообще нет ощущения времени.
1541032824613.png706 Кб, 700x993
PoppyFanboy !VTLpv6lgGw 118 228588
Ничего не получается, опять зафейлился с отслеживанием активностей и потерялся во времени: чувствую, что очень много спустил либо в никуда, либо на бытовую ерунду. И вот так уже три месяца прошли.

Переписал контрольную матанализу, но, чувствую, что одно задание (на вычисление многочлена тейлора до n-ного члена функции от нескольких переменных) сделал неправильно: ответ получился каким-то длинным, ничего не сократилось. И я даже не знаю, где там может быть ошибка: изначально функция u = u(x, y) задана неявно равенствами u(1, 1) = 1 и u3 + 4yu - 5x = 0. Ну, я нахожу из равенства частные производные u, выраженные через x, y и u, тем самым находя дифференциал u. Потом вычисляю второй дифференциал как d(du) по правилам сложения/вычитания/деления. Ну, и в конце в соответствии с условием задачи раскладываю по тейлору в окрестности (1, 1). Не знаю, что там не так, потом попробую перерешать.

Поразбирал совсем немного матанализ (без доказательств прямо гораздо проще и быстрее), немного поразбирался с архиватором (не буду делать конкретно zip, но попробую реализовать хотя бы минимальный функционал): попытался набросать один из классов, пока что без реализаций методов - вроде что-то вырисовывается, но очень смутно, надо переделывать.

Не рисовал, встал поздно (9 утра), ложусь поздно.

Завтра надо будет съездить на пары по матанализу, сделать домашнее задание по программированию (для универа), повторить пройденное, поделать задачки из 6.042J, поразбирать теорию полей, порисовать. Если будет время, то либо архиватор, либо CLRS.

Уже сотое по счету такого рода напоминание себе: используй приложение для трекинга времени, не слушай музыку с голосом на фоне, дели время на промежутки Это же в теории так просто, но нет, я лучше буду сидеть на месте три месяца. И я даже не знаю, что еще можно добавить, все в итоге сводится к этому: меньше отвлекаться, разбивать сложное на простое, следить за тем, что делаешь.

Хоть один день прожить бы по плану, чтобы был образец. Ни одного раза ведь не было.

Ну зааавтра все будет по-другому, это точно
1541032824613.png706 Кб, 700x993
PoppyFanboy !VTLpv6lgGw 118 228588
Ничего не получается, опять зафейлился с отслеживанием активностей и потерялся во времени: чувствую, что очень много спустил либо в никуда, либо на бытовую ерунду. И вот так уже три месяца прошли.

Переписал контрольную матанализу, но, чувствую, что одно задание (на вычисление многочлена тейлора до n-ного члена функции от нескольких переменных) сделал неправильно: ответ получился каким-то длинным, ничего не сократилось. И я даже не знаю, где там может быть ошибка: изначально функция u = u(x, y) задана неявно равенствами u(1, 1) = 1 и u3 + 4yu - 5x = 0. Ну, я нахожу из равенства частные производные u, выраженные через x, y и u, тем самым находя дифференциал u. Потом вычисляю второй дифференциал как d(du) по правилам сложения/вычитания/деления. Ну, и в конце в соответствии с условием задачи раскладываю по тейлору в окрестности (1, 1). Не знаю, что там не так, потом попробую перерешать.

Поразбирал совсем немного матанализ (без доказательств прямо гораздо проще и быстрее), немного поразбирался с архиватором (не буду делать конкретно zip, но попробую реализовать хотя бы минимальный функционал): попытался набросать один из классов, пока что без реализаций методов - вроде что-то вырисовывается, но очень смутно, надо переделывать.

Не рисовал, встал поздно (9 утра), ложусь поздно.

Завтра надо будет съездить на пары по матанализу, сделать домашнее задание по программированию (для универа), повторить пройденное, поделать задачки из 6.042J, поразбирать теорию полей, порисовать. Если будет время, то либо архиватор, либо CLRS.

Уже сотое по счету такого рода напоминание себе: используй приложение для трекинга времени, не слушай музыку с голосом на фоне, дели время на промежутки Это же в теории так просто, но нет, я лучше буду сидеть на месте три месяца. И я даже не знаю, что еще можно добавить, все в итоге сводится к этому: меньше отвлекаться, разбивать сложное на простое, следить за тем, что делаешь.

Хоть один день прожить бы по плану, чтобы был образец. Ни одного раза ведь не было.

Ну зааавтра все будет по-другому, это точно
sage PoppyFanboy !VTLpv6lgGw 119 228796
>>228588

>трекинг времени


почти

>не слушать контент с голосом на фоне


я пытался

>деление времени на промежутки


почти

Немного порисовал, поразбирал теорию полей (ужас, наткнулся на теорему, доказательство которой нигде не могу найти: про то, что F[x]/(f) - поле, если F - поле и f не приводим еще бы вспомнить, слитно или раздельно пишется это слово в кольце F[x]; правда я еще не посмотрел в Google Books, хмм, может быть, там найдется),

частично сделал домашнее задание по программированию (большую часть времени занимался им). Остальное из запланированного не делал. ну, на пары сходил, но это не считается

Трекинг времени немного мотивирует: постоянно тикает секундомер, морально не дающий заниматься ничего-не-деланием более 10-15 минут. Тем не менее, сразу как прихожу домой, не могу чем-то полезным заниматься: всякий раз как минимум час страдаю ерундой.

В целом, лучше, но я все равно очень сильно не удовлетворен ай, блин, опять краткое причастие, вроде раздельно надо писать, но оно не смотрится раздельно: Мало уделяю время околопрограммироа
анию. Очень хочу гораздо больше, но вуз накладывает некоторые ограничения. Но ничего, вот сейчас будут целых три выходных подряд, и я что-нибудь соображу.

Алсо попробую все же составлять расписание дня с конкретной последовательностью действий и какими-то временными метками, чтобы особо не задумываться над тем, что делать дальше, а не просто выбирать задачи из пулла.

Завтра будет еженедельная пятница что? с пятью парами, которая обеспечивает мне три выходных на неделе, но я все равно постараюсь что-нибудь поделать. Как минимум, рисование и задачки из 6.042J. Ну и те три правила, которые надо взять за привычку.

И я еще тут подумал, что, наверное, имеет смысл фиксировать итоги недели, потому что я хоть и пишу постоянно что не двигаюсь с места, бездельничаю в рамках отчета за день, но, на самом деле в рамках одного дня и не может быть существенного прогресса, нужно брать несколько большие промежутки времени, хотя бы неделю. Ну, и в связи с этим какие-то планы на неделю тоже стоит обозначать. Делать то же самое для одного месяца, наверное, не стоит: слишком уж большой интервал, слишком много возможностей откладывать все до последнего.

спокойной ночи

завтра же будет лучше?
вот еще сейчас осознал небольшую проблему: мне хочется сразу всего, но в итоге это сильно конфликтует с текущими возможностями. Надо поумерить этот пыл, признать, что еще много времени и торопиться некуда
sage PoppyFanboy !VTLpv6lgGw 119 228796
>>228588

>трекинг времени


почти

>не слушать контент с голосом на фоне


я пытался

>деление времени на промежутки


почти

Немного порисовал, поразбирал теорию полей (ужас, наткнулся на теорему, доказательство которой нигде не могу найти: про то, что F[x]/(f) - поле, если F - поле и f не приводим еще бы вспомнить, слитно или раздельно пишется это слово в кольце F[x]; правда я еще не посмотрел в Google Books, хмм, может быть, там найдется),

частично сделал домашнее задание по программированию (большую часть времени занимался им). Остальное из запланированного не делал. ну, на пары сходил, но это не считается

Трекинг времени немного мотивирует: постоянно тикает секундомер, морально не дающий заниматься ничего-не-деланием более 10-15 минут. Тем не менее, сразу как прихожу домой, не могу чем-то полезным заниматься: всякий раз как минимум час страдаю ерундой.

В целом, лучше, но я все равно очень сильно не удовлетворен ай, блин, опять краткое причастие, вроде раздельно надо писать, но оно не смотрится раздельно: Мало уделяю время околопрограммироа
анию. Очень хочу гораздо больше, но вуз накладывает некоторые ограничения. Но ничего, вот сейчас будут целых три выходных подряд, и я что-нибудь соображу.

Алсо попробую все же составлять расписание дня с конкретной последовательностью действий и какими-то временными метками, чтобы особо не задумываться над тем, что делать дальше, а не просто выбирать задачи из пулла.

Завтра будет еженедельная пятница что? с пятью парами, которая обеспечивает мне три выходных на неделе, но я все равно постараюсь что-нибудь поделать. Как минимум, рисование и задачки из 6.042J. Ну и те три правила, которые надо взять за привычку.

И я еще тут подумал, что, наверное, имеет смысл фиксировать итоги недели, потому что я хоть и пишу постоянно что не двигаюсь с места, бездельничаю в рамках отчета за день, но, на самом деле в рамках одного дня и не может быть существенного прогресса, нужно брать несколько большие промежутки времени, хотя бы неделю. Ну, и в связи с этим какие-то планы на неделю тоже стоит обозначать. Делать то же самое для одного месяца, наверное, не стоит: слишком уж большой интервал, слишком много возможностей откладывать все до последнего.

спокойной ночи

завтра же будет лучше?
вот еще сейчас осознал небольшую проблему: мне хочется сразу всего, но в итоге это сильно конфликтует с текущими возможностями. Надо поумерить этот пыл, признать, что еще много времени и торопиться некуда
PoppyFanboy !VTLpv6lgGw 120 229060
2 ноября 2018
Порисовал всякую ерунду из головы и срисовал скорпиона с фото. Немного порешал задачки по теории графов из проблем сетов 6.042J. В универе и в транспорте разбирал теорию полей.

К слову, нашел доказательство теоремы, о которой упоминал в предыдущем посте: там надо сначала доказать, что если многочлен g неприводим все же слитно в кольце k[x], то идеал (g) является максимальным (то есть нет идеалов, которые бы содержали в себе (g), были бы большими по включению и не совпадали бы с k[x]), а затем просто рассмотреть произвольный элемент (a + (g)) из k[x]/(g), определить идеал {gm + r a | m - целое, r из k[x]}, сказать что этот идеал совпадает с k[x], так как содержит (g) и больше него по включению, из чего сделать вывод, что существуют такие r и m, что gm + r a = 1 (так как в любом кольце есть нейтральный по умножению), ну и все: так мы доказали, что (a + (g)) обратим, а следовательно, факторкольцо многочленов по идеалу, порожденному неприводимым многочленом, является полем (ну, я тут опустил некоторые детали, но я больше для себя это писал, так что не важно).

Почти отследил время, но под конец забил
Время на промежутки не делил

Кстати, контрольную по матанализу, которую я переписывал в среду на этой неделе, мне все же полностью зачли, так что не придется ничего дописывать. Не знаю, правильный там в итоге получился в задании ответ или нет, мне кажется, преподавателю самой было лень проверять досконально.

А вот в контрольной по диффурам придется многое переделывать: 4/5 заданий хоть и вроде решены, но надо обосновать некоторые тонкие моменты - то есть переписывать не надо, просто устно потом объяснить преподавателю. Одно задание ожидаемо не сделал, вернее сделал, но неправильно - там про построение поля изоклин. Оно вроде простое, но на подстановках dy/dx = {1, -1, 1/√3, -1/√3, √3, -√3} далеко не уедешь, и там приходится проявлять математическую смекалку, которой у меня нет от слова совсем.

3 - 5 ноября 2018
- Сделать хотя бы компилируемый вариант архиватора
- Пройти 1.5 проблем сета из 6.042J (новое пока не буду проходить)
- Доделать задачки из третьей главы CLRS, перейти к четвертой
- Core Java - продвинуться дальше (не знаю, пусть, на 3/4 от текущей главы), по каждой теме делать микро-проекты

- Подготовиться к контрольной по алгебре (к 6 ноября)
- Подготовить стилистический анализ текста по английскому (к 5 ноября)
- Разобраться хотя бы с теоремой Кронекера, на которой я остановился в теории полей, в идеале меня теперь триггерит от этого слова ну, окей, шучу - разобрать еще больше

- Рисовать что-нибудь каждый день
- Повторять пройденное каждый день (это недолго, но я постоянно в течение дня откладываю это)

extra:
- разбор лекций по матанализу
- дополнительные n≥3 часов для архиватора
- (список может дополняться, я первый раз пробую планировать что-то на целых три дня)

на завтра
- кр по алгебре
- рисование
- повторение
- архиватор
- анализ текста по английскому
- Core Java
+ >>228588

вооот, составил план, значит, завтра буду лежать на кровати и есть чипсы, а потом оправдываться, а потом опять составлю план, а потом, ээ, не знаю

...

Вроде ничего особенного, но почему-то нравится
https://www.youtube.com/watch?v=gbPRt5KV-UM

https://www.youtube.com/watch?v=8SF7yncly6U
https://www.youtube.com/watch?v=3byNB3aMJdY

Такое ощущение, что уже где-то слышал, но на саму композицию наткнулся впервые
https://www.youtube.com/watch?v=VHtBJqocbdY
PoppyFanboy !VTLpv6lgGw 120 229060
2 ноября 2018
Порисовал всякую ерунду из головы и срисовал скорпиона с фото. Немного порешал задачки по теории графов из проблем сетов 6.042J. В универе и в транспорте разбирал теорию полей.

К слову, нашел доказательство теоремы, о которой упоминал в предыдущем посте: там надо сначала доказать, что если многочлен g неприводим все же слитно в кольце k[x], то идеал (g) является максимальным (то есть нет идеалов, которые бы содержали в себе (g), были бы большими по включению и не совпадали бы с k[x]), а затем просто рассмотреть произвольный элемент (a + (g)) из k[x]/(g), определить идеал {gm + r a | m - целое, r из k[x]}, сказать что этот идеал совпадает с k[x], так как содержит (g) и больше него по включению, из чего сделать вывод, что существуют такие r и m, что gm + r a = 1 (так как в любом кольце есть нейтральный по умножению), ну и все: так мы доказали, что (a + (g)) обратим, а следовательно, факторкольцо многочленов по идеалу, порожденному неприводимым многочленом, является полем (ну, я тут опустил некоторые детали, но я больше для себя это писал, так что не важно).

Почти отследил время, но под конец забил
Время на промежутки не делил

Кстати, контрольную по матанализу, которую я переписывал в среду на этой неделе, мне все же полностью зачли, так что не придется ничего дописывать. Не знаю, правильный там в итоге получился в задании ответ или нет, мне кажется, преподавателю самой было лень проверять досконально.

А вот в контрольной по диффурам придется многое переделывать: 4/5 заданий хоть и вроде решены, но надо обосновать некоторые тонкие моменты - то есть переписывать не надо, просто устно потом объяснить преподавателю. Одно задание ожидаемо не сделал, вернее сделал, но неправильно - там про построение поля изоклин. Оно вроде простое, но на подстановках dy/dx = {1, -1, 1/√3, -1/√3, √3, -√3} далеко не уедешь, и там приходится проявлять математическую смекалку, которой у меня нет от слова совсем.

3 - 5 ноября 2018
- Сделать хотя бы компилируемый вариант архиватора
- Пройти 1.5 проблем сета из 6.042J (новое пока не буду проходить)
- Доделать задачки из третьей главы CLRS, перейти к четвертой
- Core Java - продвинуться дальше (не знаю, пусть, на 3/4 от текущей главы), по каждой теме делать микро-проекты

- Подготовиться к контрольной по алгебре (к 6 ноября)
- Подготовить стилистический анализ текста по английскому (к 5 ноября)
- Разобраться хотя бы с теоремой Кронекера, на которой я остановился в теории полей, в идеале меня теперь триггерит от этого слова ну, окей, шучу - разобрать еще больше

- Рисовать что-нибудь каждый день
- Повторять пройденное каждый день (это недолго, но я постоянно в течение дня откладываю это)

extra:
- разбор лекций по матанализу
- дополнительные n≥3 часов для архиватора
- (список может дополняться, я первый раз пробую планировать что-то на целых три дня)

на завтра
- кр по алгебре
- рисование
- повторение
- архиватор
- анализ текста по английскому
- Core Java
+ >>228588

вооот, составил план, значит, завтра буду лежать на кровати и есть чипсы, а потом оправдываться, а потом опять составлю план, а потом, ээ, не знаю

...

Вроде ничего особенного, но почему-то нравится
https://www.youtube.com/watch?v=gbPRt5KV-UM

https://www.youtube.com/watch?v=8SF7yncly6U
https://www.youtube.com/watch?v=3byNB3aMJdY

Такое ощущение, что уже где-то слышал, но на саму композицию наткнулся впервые
https://www.youtube.com/watch?v=VHtBJqocbdY
PoppyFanboy !VTLpv6lgGw 121 229151
3 ноября
>>229060

> - кр по алгебре


чек: собственные числа, вектора, многочлены, диагонализация матрицы. Оказывается, это все супер-просто, а я почему-то откладывал

> - рисование


чек, но мало: срисовал двух жуков: муху и таракана

> - повторение


есть

> - архиватор


не успел

> - анализ текста по английскому


сделал где-то 80%. Частично зарерайтил из примера стилистического анализа, частично сам понаписал всякой ерунды. Надеюсь, что нормально.

> - Core Java


есть, но мало. Из интересного узнал, что в джаве в интерфейсах можно определять статические классы, и в качестве одного из примеров использования было определение в интерфейсах всяких вспомогательных методов. И это очень странный способ использовать интерфейсы, в особенности на фоне того, что определение констант в интерфейсах вроде как везде не особо приветствуется. Не вижу особой разницы между этими двумя юзкейсами по части читабельности кода: в обоих случаях скрывается, откуда берется метод/константа (если реализовывать каким-то классом такой вот вспомогательный интерфейс). По-моему, гораздо лучше было бы просто объявить final класс с приватным конструктором и запихать все, что надо, в него (+ написать static import): в отличие от интерфейса, с таким классом вообще нельзя ничего сделать, кроме как заиспользовать статические методы и константы.

Ну и еще вот такая штука: в теории метод compareTo из интерфейса Comparable<T> должен обладать своего рода "антисимметричностью" "своего рода", потому что вообще это термин, касающиеся отношений на множестве, но я как хочу, так и пишу то есть sign(x.compareTo(y)) = -sign(y.conpareTo(x)). То есть сравнили в одном порядке - можем сравнить и в обратном. Только вот проблема в том, что если, скажем B - подкласс А, то b.compareTo(a) выдаст исключение (если в В, так же как и в А, определен свой compareTo), в то время как a.compareTo(b) без проблем выполнится.

И тут два выхода из сложившейся ситуации: либо мы закрепляем правила сравнения двух элементов в классе А и делаем его final, либо намеренно выбрасываем какое-нибудь unchecked исключение (по логике тут подходит ClassCastException), когда производится попытка применить метод compareTo к объекту класса A, с объектом класса B в качестве аргумента.

Вотт, и все это для того, чтобы от порядка: a.compareTo(b) или b.compareTo(a) не зависел результат выполнения программы: либо разные знаки, либо вообще ничего - исключение.

Ну, с методом equals то же самое почти. Только там он Object принимает, так что можно обойтись без выбросов исключений и просто выдавать false, если объекты принадлежат разным классам.

Время почти полностью отследил, вот прямо совсем немного не хватило терпения. Опять же повторюсь, очень хорошо помогает: постоянно идет отсчет времени, не дает долго лежать и смотреть в потолок.

Короче, в целом, по части организации лучше, чем когда-либо, но не очень хорошо по продуктивности (в рамках отдельной активности), и это удручает: я ведь специально перед этим днем нормально поспал (7.5 часов).

завтра
- доделаю анализ текста по английскому
- опять кр по алгебре
- архиватор
- рисование
- повторение
- теория полей
- задачки из CLRS
extra:
Core Java

этот дневник верно скатывается в какое-то совсем уж уныние. Я бы подобное читать не стал, брр. Но мне просто особо и не о чем писать: ничего интересного или выходящего за рамки привычного не происходит. Вот даже музыку не знаю, какую сюда впихнуть: не вспоминается ничего стоящего. Тем не менее, есть потребность в том, чтобы регулярно сюда отписываться
PoppyFanboy !VTLpv6lgGw 121 229151
3 ноября
>>229060

> - кр по алгебре


чек: собственные числа, вектора, многочлены, диагонализация матрицы. Оказывается, это все супер-просто, а я почему-то откладывал

> - рисование


чек, но мало: срисовал двух жуков: муху и таракана

> - повторение


есть

> - архиватор


не успел

> - анализ текста по английскому


сделал где-то 80%. Частично зарерайтил из примера стилистического анализа, частично сам понаписал всякой ерунды. Надеюсь, что нормально.

> - Core Java


есть, но мало. Из интересного узнал, что в джаве в интерфейсах можно определять статические классы, и в качестве одного из примеров использования было определение в интерфейсах всяких вспомогательных методов. И это очень странный способ использовать интерфейсы, в особенности на фоне того, что определение констант в интерфейсах вроде как везде не особо приветствуется. Не вижу особой разницы между этими двумя юзкейсами по части читабельности кода: в обоих случаях скрывается, откуда берется метод/константа (если реализовывать каким-то классом такой вот вспомогательный интерфейс). По-моему, гораздо лучше было бы просто объявить final класс с приватным конструктором и запихать все, что надо, в него (+ написать static import): в отличие от интерфейса, с таким классом вообще нельзя ничего сделать, кроме как заиспользовать статические методы и константы.

Ну и еще вот такая штука: в теории метод compareTo из интерфейса Comparable<T> должен обладать своего рода "антисимметричностью" "своего рода", потому что вообще это термин, касающиеся отношений на множестве, но я как хочу, так и пишу то есть sign(x.compareTo(y)) = -sign(y.conpareTo(x)). То есть сравнили в одном порядке - можем сравнить и в обратном. Только вот проблема в том, что если, скажем B - подкласс А, то b.compareTo(a) выдаст исключение (если в В, так же как и в А, определен свой compareTo), в то время как a.compareTo(b) без проблем выполнится.

И тут два выхода из сложившейся ситуации: либо мы закрепляем правила сравнения двух элементов в классе А и делаем его final, либо намеренно выбрасываем какое-нибудь unchecked исключение (по логике тут подходит ClassCastException), когда производится попытка применить метод compareTo к объекту класса A, с объектом класса B в качестве аргумента.

Вотт, и все это для того, чтобы от порядка: a.compareTo(b) или b.compareTo(a) не зависел результат выполнения программы: либо разные знаки, либо вообще ничего - исключение.

Ну, с методом equals то же самое почти. Только там он Object принимает, так что можно обойтись без выбросов исключений и просто выдавать false, если объекты принадлежат разным классам.

Время почти полностью отследил, вот прямо совсем немного не хватило терпения. Опять же повторюсь, очень хорошо помогает: постоянно идет отсчет времени, не дает долго лежать и смотреть в потолок.

Короче, в целом, по части организации лучше, чем когда-либо, но не очень хорошо по продуктивности (в рамках отдельной активности), и это удручает: я ведь специально перед этим днем нормально поспал (7.5 часов).

завтра
- доделаю анализ текста по английскому
- опять кр по алгебре
- архиватор
- рисование
- повторение
- теория полей
- задачки из CLRS
extra:
Core Java

этот дневник верно скатывается в какое-то совсем уж уныние. Я бы подобное читать не стал, брр. Но мне просто особо и не о чем писать: ничего интересного или выходящего за рамки привычного не происходит. Вот даже музыку не знаю, какую сюда впихнуть: не вспоминается ничего стоящего. Тем не менее, есть потребность в том, чтобы регулярно сюда отписываться
1541456821502.jpg72 Кб, 650x650
вот так и живем PoppyFanboy !VTLpv6lgGw 122 229508
Я потратил полтора дня на то, чтобы разобраться с тем, как решать задания на Жорданову форму и больше ничего не сделал (ну, анализ текста по английскому закончил, но там совсем немного оставалось, так что не считается). Просто сидел и очень-очень много тупил, не знаю, почему это вызвало такие сложности. Но теперь я в теории знаю, как привести матрицу линейного оператора к Жордановой форме, разве это не прекрасно? В теории, потому что мне ни разу не удавалось нормально досчитать жорданов базис: постоянно либо ошибки в вычислениях, либо еще что-то. Очень много перемножений матриц, вычислений размерностей подпространств и решений систем линейных уравнений и да, этот жорданов базис мне никогда не пригодится

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

Что ж, план на три дня я не выполнил, но ничего, я верю в себя и с нетерпением жду прекрасный завтрашний день, который уже вот-вот наступит, а ещё нисколечки не жалею о слитых на какую-то ерунду последних двух выходных, ведь их уже не вернуть.

Но я обязательно постараюсь не допускать таких ошибок. В частности:
- не можешь что-то сделать на протяжении часа - иди полежи, а после займись чем-нибудь другим

- какой смысл ложиться поздно относительно своего режима сна, если все равно не сможешь проснуться после <6 часов сна? Лучше иди спать сейчас, а доделаешь все уже утром

- слушать что-то с человеческим голосом на фоне - плохая идея, у тебя ведь в голове уже есть один

- и вообще, если что-то не получилось сегодня, значит, получится завтра

А вот и завтра:
- написать контрольную по алгебре так, чтобы потом не переписывать
- теория полей
- повторение
- рисование
- задачки из CLRS
- архиватор
extra:
- разбор лекций по мат. анализу
- написать план на ближайшую неделю

А я уже начал беспокоиться о том, что что-то понял. Нет, конечно же, нет, еще слишком рано. Может быть, только если в январе и то не факт
1541456821502.jpg72 Кб, 650x650
вот так и живем PoppyFanboy !VTLpv6lgGw 122 229508
Я потратил полтора дня на то, чтобы разобраться с тем, как решать задания на Жорданову форму и больше ничего не сделал (ну, анализ текста по английскому закончил, но там совсем немного оставалось, так что не считается). Просто сидел и очень-очень много тупил, не знаю, почему это вызвало такие сложности. Но теперь я в теории знаю, как привести матрицу линейного оператора к Жордановой форме, разве это не прекрасно? В теории, потому что мне ни разу не удавалось нормально досчитать жорданов базис: постоянно либо ошибки в вычислениях, либо еще что-то. Очень много перемножений матриц, вычислений размерностей подпространств и решений систем линейных уравнений и да, этот жорданов базис мне никогда не пригодится

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

Что ж, план на три дня я не выполнил, но ничего, я верю в себя и с нетерпением жду прекрасный завтрашний день, который уже вот-вот наступит, а ещё нисколечки не жалею о слитых на какую-то ерунду последних двух выходных, ведь их уже не вернуть.

Но я обязательно постараюсь не допускать таких ошибок. В частности:
- не можешь что-то сделать на протяжении часа - иди полежи, а после займись чем-нибудь другим

- какой смысл ложиться поздно относительно своего режима сна, если все равно не сможешь проснуться после <6 часов сна? Лучше иди спать сейчас, а доделаешь все уже утром

- слушать что-то с человеческим голосом на фоне - плохая идея, у тебя ведь в голове уже есть один

- и вообще, если что-то не получилось сегодня, значит, получится завтра

А вот и завтра:
- написать контрольную по алгебре так, чтобы потом не переписывать
- теория полей
- повторение
- рисование
- задачки из CLRS
- архиватор
extra:
- разбор лекций по мат. анализу
- написать план на ближайшую неделю

А я уже начал беспокоиться о том, что что-то понял. Нет, конечно же, нет, еще слишком рано. Может быть, только если в январе и то не факт
нытье sage PoppyFanboy !VTLpv6lgGw 123 229661
>>229508

>теория полей


есть

>написать контрольную по алгебре так, чтобы потом не переписывать


скорее всего, не придется. Но это было тяжко: по невнимательности возвел в квадрат не ту матрицу в процессе решения какого-то задания + еще куча арифметических ошибок, которые приходилось искать и исправлять. И это хорошо еще, что я додумался сначала найти A2, а потом уже считать необходимые мне для решения (A - 2En)2 и (A - 3En)2 как A2 - 4A + 4En и A2 - 6A + 9En. Без этой оптимизации я бы вряд ли успел.

>архиватор


есть, но пока что очень слабо вырисовывается общая структура

Остальное не делал.

Завтра:
- сходить сдать анализы для физкультуры в универе зачем им они нужны, понятия не имею
- домашнее задание по программированию (для университета)
- решение задачек по матанализу
- повторение
- рисование
- теория полей
extra:
- архиватор
- план на неделю

это вроде много, но, с другой стороны, у меня почти весь день свободен. Короче, это последняя попытка сделать много всего за один день, и если у меня ничего не получится, то я буду планировать меньше дел на один день, но стараться распределять дела на неделе и ставить конкретные дедлайны. Мне уже порядком надоело, что я уже который раз что-то планирую, но выполнить не успеваю и половину. Да, на самом деле, я вне зависимости от результата постараюсь что-нибудь поменять.

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

Меня еще очень сильно расстраивает, что на данный момент учеба меня только обременяет (тупая ненужная математика, когда там она уже закончится? да, да, меня никто не заставлял сюда поступать, но и выбирать мне особо не из чего было) даже при том, что я довольно сильно отстаю по лекциям по всем предметам. И вот это чувство груза, что когда-нибудь мне придется со всем этим разбираться, немного давит. Сейчас у меня в голове крутится идея на время забить на все, кроме университетских штук, и где-нибудь за полторы недели затрайхардить все предметы. Но это же максимально тупое решение: я, очевидно, в короткие сроки не успею разобрать весь материал, который упустил, это все растянется, и у меня не будет времени заниматься тем, чем мне нравится. Опять я попался в ту же ловушку, что и в прошлом году. Не знаю, короче, что делать, наверное, просто постараюсь эффективнее использовать время.

Вот сейчас расписал все это, и весь энтузиазм куда-то улетучился.

Не знаю, начал замечать, что желание что-то делать появляется только ближе к ночи. Скорее всего, из-за того, что ночью просто тише, и ничего не отвлекает.

А утром постоянно просыпаюсь в сильном упадке: и это не только лютая сонливость, которая более-менее исправляется душем, но и просто нежелание делать что-либо. Любая утренняя рутина вызывает исключительно неприязнь: даже душ и утренний завтрак.

Это все какая-то хуцня

Лладно, еще раз.
нытье sage PoppyFanboy !VTLpv6lgGw 123 229661
>>229508

>теория полей


есть

>написать контрольную по алгебре так, чтобы потом не переписывать


скорее всего, не придется. Но это было тяжко: по невнимательности возвел в квадрат не ту матрицу в процессе решения какого-то задания + еще куча арифметических ошибок, которые приходилось искать и исправлять. И это хорошо еще, что я додумался сначала найти A2, а потом уже считать необходимые мне для решения (A - 2En)2 и (A - 3En)2 как A2 - 4A + 4En и A2 - 6A + 9En. Без этой оптимизации я бы вряд ли успел.

>архиватор


есть, но пока что очень слабо вырисовывается общая структура

Остальное не делал.

Завтра:
- сходить сдать анализы для физкультуры в универе зачем им они нужны, понятия не имею
- домашнее задание по программированию (для университета)
- решение задачек по матанализу
- повторение
- рисование
- теория полей
extra:
- архиватор
- план на неделю

это вроде много, но, с другой стороны, у меня почти весь день свободен. Короче, это последняя попытка сделать много всего за один день, и если у меня ничего не получится, то я буду планировать меньше дел на один день, но стараться распределять дела на неделе и ставить конкретные дедлайны. Мне уже порядком надоело, что я уже который раз что-то планирую, но выполнить не успеваю и половину. Да, на самом деле, я вне зависимости от результата постараюсь что-нибудь поменять.

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

Меня еще очень сильно расстраивает, что на данный момент учеба меня только обременяет (тупая ненужная математика, когда там она уже закончится? да, да, меня никто не заставлял сюда поступать, но и выбирать мне особо не из чего было) даже при том, что я довольно сильно отстаю по лекциям по всем предметам. И вот это чувство груза, что когда-нибудь мне придется со всем этим разбираться, немного давит. Сейчас у меня в голове крутится идея на время забить на все, кроме университетских штук, и где-нибудь за полторы недели затрайхардить все предметы. Но это же максимально тупое решение: я, очевидно, в короткие сроки не успею разобрать весь материал, который упустил, это все растянется, и у меня не будет времени заниматься тем, чем мне нравится. Опять я попался в ту же ловушку, что и в прошлом году. Не знаю, короче, что делать, наверное, просто постараюсь эффективнее использовать время.

Вот сейчас расписал все это, и весь энтузиазм куда-то улетучился.

Не знаю, начал замечать, что желание что-то делать появляется только ближе к ночи. Скорее всего, из-за того, что ночью просто тише, и ничего не отвлекает.

А утром постоянно просыпаюсь в сильном упадке: и это не только лютая сонливость, которая более-менее исправляется душем, но и просто нежелание делать что-либо. Любая утренняя рутина вызывает исключительно неприязнь: даже душ и утренний завтрак.

Это все какая-то хуцня

Лладно, еще раз.
sage PoppyFanboy !VTLpv6lgGw 124 229805
весь день очень сильно клонило в сон, иногда настолько сильно, что глаза сами закрывались. Иногда бывает такое, не знаю из-за чего конкретно, но как правило недосып тут ни при чем. Что интересно, ближе к ночи сонливость спала.

Наверное, потерял довольно много времени, не замерял. Сделал большую часть из запланированного.

Не знаю точно, что буду делать завтра, там вроде надо какое-то задание по алгебре сделать и еще что-то по диффурам. Не знаю, что там по времени останется.

Какие-то конкретные дедлайны для чего-то долгосрочного все же нет смысла ставить. Расписал план на неделю касательно того, что мне надо пройти по лекциям.

https://youtu.be/8SF7yncly6U
sage PoppyFanboy !VTLpv6lgGw 125 229941
Вполне неплохо так поспал в транспорте: по пути на пары и обратно. Правда, конечно, поза не самая удобная: в положении сидя и облокотившись плечом об окно и во рту почему-то постоянно пересыхает, но это мелочи. Было бы, наверное, здорово каждый день иметь эти дополнительные суммарно минут 50 сна, но не всегда удается сесть у окна, с утра так вообще весь автобус забит: толком даже встать негде.

В связи с небольшим бустом от дополнительного сна думал даже, что сегодня смогу по приезде домой сразу же начать заниматься всякими штуками, но нет: два часа стабильно уходят на поесть, полежать и посмотреть в потолок и прочие обязательные ритуалы, предшествующие хоть сколько-нибудь полезной деятельности.

Сегодня большую часть времени разбирался с теорией по матанализу. Еще срисовал люминесцентную лампочку (такую, которая спиралькой): немного зафейлился с пропорциями + она получилась слишком вытянутой к верху. В общем, результатом я не сильно удовлетворен, но сам процесс рисования не с фото, а с натуры мне понравился. Надо будет чаще так делать.

И да, лампочка у меня перегорает не первая, а третья, из шести, но мне слишком лень идти в магазин за новыми, поэтому живу в небольшом полумраке.

В остальном: очень много отвлекался, все делал максимально медленно. Время не отслеживал.

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

Видел сегодня сгоревший частный домик: от него остались только две печные трубы, торчащие из вороха обуглившихся обломков здания, и это прямо очень интересно выглядит: как будто часть скелета.

Надо, может быть, вести записи касательно продолжительности сна, потому что я вот чет не помню, когда в последний раз спал полноценные для меня 7.5 часов.
тема PoppyFanboy !VTLpv6lgGw 126 230178
Не смог заставить себя делать что-либо сразу же по приходе домой. Но все же немного порисовал и попытался поразбираться с матаном (не очень успешно).

Изначально хотел сегодня срисовать с натуры открывашку для консервов, и я уже было положил ее рядом с листом бумаги, но что-то меня дернуло перед этим срисовать какого-нибудь жука (паука) с фото. Я его даже чистой стороны листа не удостоил: начал рисовать там же, где, если можно так сказать, разминался всякими эллипсами и немного кубами. В итоге я провозился с ним так много времени, что уже забил на открывашку. Алсо сюда же прикреплю еще одного жука (муравья, вроде двухдневной давности) и вчерашнюю лампочку (ну вот, о чем я говорил, колба получилась какой-то вытянутой формы, meh).

В матанализе я чего-то застрял и просидел пару часов, абсолютно безрезультатно залипая в чужой конспект.

На самом деле, для вечера пятницы довольно неплохо, если учесть, что я обычно вообще ничем не занимаюсь в это время.

Планы на завтра составлю завтра же с утра: сейчас чет я слабо соображаю. Точно буду разбирать теорию полей, рисовать и дальше ковырять архиватор. Может быть, еще что-нибудь поделаю. Еще вроде там к понедельнику надо будет сделать что-то по английскому, надо будет посмотреть, очень уж не хочется писать какой-то там тест в конце семестра или еще что-то для получения зачета.

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

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

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

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

https://youtu.be/HZik4fKw3G0
тема PoppyFanboy !VTLpv6lgGw 126 230178
Не смог заставить себя делать что-либо сразу же по приходе домой. Но все же немного порисовал и попытался поразбираться с матаном (не очень успешно).

Изначально хотел сегодня срисовать с натуры открывашку для консервов, и я уже было положил ее рядом с листом бумаги, но что-то меня дернуло перед этим срисовать какого-нибудь жука (паука) с фото. Я его даже чистой стороны листа не удостоил: начал рисовать там же, где, если можно так сказать, разминался всякими эллипсами и немного кубами. В итоге я провозился с ним так много времени, что уже забил на открывашку. Алсо сюда же прикреплю еще одного жука (муравья, вроде двухдневной давности) и вчерашнюю лампочку (ну вот, о чем я говорил, колба получилась какой-то вытянутой формы, meh).

В матанализе я чего-то застрял и просидел пару часов, абсолютно безрезультатно залипая в чужой конспект.

На самом деле, для вечера пятницы довольно неплохо, если учесть, что я обычно вообще ничем не занимаюсь в это время.

Планы на завтра составлю завтра же с утра: сейчас чет я слабо соображаю. Точно буду разбирать теорию полей, рисовать и дальше ковырять архиватор. Может быть, еще что-нибудь поделаю. Еще вроде там к понедельнику надо будет сделать что-то по английскому, надо будет посмотреть, очень уж не хочется писать какой-то там тест в конце семестра или еще что-то для получения зачета.

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

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

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

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

https://youtu.be/HZik4fKw3G0
pic.jpg292 Кб, 644x909
нытье нытье нытье PoppyFanboy !VTLpv6lgGw 127 230269
Опять ничего не делал. Только поколупал архиватор (теперь оно компилируется, вау)

Все же планы надо составлять с вечера. А если слишком много свободного времени, то надо вдобавок еще и составлять отдельное подробное расписание с какими-то микродедлайнами.

Завтра:
- подготовиться к чему-то там по английскому для универа
- поразбирать лекции по геометрии (без доказательств)
- теория полей
- разобрать контрольную по диффурам

- повторение пройденного (опять постоянно это откладываю, хотя это не занимает много времени, и вообще надо бы делать каждый день)
- clrs
- рисование

На неделю (до 18/11 включительно) (тут не все, но то, что надо 100% сделать)
- разобрать 7 тем в теории полей
- пройти минимум 1.5 главы в Core Java
- решить 3 проблем сета из 6.042J
- продвинуться в CLRS
- продвинуться в разборе лекций по алгебре, геометрии и матану (и параллельно начать понемногу начать готовиться к экзаменам по ним)
- в архиваторе реализовать создание архивов (пока что без сжатия) на диске (сейчас только проработана какая-то общая структура и почти реализован механизм, с помощью которого будут разрешаться конфликты имен при добавлении файлов в архив)

Не знаю, что из этого всего выйдет, пока что не получается вообще почти ничего: прошло почти 4 месяца, а у меня до сих пор все так же идет все в том же вялотекущем режиме: нет как никаких вспышек продуктивности, так и дисциплины. И так изо дня в день: что-то делаю, что-то не делаю, что-то вообще забывается, ставлю цели на следующий день, и все опять по кругу. Я уже дошел до того, что иногда перед сном бегло листаю всякие статьи по теме продуктивности)0), но so far ничего интересного оттуда не почерпнул. Конечно, я не буду бросать пытаться что-то сделать с этим, но мне больше и ничего не остается, так что это не имеет никакой ценности. Возможно, это все отчасти потому, что конкретно сейчас мне комфортно, никогда не было хуже, и нет осознания того, что когда-нибудь в будущем станет сильно хуже.

https://www.youtube.com/watch?v=nAfuQAq5T54
pic.jpg292 Кб, 644x909
нытье нытье нытье PoppyFanboy !VTLpv6lgGw 127 230269
Опять ничего не делал. Только поколупал архиватор (теперь оно компилируется, вау)

Все же планы надо составлять с вечера. А если слишком много свободного времени, то надо вдобавок еще и составлять отдельное подробное расписание с какими-то микродедлайнами.

Завтра:
- подготовиться к чему-то там по английскому для универа
- поразбирать лекции по геометрии (без доказательств)
- теория полей
- разобрать контрольную по диффурам

- повторение пройденного (опять постоянно это откладываю, хотя это не занимает много времени, и вообще надо бы делать каждый день)
- clrs
- рисование

На неделю (до 18/11 включительно) (тут не все, но то, что надо 100% сделать)
- разобрать 7 тем в теории полей
- пройти минимум 1.5 главы в Core Java
- решить 3 проблем сета из 6.042J
- продвинуться в CLRS
- продвинуться в разборе лекций по алгебре, геометрии и матану (и параллельно начать понемногу начать готовиться к экзаменам по ним)
- в архиваторе реализовать создание архивов (пока что без сжатия) на диске (сейчас только проработана какая-то общая структура и почти реализован механизм, с помощью которого будут разрешаться конфликты имен при добавлении файлов в архив)

Не знаю, что из этого всего выйдет, пока что не получается вообще почти ничего: прошло почти 4 месяца, а у меня до сих пор все так же идет все в том же вялотекущем режиме: нет как никаких вспышек продуктивности, так и дисциплины. И так изо дня в день: что-то делаю, что-то не делаю, что-то вообще забывается, ставлю цели на следующий день, и все опять по кругу. Я уже дошел до того, что иногда перед сном бегло листаю всякие статьи по теме продуктивности)0), но so far ничего интересного оттуда не почерпнул. Конечно, я не буду бросать пытаться что-то сделать с этим, но мне больше и ничего не остается, так что это не имеет никакой ценности. Возможно, это все отчасти потому, что конкретно сейчас мне комфортно, никогда не было хуже, и нет осознания того, что когда-нибудь в будущем станет сильно хуже.

https://www.youtube.com/watch?v=nAfuQAq5T54
Без имени-1.png9 Кб, 544x204
Рируру !!gYmpHned/k 128 230346
>>230269
Постоянно встречаю такой паттерн как у других, так и у себя, и это не очень хорошая идея.
Вот в этом прекрасном бложике есть объяснение с похожим примером:
https://randomascii.wordpress.com/2018/10/15/making-windows-slower-part-2-process-creation/

>It turns out that Application Verifier likes to create log files. Never mind that nobody ever looks at these log files, it creates them just in case. And these log files need to have unique names. And I’m sure it seemed like a good idea to just give these log files numerically ascending names like gomacc.exe.0.dat, gomacc.exe.1.dat, and so on.



>To get numerically ascending names you need to find what number you should use next, and the simplest way to do that is to just try the possible names/numbers until you find something that hasn’t been used. That is, try to create a new file called gomacc.exe.0.dat and if that already exists then try gomacc.exe.1.dat, and so on.



>It turns out that if you do a linear search for an unused file name whenever you create a process then launching N processes takes O(N^2) operations. A good rule of thumb is that O(N^2) algorithms are too slow unless you can guarantee that N always stays quite small.



>A typical build of Chrome requires running the compiler about 30,000 times. Each launch of the compiler requires scanning over the previously created N log files, at 0.08 ms for each existence check. The linear search for the next available log file name means that launching N processes takes (N^2)/2 file existence checks, so 30,000 × 30,000 / 2 which is 450 million. Since each file existence check takes 0.08 ms that’s 36 million ms, or 36,000 seconds. That means that my Chrome build, which normally takes five to ten minutes, was going to take an additional ten hours.



Вместо линейного следует использовать «бинарный поиск в неизвестном» (https://en.wikipedia.org/wiki/Exponential_search).
PoppyFanboy !VTLpv6lgGw 129 230491
>>230346
❤️

Ни на что не хватает времени, такое ощущение, что все значительно ускорилось, а я остался медленным. Вот, например, вчера не заметил, как просидел до пяти утра (при том, что проснулся в тот день в 10 утра), разбираясь с заданиями из контрольной по диффурам. И там вроде ничего особенного не было, я ни на чем подолгу не задерживался, но просто в какой-то момент я посмотрел на часы, ожидая там увидеть, ну, максимум третий час ночи, но нет, без пяти пять. Почти то же самое сегодня: опять решал диффуры, потом сел немного порисовать, все, время вышло. Все же надо обязательно делать трекинг времени, даже если чувствуешь, что все в порядке, и ты вполне в нормальном темпе делаешь что-то там.

Тревога по поводу необходимости посещения физкультуры в универе отменяется: схема с записью в листочек вроде как снова работает (правда, я еще не дождался начисления баллов, но я думаю, все будет в порядке, и можно благополучно забить на этот предмет).

В обшем, да, в воскресенье я готовился к английскому, решал диффуры, прошел 1.5 темы по теории полей и немного поразбирал геометрию - довольно уныло. Сегодня сдал тест по английскому (я очень надеюсь, что его зачтут, очень хочется зачет автоматом, потому что иначе мне придется в конце семестра писать какую-то итоговую штуку, и я не совсем уверен, что осилю ее), пытался понять, как решать задачи на изоклины в диффурах (никак, это невозможно: тут просто сочетание интуиции и умения проводить кучу приближенных вычислений, я не понимаю, почему вообще это вошло в контрольную, таким должны заниматься компьютеры, а не человеки; завтра надо будет переписывать эту задачу, и я более чем уверен, что опять нарисую все неправильно), срисовал открывашку

Завтра постараюсь поразбирать теорию полей, частично сделать домашнее задание по программированию, порисовать, сделать уже, наконец, задания из clrs.

Так рано стало темнеть. Как-то мне некомфортно находиться на улице в такую темноту: неосвещенные участки становятся враждебными, а освещенные выглядят как-то неопрятно что ли (не знаю, как объяснить, поэтому просто приложу фотку; скорее всего, это из-за теплого уличного освещения, но не знаю, насколько лучше было бы использовать лампы холодного света).
PoppyFanboy !VTLpv6lgGw 129 230491
>>230346
❤️

Ни на что не хватает времени, такое ощущение, что все значительно ускорилось, а я остался медленным. Вот, например, вчера не заметил, как просидел до пяти утра (при том, что проснулся в тот день в 10 утра), разбираясь с заданиями из контрольной по диффурам. И там вроде ничего особенного не было, я ни на чем подолгу не задерживался, но просто в какой-то момент я посмотрел на часы, ожидая там увидеть, ну, максимум третий час ночи, но нет, без пяти пять. Почти то же самое сегодня: опять решал диффуры, потом сел немного порисовать, все, время вышло. Все же надо обязательно делать трекинг времени, даже если чувствуешь, что все в порядке, и ты вполне в нормальном темпе делаешь что-то там.

Тревога по поводу необходимости посещения физкультуры в универе отменяется: схема с записью в листочек вроде как снова работает (правда, я еще не дождался начисления баллов, но я думаю, все будет в порядке, и можно благополучно забить на этот предмет).

В обшем, да, в воскресенье я готовился к английскому, решал диффуры, прошел 1.5 темы по теории полей и немного поразбирал геометрию - довольно уныло. Сегодня сдал тест по английскому (я очень надеюсь, что его зачтут, очень хочется зачет автоматом, потому что иначе мне придется в конце семестра писать какую-то итоговую штуку, и я не совсем уверен, что осилю ее), пытался понять, как решать задачи на изоклины в диффурах (никак, это невозможно: тут просто сочетание интуиции и умения проводить кучу приближенных вычислений, я не понимаю, почему вообще это вошло в контрольную, таким должны заниматься компьютеры, а не человеки; завтра надо будет переписывать эту задачу, и я более чем уверен, что опять нарисую все неправильно), срисовал открывашку

Завтра постараюсь поразбирать теорию полей, частично сделать домашнее задание по программированию, порисовать, сделать уже, наконец, задания из clrs.

Так рано стало темнеть. Как-то мне некомфортно находиться на улице в такую темноту: неосвещенные участки становятся враждебными, а освещенные выглядят как-то неопрятно что ли (не знаю, как объяснить, поэтому просто приложу фотку; скорее всего, это из-за теплого уличного освещения, но не знаю, насколько лучше было бы использовать лампы холодного света).
sage PoppyFanboy !VTLpv6lgGw 130 230612
Я малость переоценил себя. Сегодня только упражнения из CLRS и переписанная контрольная по диффурам. Пришел домой, и вообще ничего не хотелось делать. Вдобавок ко всему еще и опять поздно ложусь спать.
sage PoppyFanboy !VTLpv6lgGw 131 230614
Мда, как-то слишком сильно вымотался за сегодня. Скорее всего, из-за того, что мало сплю
PoppyFanboy !VTLpv6lgGw 132 230743
Сегодня большую часть времени потратил на домашнее задание по программированию для универа. Еще успел немного порисовать и разобрать одну тему из теории полей. Сегодня даже не особо много занимался ничегонеделанием, хоть и под конец дня забил на трекинг времени.

Третья картинка - вот зачем надо было просто так вбрасывать вот этот факт во время доказательства? Мало того, что это нигде далее не используется, так еще и непонятно, насколько это правда: я вообще не понимаю, откуда это взялось: касательно степени аннулирующего многочлена было только то, что его степень меньше или равна степени расширения (в данном случае степени векторного пространства Z/pтZ над множеством скаляров Z/pZ), и я даже, как эту верхнюю границу подсчитать, не знаю, не говоря уже о том, чтобы точно определить степень многочлена g. Ненавижу.

https://www.youtube.com/watch?v=xw4FiiTRJac

Эти микстейпы просто нечто. Нравятся все треки прямо почти от начала и до конца
https://www.youtube.com/watch?v=UQzktaWylZI
https://www.youtube.com/watch?v=LqAIMJq4Kvs&t=2432s

https://www.youtube.com/watch?v=sYnmBNyIKX4
picture.jpg325 Кб, 1637x1437
PoppyFanboy !VTLpv6lgGw 133 230952
Вчера под конец дня стало настолько плохо, что вообще ничего не мог делать (только помучил сложное задание на изоклины y' = x/y^2 которое мне нужно сдать к следующей пятнице), в итоге лег спать где-то в одиннадцать вечера и довольно быстро заснул (не помню уже, когда я ложился спать так рано). Сегодня прошел одну новую тему по теории полей, поразбирал лекции по матанализу, немного подумал над архиватором + вроде переделал линейный поиск в exponential search там, где нужно найти имя файла которое еще не было использовано НовыйФайл(1), НовыйФайл(2), ...

Сегодня снова была неудачная попытка начать делать что-либо сразу по приходе домой: не получается, стабильно в никуда уходят 1.5 часа перед тем, как я начну заниматься чем-нибудь полезным.

Меня в конец достало то, что я постоянно что-то слушаю на фоне и это снижает мой уровень внимания, поэтому я.. выбросил свои наушники (затычки) за стиральную машину. Это звучит максимально глупо и по-детски, но в моем случае это имеет смысл: во-первых, мне слишком лень лезть за стиральную машину, чтобы их достать щель достаточно широкая, чтобы закинуть туда что-нибудь, но слишком узкая, чтобы туда пролезла даже моя относительно тонкая рука, вдобавок к этому машинка довольно тяжелая, и мне не очень хочется напрягаться, чтобы ее передвинуть, во-вторых, у меня нет динамиков для пк, так что с него я не смогу ничего послушать/посмотреть, в-третьих, с телефона в фоновом режиме и без наушников слушать/смотреть что-либо просто неудобно. Посмотрим, насколько меня хватит. Сам вред от прослушивания фонового контента, будь то музыка (в том числе классика) или человеческая речь, неоспорим и многократно подтвержден, но этого факта почему-то недостаточно для того, чтобы я ограничил себя в потреблении контента в фоновом режиме без устранения какой-либо возможности потреблять этот самый контент

Пойду опять сегодня спать пораньше.

жаль, что я не могу это сейчас послушать
https://www.youtube.com/watch?v=htTitFh8uYE
https://www.youtube.com/watch?v=nEo9mEXFJ6U&t=53s
picture.jpg325 Кб, 1637x1437
PoppyFanboy !VTLpv6lgGw 133 230952
Вчера под конец дня стало настолько плохо, что вообще ничего не мог делать (только помучил сложное задание на изоклины y' = x/y^2 которое мне нужно сдать к следующей пятнице), в итоге лег спать где-то в одиннадцать вечера и довольно быстро заснул (не помню уже, когда я ложился спать так рано). Сегодня прошел одну новую тему по теории полей, поразбирал лекции по матанализу, немного подумал над архиватором + вроде переделал линейный поиск в exponential search там, где нужно найти имя файла которое еще не было использовано НовыйФайл(1), НовыйФайл(2), ...

Сегодня снова была неудачная попытка начать делать что-либо сразу по приходе домой: не получается, стабильно в никуда уходят 1.5 часа перед тем, как я начну заниматься чем-нибудь полезным.

Меня в конец достало то, что я постоянно что-то слушаю на фоне и это снижает мой уровень внимания, поэтому я.. выбросил свои наушники (затычки) за стиральную машину. Это звучит максимально глупо и по-детски, но в моем случае это имеет смысл: во-первых, мне слишком лень лезть за стиральную машину, чтобы их достать щель достаточно широкая, чтобы закинуть туда что-нибудь, но слишком узкая, чтобы туда пролезла даже моя относительно тонкая рука, вдобавок к этому машинка довольно тяжелая, и мне не очень хочется напрягаться, чтобы ее передвинуть, во-вторых, у меня нет динамиков для пк, так что с него я не смогу ничего послушать/посмотреть, в-третьих, с телефона в фоновом режиме и без наушников слушать/смотреть что-либо просто неудобно. Посмотрим, насколько меня хватит. Сам вред от прослушивания фонового контента, будь то музыка (в том числе классика) или человеческая речь, неоспорим и многократно подтвержден, но этого факта почему-то недостаточно для того, чтобы я ограничил себя в потреблении контента в фоновом режиме без устранения какой-либо возможности потреблять этот самый контент

Пойду опять сегодня спать пораньше.

жаль, что я не могу это сейчас послушать
https://www.youtube.com/watch?v=htTitFh8uYE
https://www.youtube.com/watch?v=nEo9mEXFJ6U&t=53s
picture.jpg186 Кб, 1000x1000
PoppyFanboy !VTLpv6lgGw 134 231076
>>230743
Окей, я там был не прав, все же то, что степень минимального аннулятора элемента θ (θ порождает K*) над полем k равна (K : k), имеет место (k - подполе K). Для доказательства можно применить теорему о том, что k(θ) изоморфно факторкольцу k[x]/<g>, где <g> - циклическая группа порожденная минимальным аннулятором g. Тут получается, что k(θ) = K, а k[x]/<g> состоит из классов эквивалентности, определяемых многочленами из k[x] степени меньшей, чем степень многочлена g. Если deg(g) = m, то |k[x]/<g>| = |k|^m. Там еще была теорема о том, что |K| = |k|^(K : k), и из этого мы получаем: |k|^(K : k) = |K| = |k(θ)| = |k[x]/<g>| = |k|^m, a-and we're done: m = (K : k). Но это все не отменяет того, что в том месте в том доказательстве упоминать это было не к чему поймал сейчас себя на том, что сначала написал "ни к чему", вот это да

Сегодня немного поделал архиватор: все же отказался от идеи выбрасывать исключения, в которых содержатся ArrayList, состоящий из ссылок на объекты конфликтов имен файлов, которые нужно решить. Это все выродилось в какую-то странную оболочку для ArrayList-а, так что я убрал это исключение отовсюду, и теперь просто возвращаю сам список с объектами-конфликтами. Пока что еще вот не определился с распределением классов по пакетам: все как-то получилось слишком сильно связанным друг с другом.

Порешал матанализ: в основном двойные/тройные интегралы. С двойными все более-менее легко, на плоскости нарисовать область, по которой производится интегрирование, не составляет особого труда, но вот с тройными все несколько сложнее: тут приходится рисовать пересечения плоскостей в трехмерном пространстве (или решать неравенства, но просто удобнее иметь какой-нибудь наглядный референс).

+Немного теории полей

Наушники все же достал, мда, все же иногда приходится их использовать для изоляции от внешних шумов

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

https://www.youtube.com/watch?v=dTnYL0ZZt2w
https://www.youtube.com/watch?v=kU--go_MHnk
https://www.youtube.com/watch?v=HKY38Nx8dSo
https://www.youtube.com/watch?v=Wc-Bi_FxG68
picture.jpg186 Кб, 1000x1000
PoppyFanboy !VTLpv6lgGw 134 231076
>>230743
Окей, я там был не прав, все же то, что степень минимального аннулятора элемента θ (θ порождает K*) над полем k равна (K : k), имеет место (k - подполе K). Для доказательства можно применить теорему о том, что k(θ) изоморфно факторкольцу k[x]/<g>, где <g> - циклическая группа порожденная минимальным аннулятором g. Тут получается, что k(θ) = K, а k[x]/<g> состоит из классов эквивалентности, определяемых многочленами из k[x] степени меньшей, чем степень многочлена g. Если deg(g) = m, то |k[x]/<g>| = |k|^m. Там еще была теорема о том, что |K| = |k|^(K : k), и из этого мы получаем: |k|^(K : k) = |K| = |k(θ)| = |k[x]/<g>| = |k|^m, a-and we're done: m = (K : k). Но это все не отменяет того, что в том месте в том доказательстве упоминать это было не к чему поймал сейчас себя на том, что сначала написал "ни к чему", вот это да

Сегодня немного поделал архиватор: все же отказался от идеи выбрасывать исключения, в которых содержатся ArrayList, состоящий из ссылок на объекты конфликтов имен файлов, которые нужно решить. Это все выродилось в какую-то странную оболочку для ArrayList-а, так что я убрал это исключение отовсюду, и теперь просто возвращаю сам список с объектами-конфликтами. Пока что еще вот не определился с распределением классов по пакетам: все как-то получилось слишком сильно связанным друг с другом.

Порешал матанализ: в основном двойные/тройные интегралы. С двойными все более-менее легко, на плоскости нарисовать область, по которой производится интегрирование, не составляет особого труда, но вот с тройными все несколько сложнее: тут приходится рисовать пересечения плоскостей в трехмерном пространстве (или решать неравенства, но просто удобнее иметь какой-нибудь наглядный референс).

+Немного теории полей

Наушники все же достал, мда, все же иногда приходится их использовать для изоляции от внешних шумов

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

https://www.youtube.com/watch?v=dTnYL0ZZt2w
https://www.youtube.com/watch?v=kU--go_MHnk
https://www.youtube.com/watch?v=HKY38Nx8dSo
https://www.youtube.com/watch?v=Wc-Bi_FxG68
пора спать PoppyFanboy !VTLpv6lgGw 135 231515
Ничего сверхинтересного за последние три дня: воскресенье потратил в никуда, вчера в понедельник весь день (то, что осталось после пар) решал вроде как простую задачку по линейной алгебре / аналитической геометрии, но сильно осложненную очень-очень плохими исходными данными: в процессе решения постоянно вылезали корни, суммы корней (которые в итоге не сводились ни к чему хорошему, никакие группировки, домножения на сопряженное, чтобы получалась разность квадратов, не работали). Кое-как дорешал, но для некоторых подпунктов даже не выписал конечный ответ: ну слишком он длинный и запутанный. Вообще не понимаю, зачем давать задачки на вычисления с конкретными входными данными, если в результате в ответе получается что-то отличное от красивой дроби, возможно, домноженной на квадратный корень из чего-нибудь. Если ответ красивый, то его еще можно использовать в дальнейших вычислениях и это может быть потенциально полезно, но если получается не сокращаемое непонятно что с корнями в подкоренных выражениях, то это вообще невозможно поддерживать, такое должны считать компьютеры.

Мой режим дня по-прежнему продолжает скакать из стороны в сторону: то я засыпаю в полночь, то в пять утра. Вот сегодня как раз пришлось лечь спать в пять утра и проснуться уже в половине восьмого даже не столько, чтобы успеть на пары, а чтобы поправить режим.

Сегодня тоже ничего интересного, решал задачки по матанализу: пока что так себе получаются эти кратные интегралы (или как они там называются? Ну, короче, когда у нас задана область X в R^n, мы берем последовательность разбиений, мелкость которых стремится к нулю, и еще последовательность наборов точек (таких наборов, что в каждой "клетке" разбиения по одной точке), и тогда интегралом по области X будет предел последовательности интегральных сумм Sum{f(ei) * u(xi); i = 1 ... N} при мелкости разбиений, по которым производится суммирование, стремящейся к нулю (ei - точки, находящиеся в клетках разбиения, u - мера Жордана, для R^2 - мера Жордана - это площадь, а для R^3 - объем); блин, как-то вообще непонятно получилось, один из тех случаев, когда описать что-то с помощью математических символов гораздо проще, чем на пальцах. Но, если совсем интуитивно, то для случая с R^2 мы просто очень-очень мелко разбиваем область интегрирования на условные квадратики, в каждом квадратике в некоторой его точке считаем заданную по условию функцию f(x, y), а затем тупо суммируем площади всех квадратиков, домноженные на значения функции внутри какой-то точки квадрата. Если изобразить данную нам по условию функцию f(x, y) как график в трехмерном пространстве, то получится, что вот этот интеграл - это объем трехмерной фигуры, находящейся под графиком).

Прервал свой почти честный двухмесячный ноугеймз и поставил себе, прежде всего, гениальнейшую игру "Spooky Castle: The Adventures of Kid Mystic". Не разбираюсь в жанрах игр (наверное, это экшн рпг, хотя "рпг" - в данном случае, это громко сказано), поэтому просто вкратце опишу геймплей. По совершенно банально сюжету ("О нет, наш волшебный мир в опасности! Мы должны остановить злодея, продравшись через кучу боссов и их миньонов!") мы играем за маленького волшебника, которому поручено разобраться со всей нечистью, угрожающей игровому миру. Геймплей от третьего лица с видом сверху, в арсенале у нас есть посох, который может стрелять шаровыми молниями, а при наличии достаточного количества маны, кастовать боевые заклинания. Цель игры - завалить всех боссов, попутно зачищая промежуточные уровни и улучшая свою экипировку в магазинах. Игра разбивается на несколько локаций со своими главными боссами, локации можно исследовать, искать входы на уровни, магазины, боссов. Также по локации постоянно шастают мобы, мешающие продвижению; как только натыкаешься на модельку какого-нибудь врага, игра переносится в режим битвы (все это реализовано примерно как в героях, только не пошагово + мобы передвигаются по локации и могут напасть сами).
Все крайне тривиально, но я ничего не могу с собой поделать: это просто лучшее, во что я когда-либо играл, тут прекрасно все: начиная с в хорошем смысле этого слова упоротых трехмерных моделек врагов и заканчивая прекраснейшим музыкальным сопровождением. Конечно, во мне играют ностальгические чувства: диск с этой игрой мне достался очень-очень давно, найден он был на барахолке в магазине с дисками в коробке с уцененными товарами, и уже вот только это делает для меня особенно ценной эту игру.

В какой-то момент я решил загуглить название этой игры и с удивлением обнаружил, что на сайте разработчика выложена игра под этим названием, но по скриншотам она малость отличалась от того, что было записано у меня на диске. Судя по всему, на диск была записана то ли демка, то ли незаконченная версия игры, потому что даже судя по скриншотам на сайте, в обновленной версии было добавлено куча новых врагов, айтемов и уровней. До недавнего времени вот эту обновленную версию скачать нельзя было вообще нигде: я даже ту версию, что у меня была на диске, с трудом отыскал, и я уже было думал потратить фантастические 20 долларов на это гениальное творение, как разработчик внезапно выкладывает все свои игры в открытый доступ. Так что вот сейчас я понемногу заново прохожу эту игру, такие дела.

Еще я поставил осу, в которую я не умею играть, но мне просто нравится щелкать кружочки мышкой, и The Binding of Isaac (который новый, не флеш игра). Вот, кстати, касательно последней игры тоже исключительно положительные воспоминания, конкретно в отношении старой флеш версии игры: она просто изобиловала всевозможными багами, которые позволяли проворачивать кучу всяких забавных штуковин, вот из того, что я помню: можно было играть с отрицательным количеством сердец, с помощью определенного айтема можно было заспавнить муху в комнате, выйти из нее, и тогда пустая комната с единственной мухой вновь заполнялась врагами (так можно было рероллить боссов, чтобы получать больше полезных айтемов), очень много айтемов в игре были плохо сбалансированы, благодаря чему можно было при определенной сноровке можно было чуть ли не бесконечно генерировать кучу полезных айтемов. Верхом мастерства в использовании багов негласно считался краш игры из-за слишком большого количества сгенерированных предметов. Но, к сожалению в одном из обновлений очень много багов исправили, не знаю, зачем они это сделали, глупость какая-то.

То, что я прервал свой ноугеймз при том, что у меня и так не очень много времени свободного от учебы, может показаться иррациональным, но просто в последнее время я как-то совсем приуныл: чтение и просмотр всякой ерунды в интернете превратились в привычку, не приносящую никакого удовольствия, а вот игры дают мгновенную отдачу: прошел уровень / прошел карту на высокую оценку / завалил босса - молодец, вот тебе крутые айтемы / рейтинговые очки. Не требуются долгосрочные вложения, чтобы получить поощрение.

Завтра в основном опять буду заниматься всякими университетскими предметами, но постараюсь и еще что-нибудь интересное поделать.

https://www.youtube.com/watch?v=6HGLeUqoUf8
https://www.youtube.com/watch?v=4GKPQISrlVE
https://www.youtube.com/watch?v=qdMwV8cfzwI
фу, рэп
https://www.youtube.com/watch?v=sVpM6D6_w3g
https://www.youtube.com/watch?v=wiUYFZXy_zc

На второй картинке такая уютная атмосфера, и цветовая палитра очень классная
пора спать PoppyFanboy !VTLpv6lgGw 135 231515
Ничего сверхинтересного за последние три дня: воскресенье потратил в никуда, вчера в понедельник весь день (то, что осталось после пар) решал вроде как простую задачку по линейной алгебре / аналитической геометрии, но сильно осложненную очень-очень плохими исходными данными: в процессе решения постоянно вылезали корни, суммы корней (которые в итоге не сводились ни к чему хорошему, никакие группировки, домножения на сопряженное, чтобы получалась разность квадратов, не работали). Кое-как дорешал, но для некоторых подпунктов даже не выписал конечный ответ: ну слишком он длинный и запутанный. Вообще не понимаю, зачем давать задачки на вычисления с конкретными входными данными, если в результате в ответе получается что-то отличное от красивой дроби, возможно, домноженной на квадратный корень из чего-нибудь. Если ответ красивый, то его еще можно использовать в дальнейших вычислениях и это может быть потенциально полезно, но если получается не сокращаемое непонятно что с корнями в подкоренных выражениях, то это вообще невозможно поддерживать, такое должны считать компьютеры.

Мой режим дня по-прежнему продолжает скакать из стороны в сторону: то я засыпаю в полночь, то в пять утра. Вот сегодня как раз пришлось лечь спать в пять утра и проснуться уже в половине восьмого даже не столько, чтобы успеть на пары, а чтобы поправить режим.

Сегодня тоже ничего интересного, решал задачки по матанализу: пока что так себе получаются эти кратные интегралы (или как они там называются? Ну, короче, когда у нас задана область X в R^n, мы берем последовательность разбиений, мелкость которых стремится к нулю, и еще последовательность наборов точек (таких наборов, что в каждой "клетке" разбиения по одной точке), и тогда интегралом по области X будет предел последовательности интегральных сумм Sum{f(ei) * u(xi); i = 1 ... N} при мелкости разбиений, по которым производится суммирование, стремящейся к нулю (ei - точки, находящиеся в клетках разбиения, u - мера Жордана, для R^2 - мера Жордана - это площадь, а для R^3 - объем); блин, как-то вообще непонятно получилось, один из тех случаев, когда описать что-то с помощью математических символов гораздо проще, чем на пальцах. Но, если совсем интуитивно, то для случая с R^2 мы просто очень-очень мелко разбиваем область интегрирования на условные квадратики, в каждом квадратике в некоторой его точке считаем заданную по условию функцию f(x, y), а затем тупо суммируем площади всех квадратиков, домноженные на значения функции внутри какой-то точки квадрата. Если изобразить данную нам по условию функцию f(x, y) как график в трехмерном пространстве, то получится, что вот этот интеграл - это объем трехмерной фигуры, находящейся под графиком).

Прервал свой почти честный двухмесячный ноугеймз и поставил себе, прежде всего, гениальнейшую игру "Spooky Castle: The Adventures of Kid Mystic". Не разбираюсь в жанрах игр (наверное, это экшн рпг, хотя "рпг" - в данном случае, это громко сказано), поэтому просто вкратце опишу геймплей. По совершенно банально сюжету ("О нет, наш волшебный мир в опасности! Мы должны остановить злодея, продравшись через кучу боссов и их миньонов!") мы играем за маленького волшебника, которому поручено разобраться со всей нечистью, угрожающей игровому миру. Геймплей от третьего лица с видом сверху, в арсенале у нас есть посох, который может стрелять шаровыми молниями, а при наличии достаточного количества маны, кастовать боевые заклинания. Цель игры - завалить всех боссов, попутно зачищая промежуточные уровни и улучшая свою экипировку в магазинах. Игра разбивается на несколько локаций со своими главными боссами, локации можно исследовать, искать входы на уровни, магазины, боссов. Также по локации постоянно шастают мобы, мешающие продвижению; как только натыкаешься на модельку какого-нибудь врага, игра переносится в режим битвы (все это реализовано примерно как в героях, только не пошагово + мобы передвигаются по локации и могут напасть сами).
Все крайне тривиально, но я ничего не могу с собой поделать: это просто лучшее, во что я когда-либо играл, тут прекрасно все: начиная с в хорошем смысле этого слова упоротых трехмерных моделек врагов и заканчивая прекраснейшим музыкальным сопровождением. Конечно, во мне играют ностальгические чувства: диск с этой игрой мне достался очень-очень давно, найден он был на барахолке в магазине с дисками в коробке с уцененными товарами, и уже вот только это делает для меня особенно ценной эту игру.

В какой-то момент я решил загуглить название этой игры и с удивлением обнаружил, что на сайте разработчика выложена игра под этим названием, но по скриншотам она малость отличалась от того, что было записано у меня на диске. Судя по всему, на диск была записана то ли демка, то ли незаконченная версия игры, потому что даже судя по скриншотам на сайте, в обновленной версии было добавлено куча новых врагов, айтемов и уровней. До недавнего времени вот эту обновленную версию скачать нельзя было вообще нигде: я даже ту версию, что у меня была на диске, с трудом отыскал, и я уже было думал потратить фантастические 20 долларов на это гениальное творение, как разработчик внезапно выкладывает все свои игры в открытый доступ. Так что вот сейчас я понемногу заново прохожу эту игру, такие дела.

Еще я поставил осу, в которую я не умею играть, но мне просто нравится щелкать кружочки мышкой, и The Binding of Isaac (который новый, не флеш игра). Вот, кстати, касательно последней игры тоже исключительно положительные воспоминания, конкретно в отношении старой флеш версии игры: она просто изобиловала всевозможными багами, которые позволяли проворачивать кучу всяких забавных штуковин, вот из того, что я помню: можно было играть с отрицательным количеством сердец, с помощью определенного айтема можно было заспавнить муху в комнате, выйти из нее, и тогда пустая комната с единственной мухой вновь заполнялась врагами (так можно было рероллить боссов, чтобы получать больше полезных айтемов), очень много айтемов в игре были плохо сбалансированы, благодаря чему можно было при определенной сноровке можно было чуть ли не бесконечно генерировать кучу полезных айтемов. Верхом мастерства в использовании багов негласно считался краш игры из-за слишком большого количества сгенерированных предметов. Но, к сожалению в одном из обновлений очень много багов исправили, не знаю, зачем они это сделали, глупость какая-то.

То, что я прервал свой ноугеймз при том, что у меня и так не очень много времени свободного от учебы, может показаться иррациональным, но просто в последнее время я как-то совсем приуныл: чтение и просмотр всякой ерунды в интернете превратились в привычку, не приносящую никакого удовольствия, а вот игры дают мгновенную отдачу: прошел уровень / прошел карту на высокую оценку / завалил босса - молодец, вот тебе крутые айтемы / рейтинговые очки. Не требуются долгосрочные вложения, чтобы получить поощрение.

Завтра в основном опять буду заниматься всякими университетскими предметами, но постараюсь и еще что-нибудь интересное поделать.

https://www.youtube.com/watch?v=6HGLeUqoUf8
https://www.youtube.com/watch?v=4GKPQISrlVE
https://www.youtube.com/watch?v=qdMwV8cfzwI
фу, рэп
https://www.youtube.com/watch?v=sVpM6D6_w3g
https://www.youtube.com/watch?v=wiUYFZXy_zc

На второй картинке такая уютная атмосфера, и цветовая палитра очень классная
sage PoppyFanboy !VTLpv6lgGw 136 231630
Очень долго и мучительно повторял все пройденное по теории полей (по большей частично пересказывал, некоторые доказательства выписывал по памяти), и прошел новую тему из нее же (сепарабельные многочлены; очень долго тупил и не понимал, почему все неприводимые многочлены над полями с характеристикой 0 и над конечными полями сепарабельны, прямо неприлично долго). Все, в остальном только еще немного позалипал в игры.

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

Дедлайн по сдаче теории полей перенесли на неделю вперед, так что я 100% подготовлюсь нормально. Другое дело, что успешная сдача этого так называемого "коллоквиума" вроде как ничего не дает, так как в программу экзамена по алгебре он не входит. А вот с самой алгеброй, в отличие от теории полей, у меня есть определенные проблемы, собственно, как и со всем остальным материалом, преподаваемым на лекциях: почти все из того, что проходится на них, не имеет отношение к практическим занятиям, поэтому в течение семестра удается успешно забивать на материал с лекций, только вот во время сессии неожиданно выясняется, что вообще ничего не знаешь, и приходится судорожно впихивать в себя информацию.

Наученный опытом первых двух сессий, которые я сдал чуть ли не чудом, успевав все пройти в промежутки между экзаменами, в начале этого года я для про себя решил, что буду идти в ногу с лекциями, чтобы у меня они были хотя бы разобранными, и с треском провалился: все повторилось. Тем не менее, еще не поздно все поправить. И да, тут очередной план, который не сработает, и все будет как обычно В общем, во-первых, я возобновляю запущенные занятия околосамообразованием, но при этом сокращаю на это время: теперь буду что-то делать каждый день, но в небольших объемах, во-вторых, лекции по алгебре/матанализу/информатике/геометрии буду разбирать с конца, а не с того места, где я остановился.

Завтра
- повторение пройденного по теории полей (не такое подробное, как сегодня, только сложные моменты)
- подготовка к контрольной по матанализу
- минимум 40 минут на архиватор
- минимум 40 минут на рисование
- начать разбирать лекции по матанализу (с конца)
- разобраться в одном задании по диффурам (это недолго, я уже почти понял)
extra:
- начать разбирать лекции по геометрии (с конца)

Сейчас я как-то так посмотрел, и чет не особо уверен насчет того, что у меня получится прямо с конца разбирать лекции, все же там могут использоваться какие-то новые определения, но все же попробую.

В общем, с завтрашнего дня ух как заживем, будет самое настоящее вылезаторство, впервые в этом треде (уже представляю, что большую часть времени потрачу на подготовку к контрольной по матанализу и больше ничего не успею; надо заставить себя все же прежде всего вдумчиво прочитать теорию с примерами решений, и только потом, может быть, порешать что-нибудь (просто я обычно делаю наоборот: сначала пытаюсь решить, немного смотрю теорию, снова пытаюсь решить, и так по кругу)).

Кстати, заметил, что как начал играть в игры, стал меньше заходить в интернеты в поиске чего-нибудь интересного, это радует, теперь надо только заставить себя еще чуть-чуть поменьше играть, и тогда все будет замечательно в этом плане.

Да, план на предыдущую неделю я не выполнил, а на эту даже не составил, так что напишу его сейчас что ли
До 25 ноября включительно
- секретное дело №111820
- разобраться в том, что было на последней лекции по геометрии
- разобраться в том, что было на последней лекции по алгебре
- каждый день рисование + архиватор (x4)
- подготовить пересказ кусочка из какой-нибудь лекции для английского в универе
- теория полей - выучить до 15 (из 19) билета включительно (сейчас есть 12)
- дополнительно еще одна разобранная лекция по любому предмету

Я просто хочу стать чуть более дисциплинированным и все, разве я многого прошу?
Ну ладно, вот сейчас точно все получится
sage PoppyFanboy !VTLpv6lgGw 136 231630
Очень долго и мучительно повторял все пройденное по теории полей (по большей частично пересказывал, некоторые доказательства выписывал по памяти), и прошел новую тему из нее же (сепарабельные многочлены; очень долго тупил и не понимал, почему все неприводимые многочлены над полями с характеристикой 0 и над конечными полями сепарабельны, прямо неприлично долго). Все, в остальном только еще немного позалипал в игры.

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

Дедлайн по сдаче теории полей перенесли на неделю вперед, так что я 100% подготовлюсь нормально. Другое дело, что успешная сдача этого так называемого "коллоквиума" вроде как ничего не дает, так как в программу экзамена по алгебре он не входит. А вот с самой алгеброй, в отличие от теории полей, у меня есть определенные проблемы, собственно, как и со всем остальным материалом, преподаваемым на лекциях: почти все из того, что проходится на них, не имеет отношение к практическим занятиям, поэтому в течение семестра удается успешно забивать на материал с лекций, только вот во время сессии неожиданно выясняется, что вообще ничего не знаешь, и приходится судорожно впихивать в себя информацию.

Наученный опытом первых двух сессий, которые я сдал чуть ли не чудом, успевав все пройти в промежутки между экзаменами, в начале этого года я для про себя решил, что буду идти в ногу с лекциями, чтобы у меня они были хотя бы разобранными, и с треском провалился: все повторилось. Тем не менее, еще не поздно все поправить. И да, тут очередной план, который не сработает, и все будет как обычно В общем, во-первых, я возобновляю запущенные занятия околосамообразованием, но при этом сокращаю на это время: теперь буду что-то делать каждый день, но в небольших объемах, во-вторых, лекции по алгебре/матанализу/информатике/геометрии буду разбирать с конца, а не с того места, где я остановился.

Завтра
- повторение пройденного по теории полей (не такое подробное, как сегодня, только сложные моменты)
- подготовка к контрольной по матанализу
- минимум 40 минут на архиватор
- минимум 40 минут на рисование
- начать разбирать лекции по матанализу (с конца)
- разобраться в одном задании по диффурам (это недолго, я уже почти понял)
extra:
- начать разбирать лекции по геометрии (с конца)

Сейчас я как-то так посмотрел, и чет не особо уверен насчет того, что у меня получится прямо с конца разбирать лекции, все же там могут использоваться какие-то новые определения, но все же попробую.

В общем, с завтрашнего дня ух как заживем, будет самое настоящее вылезаторство, впервые в этом треде (уже представляю, что большую часть времени потрачу на подготовку к контрольной по матанализу и больше ничего не успею; надо заставить себя все же прежде всего вдумчиво прочитать теорию с примерами решений, и только потом, может быть, порешать что-нибудь (просто я обычно делаю наоборот: сначала пытаюсь решить, немного смотрю теорию, снова пытаюсь решить, и так по кругу)).

Кстати, заметил, что как начал играть в игры, стал меньше заходить в интернеты в поиске чего-нибудь интересного, это радует, теперь надо только заставить себя еще чуть-чуть поменьше играть, и тогда все будет замечательно в этом плане.

Да, план на предыдущую неделю я не выполнил, а на эту даже не составил, так что напишу его сейчас что ли
До 25 ноября включительно
- секретное дело №111820
- разобраться в том, что было на последней лекции по геометрии
- разобраться в том, что было на последней лекции по алгебре
- каждый день рисование + архиватор (x4)
- подготовить пересказ кусочка из какой-нибудь лекции для английского в универе
- теория полей - выучить до 15 (из 19) билета включительно (сейчас есть 12)
- дополнительно еще одна разобранная лекция по любому предмету

Я просто хочу стать чуть более дисциплинированным и все, разве я многого прошу?
Ну ладно, вот сейчас точно все получится
sage PoppyFanboy !VTLpv6lgGw 137 231751
>>231630

>повторение пройденного по теории полей


есть

>подготовка к контрольной по матанализу


есть

>разобраться в одном задании по диффурам


есть

>начать разбирать лекции по матанализу (с конца)


я попытался вникнуть, пока что не разобрался толком, но там вроде все не так сложно, как мне казалось

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

Завтра
- написать контрольную по матанализу так, чтобы потом надо было переписывать по минимуму
- 40x2 минут архиватора
- 40x2 минут рисования
- +1 новая тема из теории полей
extra:
- разбор лекций по геометрии с конца
sage PoppyFanboy !VTLpv6lgGw 138 231910
>>231751

>40x2 минут архиватора


есть. Все же отказался от идеи наличия у класса ArchivedFile различных состояний (когда файл просто формально находится в архиве (содержится в объекте-архиве), но еще не был сжат и засунут в файл на диске и когда файл уже сжат и лежит в архиве на диске) и сделал два класса (UnpackedFile и PackagedFile), унаследованные от одного абстрактного FileInArchive. Все еще чет очень слабо представляется, как это будет выглядеть, очень туго пока что идет.

>40x2 минут рисования


только минут 50, порисовал всякую ерунду и сделал грязную срисовку кошелька

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

Завтра
- подготовить кусочек лекции для английского
- 2 новые темы по теории полей + повторение старых
- рисование (минимум час)
- архиватор (минимум 40 минут)
- разбор лекций по геометрии
- кое-что еще
extra:
- разбор лекций по алгебре

Все время забываю делать трекинг времени

Пока что ничего интересного не происходит, не знаю, что сюда написать.

Вот недавно, чуть ли не подряд, дважды словил ощущение не то чтобы нереальности происходящего, но что просто что-то не так. Первый раз я ехал в автобусе и мельком бросил взгляд на траву, растущую вдоль обочины, и она оказалось просто серой, как будто бы кто-то мне на глаза встроил монохромный фильтр. Мгновение спустя я все же боковым зрением заметил, что часть травы была привычного зеленого цвета и успокоился так же быстро, как и вошел в это полуосознанное состояние тревоги. Как оказалось, трава действительно была серой: наверное, из-за пыли или выхлопных газов, не знаю.

Второй раз тоже случился в автобусе: я так же залипал в окно, когда вдруг проехал грузовик с прицепом, частично покрытый снегом (свободный прицеп и массивное зеркало заднего вида сбоку) (и да, это точно был снег, я видел его достаточно близко, чтобы различить его сверкание в свете фар автомобилей). И все бы ничего, но для снега было недостаточно холодно, и в течение как минимум часа никаких осадков не было. На других машинах снега, естественно, не было. Чуть позже я заметил еще пару машин, уже легковых, не покрытых снегом, но с небольшой ледяной коркой на крыше и багажнике. Я уже начал выдумывать у себя в голове какие-то маловероятные теории о том, что это так обильно выпала роса (глупо, но мне нечего было больше предположить) или что заледеневшая корка образовалась вследствие замерзания воды, оставшейся после мытья автомобиля (там просто рядом была автомойка с самообслуживанием: можно заехать и облить машину водой с, наверное, каким-то моющим средством под напором из шланга), но все они разбивались о то, что я четко видел большой, с половину моего кулака, ком снега на боковом зеркале заднего вида той фуры. В общем, разгадка оказалась довольно прозаичной: снег все же выпал, просто я его не застал. Не знаю, правда, как он не растаял за все это время, но, скорее всего, все так и было. И все это время я исходил из ложной предпосылки о том, что снег ну никак не мог выпасть.
sage PoppyFanboy !VTLpv6lgGw 138 231910
>>231751

>40x2 минут архиватора


есть. Все же отказался от идеи наличия у класса ArchivedFile различных состояний (когда файл просто формально находится в архиве (содержится в объекте-архиве), но еще не был сжат и засунут в файл на диске и когда файл уже сжат и лежит в архиве на диске) и сделал два класса (UnpackedFile и PackagedFile), унаследованные от одного абстрактного FileInArchive. Все еще чет очень слабо представляется, как это будет выглядеть, очень туго пока что идет.

>40x2 минут рисования


только минут 50, порисовал всякую ерунду и сделал грязную срисовку кошелька

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

Завтра
- подготовить кусочек лекции для английского
- 2 новые темы по теории полей + повторение старых
- рисование (минимум час)
- архиватор (минимум 40 минут)
- разбор лекций по геометрии
- кое-что еще
extra:
- разбор лекций по алгебре

Все время забываю делать трекинг времени

Пока что ничего интересного не происходит, не знаю, что сюда написать.

Вот недавно, чуть ли не подряд, дважды словил ощущение не то чтобы нереальности происходящего, но что просто что-то не так. Первый раз я ехал в автобусе и мельком бросил взгляд на траву, растущую вдоль обочины, и она оказалось просто серой, как будто бы кто-то мне на глаза встроил монохромный фильтр. Мгновение спустя я все же боковым зрением заметил, что часть травы была привычного зеленого цвета и успокоился так же быстро, как и вошел в это полуосознанное состояние тревоги. Как оказалось, трава действительно была серой: наверное, из-за пыли или выхлопных газов, не знаю.

Второй раз тоже случился в автобусе: я так же залипал в окно, когда вдруг проехал грузовик с прицепом, частично покрытый снегом (свободный прицеп и массивное зеркало заднего вида сбоку) (и да, это точно был снег, я видел его достаточно близко, чтобы различить его сверкание в свете фар автомобилей). И все бы ничего, но для снега было недостаточно холодно, и в течение как минимум часа никаких осадков не было. На других машинах снега, естественно, не было. Чуть позже я заметил еще пару машин, уже легковых, не покрытых снегом, но с небольшой ледяной коркой на крыше и багажнике. Я уже начал выдумывать у себя в голове какие-то маловероятные теории о том, что это так обильно выпала роса (глупо, но мне нечего было больше предположить) или что заледеневшая корка образовалась вследствие замерзания воды, оставшейся после мытья автомобиля (там просто рядом была автомойка с самообслуживанием: можно заехать и облить машину водой с, наверное, каким-то моющим средством под напором из шланга), но все они разбивались о то, что я четко видел большой, с половину моего кулака, ком снега на боковом зеркале заднего вида той фуры. В общем, разгадка оказалась довольно прозаичной: снег все же выпал, просто я его не застал. Не знаю, правда, как он не растаял за все это время, но, скорее всего, все так и было. И все это время я исходил из ложной предпосылки о том, что снег ну никак не мог выпасть.
sage PoppyFanboy !VTLpv6lgGw 139 232007
>>231910
Сел было искать лекцию на пересказ для английского, но вспомнил, что мне к десятому декабря еще нужно пройти какой-нибудь онлайн-курс (опять же для английского) и решил совместить: курс найти, а лекцию взять уже оттуда. Я почему-то думал, что у курса 6.042J, который я с переменным успехом мучаю уже миллиард лет, есть EDx версия, предусматривающая возможность получения сертификата, но, как оказалось, таковой нет, так что не получится получить выгоду из того, что я уже прошел половину 6.042J.

Времени остается мало, так что брать что-то новое для себя у меня особо не было желания (проходить какой-нибудь более-менее серьезный курс, рассчитанный на 5-6 недель за две - ну, это глупость, я ведь моментально все забуду), поэтому я тупо взял Introduction to Computer Science and Programming Using Python, надеясь закончить его максимально быстро (на сложность материала в курсе никаких ограничений не было, так что все в порядке; в крайнем случае могу сказать ну я же не знаю питона).

В итоге, как-то так вышло, что просидел я с этим курсом большую половину дня, а прошел только две недели курса (не помню, из скольки, но еще одна неделя, и будет midterm exam). Лекции скипал или смотрел на x2, прокликивая мышкой по таймлайну; в основном, делал упражнения, которые хоть и были максимально простыми, но их тупо было слишком много.

Максимально сильное ощущение проёбанного времени. Лучше бы весь день в игры играл. Но это в любом случае когда-то надо было начать делать, иначе автомата по английскому можно не ждать, так что ладно уж. К тому же с питоном поразвлекался, миленький язык.

Ну, раз уж так все вышло, то на завтра все то же самое, что было на сегодня.
еще одна неделя - еще одна попытка PoppyFanboy !VTLpv6lgGw 140 232130
Сегодня только английский и теория полей (+2 новые разобранные темы: про простоту конечного сепарабельного расширения и про свойства автоморфизмов простых расширений). Опять все время куда-то испарилось. Не выполнил я тот план на неделю, даже не буду отмечать, что конкретно я там сделал, а что - нет. Но, на самом деле, это уже не совсем дно: кое-какой прогресс есть. По-прежнему забываю делать перерывы, если чем-нибудь занимаюсь, и отслеживать, на что тратится время.

Завтра
- как-нибудь в течение дня повторить пройденное по теории полей
- порешать задачки по алгебре к контрольной, которая будет во вторник
- минимум 40 минут архиватора
- минимум 40 минут рисования
- разобрать последнюю тему по геометрии
extra
- разобрать последнее, что было на лекциях по алгебре
- пройти половину юнита по начатому курсу (это минут двадцать, наверное)

До второго декабря включительно
- пройти все оставшиеся темы по теории полей (x5)
- каждый день заниматься программированием и рисовать минимум 40 минут (x7)
- по каждому из следующих предметов: алгебра, геометрия, матанализ - нормально разобраться в темах, которые были на последних лекциях
- к пятнице решить диффуры
- пройти полторы недели курса + midterm exam
A+
- делать перерывы, чтобы полежать в кровати или поиграть в игры (x7)
- трекинг времени (x7)
- начинать делать что-либо сразу по приходе домой/после пробуждения (x7)
- подробный план на каждый день (x7)

сейчас все будет, четыре месяца ничего не было, но вот сейчас же совсем другое дело

https://www.youtube.com/watch?v=85hxlHzoKI0
https://www.youtube.com/watch?v=c_J7ybxenOQ
еще одна неделя - еще одна попытка PoppyFanboy !VTLpv6lgGw 140 232130
Сегодня только английский и теория полей (+2 новые разобранные темы: про простоту конечного сепарабельного расширения и про свойства автоморфизмов простых расширений). Опять все время куда-то испарилось. Не выполнил я тот план на неделю, даже не буду отмечать, что конкретно я там сделал, а что - нет. Но, на самом деле, это уже не совсем дно: кое-какой прогресс есть. По-прежнему забываю делать перерывы, если чем-нибудь занимаюсь, и отслеживать, на что тратится время.

Завтра
- как-нибудь в течение дня повторить пройденное по теории полей
- порешать задачки по алгебре к контрольной, которая будет во вторник
- минимум 40 минут архиватора
- минимум 40 минут рисования
- разобрать последнюю тему по геометрии
extra
- разобрать последнее, что было на лекциях по алгебре
- пройти половину юнита по начатому курсу (это минут двадцать, наверное)

До второго декабря включительно
- пройти все оставшиеся темы по теории полей (x5)
- каждый день заниматься программированием и рисовать минимум 40 минут (x7)
- по каждому из следующих предметов: алгебра, геометрия, матанализ - нормально разобраться в темах, которые были на последних лекциях
- к пятнице решить диффуры
- пройти полторы недели курса + midterm exam
A+
- делать перерывы, чтобы полежать в кровати или поиграть в игры (x7)
- трекинг времени (x7)
- начинать делать что-либо сразу по приходе домой/после пробуждения (x7)
- подробный план на каждый день (x7)

сейчас все будет, четыре месяца ничего не было, но вот сейчас же совсем другое дело

https://www.youtube.com/watch?v=85hxlHzoKI0
https://www.youtube.com/watch?v=c_J7ybxenOQ
141 232160
>>232130

>делать перерывы, чтобы полежать в кровати или поиграть в игры


>поиграть в игры


Еблан.
PoppyFanboy !VTLpv6lgGw 142 232485
>>232160
как скажешь

Вчера большую часть времени решал задачи по алгебре к сегодняшней контрольной, немного порисовал и немного позанимался архиватором, повторил теорию полей, и еще сдал английский. Сегодня порешал матанализ, подумал над архиватором, немного порисовал. Из графы А+ успешно сделаны только отдельные подробные планы на весь день. В остальном: пока что все так же перерывы делаю безсистемно, про трекинг времени забываю, по приходе домой вчера и сегодня много времени потратил на всякую ерунду.

На контрольной попалась вроде как простая задачка: найти минимальный многочлен для √(2+√(-2)) над полем рациональных. Вроде как очевидно, что это x^8 + 16, но вот как доказать, что он неприводим над Q, непонятно (а иначе возможно, что существует многочлен меньшей степени, у которого есть корень √(2+√(-2))). Ну, то есть понятно, что тут можно просто по-умному перебрать комбинации линейных членов в разложении над полем комплексных (достаточно будет рассмотреть варианты, где они группируются в произведение многочленов второй и шестой степеней или в произведение двух четвертой степени, и там еще можно некоторые упрощения ввести), но должен же быть, наверное, какой-нибудь попроще способ. Эйзенштейн тут не работает (еще есть вариант подобрать такое рациональное q, что к (x + q)^8 + 16 можно было бы применить Эйзенштейна и тогда x^8 + 16 был бы неприводим, но такое q подобрать вручную практически невозможно, судя по всему). Вообще нет идей, что тут можно еще такого придумать.

Завтра буду переписывать матанализ: не думал, что так скоро, я еще и порешать ничего толком не успел.

Завтра
- порешать матанализ
- переписать матанализ
- порешать диффуры
- порисовать (минимум 40 минут)
- программирование (минимум 40 минут)
- разобрать уже, наконец, геометрию
extra
- пройти половину недели курса
- +1 тема из теории полей

Режим сна скачет из стороны в сторону, чувствую себя так себе
sage PoppyFanboy !VTLpv6lgGw 143 232651
почему нет кнопки рестарта
sage PoppyFanboy !VTLpv6lgGw 144 233113
я понял
если мало спать,
то потом становится очень плохо
и ты спишь очень-очень много
возможно, суммарно даже больше, чем если бы спал нормальное количество времени в те дни, когда недосыпал
так что единственный смысл не спать - это попытаться успеть что-то сделать в срок,
но в ином случае в подобном издевательстве над организмом смысла нет
и иллюзия времени, выигранного за счет отсутствия нормального сна

остается иллюзией
это так очевидно, но я не учусь даже на своем опыте, не говоря уже о чужих советах

https://www.youtube.com/playlist?list=PLnl5FnHUIKK7u-xOaWiBJ1jGLp7TP4AAC
как же это плохо, лучше бы этого не существовало, и тогда мне не было бы стыдно за то, что я слушаю подобное

https://www.youtube.com/watch?v=iHmq93eAfpY

>The original unpixellized version of this picture have been used as a spectrogram and turned into sound. Then sampled over and over again, with different effects.


https://www.youtube.com/watch?v=REWVya87iK4
технически далеко не самый лучший альбом Ажуры, но все равно очень атмосферный

https://www.youtube.com/watch?v=ivAt7xJsO-Q&list=PLAB09BA6DCF89323D&index=2
все никак не могу собраться нормально послушать этот альбом, нет нужного настроя

https://www.youtube.com/watch?v=ReCdPcaDn4M
https://www.youtube.com/watch?v=5eV5elH6Xhw
https://www.youtube.com/watch?v=n8HoddLkMXg

https://www.youtube.com/watch?v=OLpeX4RRo28
вроде по ощущениям недавно было, а уже больше двух лет прошло
sage PoppyFanboy !VTLpv6lgGw 144 233113
я понял
если мало спать,
то потом становится очень плохо
и ты спишь очень-очень много
возможно, суммарно даже больше, чем если бы спал нормальное количество времени в те дни, когда недосыпал
так что единственный смысл не спать - это попытаться успеть что-то сделать в срок,
но в ином случае в подобном издевательстве над организмом смысла нет
и иллюзия времени, выигранного за счет отсутствия нормального сна

остается иллюзией
это так очевидно, но я не учусь даже на своем опыте, не говоря уже о чужих советах

https://www.youtube.com/playlist?list=PLnl5FnHUIKK7u-xOaWiBJ1jGLp7TP4AAC
как же это плохо, лучше бы этого не существовало, и тогда мне не было бы стыдно за то, что я слушаю подобное

https://www.youtube.com/watch?v=iHmq93eAfpY

>The original unpixellized version of this picture have been used as a spectrogram and turned into sound. Then sampled over and over again, with different effects.


https://www.youtube.com/watch?v=REWVya87iK4
технически далеко не самый лучший альбом Ажуры, но все равно очень атмосферный

https://www.youtube.com/watch?v=ivAt7xJsO-Q&list=PLAB09BA6DCF89323D&index=2
все никак не могу собраться нормально послушать этот альбом, нет нужного настроя

https://www.youtube.com/watch?v=ReCdPcaDn4M
https://www.youtube.com/watch?v=5eV5elH6Xhw
https://www.youtube.com/watch?v=n8HoddLkMXg

https://www.youtube.com/watch?v=OLpeX4RRo28
вроде по ощущениям недавно было, а уже больше двух лет прошло
окей sage PoppyFanboy !VTLpv6lgGw 145 233275

>Легко проверить


>правое разложение Лагранжа по классам смежности


>объясните, почему


>каждый коэффициент с точностью до знака равен значению основного симметрического многочлена si(t1, ..., tm) на корнях f


>вспомните формулы Виета


>Нетрудно понять (разберитесь в деталях!)


>... в силу одного из ранее доказанных предложений этого параграфа


>легко проверить (проверьте!)


>таблица


>По формуле Лагранжа интерполяционный многочлен наименьшей степени для этой таблицы равен


>просто меняются местами


>просто


Дно достигнуто, я даже не буду пытаться вникать в доказательство, предложенное в моем пособии по теории полей, а лучше соберу по кусочкам свой вариант

Доказательство леммы Артина без смс, регистрации, ФОРМУЛ ВИЕТА, ИТЕРПОЛЯЦИОННЫХ МНОГОЧЛЕНОВ ЛАГРАНЖА И ПРОЧЕЙ СОМНИТЕЛЬНОЙ ЕРУНДЫ, В КОТОРОЙ ЛЕГКО ЗАПУТАТЬСЯ

Сначала небольшая лемма, которая составит чуть ли не большую часть от всего доказательства: пусть у нас есть конечномерное расширение L/K, тогда L не может быть представлена как конечная сумма промежуточных полей (не равных L, естественно) этого расширения

доказательство
Сначала рассмотрим случай, когда поле K конечно (для удобства обозначим q := |K| и n := (L : K) - размерность расширения). Тогда, так как у нас конечномерное расширение, то |L| = q^n, а это означает, что для того, чтобы перечислить все возможные промежуточные поля, достаточно перебрать поля с размерностями q^d, где d делит n. Ну, не будем особо мелочиться, посчитаем размерность объединения вообще всех промежуточных полей: Sum(|Fq^d|; d делит n, d < n) ≤ [так как мы просто добавим немного "лишних" элементов] ≤ Sum(q^k; 1 ≤ k < n) = [геометрическая прогрессия] = q(qn-1 - 1)/(q - 1) < qn/(q - 1) ≤ [q = |K| ≥ 2, так как в поле как минимум два элемента: ноль и единица] ≤ q^n. Таким образом, мы получили, что размерность конечного объединения строго меньше размерности L, значит, объединение не равно L, тут все.

Теперь для случая, когда K содержит бесконечное число элементов. Будем доказывать по индукции по количеству элементов в некотором конечном объединении промежуточных полей M1 U ... U Mm. Для базового случая все очевидно: M1 по условию не равен L, а других промежуточных полей в наличии нет. Теперь сделаем индукционное предположение для (m - 1) и рассмотрим случай с m промежуточными полями. По предположению M2 U ... U Mm не равно L, значит, существует некий элемент x, который не принадлежит объединению. Если этот x также не принадлежит M1, то мы сорвали джекпот и получили, что объединение из m элементов тоже не равно L и доказали теорему. Но так может быть не всегда, поэтому предположим, что x принадлежит M1, а также возьмем какое-нибудь y, принадлежащее {L\M1} (вот это немного магическая штука, взявшаяся с потолка, но она нам пригодится).

Теперь заметим, что если у нас есть два элемента: (y + sx) и (y + tx), где s и t - элементы поля K и s != t, то эти два элемента в скобочках никак не могут одновременно принадлежать одному и тому же промежуточному полю Mi, где 2 ≤ i ≤ m: (y + sx) - (y + tx) = (s - t)x принадлежит Mi, а значит, так как (s - t) принадлежит Mi, то и в том числе x принадлежит Mi, что противоречит изначальному определению икса.

Из этого мы можем сделать интересный вывод: в объединении M2 U ... U Mm находятся всего лишь (m - 1) различных элементов вида (y + sx). То есть тогда в силу бесконечности поля K мы можем подобрать такое s оттуда, что (y + sx) будет лежать вне этого объединения. И тут вступает в игру наш ничем не обоснованный выбор игрека: (y + sx) не может также лежать и в M1, так как sx лежит в M1, а y, который в M1 не лежит как бы выбивает sx из M1. И все, получили, что (y + sx) не попадает в объединение, а значит, L не равно этому объединению. Лемму мы доказали

Теперь перейдем к самой лемме Артина, в ней говорится о том, что если у нас есть конечномерное расширение L/K, конечная подгруппа группы автоморфизмов Aut(K), которую мы обозначим как G, а также k, состоящее из элементов K, которые всеми автоморфизмами из G переводятся сами в себя, то (K : k) = |G|

доказательство
Будем отталкиваться от того, собственно, что нам надо доказать: предположим, что у нас есть набор элементов из K: (a1, ..., am), где m > |G|. Для начала докажем, что этот набор линейно зависим над k (это нам даст неравенство (K : k) ≤ |G|).

Рассмотрим систему уравнений, в которой каждое уравнение имеет вид g(a1)x1 + ... + g(am)xm, и определим векторное пространство V над K, состоящее из векторов (c1, ..., cm), являющихся решениями системы. Так как по условию в системе уравнений меньше, чем неизвестных, то у нас есть несколько нетривиальных решений, а значит, в V есть ненулевые векторы. В том, что V - действительно векторное пространство, довольно легко убедиться, просто пройдясь по всем нужным аксиомам, не забыв про замкнутость сложения векторов и домножения на скаляр.

Вот есть у нас векторное пространство, возьмем в нем вектор (b1, ..., bm) такой, чтобы он был ненулевым, но и ненулевых координат содержал по минимуму. Не умаляя общности, предположим, что j-ая координата вектора b равна единице (если это не так, просто поделим вектор на нужный скаляр). А теперь рассмотрим b' = b - g(b), где g - какой-то автоморфизм из G (все последующие утверждения выполняются для любых g из G), который применяется к каждой координате вектора b. Что он делает: нули переводит в нули, то, что не нули, в нули не переводит, единицы переводит в единицу. ТО есть по итогу у нас в векторе b' останутся нули на тех же местах, что они были в b, и еще дополнительно появится 0 на j-ой координате. То есть у b' еще меньше ненулевых элементов, чем в b, но в b и так минимум, значит b' тупо равно нулевому вектору, а значит, g(b1) = b1, ..., g(bm) = bm. Косвенно отсюда следует, что bi принадлежит полю k, а также:
g(a1)b1 + ... + g(am)bm = 0
g(a1)g(b1) + ... + g(am)g(bm) = 0
g(a1b1 + ... + ambm) = 0
a1b1 + ... + ambm = 0
и все, выходит, что (a1, ..., am) - линейно зависимый набор над k => (K : k) ≤ |G|

ТАК
Теперь докажем, что (K : k) ≥ |G| =: n
G = {g1, ..., gn}, все автоморфизмы внутри различны (ну, ээ, а зачем нам одинаковые?)
Определим промежуточные поля (опять же, рутинные доказательства того, что это поля, я опускаю) Mi,j, i != j, состоящие из таких элементов a из K, что gi(a) = gj(a). Понятно, что Mi,j != K, так как иначе бы gi было бы тождественно равно gj. При этом по первой лемме объединение Mi,j, i != j не равно K, значит, есть такой элемент z из K, что gi(z) != gj(z) при любых i != j.

Рассмотрим p из k[x] - минимальный аннулятор z. Степень минимального аннулятора меньше или равна (K : k) (ну, так как можно как минимум подобрать набор из ((K : k) + 1) коэффициентов многочлена из k таких, что p(z) будет обнуляться, просто по линейной зависимости). Теперь легко проверить, что p(gi(z)) = 0, так как там в многочлене можно все коэффициенты заменить на g(коэффициент), так как они все из k, все подвести под g(...), получить, что p(gi(z)) = 0. ТО есть p содержит в себе как минимум n различных (см. предыдущих параграф) корней, а значит, его степень - как минимум равна n. Таким образом, n ≤ deg(p) ≤ (K : k).

ВСЕ, получили два неравенства, делаем вывод о том, что |G| = (K : k)

http://www.math.harvard.edu/~elkies/M250.04/artinlemma.html
https://math.stackexchange.com/questions/2017522/finite-field-extension-can-not-be-written-as-union-of-proper-subextensions
https://math.stackexchange.com/questions/1199919/a-shortcut-in-galois-theory

Читать рекомендуется исключительно под этот трек:
https://www.youtube.com/watch?v=0xri-YuxS9s
окей sage PoppyFanboy !VTLpv6lgGw 145 233275

>Легко проверить


>правое разложение Лагранжа по классам смежности


>объясните, почему


>каждый коэффициент с точностью до знака равен значению основного симметрического многочлена si(t1, ..., tm) на корнях f


>вспомните формулы Виета


>Нетрудно понять (разберитесь в деталях!)


>... в силу одного из ранее доказанных предложений этого параграфа


>легко проверить (проверьте!)


>таблица


>По формуле Лагранжа интерполяционный многочлен наименьшей степени для этой таблицы равен


>просто меняются местами


>просто


Дно достигнуто, я даже не буду пытаться вникать в доказательство, предложенное в моем пособии по теории полей, а лучше соберу по кусочкам свой вариант

Доказательство леммы Артина без смс, регистрации, ФОРМУЛ ВИЕТА, ИТЕРПОЛЯЦИОННЫХ МНОГОЧЛЕНОВ ЛАГРАНЖА И ПРОЧЕЙ СОМНИТЕЛЬНОЙ ЕРУНДЫ, В КОТОРОЙ ЛЕГКО ЗАПУТАТЬСЯ

Сначала небольшая лемма, которая составит чуть ли не большую часть от всего доказательства: пусть у нас есть конечномерное расширение L/K, тогда L не может быть представлена как конечная сумма промежуточных полей (не равных L, естественно) этого расширения

доказательство
Сначала рассмотрим случай, когда поле K конечно (для удобства обозначим q := |K| и n := (L : K) - размерность расширения). Тогда, так как у нас конечномерное расширение, то |L| = q^n, а это означает, что для того, чтобы перечислить все возможные промежуточные поля, достаточно перебрать поля с размерностями q^d, где d делит n. Ну, не будем особо мелочиться, посчитаем размерность объединения вообще всех промежуточных полей: Sum(|Fq^d|; d делит n, d < n) ≤ [так как мы просто добавим немного "лишних" элементов] ≤ Sum(q^k; 1 ≤ k < n) = [геометрическая прогрессия] = q(qn-1 - 1)/(q - 1) < qn/(q - 1) ≤ [q = |K| ≥ 2, так как в поле как минимум два элемента: ноль и единица] ≤ q^n. Таким образом, мы получили, что размерность конечного объединения строго меньше размерности L, значит, объединение не равно L, тут все.

Теперь для случая, когда K содержит бесконечное число элементов. Будем доказывать по индукции по количеству элементов в некотором конечном объединении промежуточных полей M1 U ... U Mm. Для базового случая все очевидно: M1 по условию не равен L, а других промежуточных полей в наличии нет. Теперь сделаем индукционное предположение для (m - 1) и рассмотрим случай с m промежуточными полями. По предположению M2 U ... U Mm не равно L, значит, существует некий элемент x, который не принадлежит объединению. Если этот x также не принадлежит M1, то мы сорвали джекпот и получили, что объединение из m элементов тоже не равно L и доказали теорему. Но так может быть не всегда, поэтому предположим, что x принадлежит M1, а также возьмем какое-нибудь y, принадлежащее {L\M1} (вот это немного магическая штука, взявшаяся с потолка, но она нам пригодится).

Теперь заметим, что если у нас есть два элемента: (y + sx) и (y + tx), где s и t - элементы поля K и s != t, то эти два элемента в скобочках никак не могут одновременно принадлежать одному и тому же промежуточному полю Mi, где 2 ≤ i ≤ m: (y + sx) - (y + tx) = (s - t)x принадлежит Mi, а значит, так как (s - t) принадлежит Mi, то и в том числе x принадлежит Mi, что противоречит изначальному определению икса.

Из этого мы можем сделать интересный вывод: в объединении M2 U ... U Mm находятся всего лишь (m - 1) различных элементов вида (y + sx). То есть тогда в силу бесконечности поля K мы можем подобрать такое s оттуда, что (y + sx) будет лежать вне этого объединения. И тут вступает в игру наш ничем не обоснованный выбор игрека: (y + sx) не может также лежать и в M1, так как sx лежит в M1, а y, который в M1 не лежит как бы выбивает sx из M1. И все, получили, что (y + sx) не попадает в объединение, а значит, L не равно этому объединению. Лемму мы доказали

Теперь перейдем к самой лемме Артина, в ней говорится о том, что если у нас есть конечномерное расширение L/K, конечная подгруппа группы автоморфизмов Aut(K), которую мы обозначим как G, а также k, состоящее из элементов K, которые всеми автоморфизмами из G переводятся сами в себя, то (K : k) = |G|

доказательство
Будем отталкиваться от того, собственно, что нам надо доказать: предположим, что у нас есть набор элементов из K: (a1, ..., am), где m > |G|. Для начала докажем, что этот набор линейно зависим над k (это нам даст неравенство (K : k) ≤ |G|).

Рассмотрим систему уравнений, в которой каждое уравнение имеет вид g(a1)x1 + ... + g(am)xm, и определим векторное пространство V над K, состоящее из векторов (c1, ..., cm), являющихся решениями системы. Так как по условию в системе уравнений меньше, чем неизвестных, то у нас есть несколько нетривиальных решений, а значит, в V есть ненулевые векторы. В том, что V - действительно векторное пространство, довольно легко убедиться, просто пройдясь по всем нужным аксиомам, не забыв про замкнутость сложения векторов и домножения на скаляр.

Вот есть у нас векторное пространство, возьмем в нем вектор (b1, ..., bm) такой, чтобы он был ненулевым, но и ненулевых координат содержал по минимуму. Не умаляя общности, предположим, что j-ая координата вектора b равна единице (если это не так, просто поделим вектор на нужный скаляр). А теперь рассмотрим b' = b - g(b), где g - какой-то автоморфизм из G (все последующие утверждения выполняются для любых g из G), который применяется к каждой координате вектора b. Что он делает: нули переводит в нули, то, что не нули, в нули не переводит, единицы переводит в единицу. ТО есть по итогу у нас в векторе b' останутся нули на тех же местах, что они были в b, и еще дополнительно появится 0 на j-ой координате. То есть у b' еще меньше ненулевых элементов, чем в b, но в b и так минимум, значит b' тупо равно нулевому вектору, а значит, g(b1) = b1, ..., g(bm) = bm. Косвенно отсюда следует, что bi принадлежит полю k, а также:
g(a1)b1 + ... + g(am)bm = 0
g(a1)g(b1) + ... + g(am)g(bm) = 0
g(a1b1 + ... + ambm) = 0
a1b1 + ... + ambm = 0
и все, выходит, что (a1, ..., am) - линейно зависимый набор над k => (K : k) ≤ |G|

ТАК
Теперь докажем, что (K : k) ≥ |G| =: n
G = {g1, ..., gn}, все автоморфизмы внутри различны (ну, ээ, а зачем нам одинаковые?)
Определим промежуточные поля (опять же, рутинные доказательства того, что это поля, я опускаю) Mi,j, i != j, состоящие из таких элементов a из K, что gi(a) = gj(a). Понятно, что Mi,j != K, так как иначе бы gi было бы тождественно равно gj. При этом по первой лемме объединение Mi,j, i != j не равно K, значит, есть такой элемент z из K, что gi(z) != gj(z) при любых i != j.

Рассмотрим p из k[x] - минимальный аннулятор z. Степень минимального аннулятора меньше или равна (K : k) (ну, так как можно как минимум подобрать набор из ((K : k) + 1) коэффициентов многочлена из k таких, что p(z) будет обнуляться, просто по линейной зависимости). Теперь легко проверить, что p(gi(z)) = 0, так как там в многочлене можно все коэффициенты заменить на g(коэффициент), так как они все из k, все подвести под g(...), получить, что p(gi(z)) = 0. ТО есть p содержит в себе как минимум n различных (см. предыдущих параграф) корней, а значит, его степень - как минимум равна n. Таким образом, n ≤ deg(p) ≤ (K : k).

ВСЕ, получили два неравенства, делаем вывод о том, что |G| = (K : k)

http://www.math.harvard.edu/~elkies/M250.04/artinlemma.html
https://math.stackexchange.com/questions/2017522/finite-field-extension-can-not-be-written-as-union-of-proper-subextensions
https://math.stackexchange.com/questions/1199919/a-shortcut-in-galois-theory

Читать рекомендуется исключительно под этот трек:
https://www.youtube.com/watch?v=0xri-YuxS9s
sage PoppyFanboy !VTLpv6lgGw 146 233596
завтра вечером
PoppyFanboy !VTLpv6lgGw 147 234035
Охх, немного выпал из жизни на эти полторы недели: касательно программирования для себя и рисования ничего не сделал, неприлично много времени потратил на игры, несколько раз убивал режим, ложась спать в шесть утра. Но, но, я вроде как успел сдать диффуры, написать по ним же контрольную, почти успешно переписать контрольную по матанализу (по криволинейным интегралам) и сдать, наконец-то, теорию полей. С последним все прошло не сильно гладко: под конец я уже отказывался воспринимать теорию полей, так как пошла уже какая-то экзотическая ерунда, вот по типу леммы Артина, расширений Галуа и соответствия Галуа. Ну, не то чтобы прямо эзотерическая, но просто автор пособия под конец уже не утруждала себя объяснениями касательно того, зачем это все надо, какие вещи из этого всего можно вывести, просто по очереди выдавала определения, теоремы и доказательства, напичканные пометками вроде "разберитесь в деталях сами" или "объясните, почему".

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

В общем, да, я крайне сильно разленился за последнюю неделю, попробую сейчас вернуть хоть какую-нибудь дисциплинированность. Ближайшее, что надо сделать - это пройти онлайн-курс для английского в универе к понедельнику, разобрать геометрию к 24 декабря и дорешать домашние задания по программированию к 20 числу. По остальным предметам у меня более-менее все в порядке относительно долгов, поэтому можно особо не беспокоиться.

Не так давно поставил на комп второй дарк , который scholar of the first sin, чет захотелось пройти, к тому же в ремастеред версию я не играл еще ни разу, только в оригинальную, - было интересно, что они там поменяли. И, честно, я прямо не был готов к тому, что все будет настолько плохо. Я изначально-то от игры не ожидал ничего сверхъестественного, помня о том, насколько там убогие перекаты и неинтересные рядовые мобы, но ремастеред версия пробила дно: она стала сложнее, да, но исключительно из-за того, что в маленькие замкнутые пространства теперь понапихано миллион врагов. По отдельности они не представляют особой опасности, но когда на тебя нападают сразу втроем, то выбрать правильное время для удара практически невозможно: пока бьешь одного, оставшиеся сносят тебе половину здоровья. Вот и приходится нарезать круги вокруг них, пока не попадется убер удачный момент, когда ты сможешь зацепить сразу нескольких врагов одним ударом и избежать контратаки.

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

Так, о чем это я, хм. Завтра буду проходить онлайн-курс для английского, попробую поразбирать геометрию. Ну и рисование + программирование - то, что надо делать каждый день.

https://www.youtube.com/watch?v=hjGZLnja1o8
https://www.youtube.com/watch?v=S2B1QtFRrvw
https://www.youtube.com/watch?v=93jsY-YdZ1s
PoppyFanboy !VTLpv6lgGw 147 234035
Охх, немного выпал из жизни на эти полторы недели: касательно программирования для себя и рисования ничего не сделал, неприлично много времени потратил на игры, несколько раз убивал режим, ложась спать в шесть утра. Но, но, я вроде как успел сдать диффуры, написать по ним же контрольную, почти успешно переписать контрольную по матанализу (по криволинейным интегралам) и сдать, наконец-то, теорию полей. С последним все прошло не сильно гладко: под конец я уже отказывался воспринимать теорию полей, так как пошла уже какая-то экзотическая ерунда, вот по типу леммы Артина, расширений Галуа и соответствия Галуа. Ну, не то чтобы прямо эзотерическая, но просто автор пособия под конец уже не утруждала себя объяснениями касательно того, зачем это все надо, какие вещи из этого всего можно вывести, просто по очереди выдавала определения, теоремы и доказательства, напичканные пометками вроде "разберитесь в деталях сами" или "объясните, почему".

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

В общем, да, я крайне сильно разленился за последнюю неделю, попробую сейчас вернуть хоть какую-нибудь дисциплинированность. Ближайшее, что надо сделать - это пройти онлайн-курс для английского в универе к понедельнику, разобрать геометрию к 24 декабря и дорешать домашние задания по программированию к 20 числу. По остальным предметам у меня более-менее все в порядке относительно долгов, поэтому можно особо не беспокоиться.

Не так давно поставил на комп второй дарк , который scholar of the first sin, чет захотелось пройти, к тому же в ремастеред версию я не играл еще ни разу, только в оригинальную, - было интересно, что они там поменяли. И, честно, я прямо не был готов к тому, что все будет настолько плохо. Я изначально-то от игры не ожидал ничего сверхъестественного, помня о том, насколько там убогие перекаты и неинтересные рядовые мобы, но ремастеред версия пробила дно: она стала сложнее, да, но исключительно из-за того, что в маленькие замкнутые пространства теперь понапихано миллион врагов. По отдельности они не представляют особой опасности, но когда на тебя нападают сразу втроем, то выбрать правильное время для удара практически невозможно: пока бьешь одного, оставшиеся сносят тебе половину здоровья. Вот и приходится нарезать круги вокруг них, пока не попадется убер удачный момент, когда ты сможешь зацепить сразу нескольких врагов одним ударом и избежать контратаки.

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

Так, о чем это я, хм. Завтра буду проходить онлайн-курс для английского, попробую поразбирать геометрию. Ну и рисование + программирование - то, что надо делать каждый день.

https://www.youtube.com/watch?v=hjGZLnja1o8
https://www.youtube.com/watch?v=S2B1QtFRrvw
https://www.youtube.com/watch?v=93jsY-YdZ1s
Зануда-кун !!TQC1OAjFo2 148 234068
>>234035

>По отдельности они не представляют особой опасности


Какой тогда вообще смысл играть в перекат2, если на тебя не нападают кучкой, чтобы отпинать? По отдельности можно любого моба/босса завалить, всего лишь уловив его паттерн. А когда этот паттерн рассредоточен в нескольких точках арены, то вот здесь и начинается самый сок. Все боссы, которые по одиночке - стрёмные и скучные. Вот парные боссы типо Орнштейна и Смоуга из первого заставляют задуматься и немного поднапрячься.
Алсо, в ремастере не порезали преследователя, когда встречаешься с ним в первый раз? Помню, как я три дня на него потратил, чтобы слить. Зато после этого всё остальное какими-то детскими забавами кажется.
PoppyFanboy !VTLpv6lgGw 149 234142
>>234068
Я не против того, чтобы в игре были ситуации, когда на тебя нападают несколько врагов: это можно было бы грамотно обыграть миллионом способов (как пример - часть врагов действуют в ближнем бою, часть - в дальнем, или вот как в случае со смогом и орнштейном - один быстрый, другой медленный, или куча слабых врагов, которых саппортит один сильный, ну или просто чтобы враги не собирались в одной точке и не превращались в одну неприступную боевую единицу), но тут просто это сделано из рук вон плохо: когда в одном месте кучкой стоят трое вот этих тяжеловесных рыцарей-черепашек и нон-стоп размахивают своими палицами, не позволяя даже подойти нормально, - это уже бред какой-то, по-моему. На самом деле, я чет слишком сильно сгустил краски, там, наверное, все не так плохо, как я описываю, может, в последующих локациях будет чуть лучше.

Преследователя не порезали и даже вроде добавили еще одну встречу с ним где-то в локации, которая идет после "официального" босс-файта с ним же.

Прошел еще две недели из онлайн-курса и решил задачи из midterm exam. Немного порисовал и немного подумал над архиватором. Геометрию не успел. Завтра, скорее всего, опять весь день уйдет на онлайн-курс и еще пару заданий по английскому - последние, которые нужно сделать, чтобы получить зачет.

Почему ночью так приятно делать что-либо? Я очень люблю солнечный свет (возможно, потому что вижу я его не особо часто из-за постоянной пасмурной погоды), но все равно в темное время суток, как правило, немного проще сосредоточиться на чем-либо, нежели днем.

https://www.youtube.com/watch?v=oemKkZ_UEeg
https://www.youtube.com/watch?v=eVWEqQnjT0M
https://www.youtube.com/watch?v=OKRJfIPiJGY
https://www.youtube.com/watch?v=stynWxPJ4PE
https://www.youtube.com/watch?v=12kcpP-8jfM
https://www.youtube.com/watch?v=USCi-NmSGkk
PoppyFanboy !VTLpv6lgGw 150 234248
Вчера весь день вплоть до пяти утра сегодняшнего дня просидел с заданиями по английскому для зачета. Сейчас вот сдал его, ну, точнее сдал последний сет заданий (пройденный онлайн-курс, прочитанные 60к знаков и еще по мелочи перевод текста и словарь из терминов), который позволил мне получить зачет автоматом. Ненавижу себя за то, что потратил на это так много времени. Какой же я придурок
.jpg110 Кб, 1200x803
PoppyFanboy !VTLpv6lgGw 151 234576
Два дня подряд удавалось делать хотя бы что-то по минимуму в плане рисования (каррентли пытаюсь рисовать всяких животных) и программирования. Сегодня не рассчитал время и зафейлился: почти весь день убил только лишь на не очень продуктивный разбор геометрии

Так лень что-то делать

https://www.youtube.com/watch?v=9WOKk1i_eL8
https://www.youtube.com/watch?v=gI8Gft90-wc
https://www.youtube.com/watch?v=tdDRL1ralAY
PoppyFanboy !VTLpv6lgGw 152 234800
немного старых фоток с телефона
когда уже там закончится зима?

уныние все еще intensifies. цели все те же - каждый день делать хотя бы немного рисования и программирования (пока что с грехом пополам и конченым режимом сна два дня подряд) и разбирать геометрию. В геометрии пока что прошел не особо много: только всякие понятия связанные с параметризациями кривых (ну там, регулярная, натуральная параметризации, базис Френе, кривизна, кручение, вот это вот все) и немного задел параметризации поверхностей (вроде понял, как искать площадь кусочков поверхностей с помощью первой квадратичной формы, но все еще есть некоторое недопонимание, надо получше почитать хотя бы вики)

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

никак не даются криволинейные второго порядка по матану, вроде решаешь-решаешь, а потом получаешь какой-нибудь уродливый интеграл, который непонятно как надо брать, да и берется ли он вообще тоже не ясно

по программированию для универа, оказывается, надо сдать не так уж и много, приятно был удивлен сегодня

охх, про кого я вспомнил. последний раз слушал его еще при жизни
https://www.youtube.com/watch?v=Xmu-FQfskWc
https://www.youtube.com/watch?v=8gUJpT67QsA
https://www.youtube.com/watch?v=3rkJ3L5Ce80
153 234801
>>234142

>Я не против того, чтобы в игре были ситуации, когда на тебя нападают несколько врагов



Какой же ты брутальный хикка, пиздец просто. Почти до уровня жизни добрался. Где целые народы могут просто растоптать нахуй, если попали не в то время, место и состояние.

Какой же ты крутой, пиздец просто.

https://www.youtube.com/watch?v=DN68QSnwYQY
нытье нытье нытье нытье PoppyFanboy !VTLpv6lgGw 154 235123
Два выходных дня по ощущениям склеились в один из-за убитого режима сна (вставал к часу дня и спал по 9-10 часов). Хотел успеть полностью разобрать задачи по геометрии, пожертвовав всем остальным, но в итоге и геометрию до конца не доделал, и кроме геометрии вообще больше ничем не занимался: ни рисованием, ни программированием. Относительно много играл, не знаю, наверное, стоит с завтрашнего дня имеет смысл вернуть ноугеймз. Если бы правильно распределил время, завтра (ну, то есть формально уже сегодня) мог бы получить сразу три зачета (по программированию, алгебре и диффурам), но нет, скорее всего, это все еще надолго растянется, и мне придется тратить дополнительно как минимум два-три дня, чтобы их получить.

Короче, ничего хорошего, все по-прежнему. По-прежнему нет дисциплины, по-прежнему все делаю в последний момент, по-прежнему ничем толком не занимаюсь, а если и что-то делаю, то максимально непродуктивно.

ну, значит, все станет лучше как-нибудь в другой раз, а сейчас что есть, то есть

https://www.youtube.com/watch?v=C5PFGj9Z0cg
sage PoppyFanboy !VTLpv6lgGw 155 235357
Да, блин, опять пять утра. Я даже не замечаю, куда девается время. Кхм, ну ладно. Во вторник я вполне ожидаемо не смог затрайхардить, и сдал (ну, как, формально еще не сдал, но просто сделал все, что от меня требовалось) только два из трех возможных. С диффурами не сложилось, завтра (то есть уже сегодня) придется потратить на них еще некоторое количество времени, чтобы послезавтра (то есть формально завтра) сдать все, что я сделал преподавателю. Это немного печально.

Сегодня повторилась та же ерунда, что и на выходных только с той разницей, что у меня стартовал ноугеймз: весь день убил на разбор задачек по геометрии. На этот раз фантастически долго тупил с задачей на геодезическую линию. Там была дана первая квадратичная форма поверхности и надо было найти на этой поверхности все геодезии. И вроде все относительно несложно: ищешь символы Кристоффеля, подставляешь их в уравнение геодезии, решаешь систему из двух диффуров, и все.

Естественно, я ошибся в вычислениях, причем в самом начале: я изначально ошибся со знаками в выведенных мною общих формулах для нахождения символов Кристоффеля,и у меня получился система из двух диффуров, в которой в одном из уравнений был один лишний минус. Я честно продрался через все замены, которые делал по ходу решения, вывел два уравнения геодезии, и только потом уже понял, что крупно проебался.

А вот еще штука, которая доставила мне много головной боли - в уравнении геодезии в общем виде через символы кристоффеля нихрена не указано, что они выражаются не просто через элементы первой квадратичной формы, а через композицию первой квадратичной формы и искомой геодезии. То есть если у нас поверхность параметризуется как (x, y), то на место x в ПКФ надо поставить первую компоненту геодезии, а на место y - вторую компоненту геодезии. И чтобы понять, почему это так, надо зрить в корень и листать доказательство с выводом этого уравнения. Там оно изначально выводится как минимум функционала, который сопоставляет каждому отображению из R в R^2: t -> (u1(t), u2(t)) интеграл |(F(u1(t), u2(t))'(t)|^2dt от a до b. То есть иначе говоря мы ищем такую линию, соединяющую две точки поверхности, что на этой поверхности она будет иметь наименьшую длину (квадрат под интегралом тупа чтобы считать было удобнее). И там, короче в доказательстве везде под E, F, G - подразумеваются их композиции с параметризацией кривой, но производные от них берутся не по параметру t, а по u1 и u2. Вот так

К слову, на примере вот этой системы диффуров из решения задачки (точнее двух систем) я, наконец-то, на примере увидел, чем могут быть полезны гиперболические синус и косинус. Там в один момент появлялись интегралы вроде du/√(1+u^2) или du/√(1-u^2), и, естественно, их можно было решить просто по формуле из таблицы, но вот какая проблема: u - это искомая функция (одна из компонент геодезии), а сам интеграл приравнивался к там еще какому-то выражению. То есть после интегрирования мы должны выразить u в явном виде. Проблема тут в том, что этот вот табличный интеграл имеет максимально мудацкий вид - в лучшем случае это логарифм от дроби, в худшем - логарифм от выражения с корнем. И выражать через это нашу функцию u очень-очень больно и долго.

На самом деле, можно сделать гораздо проще: в первом случае заменить u на sinh(v), а во втором - на 1/cosh(v), и тогда после интегрирования мы получим arsinh(...) и arcosh(...), соответственно, а потом просто возьмем sinh или cosh от обоих частей получившегося уравнения. Thank you, hyperbolic functions, very nice

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

Ноугеймз ощущается только в те моменты, когда ты устал думоть, и хочется занять руки чем-нибудь менее интеллектуальным. Но тут ты вспоминаешь, что игры нельзя, и становится немного грустно.

Чет я даже не посмотрел толком, что там на улице происходит. Вроде же приближается самый короткий день в году. Хотел посмотреть, как ето будет, прямо от рассвета и до заката, но с моим режимом я, наверное, застам только закат. Да вообще жаль, что скорее всего, какой бы у меня режим сна ни был, я все равно не увижу ни того, ни другого из-за туч. Я как-то даже не помню, когда последний раз из-за них проглядывало солнце
sage PoppyFanboy !VTLpv6lgGw 155 235357
Да, блин, опять пять утра. Я даже не замечаю, куда девается время. Кхм, ну ладно. Во вторник я вполне ожидаемо не смог затрайхардить, и сдал (ну, как, формально еще не сдал, но просто сделал все, что от меня требовалось) только два из трех возможных. С диффурами не сложилось, завтра (то есть уже сегодня) придется потратить на них еще некоторое количество времени, чтобы послезавтра (то есть формально завтра) сдать все, что я сделал преподавателю. Это немного печально.

Сегодня повторилась та же ерунда, что и на выходных только с той разницей, что у меня стартовал ноугеймз: весь день убил на разбор задачек по геометрии. На этот раз фантастически долго тупил с задачей на геодезическую линию. Там была дана первая квадратичная форма поверхности и надо было найти на этой поверхности все геодезии. И вроде все относительно несложно: ищешь символы Кристоффеля, подставляешь их в уравнение геодезии, решаешь систему из двух диффуров, и все.

Естественно, я ошибся в вычислениях, причем в самом начале: я изначально ошибся со знаками в выведенных мною общих формулах для нахождения символов Кристоффеля,и у меня получился система из двух диффуров, в которой в одном из уравнений был один лишний минус. Я честно продрался через все замены, которые делал по ходу решения, вывел два уравнения геодезии, и только потом уже понял, что крупно проебался.

А вот еще штука, которая доставила мне много головной боли - в уравнении геодезии в общем виде через символы кристоффеля нихрена не указано, что они выражаются не просто через элементы первой квадратичной формы, а через композицию первой квадратичной формы и искомой геодезии. То есть если у нас поверхность параметризуется как (x, y), то на место x в ПКФ надо поставить первую компоненту геодезии, а на место y - вторую компоненту геодезии. И чтобы понять, почему это так, надо зрить в корень и листать доказательство с выводом этого уравнения. Там оно изначально выводится как минимум функционала, который сопоставляет каждому отображению из R в R^2: t -> (u1(t), u2(t)) интеграл |(F(u1(t), u2(t))'(t)|^2dt от a до b. То есть иначе говоря мы ищем такую линию, соединяющую две точки поверхности, что на этой поверхности она будет иметь наименьшую длину (квадрат под интегралом тупа чтобы считать было удобнее). И там, короче в доказательстве везде под E, F, G - подразумеваются их композиции с параметризацией кривой, но производные от них берутся не по параметру t, а по u1 и u2. Вот так

К слову, на примере вот этой системы диффуров из решения задачки (точнее двух систем) я, наконец-то, на примере увидел, чем могут быть полезны гиперболические синус и косинус. Там в один момент появлялись интегралы вроде du/√(1+u^2) или du/√(1-u^2), и, естественно, их можно было решить просто по формуле из таблицы, но вот какая проблема: u - это искомая функция (одна из компонент геодезии), а сам интеграл приравнивался к там еще какому-то выражению. То есть после интегрирования мы должны выразить u в явном виде. Проблема тут в том, что этот вот табличный интеграл имеет максимально мудацкий вид - в лучшем случае это логарифм от дроби, в худшем - логарифм от выражения с корнем. И выражать через это нашу функцию u очень-очень больно и долго.

На самом деле, можно сделать гораздо проще: в первом случае заменить u на sinh(v), а во втором - на 1/cosh(v), и тогда после интегрирования мы получим arsinh(...) и arcosh(...), соответственно, а потом просто возьмем sinh или cosh от обоих частей получившегося уравнения. Thank you, hyperbolic functions, very nice

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

Ноугеймз ощущается только в те моменты, когда ты устал думоть, и хочется занять руки чем-нибудь менее интеллектуальным. Но тут ты вспоминаешь, что игры нельзя, и становится немного грустно.

Чет я даже не посмотрел толком, что там на улице происходит. Вроде же приближается самый короткий день в году. Хотел посмотреть, как ето будет, прямо от рассвета и до заката, но с моим режимом я, наверное, застам только закат. Да вообще жаль, что скорее всего, какой бы у меня режим сна ни был, я все равно не увижу ни того, ни другого из-за туч. Я как-то даже не помню, когда последний раз из-за них проглядывало солнце
.jpg489 Кб, 1920x1080
PoppyFanboy !VTLpv6lgGw 156 235435
https://www.youtube.com/watch?v=9W44NWYwa1g PoppyFanboy !VTLpv6lgGw 157 235540
.jpg296 Кб, 835x1200
PoppyFanboy !VTLpv6lgGw 158 235551
какая опасная штука, надо, пожалуй, отключить контрол-энтер

вчера закончил разбирать геометрию, а оставшуюся часть дня потратил на решение диффуров, а сегодня как раз сдал по ним зачет. Больше ничего не смог сегодня сделать, только порисовал немного (теперь вместо морской свинки получилась какая-то мыш), сказывается слишком жесткий для меня недосып: вчера поспал только три часа, чтобы совсем уж не руинить режим, и встал в девять, но в итоге не рассчитал время - просидел с геометрией и диффурами до трех ночи, так что опять нормально не удалось поспать

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

ну, в любом случае, после сдачи диффуров и завершения разбора геометрии стало немного посвободнее в плане времени, так что завтра я, наконец-то, займусь хотя бы немного чем-нибудь интересным

вчера, кстати, очень сильно ощутил потребность отвлечься от решений диффуров и геометрии и поиграть во что-нибудь. Я тупо смотрел на задание, примерно понимал, как его надо решать, и просто не мог заставить себя написать ни одной строки решения. Настолько уже эти задачки засели комом в горле. Тем не менее, я сдержался и не допустил ошипку - в игоры играть не стал

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

завтра надо будет все же разобрать то задание по матану, которое мне никак не дается, по-быстрому глазами просмотреть решения задач по геометрии, чтобы они ко дню зачета у меня из головы не выветрились (и еще кое-что пофиксить в этих решениях), начать разбирать теорию к экзамену по геометрии, ну и еще что-нибудь интересное поделать

https://www.youtube.com/watch?v=9W44NWYwa1g
https://www.youtube.com/watch?v=8IK6eLTNV1k
https://www.youtube.com/watch?v=My4j3vgFxbE
.jpg296 Кб, 835x1200
PoppyFanboy !VTLpv6lgGw 158 235551
какая опасная штука, надо, пожалуй, отключить контрол-энтер

вчера закончил разбирать геометрию, а оставшуюся часть дня потратил на решение диффуров, а сегодня как раз сдал по ним зачет. Больше ничего не смог сегодня сделать, только порисовал немного (теперь вместо морской свинки получилась какая-то мыш), сказывается слишком жесткий для меня недосып: вчера поспал только три часа, чтобы совсем уж не руинить режим, и встал в девять, но в итоге не рассчитал время - просидел с геометрией и диффурами до трех ночи, так что опять нормально не удалось поспать

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

ну, в любом случае, после сдачи диффуров и завершения разбора геометрии стало немного посвободнее в плане времени, так что завтра я, наконец-то, займусь хотя бы немного чем-нибудь интересным

вчера, кстати, очень сильно ощутил потребность отвлечься от решений диффуров и геометрии и поиграть во что-нибудь. Я тупо смотрел на задание, примерно понимал, как его надо решать, и просто не мог заставить себя написать ни одной строки решения. Настолько уже эти задачки засели комом в горле. Тем не менее, я сдержался и не допустил ошипку - в игоры играть не стал

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

завтра надо будет все же разобрать то задание по матану, которое мне никак не дается, по-быстрому глазами просмотреть решения задач по геометрии, чтобы они ко дню зачета у меня из головы не выветрились (и еще кое-что пофиксить в этих решениях), начать разбирать теорию к экзамену по геометрии, ну и еще что-нибудь интересное поделать

https://www.youtube.com/watch?v=9W44NWYwa1g
https://www.youtube.com/watch?v=8IK6eLTNV1k
https://www.youtube.com/watch?v=My4j3vgFxbE
sage PoppyFanboy !VTLpv6lgGw 159 235638
Весь день чувствую себя не очень, даже не заметил, как быстро пролетел этот день. Сначала утром мне люто хотелось спать, несмотря на то, что проспал я часов девять-десять, а затем мне раздробили на кусочки мозг попыткой объяснить мне решение одной задачи по геометрии, расписанное, сука, на четырех листах без единой пометки на нормальном человеческом языке и вообще никак не структурированное. И я такое говно ведь очень часто вижу - когда расшифровать доказательство какой-то теоремы - это отдельная задача не менее сложная, чем понимание самой сути доказательства.

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

В 6.042J который я, скотина тупая, так и не допрошел несколько раз упоминались "фальшивые" доказательства, которые на первый взгляд казались верными, но потом выяснялось, что ошибка крылась либо в рисунке к задаче, либо в записи вида 1..n (при том, что n может быть нулем или еще меньше), в общем, "доказательства" были по-своему элегантны в своей попытке тебя обмануть. На фоне этого "очевидно" выглядит так же, как огромная неотесанная дубина на фоне изящного оружия из металла.

Никто не говорит про оформление доказательств и решений задач, всем просто поебать, главное - настрочить побыстрее, понапихать везде слово "очевидно" и все. Я ненавижу всех и себя а том числе, пойду спать пораньше, чтобы опять проспать миллиард часов и все равно встать невыспавшимся.

Завтра буду перечитывать решения задач по геометрии к послезавтрашнему зачету, и еще что-нибудь поделаю (ну примерно как сегодня, ха ничего). Обязательно сделаю трекинг времени, потому что сегодня была какая-то глобально-локальная катастрофа с пониманием того, что вообще происходит вокруг, где я нахожусь и почему уже пятнадцать минут сижу и туплю в открытую пустую страницу браузера

Я хотел бы думать, что сегодняшний день был выходным после трех дней непрерывных диффуров и геометрии, но я слишком хорошо знаю, какой я отброс. Я просто не могу, мне хочется размазать свою тупую голову об стену. Ничего не могу дать кроме пустых обещаний себе
sage PoppyFanboy !VTLpv6lgGw 159 235638
Весь день чувствую себя не очень, даже не заметил, как быстро пролетел этот день. Сначала утром мне люто хотелось спать, несмотря на то, что проспал я часов девять-десять, а затем мне раздробили на кусочки мозг попыткой объяснить мне решение одной задачи по геометрии, расписанное, сука, на четырех листах без единой пометки на нормальном человеческом языке и вообще никак не структурированное. И я такое говно ведь очень часто вижу - когда расшифровать доказательство какой-то теоремы - это отдельная задача не менее сложная, чем понимание самой сути доказательства.

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

В 6.042J который я, скотина тупая, так и не допрошел несколько раз упоминались "фальшивые" доказательства, которые на первый взгляд казались верными, но потом выяснялось, что ошибка крылась либо в рисунке к задаче, либо в записи вида 1..n (при том, что n может быть нулем или еще меньше), в общем, "доказательства" были по-своему элегантны в своей попытке тебя обмануть. На фоне этого "очевидно" выглядит так же, как огромная неотесанная дубина на фоне изящного оружия из металла.

Никто не говорит про оформление доказательств и решений задач, всем просто поебать, главное - настрочить побыстрее, понапихать везде слово "очевидно" и все. Я ненавижу всех и себя а том числе, пойду спать пораньше, чтобы опять проспать миллиард часов и все равно встать невыспавшимся.

Завтра буду перечитывать решения задач по геометрии к послезавтрашнему зачету, и еще что-нибудь поделаю (ну примерно как сегодня, ха ничего). Обязательно сделаю трекинг времени, потому что сегодня была какая-то глобально-локальная катастрофа с пониманием того, что вообще происходит вокруг, где я нахожусь и почему уже пятнадцать минут сижу и туплю в открытую пустую страницу браузера

Я хотел бы думать, что сегодняшний день был выходным после трех дней непрерывных диффуров и геометрии, но я слишком хорошо знаю, какой я отброс. Я просто не могу, мне хочется размазать свою тупую голову об стену. Ничего не могу дать кроме пустых обещаний себе
PoppyFanboy !VTLpv6lgGw 160 236138
Наконец-то, разобрался с зачетами: досдал геометрию и матанализ. Все бы хорошо, но впереди еще четыре экзамена, первый из которых будет уже одиннадцатого числа. Очень неприятно, в идеале я должен в день учить 2 билета по информатике, 1.5 билета по геометрии, 2.5 билета по матану и 1.5 билета по алгебре, чтобы успеть все выучить аккурат к началу каждого экзамена

С прошлого поста так и не удалось а ты пытался? нормально выкроить время на рисование и программирование. Все забросил, ничем кроме проклятой учебы не занимаюсь. Недавно еще приснился не очень приятный сон; я вроде оправился после него, но все равно иногда накатывает

Чем больше времени проходит, тем чаще проклевываются мысли о моей никчемности. С одной стороны, нельзя им поддаваться, иначе ничего не изменится, но, с другой, они ведь действительно от части правдивы

https://www.youtube.com/watch?v=LlQWr2fku3w
https://www.youtube.com/watch?v=oPFvxKCSVWI
https://www.youtube.com/watch?v=kRt2sRyup6A

оо, про что я вспомнил
https://www.youtube.com/watch?v=dCQontnB6Ms
https://www.youtube.com/watch?v=eYebcbkSQDE
https://www.youtube.com/watch?v=3dqmzyt9tZw

фу, реп
https://www.youtube.com/watch?v=WFDvtlJAuRA
https://www.youtube.com/watch?v=Llkt3jnOX9Y
https://www.youtube.com/watch?v=xAMgQQMZ9Lk

https://www.youtube.com/watch?v=mjnAE5go9dI
.jpg57 Кб, 874x600
PoppyFanboy !VTLpv6lgGw 161 236265
finally
этот бесконечно длинный день все же нашел свое завершение, и я снова здесь в пятом часу утра. Очень хочется есть, но ничего готового дома нет, так что придется спать голодным

+2.5 билета по информатике
+2 билета по матану
+1 билет по геометрии
+1 билет по алгебре
+3 строки кода
+2 всратых наброска каких-то мышей

трекинг времени снова не удался, в графе за прошедший день красуется единственная запись "Отдых: 09:44 - 20:43". Весьма, весьма информативно
какие-то у меня на протяжении всего этого дня были слишком сухие глаза. Это немного напрягает
.jpg494 Кб, 2048x1148
PoppyFanboy !VTLpv6lgGw 162 236504
Какой-то сегодня неудачный день: только +2 билета по геометрии, +2 по матанализу, и больше ничего. А вчера было примерно то же самое, что и позавчера (в плане объемов выполненных задач)
.jpg138 Кб, 1200x889
PoppyFanboy !VTLpv6lgGw 163 236652
Сегодня меня вытащили в театр. Не понравилось
Ююко !hhoO7CxTZY 164 236666
>>236504
Ууу это же 32ой скай gtr
sage PoppyFanboy !VTLpv6lgGw 165 237433
За последние два дня только +6 билетов по информатике. Я не знаю, я не вывожу, информация просто не лезет в голову, ни на что не хватает времени
pf.webm4,1 Мб, webm,
1600x2200, 3:05
Рируру !!gYmpHned/k 166 238394
С Новым годом, ПоппиФанбой! Посмотри десантниц Если предстоящий год не ознаменуется для тебя новыми математическими, личностными и общечеловеческими высотами, я тебя поколочу.
pfyuv444.webm3,4 Мб, webm,
1600x2200, 3:05
Рируру !!gYmpHned/k 167 238415
>>238394
У меня каша даже в Chrome, хнык. Вот YUV444-версия.
.jpg381 Кб, 1181x1200
everythings gonna be okay PoppyFanboy !VTLpv6lgGw 168 238901
>>238394
спасибо еще раз

Да-а, чет я даже не заметил, как почти полторы недели прошло. Все это время пытался готовиться к экзаменам, но как-то особо не продвинулся: вроде и все понимаю, но все равно не запоминается. Еще бросил двухнедельный ноугеймз (стало как-то максимально уныло): скачал Yakuza 0 и NieR Automata. Обе понравились, но в якудзу не смог нормально поиграть из-за неработающих сохранений, надо будет потом скачать откуда-нибудь с другого места. В нир автомате, конечно, отличный саундтрек, очень хорошо компонуется с игровым процессом

Очень сильно поломался режим сна: теперь ложусь ближе к шести-семи утра, а встаю в час-два дня. Чувствую себя не очень из-за этого, но сдвинуть никак не получается, сегодня еще раз вот попробую.

Большая часть всего времени за эти полторы недели ушла на подготовку к экзамену по, внезапно, информатике из-за максимально дегенеративной программы в этом семестре. Сначала идут формальные определения типов данных (вот прямо максимально низкоуровневые), быстрое умножение многочленов (это легко для меня, но оно вообще никак не вяжется с остальными темами, просто впихнуто зачем-то) и опять же, непонятно зачем, впихнутые бинарные деревья: там про изоморфизм деревьев, про критерии изоморфности и про прошитые (threaded) бинарные деревья. Вот, зачем последние нужны, я вообще не понял. Вроде как для того, чтобы можно было сделать инфиксный обратный слеш префиксный обратный слеш постфиксный обход дерева без использования рекурсии, но, блин, для того, чтобы из обычного бинарного дерева получить "прошитое", нужно, внезапно, применить рекурсию. И там вроде нет выигрыша ни по памяти, которая в итоге будет использоваться, ни по времени, рекурсия используется в обоих случаях, в общем, что-то странное.

И это все еще ладно, это еще только первые четырнадцать билетов из тридцати девяти, дальше идет нечто жуткое и страшное - теория алгоритмов. Все начинается с определения абстрактной RAM-машины с четырьмя доступными командами (условный goto, инкремент, копирование значения из одного регистра в другой и обнуление регистра), затем идет определение понятия вычислимой функции (та, для которой есть RAM-программа ее вычисляющая), и потом вводится тезис Черча, который по сути говорит, что можно не париться насчет формальных доказательств вычислимости функций, можно доказывать неформально с использованием интуитивного понятия алгоритма. И, казалось бы, все, на этом можно было бы закончить: да, мы можем расписать программу с использованием только лишь четырех команд, но это непрактично, поэтому в дальнейшем мы не будем опускаться на такой низкий уровень абстракции, но тут начинается самая жуткая жуть - вводится понятие примитивной рекурсии.

Какая мотивация для определения? Это способ определять новые вычислимые функции на основе двух других, при этом если эти две функции являются вычислимыми, то функция, полученная из них примитивной рекурсией, тоже будет вычислимой.
- но мы же можем просто написать программу, чтобы доказать вычислимость функции, нам незачем использовать примитивно рекурсивные функции
- да, можем, но вся оставшаяся часть экзамена все равно будет посвящена примитивно рекурсивно функциям, они же такие классные, ты только посмотри

Я не понимаю, зачем это надо. Особенно с учетом того, что мы работаем исключительно с целыми неотрицательными числами. Там дальше идут доказательства того, что всякие примитивные штуки вроде суммы, разности, умножения, min(x, y), max(x, y), взятия остатка, деления нацело и прочего являются примитивно рекурсивными, а после этого примитивной рекурсии внезапно становится мало и вводятся новые типы рекурсий, еще какие-то вспомогательные функции, чтобы можно было доказать примитивную рекурсивность еще большего количества других функций, ДЛЯ КОТОРЫХ МОЖНО, СУКА, ПРОСТО НАПИСАТЬ ПРОГРАММУ И ИЗ ЭТОГО СДЕЛАТЬ ВЫВОД, ЧТО ОНИ ВЫЧИСЛИМЫ, ПОТОМУ ЧТО ЕСТЬ ПРОГРАММА ИХ ВЫЧИСЛЯЮЩАЯ.

А под конец там вообще какой-то бессвязный бред идет: просто рандомные утверждения, которые просто доказываются и бросаются, как будто бы и не нужны. У меня вообще в голове не укладывается это все: я пытался сегодня повторить все пройденное максимально грамотно - не просто просмотреть расписанные темы, а самому все вспомнить, но я не могу, я просто не могу впихнуть в голову этот бессвязный массив информации. Вот, например, билет называется "Числа Фибоначчи, лемма, возвратная рекурсия", и я каким-то хреном должен догадаться, какая там имеется в виду лемма, к чему она там нужна, а еще вспомнить, что там конкретно надо рассказывать про возвратную рекурсию. И так почти каждый билет.

Короче, что есть на данный момент: 33/39 по информатике (к 11 числу), 12/30 по геометрии (к 17), 14/70 по матану (к 23), 2/45 по алгебре (к 28). Не знаю, попробую завтра разобрать побольше билетов, потому что чет я не успеваю, и все идет не так гладко как хотелось бы. Всякими интересными штуками не удается заниматься, судя по всему, это минус весь январь в этом плане. Грустно

Сегодня, кстати, почти весь день потратил на повторение билетов по информатике. Я не знаю, это просто не влезает в меня
Попробую завтра начать не с информатики, а с чего-нибудь другого, менее неприятного. Все же тот дефолтный около-тайм-менеджмент совет про "съедание лягушки с утра" вообще ни разу не работает: если мне надо сделать что-то неприятное, то я буду часто отвлекаться и делать большие перерывы, а так как "времени-то еще навалом"

Не помню, что еще было

https://www.youtube.com/watch?v=aktSN2Rh7a0
.jpg381 Кб, 1181x1200
everythings gonna be okay PoppyFanboy !VTLpv6lgGw 168 238901
>>238394
спасибо еще раз

Да-а, чет я даже не заметил, как почти полторы недели прошло. Все это время пытался готовиться к экзаменам, но как-то особо не продвинулся: вроде и все понимаю, но все равно не запоминается. Еще бросил двухнедельный ноугеймз (стало как-то максимально уныло): скачал Yakuza 0 и NieR Automata. Обе понравились, но в якудзу не смог нормально поиграть из-за неработающих сохранений, надо будет потом скачать откуда-нибудь с другого места. В нир автомате, конечно, отличный саундтрек, очень хорошо компонуется с игровым процессом

Очень сильно поломался режим сна: теперь ложусь ближе к шести-семи утра, а встаю в час-два дня. Чувствую себя не очень из-за этого, но сдвинуть никак не получается, сегодня еще раз вот попробую.

Большая часть всего времени за эти полторы недели ушла на подготовку к экзамену по, внезапно, информатике из-за максимально дегенеративной программы в этом семестре. Сначала идут формальные определения типов данных (вот прямо максимально низкоуровневые), быстрое умножение многочленов (это легко для меня, но оно вообще никак не вяжется с остальными темами, просто впихнуто зачем-то) и опять же, непонятно зачем, впихнутые бинарные деревья: там про изоморфизм деревьев, про критерии изоморфности и про прошитые (threaded) бинарные деревья. Вот, зачем последние нужны, я вообще не понял. Вроде как для того, чтобы можно было сделать инфиксный обратный слеш префиксный обратный слеш постфиксный обход дерева без использования рекурсии, но, блин, для того, чтобы из обычного бинарного дерева получить "прошитое", нужно, внезапно, применить рекурсию. И там вроде нет выигрыша ни по памяти, которая в итоге будет использоваться, ни по времени, рекурсия используется в обоих случаях, в общем, что-то странное.

И это все еще ладно, это еще только первые четырнадцать билетов из тридцати девяти, дальше идет нечто жуткое и страшное - теория алгоритмов. Все начинается с определения абстрактной RAM-машины с четырьмя доступными командами (условный goto, инкремент, копирование значения из одного регистра в другой и обнуление регистра), затем идет определение понятия вычислимой функции (та, для которой есть RAM-программа ее вычисляющая), и потом вводится тезис Черча, который по сути говорит, что можно не париться насчет формальных доказательств вычислимости функций, можно доказывать неформально с использованием интуитивного понятия алгоритма. И, казалось бы, все, на этом можно было бы закончить: да, мы можем расписать программу с использованием только лишь четырех команд, но это непрактично, поэтому в дальнейшем мы не будем опускаться на такой низкий уровень абстракции, но тут начинается самая жуткая жуть - вводится понятие примитивной рекурсии.

Какая мотивация для определения? Это способ определять новые вычислимые функции на основе двух других, при этом если эти две функции являются вычислимыми, то функция, полученная из них примитивной рекурсией, тоже будет вычислимой.
- но мы же можем просто написать программу, чтобы доказать вычислимость функции, нам незачем использовать примитивно рекурсивные функции
- да, можем, но вся оставшаяся часть экзамена все равно будет посвящена примитивно рекурсивно функциям, они же такие классные, ты только посмотри

Я не понимаю, зачем это надо. Особенно с учетом того, что мы работаем исключительно с целыми неотрицательными числами. Там дальше идут доказательства того, что всякие примитивные штуки вроде суммы, разности, умножения, min(x, y), max(x, y), взятия остатка, деления нацело и прочего являются примитивно рекурсивными, а после этого примитивной рекурсии внезапно становится мало и вводятся новые типы рекурсий, еще какие-то вспомогательные функции, чтобы можно было доказать примитивную рекурсивность еще большего количества других функций, ДЛЯ КОТОРЫХ МОЖНО, СУКА, ПРОСТО НАПИСАТЬ ПРОГРАММУ И ИЗ ЭТОГО СДЕЛАТЬ ВЫВОД, ЧТО ОНИ ВЫЧИСЛИМЫ, ПОТОМУ ЧТО ЕСТЬ ПРОГРАММА ИХ ВЫЧИСЛЯЮЩАЯ.

А под конец там вообще какой-то бессвязный бред идет: просто рандомные утверждения, которые просто доказываются и бросаются, как будто бы и не нужны. У меня вообще в голове не укладывается это все: я пытался сегодня повторить все пройденное максимально грамотно - не просто просмотреть расписанные темы, а самому все вспомнить, но я не могу, я просто не могу впихнуть в голову этот бессвязный массив информации. Вот, например, билет называется "Числа Фибоначчи, лемма, возвратная рекурсия", и я каким-то хреном должен догадаться, какая там имеется в виду лемма, к чему она там нужна, а еще вспомнить, что там конкретно надо рассказывать про возвратную рекурсию. И так почти каждый билет.

Короче, что есть на данный момент: 33/39 по информатике (к 11 числу), 12/30 по геометрии (к 17), 14/70 по матану (к 23), 2/45 по алгебре (к 28). Не знаю, попробую завтра разобрать побольше билетов, потому что чет я не успеваю, и все идет не так гладко как хотелось бы. Всякими интересными штуками не удается заниматься, судя по всему, это минус весь январь в этом плане. Грустно

Сегодня, кстати, почти весь день потратил на повторение билетов по информатике. Я не знаю, это просто не влезает в меня
Попробую завтра начать не с информатики, а с чего-нибудь другого, менее неприятного. Все же тот дефолтный около-тайм-менеджмент совет про "съедание лягушки с утра" вообще ни разу не работает: если мне надо сделать что-то неприятное, то я буду часто отвлекаться и делать большие перерывы, а так как "времени-то еще навалом"

Не помню, что еще было

https://www.youtube.com/watch?v=aktSN2Rh7a0
sage PoppyFanboy !VTLpv6lgGw 169 239576
Не могу учить новое, потому что боюсь забыть уже выученное. Не могу повторять старое, потому что уже достало делать это в тысячный раз
.png4,1 Мб, 2150x1350
PoppyFanboy !VTLpv6lgGw 170 240287
В общем, в тот день мне так и не удалось восстановить режим: проклятый телефон почему-то вырубился, пока я спал, хоть и был почти полностью заряжен, и я опять проснулся часа в два дня. И тут ко мне в голову пришла гениальная идея: а почему бы не бодрствовать до десяти вечера следующего дня? К тому времени я ведь уже достаточно сильно устану, чтобы заснуть вовремя. Так я и сделал (под конец было совсем не очень хорошо, но я дотерпел): заснул где-то в одиннадцать вечера, проснулся в девять. И, казалось бы, все здорово, режим восстановлен, как раз смогу выспаться за день до экзамена, но что-то пошло не так, и в тот день (сегодня) я не мог заснуть до четырех ночи. Это, конечно, не шесть утра, но все равно не очень, особенно если надо вставать в полвосьмого

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

ну ладно, если сдам геометрию (а это, скорее всего, произойдет), и тогда, даже если я не приду на оставшиеся два экзамена, то меня все равно не отчислят и все же да, это минус весь январь, экзамены не получается ни с чем совмещать

Завтра надо будет хотя бы повторить весь разобранный материал по геометрии и разобрать еще три новых билета по ней же. В идеале, конечно, еще поразбирать матан
.png1,3 Мб, 700x801
PoppyFanboy !VTLpv6lgGw 171 240635
Какой же я затупок. Сегодня +3 билета по геометрии и +половина билета по матану, очень туго идет
PoppyFanboy !VTLpv6lgGw 172 241755
сдал дифференциальную геометрию, теперь меня точно не выгонят до конца следующего семестра. Хотел сегодня еще поразбирать матанализ, но вот уже часа три не могу начать. Пойду лучше спать пораньше, а то совсем уже не соображаю

https://www.youtube.com/watch?v=LB7kQN6uNok
https://www.youtube.com/watch?v=_ocfE8Ua-7U
https://www.youtube.com/watch?v=IWrMbFNFeCw
sage PoppyFanboy !VTLpv6lgGw 173 243191
Well, I guess I'm fucked
sage PoppyFanboy !VTLpv6lgGw 174 243195
окей, я просто приму свою судьбу
ну хоть как-то PoppyFanboy !VTLpv6lgGw 175 245169
сессия, наконец-то, сдана, и я даже не потерял свою копеечную стипендию. Где-то я был готов, где-то мне очень сильно везло. Если в целом, то

по информатике была теория алгоритмов + что-то из дискретной математики

по дифференциальной геометрии - всякие штуки про кривые и поверхности, на самом деле, самый толковый предмет в этом семестре

по матанализу - какая-то сборная солянка: завершение телеги про дифференцирование функций от нескольких переменных, теорема о диффеоморфизмах вместе с крайне громоздкой подводкой к ней (про то, что если у нас есть C1-гладкое отображение из R^n в R^n, у которого якобиан не равен нулю, то оно локально обратимо и при этом обратное отображение будет тоже C1-гладким) (я отдельно выделяю именно эту теорему, потому что это единственная интересная вещь, которая была за весь семестр + потому что она использовалась в курсе дифференциальной геометрии), а дальше пошло лютейшее уныние с определением функциональных рядов и последовательностей и доказательством миллиарда теорем, к ним относящихся, степенные ряды, интегралы, зависящие от параметра (опять, те же теоремы + кое-что новое), несобственные интегралы, зависящие от параметра (и снова по кругу), ну и под конец криволинейные интегралы и комплексный анализ (так это называется вроде?). Довольно много материала относительно остальных предметов, все же лекции по матану были дважды в неделю (но я все равно не особо ходил), есть вещи, которые были просто оставлены без доказательства, короче, мне не понравилось

по алгебре как обычно было много всего, я как обычно все выучить не успел и в итоге мне просто повезло. Из интересного - жордановы матрицы для линейных операторов + выделение некоторых видов линейных операторов, для которых можно подобрать хороший базис, в котором матрица оператора будет максимально приближена к диагональной, и, наверное, все. Ну, еще было интересно посмотреть на то, как можно, используя универсальное свойство свободных групп, задать с точностью до изоморфизма группу, порожденную каким-то множеством (вот, например, группу перестановок трех элементов S3 можно задать как <S, T | SSS, TT, TSTS>; я тут не буду расписывать, что к чему, но просто такая форма записи забавно выглядит, особенно с учетом того, что символы S и T тут по сути ничего конкретного не обозначают)

--

в течение двух дней после последнего экзамена, включая уже прошедший сегодняшний, удалось вроде нормально от всего отвлечься:
- поиграл в ниер автомату и третий дарк (все же решил хотя бы один раз пройти его, а то получается так, что убогий второй я прошел до конца, а вроде как неплохой третий - бросил на серелине; неуважение)
- прибрал и пропылесосил комнату, теперь тут вроде можно жить
- успел провести какой-то совсем уж лютый для меня сонный марафон: 9 часов + еще 5 вдогонку почти сразу же. Это было непреднамеренно, я даже не помню, как я успел заснуть во второй раз. Но зато приснилось много снов, правда, ничего особо интересного выделить в них не могу

в течение сессии окончательно съехал и чуть ли непрерывно потреблял контент в фоновом режиме: если ничего не играет, никто в ухо не говорит хоть что-нибудь, то становится просто невыносимо уныло. Ничего не смог с собой поделать и вот в таком режиме помимо десятков часов стримов и видео прослушал аниму Shiki (кстати, неблохо, токийский гуль на максималках) и еще один тайтл. Надо как-то избавляться от этой привычки

не придумал пока что, чем буду заниматься завтра, что-нибудь поделаю, наверное, хватит уже отдыхать

--

случайно наткнулся на это. Есть классные моменты, но слишком много тупой долбежки. Немного скучно слушать не в фоновом режиме
https://www.youtube.com/watch?v=oWzzNvcxY4w

а вот это вполне неплохой спокен ворд (с точки зрения человека, который из спокен ворда слышал только "Static" от Godspeed You! Black Emperor)
https://vk.com/wall-101522128_2310

отличнейший трек, странно, что ранее на него не натыкался
https://www.youtube.com/watch?v=KBcJeDeYs0c

мне просто нравится музыка
https://www.youtube.com/watch?v=OPO8NV9ZBRM
https://www.youtube.com/watch?v=ZHrLNqDVewM

my life will never be the same
https://www.youtube.com/watch?v=UUBz_N_XsZM
https://www.youtube.com/watch?v=xScRZsdp8ho

https://www.youtube.com/watch?v=Oxudv1165fI
https://www.youtube.com/watch?v=8qt2WbfotkU
https://www.youtube.com/watch?v=ILXFkzACuPA
https://www.youtube.com/watch?v=WtOPR5uMyt8
https://www.youtube.com/watch?v=Quzsv6ekcPQ
https://www.youtube.com/watch?v=e_S9VvJM1PI

не помню, что еще интересного за прошедший месяц услышал

>>243191
>>243195
где тут кнопка удалить
ну хоть как-то PoppyFanboy !VTLpv6lgGw 175 245169
сессия, наконец-то, сдана, и я даже не потерял свою копеечную стипендию. Где-то я был готов, где-то мне очень сильно везло. Если в целом, то

по информатике была теория алгоритмов + что-то из дискретной математики

по дифференциальной геометрии - всякие штуки про кривые и поверхности, на самом деле, самый толковый предмет в этом семестре

по матанализу - какая-то сборная солянка: завершение телеги про дифференцирование функций от нескольких переменных, теорема о диффеоморфизмах вместе с крайне громоздкой подводкой к ней (про то, что если у нас есть C1-гладкое отображение из R^n в R^n, у которого якобиан не равен нулю, то оно локально обратимо и при этом обратное отображение будет тоже C1-гладким) (я отдельно выделяю именно эту теорему, потому что это единственная интересная вещь, которая была за весь семестр + потому что она использовалась в курсе дифференциальной геометрии), а дальше пошло лютейшее уныние с определением функциональных рядов и последовательностей и доказательством миллиарда теорем, к ним относящихся, степенные ряды, интегралы, зависящие от параметра (опять, те же теоремы + кое-что новое), несобственные интегралы, зависящие от параметра (и снова по кругу), ну и под конец криволинейные интегралы и комплексный анализ (так это называется вроде?). Довольно много материала относительно остальных предметов, все же лекции по матану были дважды в неделю (но я все равно не особо ходил), есть вещи, которые были просто оставлены без доказательства, короче, мне не понравилось

по алгебре как обычно было много всего, я как обычно все выучить не успел и в итоге мне просто повезло. Из интересного - жордановы матрицы для линейных операторов + выделение некоторых видов линейных операторов, для которых можно подобрать хороший базис, в котором матрица оператора будет максимально приближена к диагональной, и, наверное, все. Ну, еще было интересно посмотреть на то, как можно, используя универсальное свойство свободных групп, задать с точностью до изоморфизма группу, порожденную каким-то множеством (вот, например, группу перестановок трех элементов S3 можно задать как <S, T | SSS, TT, TSTS>; я тут не буду расписывать, что к чему, но просто такая форма записи забавно выглядит, особенно с учетом того, что символы S и T тут по сути ничего конкретного не обозначают)

--

в течение двух дней после последнего экзамена, включая уже прошедший сегодняшний, удалось вроде нормально от всего отвлечься:
- поиграл в ниер автомату и третий дарк (все же решил хотя бы один раз пройти его, а то получается так, что убогий второй я прошел до конца, а вроде как неплохой третий - бросил на серелине; неуважение)
- прибрал и пропылесосил комнату, теперь тут вроде можно жить
- успел провести какой-то совсем уж лютый для меня сонный марафон: 9 часов + еще 5 вдогонку почти сразу же. Это было непреднамеренно, я даже не помню, как я успел заснуть во второй раз. Но зато приснилось много снов, правда, ничего особо интересного выделить в них не могу

в течение сессии окончательно съехал и чуть ли непрерывно потреблял контент в фоновом режиме: если ничего не играет, никто в ухо не говорит хоть что-нибудь, то становится просто невыносимо уныло. Ничего не смог с собой поделать и вот в таком режиме помимо десятков часов стримов и видео прослушал аниму Shiki (кстати, неблохо, токийский гуль на максималках) и еще один тайтл. Надо как-то избавляться от этой привычки

не придумал пока что, чем буду заниматься завтра, что-нибудь поделаю, наверное, хватит уже отдыхать

--

случайно наткнулся на это. Есть классные моменты, но слишком много тупой долбежки. Немного скучно слушать не в фоновом режиме
https://www.youtube.com/watch?v=oWzzNvcxY4w

а вот это вполне неплохой спокен ворд (с точки зрения человека, который из спокен ворда слышал только "Static" от Godspeed You! Black Emperor)
https://vk.com/wall-101522128_2310

отличнейший трек, странно, что ранее на него не натыкался
https://www.youtube.com/watch?v=KBcJeDeYs0c

мне просто нравится музыка
https://www.youtube.com/watch?v=OPO8NV9ZBRM
https://www.youtube.com/watch?v=ZHrLNqDVewM

my life will never be the same
https://www.youtube.com/watch?v=UUBz_N_XsZM
https://www.youtube.com/watch?v=xScRZsdp8ho

https://www.youtube.com/watch?v=Oxudv1165fI
https://www.youtube.com/watch?v=8qt2WbfotkU
https://www.youtube.com/watch?v=ILXFkzACuPA
https://www.youtube.com/watch?v=WtOPR5uMyt8
https://www.youtube.com/watch?v=Quzsv6ekcPQ
https://www.youtube.com/watch?v=e_S9VvJM1PI

не помню, что еще интересного за прошедший месяц услышал

>>243191
>>243195
где тут кнопка удалить
176 245174
Привет, PoppyFanboy. А почему ты не пишешь, сколько баллов получил на экзамене? Для тебя оценки важны? Существуют ли у тебя ритуалы перед сдачей экзамена? Почему выбрал эту специальность?
.jpg178 Кб, 848x1199
PoppyFanboy !VTLpv6lgGw 177 245291
>>245174
привет
не пишу оценки за экзамены, потому что они очень сильно иногда зависят от принимающих преподавателей да и в целом нет конкретных критериев. Так что главное - что сдал (ну, вообще по информатике у меня отл, по остальным предметам - хрш, но это не особо о чем-то говорит)

если судорожные попытки впихнуть в себя материал по предмету в ночь перед экзаменом можно назвать ритуалом, то да, есть

>Почему выбрал эту специальность?


так уж вышло, что попал именно туда, куда попал: с моими баллами егэ в моем городе не было особой вариативности в выборе вуза. А если ты в целом, почему именно программирование слеш математика, то я просто в этом понимаю чуть-чуть больше, чем в каких бы то ни было других сферах

--

за последние месяца два мне настолько часто недвусмысленно напоминали о том, чтобы я уже сходил в парикмахерскую, что я и сам поверил в то, что "да, вот именно завтрашний день - это то самое время, когда мне надо будет выбрать стрижку, набрать фото-референсов для парикмахера, выбрать нормальный салон, притащить туда свою задницу и отдаться в руки мастеру на добровольных условиях". И поэтому сегодня полдня я сидел, листал фотки, думал о том, как бы лучше объяснить парикмахеру, что я от него хочу, но ни к чему более конкретному, кроме как "ну, вот здесь и здесь чуть короче, и больше нигде не трогайте" не пришел. Почему же? Может быть, потому что люди как правило ходят по салонам красоты, когда их что-то не устраивает, в то время как мне нормально и так? Короче, не знаю, наверное, пока самому не захочется, никуда не пойду, настолько сильно я на этом зациклился, что уже хуего

оставшуюся часть дня в основном потратил на всякие унылые бытовые штуки и немного игры. Лладно, я просто забуду про этот тупой день
178 245377
>>245291

>Так что главное - что сдал


Спасибо за ответы. Думаю, у тебя адекватное отношение к учебе, оценкам и к жизни в целом. И все у тебя будет хорошо в будущем.
PoppyFanboy !VTLpv6lgGw 179 245521
>>245377

>И все у тебя будет хорошо в будущем


ну, это мы еще посмотрим. Но, в любом случае, спасибо за добрые слова

--

чет я походу немного заболел. Сегодня не особо успешно пытался решать всякие задачки. Решил две относительно простых: одна про пересечение числовых множеств, а во второй нужно было по сути просто реализовать double ended queue. И еще с двумя пикрилейтед задачами почти ничего не получилось, нашел только тупые неэффективные решения.

задачу C можно решить с помощью хеш мэпов (сопоставлять элементам списка их координаты и при выполнении swap просто менять местами координаты), но, как оказалось, такой метод проигрывает и по памяти, и по скорости

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

вот, допустим, у нас есть массив a1, ..., ai, ..., an, где i - индекс наименьшего элемента. Рассматривать любые подмассивы, содержащие ai, кроме непосредственно всего массива нет (так как мы энивей домножаем ai на сумму элементов подмассива, так что нам остается максимизировать только сумму). Остается рассмотреть подмассивы a1, ..., ai-1 и ai+1, ..., an - на них то же самое

получается, что общая сложность решения равна T(n) = O(n) + T(i) + T(n - i - 1), где i - индекс минимального элемента
если на каждом уровне рекурсии i будет равно нулю, то T(n) = O(n^2), что ничем не лучше тупого перебора всех возможных подмассивов (ну, это еще при условии, что та, ерунда, которую я вот так неформально описал, будет работать)

--

надо, наверное, опять начать составлять планы на следующий день и начать ограничивать себя во времени на выполнение поставленных задач
sage PoppyFanboy !VTLpv6lgGw 180 245522
>>245521

>Рассматривать любые подмассивы, содержащие ai, кроме непосредственно всего массива смысла нет

64e1497e04ca3988ff57b334ceac3eae.jpg3,5 Мб, 3160x4079
Рируру !!gYmpHned/k 181 245540
>>245521

>а касательно задачи F


Задача напоминает элементарную maximum subarray problem, и из-за этого не выходит у меня из головы. Поэтому пишу свои мысли, чтобы обрести покой. Но интуиция подсказывает мне, что есть более простое решение на уровне пресловутой maximum subarray problem.

Заметим, что с каждой стороны ответа (L, R) будет либо край массива, либо элемент, строго меньший минимума на ответе min(emo[L] .. emo[R]). Иначе ответ можно было бы увеличить присоединением соседнего элемента. Для примера в условии наблюдение выполняется: подмассив [6, 4, 5] окружён числами 1 и 2.

Дальнейшие рассуждения проиллюстрирую примерами из условия [3, 1, 6, 4, 5, 2] и из головы [10, 5, 15, 6, 25, 8, 10, 12, 11, 8, 9, 6].

Нужно для каждого значения значимости V проверить все «острова» ≥ V. Ответ находится среди них.
Для этого отсортируем дни по значимости (стабильность не важна):
(№2: 1), (№6: 2), (№1: 3), (№4: 4), (№5: 5), (№3: 6)
(№2: 5), (№4: 6), (№12: 6), (№6: 8), (№10: 8), (№11: 9), (№1: 10), (№7: 10), (№9: 11), (№8: 12), (№3: 15), (№5: 25)
Теперь идём по отсортированному массиву с конца, добавляя номер очередного дня к островам.
Можно представить, что значение значимости — это уровень воды, и он понижается, расширяя острова, обнажая новые и объединяя существующие.

Представим такой остров как class Island { int L, R }.
Чтобы проверять каждое значение значимости, нужно в крайний по значимости момент (в первом примере все 6 моментов — крайние, во втором их 9), проверять все изменившиеся с последнего раза острова, ведя какой-нибудь List/Set<Island> changedIslands.

С учётом объединений это будет муторно, поэтому поступим проще.

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

Если в каждом острове вести онгоинговые сумму и минимум, его проверка будет занимать O(1). Число таких проверок = числу дней.

По шагам, для первого массива (* — новый/изменённый остров):
№3 → (3*)
№5 → (3), (5*)
№4 → (3–5*)
№1 → (1*), (3–5)
№6 → (1), (3–6*)
№2 → (1–6*)
Ответ среди звёздочек. Мы уже знаем, что это (3–5).

Для второго:
№5 → (5*)
№3 → (3*), (5)
№8 → (3), (5), (8*)
№9 → (3), (5), (8–9*)
№7 → (3), (5), (7–9*)
№1 → (1*), (3), (5), (7–9)
№11 → (1), (3), (5), (7–9), (11*)
№10 → (1), (3), (5), (7–11*)
№6 → (1), (3), (5–11*)
№12 → (1), (3), (5–12*)
№4 → (1), (3–12*)
№2 → (1–12*)
Ответ снова где-то среди звёздочек.

Что, сложно придумал? Ничего, сейчас вообще кишки будут.

...

Для работы с таким множеством островов за логарифмическое время необходимо упорядоченное множество поддиапазонов с операциями Lower/Upper.
Это наши перекрашенные знакомые шлюшки bisect_left/bisect_right. В 2019 стандартные деревья поиска обеспечивают эти операции.
Пример.
Пусть даны острова (L=1; R=3), (L=10; R=10), (L=15; R=18). Для упрощения примем это за Map<Integer, Island>, где ключ равен L.
Upper(k) возвращает минимальный элемент, больший k. (Lower — максимальный не больший.) Т. о. Upper(0) = Lower(1) = (L=1; R=3), Upper(15) = Lower(0) = ∅.
В терминах C++ это map::lower_bound/map::upper_bound, в терминах Java это NavigableMap.floorEntry / NavigableMap.higherEntry.

Здесь https://stackoverflow.com/a/44660378 описано, как при помощи этих операций добавить в такую структуру новое число (новый диапазон). В ходе операции не забудем аккуратно отследить min и sum нового острова, а её результат — это очередной звёздочный остров.
64e1497e04ca3988ff57b334ceac3eae.jpg3,5 Мб, 3160x4079
Рируру !!gYmpHned/k 181 245540
>>245521

>а касательно задачи F


Задача напоминает элементарную maximum subarray problem, и из-за этого не выходит у меня из головы. Поэтому пишу свои мысли, чтобы обрести покой. Но интуиция подсказывает мне, что есть более простое решение на уровне пресловутой maximum subarray problem.

Заметим, что с каждой стороны ответа (L, R) будет либо край массива, либо элемент, строго меньший минимума на ответе min(emo[L] .. emo[R]). Иначе ответ можно было бы увеличить присоединением соседнего элемента. Для примера в условии наблюдение выполняется: подмассив [6, 4, 5] окружён числами 1 и 2.

Дальнейшие рассуждения проиллюстрирую примерами из условия [3, 1, 6, 4, 5, 2] и из головы [10, 5, 15, 6, 25, 8, 10, 12, 11, 8, 9, 6].

Нужно для каждого значения значимости V проверить все «острова» ≥ V. Ответ находится среди них.
Для этого отсортируем дни по значимости (стабильность не важна):
(№2: 1), (№6: 2), (№1: 3), (№4: 4), (№5: 5), (№3: 6)
(№2: 5), (№4: 6), (№12: 6), (№6: 8), (№10: 8), (№11: 9), (№1: 10), (№7: 10), (№9: 11), (№8: 12), (№3: 15), (№5: 25)
Теперь идём по отсортированному массиву с конца, добавляя номер очередного дня к островам.
Можно представить, что значение значимости — это уровень воды, и он понижается, расширяя острова, обнажая новые и объединяя существующие.

Представим такой остров как class Island { int L, R }.
Чтобы проверять каждое значение значимости, нужно в крайний по значимости момент (в первом примере все 6 моментов — крайние, во втором их 9), проверять все изменившиеся с последнего раза острова, ведя какой-нибудь List/Set<Island> changedIslands.

С учётом объединений это будет муторно, поэтому поступим проще.

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

Если в каждом острове вести онгоинговые сумму и минимум, его проверка будет занимать O(1). Число таких проверок = числу дней.

По шагам, для первого массива (* — новый/изменённый остров):
№3 → (3*)
№5 → (3), (5*)
№4 → (3–5*)
№1 → (1*), (3–5)
№6 → (1), (3–6*)
№2 → (1–6*)
Ответ среди звёздочек. Мы уже знаем, что это (3–5).

Для второго:
№5 → (5*)
№3 → (3*), (5)
№8 → (3), (5), (8*)
№9 → (3), (5), (8–9*)
№7 → (3), (5), (7–9*)
№1 → (1*), (3), (5), (7–9)
№11 → (1), (3), (5), (7–9), (11*)
№10 → (1), (3), (5), (7–11*)
№6 → (1), (3), (5–11*)
№12 → (1), (3), (5–12*)
№4 → (1), (3–12*)
№2 → (1–12*)
Ответ снова где-то среди звёздочек.

Что, сложно придумал? Ничего, сейчас вообще кишки будут.

...

Для работы с таким множеством островов за логарифмическое время необходимо упорядоченное множество поддиапазонов с операциями Lower/Upper.
Это наши перекрашенные знакомые шлюшки bisect_left/bisect_right. В 2019 стандартные деревья поиска обеспечивают эти операции.
Пример.
Пусть даны острова (L=1; R=3), (L=10; R=10), (L=15; R=18). Для упрощения примем это за Map<Integer, Island>, где ключ равен L.
Upper(k) возвращает минимальный элемент, больший k. (Lower — максимальный не больший.) Т. о. Upper(0) = Lower(1) = (L=1; R=3), Upper(15) = Lower(0) = ∅.
В терминах C++ это map::lower_bound/map::upper_bound, в терминах Java это NavigableMap.floorEntry / NavigableMap.higherEntry.

Здесь https://stackoverflow.com/a/44660378 описано, как при помощи этих операций добавить в такую структуру новое число (новый диапазон). В ходе операции не забудем аккуратно отследить min и sum нового острова, а её результат — это очередной звёздочный остров.
182 245555
>>245521
А пикрилейтед задачи из какого-то бесплатного курса?
.jpg372 Кб, 893x1200
PoppyFanboy !VTLpv6lgGw 183 245828
>>245540
♥♥♥

>>245555
откуда конкретно я взял эти задачи - небольшой секрет, но они сами условия есть в интернетах, хотя бы на каком-нибудь e-olymp.com

--

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

Переделал задачу F из предыдущего поста, используя жесть крутую идею Рируру. Как оказалось, лимиты по памяти там позволяют хранить интервалы в массиве, можно даже не использовать BST а еще по ходу я узнал, что int не может принимать значение null, а сумму элементов массива лучше хранить в long, а не в int. Что ни день, то новые открытия, вот ето да

а с задачей C так ничего и не вышло, ну и нну ее она должна вроде быть простой, как же так
.jpg85 Кб, 928x916
тупой гон на дарк соус три PoppyFanboy !VTLpv6lgGw 184 246441
Ничего не хочу делать. Три дня подряд играл в игры, в основном в третий дарк. Я не знаю, он мне даже не нравится (но, я правда, еще не играл ни в одно dlc, так что это только касательно основной обязательной ветки игры минус финальный босс, его я тоже еще не трогал):
- локации большие, нудные и относительно простые. Постоянно либо какие-то огромные ничем не заполненные пространства, либо тупо коридоры. В особенности меня выбесили Цитадель Фаррона (ну неужели было так сложно как в первой части добавить кольцо для быстрой ходьбы по болотам?) и коридорная локация, которая находится рядом со старым королем демонов на тлеющем озере (она существует только потому, что геймдизайнерам было некуда запихнуть книжки с пиромантией). Единственная локация, которая мне действительно понравилась - это Храм Глубин: многоуровневая, разнообразные враги, есть встречи с npc, хоть и простой, но оригинальный босс.

--

И в этот момент, чтобы быть до конца честным, я решил по-быстрому осмотреть скипнутый мною опциональный Сад Снедаемого Короля, и был очень приятно удивлен Сама локация до ужаса убогая: какое-то токсичное болото, понапихано рыцарей и вот этих вот https://darksouls3.wiki.fextralife.com/Pus+of+Man жутких штук. Я потому и скипнул ее при прохождении, совсем уж это все непрезентабельно выглядит. Но кто ж знал, что за этой локацией находятся несколько геймдизайнерских бриллиантов?

Во-первых, Оцейрос, босс этой локации, - один из лучших боссов в третьем дарке. В отличие от большинства он действительно старается прикончить тебя: быстро носится по арене, размахивает своим хвостом и еще при этом что-то кастует своим посохом. На самом деле, не могу четко сформулировать, почему он мне так понравился, возможно, своим мувсетом немного напомнил лучшего босса из первой части, дракона Каламита. А еще прямо за этим боссом был очень классно задизайненный моб - человек-змей, как в первой части, только очень сильно сгорбившийся

Во-вторых, за Оцейросом следует воплощение одного из лучших геймдизайнерских решений в этой игре - переделанная версия начальной локации игры вместе с измененной версией начального босса (кстати, похожую штуку сделали создатели второго хотлайна, но там не отдельный уровень переделан, а вообще все). Локация выглядит супер-круто: абсолютно черное небо, везде темно, так что расставленные везде свечи очень красиво контрастируют с окружением. Ты идешь по вроде как знакомым местам, но файтишься с новыми мобами и собираешь новые блестяшки, а потом тебе еще и старого-нового босса подсовывают с дополненным мувсетом. Кстати, да, это второй-лучший босс в игре: гениальнейший мувсет, особенно хорош пинок: не знаю, было ли так задумано разработчиками, но в какой-то момент он меня подбросил в воздух своей алебардой и, пока я находился в воздухе, прописал своим железным сапогом прямо в лицо.

Ну, и темная версия Храма Огня, конечно, восхитительна. Единственный минус - это то что нельзя забраться на башню. Очень странное решение - просто отрезали кусочек локации, необязательно же даже туда что-то класть, просто дали бы возможность побродить там, но нет. Кстати, на крышу храма все так же можно забраться "нелегально" с помощью фичи с деревом, но там тоже везде пусто. Опять же, они же знали про эту фичу, можно было бы в качестве пасхалки засунуть какого-нибудь npc, ну, или хотя бы чисто символический айтем положить, но нет.

В-третьих, как оказалось, за Оцейросом лежит ключ к еще одной локации, к Пику Древних Драконов. И я бы в жизни не догадался, как туда попасть, если бы не подсмотрел в интернете. Сам ключ - это жест "Путь Дракона", который надо применить возле закоменевшего получеловека-полудракона, который сидит в одной из предыдущих локаций. К пику драконов я еще не ходил, но уже заочно признаю его одной из лучших локаций в игре просто из-за того, насколько оригинален способ, с помощью которого ты до нее добраешься

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

--

а теперь назад к бессодержательным и необъективным придиркам:
- слишком много прямоходящих боссов. Я не знаю, намеренно это было сделано или же это просто из-за того, что дизайнить двухметровых рыцарей просто проще, но добрая часть боссов в третьем дарке - это двуногие в основном человекоподобные твари в броне. Вот можно даже по порядку пойти: Судия Гундир и его улучшенная версия из темной версии Храма Огня, Чемпион Гундир (это исключения, они склишком хороши), Вордт из Холодной долины (хоть и не прямоходящий, но тупой рыцарь), Хранители Бездны (куча тупых рыцарей), Понтифик Саливан (тупой рыцарь), Гигант Йорм (худший босс в игре, просто огромный тупой болван), Доспехи Драконоборца (худший после Йорма, чтобы сделать такой вывод, достаточно даже того факта, что ему проходит урон, когда ты бьешь по его щиту, НО, только если он не поднимает его для блока: тут щит вдруг становится непробиваемой глыбой, от которой у тебя отскакивает клинок при ударе; что сложного было сделать ему такой же по механике щит как у Зеркального Рыцаря их второно дарка или как у стражей в Анор Лондо из первого - непонятно), Братья-Близнецы, Лотрик и Лориан (можно было бы придумать побольше спеллов во второй фазе, чем два; так жалко их, конечно, убивать, не понимаю, почему нельзя было бы добавить в игру каккой-нибудь способ избежать схватки). Ну, это все не считая финального босса и боссов dlc, про них я принципиально пока что говорить ничего не буду, пока не пройду сам. А, и еще была танцовщица, но, ладно, она весьма не плоха

И раз уж пошла речь о плохих боссах, то отдельно стоит упомянуть Старого Короля Демонов и червя, который ползает около боссфайта с королем. Они похожи в том, что к ним тупо опасно подходить близко: червь постоянно находится в движении, так что к нему и не подойти толком, а король демонов постоянно кастует вокруг себя огненные окружности, которые постепенно сужаются, и, если ты изначально не был снаружи окружности, то, извини, но увернуться от него или перепрыгнуть через него ты не сможешь, получай урон в лицо, просто потому что ты оказался недостаточно далеко от босса

- ну, мне просто показалась большая часть игры слишком уж скучной. Огромный кусок игры - от поселения нежити и до Храма Глубин (не включая Храм Глубин) откровенно занудная: какие-то обветшалые деревни, леса, болота, meh. Катакомбы Картуса, Замок Лотрика (ту его часть, которая находится за танцовщицей) и Великие Архивы хочется тупо поскорее пробежать. Какие-то они однообразные и унылые. Единственное, что запомнилось интересного - клетка под потолком в архивах, в которую можно забраться через проход на крыше, а в остальном - все коридорно, линейно, ну, вот только в архивах было чуть больше иллюзорных стен, чем в других локациях, это приятно.

А вот территория перед Храмом Огня (в том числе, конечно, темная версия), Стена Замка Лотрика, Храм Глубин и Иритилл вроде неплохие

--

На этом хоть сколько-нибудь содержательные придирки у меня заканчиваются, и начинается тупо нытье, которое актуально в любой части дарк соулсов
- я понятия не имею, во что качаться как чисто ПВЕ-игроку. Магия и чудеса выглядят как-то так себе, пиромантия вроде неплохая, не надо особо вкачивать интеллект/веру для большей ее части, но все равно чет не очень заходит. Поэтому я всю игру бегаю в каких-то максимально легких обносках с бандитским ножом, саблей рыцаря Понтифика и каким-то щитом на 100% физической защиты, и чувствую, что очень много контента проходит мимо меня, когда затариваюсь заклинаниями, чудесами и пиромантией (которые я не могу использовать, потому что вроде как и так справляюсь), чтобы слить души, которые мне уже некуда девать

...

https://www.youtube.com/watch?v=5eV5elH6Xhw
https://www.youtube.com/watch?v=6Zr09L2Yr0M
https://www.youtube.com/watch?v=8UVNT4wvIGY

бален, боюсь перечитывать, там же куча ошибок, ну да ладно
.jpg85 Кб, 928x916
тупой гон на дарк соус три PoppyFanboy !VTLpv6lgGw 184 246441
Ничего не хочу делать. Три дня подряд играл в игры, в основном в третий дарк. Я не знаю, он мне даже не нравится (но, я правда, еще не играл ни в одно dlc, так что это только касательно основной обязательной ветки игры минус финальный босс, его я тоже еще не трогал):
- локации большие, нудные и относительно простые. Постоянно либо какие-то огромные ничем не заполненные пространства, либо тупо коридоры. В особенности меня выбесили Цитадель Фаррона (ну неужели было так сложно как в первой части добавить кольцо для быстрой ходьбы по болотам?) и коридорная локация, которая находится рядом со старым королем демонов на тлеющем озере (она существует только потому, что геймдизайнерам было некуда запихнуть книжки с пиромантией). Единственная локация, которая мне действительно понравилась - это Храм Глубин: многоуровневая, разнообразные враги, есть встречи с npc, хоть и простой, но оригинальный босс.

--

И в этот момент, чтобы быть до конца честным, я решил по-быстрому осмотреть скипнутый мною опциональный Сад Снедаемого Короля, и был очень приятно удивлен Сама локация до ужаса убогая: какое-то токсичное болото, понапихано рыцарей и вот этих вот https://darksouls3.wiki.fextralife.com/Pus+of+Man жутких штук. Я потому и скипнул ее при прохождении, совсем уж это все непрезентабельно выглядит. Но кто ж знал, что за этой локацией находятся несколько геймдизайнерских бриллиантов?

Во-первых, Оцейрос, босс этой локации, - один из лучших боссов в третьем дарке. В отличие от большинства он действительно старается прикончить тебя: быстро носится по арене, размахивает своим хвостом и еще при этом что-то кастует своим посохом. На самом деле, не могу четко сформулировать, почему он мне так понравился, возможно, своим мувсетом немного напомнил лучшего босса из первой части, дракона Каламита. А еще прямо за этим боссом был очень классно задизайненный моб - человек-змей, как в первой части, только очень сильно сгорбившийся

Во-вторых, за Оцейросом следует воплощение одного из лучших геймдизайнерских решений в этой игре - переделанная версия начальной локации игры вместе с измененной версией начального босса (кстати, похожую штуку сделали создатели второго хотлайна, но там не отдельный уровень переделан, а вообще все). Локация выглядит супер-круто: абсолютно черное небо, везде темно, так что расставленные везде свечи очень красиво контрастируют с окружением. Ты идешь по вроде как знакомым местам, но файтишься с новыми мобами и собираешь новые блестяшки, а потом тебе еще и старого-нового босса подсовывают с дополненным мувсетом. Кстати, да, это второй-лучший босс в игре: гениальнейший мувсет, особенно хорош пинок: не знаю, было ли так задумано разработчиками, но в какой-то момент он меня подбросил в воздух своей алебардой и, пока я находился в воздухе, прописал своим железным сапогом прямо в лицо.

Ну, и темная версия Храма Огня, конечно, восхитительна. Единственный минус - это то что нельзя забраться на башню. Очень странное решение - просто отрезали кусочек локации, необязательно же даже туда что-то класть, просто дали бы возможность побродить там, но нет. Кстати, на крышу храма все так же можно забраться "нелегально" с помощью фичи с деревом, но там тоже везде пусто. Опять же, они же знали про эту фичу, можно было бы в качестве пасхалки засунуть какого-нибудь npc, ну, или хотя бы чисто символический айтем положить, но нет.

В-третьих, как оказалось, за Оцейросом лежит ключ к еще одной локации, к Пику Древних Драконов. И я бы в жизни не догадался, как туда попасть, если бы не подсмотрел в интернете. Сам ключ - это жест "Путь Дракона", который надо применить возле закоменевшего получеловека-полудракона, который сидит в одной из предыдущих локаций. К пику драконов я еще не ходил, но уже заочно признаю его одной из лучших локаций в игре просто из-за того, насколько оригинален способ, с помощью которого ты до нее добраешься

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

--

а теперь назад к бессодержательным и необъективным придиркам:
- слишком много прямоходящих боссов. Я не знаю, намеренно это было сделано или же это просто из-за того, что дизайнить двухметровых рыцарей просто проще, но добрая часть боссов в третьем дарке - это двуногие в основном человекоподобные твари в броне. Вот можно даже по порядку пойти: Судия Гундир и его улучшенная версия из темной версии Храма Огня, Чемпион Гундир (это исключения, они склишком хороши), Вордт из Холодной долины (хоть и не прямоходящий, но тупой рыцарь), Хранители Бездны (куча тупых рыцарей), Понтифик Саливан (тупой рыцарь), Гигант Йорм (худший босс в игре, просто огромный тупой болван), Доспехи Драконоборца (худший после Йорма, чтобы сделать такой вывод, достаточно даже того факта, что ему проходит урон, когда ты бьешь по его щиту, НО, только если он не поднимает его для блока: тут щит вдруг становится непробиваемой глыбой, от которой у тебя отскакивает клинок при ударе; что сложного было сделать ему такой же по механике щит как у Зеркального Рыцаря их второно дарка или как у стражей в Анор Лондо из первого - непонятно), Братья-Близнецы, Лотрик и Лориан (можно было бы придумать побольше спеллов во второй фазе, чем два; так жалко их, конечно, убивать, не понимаю, почему нельзя было бы добавить в игру каккой-нибудь способ избежать схватки). Ну, это все не считая финального босса и боссов dlc, про них я принципиально пока что говорить ничего не буду, пока не пройду сам. А, и еще была танцовщица, но, ладно, она весьма не плоха

И раз уж пошла речь о плохих боссах, то отдельно стоит упомянуть Старого Короля Демонов и червя, который ползает около боссфайта с королем. Они похожи в том, что к ним тупо опасно подходить близко: червь постоянно находится в движении, так что к нему и не подойти толком, а король демонов постоянно кастует вокруг себя огненные окружности, которые постепенно сужаются, и, если ты изначально не был снаружи окружности, то, извини, но увернуться от него или перепрыгнуть через него ты не сможешь, получай урон в лицо, просто потому что ты оказался недостаточно далеко от босса

- ну, мне просто показалась большая часть игры слишком уж скучной. Огромный кусок игры - от поселения нежити и до Храма Глубин (не включая Храм Глубин) откровенно занудная: какие-то обветшалые деревни, леса, болота, meh. Катакомбы Картуса, Замок Лотрика (ту его часть, которая находится за танцовщицей) и Великие Архивы хочется тупо поскорее пробежать. Какие-то они однообразные и унылые. Единственное, что запомнилось интересного - клетка под потолком в архивах, в которую можно забраться через проход на крыше, а в остальном - все коридорно, линейно, ну, вот только в архивах было чуть больше иллюзорных стен, чем в других локациях, это приятно.

А вот территория перед Храмом Огня (в том числе, конечно, темная версия), Стена Замка Лотрика, Храм Глубин и Иритилл вроде неплохие

--

На этом хоть сколько-нибудь содержательные придирки у меня заканчиваются, и начинается тупо нытье, которое актуально в любой части дарк соулсов
- я понятия не имею, во что качаться как чисто ПВЕ-игроку. Магия и чудеса выглядят как-то так себе, пиромантия вроде неплохая, не надо особо вкачивать интеллект/веру для большей ее части, но все равно чет не очень заходит. Поэтому я всю игру бегаю в каких-то максимально легких обносках с бандитским ножом, саблей рыцаря Понтифика и каким-то щитом на 100% физической защиты, и чувствую, что очень много контента проходит мимо меня, когда затариваюсь заклинаниями, чудесами и пиромантией (которые я не могу использовать, потому что вроде как и так справляюсь), чтобы слить души, которые мне уже некуда девать

...

https://www.youtube.com/watch?v=5eV5elH6Xhw
https://www.youtube.com/watch?v=6Zr09L2Yr0M
https://www.youtube.com/watch?v=8UVNT4wvIGY

бален, боюсь перечитывать, там же куча ошибок, ну да ладно
завершение тупого гона на дарк соулс и планы PoppyFanboy !VTLpv6lgGw 185 246444
...
- я зафейлил все квесты: случайно передал пепел Орбека из Винхейма старухе, а не Юрии - не получил оружие, которое больше нигде не достать; убил гиганта Йорма до того, как высвободил Сигварда из Катарины из подземелья Иритилла - не получил его доспехи; случайно купил темные чудеса у Ирины до покупки всех светлых - теперь она не принимает у меня книжку со светлыми чудесами; пропустил кучу фантомов (по крайней мере Кирка); полностью зафейлил квестовою линию с Сиррис из-за того, что не призываю фантомов. Ну хоть квест с Анри не зафейлил. Я понимаю, что это можно будет восполнить в нг+, но просто немного обидно. Но это все цена атмосферы загадочности и недосказанности

В общем, не знаю, возможно, это из-за того, что первый дарк я прошел хронологически первым, но он все еще остается для меня лучшим среди всех трех частей. Но третью часть я все же доиграю, наверное, а вот допроходить dlc во второй части уже вряд ли буду

--

короче, да, я играл в игры и ничем больше не занимался
в понедельник вот только почитал немножко про всякое

Почитал про clone() и нюансы его использования (там про Cloneable и CloneNotSupportedException), пришел к выводу, что лучше использовать фабричные методы, и про лямбды еще.

Попутно узнал про то, что интерфейсы не могут переопределять методы, объявленные в классе Object (вызывает ошибку времени компиляции; кстати, не знаю, зачем оно так сделано, если classes и так win over interfaces: в теории все дефолтные методы с сигнатурами, совпадающими с сигнатурами методов из Object, должны были бы просто игнорироваться). Но при этом просто объявить эти методы в каком-нибудь интерфейсе без реализации - можно, как, например, это сделано в Comparator: там это нужно, чтобы можно было прицепить javadoc с описанием того, как примерно должен работать метод equals в реализациях компаратора.

Узнал про *вариантность
https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)
то есть конкретно в джаве SomeClass<S> и SomeClass<T> будут инвариантны (если S и T - различные типы), а массивы - ковариантны

И еще почитал про Type Erasure и почему в джаве нельзя создавать массивы из элементов дженерик типов. В частности, если бы создание дженерик массивов было бы возможно, то в массив из SomeClass<T> можно было бы спокойно пихать элементы типа SomeClass<S>
https://docs.oracle.com/javase/tutorial/java/generics/erasure.html
https://www.baeldung.com/java-type-erasure

http://www.tothenew.com/blog/why-is-generic-array-creation-not-allowed-in-java/

SomeClass<T> arrayOfGenerics[] = new SomeClass<T>[10]; // Suppose generic array creation is legal
Object objArray[] = arrayOfGenerics;
objArray[0] = new SomeClass<S>();

если бы на месте SomeClass<T> было бы, скажем, Integer, а на месте SomeClass<S> - String, то последняя строка кода вызывала бы ArrayStoreException, но, так как во время компиляции выполняется type erasure, то SomeClass<S> и SomeClass<T> заменяются на просто SomeClass (raw type), поэтому arrayOfGenerics становится SomeClass[], и все по итогу вполне спокойно проходит. И, таким образом, когда мы попытаемся достать нулевой элемент с помощью вроде как абсолютно безобидного SomeClass<T> val = arrayOfGenerics[0], выбросится что-то вроде ClassCastException

--

дда, возвращаясь к самому началу: я ничего не хочу делать, только сидеть и залипать в экран компа. Надо что-то делать с этим
Короче, завтра:
- разобрать два билета по диффурам хаха, это продолжается. Где-то в конце февраля будет необязательный, но сокращающий количество материала, который надо будет учить в летнюю сессию коллоквиум по диффурам. Надо бы подготовиться
- полтора часа почитать Core Java
- сделать уже новый коммит для архиватора
- порисовать что-нибудь

- и унывать чуть поменьше, а то в последнее время настроение как-то очень сильно ухудшилось

--

https://www.youtube.com/watch?v=z-2Mrws6zGc
https://www.youtube.com/watch?v=HUHC9tYz8ik
https://www.youtube.com/watch?v=VlIExbHPWtw

медиа контент про ОБОРОТНЕВ в 2017, оу вау
https://www.youtube.com/watch?v=ag_9MsoErQc
завершение тупого гона на дарк соулс и планы PoppyFanboy !VTLpv6lgGw 185 246444
...
- я зафейлил все квесты: случайно передал пепел Орбека из Винхейма старухе, а не Юрии - не получил оружие, которое больше нигде не достать; убил гиганта Йорма до того, как высвободил Сигварда из Катарины из подземелья Иритилла - не получил его доспехи; случайно купил темные чудеса у Ирины до покупки всех светлых - теперь она не принимает у меня книжку со светлыми чудесами; пропустил кучу фантомов (по крайней мере Кирка); полностью зафейлил квестовою линию с Сиррис из-за того, что не призываю фантомов. Ну хоть квест с Анри не зафейлил. Я понимаю, что это можно будет восполнить в нг+, но просто немного обидно. Но это все цена атмосферы загадочности и недосказанности

В общем, не знаю, возможно, это из-за того, что первый дарк я прошел хронологически первым, но он все еще остается для меня лучшим среди всех трех частей. Но третью часть я все же доиграю, наверное, а вот допроходить dlc во второй части уже вряд ли буду

--

короче, да, я играл в игры и ничем больше не занимался
в понедельник вот только почитал немножко про всякое

Почитал про clone() и нюансы его использования (там про Cloneable и CloneNotSupportedException), пришел к выводу, что лучше использовать фабричные методы, и про лямбды еще.

Попутно узнал про то, что интерфейсы не могут переопределять методы, объявленные в классе Object (вызывает ошибку времени компиляции; кстати, не знаю, зачем оно так сделано, если classes и так win over interfaces: в теории все дефолтные методы с сигнатурами, совпадающими с сигнатурами методов из Object, должны были бы просто игнорироваться). Но при этом просто объявить эти методы в каком-нибудь интерфейсе без реализации - можно, как, например, это сделано в Comparator: там это нужно, чтобы можно было прицепить javadoc с описанием того, как примерно должен работать метод equals в реализациях компаратора.

Узнал про *вариантность
https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)
то есть конкретно в джаве SomeClass<S> и SomeClass<T> будут инвариантны (если S и T - различные типы), а массивы - ковариантны

И еще почитал про Type Erasure и почему в джаве нельзя создавать массивы из элементов дженерик типов. В частности, если бы создание дженерик массивов было бы возможно, то в массив из SomeClass<T> можно было бы спокойно пихать элементы типа SomeClass<S>
https://docs.oracle.com/javase/tutorial/java/generics/erasure.html
https://www.baeldung.com/java-type-erasure

http://www.tothenew.com/blog/why-is-generic-array-creation-not-allowed-in-java/

SomeClass<T> arrayOfGenerics[] = new SomeClass<T>[10]; // Suppose generic array creation is legal
Object objArray[] = arrayOfGenerics;
objArray[0] = new SomeClass<S>();

если бы на месте SomeClass<T> было бы, скажем, Integer, а на месте SomeClass<S> - String, то последняя строка кода вызывала бы ArrayStoreException, но, так как во время компиляции выполняется type erasure, то SomeClass<S> и SomeClass<T> заменяются на просто SomeClass (raw type), поэтому arrayOfGenerics становится SomeClass[], и все по итогу вполне спокойно проходит. И, таким образом, когда мы попытаемся достать нулевой элемент с помощью вроде как абсолютно безобидного SomeClass<T> val = arrayOfGenerics[0], выбросится что-то вроде ClassCastException

--

дда, возвращаясь к самому началу: я ничего не хочу делать, только сидеть и залипать в экран компа. Надо что-то делать с этим
Короче, завтра:
- разобрать два билета по диффурам хаха, это продолжается. Где-то в конце февраля будет необязательный, но сокращающий количество материала, который надо будет учить в летнюю сессию коллоквиум по диффурам. Надо бы подготовиться
- полтора часа почитать Core Java
- сделать уже новый коммит для архиватора
- порисовать что-нибудь

- и унывать чуть поменьше, а то в последнее время настроение как-то очень сильно ухудшилось

--

https://www.youtube.com/watch?v=z-2Mrws6zGc
https://www.youtube.com/watch?v=HUHC9tYz8ik
https://www.youtube.com/watch?v=VlIExbHPWtw

медиа контент про ОБОРОТНЕВ в 2017, оу вау
https://www.youtube.com/watch?v=ag_9MsoErQc
Dx2NvT9U0AA6RnY.jpg290 Кб, 1200x899
PoppyFanboy !VTLpv6lgGw 186 246597
Опять ничего не делал. Начал было смотреть диффуры, но там с самого начала начинается что-то сложное, и в конспектах тоже какая-то жуткая мешанина. В общем, я споткнулся об первую же задачу из плана, пару раз попробовал ее выполнить, ничего не вышло, и после этого я вообще больше ничего не делал

Составил чуть более подробный и довольно щадящий план на завтрашний день, посмотрим, что из этого выйдет. Алсо так уж вышло, что на выходных я буду не дома, а следовательно, без компа, так что, наверное, придется в основном просто читать что-нибудь в свободное время

Должен ли я злиться на себя за потерянное время? Не знаю, вроде как да, а вроде как и в этом нет особо смысла

--

Кстати, неожиданно выяснилось, что код вроде
SomeClass<T> classT = new SomeClass();
вполне себе компилируется, хоть и с предупреждением. Вероятно, это сделали, чтобы можно было использовать легаси код, который, например, возвращает raw type ArrayList. Но я точно не знаю, это только моя догадка, надо будет получше погуглить

И, короче, получается, что можно сделать вот такую забавную штуку
https://ideone.com/wZBezb

--

балин, какой же я все-таки придурок
1549663775519.png1,3 Мб, 800x1132
sage PoppyFanboy !VTLpv6lgGw 187 246728
снова ничего
1549749568211.jpeg70 Кб, 790x1037
sage PoppyFanboy !VTLpv6lgGw 188 246862
Сегодня предпринял вторую попытку разобраться в диффурах, но снова ничего не получилось: то ли я совсем тупой, то ли там действительно пропущено куча шагов в доказательстве, без которых вообще непонятно, как одно следует из другого. И самое неприятное, что никакого печатного пособия, где было бы именно то доказательство, которое было у нас на лекции, я не нашел

Кстати, вчера удалось заснуть относительно рано: где-то в час ночи вместо 5-6 утра. Но это, скорее всего, из-за того, что я сильно устал за вчерашний день
Qooo003.jpg246 Кб, 1200x849
PoppyFanboy !VTLpv6lgGw 189 247136
Приехал домой, чет опять сильно устал за день. А тут, оказывается, неубранный снег растаял, здорово, теперь можно не бояться подскользнуться (только теперь появилась вероятность тупо утонуть)

С завтрашнего дня, кстати, начну ходить на пары, я уже отвык немного

https://www.youtube.com/watch?v=3Fzi4lBzqIg
.jpg155 Кб, 1024x576
PoppyFanboy !VTLpv6lgGw 190 247420
Да что за бред, я снова запутался в диффурах: все свободное время потратил на них сегодня. Но зато удалось проснуться аж в 8:30 и почти полностью сделать трекинг времени, но в остальном, ээ, я очень сильно устал и сделал очень мало за сегодня (но все равно больше, чем вчера)

На улице творится нечто жуткое, при этом еще и транспорт ходит непонятно как. Верните, пожалуйста, гололед, плаваю-то я не очень хорошо

По английскому опять надо будет пройти в течение семестра какой-нибудь онлайн-курс и прочесть n знаков. А я думал, что хотя бы в этот раз меня оставят в покое

опять, опять, какая-то ерунда происходит

--

лил пип какой-то
https://www.youtube.com/watch?v=BW3nbMKpIsU
PoppyFanboy !VTLpv6lgGw 191 247890
Если здраво поразмыслить, то эта идея изначально была обречена на провал: здесь слишком много несостыковок, и я не уверен, что их можно так просто игнорировать. Но все равно, хоть на практике, наверное, это реализовать не получится, я все же попробую вычленить и удержать в голове хотя бы кусочек от общей картины. Не знаю, что из этого выйдет, это все так глупо, но ничего лучше придумать не могу. Хотя, многие ведь тем же самым занимаются, просто неосознанно. Короче, в любом случае, не стоит всецело полагаться на это и ожидать внезапного чуда, такое тут обычно не случается. Ладно, хватит, это я еще потом обдумаю

все, здесь проведена воображаемая черта. На самом деле, она уже была проведена немного раньше, но это не так важно

теперь о более конкретном

Что не так (кроме очевидного, это отдельно)
- я ставлю слишком много ежедневных целей, как следствие не выполняю и половины, но и выполненные тоже не отмечаю в голове как что-то завершенное (я ведь так мало сделал, какая разница)
- я не ограничиваю себя во времени ни на отдых, ни на занятия
- я либо не отвлекаюсь, либо не отвлекаюсь от отвлечений: если что-то начал, то с места не слезу, пока не дойду до какого-нибудь чекпоинта; если решил отдохнуть, то не могу остановиться
- мультитаскинг
- я чувствую себя виноватым за бездействие. Вот, например, в последнее время из-за постоянных пробок на транспорт уходит как-то слишком много времени, я чувствую, что мог бы потратить его на что-то, но зачастую, когда вокруг так шумно, сложно что-то делать (частный случай первого, можно объединить)

Решения
- не ставить много целей, отмечать сделанное
- ставить таймер
- ставить таймер, отвлекаться, ставить таймер, не отвлекаться
- просто нет
- мне не должно быть стыдно за потерянное время, его не вернуть и не наверстать в мгновение. И вообще нужно перестать воспринимать его как "потерянное", я же не был в какой-то коме в этот момент

Наверное, все же стоит писать кратко планы и здесь
- проснуться вовремя, чтобы не спешить потом
- сходить на пары, посмотреть, что там за новые предметы
- по дороге назад попробовать почитать CLRS. Я сейчас на четвертой главе (Divide and Conquer), там вроде будет какой-то алгоритм перемножения квадратных матриц
- как приду домой, поспать полчаса
- сделать коммит в архиватор, не важно, насколько пустяковый. По сути я для него еще ничего не сделал, надо исправлять. Время - один час: вспомнить, что я там уже написал, определить, что надо сделать дальше. Это относительно мало, но если выделить больше, то я не вывезу остальные задачи
- отвлечь себя чем-нибудь минут на 10
- 1.5 часа на разбор диффуров. Лучше раньше, чем когда уже будут поджимать сроки
- отвлечь себя чем-нибудь на 15 минут

https://www.youtube.com/watch?v=rioRQosAnQY
PoppyFanboy !VTLpv6lgGw 191 247890
Если здраво поразмыслить, то эта идея изначально была обречена на провал: здесь слишком много несостыковок, и я не уверен, что их можно так просто игнорировать. Но все равно, хоть на практике, наверное, это реализовать не получится, я все же попробую вычленить и удержать в голове хотя бы кусочек от общей картины. Не знаю, что из этого выйдет, это все так глупо, но ничего лучше придумать не могу. Хотя, многие ведь тем же самым занимаются, просто неосознанно. Короче, в любом случае, не стоит всецело полагаться на это и ожидать внезапного чуда, такое тут обычно не случается. Ладно, хватит, это я еще потом обдумаю

все, здесь проведена воображаемая черта. На самом деле, она уже была проведена немного раньше, но это не так важно

теперь о более конкретном

Что не так (кроме очевидного, это отдельно)
- я ставлю слишком много ежедневных целей, как следствие не выполняю и половины, но и выполненные тоже не отмечаю в голове как что-то завершенное (я ведь так мало сделал, какая разница)
- я не ограничиваю себя во времени ни на отдых, ни на занятия
- я либо не отвлекаюсь, либо не отвлекаюсь от отвлечений: если что-то начал, то с места не слезу, пока не дойду до какого-нибудь чекпоинта; если решил отдохнуть, то не могу остановиться
- мультитаскинг
- я чувствую себя виноватым за бездействие. Вот, например, в последнее время из-за постоянных пробок на транспорт уходит как-то слишком много времени, я чувствую, что мог бы потратить его на что-то, но зачастую, когда вокруг так шумно, сложно что-то делать (частный случай первого, можно объединить)

Решения
- не ставить много целей, отмечать сделанное
- ставить таймер
- ставить таймер, отвлекаться, ставить таймер, не отвлекаться
- просто нет
- мне не должно быть стыдно за потерянное время, его не вернуть и не наверстать в мгновение. И вообще нужно перестать воспринимать его как "потерянное", я же не был в какой-то коме в этот момент

Наверное, все же стоит писать кратко планы и здесь
- проснуться вовремя, чтобы не спешить потом
- сходить на пары, посмотреть, что там за новые предметы
- по дороге назад попробовать почитать CLRS. Я сейчас на четвертой главе (Divide and Conquer), там вроде будет какой-то алгоритм перемножения квадратных матриц
- как приду домой, поспать полчаса
- сделать коммит в архиватор, не важно, насколько пустяковый. По сути я для него еще ничего не сделал, надо исправлять. Время - один час: вспомнить, что я там уже написал, определить, что надо сделать дальше. Это относительно мало, но если выделить больше, то я не вывезу остальные задачи
- отвлечь себя чем-нибудь минут на 10
- 1.5 часа на разбор диффуров. Лучше раньше, чем когда уже будут поджимать сроки
- отвлечь себя чем-нибудь на 15 минут

https://www.youtube.com/watch?v=rioRQosAnQY
PoppyFanboy !VTLpv6lgGw 192 248127
>>247890

>Ладно, хватит, это я еще потом обдумаю


Все, я разобрался, теперь мне значительно лучше. Даже как-то неожиданно

Так или иначе поделал всего

>CLRS


как-то быстро удалось доехать, я даже до самого алгоритма не успел дойти толком. Но почитал немного

>поспать полчаса


удалось даже заснуть ненадолго, и после этого я себя чувствовал чуть менее уставшим, но все равно где-то час отходил после сна. Может быть, от непривычки, не знаю

>коммит в архиватор


ну, ничего не работает, но я что-то сделал

>диффуры


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

Ну, с учетом того, что я еще был на трех парах, нормально. Но вот единственное - на трекинг времени опять забил

Завтра четыре пары, так что планов будет еще меньше, чем на сегодня: почитать CLRS и продолжить разбирать диффуры. На что-то большее не буду рассчитывать
Understanding HID report structure.webm6,3 Мб, webm,
2200x1200, 5:56
Рируру !!gYmpHned/k 193 248197
Уа-а-а, я опять опоздал. С прошедшим. :>
.jpg98 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 194 248234
>>248197
(¬‿¬ )

К сожалению, подтвердились мои опасения по поводу пар программирования в этом семестре: их в нашей группе будет вести не очень хороший препод, поэтому планы немного изменились, и я сходил на пару того же предмета, но у другой группы, собственно, как и половина людей из моей группы. Наверное, буду продолжать ходить на пары к этому новому преподавателю, если он разрешит, конечно: будем смотреть F#. Правда, чтобы у него получить зачет, надо будет помимо выполнения всех домашних заданий в течение семестра написать курсовую, которая будет обладать "научностью" whatever that means

Пока что даже примерно не знаю, какую тему выбрать. Вроде можно взять тему у какого-нибудь преподавателя, но для этого, опять же, нужно хотя бы примерно представлять, чем хочешь заниматься. Ох, чувствую, это ничем хорошим не кончится, я же ничего не умею и мне стоило бы оставаться у прежнего препода: у него вообще ничего можно было бы не делать. Ну, так или иначе, на третьем-четвертом курсах курсовые будут у всех, не только у части групп, так что, наве-ерное, это будет полезный опыт

Сегодня ничего не сделал, на пяти парах только был, но как-то опять слишком сильно устал

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

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

3. Почитать Core Java

4. Пофиксить архиватор, который пока еще не архиватор и вообще вылетает с эксепшеном
.jpg17 Кб, 400x314
PoppyFanboy !VTLpv6lgGw 195 248557
Что-то я максимально сильно зациклился на выборе темы кусовой. Посмотрел, что там сдавали в прошлые года, и все чет выглядит как какой-то роскет скиенсе: в основном почему-то это проекты, так или иначе связанные с визуальными языками программирования, либо что-то про робототехнику. Еще вот в прошлом году были два монструозных проекта-сайта для сдачи/проверки домашних заданий по программированию, но это какое-то сезонное явление. Короче, я окончательно запутался, поэтому просто отложу выбор темы на потом: по себе знаю, что если сейчас продолжу думать над темой, то 100% ни к чему не приду. В крайнем случае, если к концу февраля не придумаю даже примерно, что делать (а, скорее всего, так и будет), то придется выпросить у препода хотя-бы-что-нибудь-рандомное

А еще полистал темы кусовых прошлых лет, которые были у третьекусников в прошлые годы, и совсем самодеморализовался и подготовился к стремительному вылету

Помимо беспрерывного унывания сегодня только еще поковырял F#, и все
.jpg148 Кб, 1200x1118
PoppyFanboy !VTLpv6lgGw 196 248884
Выполнить план, рассчитанный на один день за три? Почему бы и нет

Вчера доделал домашку по F#: там были простые задания вроде нахождения n-ного числа фибоначчи, обращения списка, составления списка по типу [2^n, 2^(n+1), ..., 2^m], но даже они заставили немного призадуматься и взглянуть на проблему чуть иначе. Пока что забавно и немного кое-где непонятно, но, чувствую, скоро мне будет не до смеха, посмотрим.

Еще вчера поковырял архиватор: не особо много сделал, но теперь оно засовывает в архивный файл что-то более менее осмысленное

---

Сегодня сходил на пары и почитал совсем немного Core Java, но узнал кучу всякой не особо полезной, но забавной ерунды про вложенные/локальные классы

забавная ерунда номер один

(TimePrinter is TalkingClock inner class)

>NOTE: The synthesized constructors and methods can get quite convoluted. Suppose we turn TimePrinter into a private inner class. There are no private classes in the virtual machine, so the compiler produces the next best thing: a package-visible class with a private constructor



>private TalkingClock$TimePrinter(TalkingClock);



>Of course, nobody can call that constructor, so there is a second package-visible


constructor

>TalkingClock$TimePrinter(TalkingClock, TalkingClock$1);



>that calls the ꇟrst one. The TalkingClock$1 class is synthesized solely to distinguish this constructor from others. The compiler translates the constructor call in the start method of the TalkingClock class to new TalkingClock$TimePrinter(this, null)



То есть эта собака видит, что я засунул один класс в другой, но она все равно компилирует их как два разных класса, только дает вложенному ссылку на внешний и плюс ко всему для приватных полей, создает вспомогательные package-visible методы для доступа к приватным полям внешнего класса со стороны вложенного

Окей, но мы объявили вложенный класс как приватный, то есть доступ к нему есть только у внешнего. Проблема в том, что для классов есть только два модификатора доступа: public и дефолтный, поэтому эта псина берет и объявляет конструкторы вложенного класса приватными. Но для внешнего класса доступ-то тоже надо как-то организовать, поэтому специально для этого внешнего класса создается отдельно package-visible конструктор (который вызывает private конструктор), с помощью которого внешний класс будет иметь возможность создавать экземпляры вложенного.

ну ладно ¯\_(ツ)_/¯

забавная ерунда номер два

Локальные/вложенные классы не могут использовать локальные переменные из своей области видимости, значение которых было переназначено (то есть они обязательно должны быть, что называется, effectively final). Поэтому, если захочется заделать в классе какой-нибудь счетчик (например, для количества сравнений при сортировке), то тут выходит забавная штука:

можно попробовать объявить счетчик как локальную переменную int counter и апдейтить ее внутри вложенного класса https://ideone.com/YRFLKN, то компилятор справедливо выдаст ошибку (потому что вложенный класс компилится в отдельный класс, в который все локальные переменные из его области видимости перенесены по значению как final поля),

а если попробовать объявить во вложенном классе статическое поле-счетчик, то компилятор опять же взбунтует: статические поля/методы во вложенных/локальных классах объявлять нельзя (что логично, иначе "статические" поля станут не такими уж и статическими)

Ох ох, что же делать? Может быть, объявить статический приватный класс-компаратор со счетчиком и передать его в Arrays.sort? Nah, зачем, можно же использовать мутабельные объекты https://ideone.com/6Z8iTz Ты вроде и изменяешь состояние массива, но значение переменной при этом не меняется, так что все честно. Такая спуки скэри штука, но зато самый короткий вариант

непонятная ерунда

Вообще не знаю точно, чем конкретно, помимо технической реализации локальных классов, мотивировано вот такое отношение к локальным переменным

https://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class

>As the value has been copied into the instance of the anonymous inner class, it would look odd if the variable could be modified by the rest of the method - you could have code which appeared to be working with an out-of-date variable (because that's effectively what would be happening... you'd be working with a copy taken at a different time). Likewise if you could make changes within the anonymous inner class, developers might expect those changes to be visible within the body of the enclosing method.



Это, конечно, да, но вот в C# вроде как с этим все ок (но я не вникал особо, потом почитаю). Может быть, с многопоточностью есть какие-то проблемы, но я глупый и в этом пока что не разбираюсь

---

Алсо сегодня случайно узнал, что, оказывается, существует список тем для курсовых. Да, вот так все просто. Он немного outdated и, скорее всего, возможных тем несколько больше (это уже индивидуально надо выяснять), но все равно уже можно хотя бы посмотреть возможные варианты. Завтра надо будет прочекать
.jpg148 Кб, 1200x1118
PoppyFanboy !VTLpv6lgGw 196 248884
Выполнить план, рассчитанный на один день за три? Почему бы и нет

Вчера доделал домашку по F#: там были простые задания вроде нахождения n-ного числа фибоначчи, обращения списка, составления списка по типу [2^n, 2^(n+1), ..., 2^m], но даже они заставили немного призадуматься и взглянуть на проблему чуть иначе. Пока что забавно и немного кое-где непонятно, но, чувствую, скоро мне будет не до смеха, посмотрим.

Еще вчера поковырял архиватор: не особо много сделал, но теперь оно засовывает в архивный файл что-то более менее осмысленное

---

Сегодня сходил на пары и почитал совсем немного Core Java, но узнал кучу всякой не особо полезной, но забавной ерунды про вложенные/локальные классы

забавная ерунда номер один

(TimePrinter is TalkingClock inner class)

>NOTE: The synthesized constructors and methods can get quite convoluted. Suppose we turn TimePrinter into a private inner class. There are no private classes in the virtual machine, so the compiler produces the next best thing: a package-visible class with a private constructor



>private TalkingClock$TimePrinter(TalkingClock);



>Of course, nobody can call that constructor, so there is a second package-visible


constructor

>TalkingClock$TimePrinter(TalkingClock, TalkingClock$1);



>that calls the ꇟrst one. The TalkingClock$1 class is synthesized solely to distinguish this constructor from others. The compiler translates the constructor call in the start method of the TalkingClock class to new TalkingClock$TimePrinter(this, null)



То есть эта собака видит, что я засунул один класс в другой, но она все равно компилирует их как два разных класса, только дает вложенному ссылку на внешний и плюс ко всему для приватных полей, создает вспомогательные package-visible методы для доступа к приватным полям внешнего класса со стороны вложенного

Окей, но мы объявили вложенный класс как приватный, то есть доступ к нему есть только у внешнего. Проблема в том, что для классов есть только два модификатора доступа: public и дефолтный, поэтому эта псина берет и объявляет конструкторы вложенного класса приватными. Но для внешнего класса доступ-то тоже надо как-то организовать, поэтому специально для этого внешнего класса создается отдельно package-visible конструктор (который вызывает private конструктор), с помощью которого внешний класс будет иметь возможность создавать экземпляры вложенного.

ну ладно ¯\_(ツ)_/¯

забавная ерунда номер два

Локальные/вложенные классы не могут использовать локальные переменные из своей области видимости, значение которых было переназначено (то есть они обязательно должны быть, что называется, effectively final). Поэтому, если захочется заделать в классе какой-нибудь счетчик (например, для количества сравнений при сортировке), то тут выходит забавная штука:

можно попробовать объявить счетчик как локальную переменную int counter и апдейтить ее внутри вложенного класса https://ideone.com/YRFLKN, то компилятор справедливо выдаст ошибку (потому что вложенный класс компилится в отдельный класс, в который все локальные переменные из его области видимости перенесены по значению как final поля),

а если попробовать объявить во вложенном классе статическое поле-счетчик, то компилятор опять же взбунтует: статические поля/методы во вложенных/локальных классах объявлять нельзя (что логично, иначе "статические" поля станут не такими уж и статическими)

Ох ох, что же делать? Может быть, объявить статический приватный класс-компаратор со счетчиком и передать его в Arrays.sort? Nah, зачем, можно же использовать мутабельные объекты https://ideone.com/6Z8iTz Ты вроде и изменяешь состояние массива, но значение переменной при этом не меняется, так что все честно. Такая спуки скэри штука, но зато самый короткий вариант

непонятная ерунда

Вообще не знаю точно, чем конкретно, помимо технической реализации локальных классов, мотивировано вот такое отношение к локальным переменным

https://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class

>As the value has been copied into the instance of the anonymous inner class, it would look odd if the variable could be modified by the rest of the method - you could have code which appeared to be working with an out-of-date variable (because that's effectively what would be happening... you'd be working with a copy taken at a different time). Likewise if you could make changes within the anonymous inner class, developers might expect those changes to be visible within the body of the enclosing method.



Это, конечно, да, но вот в C# вроде как с этим все ок (но я не вникал особо, потом почитаю). Может быть, с многопоточностью есть какие-то проблемы, но я глупый и в этом пока что не разбираюсь

---

Алсо сегодня случайно узнал, что, оказывается, существует список тем для курсовых. Да, вот так все просто. Он немного outdated и, скорее всего, возможных тем несколько больше (это уже индивидуально надо выяснять), но все равно уже можно хотя бы посмотреть возможные варианты. Завтра надо будет прочекать
!DIEV3DADDY 197 248885
Как жизнь
lewd.jpg86 Кб, 1024x1024
am I retarded or something PoppyFanboy !VTLpv6lgGw 198 249667
>>248885
Не знаю, посмотрим

--

Три дня бездельничал, только на пары ходил. Ну, впрочем, в среду мое праздное состояние было вполне оправдано: в тот день так вышло, что почти весь день дома никого не было, и я хоть немного смог побыть в тишине днем. Наверное, отчасти именно из-за постоянного фонового шума днем мне обычно проще что-то делать ночью.

Новые пары пока в основном какие-то странные, не буду пока ничего про них говорить, но мне не очень нравится

С темой для кусовой все еще ничего не понятно. Во-первых, список тем, который я нашел, оказался максимально неудачным: большинство тем там связано с допиливанием среды для программирования роботов, написанной на C++/Qt, ну и в целом там все темы про робототехнику: стабилизация видео, просто программирование роботов, какой-то "робофутбол". Единственное, за что зацепился глаз, - реализация "детских" ЯП или их генерация в JetBrains MPS.

В общем, в связи с этим, я решил все же написать преподу, что, мол, так и так, какую конкретно тему взять - не знаю, хотелось бы что-нибудь техническое, например, ИИ для настолки или что-нибудь с алгоритмами на графах или с алгоритмами сжатия. Это было как-то пиздецки тяжело, я давно хотел ему написать, но почему-то думал, что он меня пошлет с такими пространными формулировками, и мне нужно прежде придумать что-то более конкретное в плане темы. Проще говоря, мне не хотелось ставить условную кляксу на своем IRL аватаре, который практически невозможно сменить, а в итоге получается так, что я просто боюсь отправить сообщение, и это еще хуже, чем если бы я написал ему какую-то полнейшую хуйность, я так выгляжу еще большим кончем. Плюс ко всему, всякий раз, когда я пишу что-либо в вежливой (именно в вежливой, не дружеской) форме мне становится просто невыносимо стыдно за каждое напечатанное слово. Вот не знаю, сейчас перечитал свое сообщение - вроде нормально, складно, но, пока писал, все время хотелось стереть все к чертям и поскорее забыть

На удивление он ответил, указав вполне конкретных преподавателей, которые могли бы помочь с темой. Правда, двух из них, Х. и Б., он охарактеризовал как специфических товарищей, а про третьего, С., сказал: "Говорят, что лучше незачёт от С., чем 5 от Б.", что вносит еще больше неопределенности. Наверное, имеет смысл написать всем, если что, у меня есть небольшая подушечка: все же я официально учусь у препода, у которого кусовой нет, так что в случае чего можно будет просто отказаться Еще он сказал, что можно попробовать зайти в n-ную аудиторию, и поспрашивать там про кусовую, и вот это уже я со своей социальной неадаптированностью не вывезу. Не представляю себе, как это возможно будет вообще провернуть: я резким движением открываю дверь и.. Что? Спрашиваю, кто тут у вас гллавный и требую тему кусовой? Мне же даже нечем угрожать, я совсем нелепо буду выглядеть. Я даже не знаю, что это за аудитория такая, кто там сидит и.. Вообще почему они должны мне помогать с выбором темы/науч руководителя для кусовой? Я запутался. Короче, лучше попробую поприставать к людям в интернете. ИРЛ контакт с человеком такой степени кринжовости я не выдержу

Завтра 5 пар, но в перерывах я попробую просталкерить в интернете, что это за три преподавателя, которых мне посоветовали, возможно, написать им или хотя бы составить текст писем, и, может быть, поприставать к другим людям по поводу кусовой. Я еще даже тему не выбрал, а это уже отняло у меня столько времени, нельзя, чтобы так продолжалось

--

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

И играть поменьше. Вот в среду, кстати, скачал ремастер первого дарка который я уже проходил, но для меня эта игра, как маструбация: процесс один и тот же, но удовольствия каждый раз не меньше, чем в прошлый В этот раз решил побегать с тяжелым оружием: довольно приятно, бегаешь, всех убиваешь с одного удара. Но все испортила одна сверхнеприятная вещь - вроде как пофиксили дюп душ, во всяком случае, ни одним из двух способов, о которых я знаю, это провернуть не получается. Понятия не имею, зачем это сделали: от возможности набить себе немного бесплатной валюты игра не ломается, ты просто экономишь то время, которое бы потратил на циклические забеги к-врагам-и-обратно-к-костру с целью тупого фарма

У меня еще проскользнула идея ложиться спать и вставать в разное время, но не знаю, прокатит ли такое с моим организмом: чуть позже лечь спать для меня легко, но вот заснуть раньше обычного - для меня проблема

сказал слишком много непристойных слов, но о себе иначе нельзя
lewd.jpg86 Кб, 1024x1024
am I retarded or something PoppyFanboy !VTLpv6lgGw 198 249667
>>248885
Не знаю, посмотрим

--

Три дня бездельничал, только на пары ходил. Ну, впрочем, в среду мое праздное состояние было вполне оправдано: в тот день так вышло, что почти весь день дома никого не было, и я хоть немного смог побыть в тишине днем. Наверное, отчасти именно из-за постоянного фонового шума днем мне обычно проще что-то делать ночью.

Новые пары пока в основном какие-то странные, не буду пока ничего про них говорить, но мне не очень нравится

С темой для кусовой все еще ничего не понятно. Во-первых, список тем, который я нашел, оказался максимально неудачным: большинство тем там связано с допиливанием среды для программирования роботов, написанной на C++/Qt, ну и в целом там все темы про робототехнику: стабилизация видео, просто программирование роботов, какой-то "робофутбол". Единственное, за что зацепился глаз, - реализация "детских" ЯП или их генерация в JetBrains MPS.

В общем, в связи с этим, я решил все же написать преподу, что, мол, так и так, какую конкретно тему взять - не знаю, хотелось бы что-нибудь техническое, например, ИИ для настолки или что-нибудь с алгоритмами на графах или с алгоритмами сжатия. Это было как-то пиздецки тяжело, я давно хотел ему написать, но почему-то думал, что он меня пошлет с такими пространными формулировками, и мне нужно прежде придумать что-то более конкретное в плане темы. Проще говоря, мне не хотелось ставить условную кляксу на своем IRL аватаре, который практически невозможно сменить, а в итоге получается так, что я просто боюсь отправить сообщение, и это еще хуже, чем если бы я написал ему какую-то полнейшую хуйность, я так выгляжу еще большим кончем. Плюс ко всему, всякий раз, когда я пишу что-либо в вежливой (именно в вежливой, не дружеской) форме мне становится просто невыносимо стыдно за каждое напечатанное слово. Вот не знаю, сейчас перечитал свое сообщение - вроде нормально, складно, но, пока писал, все время хотелось стереть все к чертям и поскорее забыть

На удивление он ответил, указав вполне конкретных преподавателей, которые могли бы помочь с темой. Правда, двух из них, Х. и Б., он охарактеризовал как специфических товарищей, а про третьего, С., сказал: "Говорят, что лучше незачёт от С., чем 5 от Б.", что вносит еще больше неопределенности. Наверное, имеет смысл написать всем, если что, у меня есть небольшая подушечка: все же я официально учусь у препода, у которого кусовой нет, так что в случае чего можно будет просто отказаться Еще он сказал, что можно попробовать зайти в n-ную аудиторию, и поспрашивать там про кусовую, и вот это уже я со своей социальной неадаптированностью не вывезу. Не представляю себе, как это возможно будет вообще провернуть: я резким движением открываю дверь и.. Что? Спрашиваю, кто тут у вас гллавный и требую тему кусовой? Мне же даже нечем угрожать, я совсем нелепо буду выглядеть. Я даже не знаю, что это за аудитория такая, кто там сидит и.. Вообще почему они должны мне помогать с выбором темы/науч руководителя для кусовой? Я запутался. Короче, лучше попробую поприставать к людям в интернете. ИРЛ контакт с человеком такой степени кринжовости я не выдержу

Завтра 5 пар, но в перерывах я попробую просталкерить в интернете, что это за три преподавателя, которых мне посоветовали, возможно, написать им или хотя бы составить текст писем, и, может быть, поприставать к другим людям по поводу кусовой. Я еще даже тему не выбрал, а это уже отняло у меня столько времени, нельзя, чтобы так продолжалось

--

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

И играть поменьше. Вот в среду, кстати, скачал ремастер первого дарка который я уже проходил, но для меня эта игра, как маструбация: процесс один и тот же, но удовольствия каждый раз не меньше, чем в прошлый В этот раз решил побегать с тяжелым оружием: довольно приятно, бегаешь, всех убиваешь с одного удара. Но все испортила одна сверхнеприятная вещь - вроде как пофиксили дюп душ, во всяком случае, ни одним из двух способов, о которых я знаю, это провернуть не получается. Понятия не имею, зачем это сделали: от возможности набить себе немного бесплатной валюты игра не ломается, ты просто экономишь то время, которое бы потратил на циклические забеги к-врагам-и-обратно-к-костру с целью тупого фарма

У меня еще проскользнула идея ложиться спать и вставать в разное время, но не знаю, прокатит ли такое с моим организмом: чуть позже лечь спать для меня легко, но вот заснуть раньше обычного - для меня проблема

сказал слишком много непристойных слов, но о себе иначе нельзя
.jpg110 Кб, 1200x964
PoppyFanboy !VTLpv6lgGw 199 249993
Всю субботу ничего не делал. Смог только сейчас заставить себя немного повторить, как решать простые диффуры, и всё.

Думаю что-нибудь поделать -> вспоминаю про всякую сложную ерунду, которую мне надо сделать для универа -> пытаюсь что-то сделать с этой ерундой -> ничего не получается -> в итоге я не делаю ни то, что хотел изначально, ни ерунду для универа.

В общем, все как обычно. Не знаю, что со всем этим делать.

https://youtu.be/_CtADN61KTs
https://youtu.be/iHmq93eAfpY
D0G9aP3UYAAQo4h.jpeg118 Кб, 1000x1415
PoppyFanboy !VTLpv6lgGw 200 250117
Ничего не выходит. За весь день только написал один паршивый текст для английского (неожиданно подкрался дедлайн), а ведь хотел что-то нормальное поделать. Чувствую себя мусором
.jpg56 Кб, 651x1200
PoppyFanboy !VTLpv6lgGw 201 250277
Ничем не занимаюсь ровно неделю, а такое ощущение, что прошли всего пара дней. Я правда не понимаю, как так получилось, меня куда-то засасывает.

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

Мусорный текст для английского, который я писал вчера пришлось сегодня немного переделывать, выкинув единственную часть, над которой я действительно старался - вступление. Ну и ладно.

--

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

Сегодня сначала прошел 5 минут быстрым шагом, а затем попеременно бежал 60 секунд - просто шел 90 секунд на протяжении 25 минут (правда, я не особо соблюдал тайминги из-за того, что не хотел особо отсвечивать телефоном с секундомером, и я в итоге пробежал немного больше, чем должен был). Сколько в итоге прополз - не знаю, Runtastic, собака, отказался ловить сигнал GPS, несмотря на то, что гугл карты спокойно определяли мое местоположение. Дома на картах посмотрел - судя по всему вышло что-то в районе пяти с половиной километров, но мне как-то слабо верится в эти цифры, там точно не более четырех километров, не мог же я в среднем бежать-идти 11 км/ч.

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

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

--

Собственно все, сегодня только бегал, сходил на пары и дописал текст для английского. В следующий раз пойду бегать в среду. Надеюсь, завтра не сильно будут болеть ноги.

Из ближайшего, что надо сделать прямо обязательно:
- доразбирать старые диффуры и разобрать новые
- сделать домашнее задание по диффурам
- решить, что там с курсовой, посмотреть нормально, что там скинул С. (скорее всего, забью, нет никакого желания ей заниматься, и раз уж у меня в этом семестре есть возможность избежать курсовой, то я так, скорее всего, и поступлю)
- сделать домашние задания по программированию
- продолжить готовиться к коллоквиуму по диффурам
я это должен был сделать еще в течение предыдущих семи дней
.jpg56 Кб, 651x1200
PoppyFanboy !VTLpv6lgGw 201 250277
Ничем не занимаюсь ровно неделю, а такое ощущение, что прошли всего пара дней. Я правда не понимаю, как так получилось, меня куда-то засасывает.

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

Мусорный текст для английского, который я писал вчера пришлось сегодня немного переделывать, выкинув единственную часть, над которой я действительно старался - вступление. Ну и ладно.

--

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

Сегодня сначала прошел 5 минут быстрым шагом, а затем попеременно бежал 60 секунд - просто шел 90 секунд на протяжении 25 минут (правда, я не особо соблюдал тайминги из-за того, что не хотел особо отсвечивать телефоном с секундомером, и я в итоге пробежал немного больше, чем должен был). Сколько в итоге прополз - не знаю, Runtastic, собака, отказался ловить сигнал GPS, несмотря на то, что гугл карты спокойно определяли мое местоположение. Дома на картах посмотрел - судя по всему вышло что-то в районе пяти с половиной километров, но мне как-то слабо верится в эти цифры, там точно не более четырех километров, не мог же я в среднем бежать-идти 11 км/ч.

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

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

--

Собственно все, сегодня только бегал, сходил на пары и дописал текст для английского. В следующий раз пойду бегать в среду. Надеюсь, завтра не сильно будут болеть ноги.

Из ближайшего, что надо сделать прямо обязательно:
- доразбирать старые диффуры и разобрать новые
- сделать домашнее задание по диффурам
- решить, что там с курсовой, посмотреть нормально, что там скинул С. (скорее всего, забью, нет никакого желания ей заниматься, и раз уж у меня в этом семестре есть возможность избежать курсовой, то я так, скорее всего, и поступлю)
- сделать домашние задания по программированию
- продолжить готовиться к коллоквиуму по диффурам
я это должен был сделать еще в течение предыдущих семи дней
вот первый PoppyFanboy !VTLpv6lgGw 202 250797
Уже довольно давно хотел собрать в одном месте всю ту невероятно уродливую чушь, что я писал года 3-4 назад на паскале. Просто так, почему бы и нет, хотя бы просто чтобы посмеяться. К сожалению, не все запустилось, и мне слишком лень разбираться в коде без отступов, чтобы разобраться, почему, так что что есть, то есть.

https://drive.google.com/open?id=1nx88fpUXx1DZ7H9YCSjxxkpusLd8PYcW

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

Пробовать что-то запускать рекомендуется под вот этот трек
https://www.youtube.com/watch?v=ynyt6FUSgVM

2015 год
Tetris
Древнейший жуткий монстр без намека на отступы на более, чем тысячу строк, пестрящий goto и названиями переменных, набранных транслитом. Смысл написанного кода не поддается расшифровке. Содержит в себе пять жесть крутых игр: тетрис, тетрис со сложными фигурами, змейка, гонки и аркада. Работают все, кроме аркады, она почему-то поломалась, хотя я помню, что она работала когда-то. Управление: WASD, Enter и 'q' для выхода из игры. К обоим тетрисам даже прикручена возможность сохраниться: в процессе игры можно нажать 'q', а затем выбрать слот для сохранения. Чтобы очистить слот, надо нажать на 'r'.

Мне страшно смотреть на это.

Microsch
Это о-очень странная вещь по-прежнему нечитабельная, без отступов и одним файлом. По сути это набор таблиц с сортировкой по строкам, в которые можно записывать оценки ученикам и смотреть средний балл: WASD - перемещение по таблице, клетка с оценкой заполняется нажатием на клавишу с цифрой, 'q' и 'e' - переключение таблиц, 'r' - выход. Можно ещё поменять имя ученику, прожав Enter по соответствующей клетке и набрав текст, даже бекспейс работает (но курсора нет). Самое странное тут, что я зачем-то навелосипедил попиксельную отрисовку букв.

2016 год
Desert Strike
Где-то 2000 строк отборнейшего бреда без комментариев, но зато с отступами. Даже знать не хочу, как я ее сделал, мне страшно об этом думать, но, должен сказать, это вполне себе играбельная стрелялка с возможностью прокачки самолета. Жирный недостаток - это то, что нет никакой фиксации прогресса по пройденным уровням.

Перед игрой настроить параметр FRAMES PER SECOND OPTION (что бы это ни значило) в меню настроек: чем он больше, тем медленнее игра. Оптимально будет поставить 20 или 30.

Road
Симулятор перекрестка. Зачем он нужен - не знаю, не помню, не хочу вспоминать. Код компилируется, но вылетает с рантайм ошибкой. Хорошо, что сохранилась гифка (#2). В коде все так же какой-то бред, не поддающийся дешифровке, работает так себе: машинки хаотично наезжают друг на друга, иногда непонятно, что вообще происходит.

--

Стал ли я лучше в программировании с того времени? Определенно да. Сделал ли я за последнее время хотя бы один проект с тем же энтузиазмом, какой у меня был 3-4 года назад? Нет.

Этим все и сказано.
вот первый PoppyFanboy !VTLpv6lgGw 202 250797
Уже довольно давно хотел собрать в одном месте всю ту невероятно уродливую чушь, что я писал года 3-4 назад на паскале. Просто так, почему бы и нет, хотя бы просто чтобы посмеяться. К сожалению, не все запустилось, и мне слишком лень разбираться в коде без отступов, чтобы разобраться, почему, так что что есть, то есть.

https://drive.google.com/open?id=1nx88fpUXx1DZ7H9YCSjxxkpusLd8PYcW

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

Пробовать что-то запускать рекомендуется под вот этот трек
https://www.youtube.com/watch?v=ynyt6FUSgVM

2015 год
Tetris
Древнейший жуткий монстр без намека на отступы на более, чем тысячу строк, пестрящий goto и названиями переменных, набранных транслитом. Смысл написанного кода не поддается расшифровке. Содержит в себе пять жесть крутых игр: тетрис, тетрис со сложными фигурами, змейка, гонки и аркада. Работают все, кроме аркады, она почему-то поломалась, хотя я помню, что она работала когда-то. Управление: WASD, Enter и 'q' для выхода из игры. К обоим тетрисам даже прикручена возможность сохраниться: в процессе игры можно нажать 'q', а затем выбрать слот для сохранения. Чтобы очистить слот, надо нажать на 'r'.

Мне страшно смотреть на это.

Microsch
Это о-очень странная вещь по-прежнему нечитабельная, без отступов и одним файлом. По сути это набор таблиц с сортировкой по строкам, в которые можно записывать оценки ученикам и смотреть средний балл: WASD - перемещение по таблице, клетка с оценкой заполняется нажатием на клавишу с цифрой, 'q' и 'e' - переключение таблиц, 'r' - выход. Можно ещё поменять имя ученику, прожав Enter по соответствующей клетке и набрав текст, даже бекспейс работает (но курсора нет). Самое странное тут, что я зачем-то навелосипедил попиксельную отрисовку букв.

2016 год
Desert Strike
Где-то 2000 строк отборнейшего бреда без комментариев, но зато с отступами. Даже знать не хочу, как я ее сделал, мне страшно об этом думать, но, должен сказать, это вполне себе играбельная стрелялка с возможностью прокачки самолета. Жирный недостаток - это то, что нет никакой фиксации прогресса по пройденным уровням.

Перед игрой настроить параметр FRAMES PER SECOND OPTION (что бы это ни значило) в меню настроек: чем он больше, тем медленнее игра. Оптимально будет поставить 20 или 30.

Road
Симулятор перекрестка. Зачем он нужен - не знаю, не помню, не хочу вспоминать. Код компилируется, но вылетает с рантайм ошибкой. Хорошо, что сохранилась гифка (#2). В коде все так же какой-то бред, не поддающийся дешифровке, работает так себе: машинки хаотично наезжают друг на друга, иногда непонятно, что вообще происходит.

--

Стал ли я лучше в программировании с того времени? Определенно да. Сделал ли я за последнее время хотя бы один проект с тем же энтузиазмом, какой у меня был 3-4 года назад? Нет.

Этим все и сказано.
PoppyFanboy !VTLpv6lgGw 203 251078
Охх, теперь мне гораздо лучше. Бег тут, кстати, ни при чём, он мне пока что только причиняет физические страдания в виде мозолей на ногах (которые я, естественно, сразу же отдираю, как же без этого?) За эти несколько дней я не то чтобы много чего-то сделал, но хотя бы что-то. Дальше должно быть лучше.

среда (27 число)
Только сходил побегать и вроде как все. В тот раз runtastic соизволил частично отследить мой маршрут на карте. Правда, выглядит он так, будто бы я перемещался по улице пьяными зигзагами, перебегая с одной стороны проезжей части на другую, так что не знаю, можно ли ему доверять. Пробежал тогда определенно меньше, чем в первый раз и гораздо сильнее устал, тайминги были те же: 60 секунд бега - 90 отдыха.

В тот день мне все ещё было не очень хорошо, но под конец дня (день у меня заканчивается обычно на следующий день часов в два-три ночи) стало гораздо-гораздо-гораздо лучше жесть спасибо

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

пятница
Был в универе весь день, вроде все.

суббота
Делал домашние задания по программированию для старого преподавателя, но чего-то запутался и в итоге не особо много сделал. Там что-то странное, и вообще не понятно, что надо делать. Потом пытался настроить appveyor для сборки домашних заданий по F# для нового препода, но чет потратил на это слишком много времени: ничего не хотело работать, appveyor все время на что-то ругался и в итоге отказался работать, сославшись на то, что ему не хватает каких-то dll файлов.

По итогу я так и не понял, в чем была проблема, но я сменил .NET Framework на .NET Core и все довольно быстро запустилось: проекты собираются, тесты проходятся.

А, и еще я побегал, все с теми же таймингами. Только в этот раз я еще добавил пятиминутную заминку (или как это называется) быстрым шагом. Runtastic показывает, что в итоге вышло 4.72км за 5 минут быстрого шага + 25 минут бега/шага + 5 минут быстрого шага.

сегодня
Сделал домашнее задание по F# с юнит-тестами и appveyor'ом. Забавная штука. Задания пока что там простые, функциональная парадигма пока что не чувствуется в F# меняешь циклы на хвостовую рекурсию, которая транслируется в обычные циклы на C#, эээ, я же, просто могу написать цикл на C#; короче, пока что это только доставляет неудобства, посмотрим, что там будет дальше

Больше как-то ничего не сделал. Вот. Но это все равно больше, чем вот тогда >>250277 за ту неделю.

--

Все же не буду писать сюда никаких планов, ни долгосрочных, ни краткосрочных: сразу чувствую, что уже что-то сделал, хотя, на самом деле, ещё даже не приступил. На курсовую забил, пусть проблема решается сама: раз уж у меня есть в этом семестре возможность её избежать, то я ею воспользуюсь.

А сейчас пойду спать пораньше.

https://www.youtube.com/watch?v=p-o_bMkzOW0

я нашел новый способ уничтожения времени - просмотр видео с потрошением всякой морской живности
https://www.youtube.com/watch?v=HQEaFT7Q0nk
https://www.youtube.com/watch?v=2WJ4Uxg_N3s
PoppyFanboy !VTLpv6lgGw 203 251078
Охх, теперь мне гораздо лучше. Бег тут, кстати, ни при чём, он мне пока что только причиняет физические страдания в виде мозолей на ногах (которые я, естественно, сразу же отдираю, как же без этого?) За эти несколько дней я не то чтобы много чего-то сделал, но хотя бы что-то. Дальше должно быть лучше.

среда (27 число)
Только сходил побегать и вроде как все. В тот раз runtastic соизволил частично отследить мой маршрут на карте. Правда, выглядит он так, будто бы я перемещался по улице пьяными зигзагами, перебегая с одной стороны проезжей части на другую, так что не знаю, можно ли ему доверять. Пробежал тогда определенно меньше, чем в первый раз и гораздо сильнее устал, тайминги были те же: 60 секунд бега - 90 отдыха.

В тот день мне все ещё было не очень хорошо, но под конец дня (день у меня заканчивается обычно на следующий день часов в два-три ночи) стало гораздо-гораздо-гораздо лучше жесть спасибо

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

пятница
Был в универе весь день, вроде все.

суббота
Делал домашние задания по программированию для старого преподавателя, но чего-то запутался и в итоге не особо много сделал. Там что-то странное, и вообще не понятно, что надо делать. Потом пытался настроить appveyor для сборки домашних заданий по F# для нового препода, но чет потратил на это слишком много времени: ничего не хотело работать, appveyor все время на что-то ругался и в итоге отказался работать, сославшись на то, что ему не хватает каких-то dll файлов.

По итогу я так и не понял, в чем была проблема, но я сменил .NET Framework на .NET Core и все довольно быстро запустилось: проекты собираются, тесты проходятся.

А, и еще я побегал, все с теми же таймингами. Только в этот раз я еще добавил пятиминутную заминку (или как это называется) быстрым шагом. Runtastic показывает, что в итоге вышло 4.72км за 5 минут быстрого шага + 25 минут бега/шага + 5 минут быстрого шага.

сегодня
Сделал домашнее задание по F# с юнит-тестами и appveyor'ом. Забавная штука. Задания пока что там простые, функциональная парадигма пока что не чувствуется в F# меняешь циклы на хвостовую рекурсию, которая транслируется в обычные циклы на C#, эээ, я же, просто могу написать цикл на C#; короче, пока что это только доставляет неудобства, посмотрим, что там будет дальше

Больше как-то ничего не сделал. Вот. Но это все равно больше, чем вот тогда >>250277 за ту неделю.

--

Все же не буду писать сюда никаких планов, ни долгосрочных, ни краткосрочных: сразу чувствую, что уже что-то сделал, хотя, на самом деле, ещё даже не приступил. На курсовую забил, пусть проблема решается сама: раз уж у меня есть в этом семестре возможность её избежать, то я ею воспользуюсь.

А сейчас пойду спать пораньше.

https://www.youtube.com/watch?v=p-o_bMkzOW0

я нашел новый способ уничтожения времени - просмотр видео с потрошением всякой морской живности
https://www.youtube.com/watch?v=HQEaFT7Q0nk
https://www.youtube.com/watch?v=2WJ4Uxg_N3s
PoppyFanboy !VTLpv6lgGw 204 251643
Всё ждал, когда произойдет что-нибудь интересное, но как-то ничего не вышло с этим. Ну, пусть будет так.

Уже не помню, что я там делал в понедельник-вторник, вроде как был на парах и немного разбирал теорию по диффурам. А, и ещё в понедельник вышел побегать по снегу: в этот раз немного с другими таймингами: 90 секунд бега + 2 минуты ходьбы. Расстояние примерно то же вышло, что и в предыдущие разы.

Во вторник по случаю пришедших мне на карточку бесплатных денег пошёл в магазин и накупил всякой ерунды. Третий пик - самые лучшие чипсы, с перцем и луком вроде. Очень острые, очень много специй (меня, наверное, ещё долго будет воротить от солёного после такого), но вкусные.

Ещё решил попробовать зелёный чай. Не знаю, возможно, я купил какую-то пакость, возможно, как-то не так его завариваю (надо же просто залить горячей водой, д-да?), но на седьмой кружке я все еще не распробовал вкус: какой-то он блеклый. Но, впрочем, он однозначно лучше, чем у чёрного чая - его я вообще на дух не переношу: если не засыпать кучу сахара, то пить вообще невозможно. Кстати, не ожидал, что засушенные листики развернутся в воде и станут зелёненькими, забавно.

И ещё купил кондиционер для волос, никогда раньше такими штуками не пользовался. Я чёт думал, что их много разных продаётся, но в магазине еле-еле нашёл полку, где они складируются, и выбор был какой-то маленький: между тремя разновидностями от TRESemme и каким-то дешёвым кондиционером, которым были заставлены четверть полок, уделённых под всякие штуки для волос (скоре всего из-за того, что у них у всех срок годности истекал через полгода). Короче. Взял какой-то кокосовый и сегодня опробовал: во-первых, он, оказывается, не пенится, и непонятно, где ты его уже нанёс, а где - нет, во-вторых, волосы легче расчесываются и вроде как по ощущениям немного мягче стали, в-третьих, можно было бы и получше аромат подобрать.

В среду сидел дома, совсем немного почитал Core Java: узнал про супер-уёбищный способ создания ArrayList'ов: ArrayList list = new ArrayList {{ add("Какой"); add("ужас"); }}; То есть, что здесь происходит: внешние кудрявые скобки - это объявление анонимного класса, унаследованного от ArrayList, а внутренние - это Instance Initialization Block (IIB), который выполняется сразу после вызова (явного/неявного) конструктора суперкласса и перед вызовом конструктора текущего класса.

Ещё сделал домашнее задание по программированию для прежнего препода и вроде диффуры разбирал, там ничего интересного. А! И ещё бегал, те же тайминги, что и в понедельник, вроде не особо устал, хоть и чуть более интенсивно вышло.

И в тот же день решил опробовать убунту (естественно, параллельно второй ОС, как же я без игр). Пока что мне всё очень нравится: во-первых, я немного изголодался по плавным анимациям и красивому оформлению (в седьмом виндовсе у меня все это отключено, потому что выглядит убого, а на десятый, который выглядит чуть лучше, мне лень перекатываться), во-вторых, apt-get, в-третьих, клавиша Super (нажимаешь ее и сразу же попадаешь в менеджер окон и одновременно открывается строка с поиском), в-четвертых, несколько рабочих областей, в-пятых, ну просто забавная штука.

Опробовал консольный гит (до этого использовал гит десктоп), и, как оказалось, я зря его опасался, тут всё довольно просто: генерируешь пару ключей, копируешь публичный ключ в аккаунт на гитхабе, и всё, можно клонировать репозитории. А вот с иде идеей все прошло не так гладко: я изначально скачал версию без jdk (ну, просто зачем, я же его сам поставил), и она наотрез отказалась работать: я так и не разобрался, что там не так было, в итоге скачал версию с jdk, и сразу все нормально запустилось.

А ведь я относительно много всего вчера сделал, неблохо.

Сегодня какой-то странный день, ничего особо не сделал, пытался реализовать умножение умножение Карацубы с дополнительным кодом, но слишком поздно понял, что 1xx...x2 - это, внезапно, не то же самое, что 01x...x2 да, я тупой Я так понял, отрицательные числа в дополнительном коде нельзя так же просто разложить на две части, как это можно сделать с положительными, в любом случае, придётся инвертировать все биты и добавлять единицу, так что проще будет просто убрать минусы, а затем добавить его к результату умножения, если нужно.

Завтра в последний раз побегу в режиме 90 секунд + 2 минуты, дальше там будет какие-то другие тайминги, не знаю, выдержу ли.

В последнее время как-то стало лень есть, особенно по утрам: чувствую себя либо сытым, либо недостаточно голодным, чтобы мне не было лень искать еду.

https://www.youtube.com/watch?v=1yyTxvzeGuw

Не сильно близка вся эта рейверская эстетика, но треки у него классные
https://www.youtube.com/watch?v=04YEX7LYkdM
https://www.youtube.com/watch?v=cNgyuHtBBW8

А он, оказывается, классно поёт (и ещё при этом умудряется непрерывно прыгать)
https://www.youtube.com/watch?v=TCqhEOrDjNs
PoppyFanboy !VTLpv6lgGw 204 251643
Всё ждал, когда произойдет что-нибудь интересное, но как-то ничего не вышло с этим. Ну, пусть будет так.

Уже не помню, что я там делал в понедельник-вторник, вроде как был на парах и немного разбирал теорию по диффурам. А, и ещё в понедельник вышел побегать по снегу: в этот раз немного с другими таймингами: 90 секунд бега + 2 минуты ходьбы. Расстояние примерно то же вышло, что и в предыдущие разы.

Во вторник по случаю пришедших мне на карточку бесплатных денег пошёл в магазин и накупил всякой ерунды. Третий пик - самые лучшие чипсы, с перцем и луком вроде. Очень острые, очень много специй (меня, наверное, ещё долго будет воротить от солёного после такого), но вкусные.

Ещё решил попробовать зелёный чай. Не знаю, возможно, я купил какую-то пакость, возможно, как-то не так его завариваю (надо же просто залить горячей водой, д-да?), но на седьмой кружке я все еще не распробовал вкус: какой-то он блеклый. Но, впрочем, он однозначно лучше, чем у чёрного чая - его я вообще на дух не переношу: если не засыпать кучу сахара, то пить вообще невозможно. Кстати, не ожидал, что засушенные листики развернутся в воде и станут зелёненькими, забавно.

И ещё купил кондиционер для волос, никогда раньше такими штуками не пользовался. Я чёт думал, что их много разных продаётся, но в магазине еле-еле нашёл полку, где они складируются, и выбор был какой-то маленький: между тремя разновидностями от TRESemme и каким-то дешёвым кондиционером, которым были заставлены четверть полок, уделённых под всякие штуки для волос (скоре всего из-за того, что у них у всех срок годности истекал через полгода). Короче. Взял какой-то кокосовый и сегодня опробовал: во-первых, он, оказывается, не пенится, и непонятно, где ты его уже нанёс, а где - нет, во-вторых, волосы легче расчесываются и вроде как по ощущениям немного мягче стали, в-третьих, можно было бы и получше аромат подобрать.

В среду сидел дома, совсем немного почитал Core Java: узнал про супер-уёбищный способ создания ArrayList'ов: ArrayList list = new ArrayList {{ add("Какой"); add("ужас"); }}; То есть, что здесь происходит: внешние кудрявые скобки - это объявление анонимного класса, унаследованного от ArrayList, а внутренние - это Instance Initialization Block (IIB), который выполняется сразу после вызова (явного/неявного) конструктора суперкласса и перед вызовом конструктора текущего класса.

Ещё сделал домашнее задание по программированию для прежнего препода и вроде диффуры разбирал, там ничего интересного. А! И ещё бегал, те же тайминги, что и в понедельник, вроде не особо устал, хоть и чуть более интенсивно вышло.

И в тот же день решил опробовать убунту (естественно, параллельно второй ОС, как же я без игр). Пока что мне всё очень нравится: во-первых, я немного изголодался по плавным анимациям и красивому оформлению (в седьмом виндовсе у меня все это отключено, потому что выглядит убого, а на десятый, который выглядит чуть лучше, мне лень перекатываться), во-вторых, apt-get, в-третьих, клавиша Super (нажимаешь ее и сразу же попадаешь в менеджер окон и одновременно открывается строка с поиском), в-четвертых, несколько рабочих областей, в-пятых, ну просто забавная штука.

Опробовал консольный гит (до этого использовал гит десктоп), и, как оказалось, я зря его опасался, тут всё довольно просто: генерируешь пару ключей, копируешь публичный ключ в аккаунт на гитхабе, и всё, можно клонировать репозитории. А вот с иде идеей все прошло не так гладко: я изначально скачал версию без jdk (ну, просто зачем, я же его сам поставил), и она наотрез отказалась работать: я так и не разобрался, что там не так было, в итоге скачал версию с jdk, и сразу все нормально запустилось.

А ведь я относительно много всего вчера сделал, неблохо.

Сегодня какой-то странный день, ничего особо не сделал, пытался реализовать умножение умножение Карацубы с дополнительным кодом, но слишком поздно понял, что 1xx...x2 - это, внезапно, не то же самое, что 01x...x2 да, я тупой Я так понял, отрицательные числа в дополнительном коде нельзя так же просто разложить на две части, как это можно сделать с положительными, в любом случае, придётся инвертировать все биты и добавлять единицу, так что проще будет просто убрать минусы, а затем добавить его к результату умножения, если нужно.

Завтра в последний раз побегу в режиме 90 секунд + 2 минуты, дальше там будет какие-то другие тайминги, не знаю, выдержу ли.

В последнее время как-то стало лень есть, особенно по утрам: чувствую себя либо сытым, либо недостаточно голодным, чтобы мне не было лень искать еду.

https://www.youtube.com/watch?v=1yyTxvzeGuw

Не сильно близка вся эта рейверская эстетика, но треки у него классные
https://www.youtube.com/watch?v=04YEX7LYkdM
https://www.youtube.com/watch?v=cNgyuHtBBW8

А он, оказывается, классно поёт (и ещё при этом умудряется непрерывно прыгать)
https://www.youtube.com/watch?v=TCqhEOrDjNs
PoppyFanboy !VTLpv6lgGw 205 251803
Да ну, какой-то неудачный день: почти на весь день затащили в гости, разбил стекло на телефоне, теорию по диффурам чёт не получается разбирать, вставил весы в батарейку - узнал, что вешу 68,5 кг на 180 см. Пойду спать, во сне меня этот жуткий всемирный заговор не достанет
PoppyFanboy !VTLpv6lgGw 206 251980

>Пик 2


Это за 35 минут: 5мин. шаг + [90 сек. бег + 90 сек. шаг + 3 мин. бег + (<3) мин. шаг]x3 + 5 мин. Еле дополз и чуть опять не упал: вчерашние лужи кое-где превратились в наледь.

Мне починили телефон и наклеили защитное стекло. Засунул его в жутко неудобный чехол и боюсь теперь трогать лишний раз. Во время бега буду теперь отмерять время длинами музыкальных треков.

В основном разбирался с диффурами, опять запутался с Карацубой со знаковым битом и так и не закоммитил решение, немного рисовал всякие каракули (не знаю, зачем, я же не умею).

How to stop sucking at everything
IKIFEEL.jpg22 Кб, 737x415
Зануда-кун !!TQC1OAjFo2 207 251989
>>251980

>How to stop sucking at everything

PoppyFanboy !VTLpv6lgGw 208 252507
Чёт не могу сегодня ни на чём сосредоточиться. Постоянно отвлекаюсь.

Вчера вроде было то же самое, что и позавчера (за исключением бега), сегодня решал диффуры (невероятное уныние, я уже не могу просто: дифференцируешь, интегрируешь, понижаешь степень диффура - такие унылые рутинные действия), разбирал теорию по ним же, вроде как доделал нормально Карацубу по-быстрому (но там надо будет потом рефакторить код; я же изначально хотел его сделать, чтобы просто затестить коммиты через терминал, а это всё так затянулось), привёл в порядок себя и комнату (когда-нибудь я перестану просто скидывать вещи на пол). И ещё бегал: мало того, что в более медленном темпе, чем в предыдущий раз, так ещё и что-то в этот раз я максимально сильно выдохся в процессе, еле дополз [может быть, потому что не стоит делать это на пустой желудок? М?]

Завтра надо будет решить ещё как минимум один диффур из домашки (они чёт какие-то громоздкие), разобрать ещё два билета по ним же.

https://www.youtube.com/watch?v=tLVijIRdOVQ
https://www.youtube.com/watch?v=kIscwRupdaM
PoppyFanboy !VTLpv6lgGw 209 252724
>>252507
Диффур решил (мог бы и два, но, как всегда, сделал арифметическую ошибку и пришлось переделывать с начала), разобрал только один билет, ещё один не успел. В остальное время был на парах. Мог бы сейчас ещё посидеть и поделать что-нибудь, но хочу пораньше лечь спать.

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

Чёт поломались все наушники, какие были на руках: штекер последней рабочей пары испытал на себе твердь земли, и теперь, погнутый, не входит до конца в разъём (я бы попробовал выпрямить его плоскогубцами, но, мне кажется, я его окончательно доломаю; тем не менее, один наушник работает, ну хоть так).

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

https://youtu.be/RXdF9uhVrI0

Мне старые его композиции больше нравятся, но вот эта, хоть и из новых, но весьма и весьма удачная
https://youtu.be/NwOWmgJa_O8

"Hat in TIme", оказывается, на ПК есть, а я почему-то подумал, что она вышла только на каком-нибудь свиче. Надо будет потом поиграть после того, как допройду третий дарк; и после того, как я нормально поиграю в ниер автомату, и в якудзу зиро, и посмотрю десатниц; куда девается время вообще
https://youtu.be/tdi19AZvHkQ
Baka !!74zKwNWwHw 210 252847
У тебя в дневнике самые красивые аниме-картинки
sage PoppyFanboy !VTLpv6lgGw 211 253083
>>252847
Конечно, красивые, Рируру очень старался

Чёт так вышло, что уже третий день сплю меньше шести часов: позавчера надо было в универ рано встать, вчера - просто хотел пораньше выйти побегать (кстати, удачно [гораздо лучше, чем в прошлые два раза], но я всё равно ещё как минимум один раз побегу со старыми таймингами, наверное, в субботу). Вчера же под вечер меня сморил сон, и я лёг непривычно рано, часов в девять-десять. При этом и в этот раз тоже нормально поспать не удалось: ни с того ни с сего проснулся в три ночи и не смог опять заснуть. Естественно, потом, днём, мне опять захотелось спать.

Теория по диффурам вообще никак не укладывается, попробую потом, может быть, расписать её текстом или какую-то майнд карту нарисовать, а то постоянно путаюсь в этих всех теоремах (хоть их и не очень-то много). Вчера-сегодня ничего интересного не делал, только пытался разбирать диффуры. Вообще не понимаю, как фиксировать у себя в голове информацию, на которую тебе, в общем-то наплевать.

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

--

Меня так угнетает даже мысль о ведении всяких ежедневников со списками дел, обозначением долгосрочных целей и прочей шелухи: никогда ничего не идёт по плану, никогда ещё не удавалось следовать хоть сколько-нибудь содержательному плану на день, в определённый момент всё обязательно разваливается из-за какого-то обстоятельства, наличие которого ты вообще никак не мог предсказать какие-то двенадцать часов назад - постоянно не укладываешься во временные рамки. А ещё кто-то советует отслеживать свой прогресс в течение дня, якобы это должно быть подкреплением для твоей силы духа, не знаю. Да я и так знаю, что в моём плане максимум будут стоять галочки рядом с "умыть лицо" и "поесть что-нибудь", можно даже бумагу не марать.

Но, несмотря на всё это, я всё же попробую ещё раз: буду чуть более реалистичным, писать буду на бумаге (хоть и очень не люблю заниматься этим, но с телефона использовать какие-то приложения чёт вообще неудобно), не стану сильно себя корить за невыполненные пункты.

--

Надо дропать килограммы, но я чёт не знаю, как это делается. Вроде надо меньше есть, замерять там какие-то калории, но в школе на уроках русского языка меня научили только триггериться с повторений (но не показали, как их избегать), сомневаться в постановке ударения, вдолбили в голову структуру сочинения для ЕГЭ и что размышления Андрея Болконского о небе Аустерлица невероятно важны. зачем это, почему в школах не учат, прежде всего, грамотно и складно писать, а просто заучивают какие-то тупые правила про тонкости с написанием -н- и -нн- в причастиях/кратких, отымённых, отглагольных прилагательных/деепричастиях, если в конечном итоге всё равно никто их не помнит и все пишут просто по наитию. вот и получите в итоге два союза "но" в двух соседних предложениях прямо лицо. вы довольны? а? у меня даже кухонных весов нет. Попробую продолжить бегать (хотя это вроде не особо помогает, прошлой весной я довольно много бегал, но вес не сдвигался никак) и чуть меньше есть.

--

Весна никак не хочет приходить, холодно как зимой, везде снег лежит. А я надеялся, что уже совсем скоро можно будет ходить без верхней одежды

Ну, не знаю, на что ещё можно пожаловаться

Какой же во втором флатауте был классный саундтрек. Да и в первом тоже был неплохой
https://youtu.be/UW7_pJ_gfpY
sage PoppyFanboy !VTLpv6lgGw 211 253083
>>252847
Конечно, красивые, Рируру очень старался

Чёт так вышло, что уже третий день сплю меньше шести часов: позавчера надо было в универ рано встать, вчера - просто хотел пораньше выйти побегать (кстати, удачно [гораздо лучше, чем в прошлые два раза], но я всё равно ещё как минимум один раз побегу со старыми таймингами, наверное, в субботу). Вчера же под вечер меня сморил сон, и я лёг непривычно рано, часов в девять-десять. При этом и в этот раз тоже нормально поспать не удалось: ни с того ни с сего проснулся в три ночи и не смог опять заснуть. Естественно, потом, днём, мне опять захотелось спать.

Теория по диффурам вообще никак не укладывается, попробую потом, может быть, расписать её текстом или какую-то майнд карту нарисовать, а то постоянно путаюсь в этих всех теоремах (хоть их и не очень-то много). Вчера-сегодня ничего интересного не делал, только пытался разбирать диффуры. Вообще не понимаю, как фиксировать у себя в голове информацию, на которую тебе, в общем-то наплевать.

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

--

Меня так угнетает даже мысль о ведении всяких ежедневников со списками дел, обозначением долгосрочных целей и прочей шелухи: никогда ничего не идёт по плану, никогда ещё не удавалось следовать хоть сколько-нибудь содержательному плану на день, в определённый момент всё обязательно разваливается из-за какого-то обстоятельства, наличие которого ты вообще никак не мог предсказать какие-то двенадцать часов назад - постоянно не укладываешься во временные рамки. А ещё кто-то советует отслеживать свой прогресс в течение дня, якобы это должно быть подкреплением для твоей силы духа, не знаю. Да я и так знаю, что в моём плане максимум будут стоять галочки рядом с "умыть лицо" и "поесть что-нибудь", можно даже бумагу не марать.

Но, несмотря на всё это, я всё же попробую ещё раз: буду чуть более реалистичным, писать буду на бумаге (хоть и очень не люблю заниматься этим, но с телефона использовать какие-то приложения чёт вообще неудобно), не стану сильно себя корить за невыполненные пункты.

--

Надо дропать килограммы, но я чёт не знаю, как это делается. Вроде надо меньше есть, замерять там какие-то калории, но в школе на уроках русского языка меня научили только триггериться с повторений (но не показали, как их избегать), сомневаться в постановке ударения, вдолбили в голову структуру сочинения для ЕГЭ и что размышления Андрея Болконского о небе Аустерлица невероятно важны. зачем это, почему в школах не учат, прежде всего, грамотно и складно писать, а просто заучивают какие-то тупые правила про тонкости с написанием -н- и -нн- в причастиях/кратких, отымённых, отглагольных прилагательных/деепричастиях, если в конечном итоге всё равно никто их не помнит и все пишут просто по наитию. вот и получите в итоге два союза "но" в двух соседних предложениях прямо лицо. вы довольны? а? у меня даже кухонных весов нет. Попробую продолжить бегать (хотя это вроде не особо помогает, прошлой весной я довольно много бегал, но вес не сдвигался никак) и чуть меньше есть.

--

Весна никак не хочет приходить, холодно как зимой, везде снег лежит. А я надеялся, что уже совсем скоро можно будет ходить без верхней одежды

Ну, не знаю, на что ещё можно пожаловаться

Какой же во втором флатауте был классный саундтрек. Да и в первом тоже был неплохой
https://youtu.be/UW7_pJ_gfpY
sage PoppyFanboy !VTLpv6lgGw 212 253254
Ну, может быть, мне станет проще, если я напишу словами. Ну тут начало совсем лайтовое, это всё понятно и можно было бы не расписывать, но я просто чёт не могу запомнить вообще ничего, выскальзывает из головы.

Насколько я знаю, теория для решения диффуров много где используется, в той же физике, но в большинстве случаев для практических задач применяют различные качественные методы их решения, насчёт теории - не знаю, наверное, там есть какие-то крутые уравнения из какого-нибудь элтеха. Короче, вроде забавная штука, но мне не особо интересная. Чтобы решать диффуры, теоретические знания вообще никакие не нужны, просто детектишь, что за тип диффура и делаешь по алгоритму. Максимум, что надо уметь - интегрировать и брать производные. Тем не менее, за этими алгоритмами стоит какой-то лютый пласт теории, который, в свою очередь, базируется на огромном куске матана: начиная с производных и интегралов и заканчивая функциональными последовательностями. Сложности с теорией у меня начинаются уже с самого начала, когда надо доказать, что решение диффура в общем случае вообще существует.

Билет 1
F(t, x, x', x'', ..., x(n)) = 0 - вот это обыкновенный диффур в общем виде (x - функция от t), ну, то есть просто уравнение с какой-то неизвестной функцией и её производными. Решением диффура, очевидно, будет любая функция, нужное число раз дифференцируемая и удовлетворяющая равенству (при этом стоит помнить о том, что у неё какая-то своя область определения <a, b> [треугольные скобки - обозначение того, что концы промежутка могут быть вложены, а могут - и нет], то есть могут быть такие t, для которых определена F, но не определено решение x)

Вот более частный случай: F(t, x, x') = 0. Его иногда можно переписать в более удобном виде: x' = X(t, x) - разрешённом относительно производной (x и X - разные функции). Решений у этого диффура может быть бесконечно много, может и вообще не существовать, но, если X непрерывна и если неизвестная функция x обязана проходить через точку (t0, x0) [такое ограничение называется задачей Коши], то решение уравнения единственно, но об этом позже.

Сразу же, кстати, ещё можно задетектить довольно простой способ построения решений диффура x' = X(t, x) прямо на бумаге:
- приравниваешь x' к какой-то константе (желательно к значению какого-нибудь табличного тангенса)
- строишь график X(t, x) = const, во всех его точках касательная к неизвестной функции x будет иметь угловой коэффициент const, так что можно пометить на графике маленькие чёрточки (в соответствующем направлении)
- GOTO 10
В итоге должно получиться что-то похожее на схему магнитного поля, в которую выстраивается всякая магнитящаяся требуха под действием оного.

Механическая интерпретация очевидна: t - время, x - положение материальной точки, x' - мгновенная скорость

Билет 2
Всё, а вот с этого момента я просто не могу ничего запомнить. В общем, нам надо сейчас как-то доказать существования решения задачи Коши (t0, x0) для x' = X(t, x), поэтому мы будем его последовательно строить. При этом начнём мы с макисмально частного случая: X непрерывна на прямоугольнике D = {(t, x) : |x - x0| ≤ a, |t - t0| ≤ b, a > 0, b > 0} (как мы, конечно, помним из топологии, это множество является компактом, а значит, для него действуют пара полезных теорем: Вейерштрасс про максимальное/минимальное значения и существование сходящейся подпоследовательности - это нам пригодится).

Ну, как и во всех доказательствах на сущестование чего-либо, мы будем просто следовать рассуждениям как_ой-то умн_ой парн_ессы, котор_ая до всего додумал_ась: некоторые вещи будут возникать просто из воздуха без какой-либо мотивации. Берём M - максимальное значение X на D, h := max(a, b/M), dk = {t0_k = t0, t1_k, ..., tnk_k = t0 + h} (это разбиение отрезка P := [t0, t0 + h], k - просто индекс), берём последовательность таких разбиений, чтобы максимальное расстояние между двумя соседними элементами (ранг) стремилось к нулю. Это была только подготовка.

Теперь для каждого разбиения мы определяем ломаную Эйлера f_k:
{ f_k(t0) := x0
{ f_k(t) := f_k(tj_k) + (t - tj_k) · X(tj_k, f_k(tj_k)), для t из [tj_k, tj+1_k]
То есть что это - это просто ломаная линия, которая начинается в точке (t0, x0) и у которой угловой коэффициент в каждой точке разбиения отрезка совпадает с угловым коэффициентом неизвестной функции x. Получилось такое хреновое приближение решения, тем не менее, оно непрерывно, проходит через (t0, x0) и, скорее всего, может стать тем лучше, чем мельче будет разбиение отрезка [t0, t0 + h]

Класс, давайте тогда поскорее устремим k в бесконечность, проверим, сходится ли последовательность из ломаных Эйлера и если это так, то проверим, является ли предельная функция решением. Но нет, для начала нужно проверить существует ли вообще эта лютая ломаная. Что? Мы её сами определили и как она может не существовать? А вот так: у X есть своя область определения и точка (tj_k, f_k(tj_k)) вполне может туда не входить. Кто вообще сказал, что эта ломаная не может бодренько улететь вверх за пределы прямоугольника, на котором она определена? Тут, конечно, с этим всё в порядке, но это нужно ещё доказать. Вот примерно так же в самом начале 6.042J (сука, сука, сука, который я так и не досмотрел) давались ложные доказательства всяким забавным штукам (ну, чуть более забавным, чем диффуры).

Короче, по индукции по разбиению доказываем, что |f_k(t) - x0| ≤ M · (t - t0) для любого t из [t0, t0 + h], и там сразу по ходу доказывается, что |f_k(t) - x0| ≤ M · (t - t0) ≤ M · h ≤ M · (b/M) = b, значит, (t, f_k(t)) принадлежит D и, значит, ломаные Эйлера определены корректно.

А теперь идёт какая-то эзотерика. Мы определяем некую функцию g, неразрывно связанную с уже определённой f:
{ g_k(t) := X(tj_k, f_k(tj_k)), для t из [tj_k, tj+1_k)
{ g_k(tnk) := X(tnk, f_k(tnk))

И, в общем, зачем это: утверждается, что f_k(t) = x0 + ∫t0t(g_k(s))ds
Получилась такая удобная запись, которая непонятно чем мотивирована, но понадобится для быстрого доказательства последующих фактов

--

Блин, нет, это, конечно, классно, но я даже краткое описание доказательств в текстовом виде хрен напишу, плюс это люто медленно. Но заставляет немного задуматься. Короче, не знаю, походу я не успею подготовиться к 20 числу
sage PoppyFanboy !VTLpv6lgGw 212 253254
Ну, может быть, мне станет проще, если я напишу словами. Ну тут начало совсем лайтовое, это всё понятно и можно было бы не расписывать, но я просто чёт не могу запомнить вообще ничего, выскальзывает из головы.

Насколько я знаю, теория для решения диффуров много где используется, в той же физике, но в большинстве случаев для практических задач применяют различные качественные методы их решения, насчёт теории - не знаю, наверное, там есть какие-то крутые уравнения из какого-нибудь элтеха. Короче, вроде забавная штука, но мне не особо интересная. Чтобы решать диффуры, теоретические знания вообще никакие не нужны, просто детектишь, что за тип диффура и делаешь по алгоритму. Максимум, что надо уметь - интегрировать и брать производные. Тем не менее, за этими алгоритмами стоит какой-то лютый пласт теории, который, в свою очередь, базируется на огромном куске матана: начиная с производных и интегралов и заканчивая функциональными последовательностями. Сложности с теорией у меня начинаются уже с самого начала, когда надо доказать, что решение диффура в общем случае вообще существует.

Билет 1
F(t, x, x', x'', ..., x(n)) = 0 - вот это обыкновенный диффур в общем виде (x - функция от t), ну, то есть просто уравнение с какой-то неизвестной функцией и её производными. Решением диффура, очевидно, будет любая функция, нужное число раз дифференцируемая и удовлетворяющая равенству (при этом стоит помнить о том, что у неё какая-то своя область определения <a, b> [треугольные скобки - обозначение того, что концы промежутка могут быть вложены, а могут - и нет], то есть могут быть такие t, для которых определена F, но не определено решение x)

Вот более частный случай: F(t, x, x') = 0. Его иногда можно переписать в более удобном виде: x' = X(t, x) - разрешённом относительно производной (x и X - разные функции). Решений у этого диффура может быть бесконечно много, может и вообще не существовать, но, если X непрерывна и если неизвестная функция x обязана проходить через точку (t0, x0) [такое ограничение называется задачей Коши], то решение уравнения единственно, но об этом позже.

Сразу же, кстати, ещё можно задетектить довольно простой способ построения решений диффура x' = X(t, x) прямо на бумаге:
- приравниваешь x' к какой-то константе (желательно к значению какого-нибудь табличного тангенса)
- строишь график X(t, x) = const, во всех его точках касательная к неизвестной функции x будет иметь угловой коэффициент const, так что можно пометить на графике маленькие чёрточки (в соответствующем направлении)
- GOTO 10
В итоге должно получиться что-то похожее на схему магнитного поля, в которую выстраивается всякая магнитящаяся требуха под действием оного.

Механическая интерпретация очевидна: t - время, x - положение материальной точки, x' - мгновенная скорость

Билет 2
Всё, а вот с этого момента я просто не могу ничего запомнить. В общем, нам надо сейчас как-то доказать существования решения задачи Коши (t0, x0) для x' = X(t, x), поэтому мы будем его последовательно строить. При этом начнём мы с макисмально частного случая: X непрерывна на прямоугольнике D = {(t, x) : |x - x0| ≤ a, |t - t0| ≤ b, a > 0, b > 0} (как мы, конечно, помним из топологии, это множество является компактом, а значит, для него действуют пара полезных теорем: Вейерштрасс про максимальное/минимальное значения и существование сходящейся подпоследовательности - это нам пригодится).

Ну, как и во всех доказательствах на сущестование чего-либо, мы будем просто следовать рассуждениям как_ой-то умн_ой парн_ессы, котор_ая до всего додумал_ась: некоторые вещи будут возникать просто из воздуха без какой-либо мотивации. Берём M - максимальное значение X на D, h := max(a, b/M), dk = {t0_k = t0, t1_k, ..., tnk_k = t0 + h} (это разбиение отрезка P := [t0, t0 + h], k - просто индекс), берём последовательность таких разбиений, чтобы максимальное расстояние между двумя соседними элементами (ранг) стремилось к нулю. Это была только подготовка.

Теперь для каждого разбиения мы определяем ломаную Эйлера f_k:
{ f_k(t0) := x0
{ f_k(t) := f_k(tj_k) + (t - tj_k) · X(tj_k, f_k(tj_k)), для t из [tj_k, tj+1_k]
То есть что это - это просто ломаная линия, которая начинается в точке (t0, x0) и у которой угловой коэффициент в каждой точке разбиения отрезка совпадает с угловым коэффициентом неизвестной функции x. Получилось такое хреновое приближение решения, тем не менее, оно непрерывно, проходит через (t0, x0) и, скорее всего, может стать тем лучше, чем мельче будет разбиение отрезка [t0, t0 + h]

Класс, давайте тогда поскорее устремим k в бесконечность, проверим, сходится ли последовательность из ломаных Эйлера и если это так, то проверим, является ли предельная функция решением. Но нет, для начала нужно проверить существует ли вообще эта лютая ломаная. Что? Мы её сами определили и как она может не существовать? А вот так: у X есть своя область определения и точка (tj_k, f_k(tj_k)) вполне может туда не входить. Кто вообще сказал, что эта ломаная не может бодренько улететь вверх за пределы прямоугольника, на котором она определена? Тут, конечно, с этим всё в порядке, но это нужно ещё доказать. Вот примерно так же в самом начале 6.042J (сука, сука, сука, который я так и не досмотрел) давались ложные доказательства всяким забавным штукам (ну, чуть более забавным, чем диффуры).

Короче, по индукции по разбиению доказываем, что |f_k(t) - x0| ≤ M · (t - t0) для любого t из [t0, t0 + h], и там сразу по ходу доказывается, что |f_k(t) - x0| ≤ M · (t - t0) ≤ M · h ≤ M · (b/M) = b, значит, (t, f_k(t)) принадлежит D и, значит, ломаные Эйлера определены корректно.

А теперь идёт какая-то эзотерика. Мы определяем некую функцию g, неразрывно связанную с уже определённой f:
{ g_k(t) := X(tj_k, f_k(tj_k)), для t из [tj_k, tj+1_k)
{ g_k(tnk) := X(tnk, f_k(tnk))

И, в общем, зачем это: утверждается, что f_k(t) = x0 + ∫t0t(g_k(s))ds
Получилась такая удобная запись, которая непонятно чем мотивирована, но понадобится для быстрого доказательства последующих фактов

--

Блин, нет, это, конечно, классно, но я даже краткое описание доказательств в текстовом виде хрен напишу, плюс это люто медленно. Но заставляет немного задуматься. Короче, не знаю, походу я не успею подготовиться к 20 числу
sage PoppyFanboy !VTLpv6lgGw 213 253270
>>253254
Немного отдохнул и доучил доказательство теоремы о существовании решения задачи Коши (оно там просто большое, поэтому только его). Если вкратце, то там, помимо того, что я написал, через теорему Арцела-Асколи доказывается, что последовательность ломаных Эйлера сходится к какому-то f(t), последовательность g_k(t) сходится к X(t, f(t)), и там всё это комбинируется и доказывается, что f(t) - решение задачи Коши.

>>253083
Забыл, что расписывал какой-то план. Естественно, не выполнил. Ну, я там написал контрольную по диффурам и их же разбирал (новое + вот старое повторял), но это так

Всё, пойду спать, мне уже надоело это состояние, когда волнами иногда накатывает сонливость (да, сегодня я тоже не особо много поспал; уже четвёртый день, так нельзя)

фу, реп
https://soundcloud.com/g59/resin
sage PoppyFanboy !VTLpv6lgGw 214 253430
Ни на что не остаётся времени, кроме диффуров, из-за того, что я их слишком медленно разбираю
.jpg353 Кб, 1211x2048
PoppyFanboy !VTLpv6lgGw 215 254062
Почти доразбирал диффуры (там остался один билет про решение линейных неоднородных с постоянными коэффициентами), но коллоквиум перенесли на 30. Ну, на самом деле, так даже лучше: я всё равно нормально почти ничего не выучил (я не знаю, я просто не могу впихнуть в себя эту информацию, я понимаю все доказательства от начала и до конца, но они все настолько местами нелогичные, что невозможно самому додумать).

Кроме диффуров, в эти дни больше ничего не делал, только бегать ещё ходил два раза на выходных. Сделал небольшой левел ап: теперь поочередно 3 минуты бега и 3 минуты ходьбы. В C25K таких таймингов нет, но я просто сейчас не осилю пять минут бега подряд, поэтому решил смягчить.

В общем, опять та же ошибка: я спустил всё время только на одну вещь, потому что не знал, сколько конкретно это займёт времени, поэтому хотел закончить как можно раньше, но в итоге вышло так, что я, действительно, занимался только этой одной вещью (ну, играл ещё иногда немного), но максимально неэффективно: я разобрал билет -> почти сразу забыл, о чём он вообще был, приходится перечитывать по второму кругу.

Вроде собирался сбрасывать вес, но всё равно по ощущениям переедаю.

Долгое время у меня был крайне плохой интернет (в среднем, наверное, 12 Мбит), но, как оказалось, проблема была в роутере: поменял на другой и всё стало работать чуть лучше. По-прежнему нет заявленных 100 Мбит, но хотя бы 50 (не знаю, где тут теперь боттлнек и, если честно, лень пробовать подключаться через кабель и выяснять). Можно теперь даже стриммировать геймплей игр, не знаю, зачем, мне просто нравится следить в интернетах.

https://www.twitch.tv/poppy_fanboy

Там довольно удобно хайлайтить какие-то классные моменты во время игры: вот сегодня удалось-таки с тысячной попытки победить безымянного короля в третьем дарк соулсе (ну как "победить", я его тупо заспамил ножом). Жаль, что там не записался звук, чет не так настроил, наверное.

--

Кстаати, я тут почти случайно наткнулся на неплохое применение методов поиска условного экстремума

https://ru.wikipedia.org/wiki/Метод_множителей_Лагранжа
(англоязычная статья значительно полнее, но именно из-за этого мне лень её читать, да и тут просто сразу алгоритм написан)

Пусть у нас есть n участников соревнований и k команд, по которым их надо распределить. Во время соревнований каждая команда сражается со всеми остальными и, в свою очередь, каждый участник команды сражается с каждым участником вражеской команды. Надо распределить участников по командам так, чтобы по итогу количество схваток между участниками было максимальным.

То есть количество схваток - это функция от k переменных f(x1, ..., xk) = x1 · x2 + ... + x1 · xk + x2 · x3 + ... + x2 · xk + ... + xk-1 · xk (где xi - количество участников в i-ой команде), и нам надо найти её экстремум с условием x1 + ... + xk - n = 0. Всё это довольно легко делается вот как раз через этот метод множителей Лагранжа и получается, что надо делить поровну. Жесть, матанализ, спасибо, не знаю, как это можно ещё доказать нормально.

--

https://www.youtube.com/watch?v=_AWIqXzvX-U
.jpg353 Кб, 1211x2048
PoppyFanboy !VTLpv6lgGw 215 254062
Почти доразбирал диффуры (там остался один билет про решение линейных неоднородных с постоянными коэффициентами), но коллоквиум перенесли на 30. Ну, на самом деле, так даже лучше: я всё равно нормально почти ничего не выучил (я не знаю, я просто не могу впихнуть в себя эту информацию, я понимаю все доказательства от начала и до конца, но они все настолько местами нелогичные, что невозможно самому додумать).

Кроме диффуров, в эти дни больше ничего не делал, только бегать ещё ходил два раза на выходных. Сделал небольшой левел ап: теперь поочередно 3 минуты бега и 3 минуты ходьбы. В C25K таких таймингов нет, но я просто сейчас не осилю пять минут бега подряд, поэтому решил смягчить.

В общем, опять та же ошибка: я спустил всё время только на одну вещь, потому что не знал, сколько конкретно это займёт времени, поэтому хотел закончить как можно раньше, но в итоге вышло так, что я, действительно, занимался только этой одной вещью (ну, играл ещё иногда немного), но максимально неэффективно: я разобрал билет -> почти сразу забыл, о чём он вообще был, приходится перечитывать по второму кругу.

Вроде собирался сбрасывать вес, но всё равно по ощущениям переедаю.

Долгое время у меня был крайне плохой интернет (в среднем, наверное, 12 Мбит), но, как оказалось, проблема была в роутере: поменял на другой и всё стало работать чуть лучше. По-прежнему нет заявленных 100 Мбит, но хотя бы 50 (не знаю, где тут теперь боттлнек и, если честно, лень пробовать подключаться через кабель и выяснять). Можно теперь даже стриммировать геймплей игр, не знаю, зачем, мне просто нравится следить в интернетах.

https://www.twitch.tv/poppy_fanboy

Там довольно удобно хайлайтить какие-то классные моменты во время игры: вот сегодня удалось-таки с тысячной попытки победить безымянного короля в третьем дарк соулсе (ну как "победить", я его тупо заспамил ножом). Жаль, что там не записался звук, чет не так настроил, наверное.

--

Кстаати, я тут почти случайно наткнулся на неплохое применение методов поиска условного экстремума

https://ru.wikipedia.org/wiki/Метод_множителей_Лагранжа
(англоязычная статья значительно полнее, но именно из-за этого мне лень её читать, да и тут просто сразу алгоритм написан)

Пусть у нас есть n участников соревнований и k команд, по которым их надо распределить. Во время соревнований каждая команда сражается со всеми остальными и, в свою очередь, каждый участник команды сражается с каждым участником вражеской команды. Надо распределить участников по командам так, чтобы по итогу количество схваток между участниками было максимальным.

То есть количество схваток - это функция от k переменных f(x1, ..., xk) = x1 · x2 + ... + x1 · xk + x2 · x3 + ... + x2 · xk + ... + xk-1 · xk (где xi - количество участников в i-ой команде), и нам надо найти её экстремум с условием x1 + ... + xk - n = 0. Всё это довольно легко делается вот как раз через этот метод множителей Лагранжа и получается, что надо делить поровну. Жесть, матанализ, спасибо, не знаю, как это можно ещё доказать нормально.

--

https://www.youtube.com/watch?v=_AWIqXzvX-U
.jpg244 Кб, 1164x1200
PoppyFanboy !VTLpv6lgGw 216 254323
Как же не хочется завтра выходить на улицу и идти куда-то, какой ужас

Много чего сегодня сделал, но всё равно далеко не всё, что планировал. Относительно легко проснулся сегодня утром, прибрался в комнате (да, судя по всему, я вообще никогда не перестану складывать вещи, где попало, в особенности, одежду), побегал (по расстоянию вроде как так же (5.1 км за 35 минут), как и в предыдущие два раза, но не выполнил тайминги: немного обсчитался и перешел на шаг раньше времени; тем не менее, прогресс есть, теперь три минуты (а вообще могу уже даже четыре и больше) непрерывного бега не кажутся такими долгими и я не так сильно устаю).

А после всего этого я пошел делать всякие штуки: начал готовиться к поступлению в одну школку (освежил в памяти системы линейных уравнений и как их решать, там Гаусс, Крамер, Кронекер-Капелли, как искать ранг матрицы, как искать обратную матрицу через алгебраические дополнения, вот это вот всё), сделал часть домашки по программированию и что-то написал для своего архиватора, но до коммита не дошел.

Помимо этого поиграл немного в The Binding of Isaac и осу, ещё раз убедился в том, что первая из-за рандома либо экстремально сложная, либо максимально простая (в этот раз мне выпали радиоуправляемые слёзы, уголёк и бримстоун; я считаю, в этот момент игроку надо просто давать возможность скипнуть все локации до финального босса, тут просто невозможно уже проиграть), а во второй я никогда не смогу заперформить на нормальном уровне карту больше, чем на четыре звезды. Больше не буду трогать эти игры, ну их, они меня только расстраивают.

Сейчас пытался водить карандашом по бумаге, но что-то совсем неудачно, завтра попробую ещё раз.

...

Алсо со вчерашнего дня пробую записывать свои планы на следующий день в группе во вконтакте, а треккинг дня делаю комментариями к посту с планами. Довольно удобно, по крайней мере, удобнее всех приложений для треккинга времени на телефон.

Вроде больше ничего не было, как-то всё равно не очень много получилось из-за того, что слишком надолго залип в глупую осу и глупого айзека, не получив от них вообще никакого удовлетворения. А ведь хотел изначально поиграть в игры с геймбоя, но в последний момент чёт передумал.

...

Сейчас повторю диффуры, распишу планы на завтра и пойду спать
Какой-то я злой сегодня
.jpg244 Кб, 1164x1200
PoppyFanboy !VTLpv6lgGw 216 254323
Как же не хочется завтра выходить на улицу и идти куда-то, какой ужас

Много чего сегодня сделал, но всё равно далеко не всё, что планировал. Относительно легко проснулся сегодня утром, прибрался в комнате (да, судя по всему, я вообще никогда не перестану складывать вещи, где попало, в особенности, одежду), побегал (по расстоянию вроде как так же (5.1 км за 35 минут), как и в предыдущие два раза, но не выполнил тайминги: немного обсчитался и перешел на шаг раньше времени; тем не менее, прогресс есть, теперь три минуты (а вообще могу уже даже четыре и больше) непрерывного бега не кажутся такими долгими и я не так сильно устаю).

А после всего этого я пошел делать всякие штуки: начал готовиться к поступлению в одну школку (освежил в памяти системы линейных уравнений и как их решать, там Гаусс, Крамер, Кронекер-Капелли, как искать ранг матрицы, как искать обратную матрицу через алгебраические дополнения, вот это вот всё), сделал часть домашки по программированию и что-то написал для своего архиватора, но до коммита не дошел.

Помимо этого поиграл немного в The Binding of Isaac и осу, ещё раз убедился в том, что первая из-за рандома либо экстремально сложная, либо максимально простая (в этот раз мне выпали радиоуправляемые слёзы, уголёк и бримстоун; я считаю, в этот момент игроку надо просто давать возможность скипнуть все локации до финального босса, тут просто невозможно уже проиграть), а во второй я никогда не смогу заперформить на нормальном уровне карту больше, чем на четыре звезды. Больше не буду трогать эти игры, ну их, они меня только расстраивают.

Сейчас пытался водить карандашом по бумаге, но что-то совсем неудачно, завтра попробую ещё раз.

...

Алсо со вчерашнего дня пробую записывать свои планы на следующий день в группе во вконтакте, а треккинг дня делаю комментариями к посту с планами. Довольно удобно, по крайней мере, удобнее всех приложений для треккинга времени на телефон.

Вроде больше ничего не было, как-то всё равно не очень много получилось из-за того, что слишком надолго залип в глупую осу и глупого айзека, не получив от них вообще никакого удовлетворения. А ведь хотел изначально поиграть в игры с геймбоя, но в последний момент чёт передумал.

...

Сейчас повторю диффуры, распишу планы на завтра и пойду спать
Какой-то я злой сегодня
8eb.jpg82 Кб, 1366x768
PoppyFanboy !VTLpv6lgGw 217 254460
Я-я просто пойду спать, не хочу больше находиться в сегодняшнем дне. На самом деле, это неплохая тактика, я по сути ничего не теряю: мне ведь в любом случае надо будет поспать, так почему бы не сделать это пораньше?
sage PoppyFanboy !VTLpv6lgGw 218 254838
Да что ж такое
.jpg617 Кб, 2048x2024
PoppyFanboy !VTLpv6lgGw 219 255122
Ччёрт, а что было-то, толком не помню. Вроде ничего хорошего: в пятницу в кои-то веки сходил на все пять пар, которые были, и больше ничего не делал, а вчера ездил то на студпроект или что-то в этом роде, не знаю. Вроде как будет что-то низкоуровневое и связанное с z/OS (на эмуляторе), и по средам ещё две пары по ассемблеру Джаст лайк у меня много времени, я умею его грамотно распределять и мне больше нечем заняться. Не знаю, зачем мне это, ну, просто, раз можно, то почему бы и нет. Дропнуть я это могу в любой момент, да, не только это, а вообще всё Пока что ничего особо не было, только общие слова и поставили эмулятор.

Оставшуюся часть дня в субботу и сегодня весь день почти играл в секиро шэдоус дай твайс. Вроде неплохо, но местами сложновато: во-первых, вместо перекатов как в дарк соулсе здесь рывки, которые не дают полной неуязвимости (из-за этого непонятно, как нормально избегать стрел), во-вторых, некоторые враги какие-то ну слишком уж сильные, взять даже мини-босса, который находится около четвёртого по счёту идола в окрестностях Ашины: ему надо нанести миллион ударов, прежде чем он выйдет из равновесия и можно будет сделать крит, а потом так же ещё раз (и это не только уныло и сложно, но ещё и выглядит тупо и однообразно), в-третьих, непонятно, зачем нужна эта механика с воскрешением: это второй шанс, чтобы мне не приходилось лишний раз проходить одну и ту же локацию по второму кругу (и в таком случае это очень хороший ход), или же это боевая техника, которая позволяет притвориться мертвым, а затем неожиданно атаковать со спины (и тогда это, я считаю, это какая-то ерунда, которая очень сильно упрощает прохождение в некоторых местах, особенно с учётом того, что способность к воскрешению может восстанавливаться).

А, и ещё я хотел начать заново проходить ниер автомату на харде, но несколько раз к ряду не смог пройти пролог (в нём нет сохранений, поэтому каждый раз приходится начинать заново).

>Start on Normal until you get to your save


В связи с этим сразу вспоминается вот это видео:
https://youtu.be/A4_auMe1HsY
Актуально для ниер автоматы, особенно с учётом того, что там можно менять сложность вообще в любой момент, то есть она не фиксируется за сейвом.

А, самое главное - я дропнул бег: бег не нужен, вреден для спины и коленей, почти никак не помогает сбрасывать вес, а ещё можно неудачно упасть, да и вообще это не приносит никакого удовольствия, даже когда уже более-менее умеешь (год назад я мог в 5 км за чуть больше, чем 25 минут, и это всё ещё было так себе по сравнению с играми на пк, поэтому, и ещё из-за того, что ненамеренно немного натёр асфальт своей кровью, я тогда и перестал этим заниматься).

Если ничего не сделаю за остаток сегодняшнего дня, то я лох

Фу, реп
https://www.youtube.com/watch?v=YdCveBdO-1o
.jpg617 Кб, 2048x2024
PoppyFanboy !VTLpv6lgGw 219 255122
Ччёрт, а что было-то, толком не помню. Вроде ничего хорошего: в пятницу в кои-то веки сходил на все пять пар, которые были, и больше ничего не делал, а вчера ездил то на студпроект или что-то в этом роде, не знаю. Вроде как будет что-то низкоуровневое и связанное с z/OS (на эмуляторе), и по средам ещё две пары по ассемблеру Джаст лайк у меня много времени, я умею его грамотно распределять и мне больше нечем заняться. Не знаю, зачем мне это, ну, просто, раз можно, то почему бы и нет. Дропнуть я это могу в любой момент, да, не только это, а вообще всё Пока что ничего особо не было, только общие слова и поставили эмулятор.

Оставшуюся часть дня в субботу и сегодня весь день почти играл в секиро шэдоус дай твайс. Вроде неплохо, но местами сложновато: во-первых, вместо перекатов как в дарк соулсе здесь рывки, которые не дают полной неуязвимости (из-за этого непонятно, как нормально избегать стрел), во-вторых, некоторые враги какие-то ну слишком уж сильные, взять даже мини-босса, который находится около четвёртого по счёту идола в окрестностях Ашины: ему надо нанести миллион ударов, прежде чем он выйдет из равновесия и можно будет сделать крит, а потом так же ещё раз (и это не только уныло и сложно, но ещё и выглядит тупо и однообразно), в-третьих, непонятно, зачем нужна эта механика с воскрешением: это второй шанс, чтобы мне не приходилось лишний раз проходить одну и ту же локацию по второму кругу (и в таком случае это очень хороший ход), или же это боевая техника, которая позволяет притвориться мертвым, а затем неожиданно атаковать со спины (и тогда это, я считаю, это какая-то ерунда, которая очень сильно упрощает прохождение в некоторых местах, особенно с учётом того, что способность к воскрешению может восстанавливаться).

А, и ещё я хотел начать заново проходить ниер автомату на харде, но несколько раз к ряду не смог пройти пролог (в нём нет сохранений, поэтому каждый раз приходится начинать заново).

>Start on Normal until you get to your save


В связи с этим сразу вспоминается вот это видео:
https://youtu.be/A4_auMe1HsY
Актуально для ниер автоматы, особенно с учётом того, что там можно менять сложность вообще в любой момент, то есть она не фиксируется за сейвом.

А, самое главное - я дропнул бег: бег не нужен, вреден для спины и коленей, почти никак не помогает сбрасывать вес, а ещё можно неудачно упасть, да и вообще это не приносит никакого удовольствия, даже когда уже более-менее умеешь (год назад я мог в 5 км за чуть больше, чем 25 минут, и это всё ещё было так себе по сравнению с играми на пк, поэтому, и ещё из-за того, что ненамеренно немного натёр асфальт своей кровью, я тогда и перестал этим заниматься).

Если ничего не сделаю за остаток сегодняшнего дня, то я лох

Фу, реп
https://www.youtube.com/watch?v=YdCveBdO-1o
PoppyFanboy !VTLpv6lgGw 220 255194
>>255122

>бег не нужен, вреден для спины


Л-ладно, я пошутил, правда смешно? Remember not to trust anyone

5 мин. шага + (4 мин. бега + 2.5 мин. шага) x 3 + 5 мин. бега + 5 мин. шага

Хорошо сказались три дня отдыха, хорошая погода, удобная обувь и то, что я выспался нормально. В следующий раз результаты будут чуть хуже.
.png157 Кб, 800x800
PoppyFanboy !VTLpv6lgGw 221 255532
Как-то быстро день прошёл, ничего толком не успел. Читал что-то по матлогике, про базовые вещи вроде КНФ и ДНФ, про секвенциальное исчисление и про предикаты, но подробно не разбирался. Немного подзавис, когда надо было доказать коммутативность умножения, используя аксиомы x · 0 = 0 и x · s(y) = x · y + x, но разобрался. Ещё выучил нормально диффуры до 10 билета и побегал (так же, как и вчера). Да, два дня подряд не стоило бы бегать, но я не хотел брать двухдневный перерыв (завтра на это времени бы не было). В итоге, наверное, всё равно сделаю перерыв в два дня, всё же надо отдохнуть.

Хочу купить новые брюки и ещё кое-что из одежды, но очень сильно душит жабба. С другой стороны, раз в год, может быть, и можно. Не знаю, в общем.

https://youtu.be/DAXjiVuzlPw
.jpg511 Кб, 1280x960
PoppyFanboy !VTLpv6lgGw 222 255940
Вчера, придя поздно с пар, решил попробовать сразу лечь пораньше. Заснул, наверное, где-то в половине десятого вечера, а проснулся в 5.30 по будильнику. Чувствовал себя ещё хуже, наверное, чем если бы недоспал: ужасно хотелось спать, в голове проносились какие-то мысли, но ни одну из них не мог ухватить. В этом полубреду, прежде чем встать с кровати, я провалялся где-то час или полтора, так и не заснув ещё раз. С семи утра до часу дня я вообще почти ничего не делал, очень сильно вязнул в каких-то бытовых вещах, а после этого уже надо было выходить из дома. В этом основная проблема - зная, что я строго ограничен во времени, я не могу ничего даже начать делать (ну я всё равно уже ничего не успеваю, а тут уже вроде как скоро идти уже надо куда-то). Вечером такой проблемы нет: вся ночь же впереди.

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

Дда, во вторник я опять жесть сходил на все пары и лёг пораньше, а сегодня послушал вступительные штуки про ассемблер и потыкал немного какие-то кнопки и, кроме этого, ничего не сделал.

Вроде как знаю нормально где-то 15 билетов по диффурам. Если за два дня выучу ещё десять (если честно, выглядит это маловероятно), то, наконец-то, (на время) отделаюсь от них.

Хм, забавно
https://youtu.be/SfdPkM_VDVQ

Когда-то слушал их
https://youtu.be/SYejc1RSvAk
https://youtu.be/IoyToHOWSV8

И их тоже
https://youtu.be/0L_iOnLNt9M
https://youtu.be/WvfcLn25xXI

https://youtu.be/kqNBHNMddfM
https://youtu.be/Oxudv1165fI

В последнее время чего-то учёба очень сильно угнетает
.jpg511 Кб, 1280x960
PoppyFanboy !VTLpv6lgGw 222 255940
Вчера, придя поздно с пар, решил попробовать сразу лечь пораньше. Заснул, наверное, где-то в половине десятого вечера, а проснулся в 5.30 по будильнику. Чувствовал себя ещё хуже, наверное, чем если бы недоспал: ужасно хотелось спать, в голове проносились какие-то мысли, но ни одну из них не мог ухватить. В этом полубреду, прежде чем встать с кровати, я провалялся где-то час или полтора, так и не заснув ещё раз. С семи утра до часу дня я вообще почти ничего не делал, очень сильно вязнул в каких-то бытовых вещах, а после этого уже надо было выходить из дома. В этом основная проблема - зная, что я строго ограничен во времени, я не могу ничего даже начать делать (ну я всё равно уже ничего не успеваю, а тут уже вроде как скоро идти уже надо куда-то). Вечером такой проблемы нет: вся ночь же впереди.

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

Дда, во вторник я опять жесть сходил на все пары и лёг пораньше, а сегодня послушал вступительные штуки про ассемблер и потыкал немного какие-то кнопки и, кроме этого, ничего не сделал.

Вроде как знаю нормально где-то 15 билетов по диффурам. Если за два дня выучу ещё десять (если честно, выглядит это маловероятно), то, наконец-то, (на время) отделаюсь от них.

Хм, забавно
https://youtu.be/SfdPkM_VDVQ

Когда-то слушал их
https://youtu.be/SYejc1RSvAk
https://youtu.be/IoyToHOWSV8

И их тоже
https://youtu.be/0L_iOnLNt9M
https://youtu.be/WvfcLn25xXI

https://youtu.be/kqNBHNMddfM
https://youtu.be/Oxudv1165fI

В последнее время чего-то учёба очень сильно угнетает
PoppyFanboy !VTLpv6lgGw 223 256509
Всё, сдал коллоквиум по диффурам: минус один вопрос на экзамене. Сколько же времени ушло на подготовку, эх, особенно это всё грустно с оглядкой на не очень-то большой объём теории с коллоквиума, ну, да ладно. Всё же в моей голове теоретически может оставаться информация дольше, чем на десять минут, если перечитывать её нон-стоп несколько раз, а потом ещё несколько раз воспроизводить в голове или на бумаге. Это надо учесть: больше не буду разбираться в теории и при этом не пытаться запоминать её, потому что в таком случае, внезапно, у меня в голове ничего не откладывается, даже если я понимаю каждый переход в доказательстве какой-нибудь теоремы.

В общем, в течение этих трёх дней я только ходил на пары, готовился к диффурам и сдавал их (сегодня). Очень мало спал по своим меркам: не помню, чтобы выходило больше шести часов, но при этом чувствую себя вполне неплохо (подозреваю, что это всё обман и мне стоит сейчас пойти и поспать нормально).

Левел-апнул бег: сегодня и в четверг бегал с новыми таймингами:
5 мин. шага + (5 мин. бега + 2.5 мин. шага) x 2 + 5 мин. бега + 2 мин. шага + 3 мин. бега + 5 мин. шага
Думаю, надо ещё пару раз побегать в таком режиме: пока что довольно сильно выматываюсь, но зато, вместе с этим, немного увеличилась дистанция: сегодня вышло аж 5.37 км (если верить трекеру бега, конечно). Кстати, получается, я бегаю уже месяц, даже больше немного. Наверное, неплохо.

Пока что единственный плюс - это то, что это максимально простое и не требующее никаких усилий, помимо физических, занятие: просто двигаешь ногами и залипаешь куда-нибудь глазами.

...

Наконец-то посмотрел десантниц. В целом, мне понравилось, хоть и начало показалось ну слишком уж затянутым. Стоит посмотреть хотя бы из-за концовки.

Ещё сегодня всё же заказал новую одежду, вспомнив, что мне в любом случае нужна новая куртка. Надеюсь, не прогадал с размерами.

...

https://stackoverflow.com/questions/370962/why-cant-static-methods-be-abstract-in-java
Почувствовал всю боль этого недоразумения, когда определял ноль и единицу для абстрактного класса для поля. Судя по всему, единственный вариант - это тупо абстрактные нестатические методы getUnity() и getZero(), то есть выходит, что для того, чтобы получить нулевой элемент поля, нужен какой-то другой элемент поля. Брр, отвратительно.

А-а, вот, вспомнил, я же ещё потратил миллион часов на секиро. Застрял на мини-боссе, который постоянно хлещет что-то болотно-зелёное из своей бутылки и размахивает огромным изогнутым мечом. Какая-то глупая игра, мне пока что не нравится: перекатов нет, два попадания босса по тебе и ты уже мёртв, возле босса зачем-то раскидали миньонов (успешное убийство которых до того, как до тебя добежит босс - дело случая), из атак есть только удар катаной справа и удар катаной слева.
PoppyFanboy !VTLpv6lgGw 223 256509
Всё, сдал коллоквиум по диффурам: минус один вопрос на экзамене. Сколько же времени ушло на подготовку, эх, особенно это всё грустно с оглядкой на не очень-то большой объём теории с коллоквиума, ну, да ладно. Всё же в моей голове теоретически может оставаться информация дольше, чем на десять минут, если перечитывать её нон-стоп несколько раз, а потом ещё несколько раз воспроизводить в голове или на бумаге. Это надо учесть: больше не буду разбираться в теории и при этом не пытаться запоминать её, потому что в таком случае, внезапно, у меня в голове ничего не откладывается, даже если я понимаю каждый переход в доказательстве какой-нибудь теоремы.

В общем, в течение этих трёх дней я только ходил на пары, готовился к диффурам и сдавал их (сегодня). Очень мало спал по своим меркам: не помню, чтобы выходило больше шести часов, но при этом чувствую себя вполне неплохо (подозреваю, что это всё обман и мне стоит сейчас пойти и поспать нормально).

Левел-апнул бег: сегодня и в четверг бегал с новыми таймингами:
5 мин. шага + (5 мин. бега + 2.5 мин. шага) x 2 + 5 мин. бега + 2 мин. шага + 3 мин. бега + 5 мин. шага
Думаю, надо ещё пару раз побегать в таком режиме: пока что довольно сильно выматываюсь, но зато, вместе с этим, немного увеличилась дистанция: сегодня вышло аж 5.37 км (если верить трекеру бега, конечно). Кстати, получается, я бегаю уже месяц, даже больше немного. Наверное, неплохо.

Пока что единственный плюс - это то, что это максимально простое и не требующее никаких усилий, помимо физических, занятие: просто двигаешь ногами и залипаешь куда-нибудь глазами.

...

Наконец-то посмотрел десантниц. В целом, мне понравилось, хоть и начало показалось ну слишком уж затянутым. Стоит посмотреть хотя бы из-за концовки.

Ещё сегодня всё же заказал новую одежду, вспомнив, что мне в любом случае нужна новая куртка. Надеюсь, не прогадал с размерами.

...

https://stackoverflow.com/questions/370962/why-cant-static-methods-be-abstract-in-java
Почувствовал всю боль этого недоразумения, когда определял ноль и единицу для абстрактного класса для поля. Судя по всему, единственный вариант - это тупо абстрактные нестатические методы getUnity() и getZero(), то есть выходит, что для того, чтобы получить нулевой элемент поля, нужен какой-то другой элемент поля. Брр, отвратительно.

А-а, вот, вспомнил, я же ещё потратил миллион часов на секиро. Застрял на мини-боссе, который постоянно хлещет что-то болотно-зелёное из своей бутылки и размахивает огромным изогнутым мечом. Какая-то глупая игра, мне пока что не нравится: перекатов нет, два попадания босса по тебе и ты уже мёртв, возле босса зачем-то раскидали миньонов (успешное убийство которых до того, как до тебя добежит босс - дело случая), из атак есть только удар катаной справа и удар катаной слева.
pv.webm11,2 Мб, webm,
1280x720, 0:25
Рируру !!gYmpHned/k 224 256560
>>256509
٩(๑❛ᴗ❛๑)۶ (*’∀’人)♥  ୧༼ ヘ ᗜ ヘ ༽୨
.jpg92 Кб, 949x1200
PoppyFanboy !VTLpv6lgGw 225 256672
>>256560
( •ω•)৴♡

Вроде хотел реализовать Штрассена и уже сделал класс для дженерик матриц, но включил секиро и провалился в него без преувеличения на весь день. Очень надолго застрял с какой-то старой каргой из-за того, что случайно использовал айтем, с помощью которого можно было бы скипнуть вторую фазу босса

https://youtu.be/obbULzdDVG0

Уже всерьёз ненавижу эту игру, но мне слишком уж нравится сеттинг.

...

Ну всё, всё, больше не буду вот так целый день спускать непонятно на что, обещаю. Наверное.
all over again ┐(‘~` )┌ PoppyFanboy !VTLpv6lgGw 226 256997
Опять не особо помню, что было вчера: вроде бегал (пробежал столько же, сколько и в прошлый раз, но устал сильнее), физически присутствовал на парах, читал про секвенциальное исчисление предикатов и метод резолюций для них же к уже прошедшей сегодня контрольной по матлогике (я думаю, что более-менее понял, как доказывать выводимость формул, но это выглядит как какая-то странная магия).

А сегодня был на парах, решал контрольную по матлогике и совсем немного почитал reading из 6.042J

...

Корчое, что я хотел сказать самому себе
Мне не нравится, что с течением времени я только сильнее зарываюсь в песок и становлюсь всё более и более инертным, поэтому надо что-то поменять (ха)

Распределение времени
1. Не заниматься вообще ничем более, чем на протяжении одного часа (я либо не могу начать, либо, будучи не ограниченным во временных рамках, делаю всё слишком медленно и постоянно отвлекаясь, из-за чего я вчера, например, разбирался с матлогикой ну слишком уж долго, с учётом объёмов материалов)

2. Хоть в каком-нибудь виде делать трекинг времени (я слишком сильно дизориентирован во времени, условные внутренние часы измеряют время с точностью до суток, не имею представления даже о том, сколько примерно по ощущениям идёт один час времени, не говоря уже о более мелких интервалах)

3. Расписывать планы на следующий день (если я уже сразу после пробуждения не знаю, что стоит делать, то я, скорее всего, вообще ничем не буду заниматься) и то, что надо сделать в течение недели

4. Стараться как-нибудь использовать время, которое я провожу в транспорте - это часа 2 в день, когда надо ехать на пары (я не могу, я просто сразу же либо залипаю в окно, либо меня укачивает и я чуть ли не засыпаю; не знаю, чем можно заниматься в это время, наверное, лучше всего будет читать что-то по учебе в универе)

Здоровье (? я в этом не разбираюсь)
1. Для начала просто отслеживать, что я ем и сколько пью воды, хотя бы на протяжении недели, а затем понемногу улучшать показатели (меньше шоколада и прочей ерунды, которую я пожираю тоннами, больше воды слеш зелёного чая; кстати, последний мне вроде понемногу начал нравится по вкусу, но единственная проблема - это то, что я вообще никак не могу пить его горячим; можно, наверное, попробовать заваривать сразу несколько чашек)

2. Делать зарядку для спины (я и сейчас её делаю, но надо чаще; пусть для начала хотя бы через день)

3. Стараться спать не менее шести-восьми часов (если меньше, то мне становится очень-очень-очень плохо и я вообще не соображаю, что происходит вокруг)

4. Бегать и просто ходить ногами (в дни, когда я не бегаю, я вообще почти не двигаюсь, так, наверное, нельзя; проблема в том, что ходить-то особо негде, до нормальных мест надо добираться на транспорте, а это плюс время)

Прочее
1. Дропнуть соулс-лайк игры и секиро в частности

2. Чаще прибираться в комнате и/или перестать складывать вещи где попало

3. Вставать с кровати сразу же после пробуждения

4. Ходить на все пары (я забиваю примерно на треть лекций, не стоит так делать)

...

Этого будет более, чем достаточно пока что. Естественно, я всё сразу не смогу начать выполнять, так что пока что хотя бы первые два пункта от каждой категории. Так, теперь к более конкретным вещам

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

2. Домашнее задание по английскому к понедельнику (разобраться в том, что задали, и сделать; также надо выбрать онлайн курс на английском для прохождения; думаю, попробую найти что-нибудь по архитектуре компьютеров, потому что в универе нам этот предмет преподаётся не очень)

3. Домашнее задание по программированию

4. СУБД (практика)

5. Начать разбираться с любым предметом, по которому я отстаю

Остальное (охх, вот тут сейчас очень много будет)
1. Заполнить анкеты в X и Y (на Y можно особо не надеяться, но можно же попробовать просто так)

2. Собственно, попробовать попасть в X и Y (с X понятно, с Y там не знаю)

3. Ходить на студпроект (среда и суббота)

4. Хочу допройти 6.042J и поэтому поставлю его повыше в приоритете (n месяцев назад я остановился на десятом reading'е про рекуррентные соотношения)

5. Хочу сделать архиватор (пока что можно считать, что там вообще никакого прогресса)

6. Хочу читать CLRS и решать странные задачки по программированию

7. Хочу дочитать Core Java

8. Хочу взять в привычку рисовать всякую ерунду каждый день

...

Вот так, поэтому завтра:
9.30
- проснуться
- нормально позавтракать
- побегать
11.00
- один час готовиться к контрольной по диффурам
- один час читать reading'и из 6.042J
13.40
- привести себя в порядок и пойти на студпроект
- в дороге попробовать поразбираться с самого начала с тем, что было на лекциях по операционным системам
- посидеть-послушать лекцию, что-то потыкать
18.45
- по дороге домой попробовать почитать CLRS (чувствую, что не очень затея делать это без компа, но, что поделать)
- не забыть выйти на несколько остановок раньше, чтобы объехать потенциальную пробку на трамвае
20.30 (ну это максимум, я надеюсь)
- доехать домой
- сделать зарядку для спины
- один час готовиться к диффурам
- хотя бы немного попытаться порисовать
- один час на X
0.00
- написать план на следующий день
- пойти спать

+ делать трекинг времени
+ записать, что я ел в течение дня и сколько выпил воды
+ если что-то и слушать на фоне, то что-нибудь лёгкое

...

Ну, понятно, что я вряд ли осилю это полностью, но
хотя бы частично
хотя бы проснуться вовремя
хотя бы проснуться

...

Очень неплохо
https://youtu.be/uorVoWL0CuM
https://youtu.be/eu9MT7WiWP4
https://youtu.be/JC8mSAlU5-4

https://youtu.be/oi3QmAmrG6M
https://youtu.be/eXuYVwPy3yA
https://youtu.be/3yh-TNSY1Cc
https://youtu.be/NZ4c6VqMnHY

Один из тех немногих случаев, когда русскоязычный кавер мне нравится гораздо больше оригинала
https://youtu.be/nxvJgoLanHk

Наконец-то, он закончил с этим. Первые три акта были очень классные, а оставшиеся три - вообще неслушабельные (ну, впрочем, он и не преледовал цели сделать их хоть сколько-нибудь мелодичными)
https://youtu.be/sM5hlrkaPSo
А он, оказывается, недавно ещё один альбом ("Everywhere, an empty bliss ") успел выпустить, надо будет потом посмотреть, что там

В последнее время чёт не попадается ничего интересного из музыки, а треки из текущего плейлиста очень стремительно начинают надоедать
all over again ┐(‘~` )┌ PoppyFanboy !VTLpv6lgGw 226 256997
Опять не особо помню, что было вчера: вроде бегал (пробежал столько же, сколько и в прошлый раз, но устал сильнее), физически присутствовал на парах, читал про секвенциальное исчисление предикатов и метод резолюций для них же к уже прошедшей сегодня контрольной по матлогике (я думаю, что более-менее понял, как доказывать выводимость формул, но это выглядит как какая-то странная магия).

А сегодня был на парах, решал контрольную по матлогике и совсем немного почитал reading из 6.042J

...

Корчое, что я хотел сказать самому себе
Мне не нравится, что с течением времени я только сильнее зарываюсь в песок и становлюсь всё более и более инертным, поэтому надо что-то поменять (ха)

Распределение времени
1. Не заниматься вообще ничем более, чем на протяжении одного часа (я либо не могу начать, либо, будучи не ограниченным во временных рамках, делаю всё слишком медленно и постоянно отвлекаясь, из-за чего я вчера, например, разбирался с матлогикой ну слишком уж долго, с учётом объёмов материалов)

2. Хоть в каком-нибудь виде делать трекинг времени (я слишком сильно дизориентирован во времени, условные внутренние часы измеряют время с точностью до суток, не имею представления даже о том, сколько примерно по ощущениям идёт один час времени, не говоря уже о более мелких интервалах)

3. Расписывать планы на следующий день (если я уже сразу после пробуждения не знаю, что стоит делать, то я, скорее всего, вообще ничем не буду заниматься) и то, что надо сделать в течение недели

4. Стараться как-нибудь использовать время, которое я провожу в транспорте - это часа 2 в день, когда надо ехать на пары (я не могу, я просто сразу же либо залипаю в окно, либо меня укачивает и я чуть ли не засыпаю; не знаю, чем можно заниматься в это время, наверное, лучше всего будет читать что-то по учебе в универе)

Здоровье (? я в этом не разбираюсь)
1. Для начала просто отслеживать, что я ем и сколько пью воды, хотя бы на протяжении недели, а затем понемногу улучшать показатели (меньше шоколада и прочей ерунды, которую я пожираю тоннами, больше воды слеш зелёного чая; кстати, последний мне вроде понемногу начал нравится по вкусу, но единственная проблема - это то, что я вообще никак не могу пить его горячим; можно, наверное, попробовать заваривать сразу несколько чашек)

2. Делать зарядку для спины (я и сейчас её делаю, но надо чаще; пусть для начала хотя бы через день)

3. Стараться спать не менее шести-восьми часов (если меньше, то мне становится очень-очень-очень плохо и я вообще не соображаю, что происходит вокруг)

4. Бегать и просто ходить ногами (в дни, когда я не бегаю, я вообще почти не двигаюсь, так, наверное, нельзя; проблема в том, что ходить-то особо негде, до нормальных мест надо добираться на транспорте, а это плюс время)

Прочее
1. Дропнуть соулс-лайк игры и секиро в частности

2. Чаще прибираться в комнате и/или перестать складывать вещи где попало

3. Вставать с кровати сразу же после пробуждения

4. Ходить на все пары (я забиваю примерно на треть лекций, не стоит так делать)

...

Этого будет более, чем достаточно пока что. Естественно, я всё сразу не смогу начать выполнять, так что пока что хотя бы первые два пункта от каждой категории. Так, теперь к более конкретным вещам

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

2. Домашнее задание по английскому к понедельнику (разобраться в том, что задали, и сделать; также надо выбрать онлайн курс на английском для прохождения; думаю, попробую найти что-нибудь по архитектуре компьютеров, потому что в универе нам этот предмет преподаётся не очень)

3. Домашнее задание по программированию

4. СУБД (практика)

5. Начать разбираться с любым предметом, по которому я отстаю

Остальное (охх, вот тут сейчас очень много будет)
1. Заполнить анкеты в X и Y (на Y можно особо не надеяться, но можно же попробовать просто так)

2. Собственно, попробовать попасть в X и Y (с X понятно, с Y там не знаю)

3. Ходить на студпроект (среда и суббота)

4. Хочу допройти 6.042J и поэтому поставлю его повыше в приоритете (n месяцев назад я остановился на десятом reading'е про рекуррентные соотношения)

5. Хочу сделать архиватор (пока что можно считать, что там вообще никакого прогресса)

6. Хочу читать CLRS и решать странные задачки по программированию

7. Хочу дочитать Core Java

8. Хочу взять в привычку рисовать всякую ерунду каждый день

...

Вот так, поэтому завтра:
9.30
- проснуться
- нормально позавтракать
- побегать
11.00
- один час готовиться к контрольной по диффурам
- один час читать reading'и из 6.042J
13.40
- привести себя в порядок и пойти на студпроект
- в дороге попробовать поразбираться с самого начала с тем, что было на лекциях по операционным системам
- посидеть-послушать лекцию, что-то потыкать
18.45
- по дороге домой попробовать почитать CLRS (чувствую, что не очень затея делать это без компа, но, что поделать)
- не забыть выйти на несколько остановок раньше, чтобы объехать потенциальную пробку на трамвае
20.30 (ну это максимум, я надеюсь)
- доехать домой
- сделать зарядку для спины
- один час готовиться к диффурам
- хотя бы немного попытаться порисовать
- один час на X
0.00
- написать план на следующий день
- пойти спать

+ делать трекинг времени
+ записать, что я ел в течение дня и сколько выпил воды
+ если что-то и слушать на фоне, то что-нибудь лёгкое

...

Ну, понятно, что я вряд ли осилю это полностью, но
хотя бы частично
хотя бы проснуться вовремя
хотя бы проснуться

...

Очень неплохо
https://youtu.be/uorVoWL0CuM
https://youtu.be/eu9MT7WiWP4
https://youtu.be/JC8mSAlU5-4

https://youtu.be/oi3QmAmrG6M
https://youtu.be/eXuYVwPy3yA
https://youtu.be/3yh-TNSY1Cc
https://youtu.be/NZ4c6VqMnHY

Один из тех немногих случаев, когда русскоязычный кавер мне нравится гораздо больше оригинала
https://youtu.be/nxvJgoLanHk

Наконец-то, он закончил с этим. Первые три акта были очень классные, а оставшиеся три - вообще неслушабельные (ну, впрочем, он и не преледовал цели сделать их хоть сколько-нибудь мелодичными)
https://youtu.be/sM5hlrkaPSo
А он, оказывается, недавно ещё один альбом ("Everywhere, an empty bliss ") успел выпустить, надо будет потом посмотреть, что там

В последнее время чёт не попадается ничего интересного из музыки, а треки из текущего плейлиста очень стремительно начинают надоедать
.jpg117 Кб, 1095x1095
PoppyFanboy !VTLpv6lgGw 227 257189
Совсем забыл, что студпроект перенесли с 15.30 на 10.00. Вспомнил об этом только когда уже дёргал ручку двери закрытой аудитории. Ну, ладно, в следующий раз приду вовремя. Вообще не понимаю, почему все так дружно согласились на такое раннее время. Неприятно, что зря туда-сюда ездил, но ладно уж, теперь точно запомню, во сколько оно начинается.

+
Почти полностью сделал трекинг времени, но под конец дня уже начал залипать и сильно отвлекаться. Из вредного съел два мини китката, конфету, а ещё немного применил кетчуп на еду один раз (так мало, потому что я больше ничего не нашёл, а идти и покупать что-то мне лень). Вроде не слушал особо фоновый контент с человеческим голосом.

Побегал, но значительно меньше (5,2 км, тайминги всё те же), чем в предыдущие разы: ощущение, будто бы мне в каждый ботинок положили по небольшой полукилограммовой гире. Выпил где-то восемь стаканов воды (не знаю, какой у него объём, наверное, где-то 200 мл) и одну кружку чая (чёт лень было заваривать). Сделал небольшую зарядку для спины.

Пытался что-то делать в автобусе, но не особо успешно: по операционным системам прочитал только несколько абзацев текста, CLRS не читал, вместо этого пытался вывести явную формулу для рекуррентного соотношения оценки сложности алгоритма Штрассена методом, который в 6.042J был обозначен как "plug and chug". Вроде даже получилось, забавно, даже без мастер метода, который я ещё не смотрел (постоянно путался в цифрах, из-за чего сильно тупил).

Вроде более-менее разобрался с диффурами (там, оказывается, были линейные системы диффуров; задания решил не делать, слишком уж муторно и я постоянно ошибаюсь). Совсем немного почитал 6.042J вот как раз про plug and chug (по сути это угадывание паттерна, но только с конца: например, T(n) = 2T(n/2) + n = 2(2T(n/4) + n/2) + n = 4T(n/4) + 2n = ... = 2^k · T(n/2^k) + k · n - вот это просто догадка, её легко можно проверить индукцией по k, а затем выбрать k = log(n) и получить, что T(n) = n + n · log(n)). Заполнил анкету в X, вроде получилось более-менее сносно, но в некоторых моментах при прочтении меня всё равно передёргивало (просто забил на это, я не смогу лучше). Порисовал какую-то ерунду.

>>256997

>Не заниматься вообще ничем более, чем на протяжении одного часа


И не заниматься одним и тем же два раза подряд - вот это важная штука, которую я забыл дописать. Сегодня почти удалось соблюсти это, но под конец дня я немного провалился в диффуры и застрял там на лишний абсолютно непродуктивный час, тогда как стоило бы остановиться и переключиться.

Ни во что не играл сегодня, чёт не знаю, что бы такого попробовать не очень напряжного. Может быть, ремастер креша?

>>251803
С утра было 67, кстати, но, мне кажется, завтра будет опять 68.

Сегодня было так тепло и солнечно. Я, кажется, получил свою годовую норму солнечного света, верните, пожалуйста, пасмурную погоду (я даже глаза толком не мог открыть на улице, как-то неприятно). Может быть, из-за этого я сегодня так неудачно побегал?

Чёрт, поздно ложусь спать, это не очень здорово. День неплохой, но пресный, и я ни в чём особо не продвинулся.

Завтра
7.40
- проснуться
- умыться
- поесть (мне обычно так рано есть не хочется, да и времени что-то пытаться приготовить нет как будто бы я умею)
- поехать на пары, в дороге попытаться почитать 6.042J
14.00
- по дороге обратно читать конспект по операционным системам
- не забыть выйти заранее, чтобы объехать пробку
- дойти до дома пешком
15.45 (максимум)
- наверное, поесть
- один час на домашнее задание по программированию 1
- один час на домашнее задание по программированию 2
- поиграть во что-нибудь немного
- сделать зарядку для спины
19.00
- полтора часа на то, чтобы сделать что-то осмысленное в архиваторе
- порисовать ерунду
- один час на CLRS
0.00
- составить план на следующий день
- пойти спать

ну и трекинг времени, еды, вообще всего
.jpg117 Кб, 1095x1095
PoppyFanboy !VTLpv6lgGw 227 257189
Совсем забыл, что студпроект перенесли с 15.30 на 10.00. Вспомнил об этом только когда уже дёргал ручку двери закрытой аудитории. Ну, ладно, в следующий раз приду вовремя. Вообще не понимаю, почему все так дружно согласились на такое раннее время. Неприятно, что зря туда-сюда ездил, но ладно уж, теперь точно запомню, во сколько оно начинается.

+
Почти полностью сделал трекинг времени, но под конец дня уже начал залипать и сильно отвлекаться. Из вредного съел два мини китката, конфету, а ещё немного применил кетчуп на еду один раз (так мало, потому что я больше ничего не нашёл, а идти и покупать что-то мне лень). Вроде не слушал особо фоновый контент с человеческим голосом.

Побегал, но значительно меньше (5,2 км, тайминги всё те же), чем в предыдущие разы: ощущение, будто бы мне в каждый ботинок положили по небольшой полукилограммовой гире. Выпил где-то восемь стаканов воды (не знаю, какой у него объём, наверное, где-то 200 мл) и одну кружку чая (чёт лень было заваривать). Сделал небольшую зарядку для спины.

Пытался что-то делать в автобусе, но не особо успешно: по операционным системам прочитал только несколько абзацев текста, CLRS не читал, вместо этого пытался вывести явную формулу для рекуррентного соотношения оценки сложности алгоритма Штрассена методом, который в 6.042J был обозначен как "plug and chug". Вроде даже получилось, забавно, даже без мастер метода, который я ещё не смотрел (постоянно путался в цифрах, из-за чего сильно тупил).

Вроде более-менее разобрался с диффурами (там, оказывается, были линейные системы диффуров; задания решил не делать, слишком уж муторно и я постоянно ошибаюсь). Совсем немного почитал 6.042J вот как раз про plug and chug (по сути это угадывание паттерна, но только с конца: например, T(n) = 2T(n/2) + n = 2(2T(n/4) + n/2) + n = 4T(n/4) + 2n = ... = 2^k · T(n/2^k) + k · n - вот это просто догадка, её легко можно проверить индукцией по k, а затем выбрать k = log(n) и получить, что T(n) = n + n · log(n)). Заполнил анкету в X, вроде получилось более-менее сносно, но в некоторых моментах при прочтении меня всё равно передёргивало (просто забил на это, я не смогу лучше). Порисовал какую-то ерунду.

>>256997

>Не заниматься вообще ничем более, чем на протяжении одного часа


И не заниматься одним и тем же два раза подряд - вот это важная штука, которую я забыл дописать. Сегодня почти удалось соблюсти это, но под конец дня я немного провалился в диффуры и застрял там на лишний абсолютно непродуктивный час, тогда как стоило бы остановиться и переключиться.

Ни во что не играл сегодня, чёт не знаю, что бы такого попробовать не очень напряжного. Может быть, ремастер креша?

>>251803
С утра было 67, кстати, но, мне кажется, завтра будет опять 68.

Сегодня было так тепло и солнечно. Я, кажется, получил свою годовую норму солнечного света, верните, пожалуйста, пасмурную погоду (я даже глаза толком не мог открыть на улице, как-то неприятно). Может быть, из-за этого я сегодня так неудачно побегал?

Чёрт, поздно ложусь спать, это не очень здорово. День неплохой, но пресный, и я ни в чём особо не продвинулся.

Завтра
7.40
- проснуться
- умыться
- поесть (мне обычно так рано есть не хочется, да и времени что-то пытаться приготовить нет как будто бы я умею)
- поехать на пары, в дороге попытаться почитать 6.042J
14.00
- по дороге обратно читать конспект по операционным системам
- не забыть выйти заранее, чтобы объехать пробку
- дойти до дома пешком
15.45 (максимум)
- наверное, поесть
- один час на домашнее задание по программированию 1
- один час на домашнее задание по программированию 2
- поиграть во что-нибудь немного
- сделать зарядку для спины
19.00
- полтора часа на то, чтобы сделать что-то осмысленное в архиваторе
- порисовать ерунду
- один час на CLRS
0.00
- составить план на следующий день
- пойти спать

ну и трекинг времени, еды, вообще всего
.jpg157 Кб, 1025x1200
PoppyFanboy !VTLpv6lgGw 228 257276
Не осилил, сегодня почти максимальный фейл:
- трекинг времени-воды-еды сделал максимум на треть дня вышел
- воду практически не пил (ну, стакана два, может быть)
- можно считать, что сегодня я только сходил на пары, походил ногами минут 20 и сделал зарядку для спины
- начал было делать домашку по программированию, но чего-то то appveyor отказывался собирать решение, то ещё что-то, в общем, я так толком ничего и не сделал, а потратил часа два (ну, вот, собственно, причина, по которой мне нельзя заниматься чем-то одним на протяжении более, чем одного часа - я начинаю жутко залипать и тупить, в такие моменты лучше переключаться на что-нибудь другое)

Скорее всего, сказывается то, что я в последние два дня спал только по шесть часов.
Думаю, будет разумным решением не делать одну из двух домашек по программированию. F#, конечно, забавный ЯП с классными штуками вроде частично применённых функций, размеченных объединений, всяких стрелочек-операторов, делающих код красивее (ну, это, естественно, далеко не главные его особенности (я вообще про него почти ничего толком не знаю), просто то, что мне показалось интересным), но не сейчас, как-нибудь потом потрогаю это.

Чего-то чувствую себя немного потерянно, возможно, мне стоит пытаться заниматься чем-нибудь другим.

Завтра
7.30
- проснуться
- умыться
- поехать на пары (в дороге пытаться в 6.042J)
13.00
- поехать обратно, в дороге пытаться в 6.042J
- поесть
- пойти побегать
16.00
- посмотреть X один час
- CLRS один час
- поиграть во что-нибудь немного
- зарядка для спины
20.00
- CLRS один час
- полтора часа на то, чтобы сделать коммит в архиватор
- порисовать всякую ерунду
0.00
- составить план на следующий день
- пойти спать
.jpg157 Кб, 1025x1200
PoppyFanboy !VTLpv6lgGw 228 257276
Не осилил, сегодня почти максимальный фейл:
- трекинг времени-воды-еды сделал максимум на треть дня вышел
- воду практически не пил (ну, стакана два, может быть)
- можно считать, что сегодня я только сходил на пары, походил ногами минут 20 и сделал зарядку для спины
- начал было делать домашку по программированию, но чего-то то appveyor отказывался собирать решение, то ещё что-то, в общем, я так толком ничего и не сделал, а потратил часа два (ну, вот, собственно, причина, по которой мне нельзя заниматься чем-то одним на протяжении более, чем одного часа - я начинаю жутко залипать и тупить, в такие моменты лучше переключаться на что-нибудь другое)

Скорее всего, сказывается то, что я в последние два дня спал только по шесть часов.
Думаю, будет разумным решением не делать одну из двух домашек по программированию. F#, конечно, забавный ЯП с классными штуками вроде частично применённых функций, размеченных объединений, всяких стрелочек-операторов, делающих код красивее (ну, это, естественно, далеко не главные его особенности (я вообще про него почти ничего толком не знаю), просто то, что мне показалось интересным), но не сейчас, как-нибудь потом потрогаю это.

Чего-то чувствую себя немного потерянно, возможно, мне стоит пытаться заниматься чем-нибудь другим.

Завтра
7.30
- проснуться
- умыться
- поехать на пары (в дороге пытаться в 6.042J)
13.00
- поехать обратно, в дороге пытаться в 6.042J
- поесть
- пойти побегать
16.00
- посмотреть X один час
- CLRS один час
- поиграть во что-нибудь немного
- зарядка для спины
20.00
- CLRS один час
- полтора часа на то, чтобы сделать коммит в архиватор
- порисовать всякую ерунду
0.00
- составить план на следующий день
- пойти спать
.jpg120 Кб, 849x1200
PoppyFanboy !VTLpv6lgGw 229 257416
Солнце за три дня достало уже. Единственный положительный момент - закат красивый был, солнце выглядело не как яркая размытая точка, а больше было похоже на огромный тлеющий диск с чёткими краями. И небо тоже красивое: алое вперемешку с жёлтым и пастельным голубым (ну или что-то близкое к нему). Жаль, что на фотке ничего этого не видно почти.

Чего-то настроение не очень

https://youtu.be/URkomZag2yU
https://youtu.be/0QrSJV28s_Y
https://youtu.be/DIso1yQ10ks

>>257276

>поехать на пары


>6.042J


>побегать


>посмотреть X один час


>CLRS


>коммит в архиватор


>порисовать всякую ерунду


да
5.5 км

>зарядка для спины


нет

6 стаканов воды и одна кружка чая
Из вредного: три мини китката и кетчуп
Трекинг времени почти полностью сделал


Завтра
- сходить на студпроект
- сделать домашку по английскому хотя бы на половину
- core java
- минимум 6 стаканов воды
- зарядка для спины
- пройтись минут 35 пешком в около-быстром темпе
.jpg120 Кб, 849x1200
PoppyFanboy !VTLpv6lgGw 229 257416
Солнце за три дня достало уже. Единственный положительный момент - закат красивый был, солнце выглядело не как яркая размытая точка, а больше было похоже на огромный тлеющий диск с чёткими краями. И небо тоже красивое: алое вперемешку с жёлтым и пастельным голубым (ну или что-то близкое к нему). Жаль, что на фотке ничего этого не видно почти.

Чего-то настроение не очень

https://youtu.be/URkomZag2yU
https://youtu.be/0QrSJV28s_Y
https://youtu.be/DIso1yQ10ks

>>257276

>поехать на пары


>6.042J


>побегать


>посмотреть X один час


>CLRS


>коммит в архиватор


>порисовать всякую ерунду


да
5.5 км

>зарядка для спины


нет

6 стаканов воды и одна кружка чая
Из вредного: три мини китката и кетчуп
Трекинг времени почти полностью сделал


Завтра
- сходить на студпроект
- сделать домашку по английскому хотя бы на половину
- core java
- минимум 6 стаканов воды
- зарядка для спины
- пройтись минут 35 пешком в около-быстром темпе
.jpg203 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 230 257566
Чёт я какой-то ерундой весь день занимался, только с утра сходил на студпроект и всё: после этого весь день клонило в сон, скорее всего, из-за того, что поспал только 5 часов. Тем не менее я почему-то решил стоически терпеть и, будучи сонным, ничего не мочь сделать. Впредь, если будет хотеться спать, то буду ложиться сразу же, вне зависимости от времени суток, иначе - я вообще никакой

Вообще забавно, что у меня в таком режиме проходит уже, наверное, третья суббота: с утра я что-то делаю, а потом хожу сонный. Это определённо какой-то проклятый день.

Съел кучу шоколада (наверное, почти плитку), пачку чипсов, 4 конфеты и пару кусков творожного кекса. Почти не пил воду, только стакана четыре вышло. Трекинг времени сделал наполовину, наверное. Зарядку для спины не делал, ногами ходил, но не очень много. Больше ничем существенно важным не занимался.

Поиграл в ремастер первой части креша и в "A Hat in Time". Последняя чего-то не очень нравится пока что, но уже сразу лучше, чем секиро.

Я не могу даже сказать, что отдохнул сегодня. Пойду спать.

Завтра
9.00
- проснуться, умыться, поесть
- побегать (попробую два раза по 8 минут бега с перерывом на минут 4-5, может быть, после этого ещё немного пробегусь)
11.30
- сделать домашнее задание по английскому (один час)
- сделать часть домашнего задания по программированию (один час)
14.00
- Core Java (полтора часа)
16.00
- если к этому времени доедет заказ, то сходить и забрать его
- CLRS (полтора часа)
- сделать зарядку для спины
19.00
- порисовать всякую ерунду
- посмотреть X полтора часа
- выбрать онлайн курс для английского
- написать план на следующий день
23.30
- пойти спать

Не менее 6 стаканов воды, не трогать кетчуп.
Вот эти все планы, конечно, такой мусор, но факт того, что они лежат тут, заставляет делать хотя бы что-то. Поэтому я продолжу шитпостить.
Надеюсь, завтра будет лучше, чем сегодня.
.jpg203 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 230 257566
Чёт я какой-то ерундой весь день занимался, только с утра сходил на студпроект и всё: после этого весь день клонило в сон, скорее всего, из-за того, что поспал только 5 часов. Тем не менее я почему-то решил стоически терпеть и, будучи сонным, ничего не мочь сделать. Впредь, если будет хотеться спать, то буду ложиться сразу же, вне зависимости от времени суток, иначе - я вообще никакой

Вообще забавно, что у меня в таком режиме проходит уже, наверное, третья суббота: с утра я что-то делаю, а потом хожу сонный. Это определённо какой-то проклятый день.

Съел кучу шоколада (наверное, почти плитку), пачку чипсов, 4 конфеты и пару кусков творожного кекса. Почти не пил воду, только стакана четыре вышло. Трекинг времени сделал наполовину, наверное. Зарядку для спины не делал, ногами ходил, но не очень много. Больше ничем существенно важным не занимался.

Поиграл в ремастер первой части креша и в "A Hat in Time". Последняя чего-то не очень нравится пока что, но уже сразу лучше, чем секиро.

Я не могу даже сказать, что отдохнул сегодня. Пойду спать.

Завтра
9.00
- проснуться, умыться, поесть
- побегать (попробую два раза по 8 минут бега с перерывом на минут 4-5, может быть, после этого ещё немного пробегусь)
11.30
- сделать домашнее задание по английскому (один час)
- сделать часть домашнего задания по программированию (один час)
14.00
- Core Java (полтора часа)
16.00
- если к этому времени доедет заказ, то сходить и забрать его
- CLRS (полтора часа)
- сделать зарядку для спины
19.00
- порисовать всякую ерунду
- посмотреть X полтора часа
- выбрать онлайн курс для английского
- написать план на следующий день
23.30
- пойти спать

Не менее 6 стаканов воды, не трогать кетчуп.
Вот эти все планы, конечно, такой мусор, но факт того, что они лежат тут, заставляет делать хотя бы что-то. Поэтому я продолжу шитпостить.
Надеюсь, завтра будет лучше, чем сегодня.
.jpg112 Кб, 838x1064
PoppyFanboy !VTLpv6lgGw 231 257937
Вчерашний день вроде начинался нормально: всё-таки сделал домашнее задание по английскому, поделал домашку по программированию, побегал с новыми таймингами (5,55 км), забрал одежду (но по размерам подошли только ветровка и чёрная рубашка; кеды и брюки надо будет вернуть; надеюсь, там не возникнет проблем с возвратом денег, потому что я уже успел перезаказать их же, но другого размера). А под вечер я чего-то очень сильно залип в игры (сейчас из-за этого хотел было даже снести их все с компа, но это был бы слишком уж детский манёвр).

Сегодня, кстати, опять в основном играл, но не так много, как вчера.

Палящее солнце сменилось дождями, ну, спасибо, ещё хуже.
Чёт всё ещё так себе настроение.

Очень-очень-очень неплохо
https://youtu.be/--t6I-zPuns
https://youtu.be/lJO0UKf-djI

7.20
- проснуться, поесть
- побегать (попробовать два раза по десять минут)
- сделать домашнее задание (1 час)
9.30
- полтора часа на X
- привести себя в порядок и поехать на пары
- по дороге читать одиннадцатый reading из 6.042J (про рекуррентные соотношения я дочитал)
21.00
- сделать зарядку для спины
- немного поиграть во что-нибудь
- порисовать всякую ерунду

+ Минимум 6 стаканов воды и трекинг времени
.jpg193 Кб, 1062x1199
yet another shitpost PoppyFanboy !VTLpv6lgGw 232 258187
Сегодня чуть-чуть лучше, но я сильно себя переоценил: проснуться удалось только двадцатью минутами позже и домашнее задание заняло немного больше времени, чем я ожидал. X, можно считать, почти не смотрел.

Побегал:
5 мин. шаг + 10 мин. бег + 4 мин. шаг + 10 мин. бег + 6 мин. шаг
Вышло 5,55 км. Второй раз по десять минут еле-еле добежал: не столько воздуха не хватало, как это обычно у меня было, сколько устали ноги. Не знаю, стоит ли в следующий раз бежать так же, возможно, попробовать серединный промежуток отдыха увеличить до пяти минут. Ну и перестать пытаться выдерживать темп, заданный в самом начале: я всё ещё ненамеренно загоняю себя.

Трекинг времени делал, но он получился какой-то не очень. Тем не менее, радует хотя бы то, что я начал его делать на какой-никакой регулярной основе.

Зарядку не делал, не рисовал, воду не выпил, 6.042J не особо читал (ну там тема какая-то скучная), но вот поиграть не забыл. Ниер автомата чего-то совсем не идёт на харде. Пролог я уже давно отчаялся проходить, поэтому скипнул его на нормальной сложности, после чего обратно вернул хард. Было более-менее проходимо до тех пор, пока я не дошёл до босса качалки пустыни. Он постоянно выносит меня либо своими неожиданными мили атаками, либо пальбой какими-то энергетическими сгустками. Всё только усугубляется тем, что после прохождения пустынной локации у меня почти не осталось лечилок, а за новыми в город идти далековато.

Ещё играл в ремастер креша. Он вроде и простой в целом, но всё равно в некоторых местах немного зависаешь. Вот как в этом моменте на десятой секунде:
https://www.twitch.tv/videos/408679852
Этот прыжок удавалось сделать только ~один раз из десяти, а без него пройти уровень на платину практически невозможно.

Пробовал, кстати, недавно запустить марио саншайн через эмулятор и чего-то оно не выглядит таким же весёлым, как на хайлайтах со стримов онли афро. Вдобавок к этому непонятно, как играть на мышке с клавиатурой: там можно переназначить аналоговый стик геймпада на мышку, но чувствительность по умолчанию стоит настолько низкая, что приходится слишком далеко дрыгать мышкой (а, где её настроить внутри эмулятора, я не нашёл). Короче, не знаю, я давно хотел поиграть в какого-нибудь тридешного марио, но, судя по всему, не судьба.

По 6.042J там начались всякие очевидные штуки, связанные с комбинаторикой, но, тем не менее, даже тут я умудрился поймать себя на том, что кое-что я понимал не до конца: раньше вообще не задумывался над тем, откуда берётся формула для биномиального коэффициента и просто помнил её без привязки ко смыслу. А тут же, оказывается, всё просто: мы берём количество всех перестановок из n элементов (n!) и делим его сначала на k!, отождествляя все перестановки, которые отличаются только порядком элементов в первых своих k позициях, а затем то же самое делим с оставшимися элементами перестановки: делим на (n - k)!. И всё, получаем число способов выбрать k элементов из n-элементного множества.

Почти допил пачку зелёного чая, поэтому сегодня сходил за новой. Взял какой-то вроде как с цедрой лимона, не знаю, ещё не пробовал. Странно, что несмотря на то, что для чая выделено миллион километров стеллажа с полками в таком количестве, что до самой верхней я не могу даже дотянуться, листового чая (так же называется чай не в пакетиках?) там практически нет. Ещё взял попробовать перечную мяту (в пакетиках, но, я думаю, можно их потрошить и сыпать содержимое в стакан). Пахнет как ментос, на вкус ещё не пробовал.

А-а, вот что я совсем забыл - трекинг того, что я ем. Не помню точно, что было утром, но вечером я уничтожил одну среднюю пачку сухариков с хреном (давно их не ел, определённо лучше, чем большинство чипсов, а если учесть их супер-низкую стоимость, то я не понимаю, почему производители чипсов всё ещё не обанкротились) и грамм 100 конфет похожих на бобы из «Гарри Поттера». Но это скорее разовое объедание всякой вредной дрянью, потому что обычно по магазинам я не хожу и, как следствие, доступа к подобной еде у меня, как правило, нет.

Надо бы купить какую-нибудь бутылку для воды или приспособить для этого пластиковую от какой-нибудь покупной воды.

Настроение всё ещё не особо. Пойду спать

Завтра
8.00
- проснуться, умыться, поесть
- съездить на студпроект
- в дороге читать 6.042J
- вернуть одежду, купить бутылку
15.00
- 1,5 часа на X, попробовать написать там тест, а то уже дедлайн
(да, я обещал себе не заниматься ничем больше одного часа, но, я думаю
полтора тоже можно)
- 1,5 часа на Core Java
- зарядка для спины
19.30
- 1.5 часа на коммит в архиватор
- порисовать какую-нибудь ерунду

минимум 6 стаканов воды (я не могу, мне лень пить воду), трекинг времени
если опять полностью не сделаю, то я лох
.jpg193 Кб, 1062x1199
yet another shitpost PoppyFanboy !VTLpv6lgGw 232 258187
Сегодня чуть-чуть лучше, но я сильно себя переоценил: проснуться удалось только двадцатью минутами позже и домашнее задание заняло немного больше времени, чем я ожидал. X, можно считать, почти не смотрел.

Побегал:
5 мин. шаг + 10 мин. бег + 4 мин. шаг + 10 мин. бег + 6 мин. шаг
Вышло 5,55 км. Второй раз по десять минут еле-еле добежал: не столько воздуха не хватало, как это обычно у меня было, сколько устали ноги. Не знаю, стоит ли в следующий раз бежать так же, возможно, попробовать серединный промежуток отдыха увеличить до пяти минут. Ну и перестать пытаться выдерживать темп, заданный в самом начале: я всё ещё ненамеренно загоняю себя.

Трекинг времени делал, но он получился какой-то не очень. Тем не менее, радует хотя бы то, что я начал его делать на какой-никакой регулярной основе.

Зарядку не делал, не рисовал, воду не выпил, 6.042J не особо читал (ну там тема какая-то скучная), но вот поиграть не забыл. Ниер автомата чего-то совсем не идёт на харде. Пролог я уже давно отчаялся проходить, поэтому скипнул его на нормальной сложности, после чего обратно вернул хард. Было более-менее проходимо до тех пор, пока я не дошёл до босса качалки пустыни. Он постоянно выносит меня либо своими неожиданными мили атаками, либо пальбой какими-то энергетическими сгустками. Всё только усугубляется тем, что после прохождения пустынной локации у меня почти не осталось лечилок, а за новыми в город идти далековато.

Ещё играл в ремастер креша. Он вроде и простой в целом, но всё равно в некоторых местах немного зависаешь. Вот как в этом моменте на десятой секунде:
https://www.twitch.tv/videos/408679852
Этот прыжок удавалось сделать только ~один раз из десяти, а без него пройти уровень на платину практически невозможно.

Пробовал, кстати, недавно запустить марио саншайн через эмулятор и чего-то оно не выглядит таким же весёлым, как на хайлайтах со стримов онли афро. Вдобавок к этому непонятно, как играть на мышке с клавиатурой: там можно переназначить аналоговый стик геймпада на мышку, но чувствительность по умолчанию стоит настолько низкая, что приходится слишком далеко дрыгать мышкой (а, где её настроить внутри эмулятора, я не нашёл). Короче, не знаю, я давно хотел поиграть в какого-нибудь тридешного марио, но, судя по всему, не судьба.

По 6.042J там начались всякие очевидные штуки, связанные с комбинаторикой, но, тем не менее, даже тут я умудрился поймать себя на том, что кое-что я понимал не до конца: раньше вообще не задумывался над тем, откуда берётся формула для биномиального коэффициента и просто помнил её без привязки ко смыслу. А тут же, оказывается, всё просто: мы берём количество всех перестановок из n элементов (n!) и делим его сначала на k!, отождествляя все перестановки, которые отличаются только порядком элементов в первых своих k позициях, а затем то же самое делим с оставшимися элементами перестановки: делим на (n - k)!. И всё, получаем число способов выбрать k элементов из n-элементного множества.

Почти допил пачку зелёного чая, поэтому сегодня сходил за новой. Взял какой-то вроде как с цедрой лимона, не знаю, ещё не пробовал. Странно, что несмотря на то, что для чая выделено миллион километров стеллажа с полками в таком количестве, что до самой верхней я не могу даже дотянуться, листового чая (так же называется чай не в пакетиках?) там практически нет. Ещё взял попробовать перечную мяту (в пакетиках, но, я думаю, можно их потрошить и сыпать содержимое в стакан). Пахнет как ментос, на вкус ещё не пробовал.

А-а, вот что я совсем забыл - трекинг того, что я ем. Не помню точно, что было утром, но вечером я уничтожил одну среднюю пачку сухариков с хреном (давно их не ел, определённо лучше, чем большинство чипсов, а если учесть их супер-низкую стоимость, то я не понимаю, почему производители чипсов всё ещё не обанкротились) и грамм 100 конфет похожих на бобы из «Гарри Поттера». Но это скорее разовое объедание всякой вредной дрянью, потому что обычно по магазинам я не хожу и, как следствие, доступа к подобной еде у меня, как правило, нет.

Надо бы купить какую-нибудь бутылку для воды или приспособить для этого пластиковую от какой-нибудь покупной воды.

Настроение всё ещё не особо. Пойду спать

Завтра
8.00
- проснуться, умыться, поесть
- съездить на студпроект
- в дороге читать 6.042J
- вернуть одежду, купить бутылку
15.00
- 1,5 часа на X, попробовать написать там тест, а то уже дедлайн
(да, я обещал себе не заниматься ничем больше одного часа, но, я думаю
полтора тоже можно)
- 1,5 часа на Core Java
- зарядка для спины
19.30
- 1.5 часа на коммит в архиватор
- порисовать какую-нибудь ерунду

минимум 6 стаканов воды (я не могу, мне лень пить воду), трекинг времени
если опять полностью не сделаю, то я лох
.gif1,1 Мб, 600x352
блин, глаза чешутся PoppyFanboy !VTLpv6lgGw 233 258421
Сходил на студпроект (z/os теперь выглядит чуть менее непонятной штукой, код программ на ассемблере пока что понимаю максимум наполовину; пока что ничего конкретного), сдал одежду. Написал тест для X, но на это ушло гораздо больше, чем полтора часа: там вроде задания были простые, но я, во-первых, от слова совсем не умею в арифметику, а, во-вторых, максимально невнимателен, так что в лучшем случае будет половина правильно решённых. Ещё сделал зарядку для спины и совсем немного почитал Core Java (просто вот: https://ideone.com/XJS2kZ и https://ideone.com/9K8jEg).

6.042J почти не читал, ерунду не рисовал, воду не пил, съел много какой-то дряни, коммит в архиватор не успел, трекинг времени опять получился не очень подробным и информативным.

На улице как-то мерзко. Пыльно и холодно.

Завтра
- сходить на все пары
- 1,5 часа clrs
- сделать домашнее задание по программированию
- побегать
- сделать зарядку для спины
- порисовать какую-нибудь ерунду (ну)
+ как обычно трекинг времени, окей, минимум 4 стакана воды и трекинг еды
+ вовремя лечь спать, а то сегодня припозднился очень неслабо

Не перестаю удивляться тому, насколько проработаны тут уровни:
https://www.twitch.tv/videos/409135562
Можно легко не заметить, что взрывающийся динамит уничтожает коробку с полезным предметом и просто пробежать мимо. При этом это всё реализовано на основе одной простой механики: если ударить врага, то он отлетает и разбивает коробки.

Я не понимаю, как это проходить.
https://www.twitch.tv/videos/409144774

Все эти песни такие одинаково блеклые, тошно слушать:
https://youtu.be/EMZOtHIL7QM
И, несмотря на то, что это аж 2008 год, подобное всё ещё существует и пользуется спросом в форме всяких монеточек, clairo (которая "I could be a pretty girl, I'll wear a skirt for you..."). На фоне всего этого безобразия я было обрадовался, когда узнал про билли эйлиш и конкретно про её альбом "Don't smile at me", но она чего-то в какой-то момент вроде как сменила курс на тот же, по которому движутся вышеупомянутые монеточка и clairo: в последних треках (на которые есть клипы (как правило клипы делают на самые удачные композиции, поэтому желания проверять, что там с остальными, особо нет): bury a friend, bad guy, when the party's over) какое-то невнятное бормотание и куча ненужной тишины. Она же умеет нормально петь, не понимаю, зачем такое делать.

К слову о том, как отсутствие звука может хорошо вписываться в музыку:
https://youtu.be/1R0AUyvNc4Y

Примерно такие же ощущения от лоу фай чилл хип хоп битс фор стади энд релаксинг 24/7 радио. Половину треков я уже тысячу раз слышал и уже невозможно их в тысячный раз переслушивать, а вторая половина состоит из какого-то однородного мусора.

Уу, ненавижу всё и всех, какой я злой и страшный.

А вот это тупо классно
https://youtu.be/Sybi0z3Eltw
.gif1,1 Мб, 600x352
блин, глаза чешутся PoppyFanboy !VTLpv6lgGw 233 258421
Сходил на студпроект (z/os теперь выглядит чуть менее непонятной штукой, код программ на ассемблере пока что понимаю максимум наполовину; пока что ничего конкретного), сдал одежду. Написал тест для X, но на это ушло гораздо больше, чем полтора часа: там вроде задания были простые, но я, во-первых, от слова совсем не умею в арифметику, а, во-вторых, максимально невнимателен, так что в лучшем случае будет половина правильно решённых. Ещё сделал зарядку для спины и совсем немного почитал Core Java (просто вот: https://ideone.com/XJS2kZ и https://ideone.com/9K8jEg).

6.042J почти не читал, ерунду не рисовал, воду не пил, съел много какой-то дряни, коммит в архиватор не успел, трекинг времени опять получился не очень подробным и информативным.

На улице как-то мерзко. Пыльно и холодно.

Завтра
- сходить на все пары
- 1,5 часа clrs
- сделать домашнее задание по программированию
- побегать
- сделать зарядку для спины
- порисовать какую-нибудь ерунду (ну)
+ как обычно трекинг времени, окей, минимум 4 стакана воды и трекинг еды
+ вовремя лечь спать, а то сегодня припозднился очень неслабо

Не перестаю удивляться тому, насколько проработаны тут уровни:
https://www.twitch.tv/videos/409135562
Можно легко не заметить, что взрывающийся динамит уничтожает коробку с полезным предметом и просто пробежать мимо. При этом это всё реализовано на основе одной простой механики: если ударить врага, то он отлетает и разбивает коробки.

Я не понимаю, как это проходить.
https://www.twitch.tv/videos/409144774

Все эти песни такие одинаково блеклые, тошно слушать:
https://youtu.be/EMZOtHIL7QM
И, несмотря на то, что это аж 2008 год, подобное всё ещё существует и пользуется спросом в форме всяких монеточек, clairo (которая "I could be a pretty girl, I'll wear a skirt for you..."). На фоне всего этого безобразия я было обрадовался, когда узнал про билли эйлиш и конкретно про её альбом "Don't smile at me", но она чего-то в какой-то момент вроде как сменила курс на тот же, по которому движутся вышеупомянутые монеточка и clairo: в последних треках (на которые есть клипы (как правило клипы делают на самые удачные композиции, поэтому желания проверять, что там с остальными, особо нет): bury a friend, bad guy, when the party's over) какое-то невнятное бормотание и куча ненужной тишины. Она же умеет нормально петь, не понимаю, зачем такое делать.

К слову о том, как отсутствие звука может хорошо вписываться в музыку:
https://youtu.be/1R0AUyvNc4Y

Примерно такие же ощущения от лоу фай чилл хип хоп битс фор стади энд релаксинг 24/7 радио. Половину треков я уже тысячу раз слышал и уже невозможно их в тысячный раз переслушивать, а вторая половина состоит из какого-то однородного мусора.

Уу, ненавижу всё и всех, какой я злой и страшный.

А вот это тупо классно
https://youtu.be/Sybi0z3Eltw
PoppyFanboy !VTLpv6lgGw 234 258661
Я с каждым днём по ощущениям становлюсь только ещё более злой и раздражительной мразью. Не знаю, что с этим делать.

>>258421

>сходить на все пары


>сделать зарядку для спины


>минимум 4 стакана воды


Да

>1,5 часа clrs


Я немного поменял вычисления индексов в произведении и сложении матриц (чтобы там не было умножений) и получилось нечто нечитабельное и не факт, что рабочее. Сразу же после коммита заметил, что я там в одном месте вообще что-то тупое написал, короче, надо будет либо переделать, либо вернуть, как было.

>побегать


Сегодня как-то так получилось, что я с самого начала побежал относительно короткими, но частыми шажками. На удивление довольно легко преодолел 10 минут бега (даже успел приуныть в процессе от однообразия проплывающих мимо меня пейзажей) и, почувствовав силу, решил добить себя одиннадцатью минутами бега после 4-минутного перерыва на быстрый шаг. Тут я, конечно, довольно сильно вымотался, но всё равно не так сильно, как в прошлый раз, несмотря на то, что пробежал-прошёл в этот раз за те же 35 минут даже больше (5.68 км).

>порисовать какую-нибудь ерунду


Да, но очень-очень мало. Но хотя бы так

>сделать домашнее задание по программированию


>вовремя лечь спать


>трекинг времени и еды


Нет. На простой трекинг вообще почти полностью забил.

Может быть, начать слушать какой-нибудь слоукор или шугейз? Вот эти вроде неплохие:
https://youtu.be/6ey4yAgLZlw
https://youtu.be/ettEOTJ7X_E
https://youtu.be/gmcVvQjPMUU

. . .

Завтра
- сходить на пары
- 1.5 часа Core Java
- заполнить анкету для Y
- зарядка для спины
- порисовать какую-нибудь ерунду
- поиграть во что-нибудь
- прибраться (комната медленно, но верно превращается в свалку)
+ минимум 5 стаканов воды
+ трекинг времени и еды
+ лечь спать вовремя

Настроение не очень, куча вещей беспричинно раздражают. За окном ещё более мерзко, чем вчера, и ко всему прочему ещё и снег выпал. При этом я не могу толком объяснить, что меня не устраивает: вроде, как и во все предыдущие месяцы, была такая же пасмурная и холодная погода. Почему-то постоянно кажется, что на улице у меня лицо и руки мгновенно покрываются какой-то грязью и пылью.
Я не знаю
PoppyFanboy !VTLpv6lgGw 234 258661
Я с каждым днём по ощущениям становлюсь только ещё более злой и раздражительной мразью. Не знаю, что с этим делать.

>>258421

>сходить на все пары


>сделать зарядку для спины


>минимум 4 стакана воды


Да

>1,5 часа clrs


Я немного поменял вычисления индексов в произведении и сложении матриц (чтобы там не было умножений) и получилось нечто нечитабельное и не факт, что рабочее. Сразу же после коммита заметил, что я там в одном месте вообще что-то тупое написал, короче, надо будет либо переделать, либо вернуть, как было.

>побегать


Сегодня как-то так получилось, что я с самого начала побежал относительно короткими, но частыми шажками. На удивление довольно легко преодолел 10 минут бега (даже успел приуныть в процессе от однообразия проплывающих мимо меня пейзажей) и, почувствовав силу, решил добить себя одиннадцатью минутами бега после 4-минутного перерыва на быстрый шаг. Тут я, конечно, довольно сильно вымотался, но всё равно не так сильно, как в прошлый раз, несмотря на то, что пробежал-прошёл в этот раз за те же 35 минут даже больше (5.68 км).

>порисовать какую-нибудь ерунду


Да, но очень-очень мало. Но хотя бы так

>сделать домашнее задание по программированию


>вовремя лечь спать


>трекинг времени и еды


Нет. На простой трекинг вообще почти полностью забил.

Может быть, начать слушать какой-нибудь слоукор или шугейз? Вот эти вроде неплохие:
https://youtu.be/6ey4yAgLZlw
https://youtu.be/ettEOTJ7X_E
https://youtu.be/gmcVvQjPMUU

. . .

Завтра
- сходить на пары
- 1.5 часа Core Java
- заполнить анкету для Y
- зарядка для спины
- порисовать какую-нибудь ерунду
- поиграть во что-нибудь
- прибраться (комната медленно, но верно превращается в свалку)
+ минимум 5 стаканов воды
+ трекинг времени и еды
+ лечь спать вовремя

Настроение не очень, куча вещей беспричинно раздражают. За окном ещё более мерзко, чем вчера, и ко всему прочему ещё и снег выпал. При этом я не могу толком объяснить, что меня не устраивает: вроде, как и во все предыдущие месяцы, была такая же пасмурная и холодная погода. Почему-то постоянно кажется, что на улице у меня лицо и руки мгновенно покрываются какой-то грязью и пылью.
Я не знаю
cca0540f2c548b66143280740a5bede1+.jpg957 Кб, 1500x1063
Рируру !!gYmpHned/k 235 258775
>>258661

>вернуть, как было


Зыс. Переделывай назад.
https://ideone.com/VTqsEw
Прости, пожалуйста. Я плохая девочка, сэмпай, накажите меняwww. В следующий раз я сначала напишу бенчмарк, потом приду с охуительными предложениями.

Multiply ~A.I. Ver.~ stands for “absolute index” version.
Multiply ~G.S. Ver.~ stands for “get/set” version.
Я вынес аллокацию результата из центральных подпрограмм умножения, чтобы не учитывать её в измерениях.
PoppyFanboy !VTLpv6lgGw 236 259053
>>258775
Красибо

Ehh, настроение продолжает скатываться по наклонной, чувствую себя ещё большим тупым и раздражительным слизнем, чем обычно. Сегодня чёт совсем нехорошо было, но сейчас посмотрел мультики и вроде получше стало. В общем, не знаю.

За последние три дня ещё чео-то спал в среднем только по пять с половиной часов. Неприятно.

Вчера был на парах и выполнил всё из ежедневных задач (зарядка для спины, рисование ерунды, пять стаканов воды и трекинг времени), но по списку успел только прибраться и почитать Core Java.

Сегодня, можно считать, ничего не делал: сходил на студпроект, побегал (5,72 км, применил орлиный глаз и попытался скопировать технику бега, которую видел недавно: раньше я просто выносил ногу вперёд, стараясь особо её не поднимать, и приземлялся примерно на середину стопы, а теперь попытался бежать так, как если бы я прокручивал под собой землю, сам при этом, оставаясь на месте; поначалу было очень непривычно, и я подумал, что не смогу даже добежать, но вроде как это не отнимает особо сил по сравнению с тем, как я бегал обычно; в этот раз, кстати, 5 шага + 6 бега + 3 шага + 16 бега + 5 шага; думаю, можно уже чуть более смело подбираться к 25 минутам бега), сделал зарядку для спины и порисовал ерунду. В остальное время играл в ремастер креша и-и не помню, что ещё, очень много залипал.

Трекинг времени и еды сделал только наполовину, пять стаканов выпил.
Внутри пакетиков с перечной мятой оказалось какая-то жуткая дрянь, короче, лучше не вксрывать эту тему

Завтра
12.30
- проснуться, умыться
- сделать домашнее задание по английскому (2 часа)
- выбрать онлайн-курс для английского на английском
- заполнить анкету для Y
16.00
- 1,5 часа на CLRS
- 1,5 часа на коммит в архиватор
20.00
- сделать зарядку для спины
- порисовать всякую ерунду
- почитать что-нибудь 1 час
0.00
- составить план на следующий день
- лечь спать
+ 5 стаканов воды, трекинг времени и еды

https://youtu.be/sIMK-O-f1ko
https://youtu.be/-GrBkJIuKSk
https://youtu.be/-CZCKP-H4C8
PoppyFanboy !VTLpv6lgGw 236 259053
>>258775
Красибо

Ehh, настроение продолжает скатываться по наклонной, чувствую себя ещё большим тупым и раздражительным слизнем, чем обычно. Сегодня чёт совсем нехорошо было, но сейчас посмотрел мультики и вроде получше стало. В общем, не знаю.

За последние три дня ещё чео-то спал в среднем только по пять с половиной часов. Неприятно.

Вчера был на парах и выполнил всё из ежедневных задач (зарядка для спины, рисование ерунды, пять стаканов воды и трекинг времени), но по списку успел только прибраться и почитать Core Java.

Сегодня, можно считать, ничего не делал: сходил на студпроект, побегал (5,72 км, применил орлиный глаз и попытался скопировать технику бега, которую видел недавно: раньше я просто выносил ногу вперёд, стараясь особо её не поднимать, и приземлялся примерно на середину стопы, а теперь попытался бежать так, как если бы я прокручивал под собой землю, сам при этом, оставаясь на месте; поначалу было очень непривычно, и я подумал, что не смогу даже добежать, но вроде как это не отнимает особо сил по сравнению с тем, как я бегал обычно; в этот раз, кстати, 5 шага + 6 бега + 3 шага + 16 бега + 5 шага; думаю, можно уже чуть более смело подбираться к 25 минутам бега), сделал зарядку для спины и порисовал ерунду. В остальное время играл в ремастер креша и-и не помню, что ещё, очень много залипал.

Трекинг времени и еды сделал только наполовину, пять стаканов выпил.
Внутри пакетиков с перечной мятой оказалось какая-то жуткая дрянь, короче, лучше не вксрывать эту тему

Завтра
12.30
- проснуться, умыться
- сделать домашнее задание по английскому (2 часа)
- выбрать онлайн-курс для английского на английском
- заполнить анкету для Y
16.00
- 1,5 часа на CLRS
- 1,5 часа на коммит в архиватор
20.00
- сделать зарядку для спины
- порисовать всякую ерунду
- почитать что-нибудь 1 час
0.00
- составить план на следующий день
- лечь спать
+ 5 стаканов воды, трекинг времени и еды

https://youtu.be/sIMK-O-f1ko
https://youtu.be/-GrBkJIuKSk
https://youtu.be/-CZCKP-H4C8
.jpg71 Кб, 838x1199
all over again vol. 2 PoppyFanboy !VTLpv6lgGw 237 259236
Чего-то я совсем плох. Поспать до двенадцати мне не дали: разбудили в десять, и после этого я уже не смог заснуть. Вроде как заболел, температуры нет, но ощущения, как будто все тридцать восемь, голова тяжёлая, ноги не ходят.

Нытьё

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

Ещё бездумно листал интернет, играл в супер мит боя, впихивал в себя кучу еды. Сейчас очень хочется спать.

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

>Eat a live frog first thing in the morning and nothing worse will happen to you the rest of the day


Ну вот как это должно работать? Я ложился спать с плохим настроем, представляя, насколько поганым будет завтра утро и к нему прилагающаяся лягушка. Я проснулся с плохим настроем и потом весь день ковырял ножом эту лягушку, так и не отрезав ни кусочка. Потому что я не хочу её есть. И даже если бы съел, чего мне радоваться, если завтра с утра мне придётся запихивать в рот новую лягушку? В горле застрял кусочек лапки, настроение испорчено на весь день.

С другой стороны, если начать день с приятных вещей, то, во-первых, ты не испортишь себе настрой на весь оставшийся день, во-вторых, если оставить неприятные вещи на вечер, то у тебя будет неизбежный дедлайн: день подходит к концу и уже скоро пора спать. Если же делать неприятные вещи с утра, то это может сильно затянуться из-за того, что нет чётких рамок, ограничивающих тебя во времени. Но тут тоже не всё так здорово: к вечеру может расхотеться делать вообще что-либо, отложить ле гушку на потом и просто пойти спать. Тем не менее, я думаю, раз уж так вышло, то не очень-то и важная это была ле гушка.

А вообще у меня есть подозрение, что все эти конченые тайм-мдмеженент штуки как правило используют люди, которые бы и без них нормально справились, а потом рекламируют их то ли как какую-то мощную пилюлю.

Ссука, ну за что, как так. Единственный скилл, который у меня есть, - это мотать время вперёд.

Завтра
7.00
- проснуться, умыться, поесть
- побегать (R)
- всё же подготовиться к английскому (50 минут)
10.30
- заполнить анкету для Y
- немного CLRS
- съездить на пары
19.00
- сделать зарядку для спины (R)
- сделать коммит в архиватор
- порисовать ерунду (R)
- почитать что-нибудь
0.00
- составить план на следующий день (R)
- пойти спать вовремя (R)
(R) 5 стаканов воды, трекинг времени и еды
+ найти время поиграть во что-нибудь или посмотреть мультики

(R) - повторяющиеся действия, которые должны войти в привычку/оставаться привычкой

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

Я не понимаю, ну, вот как, зачем, мне тошно от всего, я бы сейчас в идеале посидел дома месяц-другой, но нет. Надеюсь, хоть летом получится. Правда, не факт, что я просто вот так не сгнию. Опять ищу оправдания для своей никчёмности. Я ххй знает, мне мерзко от себя: вот сейчас набросал за секунд двадцать набросал семь пунктов, начинающихся со слова "перестать", и каждый из них - это отдельный гигантский мой недостаток, который было бы очень кстати как-то исправить, но я это вообще никак не могу контролировать

Зачем я вообще это пишу, лучше бы шёл и просто взял и всё сделал, а потом ещё раз взял и всё сделал, и так по кругу. Ну я просто всё ещё не понимаю, как жить-то вообще ну вообще короче ну вообще

фу реп, это не музыка, нельзя обманываться
https://youtu.be/C0-8dwIjP9I
https://youtu.be/qGQZ7BOO_n0
https://youtu.be/2nSvaqKcwSc
https://youtu.be/FgmtwuMKawA

Это было здорово в первый раз (Pemex), но зачем во второй раз то же самое
https://youtu.be/_ZoWFyU08ms
.jpg71 Кб, 838x1199
all over again vol. 2 PoppyFanboy !VTLpv6lgGw 237 259236
Чего-то я совсем плох. Поспать до двенадцати мне не дали: разбудили в десять, и после этого я уже не смог заснуть. Вроде как заболел, температуры нет, но ощущения, как будто все тридцать восемь, голова тяжёлая, ноги не ходят.

Нытьё

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

Ещё бездумно листал интернет, играл в супер мит боя, впихивал в себя кучу еды. Сейчас очень хочется спать.

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

>Eat a live frog first thing in the morning and nothing worse will happen to you the rest of the day


Ну вот как это должно работать? Я ложился спать с плохим настроем, представляя, насколько поганым будет завтра утро и к нему прилагающаяся лягушка. Я проснулся с плохим настроем и потом весь день ковырял ножом эту лягушку, так и не отрезав ни кусочка. Потому что я не хочу её есть. И даже если бы съел, чего мне радоваться, если завтра с утра мне придётся запихивать в рот новую лягушку? В горле застрял кусочек лапки, настроение испорчено на весь день.

С другой стороны, если начать день с приятных вещей, то, во-первых, ты не испортишь себе настрой на весь оставшийся день, во-вторых, если оставить неприятные вещи на вечер, то у тебя будет неизбежный дедлайн: день подходит к концу и уже скоро пора спать. Если же делать неприятные вещи с утра, то это может сильно затянуться из-за того, что нет чётких рамок, ограничивающих тебя во времени. Но тут тоже не всё так здорово: к вечеру может расхотеться делать вообще что-либо, отложить ле гушку на потом и просто пойти спать. Тем не менее, я думаю, раз уж так вышло, то не очень-то и важная это была ле гушка.

А вообще у меня есть подозрение, что все эти конченые тайм-мдмеженент штуки как правило используют люди, которые бы и без них нормально справились, а потом рекламируют их то ли как какую-то мощную пилюлю.

Ссука, ну за что, как так. Единственный скилл, который у меня есть, - это мотать время вперёд.

Завтра
7.00
- проснуться, умыться, поесть
- побегать (R)
- всё же подготовиться к английскому (50 минут)
10.30
- заполнить анкету для Y
- немного CLRS
- съездить на пары
19.00
- сделать зарядку для спины (R)
- сделать коммит в архиватор
- порисовать ерунду (R)
- почитать что-нибудь
0.00
- составить план на следующий день (R)
- пойти спать вовремя (R)
(R) 5 стаканов воды, трекинг времени и еды
+ найти время поиграть во что-нибудь или посмотреть мультики

(R) - повторяющиеся действия, которые должны войти в привычку/оставаться привычкой

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

Я не понимаю, ну, вот как, зачем, мне тошно от всего, я бы сейчас в идеале посидел дома месяц-другой, но нет. Надеюсь, хоть летом получится. Правда, не факт, что я просто вот так не сгнию. Опять ищу оправдания для своей никчёмности. Я ххй знает, мне мерзко от себя: вот сейчас набросал за секунд двадцать набросал семь пунктов, начинающихся со слова "перестать", и каждый из них - это отдельный гигантский мой недостаток, который было бы очень кстати как-то исправить, но я это вообще никак не могу контролировать

Зачем я вообще это пишу, лучше бы шёл и просто взял и всё сделал, а потом ещё раз взял и всё сделал, и так по кругу. Ну я просто всё ещё не понимаю, как жить-то вообще ну вообще короче ну вообще

фу реп, это не музыка, нельзя обманываться
https://youtu.be/C0-8dwIjP9I
https://youtu.be/qGQZ7BOO_n0
https://youtu.be/2nSvaqKcwSc
https://youtu.be/FgmtwuMKawA

Это было здорово в первый раз (Pemex), но зачем во второй раз то же самое
https://youtu.be/_ZoWFyU08ms
да блин PoppyFanboy !VTLpv6lgGw 238 259422
Проснулся в десять вроде, не стал над собой издеваться (и это было правильным решением). Что-то делал, что-то не сделал. Вроде выпил пять стаканов воды/чая, сделал трекинг времени на две трети, бегал, зарядку для спины сделал, штуку по английскому подготовил и сдал, всякую ерунду вечером порисовал, но совсем немного, CLRS не читал, но что-то тыкал по клавишам. Больше ничего не успел.

Когда бегал, немного обсчитался (не осилил сложение девяти и трёх: получил одиннадцать) и бегал больше, чем планировал (5 мин. шага + 4 бега + 2 шага + 19 бега + 5 шага), очень устал. Бежать с новой техникой, о которой я упоминал, вообще неудобно, периодически начинаю бежать по-старому. Возможно, я что-то не так делаю.

Настроение никакое. На улице вроде немного тепло, но всё так же мерзко.

Чёт я как-то затянул с реализацией Штрассена, получается что-то некрасивое пока что, даже в мастер страшно коммитить такое.

Завтра
9.00
- проснуться, умыться, поесть
- 1,5 часа на коммит в архиватор
- съездить на пары
- по дороге почитать что-нибудь
18.40
- сделать зарядку для спины (R)
- 1,5 часа на CLRS
- порисовать какую-нибудь ерунду (R)
- Core Java
0.00
- составить план на следующий день (R)
- пойти спать (R)
(R) 5 стаканов воды, трекинг времени и еды

https://youtu.be/BwUdO2B9x1U
блин PoppyFanboy !VTLpv6lgGw 239 259587
Пока подготавливал более-менее нормальный класс для матриц, чтобы реализовать Штрассена, вдруг понял, что матрицу можно разбить на блоки только если у неё показатели длины и ширины - чётные числа, то есть в идеале для Штрассена нужно, чтобы изначально обе матрицы были квадратными и имели размерности равные какой-то степени двойки. Вот тут и встаёт вопрос: как быстро найти следующую степень двойки, чтобы добить изначальные матрицы нулевыми строками и столбцами?

Первый и очевидный вариант: ceil <| log(n), но, во-первых, java.lang.Math умеет только в натуральные логарифмы, а вычисления вроде ceil <| (ln(n) / ln(2)) имеют огромную погрешность, и, во-вторых, это вроде как довольно медленно.

А вот вариант получше:

> n--;


> n |= n >>> 1;


> n |= n >>> 2;


> n |= n >>> 4;


> n |= n >>> 8;


> n |= n >>> 16;


> n++;


> return n;


Здесь сначала делается -1, чтобы захватить спешл случай 0...010...0, а затем все биты, стоящие после самой значимой единицы, обращаются в единицы. И в конце делается +1, чтобы получить степень двойки.

А вообще это вроде как поддерживается на уровне процессора
https://en.wikipedia.org/wiki/Find_first_set

И оттуда же вот такая ещё типа binary search реализация:

> unsigned n = 0;


> if ((x & 0xFFFF0000) == 0) {n = 16; x <<< 16;}


> if ((x & 0xFF000000) == 0) {n += 8; x <<< 8;}


> if ((x & 0xF0000000) == 0) {n += 4; x <<< 4;}


> if ((x & 0xC0000000) == 0) {n += 2; x <<< 2;}


> if ((x & 0x80000000) == 0) {n += 1;}


> return n;



Только вот не знаю, насколько это всё понадобится в Штрассене: если изначально ширина или длина матрицы m: 2^31 < m < 2^32, то её уже не округлить до следующей степени двойки. И вот сейчас я понял, что чёт застрял немного: я думал, что можно было бы adjust'ить размеры подматриц (чтобы были чётными и можно было бы спокойно делить на два) на каждом рекурсивном вызове функции умножения, но сейчас понял, что у меня так не получится сделать вообще никак, если я не хочу каждый раз выделять память для подматриц, а вычислять всё на основе двух изначальных.

Судя по всему, случай с 2^31 < m < 2^32 надо будет обрабатывать как-то отдельно (добить m до чётного числа, разбить на 4 матрицы и скопировать их значения в 4 отдельные матрицы, добавив строк и столбцов, чтобы были степени двоек?)

Что-то там понаписал, закоммитил, но там пока что ерунда. Наверное, не стоит писать кучу всего, а потом коммитить мало того, что недоделанное и неработающее, так ещё и с ошибками. В последний момент ещё пришла мысль, что стоит сделать класс для подматриц, которые бы цеплялись к объектам-матрицам и хранили бы в себе левый верхний индекс и размеры матрицы: можно даже, наверное, унаследовать их от класса матриц и переопределить там методы с операциями над матрицами. Выглядит вроде неплохо, но, как обычно, когда начну делать, сразу куча нюансов всплывут.

‌ ⃰ ‌ ⃰ ‌ ⃰

В архиватор коммит не сделал, но что-то тыкал, чёт вязко. Порисовал всякую ерунду, 5 стаканов воды выпил, зарядку для спины сделал. Немного играл в супер мит боя (надо завязывать с этим, даже если я допройду оставшиеся несколько уровней в Cotton Alley и соберу оставшиеся несколько пластырей, то всё равно останется прохождение всех chapter'ов без смертей, а это надолго затянет, так что лучше дропнуть заранее). Больше почти ничего не делал. Сейчас немного ещё поразбираюсь с штуками, связанными со студпроектом и пойду спать.

эээ, чёт не знаю, не знаю

Не хочу писать план на завтра, но хотя бы основные моменты надо отметить, иначе вообще ничего не буду делать:
- сходить на студпроект
- побегать
- зарядка для спины
- порисовать ерунду
- CLRS
+ 5 стаканов воды, треккинг времени и еды

https://youtu.be/XfR9iY5y94s
Вроде уже слышал эту песню, но намеренно не переслушивал
блин PoppyFanboy !VTLpv6lgGw 239 259587
Пока подготавливал более-менее нормальный класс для матриц, чтобы реализовать Штрассена, вдруг понял, что матрицу можно разбить на блоки только если у неё показатели длины и ширины - чётные числа, то есть в идеале для Штрассена нужно, чтобы изначально обе матрицы были квадратными и имели размерности равные какой-то степени двойки. Вот тут и встаёт вопрос: как быстро найти следующую степень двойки, чтобы добить изначальные матрицы нулевыми строками и столбцами?

Первый и очевидный вариант: ceil <| log(n), но, во-первых, java.lang.Math умеет только в натуральные логарифмы, а вычисления вроде ceil <| (ln(n) / ln(2)) имеют огромную погрешность, и, во-вторых, это вроде как довольно медленно.

А вот вариант получше:

> n--;


> n |= n >>> 1;


> n |= n >>> 2;


> n |= n >>> 4;


> n |= n >>> 8;


> n |= n >>> 16;


> n++;


> return n;


Здесь сначала делается -1, чтобы захватить спешл случай 0...010...0, а затем все биты, стоящие после самой значимой единицы, обращаются в единицы. И в конце делается +1, чтобы получить степень двойки.

А вообще это вроде как поддерживается на уровне процессора
https://en.wikipedia.org/wiki/Find_first_set

И оттуда же вот такая ещё типа binary search реализация:

> unsigned n = 0;


> if ((x & 0xFFFF0000) == 0) {n = 16; x <<< 16;}


> if ((x & 0xFF000000) == 0) {n += 8; x <<< 8;}


> if ((x & 0xF0000000) == 0) {n += 4; x <<< 4;}


> if ((x & 0xC0000000) == 0) {n += 2; x <<< 2;}


> if ((x & 0x80000000) == 0) {n += 1;}


> return n;



Только вот не знаю, насколько это всё понадобится в Штрассене: если изначально ширина или длина матрицы m: 2^31 < m < 2^32, то её уже не округлить до следующей степени двойки. И вот сейчас я понял, что чёт застрял немного: я думал, что можно было бы adjust'ить размеры подматриц (чтобы были чётными и можно было бы спокойно делить на два) на каждом рекурсивном вызове функции умножения, но сейчас понял, что у меня так не получится сделать вообще никак, если я не хочу каждый раз выделять память для подматриц, а вычислять всё на основе двух изначальных.

Судя по всему, случай с 2^31 < m < 2^32 надо будет обрабатывать как-то отдельно (добить m до чётного числа, разбить на 4 матрицы и скопировать их значения в 4 отдельные матрицы, добавив строк и столбцов, чтобы были степени двоек?)

Что-то там понаписал, закоммитил, но там пока что ерунда. Наверное, не стоит писать кучу всего, а потом коммитить мало того, что недоделанное и неработающее, так ещё и с ошибками. В последний момент ещё пришла мысль, что стоит сделать класс для подматриц, которые бы цеплялись к объектам-матрицам и хранили бы в себе левый верхний индекс и размеры матрицы: можно даже, наверное, унаследовать их от класса матриц и переопределить там методы с операциями над матрицами. Выглядит вроде неплохо, но, как обычно, когда начну делать, сразу куча нюансов всплывут.

‌ ⃰ ‌ ⃰ ‌ ⃰

В архиватор коммит не сделал, но что-то тыкал, чёт вязко. Порисовал всякую ерунду, 5 стаканов воды выпил, зарядку для спины сделал. Немного играл в супер мит боя (надо завязывать с этим, даже если я допройду оставшиеся несколько уровней в Cotton Alley и соберу оставшиеся несколько пластырей, то всё равно останется прохождение всех chapter'ов без смертей, а это надолго затянет, так что лучше дропнуть заранее). Больше почти ничего не делал. Сейчас немного ещё поразбираюсь с штуками, связанными со студпроектом и пойду спать.

эээ, чёт не знаю, не знаю

Не хочу писать план на завтра, но хотя бы основные моменты надо отметить, иначе вообще ничего не буду делать:
- сходить на студпроект
- побегать
- зарядка для спины
- порисовать ерунду
- CLRS
+ 5 стаканов воды, треккинг времени и еды

https://youtu.be/XfR9iY5y94s
Вроде уже слышал эту песню, но намеренно не переслушивал
.jpg364 Кб, 1200x1170
PoppyFanboy !VTLpv6lgGw 240 259795
Доделал Штрассена до состояния оно работает, вроде не так плохо выглядит, но всё равно отстой, хотя бы потому что я ещё не обрабатывал случаи с большими матрицами. Наследовать класс для подматрицы от класса для матриц, конечно, не стоит: всё же подматрица у меня - это просто объект-wrapper для матрицы.

Побегал: 5.97 км = 5 мин. шага + 4 бега + 2 шага + 19 бега + 5 шага. Очень неудачно: устал и сильно выдохся из-за того, что изначально взял слишком быстрый темп для себя. Придурок. Надо будет всё же нормально посмотреть, как правильно бегать, а то у меня чего-то вообще не получается.

Сходил на студпроект, порисовал всякую ерунду, не пропустил зарядку для спины. Трекинг времени и еды не делал, воду не пил (ну, там стакана два с половиной), день помню только кусками из-за того, что хотелось спать, но не мог заснуть.

Да ну блин, ну это какая-то ерунда, тупой день, сказать одновременно нечего, да и вообще не хочется ничего говорить.

Завтра
- сделать домашнее задание по программированию
- почитать 6.042J
- Core Java
- порисовать всякую ерунду
- зарядка для спины
+ 5 стаканов воды, трекинг времени и еды
D3T3M8gWwAEjje2.jpg77 Кб, 720x878
Рируру !!gYmpHned/k 241 259826
>>259795
https://ideone.com/6a1Oau
O(N3) НА МЯГКИХ ШИНАХ, ЗА НИМ ШТРАССЕН НА БОЛЕЕ ЖЁСТКИХ, ОБГОН С ОТКРЫТЫМ КРЫЛОМ, ОПАСНЫЙ ПОВОРОТ, ЛИДЕР СМЕНЯЕТСЯ, СОПЕРНИКИ УХОДЯТ НА ПИТ-СТОПЫ.

Варианты:
— STRAIGHT ver. — самая дубовая, референсная реализация без приведения к 2n.
— VIEW ver. — версия на аналогах твоих Submatrix, но всё ещё без приведения к 2n.
— POW2 UNROLLED ver. — версия с приведением к 2n и расписанными действиями (в попытке большего контроля над временными матрицами).
— POW2 VIEW ver. — версия с приведением к 2n и Submatrix, самый близкий аналог твоей.
Результаты на TRIAL 1 of 2 — мусорные.

У меня получился какой-то бред, но парочку выводов сделать можно.

Во-первых, АДЖУСТ размеров до чётных на каждом уровне рекурсии работает очень даже хорошо. Его отсутствие не сильно спасает от временных матриц, а в худшем (вроде бы) для него случае — когда размер стороны имеет вид 2N + 1 и его добивание нулём и деление на 2 продолжает до упора выдавать нечётные размеры — реализация с округлением вверх до степени двойки сделает нечто ещё более ужасное. Ещё можно посмотреть на это с такой стороны: АДЖУСТЫ добавляют максимум O(log N) нулевых строчек, а приведение к 2n — потенциально O(N).

У меня даже была версия на специальных Submatrix'ах, которые могли «бэкаться» фрагментом физической матрицы меньшего размера, полагая элементы, не покрытые физическими, нулями при чтении, или игнорируя их при записи (Submatrix(m, x=1, y=1, w=5, h=4, wPhys=3, hPhys=2) — матрица, которая получается вырезанием из m 3×2-прямоугольника в точке (1, 1) и добиванием его нулями до 5×4), но она была сложной и работала ещё медленнее остальных, поэтому убрал.

Во-вторых, поскольку данные, используемые N-м уровнем рекурсии, вычисляются строго на N+1-м, есть подозрение, что можно сделать супер-быструю (или нет, или нельзя) реализацию с константным количеством аллокаций по тому же принципу, что в сортировке слиянием (я описывал это в >>117525): предвыделить два контекста для всего временного хлама (матриц M1 ... M7 etc.), и между уровнями рекурсии менять их ролями. Правда, у меня взрывается мозг, когда я пытаюсь подумать об этом более обстоятельно, т. к. нужно будет как-то хитро отслеживать координаты «временной области» каждого рекурсивного вызова, чтобы все вызовы N-го уровня писали каждый в свой участок временной матрицы и не мешали друг другу — в сортировке очевидно, как это сделать, а здесь не очень.
D3T3M8gWwAEjje2.jpg77 Кб, 720x878
Рируру !!gYmpHned/k 241 259826
>>259795
https://ideone.com/6a1Oau
O(N3) НА МЯГКИХ ШИНАХ, ЗА НИМ ШТРАССЕН НА БОЛЕЕ ЖЁСТКИХ, ОБГОН С ОТКРЫТЫМ КРЫЛОМ, ОПАСНЫЙ ПОВОРОТ, ЛИДЕР СМЕНЯЕТСЯ, СОПЕРНИКИ УХОДЯТ НА ПИТ-СТОПЫ.

Варианты:
— STRAIGHT ver. — самая дубовая, референсная реализация без приведения к 2n.
— VIEW ver. — версия на аналогах твоих Submatrix, но всё ещё без приведения к 2n.
— POW2 UNROLLED ver. — версия с приведением к 2n и расписанными действиями (в попытке большего контроля над временными матрицами).
— POW2 VIEW ver. — версия с приведением к 2n и Submatrix, самый близкий аналог твоей.
Результаты на TRIAL 1 of 2 — мусорные.

У меня получился какой-то бред, но парочку выводов сделать можно.

Во-первых, АДЖУСТ размеров до чётных на каждом уровне рекурсии работает очень даже хорошо. Его отсутствие не сильно спасает от временных матриц, а в худшем (вроде бы) для него случае — когда размер стороны имеет вид 2N + 1 и его добивание нулём и деление на 2 продолжает до упора выдавать нечётные размеры — реализация с округлением вверх до степени двойки сделает нечто ещё более ужасное. Ещё можно посмотреть на это с такой стороны: АДЖУСТЫ добавляют максимум O(log N) нулевых строчек, а приведение к 2n — потенциально O(N).

У меня даже была версия на специальных Submatrix'ах, которые могли «бэкаться» фрагментом физической матрицы меньшего размера, полагая элементы, не покрытые физическими, нулями при чтении, или игнорируя их при записи (Submatrix(m, x=1, y=1, w=5, h=4, wPhys=3, hPhys=2) — матрица, которая получается вырезанием из m 3×2-прямоугольника в точке (1, 1) и добиванием его нулями до 5×4), но она была сложной и работала ещё медленнее остальных, поэтому убрал.

Во-вторых, поскольку данные, используемые N-м уровнем рекурсии, вычисляются строго на N+1-м, есть подозрение, что можно сделать супер-быструю (или нет, или нельзя) реализацию с константным количеством аллокаций по тому же принципу, что в сортировке слиянием (я описывал это в >>117525): предвыделить два контекста для всего временного хлама (матриц M1 ... M7 etc.), и между уровнями рекурсии менять их ролями. Правда, у меня взрывается мозг, когда я пытаюсь подумать об этом более обстоятельно, т. к. нужно будет как-то хитро отслеживать координаты «временной области» каждого рекурсивного вызова, чтобы все вызовы N-го уровня писали каждый в свой участок временной матрицы и не мешали друг другу — в сортировке очевидно, как это сделать, а здесь не очень.
PoppyFanboy !VTLpv6lgGw 242 259855
>>259826
Жесть ты скоростной нелегальный гонщик

>АДЖУСТ размеров до чётных на каждом уровне рекурсии


Я изначально думал, что один большой аллок будет быстрее, чем куча маленьких, но упорно не хотел замечать, что даже если я вообще везде, где только возможно, пользуюсь MatrixView, то у меня всё равно остаётся доминирующая куча из M1, ..., M7.

>когда размер стороны имеет вид 2N + 1, реализация с округлением вверх до степени двойки сделает нечто ужасное


Да, ты прав, это выглядит не очень. В общем, я у тебя, наверное, выкраду `strassenPaddedBlockView`.

>специальных Submatrix'ах, которые могли «бэкаться» фрагментом физической матрицы меньшего размера, полагая элементы, не покрытые физическими, нулями при чтении, или игнорируя их при записи


Хмм, это тоже интересная идея.

>реализацию с константным количеством аллокаций по тому же принципу, что в сортировке слиянием


Крутая штука, не видел раньше такого. А в Штрассене это да, чёт сложно получается.

>2.png


Хех, н-куб внезапно всех заовнил, но остальные вроде выстроились примерно в том же порядке.
.jpg70 Кб, 754x1200
PoppyFanboy !VTLpv6lgGw 243 260012
Ничего не делал
Начал было читать Core Java, но отвлёкся и залип в игры
.jpg133 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 244 260206
>>260012
И в этот момент я сделал ужасную глупость - решил пожертвовать сном, чтобы всё же как-то восполнить пропущенный день. Естественно, я в итоге ничего толком не сделал. Я даже не понял, как так быстро пролетело время. Я просто сел немного почитать википедию про всякие концепты из архитектуры компьютера, про которые слышал, но что это конкретно, не особо знал, вроде виртуальной памяти, прерываний и прочего, а потом немного потыкал в vim'е и попробовал что-то позапускать на C. И тут раз, за окном светло, на часах шесть утра, я по сути ничем особо не занимался, через полтора часа неплохо было бы начать собираться идти на пары.

В общем, вышло так, что за последний 41 час в состоянии сна я был суммарно только полтора из них. Очень неприятно.

Сегодня был на парах в основном, ещё надо было к ортодонту зайти - тоже заняло определённое время. Бегать я, конечно, с таким недосыпом не стал (впрочем, ложиться спать вовремя - тоже). В течение дня совсем немного читал Танненбаума про архитектуру компьютеров: всю её не буду, только отдельные части, наверное.

Завтра
8.00
- проснуться, умыться
- сходить на студпроект
- по дороге читать Readings из 6.042J
15.00
- поесть
- поспать часа три
19.00
- побегать (R)
- сделать зарядку для спины (R)
- 1.5 часа на Core Java
- порисовать всякую ерунду (R)
0.00
- составить план на следующий день (R)
- составить план на неделю (R)
- лечь спать
(R) треккинг времени и еды, минимум 5 стаканов воды
PoppyFanboy !VTLpv6lgGw 245 260769
Ой, какое же оно (я) паршивое и с каждым днём всё хуже и хуже и вообще не видно, где всему этому конец. Наверное, можно считать, что ничего не сделал за это время (ну, побегал два раза, но это не считается). В субботу на студпроекте пробил очередное дно: нам задавали подготовиться к тому, чтобы говорить что-то ртом на микро-аудиторию, и я не то чтобы зафейлился, но это было максимально убого и даже вспоминать не хочется. В воскресенье просто тупил в монитор и ничего не делал.

И тогда, после двух потерянных дней, я решил собраться с духом и хотя бы один раз в этой жизни проснуться раньше, чем в восемь утра: специально лёг спать пораньше, в пол-одиннадцатого, вроде как относительно быстро заснул, но вместо того, чтобы встать в пол-седьмого, я опять заснул и проспал до девяти. Короче, больше никогда не буду даже пытаться просыпаться рано утром. В идеале я бы вообще просыпался где-нибудь к часу дня, но пока что такой возможности нет.

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

Вечером хотел по-быстрому доделать Штрассена, чтобы на каждом рекурсивном шаге матрицы добивались нулями до чётных размерностей, но, во-первых, долго тупил, а, во-вторых, когда сделал, что-то напутал с ветками и всё удолил, не закоммитив. Пришлось заново переписывать. Теперь вроде работает, но выглядит оно отвратительно. Хотел ещё перед этим перенести реализации всех алгоритмов сложения/умножения из класса-wrapper'а MatrixView в основной класс Matrix, но чего-то оно ещё хуже стало выглядеть и я оставил, как есть (хотя это, наверное, не очень хорошее решение).

Ещё на парах сегодня был, что-то читал по диффурам, сделал примерный трекинг еды каким-то калькулятором калорий (но у меня кухонных весов нет, так что там лютая погрешность), трекинг времени не делал. В последнее время стал простомаксимально раздражительным.

И вот даже сейчас какая-то косноязычная жуть получилась. Неудачный день прямо с начала и до самого конца.

Чет я не определился, нравится мне это или нет
https://youtu.be/G4CKmzBf5Cs
PoppyFanboy !VTLpv6lgGw 245 260769
Ой, какое же оно (я) паршивое и с каждым днём всё хуже и хуже и вообще не видно, где всему этому конец. Наверное, можно считать, что ничего не сделал за это время (ну, побегал два раза, но это не считается). В субботу на студпроекте пробил очередное дно: нам задавали подготовиться к тому, чтобы говорить что-то ртом на микро-аудиторию, и я не то чтобы зафейлился, но это было максимально убого и даже вспоминать не хочется. В воскресенье просто тупил в монитор и ничего не делал.

И тогда, после двух потерянных дней, я решил собраться с духом и хотя бы один раз в этой жизни проснуться раньше, чем в восемь утра: специально лёг спать пораньше, в пол-одиннадцатого, вроде как относительно быстро заснул, но вместо того, чтобы встать в пол-седьмого, я опять заснул и проспал до девяти. Короче, больше никогда не буду даже пытаться просыпаться рано утром. В идеале я бы вообще просыпался где-нибудь к часу дня, но пока что такой возможности нет.

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

Вечером хотел по-быстрому доделать Штрассена, чтобы на каждом рекурсивном шаге матрицы добивались нулями до чётных размерностей, но, во-первых, долго тупил, а, во-вторых, когда сделал, что-то напутал с ветками и всё удолил, не закоммитив. Пришлось заново переписывать. Теперь вроде работает, но выглядит оно отвратительно. Хотел ещё перед этим перенести реализации всех алгоритмов сложения/умножения из класса-wrapper'а MatrixView в основной класс Matrix, но чего-то оно ещё хуже стало выглядеть и я оставил, как есть (хотя это, наверное, не очень хорошее решение).

Ещё на парах сегодня был, что-то читал по диффурам, сделал примерный трекинг еды каким-то калькулятором калорий (но у меня кухонных весов нет, так что там лютая погрешность), трекинг времени не делал. В последнее время стал простомаксимально раздражительным.

И вот даже сейчас какая-то косноязычная жуть получилась. Неудачный день прямо с начала и до самого конца.

Чет я не определился, нравится мне это или нет
https://youtu.be/G4CKmzBf5Cs
че я вообще делаю PoppyFanboy !VTLpv6lgGw 246 260970
Чёт я почему-то очень-очень сильно хочу спать и залипаю ну прямо вообще на какой-то ерунде. Короче, может, если распишу словами, то получится понять. В общем, вот есть рекуррентное соотношение T(n) = 2T(⌊n / 2⌋) + n (пускай T(0) = 0). Делаем предположение, что T(n) = O(nlogn). Теперь надо доказать это индукцией.

Вот тут опасное место, потому что можно случайно начать доказывать, что-то типа "T(n) = O(nlogn) => T(n + 1) = O((n + 1) log(n + 1))", но это полнейшая ерунда, потому что переменная n тут вообще ни при чём:

>T(n) = O(nlogn) is either true or false, it’s validity does not depend on a particular value of n


Поэтому надо сначала перейти к определению большого О: T(n) = O(nlogn) iff существуют c > 0 и n0 ≥ 0: T(n) ≤ c · n · logn для любого n ≥ n0.

То есть нам надо работать с утверждением P(n): T(n) ≤ c · n · logn, где c уже предопределена. И надо доказать, что P(n0) истинно и из истинности P(n0), P(n0 + 1), ..., P(n - 1) следует истинность P(n).

Вотт, для начала найдём приблизительное n0, чтобы определиться с base case'ом:
T(1) = 1, но c · 1 · log(1) = 0, поэтому n0 = 1 не пойдёт
T(2) = 4, c · 2 · log(2) = 2 · c
T(3) = 5, c · 3 · log(3)
Короче, допустим, выбираем n0 = 2, потому что 1 - вообще не вариант.
P(n0) - очевидно, истинно при выборе c ≥ 2 (а мы всегда можем взять c побольше, почему бы и нет, нам же не надо искать самое малое c).

P(n0 + 1), оно же P(3) тоже истинно, тоже очевидно.
А дальше мы обрабатываем общий случай: n ≥ 4:

T(n) = 2T(⌊n / 2⌋) + n ≤

>вот тут 2 = n0 ≤ ⌊n / 2⌋ < n - этот кейс попадает в индукционное предположение


≤ 2(c · ⌊n / 2⌋ · log(⌊n / 2⌋)) + n ≤
≤ c · n · log(n / 2) + n =
= c · n · log(n) - c · n + n =
= c · n · log(n) + n(1 - c) ≤

>потому что c ≥ 2


≤ c · n · log(n)

Всё, доказали. Вроде понял. Оно простое, но просто в CLRS так тупо расписано: какая-то огромная неструктурированная стена текста, сначала он рассматривает общий случай, потом прыгает к base case'ам, потом ещё какую-то ерунду городит, я запутался и решил что это какой-то роскет скиенсе.

Вообще, конечно, доказательства такого вида никому не нужны, когда для соотношений вида
дивиде энд конкуер есть вот эта гениальная теорема
https://en.wikipedia.org/wiki/Akra–Bazzi_method
Которая мало того, что даёт универсальный ответ касательно разрешения всех divide and conquer recurrences, но ещё и формально обосновывает, почему нам не надо париться по поводу целочисленного деления при разбиении задачи на подзадачи (можно просто принять h(n) = ⌊n / 2⌋ - n / 2, и она подойдёт под условие теоремы, потому что сколь бы медленно не росла n/log^2(n), h(n) у нас всё равно где-то около оси абсцисс бултыхается).

~ ~ ~

А, и там ещё в CLRS дальше рассказывается, что если не получается доказать вот так индукцией какую-то верхнуюю оценку, то, возможно, имеет смысл не брать более грубую оценку, а чуть-чуть уточнить текущую. То есть, например, если не выходит доказать, что T(n) ≤ cn, то можно попробовать вычесть из
cn что-нибудь чуть более медленное, например, константу или логарифм.

Ну там вот такой пример был: T(n) = T(⌊n / 2⌋) + T(⌈n / 2⌉) + 1 - это, очевидно, T(n) = O(n) (можно как дерево разрисовать и расписать сумму геометрической прогрессии, например), но, если попытаться доказать индукцией, то выйдет вот ето:
T(n) = T(⌊n / 2⌋) + T(⌈n / 2⌉) + 1 ≤ c⌊n / 2⌋ + c⌈n / 2⌉ + 1 = cn + 1
Ничего не вышло
Но, если взять более точную границу: cn - d, где d ≥ 1, то, внезапно, получается:
T(n) ≤ c⌊n / 2⌋ + c⌈n / 2⌉ + 1 - 2d = cn + d + (1 - d) ≥ cn + d

~ ~ ~

А ещё я вдруг пон
е*л, что комлпексные числа можно перемножать с использованием только трёх обычных умножений. Там принцип примерно тот же, что в Карацубе. Но оно, наверное, будет выгодно только на больших-больших числах, когда умножения становятся в достаточной степени дороже сложений.

~ ~ ~

Блин, ну это всё ерунда ненужная, на это по-хорошему надо было потратить пять минут, но мне чего-то нехорошо

Ааа, таквотт, сегодня только на парах, можно считать, чего-то поделал по учёбе, а остальное время потратил в никуда. Не рисовал, зарядку для спины не делал, но, но сделал трекинг еды (это было легко, потому что я весь день питался всяким покупным мусором, а там на этикетках всё уже написано: и масса, и бжу).

Завтра надо будет разобраться с новой теорией по диффурам сделать домашнее задание хотя бы частично, и вообще начать готовиться к какому-нибудь экзамену. А ещё желательно побегать, но чёт, мне кажется, у меня результат будет ещё хуже, чем вчера (хотя, казалось бы, куда уже).

Охх, очень тяжёлая голова, не знаю, чего это вдруг. Выспался же сегодня вроде.

Скучно, но сойдёт
https://youtu.be/a_6quQ994JI
https://youtu.be/3vziDLjqnlA
На самом деле, на один раз послушать, так себе

А неплохо, в ОСТе второго хотлайна, конечно, тоже неплохая его композиция, но есть более удачные
https://youtu.be/RYtVf0wvPpc
https://youtu.be/JXtujxT9rzA
https://youtu.be/qFfybn_W8Ak

Ооо, я не знал, что есть англоязычная версия. А то мне на испанском вообще не нравится
https://youtu.be/aaSTOAJAUHM
че я вообще делаю PoppyFanboy !VTLpv6lgGw 246 260970
Чёт я почему-то очень-очень сильно хочу спать и залипаю ну прямо вообще на какой-то ерунде. Короче, может, если распишу словами, то получится понять. В общем, вот есть рекуррентное соотношение T(n) = 2T(⌊n / 2⌋) + n (пускай T(0) = 0). Делаем предположение, что T(n) = O(nlogn). Теперь надо доказать это индукцией.

Вот тут опасное место, потому что можно случайно начать доказывать, что-то типа "T(n) = O(nlogn) => T(n + 1) = O((n + 1) log(n + 1))", но это полнейшая ерунда, потому что переменная n тут вообще ни при чём:

>T(n) = O(nlogn) is either true or false, it’s validity does not depend on a particular value of n


Поэтому надо сначала перейти к определению большого О: T(n) = O(nlogn) iff существуют c > 0 и n0 ≥ 0: T(n) ≤ c · n · logn для любого n ≥ n0.

То есть нам надо работать с утверждением P(n): T(n) ≤ c · n · logn, где c уже предопределена. И надо доказать, что P(n0) истинно и из истинности P(n0), P(n0 + 1), ..., P(n - 1) следует истинность P(n).

Вотт, для начала найдём приблизительное n0, чтобы определиться с base case'ом:
T(1) = 1, но c · 1 · log(1) = 0, поэтому n0 = 1 не пойдёт
T(2) = 4, c · 2 · log(2) = 2 · c
T(3) = 5, c · 3 · log(3)
Короче, допустим, выбираем n0 = 2, потому что 1 - вообще не вариант.
P(n0) - очевидно, истинно при выборе c ≥ 2 (а мы всегда можем взять c побольше, почему бы и нет, нам же не надо искать самое малое c).

P(n0 + 1), оно же P(3) тоже истинно, тоже очевидно.
А дальше мы обрабатываем общий случай: n ≥ 4:

T(n) = 2T(⌊n / 2⌋) + n ≤

>вот тут 2 = n0 ≤ ⌊n / 2⌋ < n - этот кейс попадает в индукционное предположение


≤ 2(c · ⌊n / 2⌋ · log(⌊n / 2⌋)) + n ≤
≤ c · n · log(n / 2) + n =
= c · n · log(n) - c · n + n =
= c · n · log(n) + n(1 - c) ≤

>потому что c ≥ 2


≤ c · n · log(n)

Всё, доказали. Вроде понял. Оно простое, но просто в CLRS так тупо расписано: какая-то огромная неструктурированная стена текста, сначала он рассматривает общий случай, потом прыгает к base case'ам, потом ещё какую-то ерунду городит, я запутался и решил что это какой-то роскет скиенсе.

Вообще, конечно, доказательства такого вида никому не нужны, когда для соотношений вида
дивиде энд конкуер есть вот эта гениальная теорема
https://en.wikipedia.org/wiki/Akra–Bazzi_method
Которая мало того, что даёт универсальный ответ касательно разрешения всех divide and conquer recurrences, но ещё и формально обосновывает, почему нам не надо париться по поводу целочисленного деления при разбиении задачи на подзадачи (можно просто принять h(n) = ⌊n / 2⌋ - n / 2, и она подойдёт под условие теоремы, потому что сколь бы медленно не росла n/log^2(n), h(n) у нас всё равно где-то около оси абсцисс бултыхается).

~ ~ ~

А, и там ещё в CLRS дальше рассказывается, что если не получается доказать вот так индукцией какую-то верхнуюю оценку, то, возможно, имеет смысл не брать более грубую оценку, а чуть-чуть уточнить текущую. То есть, например, если не выходит доказать, что T(n) ≤ cn, то можно попробовать вычесть из
cn что-нибудь чуть более медленное, например, константу или логарифм.

Ну там вот такой пример был: T(n) = T(⌊n / 2⌋) + T(⌈n / 2⌉) + 1 - это, очевидно, T(n) = O(n) (можно как дерево разрисовать и расписать сумму геометрической прогрессии, например), но, если попытаться доказать индукцией, то выйдет вот ето:
T(n) = T(⌊n / 2⌋) + T(⌈n / 2⌉) + 1 ≤ c⌊n / 2⌋ + c⌈n / 2⌉ + 1 = cn + 1
Ничего не вышло
Но, если взять более точную границу: cn - d, где d ≥ 1, то, внезапно, получается:
T(n) ≤ c⌊n / 2⌋ + c⌈n / 2⌉ + 1 - 2d = cn + d + (1 - d) ≥ cn + d

~ ~ ~

А ещё я вдруг пон
е*л, что комлпексные числа можно перемножать с использованием только трёх обычных умножений. Там принцип примерно тот же, что в Карацубе. Но оно, наверное, будет выгодно только на больших-больших числах, когда умножения становятся в достаточной степени дороже сложений.

~ ~ ~

Блин, ну это всё ерунда ненужная, на это по-хорошему надо было потратить пять минут, но мне чего-то нехорошо

Ааа, таквотт, сегодня только на парах, можно считать, чего-то поделал по учёбе, а остальное время потратил в никуда. Не рисовал, зарядку для спины не делал, но, но сделал трекинг еды (это было легко, потому что я весь день питался всяким покупным мусором, а там на этикетках всё уже написано: и масса, и бжу).

Завтра надо будет разобраться с новой теорией по диффурам сделать домашнее задание хотя бы частично, и вообще начать готовиться к какому-нибудь экзамену. А ещё желательно побегать, но чёт, мне кажется, у меня результат будет ещё хуже, чем вчера (хотя, казалось бы, куда уже).

Охх, очень тяжёлая голова, не знаю, чего это вдруг. Выспался же сегодня вроде.

Скучно, но сойдёт
https://youtu.be/a_6quQ994JI
https://youtu.be/3vziDLjqnlA
На самом деле, на один раз послушать, так себе

А неплохо, в ОСТе второго хотлайна, конечно, тоже неплохая его композиция, но есть более удачные
https://youtu.be/RYtVf0wvPpc
https://youtu.be/JXtujxT9rzA
https://youtu.be/qFfybn_W8Ak

Ооо, я не знал, что есть англоязычная версия. А то мне на испанском вообще не нравится
https://youtu.be/aaSTOAJAUHM
PoppyFanboy !VTLpv6lgGw 247 261205
Хоть и спал часов восемь, но всё равно весь день, с утра до вечера, клонит в сон. Ужасный-ужасный паршивый день, ненавижу себя. Из-за этого вообще ничего не мог делать. Только побегал и сделал трекинг еды и воды (переел немного и воды не выпил даже пяти стаканов, хотя, с учетом жаркой погоды и того, что я бегал, по-хорошему должен был бы выхлестать все десять). Кстати, побегал не так уж и плохо: 6.08 км за 35 минут = 5 мин. шага + 3 бега + 2 шага + 20 бега + 5 шага. Плюс к этому эти 20 минут бежал в вплоне уже нелпохом для меня темпе (~ 5 мин/км), но это пока что не считается, потому что я ещё не дошёл до 25 минут непрерывного бега. Но это очень сильно повлияло то, что, наконец-то, температура за окном наладилась и можно не надевать миллион слоёв одежды, а ходить в одной футболке (но большинство прохожих на улице почему-то всё равно кутаются в какие-то толстовки и куртки; не помню, чтобы я был каким-то закалённым, зимой, например, кисти рук постоянно замерзали настолько, что тяжело было ими шевелить, и потом дома, даже в тепле, долго не хотели отмерзать).

>>251803

>68,5


Сегодня в середине дня было 66,3, кстати. Результат, конечно, с учётом количества прошедшего времени и с поправкой на то, что, скорее всего, это минимум колебаний моего веса в пределах суток, - так себе, но это просто чуть ли не единственный случай во всей моей тупой жизни, когда счётчик весов с течением времени показывал всё меньшие и меньшие значения.

Завтра никуда не пойду и буду делать диффуры. Надеюсь, мне не будет опять так сильно беспричинно хотеться спать, как это было сегодня.

https://youtu.be/cxH9Q0pbE4c
D5AW76mU8AE36UF.jpeg273 Кб, 1340x1819
pf !VTLpv6lgGw 248 261326
Десятый час не могу заставить себя начать разбираться с диффурами по причине ленивое чмо
.jpg120 Кб, 1195x1200
pf !VTLpv6lgGw 249 261438
Всё, теперь меня точно можно списывать в утиль
.jpg83 Кб, 852x1200
never ever again `all over again` pf !VTLpv6lgGw 250 261575
Я тут подумал и решил, что к чёрту всю эту тупую ерунду вроде каких-то планов, долгосрочных и на каждый день, выработки привычек, трекинга времени и калорий. Туда же идут ежедневные описания того, как прошёл день, бег, зарядка для спины. Пошло оно всё куда подальше. В идеале этого всего вообще не должно существовать, а я этим мало того, что сам занимаюсь с переменным успехом, так ещё и сюда тащу. Эта тошнотворная дрянь имеет какую-то жуткую цикличную структуру, которая повторяет сама себя: как нить от лампы накаливания, закрученная в плотную спираль, а затем повторно закрученная в ещё одну спираль и так итеративно до бесконечности. Я не буду больше такие штуки выставлять на видное место, но и отказаться пока что от них никак не могу, так что пусть оно будет лежать где-нибудь рядом, но хорошо спрятанным, как нечто стыдное и неприемлемое.

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

Вот так будет лучше.

https://youtu.be/eZDnHFatNVk
pf !VTLpv6lgGw 251 262004
Соу фар ничего особо интересного не происходит (но вот завтра ой как интересно будет, когда я буду разбираться с машинами тьюринга, которые будут на контрольной по матлогике уже послезавтра). Сегодня был на экзамене в одну школку. Можно считать, не решил ни одного задания, за исключением тех, которые ну я просто не имел права не решить вроде нахождения матрицы линейного оператора в новом базисе (с которым я промучался слишком долго из-за того, что дважды ошибся при вычислении обратной матрицы, арифметика - это определённо не моё) или нахождения последних трёх цифр 9^(811). Но я умудрился зафейлиться даже в простых задачах на том, что не знал формулу для объёма конуса (не говоря уже о формуле для вычисления объёма фигуры вращения). Ну, в общем, скорее всего, беттер лак некст тайм, мы вам перезвоним, но, во-первых, наверняка я это узнаю только в начале июня, а, во-вторых, ну что поделать, не стоит из-за этого сильно расстраиваться. Выложу сюда задачи, которые не удалось решить и стоят какого-то внимания, может быть, потом попробую.

1.
В классе учатся 30 мальчиков и 30 девочек. Необходимо подсчитать количество способов выбрать ≥4 человек на дежурство так, чтобы мальчиков и девочек на дежурстве было поровну. (Ответ не должен содержать штук типа сумма при i = 1...n).
Тут всё вроде сводится к вычислению суммы квадратов биноминальных коэффициентов, но я забыл/не знал, как ето делать. Потом посмотрю.

2.
Есть какая-то абстрактная пошаговая игра-файтинг, где на каждом шаге (раунде) случайным образом выбирается один игрок из двух и он наносит удар оппоненту. Изначально урон = 1, но с каждым последующим нанесённым ударом в ряд урон увеличивается в 1.2 раза (а если серия ударов прерывается ударом противника, то урон сбрасывается обратно на 1). Необходимо посчитать средний урон игрока при количестве раундов, стремящемся к бесконечности.
Вот тут чего-то я совсем не знаю. Я думал, что можно как-нибудь выразить средний урон за m раундов рекурсивно через средний урон за (m - 1), но не похоже, что тут это сработает.

К оставшимся трём я чего-то вообще не знаю, как подступиться (особенно сейчас, когда чёт очень сильно хочется спать).

3.
Есть неориентированный связный граф. В нем есть вершина v со степенью 68. Также в графе есть 70 вершин со степенями 18, у остальных вершин степень равна 26. Необходимо доказать, что среди рёбер, инцидентных вершине v, есть 34 штуки, которые можно убрать и граф останется связным.

4.
Есть последовательность an, где каждый член n ≥ 1 выражается либо как an = sin(pi / 2 · a_{n-1}), либо как (a_{n-1})^2. Необходимо проверить, может ли быть такое, что эта последовательность имеет предел, лежащий в интервале (0,1). (а0 не задан, скорее всего, предполагается, что его нужно тоже самому попытаться подобрать)

5.
Доказать, что для любого натурального n 3^(3^n) раскладывается как минимум в 2n+1 необязательно уникальных простых множителей

• • •

Сама школка, куда я ходил, располагалась в новой для меня локации: везде то ли заводы, то ли ещё какие-то предприятия советских времён, вперемешку с офисами и бизнес-центрами, расположенные либо в старых советских зданиях, либо в новых, страшненьких, облицованных шлифованным гранитом. Отдельно запомнились заросшее футбольное поле заброшенного (я удивлюсь, если он функционирует) спорт-клуба и какая-то штука на >3.jpg. Похоже на портал куда-то, но, судя по торчащей посередине трубке, это всё же... Фонтан? Эм, не знаю. Ещё больше неясности вводит свисающий над жерлом водный канал: предполагалось, что это будет фонтан-искусственный-водопад? Meh, версия с порталом гораздо более реалистичная. В общем, интересное место, отдельно взятые виды - точь-в-точь кадры из старых фильмов, когда-нибудь, когда мне не будет лень, надо будет сходить пройтись там (в дневное время суток, количество разбросанных бутылок несколько настораживает).

• • •

Читал про HLASM для IBM-ских компов для студпроекта. Там есть такая забавная-штука-вроде-как-пережиток-прошлого,-в-котором-ещё-не-додумались-до-call-stack'a, как save area. Это особая область в памяти, которая выделяется для сохранения значений регистров при вызове subroutine'ов. Помимо регистров там ещё сохраняются адреса предыдущей и следующей save area. То есть в начале каждой своей программы надо сначала сохранить значения регистров, доставшиеся нам от той штуки, которая нас вызвала (будь то ОС или ещё что-то), затем определить в памяти новую save area и оставить в старой save area - адрес новой, а в новой - адрес старой. Получается такой двусвязный список, по сути тот же стек, но немного деревянный. Так вотт, я долгое время не понимал и ленился разбираться с тем, что такое директива USING и зачем она нужна при выделении памяти не только под save area, но и вообще для чего угодно, а, оказалось, что эта штука определяет базовый регистр и смещение, чтобы нам не надо было заморачиваться с ними вручную. Короче, за бавно.

http://www.kcats.org/csci/using.pdf
Вот тут расписано про using. На сайте IBM чего-то сумбурно немного.

• • •

Кстати, сегодня, наверное, в первый раз за два месяца (всё время, что я занимаюсь), побегал с удовольствием, ну, по крайней мере, я не очень сильно напрягался, у меня ничего нигде не болело и я не выдохся, хотть и устал в ногах. Удалось даже под конец немного ускориться, хотя обычно последние минут пять бега я просто доползал по инерции.

>1.png


А, и да, сегодня уже было 25 минут непрерывного бега (но за это время 5 км я ещё не пробегаю, сколько точно выходит за это время - не знаю, потому что замеряю расстояние с учётом пятиминутных заминки и разминки, которые делаю быстрым шагом). Думаю, имеет смысл ещё пару раз вот так 25 минут побегать, а потом начать увеличивать время непрерывного бега до 30 минут.

>2.png


Ну и чтобы на совсем закрыть тему с бегом на ближайшее время, пусть здесь будут лежать результаты за апрель.

https://youtu.be/ZqOFZ1jHX0Q
https://youtu.be/ehwYjuZ6e_Q
https://youtu.be/wY6DhfGHmpY
https://youtu.be/zUzd9KyIDrM
Кучу раз о них слышал, но почему-то никогда руки не доходили послушать или хотя бы узнать, что они там играют. А оно, оказывается, неплохо звучит

https://youtu.be/PQtRXqBQETA
А вот эту песенку уже довольно давно слышал, но не знал, что это вокалист систем ов э даун.

https://youtu.be/EI7bfO9eZuE
Нет, как музыку это слушать tyajelovato: это и не эмбиент, который можно поставить на фоне и со временем ты даже перестанешь его замечать, и не что-то мелодичное, а жаль, придётся переслушивать его старые работы (вроде там ещё оставалось что-то, чего я не слушал полностью). Я надеялся, что он опять начнёт делать что-то более мелодичное после последних частей "Everywhere at the end of time", которые были по замыслу автора про отражение состояния прогрессирующей деменции в музыке, но нет, "Everywhere, an empty bliss" оказалась примерно про то же самое.

https://youtu.be/7QAUQvm_W74
Случайно попалось в рекомендациях. Вроде неплохо, но остальные их песни чего-то не очень нравятся, в том числе вроде-как-их-флагманскую "I hope to be around".

https://youtu.be/m_SrSS-Tyh0
Поначалу показалось, что это что-то интересное, но нет, опять какой-то слоу-кор пост-рок или что-то около того. Не знаю, такие штуки не то чтобы не нравятся, но просто, они же все почти одинаковые, достаточно послушать несколько композиций Slowdive и всё, больше ничего нового тут не найдёшь. Наверное.

https://youtu.be/1c3HoQq8xFc
А вот это я уже сюда репостил, но только отдельную композицию из этого альбома, "I am sleeping under the dead tree". Вроде как да, она тут самая удачная, но остальные тоже более-менее неплохие.

https://youtu.be/8WyGaus8ax0
Что-то похожее на то, что делают Parks, Squares and Alleys

Ааа опять чуть не заруинил разметку лишней звёздочкой
pf !VTLpv6lgGw 251 262004
Соу фар ничего особо интересного не происходит (но вот завтра ой как интересно будет, когда я буду разбираться с машинами тьюринга, которые будут на контрольной по матлогике уже послезавтра). Сегодня был на экзамене в одну школку. Можно считать, не решил ни одного задания, за исключением тех, которые ну я просто не имел права не решить вроде нахождения матрицы линейного оператора в новом базисе (с которым я промучался слишком долго из-за того, что дважды ошибся при вычислении обратной матрицы, арифметика - это определённо не моё) или нахождения последних трёх цифр 9^(811). Но я умудрился зафейлиться даже в простых задачах на том, что не знал формулу для объёма конуса (не говоря уже о формуле для вычисления объёма фигуры вращения). Ну, в общем, скорее всего, беттер лак некст тайм, мы вам перезвоним, но, во-первых, наверняка я это узнаю только в начале июня, а, во-вторых, ну что поделать, не стоит из-за этого сильно расстраиваться. Выложу сюда задачи, которые не удалось решить и стоят какого-то внимания, может быть, потом попробую.

1.
В классе учатся 30 мальчиков и 30 девочек. Необходимо подсчитать количество способов выбрать ≥4 человек на дежурство так, чтобы мальчиков и девочек на дежурстве было поровну. (Ответ не должен содержать штук типа сумма при i = 1...n).
Тут всё вроде сводится к вычислению суммы квадратов биноминальных коэффициентов, но я забыл/не знал, как ето делать. Потом посмотрю.

2.
Есть какая-то абстрактная пошаговая игра-файтинг, где на каждом шаге (раунде) случайным образом выбирается один игрок из двух и он наносит удар оппоненту. Изначально урон = 1, но с каждым последующим нанесённым ударом в ряд урон увеличивается в 1.2 раза (а если серия ударов прерывается ударом противника, то урон сбрасывается обратно на 1). Необходимо посчитать средний урон игрока при количестве раундов, стремящемся к бесконечности.
Вот тут чего-то я совсем не знаю. Я думал, что можно как-нибудь выразить средний урон за m раундов рекурсивно через средний урон за (m - 1), но не похоже, что тут это сработает.

К оставшимся трём я чего-то вообще не знаю, как подступиться (особенно сейчас, когда чёт очень сильно хочется спать).

3.
Есть неориентированный связный граф. В нем есть вершина v со степенью 68. Также в графе есть 70 вершин со степенями 18, у остальных вершин степень равна 26. Необходимо доказать, что среди рёбер, инцидентных вершине v, есть 34 штуки, которые можно убрать и граф останется связным.

4.
Есть последовательность an, где каждый член n ≥ 1 выражается либо как an = sin(pi / 2 · a_{n-1}), либо как (a_{n-1})^2. Необходимо проверить, может ли быть такое, что эта последовательность имеет предел, лежащий в интервале (0,1). (а0 не задан, скорее всего, предполагается, что его нужно тоже самому попытаться подобрать)

5.
Доказать, что для любого натурального n 3^(3^n) раскладывается как минимум в 2n+1 необязательно уникальных простых множителей

• • •

Сама школка, куда я ходил, располагалась в новой для меня локации: везде то ли заводы, то ли ещё какие-то предприятия советских времён, вперемешку с офисами и бизнес-центрами, расположенные либо в старых советских зданиях, либо в новых, страшненьких, облицованных шлифованным гранитом. Отдельно запомнились заросшее футбольное поле заброшенного (я удивлюсь, если он функционирует) спорт-клуба и какая-то штука на >3.jpg. Похоже на портал куда-то, но, судя по торчащей посередине трубке, это всё же... Фонтан? Эм, не знаю. Ещё больше неясности вводит свисающий над жерлом водный канал: предполагалось, что это будет фонтан-искусственный-водопад? Meh, версия с порталом гораздо более реалистичная. В общем, интересное место, отдельно взятые виды - точь-в-точь кадры из старых фильмов, когда-нибудь, когда мне не будет лень, надо будет сходить пройтись там (в дневное время суток, количество разбросанных бутылок несколько настораживает).

• • •

Читал про HLASM для IBM-ских компов для студпроекта. Там есть такая забавная-штука-вроде-как-пережиток-прошлого,-в-котором-ещё-не-додумались-до-call-stack'a, как save area. Это особая область в памяти, которая выделяется для сохранения значений регистров при вызове subroutine'ов. Помимо регистров там ещё сохраняются адреса предыдущей и следующей save area. То есть в начале каждой своей программы надо сначала сохранить значения регистров, доставшиеся нам от той штуки, которая нас вызвала (будь то ОС или ещё что-то), затем определить в памяти новую save area и оставить в старой save area - адрес новой, а в новой - адрес старой. Получается такой двусвязный список, по сути тот же стек, но немного деревянный. Так вотт, я долгое время не понимал и ленился разбираться с тем, что такое директива USING и зачем она нужна при выделении памяти не только под save area, но и вообще для чего угодно, а, оказалось, что эта штука определяет базовый регистр и смещение, чтобы нам не надо было заморачиваться с ними вручную. Короче, за бавно.

http://www.kcats.org/csci/using.pdf
Вот тут расписано про using. На сайте IBM чего-то сумбурно немного.

• • •

Кстати, сегодня, наверное, в первый раз за два месяца (всё время, что я занимаюсь), побегал с удовольствием, ну, по крайней мере, я не очень сильно напрягался, у меня ничего нигде не болело и я не выдохся, хотть и устал в ногах. Удалось даже под конец немного ускориться, хотя обычно последние минут пять бега я просто доползал по инерции.

>1.png


А, и да, сегодня уже было 25 минут непрерывного бега (но за это время 5 км я ещё не пробегаю, сколько точно выходит за это время - не знаю, потому что замеряю расстояние с учётом пятиминутных заминки и разминки, которые делаю быстрым шагом). Думаю, имеет смысл ещё пару раз вот так 25 минут побегать, а потом начать увеличивать время непрерывного бега до 30 минут.

>2.png


Ну и чтобы на совсем закрыть тему с бегом на ближайшее время, пусть здесь будут лежать результаты за апрель.

https://youtu.be/ZqOFZ1jHX0Q
https://youtu.be/ehwYjuZ6e_Q
https://youtu.be/wY6DhfGHmpY
https://youtu.be/zUzd9KyIDrM
Кучу раз о них слышал, но почему-то никогда руки не доходили послушать или хотя бы узнать, что они там играют. А оно, оказывается, неплохо звучит

https://youtu.be/PQtRXqBQETA
А вот эту песенку уже довольно давно слышал, но не знал, что это вокалист систем ов э даун.

https://youtu.be/EI7bfO9eZuE
Нет, как музыку это слушать tyajelovato: это и не эмбиент, который можно поставить на фоне и со временем ты даже перестанешь его замечать, и не что-то мелодичное, а жаль, придётся переслушивать его старые работы (вроде там ещё оставалось что-то, чего я не слушал полностью). Я надеялся, что он опять начнёт делать что-то более мелодичное после последних частей "Everywhere at the end of time", которые были по замыслу автора про отражение состояния прогрессирующей деменции в музыке, но нет, "Everywhere, an empty bliss" оказалась примерно про то же самое.

https://youtu.be/7QAUQvm_W74
Случайно попалось в рекомендациях. Вроде неплохо, но остальные их песни чего-то не очень нравятся, в том числе вроде-как-их-флагманскую "I hope to be around".

https://youtu.be/m_SrSS-Tyh0
Поначалу показалось, что это что-то интересное, но нет, опять какой-то слоу-кор пост-рок или что-то около того. Не знаю, такие штуки не то чтобы не нравятся, но просто, они же все почти одинаковые, достаточно послушать несколько композиций Slowdive и всё, больше ничего нового тут не найдёшь. Наверное.

https://youtu.be/1c3HoQq8xFc
А вот это я уже сюда репостил, но только отдельную композицию из этого альбома, "I am sleeping under the dead tree". Вроде как да, она тут самая удачная, но остальные тоже более-менее неплохие.

https://youtu.be/8WyGaus8ax0
Что-то похожее на то, что делают Parks, Squares and Alleys

Ааа опять чуть не заруинил разметку лишней звёздочкой
PoppyFanboy !VTLpv6lgGw 252 262933
>>261575
Эхе-эехехе, я передумал. Я мусор, а значит, и дневник мне полагается соответствующий. Запароленный тумблер-блог хоть и довольно удобный в плане форматирования, но здесь всё равно лучше.

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

Ну, в любом случае, тогда я проиграл в неё весь остаток дня и удалил, потому что побоялся, что засосёт сильнее. Да, с этим, конечно, большие проблемы, я раньше думал, что сносить с компа все игры, чтобы не отвлекаться на них - это максимально глупо, по-детски и надо просто всего лишь не играть в них, когда есть другие дела, но в случае с гта, которая с моим интернетом сначала качалась две недели, а потом устанавливалась ещё четыре, - это вполне работает. Удалил я тогда не только гта, а вообще все игры. Слишком много времени высасывают, и я вообще не могу это контролировать.

Да-а, и вот тогда, на следующий день, во вторник, я немного поехал головой, потому что решил всерьёз попробовать заставить себя начать применять всякую вылезаторскую муть:
- снёс с телефона почти все приложения с уведомлениями и дешчан, удалил оттуда всю музыку и скачал трёхчасовой плейлист моцарта (потому что остальная музыка рассеивает моё внимание, а этот парень как будто бы специально писал, чтобы я под это пытался решить задачку по матлогике), таким образом сделав телефон непригодным вообще ни для чего (теоретически я всё ещё могу пользоваться ютубом, вконтактом и прочими сайтами с браузера, но это неудобно и потому как минимум ограничивает от бездумного ежеминутного цикла "проверил, что там нового - что здесь - что тут - и по кругу")

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

- попробовал использовать хабитику, но это точно не для меня. Максимум - там удобный трекер привычек, а всякие эти реворды, опыт, здоровье меня только утомляют (я и в играх с этим не люблю возиться: просто дайте мне понажимать кнопки в игре, не заставляйте что-то кликать мышкой и думать). Аналогично с приложением Forest - рублю деревья на раз-два что в браузере, что на телефоне. Собственно, поэтому с телефона я всё и удалил, но с браузером на компе дело обстоит сложнее: тут пока что не знаю, как выкручиваться, когда на почти бессознательном уровне открываешь новую вкладку и погружаешься с головой в информационный мусор.

- застилать кровать покрывалом и использовать её только для сна. Причём запрещается даже просто лежать с телефоном, даже во время законного отдыха. Это довольно тяжело и иногда не получается вовремя себя одёрнуть, но определённо стоит делать: много раз за собой замечал, что не могу встать с кровати, когда надо что-то начать делать. Это, кстати, относится в том числе к пробуждению утром: бывало такое, что, уже проснувшись, я по часу не вылезал из кровати, скроллируя интернет с телефона.

- аналогично предыдущему пункту, использовать стол в своей комнате только по назначению, есть ходить на кухню, без телефона

- приложения, которые делают оранжевый экран. Для телефона есть твайлайт, а на компе я просто в настройках самого монитора ставлю режим с тёплыми тонами. В теории должно помочь быстрее засыпать.

- ну, бег, зарядка для спины, трекинг времени и калорий - это всё и так было с переменным успехом.

Вот это вот всё мне не составило особого труда начать применять где-то со вторника этой недели, а теперь то, что у меня не получается:
- заиметь утреннюю и вечернюю рутины. Утренняя должна помочь быстрее просыпаться и должна включать в себя, помимо дефолтных умыться-почистить зубы, пару упражнений на растяжку, чтобы проснуться, завтрак (с утра я почти никогда не чувствую голод) ии, всё, наверное. Тут главное - это побороть себя и не отложить пробуждение на лишние десять-пятнадцать минут: в любом случае, за это время ты не выспишься, а просто только ещё раз немного погрузишься в сон, а затем опять проснёшься, из-за чего станешь ещё более сонным.

- спать достаточное количество времени

- пить больше воды (вроде как в теории с чувством жажды должно быть примерно так же, как и с чувством голода, но, судя по всему, у меня водянистая анорексия).

- есть больше еды богатой белком. Вот, честно, я во всём этом вообще не разбираюсь, хотя стоило бы, но, как я это вижу на максимально обывательском уровне: белки - строительный материал, хорошо утоляют голод, углеводы - источник энергии, есть быстрые (как правило, самые вкусные штуки, быстро усваиваются и в связи с этим чувство голода наступает быстрее) и медленные, жиры - просто классные штуки. Так вот, за все дни, что я на глаз считал калории, я почти всегда ел очень мало белка, немного больше жиров и кучу-кучу углеводов из-за того, что постоянно был голоден. И, судя по всему, постоянное чувство голода - из-за того, что ем мало белков, так что завтра надо будет сходить в магазин и купить что-нибудь вроде курицы, творога и растительного чего-нибудь.

- слушать какого-нибудь Моцарта на фоне (если честно, меня уже тошнит от него, но пока что не знаю, что бы ещё такого зашло). Стандартный плейлист мало того, что отвлекает, так ещё и из-за того, что половину композиций из него я уже заслушал до дыр, приходится часто отвлекаться на то, чтобы переключать их - это основная причина, почему у меня постоянно такое рассеянное внимание.

- делить время на 25 минут + 5 минут, насильно заставлять себя это делать, иначе я теряю счёт времени. Пока что получается очень с трудом и не всегда.

- по возможности в середине дня делать небольшой 25-минутный перерыв на сон. В последнее время не пробовал почти ни разу.

- меньше перекусывать всяким, есть фрукты всякие, хотя бы яблоки: они по ощущениям гораздо лучше утоляют голод при относительно небольшой калорийности.

Вот это всё я пытался применять в среду-четверг. В среду не очень удачно, сегодня - чуть лучше, но всё ещё очень далеко от идеала: всё равно проваливаюсь в прокрастинацию.

А ещё обсмотрелся вот этого
https://youtu.be/b2njoDynrSY
В теории нужно всего лишь определить, что является щелчком для того, чтобы отвлечься, и какой профит я с этого получаю

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

> - Yamazaki, what did you call me earlier?


> - Um, an ugly, pitful and filthy-looking pervert.


> - Exactly! I'm about to do something only a pervert would do!


> - Huh?


> - Yamazaki, take pictures of me! Take pictures of me and show them to me!


> - Why would you want me to do such a thing? I don't understand what you're trying to do at all.


> - A man won't be able to change unless he faces reality! Looking at pictures of myself, taken by you, will make me see myself as others see me and I'll probably fall into a state of self-hatred. But I'm sure that self-hatred could be turned into an energy that could change who I am right now! I am... I am... I am going to... Break free of this darkness!


> ...


> - Class is now over. Soon girls will be coming through the gate. I will take pictures of them. The so-called "sneak pictures". What do you think? Isn't that just what an ugly pitful abd filthy-looking pervert would do? I'm ugly, right? I'm pitful, right? But that is exactly who I am right now!



Собственно, да, это тут и будет, как обычно.
Бтв не ассоциирую себя с Сато-куном, потому что он крутой, а я нет

А, чем занимался сегодня, потом напишу, там не особо интересно.
PoppyFanboy !VTLpv6lgGw 252 262933
>>261575
Эхе-эехехе, я передумал. Я мусор, а значит, и дневник мне полагается соответствующий. Запароленный тумблер-блог хоть и довольно удобный в плане форматирования, но здесь всё равно лучше.

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

Ну, в любом случае, тогда я проиграл в неё весь остаток дня и удалил, потому что побоялся, что засосёт сильнее. Да, с этим, конечно, большие проблемы, я раньше думал, что сносить с компа все игры, чтобы не отвлекаться на них - это максимально глупо, по-детски и надо просто всего лишь не играть в них, когда есть другие дела, но в случае с гта, которая с моим интернетом сначала качалась две недели, а потом устанавливалась ещё четыре, - это вполне работает. Удалил я тогда не только гта, а вообще все игры. Слишком много времени высасывают, и я вообще не могу это контролировать.

Да-а, и вот тогда, на следующий день, во вторник, я немного поехал головой, потому что решил всерьёз попробовать заставить себя начать применять всякую вылезаторскую муть:
- снёс с телефона почти все приложения с уведомлениями и дешчан, удалил оттуда всю музыку и скачал трёхчасовой плейлист моцарта (потому что остальная музыка рассеивает моё внимание, а этот парень как будто бы специально писал, чтобы я под это пытался решить задачку по матлогике), таким образом сделав телефон непригодным вообще ни для чего (теоретически я всё ещё могу пользоваться ютубом, вконтактом и прочими сайтами с браузера, но это неудобно и потому как минимум ограничивает от бездумного ежеминутного цикла "проверил, что там нового - что здесь - что тут - и по кругу")

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

- попробовал использовать хабитику, но это точно не для меня. Максимум - там удобный трекер привычек, а всякие эти реворды, опыт, здоровье меня только утомляют (я и в играх с этим не люблю возиться: просто дайте мне понажимать кнопки в игре, не заставляйте что-то кликать мышкой и думать). Аналогично с приложением Forest - рублю деревья на раз-два что в браузере, что на телефоне. Собственно, поэтому с телефона я всё и удалил, но с браузером на компе дело обстоит сложнее: тут пока что не знаю, как выкручиваться, когда на почти бессознательном уровне открываешь новую вкладку и погружаешься с головой в информационный мусор.

- застилать кровать покрывалом и использовать её только для сна. Причём запрещается даже просто лежать с телефоном, даже во время законного отдыха. Это довольно тяжело и иногда не получается вовремя себя одёрнуть, но определённо стоит делать: много раз за собой замечал, что не могу встать с кровати, когда надо что-то начать делать. Это, кстати, относится в том числе к пробуждению утром: бывало такое, что, уже проснувшись, я по часу не вылезал из кровати, скроллируя интернет с телефона.

- аналогично предыдущему пункту, использовать стол в своей комнате только по назначению, есть ходить на кухню, без телефона

- приложения, которые делают оранжевый экран. Для телефона есть твайлайт, а на компе я просто в настройках самого монитора ставлю режим с тёплыми тонами. В теории должно помочь быстрее засыпать.

- ну, бег, зарядка для спины, трекинг времени и калорий - это всё и так было с переменным успехом.

Вот это вот всё мне не составило особого труда начать применять где-то со вторника этой недели, а теперь то, что у меня не получается:
- заиметь утреннюю и вечернюю рутины. Утренняя должна помочь быстрее просыпаться и должна включать в себя, помимо дефолтных умыться-почистить зубы, пару упражнений на растяжку, чтобы проснуться, завтрак (с утра я почти никогда не чувствую голод) ии, всё, наверное. Тут главное - это побороть себя и не отложить пробуждение на лишние десять-пятнадцать минут: в любом случае, за это время ты не выспишься, а просто только ещё раз немного погрузишься в сон, а затем опять проснёшься, из-за чего станешь ещё более сонным.

- спать достаточное количество времени

- пить больше воды (вроде как в теории с чувством жажды должно быть примерно так же, как и с чувством голода, но, судя по всему, у меня водянистая анорексия).

- есть больше еды богатой белком. Вот, честно, я во всём этом вообще не разбираюсь, хотя стоило бы, но, как я это вижу на максимально обывательском уровне: белки - строительный материал, хорошо утоляют голод, углеводы - источник энергии, есть быстрые (как правило, самые вкусные штуки, быстро усваиваются и в связи с этим чувство голода наступает быстрее) и медленные, жиры - просто классные штуки. Так вот, за все дни, что я на глаз считал калории, я почти всегда ел очень мало белка, немного больше жиров и кучу-кучу углеводов из-за того, что постоянно был голоден. И, судя по всему, постоянное чувство голода - из-за того, что ем мало белков, так что завтра надо будет сходить в магазин и купить что-нибудь вроде курицы, творога и растительного чего-нибудь.

- слушать какого-нибудь Моцарта на фоне (если честно, меня уже тошнит от него, но пока что не знаю, что бы ещё такого зашло). Стандартный плейлист мало того, что отвлекает, так ещё и из-за того, что половину композиций из него я уже заслушал до дыр, приходится часто отвлекаться на то, чтобы переключать их - это основная причина, почему у меня постоянно такое рассеянное внимание.

- делить время на 25 минут + 5 минут, насильно заставлять себя это делать, иначе я теряю счёт времени. Пока что получается очень с трудом и не всегда.

- по возможности в середине дня делать небольшой 25-минутный перерыв на сон. В последнее время не пробовал почти ни разу.

- меньше перекусывать всяким, есть фрукты всякие, хотя бы яблоки: они по ощущениям гораздо лучше утоляют голод при относительно небольшой калорийности.

Вот это всё я пытался применять в среду-четверг. В среду не очень удачно, сегодня - чуть лучше, но всё ещё очень далеко от идеала: всё равно проваливаюсь в прокрастинацию.

А ещё обсмотрелся вот этого
https://youtu.be/b2njoDynrSY
В теории нужно всего лишь определить, что является щелчком для того, чтобы отвлечься, и какой профит я с этого получаю

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

> - Yamazaki, what did you call me earlier?


> - Um, an ugly, pitful and filthy-looking pervert.


> - Exactly! I'm about to do something only a pervert would do!


> - Huh?


> - Yamazaki, take pictures of me! Take pictures of me and show them to me!


> - Why would you want me to do such a thing? I don't understand what you're trying to do at all.


> - A man won't be able to change unless he faces reality! Looking at pictures of myself, taken by you, will make me see myself as others see me and I'll probably fall into a state of self-hatred. But I'm sure that self-hatred could be turned into an energy that could change who I am right now! I am... I am... I am going to... Break free of this darkness!


> ...


> - Class is now over. Soon girls will be coming through the gate. I will take pictures of them. The so-called "sneak pictures". What do you think? Isn't that just what an ugly pitful abd filthy-looking pervert would do? I'm ugly, right? I'm pitful, right? But that is exactly who I am right now!



Собственно, да, это тут и будет, как обычно.
Бтв не ассоциирую себя с Сато-куном, потому что он крутой, а я нет

А, чем занимался сегодня, потом напишу, там не особо интересно.
.jpg98 Кб, 778x1200
PoppyFanboy !VTLpv6lgGw 253 263077
>>262933

>завтра надо будет сходить в магазин и купить что-нибудь вроде курицы, творога и растительного чего-нибудь


На улице было слишком холодно и ветрено, поэтому не пошёл никуда. Да и в целом в плане питания сегодня сильно зафейлился: не выдержал и в середине дня буквально за минут пять уничтожил плитку шоколада (I have no regrets, она была слишком вкусной).

>А, чем занимался сегодня, потом напишу, там не особо интересно


Да, на самом деле, особо ничем. Единственное - побегал, но это был максимально неприятный опыт: дождь, сильный ветер прямо в лицо, причём он дул не порывами, а тупо непрерывно, я как будто бежал (или скорее уже полз, потому что в этот поток ветра я попал уже где-то под конец) против потока воздуха из мощного вентилятора. Забавно, что именно в такую погоду я, первый раз за последнюю неделю, наконец-то, пересёкся с кем-то ещё, кто тоже вышел на пробежку: обычно это происходило довольно часто и поэтому как-то непривычно совсем одному ползать по улице.

Сегодня немного готовился к экзаменам по матлогике и диффурам. По матлогике там был пока что совсем простой вводный материал из начала семестра: логические формулы, всякие законы, про то, что любую логическую формулу можно выразить только через NAND или NOR (я никогда не запомню, что из этого стрелка Пирса, а что - штрих Шеффера), ДНФ, КНФ, но даже тут я умудрился споткнуться о доказательство того, что, кроме упомянутых NAND и NOR, больше нет других логических связок, с помощью которых можно было бы выразить любое логическое выражение. Чёт оно как-то до меня не дошло сразу и я к тому же ещё долго не мог придумать нормальный гугл запрос ни на русском, ни на английском, чтобы найти доказательство. В итоге нашел вот это видео:
https://youtu.be/V2WmKL-KU6k
и всё встало на места (такое, конечно, затянутое объяснение, просто ужас, это определённо надо иметь талант, чтобы растянуть такое простое доказательство на чуть ли не десять минут).

По диффурам там тоже пока что всё более-менее просто и частично уже было до этого: линейно однородные системы уравнений, про линейную (не)зависимость решений и прочие такие пока что простые штуки с простыми алгебраическими доказательствами.

Начал проходить какой-то онлайн-курс по базам данных:
https://alison.com/courses/diploma-in-databases-and-t-sql-revised
и чего-то он мне не особо нравится, ну, или я просто слишком тупой, если бы мне не надо было это для английского в универе, я бы его дропнул и нашёл какую-нибудь книжку. Единственный однозначный плюс - лекции из курса неплохое упражнение на восприятие англоязычной речи (как-то так вышло, что этот скилл у меня в очень сильной просадке, иногда без субтитров вообще не понимаю, о чём идёт речь). Пока что там идут относительно простые штуки про нормализацию и я большую часть времени не смотрел лекции по курсу, а читал википедию про attributes, super-key, candidate key, functional dependecy, transitive dependency, ну и про сами nth normal form'ы.

Сделал зарядку для спины и пытался медитировать утром, но это как-то слишком сложно пока что и у меня не получается, особенно при том, что я не вижу никаких профитов в этом и занимаюсь этим просто-потому-что-почему-бы-и-нет ещё. Первую половину дня ещё пытался слушать на фоне классику, или хотя бы эмбиент, делить время на промежутки по 25 минут и следить за тем, на что я трачу время, но к середине дня мне всё это очень сильно надоело и я забил, одновременно с этим скатившись в прокрастинацию. Алсо допустил ошибку, свалившись в кровать с телефоном на лишний час, ох, не стоило этого делать.

Ещё ошибки: не составил на уже прошедший день никакого плана, забыл включить под конец дня тёплые тона в мониторе (я так не хочу ставить какие-то приложения, во-первых, это надо будет делать и на винду, и на убунту, а, во-вторых, насколько я помню, тот же f.lux - какая-то кривая дрянь, которая не работает, если какое-то приложение открывается в фулскрине), не смог сразу с утра встать с кровати, а провалился в сон на дополнительные полчаса (я знаю, что ето не помогает мне выспаться, но с утра я настолько не соображаю, что происходит вокруг, что даже имею трудности с тем, чтобы выключить будильник) и ещё пил совсем мало воды.

В целом, хоть я и половину дня чем-то занимался более-менее продуктивно, я всё равно успел очень мало. Ну, это ничего, пусть это будет некоторой нижней планкой. А сейчас составлю план на следующий день и пойду спать чуть-чуть пораньше.

https://youtu.be/XKxpNZ0SbBI
Первые пару минут звучат интересно, надо будет потом не забыть нормально послушать

https://youtu.be/cQ38d5903BY
Местами крутейший саундтрек к крутейшей игре (ну, на самом деле, как игра она не особо-то и хороша, но по части атмосферы - идеально). Думаю переиграть все пк-шные игры по Гарри Поттеру (по крайней мере первые три) и опробовать те, что для пс1 и пс2 (они, оказывается, довольно сильно отличаются от пк-шных и вроде как даже значительно объёмнее).
.jpg98 Кб, 778x1200
PoppyFanboy !VTLpv6lgGw 253 263077
>>262933

>завтра надо будет сходить в магазин и купить что-нибудь вроде курицы, творога и растительного чего-нибудь


На улице было слишком холодно и ветрено, поэтому не пошёл никуда. Да и в целом в плане питания сегодня сильно зафейлился: не выдержал и в середине дня буквально за минут пять уничтожил плитку шоколада (I have no regrets, она была слишком вкусной).

>А, чем занимался сегодня, потом напишу, там не особо интересно


Да, на самом деле, особо ничем. Единственное - побегал, но это был максимально неприятный опыт: дождь, сильный ветер прямо в лицо, причём он дул не порывами, а тупо непрерывно, я как будто бежал (или скорее уже полз, потому что в этот поток ветра я попал уже где-то под конец) против потока воздуха из мощного вентилятора. Забавно, что именно в такую погоду я, первый раз за последнюю неделю, наконец-то, пересёкся с кем-то ещё, кто тоже вышел на пробежку: обычно это происходило довольно часто и поэтому как-то непривычно совсем одному ползать по улице.

Сегодня немного готовился к экзаменам по матлогике и диффурам. По матлогике там был пока что совсем простой вводный материал из начала семестра: логические формулы, всякие законы, про то, что любую логическую формулу можно выразить только через NAND или NOR (я никогда не запомню, что из этого стрелка Пирса, а что - штрих Шеффера), ДНФ, КНФ, но даже тут я умудрился споткнуться о доказательство того, что, кроме упомянутых NAND и NOR, больше нет других логических связок, с помощью которых можно было бы выразить любое логическое выражение. Чёт оно как-то до меня не дошло сразу и я к тому же ещё долго не мог придумать нормальный гугл запрос ни на русском, ни на английском, чтобы найти доказательство. В итоге нашел вот это видео:
https://youtu.be/V2WmKL-KU6k
и всё встало на места (такое, конечно, затянутое объяснение, просто ужас, это определённо надо иметь талант, чтобы растянуть такое простое доказательство на чуть ли не десять минут).

По диффурам там тоже пока что всё более-менее просто и частично уже было до этого: линейно однородные системы уравнений, про линейную (не)зависимость решений и прочие такие пока что простые штуки с простыми алгебраическими доказательствами.

Начал проходить какой-то онлайн-курс по базам данных:
https://alison.com/courses/diploma-in-databases-and-t-sql-revised
и чего-то он мне не особо нравится, ну, или я просто слишком тупой, если бы мне не надо было это для английского в универе, я бы его дропнул и нашёл какую-нибудь книжку. Единственный однозначный плюс - лекции из курса неплохое упражнение на восприятие англоязычной речи (как-то так вышло, что этот скилл у меня в очень сильной просадке, иногда без субтитров вообще не понимаю, о чём идёт речь). Пока что там идут относительно простые штуки про нормализацию и я большую часть времени не смотрел лекции по курсу, а читал википедию про attributes, super-key, candidate key, functional dependecy, transitive dependency, ну и про сами nth normal form'ы.

Сделал зарядку для спины и пытался медитировать утром, но это как-то слишком сложно пока что и у меня не получается, особенно при том, что я не вижу никаких профитов в этом и занимаюсь этим просто-потому-что-почему-бы-и-нет ещё. Первую половину дня ещё пытался слушать на фоне классику, или хотя бы эмбиент, делить время на промежутки по 25 минут и следить за тем, на что я трачу время, но к середине дня мне всё это очень сильно надоело и я забил, одновременно с этим скатившись в прокрастинацию. Алсо допустил ошибку, свалившись в кровать с телефоном на лишний час, ох, не стоило этого делать.

Ещё ошибки: не составил на уже прошедший день никакого плана, забыл включить под конец дня тёплые тона в мониторе (я так не хочу ставить какие-то приложения, во-первых, это надо будет делать и на винду, и на убунту, а, во-вторых, насколько я помню, тот же f.lux - какая-то кривая дрянь, которая не работает, если какое-то приложение открывается в фулскрине), не смог сразу с утра встать с кровати, а провалился в сон на дополнительные полчаса (я знаю, что ето не помогает мне выспаться, но с утра я настолько не соображаю, что происходит вокруг, что даже имею трудности с тем, чтобы выключить будильник) и ещё пил совсем мало воды.

В целом, хоть я и половину дня чем-то занимался более-менее продуктивно, я всё равно успел очень мало. Ну, это ничего, пусть это будет некоторой нижней планкой. А сейчас составлю план на следующий день и пойду спать чуть-чуть пораньше.

https://youtu.be/XKxpNZ0SbBI
Первые пару минут звучат интересно, надо будет потом не забыть нормально послушать

https://youtu.be/cQ38d5903BY
Местами крутейший саундтрек к крутейшей игре (ну, на самом деле, как игра она не особо-то и хороша, но по части атмосферы - идеально). Думаю переиграть все пк-шные игры по Гарри Поттеру (по крайней мере первые три) и опробовать те, что для пс1 и пс2 (они, оказывается, довольно сильно отличаются от пк-шных и вроде как даже значительно объёмнее).
image.png2 Мб, 1625x828
254 263092
>>262004

Мне тоже нравится это место.
.jpg56 Кб, 1024x626
PoppyFanboy !VTLpv6lgGw 255 263254
Сегодня я чего-то совсем был плох: только в начале дня почитал теорию про особые точки систем диффуров и посмотрел, как решать задачи на их поиск и определение того, как они там выглядят, даже сами задачи решать не стал. После этого я на что-то отвлёкся и залип на следующие пару часов. Потом всё же решил как-то реабилитироваться и вышел побегать, но и тут тоже зафейлился: еле-еле протянул 25 минут бега и помер (хотя обещал себе в самом начале бежать максимально медленно и за счёт этого протянуть чуть больше). Не знаю, где бегать ещё так, чтобы не приходилось переходить дорогу и чтобы маршрут был достаточно длинным и не надо было бегать по какому-то маленькому кругу: вблизи дома есть два маршрута, но один из них немного коротковат, но, по крайней мере, частично пролегает рядом с какими-то деревьями, а второй - нормальный по длине, но какой-то конченый: постоянно вблизи с какими-то домами и никаких зелёных насаждений.

В общем, после фейла с бегом я опять провалился в прокрастинацию (я даже не получал от этого удовольствия: не играл в игры и не смотрел мультики), а под конец дня решил окончательно добить себя едой в фастфуде: дело в том, что творог с кефиром на завтрак как-то слишком хорошо зашёл и я не чувствовал голод, даже когда уже подошло время обеда, за счёт чего смог в итоге весь день довольно неплохо продержаться без вредной еды, но после ужина всё равно чувствовалось какая-то неудовлетворённость (чисто на глаз я съел довольно мало углеводов). Я вроде и был сыт, но от плитки шоколада на тот момент не отказался бы, поэтому принял максимально конченое решение: пошёл на поводу у своего желудка поесть в фастфуд. И ладно бы я ограничился одним стаканчиком мороженого, но я взял дополнительно картошку, бургер с курицей и залился газировкой. Я такая отвратительная мразь, ужас, я больше никогда не буду есть эту дрянь.

После этого остаток дня провёл аналогичным образом. Зачем вообще такая дрянь, как я, существует
PoppyFanboy !VTLpv6lgGw 256 263413
What a pathetic fool
Бездельничал весь день, немного поиграл во второй хотлайн и второй дарк соулс (опять забыл, почему я терпеть не могу эту игру и почему ни разу не проходил её до конца; удалил). Только вот сейчас смог себя заставить выучить два билета к экзамену по матлогике, да и то с мультиками на фоне, которые постоянно отвлекали, иначе вообще никак не мог начать.

Зарядку для спины не сделал, попытался помедитировать 5 минут, но в процессе мысли постоянно расползались. Пока что это выглядит как юзлесс ерунда

Вчера я думал, что причина моего фейла - это то, что я пошёл бегать в середине дня, из-за чего сильно вымотался и забил на всё, но сегодня всё повторилось, хоть я и не ходил на пробежку. Так что дело не в этом, ех.

Всё ещё самым сложным остаётся начать что-то делать. Попробую завтра пойти на поводу у своего желания постоянно есть какой-то контент на фоне и заниматься, хоть и не сильно концентрируясь, но хотя бы достаточное количество времени. Хотя, это тоже так себе затея: так я, конечно, смогу заставить себя начать что-то делать, но толку от этого, если половина моего внимания будет отдана мультикам или ещё чему-нибудь на фоне. Есть ещё идея начинать что-то делать с фоновым контентом, а потом, в течение работы, периодически убирать его, заменяя хотя бы на музыку (в идеале какую-нибудь классику, но я уже её наслушался за позавчерашний и поза-позавчерашний дни).

https://youtu.be/-x91zIMBOEE
https://youtu.be/6Z676IOGY7E
.jpg88 Кб, 714x1200
PoppyFanboy !VTLpv6lgGw 257 263550
Ччёрт, как же так вышло, что я стал ещё большим мусором, чем был изначально

>>263413

>Попробую завтра пойти на поводу у своего желания постоянно есть какой-то контент на фоне


Нет, плохая идея, очень сильно отвлекает. Короче, наверное, надо просто действовать просто более радикально: отрезать себе доступ к наушникам (внешних динамиков у меня нет, так что я никак не смогу извлечь звук из компа) и/или заниматься где-нибудь в другом месте, где нет пк (единственный вариант - кухонный стол, мда).

Утро вроде начал более-менее нормально, помедитировал (ну, так же, как и вчера), побегал (левел апнул сразу до 30 минут непрерывного бега, но в о-очень медленного, вроде в среднем чуть больше 10 км/ч; но я не выдохся, а под конец ускорился и мог бы пробежать в ускоренном темпе ещё некоторое время, но не стал). Потом сел решать диффуры, включив на фоне аниму, и всё, минус три часа и только одно решённое до конца задание. Даже не заметил, как пролетело время. А дальше провал в памяти только помню, что порисовал немного каракули з головы, надо сделать это ежедневной привычкой и вот я здесь, пишу ето.

Не знаю, что со всем этим делать. В гугле по запросу "how to stop multitasking" только всякий копирайтерский мусор, содержащий дженерик советы по типу "use apps to block distractions" (ничто не остановит меня от того, чтобы их выключить), "be mindful", "strengthen your focus" (ну это же просто, просто перестань это делать, всё же станет намного лучше). Короче, похоже на то, что да, единственный вариант - это держаться подальше от компа, когда он не сильно нужен.
PoppyFanboy !VTLpv6lgGw 258 263751
Хотел проснуться чуть раньше, но будильник на телефоне почему-то не сработал. Вообще понятия не имею, что могло пойти не так: телефон был на зарядке и не выключался, все три ползунка громкости в микшере на максимуме, беззвучный режим включен не был, будильник точно был выставлен с вечера, у приложения будильника все разрешения вроде есть. Выставил будильник, чтобы он зазвонил через минуту - сработал. Короче, не знаю, неприятно как-то. Скачал другой будильник, вместо дефолтного, надеюсь, с ним всё будет нормально.

Отсутствие доступа к наушникам немного помогло, но я всё равно довольно много отвлекался. Хотел с утра по-быстрому заполнить проект-для-универа-базу-данных тестовыми значениями, но это чёт растянулось на целый час (да, опять постоянно отвлекался, потому что мне было лень и неинтересно) и я так и не доделал. Впрочем, это уже не так плохо, как было вчера, хотя бы что-то.

Съездил на пару, одну, только чтобы узнать, как я там написал контрольную по матлогике, по нормальным алгоритмам и машинам тьюринга. Контрольную написал норм, но настроение себе заруинил, лучше бы не ездил туда вообще сегодня. По дороге туда-обратно читал Танненбаума про компьютеры. Шум в автобусе вроде не очень сильно отвлекает, так что вполне можно читать без наушников. Я его уже начинал чуть-чуть читать недели полторы назад, но к своему стыду не то чтобы всё забыл, но всё равно надо было освежить в голове, поэтому начал с первой главы. Довольно мало в итоге прочёл, но хоть что-то, обычно в автобусе я вообще залипаю в окно.

Дома, вечером, хотел по-быстрому написать простенькую программку на ассемблере для студпроекта, которая должна была печатать через запятую числа от n до 0 (с промежуточным буфером), но споткнулся о кучу камней, постоянно ничего не получалось. В итоге вот доделал, но она получилась страшная и плохая. На фоне ничего не слушал, это немного помогло сконцентрировать внимание, но я всё равно очень сильно тупил и иногда отвлекался.

Вроде сегодня в целом чуть лучше, но:
- я не делал перерывов, из-за чего зацикливался на чём-то одном и из-за этого очень сильно тормозил
- я не сделал зарядку для спины и не помедитировал с утра
- я не делал трекинг времени и не до конца заполнил калькулятор калорий
- не порисовал
- не поготовился ни к одному экзамену, хотя должен делать в этом направлении хотя бы что-то каждый день
- я всё ещё лох

https://youtu.be/uAOR6ib95kQ
PoppyFanboy !VTLpv6lgGw 258 263751
Хотел проснуться чуть раньше, но будильник на телефоне почему-то не сработал. Вообще понятия не имею, что могло пойти не так: телефон был на зарядке и не выключался, все три ползунка громкости в микшере на максимуме, беззвучный режим включен не был, будильник точно был выставлен с вечера, у приложения будильника все разрешения вроде есть. Выставил будильник, чтобы он зазвонил через минуту - сработал. Короче, не знаю, неприятно как-то. Скачал другой будильник, вместо дефолтного, надеюсь, с ним всё будет нормально.

Отсутствие доступа к наушникам немного помогло, но я всё равно довольно много отвлекался. Хотел с утра по-быстрому заполнить проект-для-универа-базу-данных тестовыми значениями, но это чёт растянулось на целый час (да, опять постоянно отвлекался, потому что мне было лень и неинтересно) и я так и не доделал. Впрочем, это уже не так плохо, как было вчера, хотя бы что-то.

Съездил на пару, одну, только чтобы узнать, как я там написал контрольную по матлогике, по нормальным алгоритмам и машинам тьюринга. Контрольную написал норм, но настроение себе заруинил, лучше бы не ездил туда вообще сегодня. По дороге туда-обратно читал Танненбаума про компьютеры. Шум в автобусе вроде не очень сильно отвлекает, так что вполне можно читать без наушников. Я его уже начинал чуть-чуть читать недели полторы назад, но к своему стыду не то чтобы всё забыл, но всё равно надо было освежить в голове, поэтому начал с первой главы. Довольно мало в итоге прочёл, но хоть что-то, обычно в автобусе я вообще залипаю в окно.

Дома, вечером, хотел по-быстрому написать простенькую программку на ассемблере для студпроекта, которая должна была печатать через запятую числа от n до 0 (с промежуточным буфером), но споткнулся о кучу камней, постоянно ничего не получалось. В итоге вот доделал, но она получилась страшная и плохая. На фоне ничего не слушал, это немного помогло сконцентрировать внимание, но я всё равно очень сильно тупил и иногда отвлекался.

Вроде сегодня в целом чуть лучше, но:
- я не делал перерывов, из-за чего зацикливался на чём-то одном и из-за этого очень сильно тормозил
- я не сделал зарядку для спины и не помедитировал с утра
- я не делал трекинг времени и не до конца заполнил калькулятор калорий
- не порисовал
- не поготовился ни к одному экзамену, хотя должен делать в этом направлении хотя бы что-то каждый день
- я всё ещё лох

https://youtu.be/uAOR6ib95kQ
.jpg155 Кб, 933x1199
PoppyFanboy !VTLpv6lgGw 259 264140
Всё ещё пребываю в каком-то тупом овощном состоянии. Сегодня пробовал на день отказаться от фоновой музыки и в принципе фонового контента, но не помогло: всё равно очень долго не мог ничего начать делать. Вообще не понимаю сейчас, как заставлять себя делать что-либо, просто не получается. Трюк с "n-minute rule", когда ты говоришь себе: "Ну, вот сейчас n минут позанимаюсь этим и если совсем невмоготу будет, не стану продолжать", - на мне вообще как-то не особо работает: ну, n минут я что-то делаю, а потом забиваю и отвлекаюсь на час.

В итоге сегодня вышел ещё один день слитый в никуда.

Вчера был на студпроекте, но ничего в течение тех трёх часов особо не сделал: все занимались той программой, которая читает число из JCL-скипта (а с этим там отдельная возня из-за того, что входной параметр - это строка в EBCDIC'e, из-за чего приходится конвертировать её в число в двоичном виде, прежде чем засунуть в регистр), а потом выводит через буфер обратный отсчёт от заданного числа (то есть теперь надо конвертировать обратно в символьный формат), а я как лох чего-то сидел, пытался убрать незначащие нули из вывода (с помощью модной команды TRT, которая ищет символы), но в итоге вышло только заменить нули на пробелы. И ко всему прочему у меня вышел какой-то конченый код без комментариев и с бессмысленными идентификаторами регистров.

После студпроекта ещё пришлось много времени потратить на то, чтобы съездить продлить карточку для общественного транспорта, потом я пошёл бегать и, вот так как-то супер-незаметно наступил вечер, а я по сути вообще ещё ничего не сделал, а уже глаза закрывались от недосыпа. Но, но, я твёрдо решил не ложиться спать и сел играть во второй хотлайн (полтора часа не мог пройти два каких-то тупых уровня с кучей стёкол на S ранг; один из них так и не получилось добить). Сложно сказать, что мной тогда руководило. Так ничего и не сделав, лёг в половине одиннадцатого спать.

Сегодня проснулся поздно относительно того, во сколько я лёг, часов в десять, и потом ещё часа два-три лежал в кровати. Так победим. Всё же к полудню заставил себя подняться из горизонтального положения, поел творога с кефиром (и почему я раньше так не завтракал, идеальнейшая еда) и всё, что было дальше - не помню. Помню только, что в какой-то момент меня зачем-то дёрнуло на улицу побегать, супер-неразумное решение по крайней мере по двум причинам: во-первых, сегодня был праздник отдыха на природе и шашлыков, из-за чего вся около-парковая территория была заполнена толпами людей, во-вторых, мне бегать два дня подряд больше пяти километров (а сегодня я, естественно, рассчитывал пробежать никак не меньше, чем вчера) tyzhelovato.

Но, в конечном итоге короче, в общем, в итоге единственной существенной проблемой оказался я сам: поначалу всё шло относительно неплохо, я бежал в средне-медленном темпе (телефон показывает одиннадцать километров в час с копейками в среднем), но случайно свернул из парка в лес. Всё ещё ничего не предвещало беды, пока ровные тропинки не сменились сначала на какие-то микро-холмы, как будто специально сделанные для экстремальных господ на вот этих мелких велосипедах, которые ещё прыгают как легушьки. Это уже вносило определённые неудобства, но я решил не сворачивать назад, потому что думал, что уже вот-вот куда-нибудь выбегу. Собственно, да, так оно и случилось: пробежав ещё немного по этой холмистой местности, преодолев микро-каньон и продравшись через ветки, я, наконец-то выбежал из леса, но, oh boy, тут мои страдания только начинались.

Я попал на грунтово-глиняную дорогу, огибающую лес, всю изрытую колёсами каких-то тракторов, с выбоинами и ямами, заполненные почему-то ещё не высохшей грязью. И мне надо было пробежать как минимум столько же, сколько я бежал по лесу. Лучше бы я перешёл на шаг и забил на всё: не говоря о том, что в процессе бега я пару раз чуть не упал, подскользнувшись на грязи и постоянно спотыкался о колеи, оставленные тракторами, я случайно угодил одной ногой по щиколотку в какую-то воронку, вырытую в земле. Понятия не имею, как мне удалось её на ходу вытащить под тем же углом, что она вошла туда, жуть. Короче, мне всё же удалось выжить и добежать свои тридцать минут почти без остановок (кроме вынужденных двух раз, когда переходил по самодельным мостам из палок какие-то ручьи), но это было отвратительно. Не знаю, как я выглядел со стороны, во время бега меня это не сильно волнует, но, думаю, меня вполне можно было принять за какую-нибудь лесную тварь вроде лешего: нечто жуткое с запутанными волосами, наполовину закрывающими морду, и по колено в грязи.

Такой вот жуткой тренировкой я, наконец-то, выполнил цель C25K - три непрерывных беговых сессии по 30 минут подряд, потратив, правда, на это 34 тренировки, вместо 27. Последний, сегодняшний результат - 40 минут = 5 минут шага + 30 бега + 5 шага и где-то 7 километров, то есть за 30 минут бега вышло где-то 5.6 километров. По темпу всё ещё хуже, чем прошлой весной, тогда я мог 5 км, но за 25 минут.

Пришёл домой, естественно, устал, пошёл лежать-отдыхать, и опять наступил вечер, а я ничего не сделал. Всё же умудрился вот сейчас заставить себя сделать домашнее задание по диффурам, но на этом всё. А хотел сделать хотя бы их с утра, чтобы не ложиться поздно, но даже в этом зафейлился. Пойду спать.

https://youtu.be/HuJNhd65Apk
Я не слушал полностью, но так, вроде неплохо. Но WLFGRL у них всё равно лучше звучит.

https://youtu.be/0p631ZF2Fuk
Немного чилловая вариация future funk'а.

https://youtu.be/i_9ohMJJeuU
Слушал это, пока бегал сегодня. Какой-то блеклый и смазанный подобрали саундтрек, у первых двух частей значительно лучше был. Неудивительно, что я его вообще не запомнил, когда играл когда-то давно (только The White Heat - This Is My Life запомнилась, но она тоже так себе).

Хмм, надо бы переслушать саундтрек к nfs'ам (mw, carbon, undeground 1/2).
.jpg155 Кб, 933x1199
PoppyFanboy !VTLpv6lgGw 259 264140
Всё ещё пребываю в каком-то тупом овощном состоянии. Сегодня пробовал на день отказаться от фоновой музыки и в принципе фонового контента, но не помогло: всё равно очень долго не мог ничего начать делать. Вообще не понимаю сейчас, как заставлять себя делать что-либо, просто не получается. Трюк с "n-minute rule", когда ты говоришь себе: "Ну, вот сейчас n минут позанимаюсь этим и если совсем невмоготу будет, не стану продолжать", - на мне вообще как-то не особо работает: ну, n минут я что-то делаю, а потом забиваю и отвлекаюсь на час.

В итоге сегодня вышел ещё один день слитый в никуда.

Вчера был на студпроекте, но ничего в течение тех трёх часов особо не сделал: все занимались той программой, которая читает число из JCL-скипта (а с этим там отдельная возня из-за того, что входной параметр - это строка в EBCDIC'e, из-за чего приходится конвертировать её в число в двоичном виде, прежде чем засунуть в регистр), а потом выводит через буфер обратный отсчёт от заданного числа (то есть теперь надо конвертировать обратно в символьный формат), а я как лох чего-то сидел, пытался убрать незначащие нули из вывода (с помощью модной команды TRT, которая ищет символы), но в итоге вышло только заменить нули на пробелы. И ко всему прочему у меня вышел какой-то конченый код без комментариев и с бессмысленными идентификаторами регистров.

После студпроекта ещё пришлось много времени потратить на то, чтобы съездить продлить карточку для общественного транспорта, потом я пошёл бегать и, вот так как-то супер-незаметно наступил вечер, а я по сути вообще ещё ничего не сделал, а уже глаза закрывались от недосыпа. Но, но, я твёрдо решил не ложиться спать и сел играть во второй хотлайн (полтора часа не мог пройти два каких-то тупых уровня с кучей стёкол на S ранг; один из них так и не получилось добить). Сложно сказать, что мной тогда руководило. Так ничего и не сделав, лёг в половине одиннадцатого спать.

Сегодня проснулся поздно относительно того, во сколько я лёг, часов в десять, и потом ещё часа два-три лежал в кровати. Так победим. Всё же к полудню заставил себя подняться из горизонтального положения, поел творога с кефиром (и почему я раньше так не завтракал, идеальнейшая еда) и всё, что было дальше - не помню. Помню только, что в какой-то момент меня зачем-то дёрнуло на улицу побегать, супер-неразумное решение по крайней мере по двум причинам: во-первых, сегодня был праздник отдыха на природе и шашлыков, из-за чего вся около-парковая территория была заполнена толпами людей, во-вторых, мне бегать два дня подряд больше пяти километров (а сегодня я, естественно, рассчитывал пробежать никак не меньше, чем вчера) tyzhelovato.

Но, в конечном итоге короче, в общем, в итоге единственной существенной проблемой оказался я сам: поначалу всё шло относительно неплохо, я бежал в средне-медленном темпе (телефон показывает одиннадцать километров в час с копейками в среднем), но случайно свернул из парка в лес. Всё ещё ничего не предвещало беды, пока ровные тропинки не сменились сначала на какие-то микро-холмы, как будто специально сделанные для экстремальных господ на вот этих мелких велосипедах, которые ещё прыгают как легушьки. Это уже вносило определённые неудобства, но я решил не сворачивать назад, потому что думал, что уже вот-вот куда-нибудь выбегу. Собственно, да, так оно и случилось: пробежав ещё немного по этой холмистой местности, преодолев микро-каньон и продравшись через ветки, я, наконец-то выбежал из леса, но, oh boy, тут мои страдания только начинались.

Я попал на грунтово-глиняную дорогу, огибающую лес, всю изрытую колёсами каких-то тракторов, с выбоинами и ямами, заполненные почему-то ещё не высохшей грязью. И мне надо было пробежать как минимум столько же, сколько я бежал по лесу. Лучше бы я перешёл на шаг и забил на всё: не говоря о том, что в процессе бега я пару раз чуть не упал, подскользнувшись на грязи и постоянно спотыкался о колеи, оставленные тракторами, я случайно угодил одной ногой по щиколотку в какую-то воронку, вырытую в земле. Понятия не имею, как мне удалось её на ходу вытащить под тем же углом, что она вошла туда, жуть. Короче, мне всё же удалось выжить и добежать свои тридцать минут почти без остановок (кроме вынужденных двух раз, когда переходил по самодельным мостам из палок какие-то ручьи), но это было отвратительно. Не знаю, как я выглядел со стороны, во время бега меня это не сильно волнует, но, думаю, меня вполне можно было принять за какую-нибудь лесную тварь вроде лешего: нечто жуткое с запутанными волосами, наполовину закрывающими морду, и по колено в грязи.

Такой вот жуткой тренировкой я, наконец-то, выполнил цель C25K - три непрерывных беговых сессии по 30 минут подряд, потратив, правда, на это 34 тренировки, вместо 27. Последний, сегодняшний результат - 40 минут = 5 минут шага + 30 бега + 5 шага и где-то 7 километров, то есть за 30 минут бега вышло где-то 5.6 километров. По темпу всё ещё хуже, чем прошлой весной, тогда я мог 5 км, но за 25 минут.

Пришёл домой, естественно, устал, пошёл лежать-отдыхать, и опять наступил вечер, а я ничего не сделал. Всё же умудрился вот сейчас заставить себя сделать домашнее задание по диффурам, но на этом всё. А хотел сделать хотя бы их с утра, чтобы не ложиться поздно, но даже в этом зафейлился. Пойду спать.

https://youtu.be/HuJNhd65Apk
Я не слушал полностью, но так, вроде неплохо. Но WLFGRL у них всё равно лучше звучит.

https://youtu.be/0p631ZF2Fuk
Немного чилловая вариация future funk'а.

https://youtu.be/i_9ohMJJeuU
Слушал это, пока бегал сегодня. Какой-то блеклый и смазанный подобрали саундтрек, у первых двух частей значительно лучше был. Неудивительно, что я его вообще не запомнил, когда играл когда-то давно (только The White Heat - This Is My Life запомнилась, но она тоже так себе).

Хмм, надо бы переслушать саундтрек к nfs'ам (mw, carbon, undeground 1/2).
два.jpg86 Кб, 957x1200
PoppyFanboy !VTLpv6lgGw 260 264754
Что-то я совсем расклеился. Вчера так вообще что-то страшное было. Завтра склеюсь обратно, надеюсь.

В пятницу большую часть времени был на парах, вроде выучил пару билетов по диффурам, попробовал наскоком впихнуть в себя какие-то базовые штуки, связанные с сетями и интернетом, но не нашёл ни одной нормальной большой статьи, которая бы покрывала поверхностно все основные штуки. Что-то почитал урывками, как бы понял, но не понял, осталось много пробелов.

В субботу был на студпроекте, пытался сделать простейшищей сервер и клиент на си, но чего-то ничего не вышло. Когда вернулся, не помню, что делал, вроде как обычно остаток дня слил на какой-то аутизм.

Вчера передо мной стояла только одна единственная простейшая задача - подготовиться к английскому в универе на следующий день, чтобы отделаться от него и получить свой грязный зачёт. Там надо было сделать отчёт по какому-нибудь онлайн-курсу, который надо было пройти в течение семестра (чего я, естественно, не сделал и нагло смухлевал, сделав отфотошопленные скриншоты, где у меня 100% все тесты пройдены и все лекции просмотрены; это был как раз тот >>263077 курс по T-SQL), и ещё несколько простейших штук, которые заняли бы все суммарно от силы час-полтора. Я встал, я поел, я побегал, и всё, залип в стримы и помер, а хотел всё сделать пораньше, с утра. В итоге не сделал это ни утром, ни днём, ни вечером, ни ночью. Собрался только к утру уже следующего дня: потратил на всё не более часа. Eehhhh

Сегодня почти разделался с английским (там делать-то нечего было, я, охх, я такая скотина), выучил пару билетов по диффурам, дозаполнил тестовыми данными таблицу для проекта по субд для универа, а остальное время опять потратил на прослушивание стримов.

Сейчас надо сконцентрироваться на решении всякой ерунды, связанной с универом, но меня так воротит от всего этого.

https://youtu.be/v36KMdiWHao
https://youtu.be/Gz0tk_p45eo
https://youtu.be/Q3EEaPj-5qs
https://youtu.be/lk5iMgG-WJI
https://youtu.be/XhNJPqBwKcQ
https://youtu.be/7trRQX0XP9k

Вот эти супер-хорошие, но, in contrast, остальные более-менее популярные треки Асапа Роки, Скулбоя, Кендрика Ламара - ну, просто лютейший скучный неритмичный мусор.
https://youtu.be/5OdDmC1-p4E
https://youtu.be/_L2vJEb6lVE
https://youtu.be/5_qAwMHhkwQ
https://youtu.be/tvTRZJ-4EyI
https://youtu.be/Iuq9XK6tojs
https://youtu.be/Kbj2Zss-5GY

Вроде какой-то мусор, но звучит всё равно неплохо
https://youtu.be/OxSkIlYW8ZI

Первый трек много раз слышал во всяких футуре фанк микстейпах, но там он был в какой-то обработке. Оно вроде и хорошее, но всё одинаковое слишком.
https://youtu.be/6GEI3PpXEAo
два.jpg86 Кб, 957x1200
PoppyFanboy !VTLpv6lgGw 260 264754
Что-то я совсем расклеился. Вчера так вообще что-то страшное было. Завтра склеюсь обратно, надеюсь.

В пятницу большую часть времени был на парах, вроде выучил пару билетов по диффурам, попробовал наскоком впихнуть в себя какие-то базовые штуки, связанные с сетями и интернетом, но не нашёл ни одной нормальной большой статьи, которая бы покрывала поверхностно все основные штуки. Что-то почитал урывками, как бы понял, но не понял, осталось много пробелов.

В субботу был на студпроекте, пытался сделать простейшищей сервер и клиент на си, но чего-то ничего не вышло. Когда вернулся, не помню, что делал, вроде как обычно остаток дня слил на какой-то аутизм.

Вчера передо мной стояла только одна единственная простейшая задача - подготовиться к английскому в универе на следующий день, чтобы отделаться от него и получить свой грязный зачёт. Там надо было сделать отчёт по какому-нибудь онлайн-курсу, который надо было пройти в течение семестра (чего я, естественно, не сделал и нагло смухлевал, сделав отфотошопленные скриншоты, где у меня 100% все тесты пройдены и все лекции просмотрены; это был как раз тот >>263077 курс по T-SQL), и ещё несколько простейших штук, которые заняли бы все суммарно от силы час-полтора. Я встал, я поел, я побегал, и всё, залип в стримы и помер, а хотел всё сделать пораньше, с утра. В итоге не сделал это ни утром, ни днём, ни вечером, ни ночью. Собрался только к утру уже следующего дня: потратил на всё не более часа. Eehhhh

Сегодня почти разделался с английским (там делать-то нечего было, я, охх, я такая скотина), выучил пару билетов по диффурам, дозаполнил тестовыми данными таблицу для проекта по субд для универа, а остальное время опять потратил на прослушивание стримов.

Сейчас надо сконцентрироваться на решении всякой ерунды, связанной с универом, но меня так воротит от всего этого.

https://youtu.be/v36KMdiWHao
https://youtu.be/Gz0tk_p45eo
https://youtu.be/Q3EEaPj-5qs
https://youtu.be/lk5iMgG-WJI
https://youtu.be/XhNJPqBwKcQ
https://youtu.be/7trRQX0XP9k

Вот эти супер-хорошие, но, in contrast, остальные более-менее популярные треки Асапа Роки, Скулбоя, Кендрика Ламара - ну, просто лютейший скучный неритмичный мусор.
https://youtu.be/5OdDmC1-p4E
https://youtu.be/_L2vJEb6lVE
https://youtu.be/5_qAwMHhkwQ
https://youtu.be/tvTRZJ-4EyI
https://youtu.be/Iuq9XK6tojs
https://youtu.be/Kbj2Zss-5GY

Вроде какой-то мусор, но звучит всё равно неплохо
https://youtu.be/OxSkIlYW8ZI

Первый трек много раз слышал во всяких футуре фанк микстейпах, но там он был в какой-то обработке. Оно вроде и хорошее, но всё одинаковое слишком.
https://youtu.be/6GEI3PpXEAo
D6g29W0AA4VBv.jpg114 Кб, 1200x930
PoppyFanboy !VTLpv6lgGw 261 264955
Минус день? Минус день. Есть ли смысл винить себя в этом? Не знаю, я попробую особо не париться насчёт этого, жить, постоянно упрекая себя в собственной тупости я уже попробовал, особо это не помогает. Самобичеванием я не верну упущенный день, надо отталкиваться от того, что есть конкретно в данный момент.

Опять чего-то ничего не вышло. Поздно проснулся, утром очень долго тупил, ничего не хотелось делать. Еле как заставил себя прибраться в комнате и побегать. Сегодня выжал из себя просто всё, что у меня есть: пробежал 6 км за 30 минут. Это лучше, чем мой топовый результат прошлого года, но, глядя на результаты других людей, это как-то так себе, особенно с учётом того, что я бегаю на постоянной основе в среднем через день уже два с половиной месяца. Не знаю, зачем, никакого волшебного эффекта нет, удовольствия я всё ещё не получаю, вес у меня было качнулся немного ниже 66, но сейчас обратно устаканился в 66.7 кг. Впрочем, неудивительно, я каждый день поглощаю просто кучу еды. Сегодня, кстати, купил всяких развесных конфет, в том числе взял попробовать немного лакричных, но они оказались слишком мерзкими. Настолько, что пришлось выбросить, эх. Короче, утро, продлившееся с десяти до двух часов дня, было каким-то супер-медленным, я плохо соображал и ничего полезного не сделал. Пытался медитировать две минуты, но даже на таком маленьком интервале времени мысли постоянно расползались

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

Сейчас, вечером, пытался заставить себя почитать теорию по диффурам, но я вообще ничего не понял. Какая-то стена бессмысленного текста и нет нормальных примеров задач. Как обычно фоном поставил какой-то стрим и, в итоге, две трети внимания было сосредоточено не на диффурах. Опять та же самая >>263550 проблема с мультитаскингом, которую непонятно как надо решать. А просто позаниматься в тишине я не могу, мне становится смертельно скучно. И что делать

В следующем семестре в универе есть вариант дропнуть английский и начать немецкий или испанский, не знаю, что выбрать. На английском продолжится ESP (English for Specific Purposes), который в теории должен окончиться защитой какой-то курсовой на английском, и это немного пугает, я на русском-то говорю как инвалид, а на английском вообще никак не могу почти. А всё началось с того, что я набрал всего лишь на несколько баллов выше порога на распределительном тесте в начале первого семестра и меня засунули в самую топовую группу. Надо было проситься перевестись в группу похуже и тогда бы у меня ESP начинался бы только со следующего семестра и никаких публичных выступлений на английском тоже бы не предвиделось.

А немецкий и испанский в теории должны начаться с нуля, но только при условии, что наберётся определённое количество желающих. Было бы тупо забавно изучать испанский, но не знаю, не могу определиться, стоит ли вообще менять английский на что-то из этого.

Пусть планы на следующий день опять будут тут
Снижу планку ожиданий до минимума. Если опять ничего путного не выйдет, то снижу её вообще в ноль.
7.40
- проснуться, умыться, попытаться помедитировать две минуты
- съездить на студпроект
- по дороге туда-обратно почитать танненбаума про компы или что-нибудь другое хотя бы суммарно десять минут

15.30 (не знаю, во сколько точно приеду, может, получится вообще на полтора часа раньше)
- вернуться домой
- поспать 30 минут (возможно, попробовать исполнить coffee nap)
- 1 час делать домашку по программированию (я забил и там много накопилось)
- зарядка для спины хотя бы 20 минут, хотя бы минимальный сет упражнений
- 1 час разбираться с диффурами: прочитать два параграфа теории, сделать домашку. Заниматься не у себя в комнате
- отдохнуть, возможно, поиграть во что-нибудь, но не более минут 40

22.00
- 1 час готовиться к экзамену по матлогике. Заниматься не у себя в комнате
- хотя бы 20 минут порисовать хотя бы какие-нибудь каракули, сука, я хочу, я вообще всё хочу, но мне надо читать про зависимость решения от начальных условий и параметров. приближённое решение дифференциальных уравнений

1.00
- умыться, лечь спать

Если получится, то замечательно, не получится - попробую ещё раз.
D6g29W0AA4VBv.jpg114 Кб, 1200x930
PoppyFanboy !VTLpv6lgGw 261 264955
Минус день? Минус день. Есть ли смысл винить себя в этом? Не знаю, я попробую особо не париться насчёт этого, жить, постоянно упрекая себя в собственной тупости я уже попробовал, особо это не помогает. Самобичеванием я не верну упущенный день, надо отталкиваться от того, что есть конкретно в данный момент.

Опять чего-то ничего не вышло. Поздно проснулся, утром очень долго тупил, ничего не хотелось делать. Еле как заставил себя прибраться в комнате и побегать. Сегодня выжал из себя просто всё, что у меня есть: пробежал 6 км за 30 минут. Это лучше, чем мой топовый результат прошлого года, но, глядя на результаты других людей, это как-то так себе, особенно с учётом того, что я бегаю на постоянной основе в среднем через день уже два с половиной месяца. Не знаю, зачем, никакого волшебного эффекта нет, удовольствия я всё ещё не получаю, вес у меня было качнулся немного ниже 66, но сейчас обратно устаканился в 66.7 кг. Впрочем, неудивительно, я каждый день поглощаю просто кучу еды. Сегодня, кстати, купил всяких развесных конфет, в том числе взял попробовать немного лакричных, но они оказались слишком мерзкими. Настолько, что пришлось выбросить, эх. Короче, утро, продлившееся с десяти до двух часов дня, было каким-то супер-медленным, я плохо соображал и ничего полезного не сделал. Пытался медитировать две минуты, но даже на таком маленьком интервале времени мысли постоянно расползались

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

Сейчас, вечером, пытался заставить себя почитать теорию по диффурам, но я вообще ничего не понял. Какая-то стена бессмысленного текста и нет нормальных примеров задач. Как обычно фоном поставил какой-то стрим и, в итоге, две трети внимания было сосредоточено не на диффурах. Опять та же самая >>263550 проблема с мультитаскингом, которую непонятно как надо решать. А просто позаниматься в тишине я не могу, мне становится смертельно скучно. И что делать

В следующем семестре в универе есть вариант дропнуть английский и начать немецкий или испанский, не знаю, что выбрать. На английском продолжится ESP (English for Specific Purposes), который в теории должен окончиться защитой какой-то курсовой на английском, и это немного пугает, я на русском-то говорю как инвалид, а на английском вообще никак не могу почти. А всё началось с того, что я набрал всего лишь на несколько баллов выше порога на распределительном тесте в начале первого семестра и меня засунули в самую топовую группу. Надо было проситься перевестись в группу похуже и тогда бы у меня ESP начинался бы только со следующего семестра и никаких публичных выступлений на английском тоже бы не предвиделось.

А немецкий и испанский в теории должны начаться с нуля, но только при условии, что наберётся определённое количество желающих. Было бы тупо забавно изучать испанский, но не знаю, не могу определиться, стоит ли вообще менять английский на что-то из этого.

Пусть планы на следующий день опять будут тут
Снижу планку ожиданий до минимума. Если опять ничего путного не выйдет, то снижу её вообще в ноль.
7.40
- проснуться, умыться, попытаться помедитировать две минуты
- съездить на студпроект
- по дороге туда-обратно почитать танненбаума про компы или что-нибудь другое хотя бы суммарно десять минут

15.30 (не знаю, во сколько точно приеду, может, получится вообще на полтора часа раньше)
- вернуться домой
- поспать 30 минут (возможно, попробовать исполнить coffee nap)
- 1 час делать домашку по программированию (я забил и там много накопилось)
- зарядка для спины хотя бы 20 минут, хотя бы минимальный сет упражнений
- 1 час разбираться с диффурами: прочитать два параграфа теории, сделать домашку. Заниматься не у себя в комнате
- отдохнуть, возможно, поиграть во что-нибудь, но не более минут 40

22.00
- 1 час готовиться к экзамену по матлогике. Заниматься не у себя в комнате
- хотя бы 20 минут порисовать хотя бы какие-нибудь каракули, сука, я хочу, я вообще всё хочу, но мне надо читать про зависимость решения от начальных условий и параметров. приближённое решение дифференциальных уравнений

1.00
- умыться, лечь спать

Если получится, то замечательно, не получится - попробую ещё раз.
.jpg81 Кб, 1200x1094
PoppyFanboy !VTLpv6lgGw 262 265108
>>264955

>съездить на студпроект


Чек. Пытался перелопатить >>264140 код той программы на ассемблере, чтобы она выводила числа без незначащих нулей и чтобы числа не были выровнены как в табличке, но чего-то не вышло. Получившаяся штука вообще странно работает: выводит несколько раз подряд первое число и завершает работу. Но зато без лишних пробелов и незначащих нулей

>почитать танненбаума про компы


Чек, но очень мало, страницы две-три: автобус, тварь сильно трясётся и солнце ещё слепило глаза. Всё ещё читаю вступительную часть.

>поспать 30 минут (возможно, попробовать исполнить coffee nap)


Чек. Впихнул в себя эту горькую гадость, поставил таймер на полчаса и лёг спать. Очнулся только через полтора часа (так и не понял, это мне приснилось, что я отключаю сигнал таймера или я и правда его отключил), никакого сильно положительного эффекта не заметил, хотя, не совсем честно с моей стороны так говорить, потому что во-первых, мне не с чем сравнивать (днём я редко сплю), а, во-вторых, я сегодня мало спал, неудивительно, что вместо 30 минут провалился в сон на полтора часа. Может, потом ещё попробую.

>1 час делать домашку по программированию


Чек. Вышло по времени больше, сколько конкретно - не помню. КПД не очень, из-за того, что опять поставил что-то фоном, но я кое-что сделал.

>1 час разбираться с диффурами


Решил сегодня не делать.

>зарядка для спины


Сделал минимальный сет упражнений.

>отдохнуть, возможно, поиграть во что-нибудь


Тоже нет, хотя стоило бы, наверное. Отдыхать надо чуть более осознанно

>1 час готовиться к экзамену по матлогике


Чек, разобрался чуть лучше с правилами вывода. Теперь чётко понимаю, что откуда там берётся. Занимался у себя в комнате за столом с компом. Ето плохо, надо было переместиться на кухню.

>хотя бы 20 минут порисовать хотя бы какие-нибудь каракули


Меньше двадцати минут. Нарисовал то, что попалось первым под руку - мышку для компа. Ну ладно, пока что важнее делать это каждый день.
Попытался помедитировать две минуты. Снова фейл, не вышло.
.jpg139 Кб, 1200x844
PoppyFanboy !VTLpv6lgGw 263 265214
>>265108
Опять мало спал. Съездил на пару по матану, закономерно ничего не понял на ней. По дороге читал танненбаума, опять очень мало. Прошёл пару билетов по матлогике про формульный образ секвенции.

Побегал: в среднем бежал чуть быстрее, чем в прошлый раз, за полчаса вышло шесть километров с копейками; очень сильно устали ноги: я почувствовал какую-то скованность уже на пятой минуте, а под конец, когда уже перешёл на шаг, было довольно больно идти. Зря я так, но хотя бы колени и прочие кости не болят, значит, я более-менее нормально бегу в плане техники (или я уже просто всё сломал). Поспал под кофе полчаса: намешал чуть поменьше, чем вчера, но всё равно горько и неприятный кислый привкус, вроде удалось даже заснуть, проснулся относительно легко. Завтра попробую ещё раз так поспать, но без кофе, чтобы сравнить. Сделал зарядку для спины.

Пытался понять теорию по диффурам, но не вышло, но, как оказалось, для решения задач она не особо важна. Порешал немного задач, вроде всё понятно, но, опять же, теорию я так и не понял, так что шаг влево-вправо, и всё, я уже не смогу решить чуть изменённый тип задачи.

Совсем немного порисовал. Нарисовал машинку с уродливыми пропорциями. Пытался медитировать три минуты. Поначалу постоянно отвлекался, но под конец удалось немного сконцентрироваться

Потерял какое-то количество времени на прокрастинацию, но, в целом, я вроде что-то сделал, правда, всё равно нет ощущения завершённости из-за того, что делаю не совсем то, что мне сейчас хочется, но пока что вынужден терпеть.

Опять поздно ложусь спать. Светать начинает всё раньше и раньше: ещё только четвёртый час ночи, а небо уже превратилось из чёрного в тёмно-синее. Это супер-неприятно, терпеть не могу ложиться спать засветло.

Завтра большую часть времени буду на парах, так что нет особого смысла расписывать подробный план.

https://youtu.be/NF1oUKeFEMM

Трип-хоп и местами спокен-ворд.
https://youtu.be/beOuR6Re7OU
https://youtu.be/b3GtXowzNTs
https://youtu.be/mCSmJd_f0Tc
.jpg191 Кб, 1200x785
PoppyFanboy !VTLpv6lgGw 264 265341
>>265214
Плохой пустой день
Съездил на пары. На контрольной по диффурам нормально решил только одну задачу, остальные либо не до конца, либо, скорее всего, неправильно. Надо будет потом перерешать. На лекции по диффурам разбирал билеты по ним же, по старым темам, пытаться сейчас понять что-то из текущего материала - бесполезно, лучше я последовательно, с начала. На матане были ряды фурье, но я чего-то ничего не понял, поэтому забил и продолжил читать диффуры. В автобусе, по дороге туда-обратно совсем-совсем немного почитал танненбаума (на самом деле, об этом можно было даже не упоминать, я прочитал страницы три от силы; в транспорте чего-то очень неудобно это делать).

Придя домой, сразу лёг поспать полчаса. Проснулся относительно легко, по ощущениям такой короткий сон без кофе ничем не отличается от етого coffee nap, но я всё равно завтра попробую ещё раз без кофе, а послезавтра - под кофе, чтобы окончательно убедиться.

Сделал зарядку для спины. Пытался медитировать три минуты, вроде получается чуть лучше, но всё равно мысли расползаются. Немного помогает делать шумные и глубокие вдохи.

Остаток дня ничем существенным не занимался, только наметил, что надо сделать для зачётов по паре предметов. Порисовал каракули, ради интереса послушал вступительные слова Эрика Олсона к его курсу. Жесть, он, конечно, хорошо говорит ртом, приятно слушать, хоть и мой низкий навык распознавания речи на слух немного подводит. Буду понемногу смотреть его, наверное.

Чувствую потребность в том, чтобы делать трекинг времени из-за того, что часто забываюсь и прокрастинирую, но не могу себя заставить. На улице слепит солнце, вообще нет ни одного облака. Судя по прогнозу, такая погода продлится как минимум ещё до конца выходных. Хорошо, что мне не надо будет выходить на улицу, кроме как один раз на пробежку, завтра, потому что находиться там практически невозможно.

завтра
10.30
- проснуться, умыться, поесть
- прибрать стол
- попытаться помедитировать 3.5 минуты
- пойти побегать 32 минуты, максимально медленно (< 11 км/ч)
13.00
- сделать кусок проекта по базам данных для универа (2 часа)
- написать summary по домашнему чтению для английского для универа (1 час)
17.00
- разобрать несколько билетов по матлогике (1.5 часа, заниматься не за столом с компом)
- 1 час почитать что-нибудь
- сделать зарядку для спины
- отдохнуть, поиграть во что-нибудь
21.30
- порисовать немного
- поготовиться 1.5 часа к какому-нибудь экзамену

Ладно, пока что так. Если не сделаю хотя бы три четверти, то в следующий раз буду требовать от себя меньше

https://youtu.be/YkU5pskq1LM
https://youtu.be/9tLAV3jnK54

https://youtu.be/oNGq16nHr-Q
https://youtu.be/lH7wGCV7x2c
https://youtu.be/7X9kpHB7Aow

Вау, что это
https://youtu.be/g83YqmYSjNU
.jpg191 Кб, 1200x785
PoppyFanboy !VTLpv6lgGw 264 265341
>>265214
Плохой пустой день
Съездил на пары. На контрольной по диффурам нормально решил только одну задачу, остальные либо не до конца, либо, скорее всего, неправильно. Надо будет потом перерешать. На лекции по диффурам разбирал билеты по ним же, по старым темам, пытаться сейчас понять что-то из текущего материала - бесполезно, лучше я последовательно, с начала. На матане были ряды фурье, но я чего-то ничего не понял, поэтому забил и продолжил читать диффуры. В автобусе, по дороге туда-обратно совсем-совсем немного почитал танненбаума (на самом деле, об этом можно было даже не упоминать, я прочитал страницы три от силы; в транспорте чего-то очень неудобно это делать).

Придя домой, сразу лёг поспать полчаса. Проснулся относительно легко, по ощущениям такой короткий сон без кофе ничем не отличается от етого coffee nap, но я всё равно завтра попробую ещё раз без кофе, а послезавтра - под кофе, чтобы окончательно убедиться.

Сделал зарядку для спины. Пытался медитировать три минуты, вроде получается чуть лучше, но всё равно мысли расползаются. Немного помогает делать шумные и глубокие вдохи.

Остаток дня ничем существенным не занимался, только наметил, что надо сделать для зачётов по паре предметов. Порисовал каракули, ради интереса послушал вступительные слова Эрика Олсона к его курсу. Жесть, он, конечно, хорошо говорит ртом, приятно слушать, хоть и мой низкий навык распознавания речи на слух немного подводит. Буду понемногу смотреть его, наверное.

Чувствую потребность в том, чтобы делать трекинг времени из-за того, что часто забываюсь и прокрастинирую, но не могу себя заставить. На улице слепит солнце, вообще нет ни одного облака. Судя по прогнозу, такая погода продлится как минимум ещё до конца выходных. Хорошо, что мне не надо будет выходить на улицу, кроме как один раз на пробежку, завтра, потому что находиться там практически невозможно.

завтра
10.30
- проснуться, умыться, поесть
- прибрать стол
- попытаться помедитировать 3.5 минуты
- пойти побегать 32 минуты, максимально медленно (< 11 км/ч)
13.00
- сделать кусок проекта по базам данных для универа (2 часа)
- написать summary по домашнему чтению для английского для универа (1 час)
17.00
- разобрать несколько билетов по матлогике (1.5 часа, заниматься не за столом с компом)
- 1 час почитать что-нибудь
- сделать зарядку для спины
- отдохнуть, поиграть во что-нибудь
21.30
- порисовать немного
- поготовиться 1.5 часа к какому-нибудь экзамену

Ладно, пока что так. Если не сделаю хотя бы три четверти, то в следующий раз буду требовать от себя меньше

https://youtu.be/YkU5pskq1LM
https://youtu.be/9tLAV3jnK54

https://youtu.be/oNGq16nHr-Q
https://youtu.be/lH7wGCV7x2c
https://youtu.be/7X9kpHB7Aow

Вау, что это
https://youtu.be/g83YqmYSjNU
.jpg74 Кб, 750x836
PoppyFanboy !VTLpv6lgGw 265 265467
Я вообще не понял, что это сейчас было. Такое ощущение, что день длился часа два-три от силы.

>>265341

>попытаться помедитировать 3.5 минуты


Да, получается чуть лучше

>пойти побегать 32 минуты


Да, но чего-то ноги болят, нужен перерыв в два дня. Он нужен был ещё несколько дней назад, после того, как я первый раз пробежал 6 км за полчаса, но я тогда забил и теперь пожинаю плоды своей дегенеративности. Не знаю, сколько по расстоянию пробежал, вроде довольно мало

>сделать кусок проекта по базам данных для универа


Да, и на это я вроде потратил большую часть дня, хотя ничего толком не сделал: немного переделал саму бд, нарисовал erd (та, что генерируется автоматом в dbms не отображает, какие атрибуты являются fk), еле как придумал, какие процедуры/функции, триггеры и view'ы можно сделать, реализовал две более-менее объёмных процедуры, создающих там что-то и одну функцию. Я вообще не знаю, как только лишь на это у меня ушло так много времени, хочется с силой впечатать своё лицо в стену.

>сделать зарядку для спины


Да

>порисовать немного


Порисовал всякую ерунду

На самом деле, вот так пытаться делать что-то каждый день - бесполезно, так привычка не выработается никогда: нужна последовательность cue -> routine -> reward, а у меня в случае с медитацией, зарядкой для спины и рисованием cue и reward просто отсутствуют, я искусственно заставляю себя это делать. Пока что успешно, но это не может продолжаться вечно. С бегом, кстати, у меня в этом плане удачно всё сложилось, потому что он self-rewarding: каждый раз, когда чувствовал, что надо немного разгрузить голову (cue), я выходил бегать и, собственно, получал reward - тридцать минут пустоты в голове.

Поставил приложение на телефон, которое каждые 20 минут спамит будильником. Может, так у меня получится чуть лучше чувствовать время. Попытаюсь переключаться с одного на другое почаще, чтобы не зацикливаться на чём-то одном.

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

https://youtu.be/A1HZH-1akc0
.jpg74 Кб, 750x836
PoppyFanboy !VTLpv6lgGw 265 265467
Я вообще не понял, что это сейчас было. Такое ощущение, что день длился часа два-три от силы.

>>265341

>попытаться помедитировать 3.5 минуты


Да, получается чуть лучше

>пойти побегать 32 минуты


Да, но чего-то ноги болят, нужен перерыв в два дня. Он нужен был ещё несколько дней назад, после того, как я первый раз пробежал 6 км за полчаса, но я тогда забил и теперь пожинаю плоды своей дегенеративности. Не знаю, сколько по расстоянию пробежал, вроде довольно мало

>сделать кусок проекта по базам данных для универа


Да, и на это я вроде потратил большую часть дня, хотя ничего толком не сделал: немного переделал саму бд, нарисовал erd (та, что генерируется автоматом в dbms не отображает, какие атрибуты являются fk), еле как придумал, какие процедуры/функции, триггеры и view'ы можно сделать, реализовал две более-менее объёмных процедуры, создающих там что-то и одну функцию. Я вообще не знаю, как только лишь на это у меня ушло так много времени, хочется с силой впечатать своё лицо в стену.

>сделать зарядку для спины


Да

>порисовать немного


Порисовал всякую ерунду

На самом деле, вот так пытаться делать что-то каждый день - бесполезно, так привычка не выработается никогда: нужна последовательность cue -> routine -> reward, а у меня в случае с медитацией, зарядкой для спины и рисованием cue и reward просто отсутствуют, я искусственно заставляю себя это делать. Пока что успешно, но это не может продолжаться вечно. С бегом, кстати, у меня в этом плане удачно всё сложилось, потому что он self-rewarding: каждый раз, когда чувствовал, что надо немного разгрузить голову (cue), я выходил бегать и, собственно, получал reward - тридцать минут пустоты в голове.

Поставил приложение на телефон, которое каждые 20 минут спамит будильником. Может, так у меня получится чуть лучше чувствовать время. Попытаюсь переключаться с одного на другое почаще, чтобы не зацикливаться на чём-то одном.

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

https://youtu.be/A1HZH-1akc0
.jpg313 Кб, 1200x1200
PoppyFanboy !VTLpv6lgGw 266 265596
>>265467
Опять то же самое, только я ещё не рисовал и не сделал зарядку для спины. С утра выполз за большой трёхсотграммовой шоколадкой (милка с орехами, нугой и карамелью). Хотел растянуть её хотя бы на пару дней, но вышло только на несколько часов. Больше не буду покупать ничего в таких больших упаковках.

Попытался медитировать четыре минуты. Вроде получается чуть лучше. Заметил, что вернуть фокус внимания можно относительно легко в промежуток времени между выдохом и вдохом.

Всё остальное время, как и вчера, потратил на тупой семестровый проект по базам данных для универа. Я не знаю, как так получается, я вообще ничего не понимаю, сука, я же только что вот проснулся. Как так вышло, что на эту вшивую дрянь я потратил целый день? Я же всего лишь: добавил немного триггеров (пара из них с курсорами; не знаю, насколько норм их использовать), добавил view'ов, еле-еле придумал 13 запросов к этой глупой и кривой БД, реализовал их, попутно разобравшись с тем, как там что работает (join'ы, group by'и и прочие штуки). Один из запросов получился каким-то совсем конченым: там очень большая вложенность и он сам по себе некрасивый, но не буду уже переделывать, работает, и ладно. И пофиксил несколько недочётов в скрипте, который создаёт бд. Всё, тут вообще делать-то нечего, но я как-то умудрился просидеть с этим целую кучу времени и при этом вдобавок ещё и получилось какая-то ересь.

>Поставил приложение на телефон, которое каждые 20 минут спамит будильником. Может, так у меня получится чуть лучше чувствовать время


Оно достало звонить так часто, и я вырубил телефон: всё равно им почти не пользуюсь дома. Надо попробовать поставить уведомления на каждый час тогда, наверное.
PoppyFanboy !VTLpv6lgGw 267 266415
Надо что-то делать с надвигающимися сессией и зачётной неделей, но мне так не хочется. Работоспособность на ну ле. Я по-прежнему какой-то паршивый, мерзкий и раздражительный. Тварь вроде меня должна содержаться в комнате размерами 5х5х5 м, покрытой изнутри армированными кислотоустойчивыми стальными плитами толщиной в 25,4 см, но сейчас она разгуливает на свободе (в основном по своей комнате, но это детали), совладаешь ли ты с этим монстром?

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

Во вторник почти ничего не делал: только сходил в универ показать свою БД. Выяснилось, что один из триггеров почему-то не обрабатывает все изменённые строки, а только первую попавшуюся. Ну, и там ещё по мелочи надо будет доделать и поставят зачёт. Потом займусь этим. Пока ехал туда-обратно, чуть не помер из-за сочетания духоты в переполненном автобусе и боли в ногах.

В среду весь день потратил на решение тупых домашек по программированию для универа (какие-то тупые бесконечные виндовс формы, которые проигрывают тупую музыку, создают тупые базы данных, ещё делают какую-то тупую ерунду), хотя планировал сделать их ну, за часа четыре максимум. По существу осталось только одно задание и я очень надеюсь, что мне его простят. Не помню, делал я ли зарядку для спины и пытался ли медитировать. Вроде нет.

Сегодня у меня уже сейчас наблюдается тотальнейший фейл по всему-всему: опять проснулся поздно, хотя планировал (уже три дня как) пофиксить режим и просыпаться хотя бы в восемь утра, вяло пытался готовиться к экзамену по матлогике, но прошёл катастрофически мало билетов (вообще не понял, по какому принципу выбирались правила вывода для секвенциального исчисления предикатов, почему там в одних правилах термы, а в других - переменные в аналогичных местах; это как бы не требуется обосновывать, это же задаётся аксиоматически, но, блин, должна же быть мотивация какая-то, не из воздуха же эти определения взялись). Сделал зарядку для спины ещё.

Побегал: особо не обращал внимание на темп, но, как оказалось потом, я начал слишком быстро и после 26 минут бега с постепенным снижением скорости закономерно сдох: закололо в боку и стало невозможно двигаться. Передохнул четыре минуты и потом зачем-то пробежал ещё четыре минуты в супер-медленном темпе. Короче, в итоге всё равно вышло только 7 км с копейками за тренировку в 40 минут и мне походу опять нужен либо перерыв в два дня, либо в следующий раз надо будет бежать в медленном темпе.

Залил свои надуманные проблемы полуторами литрами диетической колы (гораздо вкуснее, чем обычная) и уничтожил шоколадку с пачкой чипсов. На самом деле, я не планировал выпивать полтора литра за раз, а хотел растянуть хотя бы на пару дней, но чего-то не особо вышло. Не знаю меры в таких вещах: если есть большая упаковка чего-то, то её обязательно нужно выпить/съесть именно сейчас. Дыс из отчасти уай я боюсь близко приближаться к алкоголю, никотину и к энергетикам: мне же тупо придёт конец.

Заказал себе за свои бесплатные деньги гп гаомон какой-то там с рисовательной поверхностью чуть больше, чем тетрадный лист а5, восемь тыщщ уровней чувствительности к нажатию. Сейчас понял, что прогадал немного: оказывается, есть хуйон с такими же характеристиками + у него есть тилт фанкшн и вообще он сам за тебя рисовать будет, и при этом этот монстр ещё и стоит чуть-чуть дешевле. Ну да ладно, я не думаю, что чувствительность к наклону так уж сильно важна. Взял гп не только для того, чтобы продолжить свои попытки в рисование (вялые настолько, что ээ, не знаю, с чем сравнить, просто вялые, да, просто вялые), но и чтобы, наконец, можно было больше никогда не юзать бумагу для конспектов / черновиков.

Ввод с клавиатуры хоть и быстрый, но только когда дело касается плейн текста без оформления, без формул и без схем. Конечно, можно использовать LyX для быстрого оформления (можно настроить, как будут выводиться куски кода; картинки, таблицы и схемы можно сделать плавающими объедками, и LyX сам их там распределяет по документу; есть редактор формул, которые транслирует их в латех, есть предустановленные стили для заголовков, контроль двойных пробелов и двойных новых строк и ещё куча всего) и какой-нибудь draw.io для схем, но, блин, это всё равно муторнее, чем если бы я написал/нарисовал всё от руки.

С другой стороны, писать на бумаге почти ничем не лучше: да, ручка - это универсальный интерфейс, но отсутствие контрл-зета для меня убивает все плюсы. Я всегда сначала пишу и только потом думаю, из-за чего ошибаюсь где-нибудь каждую минуту. Как следствие, треть записей оказывается зачирикана или залита замазкой, и в целом всё выглядит не особо читабельно. Но это ладно - самый главный недостаток - это то, что оно изначально не оцифровано: надо сканировать или фоткать, потому что хранить у себя кипу бумажек мне не особо хочется.

Блин, вот сейчас так всё расписал, как будто за последние месяца три я хотя бы что-то конспектировал или зарисовывал какие-то быстрые схемки, чтобы разобраться в чём-то или ещё что-то такое. Чьмо

Ну ладно, у меня его всё равно ещё нет. Вроде как едет откуда-то из Москвы, не почтой России и уже где-то на пути ко мне, так что скоро должен прийти. Единственное - неприятно, что есть принудительная доставка курьером: придётся, судя по всему, с ним лично договариваться, куда и когда ему подъехать, чтобы передать груз. Уже предвижу плюс парочку неловких диалогов.

Надо что-то решать с двумя несданными контрольными по диффурам и ещё не начатым домашним заданием по матану. Наверное, сейчас пойду пытаться делать что-то из этого. Наверное. Я так думаю, это моя последняя сессия, потому что осилить её мне явно не суждено. Пора уже давно признаться себе, что я способен максимум на тупой монотонный физический труд (чистка сапог would be a perfect choice for me) и любые мои потуги в чём-либо ином бессмысленны.

Вот такое. А ещё мне недавно приснились два больших красочных сна, но, как обычно, я опять могу точно сказать, почему мне приснились те или иные образы: тупо компиляция того, что я видел за прошедший день. Да, местами неожиданно, но предсказуемо. Безыдейные ограниченные невидимыми рамками норми-сны, не помню, когда мне последний раз снилось что-то оригинальное.

https://youtu.be/M_mZEitRSXw
По-моему, вполне неплохая амв по ТОКИВСКОМУ ГУЛЮ с вполне неплохим треком рамиреза (не слышал его раньше почему-то)

https://youtu.be/bm63fkE33ZY
https://youtu.be/jJTfV3hON8M
https://youtu.be/u8GwVLgOkck
https://youtu.be/odj8Wy3jPe4
https://youtu.be/h1DGoH-BJbA
https://youtu.be/ukvXXk4O4I8

https://youtu.be/3WHm6tfvKlk

> My daddy said, "Trust no man but your brothers"


> "And never leave your day one's in the gutter"


> My daddy said, "Treat young girls like your mother"


> My momma said, "Trust no hoe, use a rubber"


Вот ето текст, вот ето слова мудрости. Я вот думаю, стал ли бы я слушать этот трек, будь он на русском? Скорее всего, я бы сдох от стыда. А, может, и нет.

>>265596

>Надо попробовать поставить уведомления на каждый час тогда, наверное


Бесполезно, уведомления-напоминания вообще никак не помогают дисциплине.

Кстати, погода вроде чуть лучше: появились облака, стало чуть прохладнее (все завернулись в куртки и в жесть какие-то пуховики что ли, а я теперь, наконец-то, могу спокойно ходить в короткой одежде). Сегодня, когда бегал, чёт много каких-то школьников по пути встретил, а людей побольше практически не было. Школьники ходят группами по нескольку человек, выглядят угрожающе. Стоит остерегаться.
PoppyFanboy !VTLpv6lgGw 267 266415
Надо что-то делать с надвигающимися сессией и зачётной неделей, но мне так не хочется. Работоспособность на ну ле. Я по-прежнему какой-то паршивый, мерзкий и раздражительный. Тварь вроде меня должна содержаться в комнате размерами 5х5х5 м, покрытой изнутри армированными кислотоустойчивыми стальными плитами толщиной в 25,4 см, но сейчас она разгуливает на свободе (в основном по своей комнате, но это детали), совладаешь ли ты с этим монстром?

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

Во вторник почти ничего не делал: только сходил в универ показать свою БД. Выяснилось, что один из триггеров почему-то не обрабатывает все изменённые строки, а только первую попавшуюся. Ну, и там ещё по мелочи надо будет доделать и поставят зачёт. Потом займусь этим. Пока ехал туда-обратно, чуть не помер из-за сочетания духоты в переполненном автобусе и боли в ногах.

В среду весь день потратил на решение тупых домашек по программированию для универа (какие-то тупые бесконечные виндовс формы, которые проигрывают тупую музыку, создают тупые базы данных, ещё делают какую-то тупую ерунду), хотя планировал сделать их ну, за часа четыре максимум. По существу осталось только одно задание и я очень надеюсь, что мне его простят. Не помню, делал я ли зарядку для спины и пытался ли медитировать. Вроде нет.

Сегодня у меня уже сейчас наблюдается тотальнейший фейл по всему-всему: опять проснулся поздно, хотя планировал (уже три дня как) пофиксить режим и просыпаться хотя бы в восемь утра, вяло пытался готовиться к экзамену по матлогике, но прошёл катастрофически мало билетов (вообще не понял, по какому принципу выбирались правила вывода для секвенциального исчисления предикатов, почему там в одних правилах термы, а в других - переменные в аналогичных местах; это как бы не требуется обосновывать, это же задаётся аксиоматически, но, блин, должна же быть мотивация какая-то, не из воздуха же эти определения взялись). Сделал зарядку для спины ещё.

Побегал: особо не обращал внимание на темп, но, как оказалось потом, я начал слишком быстро и после 26 минут бега с постепенным снижением скорости закономерно сдох: закололо в боку и стало невозможно двигаться. Передохнул четыре минуты и потом зачем-то пробежал ещё четыре минуты в супер-медленном темпе. Короче, в итоге всё равно вышло только 7 км с копейками за тренировку в 40 минут и мне походу опять нужен либо перерыв в два дня, либо в следующий раз надо будет бежать в медленном темпе.

Залил свои надуманные проблемы полуторами литрами диетической колы (гораздо вкуснее, чем обычная) и уничтожил шоколадку с пачкой чипсов. На самом деле, я не планировал выпивать полтора литра за раз, а хотел растянуть хотя бы на пару дней, но чего-то не особо вышло. Не знаю меры в таких вещах: если есть большая упаковка чего-то, то её обязательно нужно выпить/съесть именно сейчас. Дыс из отчасти уай я боюсь близко приближаться к алкоголю, никотину и к энергетикам: мне же тупо придёт конец.

Заказал себе за свои бесплатные деньги гп гаомон какой-то там с рисовательной поверхностью чуть больше, чем тетрадный лист а5, восемь тыщщ уровней чувствительности к нажатию. Сейчас понял, что прогадал немного: оказывается, есть хуйон с такими же характеристиками + у него есть тилт фанкшн и вообще он сам за тебя рисовать будет, и при этом этот монстр ещё и стоит чуть-чуть дешевле. Ну да ладно, я не думаю, что чувствительность к наклону так уж сильно важна. Взял гп не только для того, чтобы продолжить свои попытки в рисование (вялые настолько, что ээ, не знаю, с чем сравнить, просто вялые, да, просто вялые), но и чтобы, наконец, можно было больше никогда не юзать бумагу для конспектов / черновиков.

Ввод с клавиатуры хоть и быстрый, но только когда дело касается плейн текста без оформления, без формул и без схем. Конечно, можно использовать LyX для быстрого оформления (можно настроить, как будут выводиться куски кода; картинки, таблицы и схемы можно сделать плавающими объедками, и LyX сам их там распределяет по документу; есть редактор формул, которые транслирует их в латех, есть предустановленные стили для заголовков, контроль двойных пробелов и двойных новых строк и ещё куча всего) и какой-нибудь draw.io для схем, но, блин, это всё равно муторнее, чем если бы я написал/нарисовал всё от руки.

С другой стороны, писать на бумаге почти ничем не лучше: да, ручка - это универсальный интерфейс, но отсутствие контрл-зета для меня убивает все плюсы. Я всегда сначала пишу и только потом думаю, из-за чего ошибаюсь где-нибудь каждую минуту. Как следствие, треть записей оказывается зачирикана или залита замазкой, и в целом всё выглядит не особо читабельно. Но это ладно - самый главный недостаток - это то, что оно изначально не оцифровано: надо сканировать или фоткать, потому что хранить у себя кипу бумажек мне не особо хочется.

Блин, вот сейчас так всё расписал, как будто за последние месяца три я хотя бы что-то конспектировал или зарисовывал какие-то быстрые схемки, чтобы разобраться в чём-то или ещё что-то такое. Чьмо

Ну ладно, у меня его всё равно ещё нет. Вроде как едет откуда-то из Москвы, не почтой России и уже где-то на пути ко мне, так что скоро должен прийти. Единственное - неприятно, что есть принудительная доставка курьером: придётся, судя по всему, с ним лично договариваться, куда и когда ему подъехать, чтобы передать груз. Уже предвижу плюс парочку неловких диалогов.

Надо что-то решать с двумя несданными контрольными по диффурам и ещё не начатым домашним заданием по матану. Наверное, сейчас пойду пытаться делать что-то из этого. Наверное. Я так думаю, это моя последняя сессия, потому что осилить её мне явно не суждено. Пора уже давно признаться себе, что я способен максимум на тупой монотонный физический труд (чистка сапог would be a perfect choice for me) и любые мои потуги в чём-либо ином бессмысленны.

Вот такое. А ещё мне недавно приснились два больших красочных сна, но, как обычно, я опять могу точно сказать, почему мне приснились те или иные образы: тупо компиляция того, что я видел за прошедший день. Да, местами неожиданно, но предсказуемо. Безыдейные ограниченные невидимыми рамками норми-сны, не помню, когда мне последний раз снилось что-то оригинальное.

https://youtu.be/M_mZEitRSXw
По-моему, вполне неплохая амв по ТОКИВСКОМУ ГУЛЮ с вполне неплохим треком рамиреза (не слышал его раньше почему-то)

https://youtu.be/bm63fkE33ZY
https://youtu.be/jJTfV3hON8M
https://youtu.be/u8GwVLgOkck
https://youtu.be/odj8Wy3jPe4
https://youtu.be/h1DGoH-BJbA
https://youtu.be/ukvXXk4O4I8

https://youtu.be/3WHm6tfvKlk

> My daddy said, "Trust no man but your brothers"


> "And never leave your day one's in the gutter"


> My daddy said, "Treat young girls like your mother"


> My momma said, "Trust no hoe, use a rubber"


Вот ето текст, вот ето слова мудрости. Я вот думаю, стал ли бы я слушать этот трек, будь он на русском? Скорее всего, я бы сдох от стыда. А, может, и нет.

>>265596

>Надо попробовать поставить уведомления на каждый час тогда, наверное


Бесполезно, уведомления-напоминания вообще никак не помогают дисциплине.

Кстати, погода вроде чуть лучше: появились облака, стало чуть прохладнее (все завернулись в куртки и в жесть какие-то пуховики что ли, а я теперь, наконец-то, могу спокойно ходить в короткой одежде). Сегодня, когда бегал, чёт много каких-то школьников по пути встретил, а людей побольше практически не было. Школьники ходят группами по нескольку человек, выглядят угрожающе. Стоит остерегаться.
.jpg135 Кб, 700x700
PoppyFanboy !VTLpv6lgGw 268 266801
Прошло всего лишь три дня, а мне успели напихать кучу палок в колёса, и в довершение всех мелких актов невезения я только что по-глупому потерял свою страницу во вконтакте. Такое ощущение, что я отхватил сразу за нескольких человек по части неприятных случайностей.

Ну, и это
>>266415

>жутко раздербанило очередным приступом я никчёмный кусок мяса, который сгодится разве что для того, чтобы распродать его на органы


ещё раз произошло. Только теперь стал менее раздражительным, просто потому что устал от этого.

Просто хотел куда-то это выплеснуть. Пойду спать. Не хочу ни о чём думать.
PoppyFanboy !VTLpv6lgGw 269 267026
>>266801

>по-глупому потерял свою страницу во вконтакте


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

>Такое ощущение, что я отхватил сразу за нескольких человек по части неприятных случайностей


На самом деле, может, и да, но если много думать об этом, то будет только хуже. Да и так и до веры во всемирный заговор против себя можно дойти. Выворачивать неприятности в нечто положительное тоже, наверное, не стоит, лучше просто не обращать внимания. Блин, у меня всё руки никак не доходят посмотреть, в какой падеж в этом случае надо ставить "внимание", винительный или родительный. Вроде как второе правильно, но, с другой стороны, можно же поставить вопрос винительного падежа: не обращать (что?) внимание. Ехх, вот бы выучить русский язык.. .. .. ....... ..

>жутко раздербанило очередным приступом я никчёмный кусок мяса, который сгодится разве что для того, чтобы распродать его на органы


Тоже лучше забить и не думать об этом. Сравнивать себя с кем-то и унывать от того, что ты даже близко не так хорош в чём-то - гиблое дело, в особенности, когда все вокруг лучше тебя примерно во всём.

Пятница-Суббота слились в один день, из-за того, что не спал немногим менее полутора суток. В пятницу большую часть дня был в универе: узнал, что мне хватает баллов для зачёта по глупому программированию, узнал, наконец-то, расписание экзаменов (не такое плохое, каким могло быть). Ещё переписал первую контрольную по диффурам: изначально я не успел сделать половину задач тупо из-за того, что там просто куча арифметики - надо постоянно искать собственные вектора, решать кучу систем линейных уравнений, делать миллион подстановок. Но я вроде смог кое-как дорешать и получить осмысленные ответы. Голова, конечно, после этого немного гудела.

В тот же день с утра, когда я был в универе, мне позвонил курьер, предложив доставить гп вот прямо сейчас, но я отказался и перенёс на следующий день: я наивно полагал, что в субботу я буду весь день дома заниматься всякой ерундой. Мда, через несколько часов я узнаю, что на эту самую субботу назначена досрочная сдача зачёта по предмету "Архитектура ЭВМ". Вернее не так, о том, что досрок будет я знал давно, но вот о том, что досрок вдруг окажется обязательным - нет. Поэтому пришлось проворачивать странные махинации с сим-картами, в результате которых у моей мамы остался её телефон с моей сим-картой, чтобы курьер мог позвонить на мой номер и не помешал мне во время зачёта.

Да-а, в общем, пришлось готовиться к нему наспех, а я ведь хотел нормально прочитать некоторые главы из танненбаума, а не готовиться по глупому конспекту. Вообще этот предмет у нас преподавался довольно странным образом: по сути материал состоял из кучи разрозненных концептов, которые подробно никак не рассматривались. Зачем это, что это, не знаю. В общем, как-то так вышло, что готовился я всю ночь и решил уже не ложиться спать: мне стало бы только хуже. Сдал (ну, тяжело этого было не сделать, потому что преподаватель максимально лоялен, но пропустить через себя материал всё равно имело смысл). Доехал домой, периодически проваливаясь в сон, потрогал немного уже пришедший к тому времени планшет и помер на часов четырнадцать.

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

Сегодня как-то тоже ничего толком не сделал. Только сходил в универ послушать разбор контрольной по предмету "Операционные системы" (материал которого аналогично архитектуре ЭВМ представляет из себя список каких-то концептов). Не смог особо вслушиваться, потому что хотелось спать, да я бы всё равно особо ничего не понял: этот предмет, как и ещё парочку других, я в течение семестра злостно прогуливал. Но зачёт по нему поставлен на конец июня, так что я успею ещё подготовиться. По дороге обратно зашёл поесть курицы в фаст-фуд. В предыдущий раз от еды на двести рублей мне стало дурно, а в этот раз я почти не наелся на ту же сумму. Мда, надо завязывать с этим (хотя я и так хожу туда не особо часто). Дома вечером опять ничего не делал и сильно тупил. Исправил проект по базам данных, но так и не отослал его преподавателю, завтра скину.

А, и ещё я сегодня очень много трогал гп, но пока что ничего нормального не делал. Поначалу у меня как-то не особо хорошо получалось рисовать линии, поэтому я немного (много) почертил прямые и эллипсы просто, чтобы немного привыкнуть. Сейчас вроде получается более-менее ровно без всяких дополнительных инструментов (можно с шифтом чертить ломаные и в сае ещё есть штука, которая чертит прямые с учётом нажима). Ну, и ещё кубик нарисовал, но он какой-то совсем уж убогий вышел.

Писать на нём вполне удобно, если выставить чувствительность, чтобы когда чуть-чуть жмёшь и карандаш рисует уже толсто (высокая чувствительность?) А если писать на стандартной, то буквы получаются разной толщины в разных местах.

Завтра надо будет отослать проект по бд преподавателю, сделать домашку по матану, побегать, попытаться порисовать что-нибудь, поготовиться к какому-нибудь экзамену. Сдача сессии всё ещё кажется чем-то неподъёмным, и я в какой-то момент всерьёз подумал, что имеет смысл дропнуть вуз, но решил, что хотя бы сейчас надо попытаться всё сдать, а потом уже спокойно всё обдумоть.

Кстати, наконец-то, нормальная погода и можно спокойно находиться на улице: солнце почти не выглядывает из-за туч, дует прохладный ветер, но при этом температура не сильно низкая.

Надо купить какой-нибудь зелёный чай новый. Я всё же понемногу распробовал и мне теперь он нравится. У меня сейчас есть пачка какого-то рандомного зелёного чая, а хотелось бы чего-нибудь поинтереснее, но в обычных магазинах интересного как-то не наблюдается. С другой стороны, покупать оверпрайс в чайных магазинах тоже нет особого желания. Надо потом проинспектировать, какие чайные магазины у меня тут есть и в каком из них можно закупиться поэкономнее.

Пробовал недавно подтягиваться зачем-то (ровно неделю назад). Сделал тогда несколько подходов negative pull-up'ов и один подход нормальных подтягиваний. Буквально на следующий день всю площадку сгребли в кучу и увезли, что я счёл за знак свыше и решил забить на это дело (всё равно оно мне не надо, хотя просто повисеть на перекладине с расслабленными руками пару раз в день, наверное, было бы полезно для спины).

Чёт так долго писал это. Сейчас тянется рука нажать сначала Ctrl+A, а затем Del, но ладно, пусть будет.

https://youtu.be/ucvRjuF64tE
PoppyFanboy !VTLpv6lgGw 269 267026
>>266801

>по-глупому потерял свою страницу во вконтакте


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

>Такое ощущение, что я отхватил сразу за нескольких человек по части неприятных случайностей


На самом деле, может, и да, но если много думать об этом, то будет только хуже. Да и так и до веры во всемирный заговор против себя можно дойти. Выворачивать неприятности в нечто положительное тоже, наверное, не стоит, лучше просто не обращать внимания. Блин, у меня всё руки никак не доходят посмотреть, в какой падеж в этом случае надо ставить "внимание", винительный или родительный. Вроде как второе правильно, но, с другой стороны, можно же поставить вопрос винительного падежа: не обращать (что?) внимание. Ехх, вот бы выучить русский язык.. .. .. ....... ..

>жутко раздербанило очередным приступом я никчёмный кусок мяса, который сгодится разве что для того, чтобы распродать его на органы


Тоже лучше забить и не думать об этом. Сравнивать себя с кем-то и унывать от того, что ты даже близко не так хорош в чём-то - гиблое дело, в особенности, когда все вокруг лучше тебя примерно во всём.

Пятница-Суббота слились в один день, из-за того, что не спал немногим менее полутора суток. В пятницу большую часть дня был в универе: узнал, что мне хватает баллов для зачёта по глупому программированию, узнал, наконец-то, расписание экзаменов (не такое плохое, каким могло быть). Ещё переписал первую контрольную по диффурам: изначально я не успел сделать половину задач тупо из-за того, что там просто куча арифметики - надо постоянно искать собственные вектора, решать кучу систем линейных уравнений, делать миллион подстановок. Но я вроде смог кое-как дорешать и получить осмысленные ответы. Голова, конечно, после этого немного гудела.

В тот же день с утра, когда я был в универе, мне позвонил курьер, предложив доставить гп вот прямо сейчас, но я отказался и перенёс на следующий день: я наивно полагал, что в субботу я буду весь день дома заниматься всякой ерундой. Мда, через несколько часов я узнаю, что на эту самую субботу назначена досрочная сдача зачёта по предмету "Архитектура ЭВМ". Вернее не так, о том, что досрок будет я знал давно, но вот о том, что досрок вдруг окажется обязательным - нет. Поэтому пришлось проворачивать странные махинации с сим-картами, в результате которых у моей мамы остался её телефон с моей сим-картой, чтобы курьер мог позвонить на мой номер и не помешал мне во время зачёта.

Да-а, в общем, пришлось готовиться к нему наспех, а я ведь хотел нормально прочитать некоторые главы из танненбаума, а не готовиться по глупому конспекту. Вообще этот предмет у нас преподавался довольно странным образом: по сути материал состоял из кучи разрозненных концептов, которые подробно никак не рассматривались. Зачем это, что это, не знаю. В общем, как-то так вышло, что готовился я всю ночь и решил уже не ложиться спать: мне стало бы только хуже. Сдал (ну, тяжело этого было не сделать, потому что преподаватель максимально лоялен, но пропустить через себя материал всё равно имело смысл). Доехал домой, периодически проваливаясь в сон, потрогал немного уже пришедший к тому времени планшет и помер на часов четырнадцать.

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

Сегодня как-то тоже ничего толком не сделал. Только сходил в универ послушать разбор контрольной по предмету "Операционные системы" (материал которого аналогично архитектуре ЭВМ представляет из себя список каких-то концептов). Не смог особо вслушиваться, потому что хотелось спать, да я бы всё равно особо ничего не понял: этот предмет, как и ещё парочку других, я в течение семестра злостно прогуливал. Но зачёт по нему поставлен на конец июня, так что я успею ещё подготовиться. По дороге обратно зашёл поесть курицы в фаст-фуд. В предыдущий раз от еды на двести рублей мне стало дурно, а в этот раз я почти не наелся на ту же сумму. Мда, надо завязывать с этим (хотя я и так хожу туда не особо часто). Дома вечером опять ничего не делал и сильно тупил. Исправил проект по базам данных, но так и не отослал его преподавателю, завтра скину.

А, и ещё я сегодня очень много трогал гп, но пока что ничего нормального не делал. Поначалу у меня как-то не особо хорошо получалось рисовать линии, поэтому я немного (много) почертил прямые и эллипсы просто, чтобы немного привыкнуть. Сейчас вроде получается более-менее ровно без всяких дополнительных инструментов (можно с шифтом чертить ломаные и в сае ещё есть штука, которая чертит прямые с учётом нажима). Ну, и ещё кубик нарисовал, но он какой-то совсем уж убогий вышел.

Писать на нём вполне удобно, если выставить чувствительность, чтобы когда чуть-чуть жмёшь и карандаш рисует уже толсто (высокая чувствительность?) А если писать на стандартной, то буквы получаются разной толщины в разных местах.

Завтра надо будет отослать проект по бд преподавателю, сделать домашку по матану, побегать, попытаться порисовать что-нибудь, поготовиться к какому-нибудь экзамену. Сдача сессии всё ещё кажется чем-то неподъёмным, и я в какой-то момент всерьёз подумал, что имеет смысл дропнуть вуз, но решил, что хотя бы сейчас надо попытаться всё сдать, а потом уже спокойно всё обдумоть.

Кстати, наконец-то, нормальная погода и можно спокойно находиться на улице: солнце почти не выглядывает из-за туч, дует прохладный ветер, но при этом температура не сильно низкая.

Надо купить какой-нибудь зелёный чай новый. Я всё же понемногу распробовал и мне теперь он нравится. У меня сейчас есть пачка какого-то рандомного зелёного чая, а хотелось бы чего-нибудь поинтереснее, но в обычных магазинах интересного как-то не наблюдается. С другой стороны, покупать оверпрайс в чайных магазинах тоже нет особого желания. Надо потом проинспектировать, какие чайные магазины у меня тут есть и в каком из них можно закупиться поэкономнее.

Пробовал недавно подтягиваться зачем-то (ровно неделю назад). Сделал тогда несколько подходов negative pull-up'ов и один подход нормальных подтягиваний. Буквально на следующий день всю площадку сгребли в кучу и увезли, что я счёл за знак свыше и решил забить на это дело (всё равно оно мне не надо, хотя просто повисеть на перекладине с расслабленными руками пару раз в день, наверное, было бы полезно для спины).

Чёт так долго писал это. Сейчас тянется рука нажать сначала Ctrl+A, а затем Del, но ладно, пусть будет.

https://youtu.be/ucvRjuF64tE
.jpg229 Кб, 900x1200
PoppyFanboy !VTLpv6lgGw 270 267267
Опять проснулся позже, чем хотел: в десять где-то. Не смог нормально побегать: опять та же скованность в мышцах, только на этот раз я ещё и выдохся супер-быстро: пробежал 24 с половиной минуты без остановок и после этого настолько плохо стало, что пришлось перейти на шаг. И то, я даже идти нормально не мог, еле-еле волочил ноги, иначе начинало очень сильно колоть в боку. Не знаю, почему перестало получаться нормально бегать.

После этого оформил и скинул преподавателю проект по бд, а потом начал было разбираться с тфкп по матану: читал какой-то учебник, пропуская доказательства и вроде как ненужные пока что мне теоремы, но довольно быстро запутался и так и не понял, как решать даже самые простые задачки (например, про разложение в ряд лорана). В итоге, из-за того, что ничего не получалось, я забил на всё и предался прокрастинации. Наверное, надо было изначально гуглить именно, как решать задачки, а не читать теорию. Вот что-то вроде этого:
http://www.apmath.spbu.ru/ru/education/final/question19.pdf
Для совсем форменных дебилов вроде меня, которые весь семестр прогуливали матан. Но я пока что не читал, что там.

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

Эх, лладно. Не знаю, что делать с домашкой по матану, я вообще ничего не понимаю. Возможно, есть ещё смысл посмотреть всякие задачники по тфкп, возможно, там есть краткие референсы по решению задачек (как у филиппова в диффурах), но у меня сейчас совсем-совсем отпало желание этим заниматься.

Если следовать здравому смыслу и пытаться приоритизировать задачи, то мне сейчас ещё нужно разобраться, как решать задачи из второй контрольной по диффурам и перерешать незачтённые задачи из домашних работ, но, блин, как-то тоже нет интереса это делать. Да и вообще ничего не хочется делать. Скорее всего, в таком случае лучше идти по пути наименьшего сопротивления и делать минимум для достижения среднего результата: не разбираться в предметной области, а искать алгоритм решения конкретной задачи без понимания бэкграунда.

Я не знаю, всё равно не могу преодолеть отвращение к подготовке к экзаменам. Я чувствую, что трачу время на какую-то ненужную дрянь. Уже почти два года как. Я не знаю, что делать. Но, опять же, сессию в любом случае надо сдать, а потом.. Не знаю. Я просто чувствую, что время стремительно уходит, а я только сильнее опускаюсь на дно.
.jpg229 Кб, 900x1200
PoppyFanboy !VTLpv6lgGw 270 267267
Опять проснулся позже, чем хотел: в десять где-то. Не смог нормально побегать: опять та же скованность в мышцах, только на этот раз я ещё и выдохся супер-быстро: пробежал 24 с половиной минуты без остановок и после этого настолько плохо стало, что пришлось перейти на шаг. И то, я даже идти нормально не мог, еле-еле волочил ноги, иначе начинало очень сильно колоть в боку. Не знаю, почему перестало получаться нормально бегать.

После этого оформил и скинул преподавателю проект по бд, а потом начал было разбираться с тфкп по матану: читал какой-то учебник, пропуская доказательства и вроде как ненужные пока что мне теоремы, но довольно быстро запутался и так и не понял, как решать даже самые простые задачки (например, про разложение в ряд лорана). В итоге, из-за того, что ничего не получалось, я забил на всё и предался прокрастинации. Наверное, надо было изначально гуглить именно, как решать задачки, а не читать теорию. Вот что-то вроде этого:
http://www.apmath.spbu.ru/ru/education/final/question19.pdf
Для совсем форменных дебилов вроде меня, которые весь семестр прогуливали матан. Но я пока что не читал, что там.

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

Эх, лладно. Не знаю, что делать с домашкой по матану, я вообще ничего не понимаю. Возможно, есть ещё смысл посмотреть всякие задачники по тфкп, возможно, там есть краткие референсы по решению задачек (как у филиппова в диффурах), но у меня сейчас совсем-совсем отпало желание этим заниматься.

Если следовать здравому смыслу и пытаться приоритизировать задачи, то мне сейчас ещё нужно разобраться, как решать задачи из второй контрольной по диффурам и перерешать незачтённые задачи из домашних работ, но, блин, как-то тоже нет интереса это делать. Да и вообще ничего не хочется делать. Скорее всего, в таком случае лучше идти по пути наименьшего сопротивления и делать минимум для достижения среднего результата: не разбираться в предметной области, а искать алгоритм решения конкретной задачи без понимания бэкграунда.

Я не знаю, всё равно не могу преодолеть отвращение к подготовке к экзаменам. Я чувствую, что трачу время на какую-то ненужную дрянь. Уже почти два года как. Я не знаю, что делать. Но, опять же, сессию в любом случае надо сдать, а потом.. Не знаю. Я просто чувствую, что время стремительно уходит, а я только сильнее опускаюсь на дно.
.webm11,5 Мб, webm,
640x360, 0:44
PoppyFanboy !VTLpv6lgGw 271 267756
Всё вокруг как будто ускорилось ещё сильнее, я вообще не замечаю, как проходит время. Вчера я только разобрался с тем, как решать задания из второй контрольной по диффурам и перерешал пару несданных задач из домашних заданий по ним же, и побегал ещё. Всё. И на это я потратил весь день, я точно больше ни на что не отвлекался, я вроде как не сильно застревал, но при этом я, можно считать, вообще ничего не сделал. Сегодня то же самое: сделал одну задачу из домашки по матану, перерешал две задачи из диффуров, побегал и всё, час ночи.

Возможно, это из-за того, что я относительно поздно ложусь спать? Хотел ещё вчера попытаться встать пораньше, но не получилось: проснулся по будильнику, но решил ещё минут пятнадцать полежать и так и заснул. Сегодня повторилось. Попробую сейчас пораньше лечь спать, хоть и, скорее всего, не смогу заснуть.

Бегаю теперь по 35 минут, но в супер-медленно, чуть-чуть медленнее одиннадцати километров в час, не сбавляя и не наращивая скорость. Вроде относительно легко даётся, вот, даже два дня подряд так побегал, выходит примерно шесть с половиной километров за раз. Сегодня попробовал в конце ускориться, но через минуту бега в более быстром темпе закололо в боку и пришлось обратно замедлиться. В общем, пока что буду по 35 минут, а потом доведу до 40 и, скорее всего, там остановлюсь. Или нет, не знаю. Сегодня, кстати, мне второй раз за три месяца понравилось бегать: вышел вечером, солнце ещё светило, но было уже немного прохладно, в процессе почти не выдохся и ничего потом не болело.

Забил на зарядку для спины, медитацию, рисование и вообще всё, кроме бега.

Завтра надо будет сходить в универ, чтобы, надеюсь, досдать большую часть долгов по диффурам и выкрасть чужой конспект по матану, чтобы оцифровать его. Надо ещё продолжить готовиться к экзамену по диффурам, сделать ещё кусочек домашки по матану и параллельно начать ещё какой-нибудь экзамен,
но
я почти уверен, что завтра повторится то же самое, что было сегодня, вчера и вообще всю последнюю неделю.

Кстати, уже неделю живу без колёсика мышки из-за того, что никак руки не доходят починить. Хотя, я не уверен, что это возможно: там обломился маленький штырь, торчащий из колёсика, который заходит в какую-то штуку, припаянную к плате, и вряд ли можно склеить два таких тоненьких кусочка стык в стык. Или можно, но мне, в любом случае, лень и не хочется марать руки в клее.

https://youtu.be/eAJPFZopPJg
Случайно узнал про них, вроде неплохо.

https://youtu.be/F6TRAYUUDcQ
Никак не могу вспомнить, где слышал первую композицию отсюда. Не очень люблю подобное, но конкретно этот альбом вроде довольно хорош.

https://youtu.be/l2iUHjgS6mU
Никогда не слышал эти треки в оригинале, только в обработке во всяких future funk микстейпах. Хорошие.

https://youtu.be/lwpihCtSUzY
.webm11,5 Мб, webm,
640x360, 0:44
PoppyFanboy !VTLpv6lgGw 271 267756
Всё вокруг как будто ускорилось ещё сильнее, я вообще не замечаю, как проходит время. Вчера я только разобрался с тем, как решать задания из второй контрольной по диффурам и перерешал пару несданных задач из домашних заданий по ним же, и побегал ещё. Всё. И на это я потратил весь день, я точно больше ни на что не отвлекался, я вроде как не сильно застревал, но при этом я, можно считать, вообще ничего не сделал. Сегодня то же самое: сделал одну задачу из домашки по матану, перерешал две задачи из диффуров, побегал и всё, час ночи.

Возможно, это из-за того, что я относительно поздно ложусь спать? Хотел ещё вчера попытаться встать пораньше, но не получилось: проснулся по будильнику, но решил ещё минут пятнадцать полежать и так и заснул. Сегодня повторилось. Попробую сейчас пораньше лечь спать, хоть и, скорее всего, не смогу заснуть.

Бегаю теперь по 35 минут, но в супер-медленно, чуть-чуть медленнее одиннадцати километров в час, не сбавляя и не наращивая скорость. Вроде относительно легко даётся, вот, даже два дня подряд так побегал, выходит примерно шесть с половиной километров за раз. Сегодня попробовал в конце ускориться, но через минуту бега в более быстром темпе закололо в боку и пришлось обратно замедлиться. В общем, пока что буду по 35 минут, а потом доведу до 40 и, скорее всего, там остановлюсь. Или нет, не знаю. Сегодня, кстати, мне второй раз за три месяца понравилось бегать: вышел вечером, солнце ещё светило, но было уже немного прохладно, в процессе почти не выдохся и ничего потом не болело.

Забил на зарядку для спины, медитацию, рисование и вообще всё, кроме бега.

Завтра надо будет сходить в универ, чтобы, надеюсь, досдать большую часть долгов по диффурам и выкрасть чужой конспект по матану, чтобы оцифровать его. Надо ещё продолжить готовиться к экзамену по диффурам, сделать ещё кусочек домашки по матану и параллельно начать ещё какой-нибудь экзамен,
но
я почти уверен, что завтра повторится то же самое, что было сегодня, вчера и вообще всю последнюю неделю.

Кстати, уже неделю живу без колёсика мышки из-за того, что никак руки не доходят починить. Хотя, я не уверен, что это возможно: там обломился маленький штырь, торчащий из колёсика, который заходит в какую-то штуку, припаянную к плате, и вряд ли можно склеить два таких тоненьких кусочка стык в стык. Или можно, но мне, в любом случае, лень и не хочется марать руки в клее.

https://youtu.be/eAJPFZopPJg
Случайно узнал про них, вроде неплохо.

https://youtu.be/F6TRAYUUDcQ
Никак не могу вспомнить, где слышал первую композицию отсюда. Не очень люблю подобное, но конкретно этот альбом вроде довольно хорош.

https://youtu.be/l2iUHjgS6mU
Никогда не слышал эти треки в оригинале, только в обработке во всяких future funk микстейпах. Хорошие.

https://youtu.be/lwpihCtSUzY
.jpg120 Кб, 882x2047
PoppyFanboy !VTLpv6lgGw 272 268296
>>267756
Не хочу вспоминать, что было в пятницу: весь день пробыл в универе из-за специфики пересдачи контрольных (конечно, в том, что было потеряно так много времени, есть и моя вина, но это не умаляет, а только усиливает ощущение, что всё это какое-то грустное дерьмо). При этом я ещё и не сдал всё до конца: осталась ещё одна задача до зачёта.

Вчера, ввиду того, что почти весь день дома никого не было, я немного отдыхал и занимался всякими сомнительными вещами. Ощущения потерянного времени нет, мне всё понравилось. И в тот же день ещё побегал немного: вышло 6.66 км за 36:40, но я очень сильно выдохся ещё на двадцать шестой минуте, из-за чего пришлось снизить темп (а я и так полз не сильно быстрее слизняка).

Сегодня половину дня ничего не делал, четверть скролил интернеты и оставшуюся часть всё же потратил на экзамен по диффурам и немного рисования.

Нашёл вот этих господ:
https://youtu.be/yBexoB2bBVU
https://youtu.be/rtcH5k2-fLM
И вспомнил про существования Джейка Лавы, который сделал пару новых штук, но это всё ещё даже близко не стоит с анимацией про мясное дерево:
https://youtu.be/VIE1dGcUT6s
Возможно, она мне так нравится, потому что по духу отдалённо напоминает анимации Дэвида Фирта (который вроде тоже что-то там новое сделал, но у меня сейчас нет настроения смотреть).

https://youtu.be/BlVTnjCmokg
https://youtu.be/RssR_ckdDX0
Хорошие

Порисовал немного кубики, два из них покрасил. В этот раз получилось лучше, потому что я понял, что рёбра кубика необязательно затирать, а можно их просто покрасить в соответствующие цвета. Но я всё равно всё заруинил: опять вышло так, что продолжения рёбер сходятся непонятно как. Нарисовал ещё голову-картошку по книжке Лумиса. Попробовал обвести набросок чёрным карандашом с каким-то лютым параметром сглаживания - получилось не очень аккуратно.

Диффуры разобрал совсем немного. Надо бы матан ещё делать, но мне так не хочется.
Блин, ну, ладно, вот завтра точно будет лучше и я не стану терять так много времени впустую. Наверное. Постараюсь проснуться и встать пораньше и сделать побольше. Надо поторопиться, а то ведь уже аж третье июня.
.jpg120 Кб, 882x2047
PoppyFanboy !VTLpv6lgGw 272 268296
>>267756
Не хочу вспоминать, что было в пятницу: весь день пробыл в универе из-за специфики пересдачи контрольных (конечно, в том, что было потеряно так много времени, есть и моя вина, но это не умаляет, а только усиливает ощущение, что всё это какое-то грустное дерьмо). При этом я ещё и не сдал всё до конца: осталась ещё одна задача до зачёта.

Вчера, ввиду того, что почти весь день дома никого не было, я немного отдыхал и занимался всякими сомнительными вещами. Ощущения потерянного времени нет, мне всё понравилось. И в тот же день ещё побегал немного: вышло 6.66 км за 36:40, но я очень сильно выдохся ещё на двадцать шестой минуте, из-за чего пришлось снизить темп (а я и так полз не сильно быстрее слизняка).

Сегодня половину дня ничего не делал, четверть скролил интернеты и оставшуюся часть всё же потратил на экзамен по диффурам и немного рисования.

Нашёл вот этих господ:
https://youtu.be/yBexoB2bBVU
https://youtu.be/rtcH5k2-fLM
И вспомнил про существования Джейка Лавы, который сделал пару новых штук, но это всё ещё даже близко не стоит с анимацией про мясное дерево:
https://youtu.be/VIE1dGcUT6s
Возможно, она мне так нравится, потому что по духу отдалённо напоминает анимации Дэвида Фирта (который вроде тоже что-то там новое сделал, но у меня сейчас нет настроения смотреть).

https://youtu.be/BlVTnjCmokg
https://youtu.be/RssR_ckdDX0
Хорошие

Порисовал немного кубики, два из них покрасил. В этот раз получилось лучше, потому что я понял, что рёбра кубика необязательно затирать, а можно их просто покрасить в соответствующие цвета. Но я всё равно всё заруинил: опять вышло так, что продолжения рёбер сходятся непонятно как. Нарисовал ещё голову-картошку по книжке Лумиса. Попробовал обвести набросок чёрным карандашом с каким-то лютым параметром сглаживания - получилось не очень аккуратно.

Диффуры разобрал совсем немного. Надо бы матан ещё делать, но мне так не хочется.
Блин, ну, ладно, вот завтра точно будет лучше и я не стану терять так много времени впустую. Наверное. Постараюсь проснуться и встать пораньше и сделать побольше. Надо поторопиться, а то ведь уже аж третье июня.
не, не сегодня PoppyFanboy !VTLpv6lgGw 273 268575
Ничего толком не делал, не хочется. Смотрел мультики, видево на ютубе, стримы, слушал музыку. Съел слишком много шоколада, надо завязывать.

Вчера пробежал 7 км за 38:11 и не сильно устал (но мне всё равно не понравилось), сегодня - еле-еле 5.6 км за 30 минут (возможно, частично из-за того, что на улице было душно как в теплице). Не стоило два дня подряд бегать.

Понял, что день лучше начинать с чего-нибудь приятного и условно полезного. Час-два потратить на вялые потуги в рисование или чтение чего-нибудь было бы идеально. Потом уже можно приступать к обязательным и унылым штукам. И ещё понял, что после бега я совсем-совсем никакой (несмотря на то, что в интернетах говорят, что физическая активность как-то там бустит мозги), поэтому пробежки лучше устраивать где-нибудь часов в 9 вечера и потом почти сразу идти спать.

Чуть-чуть рисовал. Вчера нарисовал и раскрасил плошку с ложкой, но получилось очень так себе. Сегодня рисовал всякие каракули и в том числе какого-то деда из головы с неестественными пропорциями и рандомно покрашенного в серые оттенки. Короче, надо попробовать покрасить что-нибудь попроще, но более-менее нормально. Эрика Олсона пока что отложил, полистал чуть-чуть Perspective Made Easy.

https://youtu.be/2_vxpJs1Yyo
https://youtu.be/zHBB3UDrkAk
https://youtu.be/Rr_j2dTQeDA
Очень нравятся.

https://youtu.be/YWGCEDYJAZ4
Первые композиции супер-крутые, но до конца дослушать не смог: там с какого-то момента начинается что-то странное и не очень слушабельное.

https://youtu.be/dGd9DTTrX4U
Ну, ладно, это неблохо.

https://youtu.be/V4ypU_3e_3E
Сначала показалось, что вполне неплохо звучит, но потом я вспомнил оригинал? Не знаю точно и лень проверять, действительно ли это первое исполнение этой песни. Да и не важно это.
https://youtu.be/V4ypU_3e_3E
Короче, хорошая песня, вот.

https://vk.com/wall-43439061_1154
Nepenthes хорошая. Ну, она мне и в изначальной версией очень нравится. А остальные ещё не переслушивал (а некоторые и в оригинале не слышал, как-то не доходили руки; зато старые композиции заслушаны до дыр).

https://soundcloud.com/g59/sets/livefastdiewhenever
Чего-то даже слушать лень. На фоне этого даже "I want to die in New Orleans" выглядит не так плохо.

Почти случайно посмотрел Noragami. Ну, што тут можно сказать, кажется, это аниме, да.

https://youtu.be/35DeNXwjXB0?t=1165
О, а я и не знал, что их начали ставить из-за расклеивания объявлений. Думал, что стеклянные часто ломают, поэтому стали чаще ставить такие. Но, да, смысла в таких остановках вообще никакого - если сильный ветер, то толку от них никакого. Ну, а крипи сетки на водосточных трубах и фонарных столбах - это вообще жуть.
Хорошее видево.

https://youtu.be/0dQZn0WOrq4
Неплохое.

Не помню, что ещё было, по крайней мере вроде больше ничего достаточно интересного.
не, не сегодня PoppyFanboy !VTLpv6lgGw 273 268575
Ничего толком не делал, не хочется. Смотрел мультики, видево на ютубе, стримы, слушал музыку. Съел слишком много шоколада, надо завязывать.

Вчера пробежал 7 км за 38:11 и не сильно устал (но мне всё равно не понравилось), сегодня - еле-еле 5.6 км за 30 минут (возможно, частично из-за того, что на улице было душно как в теплице). Не стоило два дня подряд бегать.

Понял, что день лучше начинать с чего-нибудь приятного и условно полезного. Час-два потратить на вялые потуги в рисование или чтение чего-нибудь было бы идеально. Потом уже можно приступать к обязательным и унылым штукам. И ещё понял, что после бега я совсем-совсем никакой (несмотря на то, что в интернетах говорят, что физическая активность как-то там бустит мозги), поэтому пробежки лучше устраивать где-нибудь часов в 9 вечера и потом почти сразу идти спать.

Чуть-чуть рисовал. Вчера нарисовал и раскрасил плошку с ложкой, но получилось очень так себе. Сегодня рисовал всякие каракули и в том числе какого-то деда из головы с неестественными пропорциями и рандомно покрашенного в серые оттенки. Короче, надо попробовать покрасить что-нибудь попроще, но более-менее нормально. Эрика Олсона пока что отложил, полистал чуть-чуть Perspective Made Easy.

https://youtu.be/2_vxpJs1Yyo
https://youtu.be/zHBB3UDrkAk
https://youtu.be/Rr_j2dTQeDA
Очень нравятся.

https://youtu.be/YWGCEDYJAZ4
Первые композиции супер-крутые, но до конца дослушать не смог: там с какого-то момента начинается что-то странное и не очень слушабельное.

https://youtu.be/dGd9DTTrX4U
Ну, ладно, это неблохо.

https://youtu.be/V4ypU_3e_3E
Сначала показалось, что вполне неплохо звучит, но потом я вспомнил оригинал? Не знаю точно и лень проверять, действительно ли это первое исполнение этой песни. Да и не важно это.
https://youtu.be/V4ypU_3e_3E
Короче, хорошая песня, вот.

https://vk.com/wall-43439061_1154
Nepenthes хорошая. Ну, она мне и в изначальной версией очень нравится. А остальные ещё не переслушивал (а некоторые и в оригинале не слышал, как-то не доходили руки; зато старые композиции заслушаны до дыр).

https://soundcloud.com/g59/sets/livefastdiewhenever
Чего-то даже слушать лень. На фоне этого даже "I want to die in New Orleans" выглядит не так плохо.

Почти случайно посмотрел Noragami. Ну, што тут можно сказать, кажется, это аниме, да.

https://youtu.be/35DeNXwjXB0?t=1165
О, а я и не знал, что их начали ставить из-за расклеивания объявлений. Думал, что стеклянные часто ломают, поэтому стали чаще ставить такие. Но, да, смысла в таких остановках вообще никакого - если сильный ветер, то толку от них никакого. Ну, а крипи сетки на водосточных трубах и фонарных столбах - это вообще жуть.
Хорошее видево.

https://youtu.be/0dQZn0WOrq4
Неплохое.

Не помню, что ещё было, по крайней мере вроде больше ничего достаточно интересного.
D73z5UJUcAAqPg.jpg94 Кб, 756x1200
и не сегодня тоже PoppyFanboy !VTLpv6lgGw 274 268701
Вчера не мог уснуть до половины шестого утра. Не знаю, возможно, сказалась чашка выпитого крепкого зелёного чая: оставил его завариваться, но вспомнил о нём только часа три спустя. Выпил его практически перед сном и в итоге уже шестой час, а я ни в одном глазу. Ещё при этом свет из окна заснуть мешал.

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

После этого попытался медитировать 3 минуты впервые за последние недели полторы и сел разбирать диффуры. Ничего не вышло: я фоном включил мультики, потому что было скучно, и сумел выучить только два с половиной билета (всё ещё, всё ещё не знаю, что с этим делать, не могу заставить себя посидеть и пять минут с экзаменами в тишине без белого шума). Потом ещё прокрастинировал немного.

Сейчас хотел порешать матан, но, наверное, лучшим решением будет попытаться заснуть до рассвета и проснуться пораньше.

>>268575

>Понял, что день лучше начинать с чего-нибудь приятного и условно полезного


Да, ето действительно так, но нужно заранее ставить конкретную микроцель (чтобы было какое-то удовлетворение от того, что ты что-то сделал?) И планы на весь день тоже нужны. Сейчас составлю по-быстрому и пойду спать. Надо будет матан решить хотя бы наполовину и к экзаменам начать готовиться нормально, а то я так не успею. Хотя у меня такое ощущение, что как бы я сейчас не начал трайхардить, уже не успею.

>>262004

>Сегодня был на экзамене в одну школку


А, кстати, не взяли.
.jpg52 Кб, 816x816
poppyfanboy !VTLpv6lgGw 275 268925
.jpg90 Кб, 1200x600
PoppyFanboy !VTLpv6lgGw 276 269054
Пытаюсь заставить себя готовиться к экзаменам. Пока что получается не очень, но уже чуть лучше, чем было несколько дней назад. Есть сильное ощущение бессмысленности поступающей в голову информации, которая всё равно улетучится в лучшем случае через неделю-две после экзамена. Любые попытки как-то настроить себя на нужный лад, чтобы сесть за подготовку безуспешны, мне всё это бесконечно неинтересно, поэтому единственный способ - пытаться насильно заставлять себя это делать. Умираю от жары и духоты, весь день немного болит и кружится голова, в голове туманно. Каждый день сжираю кучу всякого мусора.

Перестал слушать что-либо фоном через наушники, вот уже второй день, но всё равно продолжаю слушать музыку через динамики на телефоне на слабой громкости. Концентрироваться стало немного проще, особенно с учётом того, что без наушников я ещё и из компа не могу звук извлечь, поэтому сразу обрезается куча возможностей начать прокрастинировать. Я когда-то уже пробовал так делать, но почему-то посчитал, что никакой особой выгоды я из этого не извлеку. Сейчас очень сильно ломает посмотреть/послушать что-нибудь/кого-нибудь.

Вчера пробовал бегать, но опять ничего не вышло: еле-еле вытянул 32 минуты непрерывного бега, преодолев при этом только 5.9 км. Меньше недели назад я относительно легко пробежал 7 км за чуть больше, чем 38 минут, а тут вот такое. Тогда же нашёл целую кучу квакающих лягух >>268925. Отдохнув немного, назад, до дома, попробовал пробежать в чуть более быстром темпе, но выдохся после шести с половиной минут бега, пробежав при этом всего лишь 1.3 ки. Ещё вчера, наконец-то, сделал домашку по матану. Она не такая сложной, какой казалась, но это главным образом потому, что я особо не вникал в теорию и просто сделал её по аналогии с решениями похожих задач в интернете. Какие-то вычеты, особые точки, полюсы. Не хочу.

Сегодня весь день пытался заставлять себя готовиться к диффурам. Прошёл пять с половиной билетов, при этом даже нормально не выучив их, так, только разобрался, что к чему, и устранил непонятные для себя моменты. В процессе часто отвлекался, а в какой-то момент вообще забил и пошёл смотреть мультики. Больше ничего не делал.

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

Не знаю, что сейчас буду делать, наверное, пытаться как-то запихнуть себе в голову пройденные билеты. Попробую всё по-быстрому перечитать, параллельно засовывая определения и теоремы в Анки, а потом буду повторять только то, что плохо запоминается.

Блин, ну, не должно же оно быть вот так, это всё как-то неправильно.
.jpg90 Кб, 1200x600
PoppyFanboy !VTLpv6lgGw 276 269054
Пытаюсь заставить себя готовиться к экзаменам. Пока что получается не очень, но уже чуть лучше, чем было несколько дней назад. Есть сильное ощущение бессмысленности поступающей в голову информации, которая всё равно улетучится в лучшем случае через неделю-две после экзамена. Любые попытки как-то настроить себя на нужный лад, чтобы сесть за подготовку безуспешны, мне всё это бесконечно неинтересно, поэтому единственный способ - пытаться насильно заставлять себя это делать. Умираю от жары и духоты, весь день немного болит и кружится голова, в голове туманно. Каждый день сжираю кучу всякого мусора.

Перестал слушать что-либо фоном через наушники, вот уже второй день, но всё равно продолжаю слушать музыку через динамики на телефоне на слабой громкости. Концентрироваться стало немного проще, особенно с учётом того, что без наушников я ещё и из компа не могу звук извлечь, поэтому сразу обрезается куча возможностей начать прокрастинировать. Я когда-то уже пробовал так делать, но почему-то посчитал, что никакой особой выгоды я из этого не извлеку. Сейчас очень сильно ломает посмотреть/послушать что-нибудь/кого-нибудь.

Вчера пробовал бегать, но опять ничего не вышло: еле-еле вытянул 32 минуты непрерывного бега, преодолев при этом только 5.9 км. Меньше недели назад я относительно легко пробежал 7 км за чуть больше, чем 38 минут, а тут вот такое. Тогда же нашёл целую кучу квакающих лягух >>268925. Отдохнув немного, назад, до дома, попробовал пробежать в чуть более быстром темпе, но выдохся после шести с половиной минут бега, пробежав при этом всего лишь 1.3 ки. Ещё вчера, наконец-то, сделал домашку по матану. Она не такая сложной, какой казалась, но это главным образом потому, что я особо не вникал в теорию и просто сделал её по аналогии с решениями похожих задач в интернете. Какие-то вычеты, особые точки, полюсы. Не хочу.

Сегодня весь день пытался заставлять себя готовиться к диффурам. Прошёл пять с половиной билетов, при этом даже нормально не выучив их, так, только разобрался, что к чему, и устранил непонятные для себя моменты. В процессе часто отвлекался, а в какой-то момент вообще забил и пошёл смотреть мультики. Больше ничего не делал.

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

Не знаю, что сейчас буду делать, наверное, пытаться как-то запихнуть себе в голову пройденные билеты. Попробую всё по-быстрому перечитать, параллельно засовывая определения и теоремы в Анки, а потом буду повторять только то, что плохо запоминается.

Блин, ну, не должно же оно быть вот так, это всё как-то неправильно.
не, не на этой неделе PoppyFanboy !VTLpv6lgGw 277 269732
мне лень писать нормально, да я и не умею поэтому да, вот

В воскресенье ходил бегать: поначалу пробежал только 15 минут и умер из-за разболевшихся ног, но через 5 минут вроде оклемался и побегал ещё чуть больше тридцати минут подряд, но уже без боли в ногах. Там суммарно с перерывом на шаг в середине вышло восемь с половиной километров, но это мало что значит, потому что сделаны они не за один раз, так что не считается. Вот тогда я подумал, что возможно, имеет смысл разминаться не только ходьбой но и короткой пятиминутной сессией бега, поэтому через день я, собственно так и сделал: пробежал 5 минут, отдохнул, а потом уже побежал нормально в надежде на то, что сейчас всё будет в порядке и я нормально проползу 35 минут подряд. НО нет, я осилил только 28 минут и за это время я преодолел смешные пять километров, причём под конец уже жутко болели ноги и я просто задыхался. Я тогда жесть на всё обиделся и разозлился. Сегодня повторилась почти та же история, только всё было ещё хуже: я больше пятнадцати минут подряд вообще никак не мог бежать, начинали болеть ноги, вот там, где ступня переходит в голень. Наверное, я как-то не так ставлю ногу при беге, но чёт даже не знаю, как исправить. Короче, вот такими четырьмя микро-забегами с двумя пяти-минутными перерывами и одним покороче я прополз 11.2 км за час и пять минут. Что интересно, с течением времени ноги болели всё меньше и меньше, но под конец меня сломило в конец сбившееся дыхание. В общем, это всё очень грустно и я не понимаю, что вообще делать и зачем я вообще бегаю, если выносливость непонятно как стакуется или не стакуется вообще, мне категорически это не нравится делать, а ещё за эти три месяца бега (уже даже больше) я только набрал весс.

Все эти дни я пытался довольно безуспешно готовиться к сегодняшним диффурам, больше ничего не делал. Фоновый контент в наушниках я всё ещё не слушаю музыку и человеческую речь, что немного помогает чуть лучше концентрироваться, но, хоть я и разобрал за это время почти все билеты, кроме двух последних (потому что они сложные и их почти никто толком не понял), но я вообще ничего не выучил, и понял я это только в последний день перед экзаменом, то есть вчера. Причём в голове даже не отпечатались формулировки теорем и определений (на Анки я, кстати, забил, потому что было лень забивать туда формулировки и я чёт так и не разобрался (не пытался), как там работает интервальное повторение). Поэтому весь день перед экзаменом я сидел, унывал и прокрастинировал, а ночью всё же решил принять свою участь и просто выучил по-быстрому определения и сделал на всякий случай большую шпаргалку с ними же. В общем, в итоге я вывез всё просто на удаче: я специально пришёл пораньше, чтобы сесть за парту подальше и чтобы у меня экзамен приняла наш лектор (остальные принимающие более строгие, приходят они не к началу экзамена обычно, а спустя минут сорок), мне попался простейший билет про интегралы систем диффуров, где даже доказательств толком не было (но я всё равно на всякий случай списал его подчистую), мне попались простейшие доп-вопросы на формулировки теорем и определений, а потом мне дали задачку на пятёрку (при том, что я ничего не знаю) (задача была про устойчивость решений, там надо было из линейной однородной неустойчивой системы с постоянными коэффициентами сделать асимптотически устойчивую, добавив к правой части системы какую-то функцию; там это делается через рандомный выбор функции Ляпунова и там уже потом надо будет выбирать вот эту добавочную функцию, чтобы производная функции ляпунова была отрицательной везде), которую я поначалу не хотел решать, потому что думал, что ничего не получится, и потому просто сидел и тупил в условие, а потом попробовал решить и она решилась сама, почти.

И в связи с этим всем я чувствую себя чуть менее, чем отвратительно, потому что я получил пятёрку по сути ни за что и если бы мне попался не такой лайтовый билет, я бы, скорее всего, всё заруинил. Бтв, как я случайно узнал позже, значительная часть людей решили тупо не идти на этот экзамен, чтобы у них была неявка, которую можно было бы закрыть липовой справкой от врача имплайс нет долга и у тебя есть шансы подготовиться к пересдаче. Так что мне походу повезло ещё крупнее, чем могло показаться на первый взгляд. НА самом деле, экзамен етот действительно довольно сложный, по крайней мере по своему объёму: там материал с двух семестров и, если ты не сдавал опциональный коллоквиум (который бы аннулировал часть вопросов с экзамена), то тебе пришлось бы учить материал за целый год диффуров.

А содержание екзамена, на самом деле, не такое плохое и унылое, но я просто тупой и не могу вместить это всё себе в голову, а то, что вместилось, я забуду уже завтра. Ну там в порядке очерёдности диффуры первого порядка и всё для них (существование и единственность решения задачи Коши, всякие теоремы про единственность, интеграл для уравнения в симметричной форме, интегрирующий множитель), потом системы диффуров (условие липшица как вспомогательная штука, существование и единственность решений через теорему Пикара, там, где про последовательные приближения, почти линейные системы, ещё чёто), потом про линейные однородные уравнения/системы и линейные неоднородные уравнения/системы, немного про системы с периодическими коэффициентами, траектории и фазовые портреты (особые точки по пуанкаре), куча теорем про устойчивость решений (тупо по определению, для линейно однородных, по первому приближению, когда у тебя линейная часть представляет из себя просто Ax (A - постоянная матрица), через функцию ляпунова и ещё что-то вроде было), затем про интегралы систем (примерно по концепции с смыслу то же самое, что и для просто уравнений, но сложнее), дифференцируемость решений по параметрам и начальным данным (вот тут я уже не пытался понимать доказательства) и теоремы про аналитичность решений систем уравнений и линейных систем уравнений (вот тут уже совсем тёмный лес, но я так понял, что это просто, что если в самом уравнении всякие штуки раскладываются в сходящиеся ряды, но решение тоже можно разложить в сходящийся где-то там ряд).

Ну, это да, я забуду уже завтра, точно так же, как я забыл почти всё из топологии (а там были интересные штуки, которые часто используются в матане => в диффурах, но мне ни то, ни другое всё равно не сильно интересно), аналитической геометрии (даже не вспомню, что такое первая квадратичная форма и зачем она там нужна, хотя вроде курс был неплохой), линейной алгебры (какие такие группы и поля?), ну, и вообще всего-всего-всего, потому что я ничего не понимаю, я ничего не запоминаю, я не обучаем на все сто процентов.

Чувствую себя отвратительно, настроения нет никакого, а у меня ещё миллион экзаменов, к которым я не готов прямо совсем, поэтому я уже даже не думаю о чём-то кроме этих тупых билетов. На лекции по двум предметам, по которым будут экзамены, я даже практически не приходил ни разу. Следующий экзамен - по предмету "параллельные алгоритмы" и он уже в понедельник на следующей неделе. Я даже приблизительно пока что не знаю, что это, и, если честно, не сильно интересно. Попробую сразу учить только формулировки определений и теорем, а потом уже только приступать к доказательствам и прочим подробностям.

В последнее время както мне в особенности не очень в голову лезут всякие плохие мысли и вообще я окончательно запутался и ничего не хочу

футуре фанк заслушанный-переслушанный
https://youtu.be/oRS_qvP4Aeg
https://youtu.be/Wi44nxaDg9w
https://youtu.be/prUd4s5P-iM
https://youtu.be/y2_N72iuM4g
https://youtu.be/-7TS3Ayjdlk
https://youtu.be/Vc6vdaQyOo4

чёт захотелось переслушать
https://soundcloud.com/g59/inolongerfeartherazorguardingmyheelthree
https://soundcloud.com/g59/killyourselfpartiii
https://soundcloud.com/g59/killyourself4

у Тессы там, оказывается, не так давно (ага, месяц назад) вышел новый клип на песенку, но это больше повод переслушать её более удачные песенки, например, вот эту:
https://youtu.be/eNtK6jx9y4A
А клип этот новый вообще отвратительный, не понимаю, как до такого можно было додуматься, бе.

ну а сегодня да, я только сдал экзамен и побегал, остальное время прокрастинировал
не, не на этой неделе PoppyFanboy !VTLpv6lgGw 277 269732
мне лень писать нормально, да я и не умею поэтому да, вот

В воскресенье ходил бегать: поначалу пробежал только 15 минут и умер из-за разболевшихся ног, но через 5 минут вроде оклемался и побегал ещё чуть больше тридцати минут подряд, но уже без боли в ногах. Там суммарно с перерывом на шаг в середине вышло восемь с половиной километров, но это мало что значит, потому что сделаны они не за один раз, так что не считается. Вот тогда я подумал, что возможно, имеет смысл разминаться не только ходьбой но и короткой пятиминутной сессией бега, поэтому через день я, собственно так и сделал: пробежал 5 минут, отдохнул, а потом уже побежал нормально в надежде на то, что сейчас всё будет в порядке и я нормально проползу 35 минут подряд. НО нет, я осилил только 28 минут и за это время я преодолел смешные пять километров, причём под конец уже жутко болели ноги и я просто задыхался. Я тогда жесть на всё обиделся и разозлился. Сегодня повторилась почти та же история, только всё было ещё хуже: я больше пятнадцати минут подряд вообще никак не мог бежать, начинали болеть ноги, вот там, где ступня переходит в голень. Наверное, я как-то не так ставлю ногу при беге, но чёт даже не знаю, как исправить. Короче, вот такими четырьмя микро-забегами с двумя пяти-минутными перерывами и одним покороче я прополз 11.2 км за час и пять минут. Что интересно, с течением времени ноги болели всё меньше и меньше, но под конец меня сломило в конец сбившееся дыхание. В общем, это всё очень грустно и я не понимаю, что вообще делать и зачем я вообще бегаю, если выносливость непонятно как стакуется или не стакуется вообще, мне категорически это не нравится делать, а ещё за эти три месяца бега (уже даже больше) я только набрал весс.

Все эти дни я пытался довольно безуспешно готовиться к сегодняшним диффурам, больше ничего не делал. Фоновый контент в наушниках я всё ещё не слушаю музыку и человеческую речь, что немного помогает чуть лучше концентрироваться, но, хоть я и разобрал за это время почти все билеты, кроме двух последних (потому что они сложные и их почти никто толком не понял), но я вообще ничего не выучил, и понял я это только в последний день перед экзаменом, то есть вчера. Причём в голове даже не отпечатались формулировки теорем и определений (на Анки я, кстати, забил, потому что было лень забивать туда формулировки и я чёт так и не разобрался (не пытался), как там работает интервальное повторение). Поэтому весь день перед экзаменом я сидел, унывал и прокрастинировал, а ночью всё же решил принять свою участь и просто выучил по-быстрому определения и сделал на всякий случай большую шпаргалку с ними же. В общем, в итоге я вывез всё просто на удаче: я специально пришёл пораньше, чтобы сесть за парту подальше и чтобы у меня экзамен приняла наш лектор (остальные принимающие более строгие, приходят они не к началу экзамена обычно, а спустя минут сорок), мне попался простейший билет про интегралы систем диффуров, где даже доказательств толком не было (но я всё равно на всякий случай списал его подчистую), мне попались простейшие доп-вопросы на формулировки теорем и определений, а потом мне дали задачку на пятёрку (при том, что я ничего не знаю) (задача была про устойчивость решений, там надо было из линейной однородной неустойчивой системы с постоянными коэффициентами сделать асимптотически устойчивую, добавив к правой части системы какую-то функцию; там это делается через рандомный выбор функции Ляпунова и там уже потом надо будет выбирать вот эту добавочную функцию, чтобы производная функции ляпунова была отрицательной везде), которую я поначалу не хотел решать, потому что думал, что ничего не получится, и потому просто сидел и тупил в условие, а потом попробовал решить и она решилась сама, почти.

И в связи с этим всем я чувствую себя чуть менее, чем отвратительно, потому что я получил пятёрку по сути ни за что и если бы мне попался не такой лайтовый билет, я бы, скорее всего, всё заруинил. Бтв, как я случайно узнал позже, значительная часть людей решили тупо не идти на этот экзамен, чтобы у них была неявка, которую можно было бы закрыть липовой справкой от врача имплайс нет долга и у тебя есть шансы подготовиться к пересдаче. Так что мне походу повезло ещё крупнее, чем могло показаться на первый взгляд. НА самом деле, экзамен етот действительно довольно сложный, по крайней мере по своему объёму: там материал с двух семестров и, если ты не сдавал опциональный коллоквиум (который бы аннулировал часть вопросов с экзамена), то тебе пришлось бы учить материал за целый год диффуров.

А содержание екзамена, на самом деле, не такое плохое и унылое, но я просто тупой и не могу вместить это всё себе в голову, а то, что вместилось, я забуду уже завтра. Ну там в порядке очерёдности диффуры первого порядка и всё для них (существование и единственность решения задачи Коши, всякие теоремы про единственность, интеграл для уравнения в симметричной форме, интегрирующий множитель), потом системы диффуров (условие липшица как вспомогательная штука, существование и единственность решений через теорему Пикара, там, где про последовательные приближения, почти линейные системы, ещё чёто), потом про линейные однородные уравнения/системы и линейные неоднородные уравнения/системы, немного про системы с периодическими коэффициентами, траектории и фазовые портреты (особые точки по пуанкаре), куча теорем про устойчивость решений (тупо по определению, для линейно однородных, по первому приближению, когда у тебя линейная часть представляет из себя просто Ax (A - постоянная матрица), через функцию ляпунова и ещё что-то вроде было), затем про интегралы систем (примерно по концепции с смыслу то же самое, что и для просто уравнений, но сложнее), дифференцируемость решений по параметрам и начальным данным (вот тут я уже не пытался понимать доказательства) и теоремы про аналитичность решений систем уравнений и линейных систем уравнений (вот тут уже совсем тёмный лес, но я так понял, что это просто, что если в самом уравнении всякие штуки раскладываются в сходящиеся ряды, но решение тоже можно разложить в сходящийся где-то там ряд).

Ну, это да, я забуду уже завтра, точно так же, как я забыл почти всё из топологии (а там были интересные штуки, которые часто используются в матане => в диффурах, но мне ни то, ни другое всё равно не сильно интересно), аналитической геометрии (даже не вспомню, что такое первая квадратичная форма и зачем она там нужна, хотя вроде курс был неплохой), линейной алгебры (какие такие группы и поля?), ну, и вообще всего-всего-всего, потому что я ничего не понимаю, я ничего не запоминаю, я не обучаем на все сто процентов.

Чувствую себя отвратительно, настроения нет никакого, а у меня ещё миллион экзаменов, к которым я не готов прямо совсем, поэтому я уже даже не думаю о чём-то кроме этих тупых билетов. На лекции по двум предметам, по которым будут экзамены, я даже практически не приходил ни разу. Следующий экзамен - по предмету "параллельные алгоритмы" и он уже в понедельник на следующей неделе. Я даже приблизительно пока что не знаю, что это, и, если честно, не сильно интересно. Попробую сразу учить только формулировки определений и теорем, а потом уже только приступать к доказательствам и прочим подробностям.

В последнее время както мне в особенности не очень в голову лезут всякие плохие мысли и вообще я окончательно запутался и ничего не хочу

футуре фанк заслушанный-переслушанный
https://youtu.be/oRS_qvP4Aeg
https://youtu.be/Wi44nxaDg9w
https://youtu.be/prUd4s5P-iM
https://youtu.be/y2_N72iuM4g
https://youtu.be/-7TS3Ayjdlk
https://youtu.be/Vc6vdaQyOo4

чёт захотелось переслушать
https://soundcloud.com/g59/inolongerfeartherazorguardingmyheelthree
https://soundcloud.com/g59/killyourselfpartiii
https://soundcloud.com/g59/killyourself4

у Тессы там, оказывается, не так давно (ага, месяц назад) вышел новый клип на песенку, но это больше повод переслушать её более удачные песенки, например, вот эту:
https://youtu.be/eNtK6jx9y4A
А клип этот новый вообще отвратительный, не понимаю, как до такого можно было додуматься, бе.

ну а сегодня да, я только сдал экзамен и побегал, остальное время прокрастинировал
278 269830
утром долго не мог встать с кровати, хотел прибраться немного в комнате, но хватило меня только на то, чтобы застелить кровать, хотел начать готовиться к экзкмену, но смог заставить себя только двадцать минут почитать книжку

за окном уже неделю на какой-то стройке неподалёку то ли забивают какие-то сваи, то ли ещё что-то там делают, и мне уже из-за этого постоянного фонового стука уже физически плохо

попробую сейчас ещё раз начать готовиться

https://youtu.be/YWN81V7ojOE
неплохо
видеоряд так вообще отличный
.jpg16 Кб, 500x375
PoppyFanboy !VTLpv6lgGw 279 269884
>>269830
Нет, не могу себя заставить начать, пойду спать
280 270271
Да-а, сегодня у меня настроение внезапно чуть получше, но вчера я чёт пробил очередное дно и мне совсем плохо стало от осознания того, что уже два года прошло, а я стал только ещё большим придурком. Я вот не понимаю, это со мной что-то не так или я просто неправильно что-то делаю (а, ну да, вернее не делаю, так что автоматически валиден первый вариант).

Вчера побегал. Изначально не хотел идти, но чего-то под конец дня настроение в конец испортилось, поэтому решил всё же побегать и попытаться отвлечься. Правда, в итоге мне стало только ещё хуже. Пробежал без остановок 45 минут в медленном пикрил темпе. Вышло 8.5 км приблизительно. Мог бы, наверное, и до девяти дотянуть, но у меня тогда ноги отломались бы. Да и уже после даже такой тренировки, когда остановился, почувствовал какое-то неприятное ощущение в коленях. Оно почти сразу же прошло, но всё равно неприятно.

Два дня пытался бороться с ленью и нежеланием готовиться к этому глупому предмету. Короче, "параллельные алгоритмы" на проверку оказались каким-то приложением алгебры, где просто вводится понятие "параллельной формы" https://ru.wikipedia.org/wiki/Ярусно-параллельная_форма_графа, а потом доказывается несколько теорем про то, параллельные формы каких высоты и широты можно использовать для распараллеливания каких-то там алгоритмов (и их там было довольно мало, только: всякие арифметические операции, операции с матрицами, LU-разложение ленточной симметричной матрицы с шириной ленты три (чего, зачем), решение линейной системы уравнений). Ещё зачем-то туда впихнули вообще почти анрилейтед кусочек теории графов и названия директив OpenMP и что они означают (ну, э, а зачем это давать просто как знание в каком-то вакууме, это очень странно). И да, как оказалось, материала почти никакого не было (понятия не имею, что происходило на лекциях), так что можно было вообще за день подготовиться, но вместо этого я полтора дня лежал в кровати и унывал, а потом два дня готовился в режиме "так, двадцать минут поразбирался, можно час отдохнуть".

А, а сам экзамен я сдал, поставили пятёрку, но там всем почти ставили пятёрку, потому что там прочитать-то надо было всего-ничего, чтобы мочь отвечать на доп-вопросы, а билет можно было спокойно списать.

Следующий экзамен - базы данных, на лекции по которым я сходил только пару раз, понял, что лектор говорит слишком быстро и я вообще не понимаю, что происходит, и забил на всё это. Думаю, нет смысла пытаться заставлять себя всё свободное время готовиться к экзаменам, потому что я всё равно этого не делаю 24/7. Большую часть времени я вообще трачу на какую-то дегенеративную ерунду, потому что готовиться к некст экзамену мне не хочется, а заниматься чем-то условно-полезным мне не позволяет чувство, будто бы я теряю время, которое мог бы потратить на подготовку к экзамену. Короче, это всё полная ерунда, надо как-то немного отвлекаться от всего этого, особенно с учётом того, что эта дрянь продлится ещё как минимум до первого июля включительно.

Отказ от фонового контента (музыка/стримы) всё же не имеет никакого смысла. Да, он забирает кусок моего внимания, но, в любом случае, по крайней мере днём, всё равно есть куча фоновых шумов с улицы / из соседних квартир / из квартиры, в которой я нахожусь, которые не только отвлекают не в меньшей степени, чем стримы/музыка, так ещё и сильно раздражают ебучая стройка, ебучие сваи, которые они с самого утра и до вечера забивают, ебучие шумные грузовики и строительная техника. Неделю ничего не слушал на фоне, пока пытался готовиться, но никакого существенного прироста продуктивности не заметил: так же постоянно туплю, так что всё же да, я просто тупая чмоха. Но всё равно, наверное, стримы лучше фоном не ставить, вот просто музыка вполне подойдёт.

Чего-то сегодня, пока ехал в внинвеирситет, глаза очень сильно чесались и слезились, неужели аллергия на что-то

Купил полтора литра колы зеро, пойду выпью её всю за раз и здохну

Хорошие
https://youtu.be/JCOSvLu8ZLY
https://youtu.be/7W35dyPTh6o
https://youtu.be/RYTqq02gZIo

https://youtu.be/dDsrLsR3rBA

Как-то не слушал их раньше и почти ни одной песни не слышал, кроме очевидного ду хаста. Вот эти пока что понравились:
https://youtu.be/6iaxDxHUWP8
https://youtu.be/EOnSh3QlpbQ
https://youtu.be/pat2c33sbog

Трек неплохой, а клип - так себе
https://youtu.be/EBLF26-Irdc
280 270271
Да-а, сегодня у меня настроение внезапно чуть получше, но вчера я чёт пробил очередное дно и мне совсем плохо стало от осознания того, что уже два года прошло, а я стал только ещё большим придурком. Я вот не понимаю, это со мной что-то не так или я просто неправильно что-то делаю (а, ну да, вернее не делаю, так что автоматически валиден первый вариант).

Вчера побегал. Изначально не хотел идти, но чего-то под конец дня настроение в конец испортилось, поэтому решил всё же побегать и попытаться отвлечься. Правда, в итоге мне стало только ещё хуже. Пробежал без остановок 45 минут в медленном пикрил темпе. Вышло 8.5 км приблизительно. Мог бы, наверное, и до девяти дотянуть, но у меня тогда ноги отломались бы. Да и уже после даже такой тренировки, когда остановился, почувствовал какое-то неприятное ощущение в коленях. Оно почти сразу же прошло, но всё равно неприятно.

Два дня пытался бороться с ленью и нежеланием готовиться к этому глупому предмету. Короче, "параллельные алгоритмы" на проверку оказались каким-то приложением алгебры, где просто вводится понятие "параллельной формы" https://ru.wikipedia.org/wiki/Ярусно-параллельная_форма_графа, а потом доказывается несколько теорем про то, параллельные формы каких высоты и широты можно использовать для распараллеливания каких-то там алгоритмов (и их там было довольно мало, только: всякие арифметические операции, операции с матрицами, LU-разложение ленточной симметричной матрицы с шириной ленты три (чего, зачем), решение линейной системы уравнений). Ещё зачем-то туда впихнули вообще почти анрилейтед кусочек теории графов и названия директив OpenMP и что они означают (ну, э, а зачем это давать просто как знание в каком-то вакууме, это очень странно). И да, как оказалось, материала почти никакого не было (понятия не имею, что происходило на лекциях), так что можно было вообще за день подготовиться, но вместо этого я полтора дня лежал в кровати и унывал, а потом два дня готовился в режиме "так, двадцать минут поразбирался, можно час отдохнуть".

А, а сам экзамен я сдал, поставили пятёрку, но там всем почти ставили пятёрку, потому что там прочитать-то надо было всего-ничего, чтобы мочь отвечать на доп-вопросы, а билет можно было спокойно списать.

Следующий экзамен - базы данных, на лекции по которым я сходил только пару раз, понял, что лектор говорит слишком быстро и я вообще не понимаю, что происходит, и забил на всё это. Думаю, нет смысла пытаться заставлять себя всё свободное время готовиться к экзаменам, потому что я всё равно этого не делаю 24/7. Большую часть времени я вообще трачу на какую-то дегенеративную ерунду, потому что готовиться к некст экзамену мне не хочется, а заниматься чем-то условно-полезным мне не позволяет чувство, будто бы я теряю время, которое мог бы потратить на подготовку к экзамену. Короче, это всё полная ерунда, надо как-то немного отвлекаться от всего этого, особенно с учётом того, что эта дрянь продлится ещё как минимум до первого июля включительно.

Отказ от фонового контента (музыка/стримы) всё же не имеет никакого смысла. Да, он забирает кусок моего внимания, но, в любом случае, по крайней мере днём, всё равно есть куча фоновых шумов с улицы / из соседних квартир / из квартиры, в которой я нахожусь, которые не только отвлекают не в меньшей степени, чем стримы/музыка, так ещё и сильно раздражают ебучая стройка, ебучие сваи, которые они с самого утра и до вечера забивают, ебучие шумные грузовики и строительная техника. Неделю ничего не слушал на фоне, пока пытался готовиться, но никакого существенного прироста продуктивности не заметил: так же постоянно туплю, так что всё же да, я просто тупая чмоха. Но всё равно, наверное, стримы лучше фоном не ставить, вот просто музыка вполне подойдёт.

Чего-то сегодня, пока ехал в внинвеирситет, глаза очень сильно чесались и слезились, неужели аллергия на что-то

Купил полтора литра колы зеро, пойду выпью её всю за раз и здохну

Хорошие
https://youtu.be/JCOSvLu8ZLY
https://youtu.be/7W35dyPTh6o
https://youtu.be/RYTqq02gZIo

https://youtu.be/dDsrLsR3rBA

Как-то не слушал их раньше и почти ни одной песни не слышал, кроме очевидного ду хаста. Вот эти пока что понравились:
https://youtu.be/6iaxDxHUWP8
https://youtu.be/EOnSh3QlpbQ
https://youtu.be/pat2c33sbog

Трек неплохой, а клип - так себе
https://youtu.be/EBLF26-Irdc
D9gpTESUEAUOrrr.jpeg422 Кб, 1691x2047
PoppyFanboy !VTLpv6lgGw 281 270988
>>270271
Ну, на самом деле, что и требовалось ожидать, я вообще не подготовился и закономерно получил тройку, причём по моей же просьбе (в этот раз и только в этот так можно было): я хотел сначала что-то там ответить, списал билет, но-о потом посмотрел на то, как принимают у других людей, какие им доп-вопросы задают, понял, что я сейчас не то что про какие-то там хитрые индексы или реляционную алгебру рассказать не смогу нормально, я даже вряд ли даже простейший запрос смогу написать без гугла, и решил что а ну его. Что буду пытаться отвечать, что нет, в обоих случаях выйдет удовлетворительно. Ну, тем не менее, часа три я там просидел просто так: надо было с самого начала просить тройку, но я чёт подумал, что, может, и выйдет чего, но потом передумал и уже тупо сидел и ждал, пока все ответят, не хотелось вообще ничего пытаться предпринять, просто, чтобы всё как-нибудь разрешилось само собой, пусть и ценой потраченного времени, а я просто проплыл по течению и, в конце концов, уткнулся бы в берег. Ну, собственно, так всё и вышло, да.

Минус бесплатные деньги, но там энивей не то чтобы сильно много.

Некст экзамен - матлогика, двадцать пятого июня, и вот тут, скорее всего, надо будет немного постараться НУ, СУКА, НУ ЧУТЬ-ЧУТЬ ХОТЯ БЫ, потому что так же как с предыдущими экзаменами тут вряд ли прокатит. Если сдам, то можо будет уже не сильно беспокоиться о том, что у меня получится с остающимися у меня после этого двумя экзаменами: в теории можно сейчас даже не приходить, а сразу отправиться на пересдачу осенью. Сейчас я вряд ли к ним смогу подготовиться хоть как-то, даже на уровне общего понимания. Да и просто сил никаких ни на что нет, хочется просто круглосуточно лежать и смотреть мультики слеш играть в игры.

Но не знаю, выйдет ли у меня сейчас что-то даже с матлогикой: чёт с каждым следующим днём я итеративно чувствую себя всё более и более подавленно. Неприятно. Я не знаю, может, к психиатру/психотерапевту сходить, и пусть они уже там как-то определятся: я просто ленивая чмоха или, э, не просто? Не знаю, не хочу пытаться самому себе выдумывать диагнозы. Но это, в любом случае, после сессии, сейчас мне бы с ней хоть как-нибудь расправиться.

А так: в понедельник вечером я еле-как заставил себя начать делать уборку в комнате (как-то это было тяжеловато, очень не хотелось этим заниматься, хотя объективно уже стоило это сделать) и заодно решил избавиться от некоторого количества хлама (выбросил далеко не всё, что хотелось бы, к сожалению; я щитаю, всему виной слишком большое количество фурнитуры со всякими ящиками (а у меня её очень много и я в этом не виноват, всё решили за меня): они непременно все раномерно будут набиваться всякими вещами, полезными и не очень, судя по всему, потому что хлам стремится занять весь предоставленный ему объём пространства в шкафах и на полках). На следующий день упаковал весь собранный хлам так, чтобы его можно было вынести за один заход (потратив на это полрулона скотча), успешно избавился от него и потом ещё немного пропылесосил пол и вытер пыль в самых критических местах. Всё, на этом моя полезная деятельность на вторник завершилась, остаток дня прошёл в тумане.

В среду была полная ерунда, я не мог заставить себя начать готовиться к БД, только под конец дня вроде было сел и начал разбираться, но, ошибочно решив, что, в принципе, материала не так уж и много, забил на всё это дело и пошёл смотреть мультики. Вчера я всё же заставил себя сесть и хотя бы пролистать материалы для подготовки (естественно, включив фоном какой-то мусорный стрим или ещё что-то, уже нн помню) и понял, что малость прогадал. Материалы для подготовки представляли из себя презентации, на фоне которых нам читали лекции (на которые я не ходил, конечно же) и, если поначалу там ещё хоть как-то можно было разобраться, то с какого-то момента всё стало ну совсем запутанно и неинформативно. Вот, в частности, про индексы и кусок реляционноц алгебры там совсем запутанно было и я даже не пытался разобраться, когда у меня там оставалось N часов до экзамена.

Воттт так я готовился к экзамену

А, кстати, совсем забыл, в среду я же ещё бегать пытался, только вот ничего не вышло: через 10 минут у меня заболел голеностоп (вроде так это называется) и к тому же я выдохся почему-то. И это при том, что за пару дней до этого я вполне нормально пробежал 45 минут. У меня наверняка какая-то техника не такая или я так и не научился бежать в заданном темпе, но в конечном итоге результат один - меня эти занятия бегом уже порядком достали. Никаких профитов с этого, только каждый раз себе настроение порчу.

И да, всё, я теперь походу не стабильно 66.5, а стабильно жесть70. Именно поэтому я прямо сейчас поел в кфс. Tak pobedim

Не слышал раньше о них. Хорошие
https://youtu.be/0JQ0xnJyb0A
https://youtu.be/0HtvH34CmZY

Оказывается, у них в этом альбоме есть ещё классные песни, помимо Fall Victim и Mercy Me
https://youtu.be/kQv57nQ4QYk
https://youtu.be/MpPJ7vgeMMg
D9gpTESUEAUOrrr.jpeg422 Кб, 1691x2047
PoppyFanboy !VTLpv6lgGw 281 270988
>>270271
Ну, на самом деле, что и требовалось ожидать, я вообще не подготовился и закономерно получил тройку, причём по моей же просьбе (в этот раз и только в этот так можно было): я хотел сначала что-то там ответить, списал билет, но-о потом посмотрел на то, как принимают у других людей, какие им доп-вопросы задают, понял, что я сейчас не то что про какие-то там хитрые индексы или реляционную алгебру рассказать не смогу нормально, я даже вряд ли даже простейший запрос смогу написать без гугла, и решил что а ну его. Что буду пытаться отвечать, что нет, в обоих случаях выйдет удовлетворительно. Ну, тем не менее, часа три я там просидел просто так: надо было с самого начала просить тройку, но я чёт подумал, что, может, и выйдет чего, но потом передумал и уже тупо сидел и ждал, пока все ответят, не хотелось вообще ничего пытаться предпринять, просто, чтобы всё как-нибудь разрешилось само собой, пусть и ценой потраченного времени, а я просто проплыл по течению и, в конце концов, уткнулся бы в берег. Ну, собственно, так всё и вышло, да.

Минус бесплатные деньги, но там энивей не то чтобы сильно много.

Некст экзамен - матлогика, двадцать пятого июня, и вот тут, скорее всего, надо будет немного постараться НУ, СУКА, НУ ЧУТЬ-ЧУТЬ ХОТЯ БЫ, потому что так же как с предыдущими экзаменами тут вряд ли прокатит. Если сдам, то можо будет уже не сильно беспокоиться о том, что у меня получится с остающимися у меня после этого двумя экзаменами: в теории можно сейчас даже не приходить, а сразу отправиться на пересдачу осенью. Сейчас я вряд ли к ним смогу подготовиться хоть как-то, даже на уровне общего понимания. Да и просто сил никаких ни на что нет, хочется просто круглосуточно лежать и смотреть мультики слеш играть в игры.

Но не знаю, выйдет ли у меня сейчас что-то даже с матлогикой: чёт с каждым следующим днём я итеративно чувствую себя всё более и более подавленно. Неприятно. Я не знаю, может, к психиатру/психотерапевту сходить, и пусть они уже там как-то определятся: я просто ленивая чмоха или, э, не просто? Не знаю, не хочу пытаться самому себе выдумывать диагнозы. Но это, в любом случае, после сессии, сейчас мне бы с ней хоть как-нибудь расправиться.

А так: в понедельник вечером я еле-как заставил себя начать делать уборку в комнате (как-то это было тяжеловато, очень не хотелось этим заниматься, хотя объективно уже стоило это сделать) и заодно решил избавиться от некоторого количества хлама (выбросил далеко не всё, что хотелось бы, к сожалению; я щитаю, всему виной слишком большое количество фурнитуры со всякими ящиками (а у меня её очень много и я в этом не виноват, всё решили за меня): они непременно все раномерно будут набиваться всякими вещами, полезными и не очень, судя по всему, потому что хлам стремится занять весь предоставленный ему объём пространства в шкафах и на полках). На следующий день упаковал весь собранный хлам так, чтобы его можно было вынести за один заход (потратив на это полрулона скотча), успешно избавился от него и потом ещё немного пропылесосил пол и вытер пыль в самых критических местах. Всё, на этом моя полезная деятельность на вторник завершилась, остаток дня прошёл в тумане.

В среду была полная ерунда, я не мог заставить себя начать готовиться к БД, только под конец дня вроде было сел и начал разбираться, но, ошибочно решив, что, в принципе, материала не так уж и много, забил на всё это дело и пошёл смотреть мультики. Вчера я всё же заставил себя сесть и хотя бы пролистать материалы для подготовки (естественно, включив фоном какой-то мусорный стрим или ещё что-то, уже нн помню) и понял, что малость прогадал. Материалы для подготовки представляли из себя презентации, на фоне которых нам читали лекции (на которые я не ходил, конечно же) и, если поначалу там ещё хоть как-то можно было разобраться, то с какого-то момента всё стало ну совсем запутанно и неинформативно. Вот, в частности, про индексы и кусок реляционноц алгебры там совсем запутанно было и я даже не пытался разобраться, когда у меня там оставалось N часов до экзамена.

Воттт так я готовился к экзамену

А, кстати, совсем забыл, в среду я же ещё бегать пытался, только вот ничего не вышло: через 10 минут у меня заболел голеностоп (вроде так это называется) и к тому же я выдохся почему-то. И это при том, что за пару дней до этого я вполне нормально пробежал 45 минут. У меня наверняка какая-то техника не такая или я так и не научился бежать в заданном темпе, но в конечном итоге результат один - меня эти занятия бегом уже порядком достали. Никаких профитов с этого, только каждый раз себе настроение порчу.

И да, всё, я теперь походу не стабильно 66.5, а стабильно жесть70. Именно поэтому я прямо сейчас поел в кфс. Tak pobedim

Не слышал раньше о них. Хорошие
https://youtu.be/0JQ0xnJyb0A
https://youtu.be/0HtvH34CmZY

Оказывается, у них в этом альбоме есть ещё классные песни, помимо Fall Victim и Mercy Me
https://youtu.be/kQv57nQ4QYk
https://youtu.be/MpPJ7vgeMMg
D911TU5VUAEx7wY.jpeg199 Кб, 1225x2000
PoppyFanboy !VTLpv6lgGw 282 271649
Так и не смог заставить себя нормально подготовиться к матлогике (не смог даже все формулировки запомнить), но вытянул самый простой билет из вообще всех потенциально возможных и получил отл.

Ну, ладно.
PoppyFanboy !VTLpv6lgGw 283 271960
ревью компьютерной игры enter the gungeon
классный рогалик, можно стрелять из пушек и переворачивать столы. очень сильно напоминает the binding of isaac, но тут поинтереснее генерация уровней и значительно больше прожектайлов в тебя в среднем летит

ревью компьютерной игры my friend pedro
хорошая игра, можно стрелять, на высокой сложности довольно сложно собирать большие комбо

ревью аниме-сериала хеллсинг (2001)
крутой мультик, есть вампиры, классный саундтрек

ревью программы soundwire (сервер на windows + клиент на android)
плохая программа, мне не нравится, слишком большая задержка

ревью рисунка >.jpg
хороший рисунок, мне нравится

ревью какого-то тупого репа
https://youtu.be/ubEsSntykUQ
https://youtu.be/9T0qM4Dfrvw
реп, конечно, тупой, но мне нравится
D-JGHgJU0AAoBu9.jpeg422 Кб, 1443x2048
PoppyFanboy !VTLpv6lgGw 284 272547
Зафакапил экзамен по матану, по-глупому попавшись на списывании. На самом деле, я на него изначально и идти не хотел, но всё же неприятное ощущение упускаемой выгоды заставило пролистать определения и разбить фотки конспектов по билетам и выделить определения, чтобы проще было списывать. Ну, это не сильно повлияло на конечный исход. Придётся осенью пересдавать, но к тому времени уже, наверное, придётся подготовиться.

Думаю не идти на оставшийся единственный несданный зачёт (но по факту экзамен) по "Операционным системам", в которых от операционных систем одно название только, а сам курс представлял из себя какую-то мешанину из всяких концептов, как-то относящихся к компам. На подготовку только один день и, энивей, мне надо будет пересдавать матан, я ничего не теряю. К тому же я чёт уже устал за чуть больше месяца этой всей ерунды, я уже просто вообще никак не могу впихивать в себя какую-либо информацию.
285 272609
DlXVF7VUwAEvd4A.jpg large.jpg108 Кб, 1355x1121
Рируру !!gYmpHned/k 286 272626
>>272609
И не говори. Поверить не могу, что человек такого уровня, способный, в частности, найти на бумажке три последние цифры числа 9^811, может рассматривать списывание.
Вспоминает новогодний пост с требованием достигать новых высот и идёт полировать ботинки с укреплённым носком.
.mp41,1 Мб, mp4,
480x360, 0:42
PoppyFanboy !VTLpv6lgGw 287 272637
>>272626
Да чего же ты так к этим цифрам прицепился, хватит меня ими травить пожалусттто

Списывание я рассматривал как вариант всегда и на каждом экзамене, в том числе и на этом, потому что знать, как определяются и какие свойства имеют криволинейные интегралы от функций комплексной переменной, а ещё разбираться в том, что там такое кольцо множеств, измеримая функция и интеграл Лебега, мне не очень хочется, это какая-то сложная ерунда, не хочу.

>новых высот


новых высот не будет, да и не было их по существу, модеватор, заквывай твед (ಥ﹏ಥ)
.jpg76 Кб, 640x800
PoppyFanboy !VTLpv6lgGw 288 273083
>>272547

>Думаю не идти на оставшийся единственный несданный зачёт


Мне, наверное, ещё ни разу так не полоскали мозги. Мне аж физически плохо стало. Вчера пытался готовиться, лишь бы отстали от меня, сегодня сдал. Лучше бы не делал этого, конечно, чувствовал себя бы сейчас немного лучше, но тогда меня бы совсем задавили. Впрочем, полоскание мозгов так и не прекратилось, просто был найден другой повод для этого.

Сегодня, когда пришёл домой, пытался поспать, но не вышло из-за шума и света. Пытался побегать, но смог только 15 мин. бега + 2.5 шага + 5 бега + 2.5 шага + 5 бега = 5.34 км. Не могу, слишком жарко, пыльно и душно, дыхание сбивается, ноги болят, мышцы сводит.

А ещё я бегал двадцать пятого июня, тогда вышло значительно лучше, чем сегодня, но всё равно очень так себе: 7 км за 37:16. Нет никакого постоянства в прогрессе: в один день получается нормально пробежать, в другой - задыхаешься на пятой минуте бега.

Параллельно со сдачей экзаменов меня потянуло всё же пройти нормально ремастер дарк соулса, а не дропать его на середине ПОТОМУЧЧТО ИГРА ТУПАЯ НЕНАВЖУ. Это уже четвёртая или пятая попытка, наверное. Кое-как дошёл до двух клоунов в анор лондо, прокачав непонятно что с кучей пойза, почти без здоровья, катаной в одной руке и эстоком в другой (вообще ни разу не функционально, но зато очень круто смотрится), и дальше решил идти на четырёх королей (эсток пришлось снять: тут он совсем бесполезен). Но, как оказалось, моя зубочистка им почти не наносит урона, а кровотечение вообще ни разу не прокнулось:
https://www.twitch.tv/videos/446792111
Есть вариант сейчас по-честному нафармить душ и тупо купить крутую пиромантию, но, блин, чёт мне не хочется уже продолжать играть в это, скорее всего, опять дропну на половине, чтобы через месяц опять вернуться, и так по кругу.

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

Не знаю, что сейчас буду делать, ничего не хочется.
.jpg76 Кб, 640x800
PoppyFanboy !VTLpv6lgGw 288 273083
>>272547

>Думаю не идти на оставшийся единственный несданный зачёт


Мне, наверное, ещё ни разу так не полоскали мозги. Мне аж физически плохо стало. Вчера пытался готовиться, лишь бы отстали от меня, сегодня сдал. Лучше бы не делал этого, конечно, чувствовал себя бы сейчас немного лучше, но тогда меня бы совсем задавили. Впрочем, полоскание мозгов так и не прекратилось, просто был найден другой повод для этого.

Сегодня, когда пришёл домой, пытался поспать, но не вышло из-за шума и света. Пытался побегать, но смог только 15 мин. бега + 2.5 шага + 5 бега + 2.5 шага + 5 бега = 5.34 км. Не могу, слишком жарко, пыльно и душно, дыхание сбивается, ноги болят, мышцы сводит.

А ещё я бегал двадцать пятого июня, тогда вышло значительно лучше, чем сегодня, но всё равно очень так себе: 7 км за 37:16. Нет никакого постоянства в прогрессе: в один день получается нормально пробежать, в другой - задыхаешься на пятой минуте бега.

Параллельно со сдачей экзаменов меня потянуло всё же пройти нормально ремастер дарк соулса, а не дропать его на середине ПОТОМУЧЧТО ИГРА ТУПАЯ НЕНАВЖУ. Это уже четвёртая или пятая попытка, наверное. Кое-как дошёл до двух клоунов в анор лондо, прокачав непонятно что с кучей пойза, почти без здоровья, катаной в одной руке и эстоком в другой (вообще ни разу не функционально, но зато очень круто смотрится), и дальше решил идти на четырёх королей (эсток пришлось снять: тут он совсем бесполезен). Но, как оказалось, моя зубочистка им почти не наносит урона, а кровотечение вообще ни разу не прокнулось:
https://www.twitch.tv/videos/446792111
Есть вариант сейчас по-честному нафармить душ и тупо купить крутую пиромантию, но, блин, чёт мне не хочется уже продолжать играть в это, скорее всего, опять дропну на половине, чтобы через месяц опять вернуться, и так по кругу.

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

Не знаю, что сейчас буду делать, ничего не хочется.
PoppyFanboy !VTLpv6lgGw 289 273872
Походу разучился говорить, но я попробую

>>273083

>решил идти на четырёх королей


>моя зубочистка им почти не наносит урона


Прокачал катану до +15 и всё же прикончил их со второй попытки. Как оказалось, если сражаться с одним из них, а остальных держать на достаточно далёком расстоянии от себя, то те, что стоят вдалеке, не будут нападать. Тупой босс. Отпало желание играть.

Не помню, что было в ночь с понедельника на вторник, скорее всего, опять аутировал во что-то странное в интернете. Во вторник всё же решил купить новые наушники: у тех, которые были на тот момент, слишком короткий провод, который не дотягивался до разъёма в системнике, из-за чего приходилось стримить звук с компа на телефон, а сам звук слушать с телефона через наушники (но даже так было ужасно неудобно, не понимаю, как можно было додуматься сделать настолько короткий шнур и вообще, откуда у меня взялись такие странные наушники).

Хотел подобрать что-нибудь чуть подороже, в пределах полутора тысяч, но так ничего и не выбрал, поэтому взял какие-то лоу-энд фиолетовые затычки-панасоники за питсот (а ещё я это сделал, потому что они были в наличии в удобном мага зине, в котором можно спокойно всё выбрать в терминале, а потом просто оплатить покупку и тебе принесут все товары со склада, и не надо ни с кем говорить ртом). У меня такие уже были когда-то, единственный серьёзный недостаток - это замерзающий на морозе провод (кстати, не знаю, уязвим ли в замёрзшем состоянии провод для повреждений: создаётся ощущение, что если в таком состоянии согнуть его пополам, то он просто разломится на две части), а в остальном - вроде вполне нормальные (впрочем, мне практически не с чем сравнивать). Только ещё звук обычный и какой-то немного плоский, это немного огорчает. Для сравнения у родителей одалживал какие-то наушники, тоже затычки, и они сами по себе всё басс-бустили настолько сильно, что из опенинга эроманги сенсея делали какой-то хардбасс (какая же классная песенка, уже на протяжении года периодически переслушиваю). Ну, это уже другая крайность.

Зато жесть они красивые, фиолетовенькие. Только жаль, что амбушюры тоже не фиолетовые, а просто белые полу-прозрачные. Там была ещё немного другая модель панасоников, у которых амбушюры в цвет наушников, но у этой модели не было фиолетовый расцветки, а за компромиссом-розовым-цветом мне пришлось бы ехать в какую-то жеппу.

После я пошёл шататься по петроградской стороне, давно хотел погулять где-нибудь. Но чего-то я, наверное, где-то не там ходил, потому что из чего-то хоть сколько нибудь интересного мне попались только:

- какой-то онкологический центр советской застройки. Он просто очень сильно выбивался из общей картины и выглядел как-то странно: довольно высокий, по форме напоминает крепость с бастионами, значительная часть здания была обклеена мелкой глянцевой плиткой, из-за чего оно смотрелось ещё более нелепо на фоне рядом стоящих домов

- памятник женщинам блокады: ну, он.. он выглядит интересно

- какое-то массивное всратое здание со стеклянным фасадом на противоположном берегу Невы

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

А под конец меня дёрнуло пройтись по Крестовскому острову, видимо, потому что я забыл как сильно ненавижу это место. Ну, собственно, да, убедился в этом ещё раз. Единственная его положительная черта - это то, что он весь засажен деревьями, но в остальном: уродливые новостройки и без нужды широкие проспекты - этого достаточно, чтобы составить полное описание этого места.

За те два часа, что я там бродил отбил себе колени из-за обуви: ощущения, как будто бы босиком ходил. Всё же кеды не подходят для того, чтобы проходить в них >10 км за раз и уж тем более бегать. Но мне всё равно не хочется идти покупать новые кроссовки на смену старым немного-порванным. Эх, вот это проблемы у меня.

Как-то я нагулялся на ближайшее время, больше не хочется: слишком далеко ехать для гулябельных мест и, судя по всему, надо заранее выбирать маршрут, чтобы не получилось, как получилось.

Потом пошёл в квартиру к своей бабушке, чтобы отобрать у неё ноут на время, пока она на даче. Своего у меня нет за ненадобностью (в большинстве случаев) и отсутствием денег на покупку чего-то нормального. Это был отдельный квест: мне предстояло открыть три двери связкой с шестью ключами. И, несмотря на то, что один раз мне уже удавалось это сделать, я опять застрял с этими замками минут на пять, открывая их, и минут на десять, закрывая всё обратно, постоянно забывая, какой ключ от какой двери, и просто тыкаясь в каждую замочную скважину всеми ключами подряд. В какой-то момент я подумал, что совсем двинулся головой, когда запутался с замками и понял, что закрыл дверь, но отпереть обратно не могу. Минуты две крутил ключ в замке, у которого, как потом оказалось, даже не было штифтов: я просто случайно на автомате запер другой замок на той же двери но, будучи уверенным, что он открыт, крутил другой, который даже не функционировал. So, this is what тест на аутизм looks like, ok На фоне ещё постоянно кто-то ходил по лифтовой площадке, что немного напрягало.

Ноут я брал, потому что думал с ним ходить в летнюю школку, которая начиналась с сегодняшнего дня, но, посидев там сегодня, я передумал. Это продолжение той штуки с ассемблером и каким-то эмулятором мейнфрейма, на которую я ходил вроде как в апреле раз в неделю на пару часов, только теперь оно проводится каждый будний день и по шесть часов (с перерывом, конечно). И чёт как-то оно, что тогда не сильно нравилось, а сейчас так совсем мне не улыбается туда ездить. Во-первых, ассемблер - это, конечно, здорово, я чуть-чуть потрогал, но, пожалуй, это не то, чем я хотел бы заниматься каждый день на протяжении следующего месяца. Во-вторых, занятия проходят в каком-то ленивом режиме: тогда за апрель мы только разобрались с основными командами ассемблера и написали простенькую программу, принимающую на вход число n и печатающую числа от n до 1 в несколько строк, и я даже не доделал её до конца, чтобы она удаляла лишние нули в записи чисел (а не заменяла на пробелы, как это сделал я), и сейчас темп занятий никак не изменился. За сегодня нам только рассказали про синтаксис макросов, написали что-то совсем-совсем простое с ними и ещё попробовали доделать ту программу с апреля, и как бы всё, вот так прошли 6 часов. И видно, что почти никто из студентов не заинтересован в том, чтобы что-то делать, поэтому не думаю, что ситуация резко изменится. Так что ближайшие пару месяцев меня ничто не удерживает от того, чтобы сидеть дома.

Родители жесть затравили просьбами сходить парикмахерскую: это продолжается уже месяца четыре и за последние пару дней только набрало обороты. Я понимаю, что то, что сейчас у меня на голове, выглядит мягко говоря не очень, но, если состригать, то будет вообще ни разу не лучше: у меня отвратительные волосы, которые не фиксируются никакими приспособлениями, поэтому исполнить адекватную причёску на короткие волосы у меня на голове практически невозможно. К тому же все эти парикмахерские - ужаснейшее испытание для меня: как минимум на сорок минут я буду обречён просидеть напротив отражения своей морды, от вида которой мне плохо и тошно где-то на физическом уровне, при этом после проведения экзекуции я непременно останусь недовольным результатом.

А что ещё сказать, я узнал, что я потреблядь и ведомый хомячок, готовый купить что угодно, лишь бы была красивая этикетка. Вот так я, проходя мимо автоматов с всякими при кольными жвачками, не удержался и взял пикрилейтед два, отдав космические для жвачки сто восемьдесят рублей (ну, по факту только 135, потому что кто-то забыл нажать на кнопку в автомате и забрать сдачу, но суть не в этом) при том, что я даже не сильно-то люблю жевательные резинки. И первая мысль после сего приобретения, возникшая в моей тупой голове: "Ох, зря я это сделал, можно же было на эти деньги купить литров четыре колы", - и это только подтвердило мой диагноз.

Жвачки, кстати, так себе: нет, в первые несколько секунд, конечно, тебя накрывает мощный вкус химозной черники, но потом он очень быстро уходит.
PoppyFanboy !VTLpv6lgGw 289 273872
Походу разучился говорить, но я попробую

>>273083

>решил идти на четырёх королей


>моя зубочистка им почти не наносит урона


Прокачал катану до +15 и всё же прикончил их со второй попытки. Как оказалось, если сражаться с одним из них, а остальных держать на достаточно далёком расстоянии от себя, то те, что стоят вдалеке, не будут нападать. Тупой босс. Отпало желание играть.

Не помню, что было в ночь с понедельника на вторник, скорее всего, опять аутировал во что-то странное в интернете. Во вторник всё же решил купить новые наушники: у тех, которые были на тот момент, слишком короткий провод, который не дотягивался до разъёма в системнике, из-за чего приходилось стримить звук с компа на телефон, а сам звук слушать с телефона через наушники (но даже так было ужасно неудобно, не понимаю, как можно было додуматься сделать настолько короткий шнур и вообще, откуда у меня взялись такие странные наушники).

Хотел подобрать что-нибудь чуть подороже, в пределах полутора тысяч, но так ничего и не выбрал, поэтому взял какие-то лоу-энд фиолетовые затычки-панасоники за питсот (а ещё я это сделал, потому что они были в наличии в удобном мага зине, в котором можно спокойно всё выбрать в терминале, а потом просто оплатить покупку и тебе принесут все товары со склада, и не надо ни с кем говорить ртом). У меня такие уже были когда-то, единственный серьёзный недостаток - это замерзающий на морозе провод (кстати, не знаю, уязвим ли в замёрзшем состоянии провод для повреждений: создаётся ощущение, что если в таком состоянии согнуть его пополам, то он просто разломится на две части), а в остальном - вроде вполне нормальные (впрочем, мне практически не с чем сравнивать). Только ещё звук обычный и какой-то немного плоский, это немного огорчает. Для сравнения у родителей одалживал какие-то наушники, тоже затычки, и они сами по себе всё басс-бустили настолько сильно, что из опенинга эроманги сенсея делали какой-то хардбасс (какая же классная песенка, уже на протяжении года периодически переслушиваю). Ну, это уже другая крайность.

Зато жесть они красивые, фиолетовенькие. Только жаль, что амбушюры тоже не фиолетовые, а просто белые полу-прозрачные. Там была ещё немного другая модель панасоников, у которых амбушюры в цвет наушников, но у этой модели не было фиолетовый расцветки, а за компромиссом-розовым-цветом мне пришлось бы ехать в какую-то жеппу.

После я пошёл шататься по петроградской стороне, давно хотел погулять где-нибудь. Но чего-то я, наверное, где-то не там ходил, потому что из чего-то хоть сколько нибудь интересного мне попались только:

- какой-то онкологический центр советской застройки. Он просто очень сильно выбивался из общей картины и выглядел как-то странно: довольно высокий, по форме напоминает крепость с бастионами, значительная часть здания была обклеена мелкой глянцевой плиткой, из-за чего оно смотрелось ещё более нелепо на фоне рядом стоящих домов

- памятник женщинам блокады: ну, он.. он выглядит интересно

- какое-то массивное всратое здание со стеклянным фасадом на противоположном берегу Невы

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

А под конец меня дёрнуло пройтись по Крестовскому острову, видимо, потому что я забыл как сильно ненавижу это место. Ну, собственно, да, убедился в этом ещё раз. Единственная его положительная черта - это то, что он весь засажен деревьями, но в остальном: уродливые новостройки и без нужды широкие проспекты - этого достаточно, чтобы составить полное описание этого места.

За те два часа, что я там бродил отбил себе колени из-за обуви: ощущения, как будто бы босиком ходил. Всё же кеды не подходят для того, чтобы проходить в них >10 км за раз и уж тем более бегать. Но мне всё равно не хочется идти покупать новые кроссовки на смену старым немного-порванным. Эх, вот это проблемы у меня.

Как-то я нагулялся на ближайшее время, больше не хочется: слишком далеко ехать для гулябельных мест и, судя по всему, надо заранее выбирать маршрут, чтобы не получилось, как получилось.

Потом пошёл в квартиру к своей бабушке, чтобы отобрать у неё ноут на время, пока она на даче. Своего у меня нет за ненадобностью (в большинстве случаев) и отсутствием денег на покупку чего-то нормального. Это был отдельный квест: мне предстояло открыть три двери связкой с шестью ключами. И, несмотря на то, что один раз мне уже удавалось это сделать, я опять застрял с этими замками минут на пять, открывая их, и минут на десять, закрывая всё обратно, постоянно забывая, какой ключ от какой двери, и просто тыкаясь в каждую замочную скважину всеми ключами подряд. В какой-то момент я подумал, что совсем двинулся головой, когда запутался с замками и понял, что закрыл дверь, но отпереть обратно не могу. Минуты две крутил ключ в замке, у которого, как потом оказалось, даже не было штифтов: я просто случайно на автомате запер другой замок на той же двери но, будучи уверенным, что он открыт, крутил другой, который даже не функционировал. So, this is what тест на аутизм looks like, ok На фоне ещё постоянно кто-то ходил по лифтовой площадке, что немного напрягало.

Ноут я брал, потому что думал с ним ходить в летнюю школку, которая начиналась с сегодняшнего дня, но, посидев там сегодня, я передумал. Это продолжение той штуки с ассемблером и каким-то эмулятором мейнфрейма, на которую я ходил вроде как в апреле раз в неделю на пару часов, только теперь оно проводится каждый будний день и по шесть часов (с перерывом, конечно). И чёт как-то оно, что тогда не сильно нравилось, а сейчас так совсем мне не улыбается туда ездить. Во-первых, ассемблер - это, конечно, здорово, я чуть-чуть потрогал, но, пожалуй, это не то, чем я хотел бы заниматься каждый день на протяжении следующего месяца. Во-вторых, занятия проходят в каком-то ленивом режиме: тогда за апрель мы только разобрались с основными командами ассемблера и написали простенькую программу, принимающую на вход число n и печатающую числа от n до 1 в несколько строк, и я даже не доделал её до конца, чтобы она удаляла лишние нули в записи чисел (а не заменяла на пробелы, как это сделал я), и сейчас темп занятий никак не изменился. За сегодня нам только рассказали про синтаксис макросов, написали что-то совсем-совсем простое с ними и ещё попробовали доделать ту программу с апреля, и как бы всё, вот так прошли 6 часов. И видно, что почти никто из студентов не заинтересован в том, чтобы что-то делать, поэтому не думаю, что ситуация резко изменится. Так что ближайшие пару месяцев меня ничто не удерживает от того, чтобы сидеть дома.

Родители жесть затравили просьбами сходить парикмахерскую: это продолжается уже месяца четыре и за последние пару дней только набрало обороты. Я понимаю, что то, что сейчас у меня на голове, выглядит мягко говоря не очень, но, если состригать, то будет вообще ни разу не лучше: у меня отвратительные волосы, которые не фиксируются никакими приспособлениями, поэтому исполнить адекватную причёску на короткие волосы у меня на голове практически невозможно. К тому же все эти парикмахерские - ужаснейшее испытание для меня: как минимум на сорок минут я буду обречён просидеть напротив отражения своей морды, от вида которой мне плохо и тошно где-то на физическом уровне, при этом после проведения экзекуции я непременно останусь недовольным результатом.

А что ещё сказать, я узнал, что я потреблядь и ведомый хомячок, готовый купить что угодно, лишь бы была красивая этикетка. Вот так я, проходя мимо автоматов с всякими при кольными жвачками, не удержался и взял пикрилейтед два, отдав космические для жвачки сто восемьдесят рублей (ну, по факту только 135, потому что кто-то забыл нажать на кнопку в автомате и забрать сдачу, но суть не в этом) при том, что я даже не сильно-то люблю жевательные резинки. И первая мысль после сего приобретения, возникшая в моей тупой голове: "Ох, зря я это сделал, можно же было на эти деньги купить литров четыре колы", - и это только подтвердило мой диагноз.

Жвачки, кстати, так себе: нет, в первые несколько секунд, конечно, тебя накрывает мощный вкус химозной черники, но потом он очень быстро уходит.
.jpg104 Кб, 825x1200
PoppyFanboy !VTLpv6lgGw 290 273875
>>273872
Алсо купил на стимовской распродаже самую лучшую на свете игру-гонку - flatout ultimate carnage. Просто очень хотелось, чтобы была электронная версия, не собирался особо играть, но в итоге залип суммарно часа на три. Она почти не отличается от второй, но там есть одна очень крутая штука - режим игры, представляющий из себя просто набор уровней с всякими игровыми режимами, при этом на каждом уровне за тебя уже выбраны машина и трасса. За прохождение уровней зарабатываешь очки, по достижении определённого их числа, открываются новые уровни. Крутость этого режима в том, что тебе не надо отвлекаться на всякую ерунду вроде апгрейда машинок: можно просто сесть и играть, к тому же за всю игру в режиме карьеры ты опробуешь от силы 6 разных машин, а в этом режиме почти на каждом уровне новая машинка.

И я просто жесть как люблю подобное в играх. Ещё один пример - enter the gungeon, там это возведено вообще в абсолют: тебе на стартовом экране предлагается нажать одну кнопку для квик старта нового захода. Аналогично с хотлайнами, the binding of isaac, furi и my friend pedro: эти игры не пытаются растянуть себя, сюжет не подаётся как главная часть игры, он просто идёт где-то там фоном, пока ты можешь играть в игру.

My friend Pedro мне, к слову, в итоге не понравилась. Во-первых, набирать комбо на высоком уровне сложности мне просто запредельно сложно. Такое ощущение, что управляемый персонаж недостаточно быстрый для того, чтобы можно было комфортно играть, он ощущается как марионетка на растягивающихся резинках. Во-вторых, тут слишком много ненужных механик: замедления времени, я считаю, не должно быть (либо сделайте уровни такими, чтобы их можно было проходить без него, либо, если их и так можно проходить без замедления, просто уберите замедление времени, оно же тут лишнее + это читерство), переворачивание столов и возможность пинать по навесной траектории всякие предметы - тоже очень странная штука: в большинстве случаев удару сковородкой ты предпочтёшь использование огнестрела, потому что игра никак не наказывает тебя за его использование (для сравнения в хотлайн майами огнестрел привлекает врагов, поэтому в некоторых случаях предпочтительнее использовать мили оружие). Ну, и, в-третьих, все личные претензии скопом: мне не нравится какая-то общая атмосфера несерьёзности происходящего, гг - безликая тряпичная кукла, тот единственный босс, до которого я дошёл, - слишком уж слабый для максимальной сложности, а уровень с мотоциклами вообще походу выл нагло украден из katana zero.

Не знаю сейчас, во что бы такое поиграть.

Классный трек из ОСТа флатаута
https://youtu.be/wxJjDiDVVZ8

Классный футуре фанк
https://youtu.be/wxJjDiDVVZ8

Прогнулся и мне теперь мне заходят новые треки билли ейлиш, хоть я и её немножко хейтил за последние песенки
https://youtu.be/0BT2rhXTJhE
https://youtu.be/k1ATPhkVWi0
https://youtu.be/pPvyVdg-lTI

Просто музыка, которая мне понравилась
https://youtu.be/KQ7yL-2GmLY
https://youtu.be/0b4SioB4XF4
.jpg104 Кб, 825x1200
PoppyFanboy !VTLpv6lgGw 290 273875
>>273872
Алсо купил на стимовской распродаже самую лучшую на свете игру-гонку - flatout ultimate carnage. Просто очень хотелось, чтобы была электронная версия, не собирался особо играть, но в итоге залип суммарно часа на три. Она почти не отличается от второй, но там есть одна очень крутая штука - режим игры, представляющий из себя просто набор уровней с всякими игровыми режимами, при этом на каждом уровне за тебя уже выбраны машина и трасса. За прохождение уровней зарабатываешь очки, по достижении определённого их числа, открываются новые уровни. Крутость этого режима в том, что тебе не надо отвлекаться на всякую ерунду вроде апгрейда машинок: можно просто сесть и играть, к тому же за всю игру в режиме карьеры ты опробуешь от силы 6 разных машин, а в этом режиме почти на каждом уровне новая машинка.

И я просто жесть как люблю подобное в играх. Ещё один пример - enter the gungeon, там это возведено вообще в абсолют: тебе на стартовом экране предлагается нажать одну кнопку для квик старта нового захода. Аналогично с хотлайнами, the binding of isaac, furi и my friend pedro: эти игры не пытаются растянуть себя, сюжет не подаётся как главная часть игры, он просто идёт где-то там фоном, пока ты можешь играть в игру.

My friend Pedro мне, к слову, в итоге не понравилась. Во-первых, набирать комбо на высоком уровне сложности мне просто запредельно сложно. Такое ощущение, что управляемый персонаж недостаточно быстрый для того, чтобы можно было комфортно играть, он ощущается как марионетка на растягивающихся резинках. Во-вторых, тут слишком много ненужных механик: замедления времени, я считаю, не должно быть (либо сделайте уровни такими, чтобы их можно было проходить без него, либо, если их и так можно проходить без замедления, просто уберите замедление времени, оно же тут лишнее + это читерство), переворачивание столов и возможность пинать по навесной траектории всякие предметы - тоже очень странная штука: в большинстве случаев удару сковородкой ты предпочтёшь использование огнестрела, потому что игра никак не наказывает тебя за его использование (для сравнения в хотлайн майами огнестрел привлекает врагов, поэтому в некоторых случаях предпочтительнее использовать мили оружие). Ну, и, в-третьих, все личные претензии скопом: мне не нравится какая-то общая атмосфера несерьёзности происходящего, гг - безликая тряпичная кукла, тот единственный босс, до которого я дошёл, - слишком уж слабый для максимальной сложности, а уровень с мотоциклами вообще походу выл нагло украден из katana zero.

Не знаю сейчас, во что бы такое поиграть.

Классный трек из ОСТа флатаута
https://youtu.be/wxJjDiDVVZ8

Классный футуре фанк
https://youtu.be/wxJjDiDVVZ8

Прогнулся и мне теперь мне заходят новые треки билли ейлиш, хоть я и её немножко хейтил за последние песенки
https://youtu.be/0BT2rhXTJhE
https://youtu.be/k1ATPhkVWi0
https://youtu.be/pPvyVdg-lTI

Просто музыка, которая мне понравилась
https://youtu.be/KQ7yL-2GmLY
https://youtu.be/0b4SioB4XF4
image.png452 Кб, 672x1024
PoppyFanboy !VTLpv6lgGw 291 274167
Чёт я что-то хотел, а в итоге ничего не делал, даже не играл ни во что. Минус день. Ну, завтра, наверное
PoppyFanboy !VTLpv6lgGw 292 274495
В сущности, ещё один минус день, но чуть меньший минус день, чем вчерашний минус день. Опять не понял, куда делась куча времени.

Немного вспомнил, как пользоваться Git'ом (очень показателен тот факт, что я успел забыть кое-что), полистал первую главу книжечки:
https://git-scm.com/book/en/v2
Вспомнил, как там генерировать SSH-ключи в убунте и где они лежат. Понял, что я придурок и не знал, что после создания репозитория на гитхабе можно не делать git clone, а вместо этого

> git init


> git remote add <name> gZQ7itANUSgB.withubPUNCTUMco+fRm:<username>/<repo name>.git


> git pull <remote name> master


Алсо узнал, что дефолтный текстовый редактор можно заменить на другой и можно не мучиться с тем, чтобы писать описания коммита как параметр команды git commit. Ну, я выпендриваться не стал, поставил дефолтным GEdit, не хочу vim: он прикольный, но не прикольный.

Посмотрел видео на ютубе про дженкинс:
https://www.youtube.com/playlist?list=PLS1QulWo1RIbY8xXPqz6ad_sNHkIP3IXI
Не все, конечно, и на x2, потому что он жесть постоянно повторяется, разжёвывает всё до каких-то ненужных подробностей. Пока что не пробовал создавать джобы для проектов, только поставил его себе. Завтра попробую настроить джобы и разберусь, как там делать тестирование в Maven (или в Groovy, или в Gradle, не разбирался, чем они отличаются друг от друга, кроме как тем, что в Maven'е там всё прописано в XML, а в других двух вроде чёт другое; Maven выглядит вполне нормально, там только вот этот XML файл и четыре папки для исходного кода: для кода проекта, для resources проекта (не смотрел пока что, что ето), для кода тестов и для resources тестов).

Прикольно, что в дженкинсе можно писать команды прямо как в терминале, я думал, там всё будет как-то сложнее. И ещё не разбирался в том, что такое пайплайн там. Выглядит просто как штука с помощью которой можно разбить джоб на этапы, но там, наверное, есть какие-то дополнительные крутые фичи. И ещё не посмотрел, можно ли там сделать так, чтобы прямо в гитхабе около коммитов отображалось, прошёл коммит сборку-тестирование или нет (как это сделано в appveyor).

Побегал, но опять чёт ничего не вышло: 30 минут бега + 3 шага + 10 бега = 7.7 км, при этом уже после вот этих тридцати минут у меня появились некомфортные ощущения в коленях (за предыдущие три месяца вообще никаких проблем с ними не было) и ноги как будто стали деревянными. За три минуты немного отошёл, пробежал ещё 10 минут и сдох окончательно. Ужасно, етот бег вообще какая-то ужасно неблагодарная в плане вложенного в него времени штука.

Почитал CLRS, но совсем чуть-чуть. Я там остановился на главе про divide and conquer, последнее что тогда разобрал - алгоритм Штрассена и вроде кусок про разрешение рекуррентных соотношений. Но я всё равно решил перечитать про них с самого начала и, как оказалось, не зря: обнаружил момент, который упустил при первом прочтении про substitution method (про то, что когда мы в индукционном переходе подставляем индукционное предположение, у нас должна в итоге получиться та же константа, там в правом нижнем уголке на пикрилейтед три про это). Но сейчас вроде разобрался нормально более-менее (какой-то он запутанный). Ну, вот, а, окромя substitution method'а, больше ничего не вычитал, по причине чмо.

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

Составлял на сегодня какой-то план, но в итоге вообще не вписался в него, попробую завтра ещё раз.

https://youtu.be/TB8SZz5CN6s
А у руби, оказывается, много неплохих старых треков. Альбом Pluto - просто отличный

https://youtu.be/0t9JpOJGwlY
Снова начал много слушать этого тупого лоу фая
https://youtu.be/n9DrvpPIPrw
и футуре фанка

Не знаю, есть ли смысл завтра идти бегать или лучше отдохнуть один день? По-хорошему надо походить ногами где-нибудь минут сорок, но я даже не знаю, куда пойти: около дома всё слишком всратое.
PoppyFanboy !VTLpv6lgGw 292 274495
В сущности, ещё один минус день, но чуть меньший минус день, чем вчерашний минус день. Опять не понял, куда делась куча времени.

Немного вспомнил, как пользоваться Git'ом (очень показателен тот факт, что я успел забыть кое-что), полистал первую главу книжечки:
https://git-scm.com/book/en/v2
Вспомнил, как там генерировать SSH-ключи в убунте и где они лежат. Понял, что я придурок и не знал, что после создания репозитория на гитхабе можно не делать git clone, а вместо этого

> git init


> git remote add <name> gZQ7itANUSgB.withubPUNCTUMco+fRm:<username>/<repo name>.git


> git pull <remote name> master


Алсо узнал, что дефолтный текстовый редактор можно заменить на другой и можно не мучиться с тем, чтобы писать описания коммита как параметр команды git commit. Ну, я выпендриваться не стал, поставил дефолтным GEdit, не хочу vim: он прикольный, но не прикольный.

Посмотрел видео на ютубе про дженкинс:
https://www.youtube.com/playlist?list=PLS1QulWo1RIbY8xXPqz6ad_sNHkIP3IXI
Не все, конечно, и на x2, потому что он жесть постоянно повторяется, разжёвывает всё до каких-то ненужных подробностей. Пока что не пробовал создавать джобы для проектов, только поставил его себе. Завтра попробую настроить джобы и разберусь, как там делать тестирование в Maven (или в Groovy, или в Gradle, не разбирался, чем они отличаются друг от друга, кроме как тем, что в Maven'е там всё прописано в XML, а в других двух вроде чёт другое; Maven выглядит вполне нормально, там только вот этот XML файл и четыре папки для исходного кода: для кода проекта, для resources проекта (не смотрел пока что, что ето), для кода тестов и для resources тестов).

Прикольно, что в дженкинсе можно писать команды прямо как в терминале, я думал, там всё будет как-то сложнее. И ещё не разбирался в том, что такое пайплайн там. Выглядит просто как штука с помощью которой можно разбить джоб на этапы, но там, наверное, есть какие-то дополнительные крутые фичи. И ещё не посмотрел, можно ли там сделать так, чтобы прямо в гитхабе около коммитов отображалось, прошёл коммит сборку-тестирование или нет (как это сделано в appveyor).

Побегал, но опять чёт ничего не вышло: 30 минут бега + 3 шага + 10 бега = 7.7 км, при этом уже после вот этих тридцати минут у меня появились некомфортные ощущения в коленях (за предыдущие три месяца вообще никаких проблем с ними не было) и ноги как будто стали деревянными. За три минуты немного отошёл, пробежал ещё 10 минут и сдох окончательно. Ужасно, етот бег вообще какая-то ужасно неблагодарная в плане вложенного в него времени штука.

Почитал CLRS, но совсем чуть-чуть. Я там остановился на главе про divide and conquer, последнее что тогда разобрал - алгоритм Штрассена и вроде кусок про разрешение рекуррентных соотношений. Но я всё равно решил перечитать про них с самого начала и, как оказалось, не зря: обнаружил момент, который упустил при первом прочтении про substitution method (про то, что когда мы в индукционном переходе подставляем индукционное предположение, у нас должна в итоге получиться та же константа, там в правом нижнем уголке на пикрилейтед три про это). Но сейчас вроде разобрался нормально более-менее (какой-то он запутанный). Ну, вот, а, окромя substitution method'а, больше ничего не вычитал, по причине чмо.

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

Составлял на сегодня какой-то план, но в итоге вообще не вписался в него, попробую завтра ещё раз.

https://youtu.be/TB8SZz5CN6s
А у руби, оказывается, много неплохих старых треков. Альбом Pluto - просто отличный

https://youtu.be/0t9JpOJGwlY
Снова начал много слушать этого тупого лоу фая
https://youtu.be/n9DrvpPIPrw
и футуре фанка

Не знаю, есть ли смысл завтра идти бегать или лучше отдохнуть один день? По-хорошему надо походить ногами где-нибудь минут сорок, но я даже не знаю, куда пойти: около дома всё слишком всратое.
sage poppyfanboy !VTLpv6lgGw 293 274498
>>274495

>asumming


мда

>Groovy


это ЯП, а не система сборки проектов
.jpg132 Кб, 706x1200
PoppyFanboy !VTLpv6lgGw 294 274932
Вчера ничего не делал. Уничтожил грамм 350 шоколада, полдня лежал в кровати и залипал в интернет из-за того, что кружилась голова, вторую половину играл в комп. В том числе поиграл немного в bloodstained: ritual of the night, но мне как-то пока что не особо она нравится, не могу точно сказать, почему. Просто нет особо желания играть в неё.

Сегодня аналогично. Пробовал бегать, но выдыхаюсь после 8 минут. Получилось только: 7.5 минут бега + 2.5 шага + 8.5 бега + 1.5 шага + 10 бега + 3 шага + 3 бега = 6 км. Вообще не вижу смысла продолжать, результаты только ухудшаются, толку никакого. Весь день играл и просто тупил в монитор, зачем вообще хуета вроде меня существует

Чувствую себя отвратительно или очень хочу думать, что мне плохо, ничего не хочется делать, хватает только на то, чтобы играть в игры, и то, старые и максимально реиграбельные. Нет желания пробовать что-то новое. Не могу прочесть и трёх предложений подряд в любом тексте, взгляд постоянно соскальзывает вниз. Не хочу искать и слушать новую музыку, если композиция не цепляет за первые ~5 секунд, то не дослушивается и скипается.
.jpg161 Кб, 882x1200
PoppyFanboy !VTLpv6lgGw 295 275259
Снова ничего не делал, но теперь чувствую себя лучше, немного привёл мысли в порядок. Ещё раз убедился в том, что я лох, но, в принципе, всё не так уж и сильно плохо и можно исправить.

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

Весь день почти не ел всякую вредную ерунду (только выпил 0.5 колы зеро).

Завтра, надеюсь, уже чем-нибудь нормальным займусь.
.jpg167 Кб, 812x1024
PoppyFanboy !VTLpv6lgGw 296 276077
Нет, не могу, вероятно, я умер и не заметил, вот и маюсь теперь.
В последнее время снятся какие-то слишком уж яркие сны, но при этом очень мелко фрагментированные.

Вчера весь день ничего не делал почти, только послушал видео про Gradle
https://youtu.be/NZJTYPLb0iE
потрогал его чуть-чуть, но понял, что набрасываться на него, пытаясь сразу во всём разобраться - бесполезно и лучше разбираться с ним более последовательно, листая отдельные главы юзергайда по нему
https://docs.gradle.org/current/userguide/userguide.pdf
С дженкинсом всё работает, но веб-хук там, к сожалению, сделать нельзя: статического айпи у меня нет, поэтому гитхаб никак не может достучаться до моего сервера-дженкинса.

Прорешал упражнения по substitution method'у разрешения рекуррентных соотношений из CLRS и чёт потерял всякое желание читать его дальше вот так подробно.

Съел плитку шоколада и небольшую булку без ничего, но при этом не ужинал.

Сегодня опять ничего не делал, хотел почитать Core Java, в которой даже первую книгу всё ещё не дочитал, но так и не смог начать. Побегал: 6.5 км за 35 минут, но у меня под конец уже ноги отнимались: последние пять минут бежал в темпе только лишь 5:37. Немного порисовал всякую кривую ерунду.

Опять не удержался и съел плитку шоколада.
Пью слишком мало воды.

https://youtu.be/h0rE8dI6dRg
PoppyFanboy !VTLpv6lgGw 297 276084
Вот, эти тупые упражнения, которые я вчера решал

Единственная интересная штука - это то, что если не получается доказать по индукции, то имеет смысл попробовать доказать более сильное утверждение. А всё потому, что доказывая более сильное утверждение, у нас в руках появляется более сильное индукционное предположение, так что доказательство может упроститься. В частности, по той же причине некоторые утверждения проще доказывать не простой индукцией, а с помощью strong induction (забыл, как она там по-русски; судя по википедии, "строгая индукция", но чёт я такое первый раз слышу).

Ну и с заменой переменных интересная штука.
А так - это тупо зависит от везения, получится доказать индукцией или нет. К тому же иногда слишком сложно подобрать индукционное предположение: вот во всех этих задачках можно было просто нарисовать дерево и до всего додуматься, но далеко не всегда всё так просто.
PoppyFanboy !VTLpv6lgGw 298 276087
Играл сегодня в ванильный майнкрафт. Там так много всего понадобавляли с последнего раза, когда я его запускал. Поначалу было всё здорово: меня постоянно орошали градом стрел скелеты и пинали зомби, из-за чего я раза три начинал с нуля, но потом я случайно наткнулся на деревню: в одном из сундуков нашёл шесть алмазов, на берегу озера нашёл кучу блоков пшеницы, из которых сделал 60 булок. И чёт мне расхотелось играть: вот так просто нашёл кучу ценных ресурсов, нельзя же, чтобы оно так было.
PoppyFanboy !VTLpv6lgGw 299 276430
>>276087
Вчера весь день играл в майнкрафт. Пересоздал мир, построил страшненький домик с балкончиком. Сделал многоярусную ферму почти со всеми возможными штуками, которые можно выращивать (пока что лучший вариант еды - печёная картошка: с каждого куста её падает довольно много, и она неплохо так восстанавливает шкалу голода), обнёс её по кругу каменной стеной, теперь надо бы сделать коническую крышу, чтобы получилась башенка, но мне лень. Таки нашёл алмазы честным путём, но всего лишь штук шесть. Зато Изумрудов попалось где-то шестнадцать, причём блоки с изумрудной рудой были разбросаны по одному. А я чёт думал, что они реже попадаются, чем алмазы. Сделал ещё загон с коровами, чтобы нафармить кожи на книжки для энчантмент столика. Построил портал в незерворлд, где почти сразу наткнулся на крепость: вынес оттуда немного блейз родов и красных штук для зельеварения. Пару раз натыкался на чёрных скелетов там, но, к сожалению, ни одной головы с них не выпало.

Потом решил пойти искать болото, чтобы устроить экстерминацию слизней, чтобы сделать поводок, с помощью которого я бы привёл к себе домой куриц, от которых мне нужны перья для стрел. Для чуть более быстрого поиска болота оседлал лошадь и почти сразу же потерял её: оставил её в какой-то деревне, забыл заскриншотить её координаты, а сам сдох и теперь не могу никак найти ту деревню. Всё бы ничего, но на ней бирка и седло, которые никак нельзя скрафтить. Хоть у меня и есть ещё два седла и столько же бирок, но всё равно не хочется терять такие ценные предметы.

Крутая игра, мне нравится.

Оказывается, если в течение дня особо не двигаться, то дефолтные три приёма пищи можно сократить до двух: утром и вечером.

Сегодня тоже играл в майнкрафт, наверное, большую часть дня. Ещё побегал: результаты опять ухудшились, в этот раз только 10 минут бега + 2 шага + 10 бега + 2 шага + 10 бега + 2 шага + 3 бега (и вот тут я окончательно сдох) = 6.5 км (вроде). Мда. Купил и выпил двухлитровую пепси зеро. Она подозрительно сладкая, значительно слаще, чем кола без сахара. И опять съел плитку шоколада, и пачку сухариков. Я не могу, я слишком слабохарактерная чмоха, чтобы отказываться от мусорной еды. Я так никогда не дропну 10 кг, которые хочу дропнуть, разжирею и сдохну.
PoppyFanboy !VTLpv6lgGw 299 276430
>>276087
Вчера весь день играл в майнкрафт. Пересоздал мир, построил страшненький домик с балкончиком. Сделал многоярусную ферму почти со всеми возможными штуками, которые можно выращивать (пока что лучший вариант еды - печёная картошка: с каждого куста её падает довольно много, и она неплохо так восстанавливает шкалу голода), обнёс её по кругу каменной стеной, теперь надо бы сделать коническую крышу, чтобы получилась башенка, но мне лень. Таки нашёл алмазы честным путём, но всего лишь штук шесть. Зато Изумрудов попалось где-то шестнадцать, причём блоки с изумрудной рудой были разбросаны по одному. А я чёт думал, что они реже попадаются, чем алмазы. Сделал ещё загон с коровами, чтобы нафармить кожи на книжки для энчантмент столика. Построил портал в незерворлд, где почти сразу наткнулся на крепость: вынес оттуда немного блейз родов и красных штук для зельеварения. Пару раз натыкался на чёрных скелетов там, но, к сожалению, ни одной головы с них не выпало.

Потом решил пойти искать болото, чтобы устроить экстерминацию слизней, чтобы сделать поводок, с помощью которого я бы привёл к себе домой куриц, от которых мне нужны перья для стрел. Для чуть более быстрого поиска болота оседлал лошадь и почти сразу же потерял её: оставил её в какой-то деревне, забыл заскриншотить её координаты, а сам сдох и теперь не могу никак найти ту деревню. Всё бы ничего, но на ней бирка и седло, которые никак нельзя скрафтить. Хоть у меня и есть ещё два седла и столько же бирок, но всё равно не хочется терять такие ценные предметы.

Крутая игра, мне нравится.

Оказывается, если в течение дня особо не двигаться, то дефолтные три приёма пищи можно сократить до двух: утром и вечером.

Сегодня тоже играл в майнкрафт, наверное, большую часть дня. Ещё побегал: результаты опять ухудшились, в этот раз только 10 минут бега + 2 шага + 10 бега + 2 шага + 10 бега + 2 шага + 3 бега (и вот тут я окончательно сдох) = 6.5 км (вроде). Мда. Купил и выпил двухлитровую пепси зеро. Она подозрительно сладкая, значительно слаще, чем кола без сахара. И опять съел плитку шоколада, и пачку сухариков. Я не могу, я слишком слабохарактерная чмоха, чтобы отказываться от мусорной еды. Я так никогда не дропну 10 кг, которые хочу дропнуть, разжирею и сдохну.
/clrs PoppyFanboy !VTLpv6lgGw 300 276474
блин, блин, ну это невозможно, это уже бред какой-то тупой

Поразбирал сейчас (начал минут сорок назад: я, конечно, не сидел над этим все три часа с предыдущего поста) немного подглаву про решение рекуррентных соотношений с помощью recursion tree. Короче, там используется всё тот же substitution method, только индукционное предположение делается на основе хитрых манипуляций с деревом, в котором узлы - это recursive subroutines. И я так и делал все предыдущие >>276084 упражнения, но вообще забыл про то, что T(1) может в теории быть чем угодно, а не только Θ(1), поэтому листья дерева надо отдельно считать.

Ну, с первым примером там всё просто, потому что всё поровну делится, а вот со вторым возникли проблемы: там дерево получается кривое и косое. Можно было бы округлить его вверх до complete binary tree, но это довольно грубая верхняя граница, так как всё же это дерево явно "редеет" при приближении к последнему уровню. Но, с другой стороны, просто забить на листочки тоже нельзя, поэтому авторы CLRS прибегли с жутко хитрому трюку: они просто как бы невзначай взяли и округлили O(nlog(3/2, n)) до O(nlg(n)) и при этом отбросили листочки. И что-то мне подсказывает, что сделали они это потому, что возьми они O(nlog(3/2, n)) в качестве индукционного предположения, нихрена у них бы не получилось доказать это их конченым substitution method'ом (потому что листочки всё же вносят какой-то вклад).

Короче, как я и думал, эти все доказательства на таком низком уровне - лютый рандом, который не исправляется даже предположениями, основанными на вот этих рекурсивных деревьях (ну, не рекурсивных, конечно, а отображающих рекурсивные вызовы функции).

Не буду решать все упражнения к этой теме: они все тупые. Там только одно интересное - пкрлтд последнее, но оно является обобщением второго примера и там ничего особо нового.
/clrs PoppyFanboy !VTLpv6lgGw 301 276505
Почитал про этот мастер-метод разрешения рекуррентных соотношений и посмотрел его доказательство. Но я чёт так и не понял, там f(n) должно быть неотрицательным, положительным или асимпотически положительным/отрицательным. Почему-то в этой тупой книжке в одном месте упоминается одно, а потом говорится другое.

Ну, и ещё я только сейчас понял, что эта мастер-теорема, на самом деле, применима не ко всем соотношениям вида T(n) = aT(n/b) + f(n): там между первым и вторым и между вторым и третьим случаями есть маленькие промежутки, которые не покрываются теоремой (там на первом пкрлтде пример плохого T(n)).

Алсо не понял, в чём смысл вот этой "регулярности" функции (af(n/b) ≤ cf(n) для c < 1 и достаточно больших n), но это вроде как тоже важно и может нарушаться, например, когда f(n) = n(2 - cosn): там можно подобрать такие a и b, чтобы были такие n (любые, достаточно большие), чтобы нарушалось условие c < 1.

А теорема доказывается тупо с помощью recursion tree method, при этом сначала доказывается для случаев, когда n = b в какой-то степени (чтобы нацело делилось). А потом берётся T(n) = aT([n/b]) + f(n), и там с помощью О, Ω и Θ всё очень как-то хитро сводится к случаю с делением нацело. И для этого в частности выводится верхняя граница для [...[n/b]/b...]/b (для округлений вверх/вниз), чтобы там удостовериться, что на листьях дерева получаются subroutines константного размера, не зависящего от n, и это используется ещё для доказательства, собственно, мастер-теоремы для общего случая.

И ещё я вообще почти не понял математический прикол на последнем пкрлтде: там вроде говорится о том, что в третьем случае мастер-теоремы условие про омегу-большую не обязательно, потому что регулярности достаточно, но при этом там используется условие регулярности при n=1 при том, что регулярность определяется для достаточно больших n. Ну и в целом это что-то странное и выглядит как доказательство уровня фокусов про 2 + 2 = 5, как минимум, потому что там мы начинаем с одним n, потом мы его меняем на 1, а после этого мы вводим новое n, которое n := b^m - это как-то подозрительно и странно.

Упражнения по применению мастер-метода и уж тем более упражнения, связанные с доказательством мастер-теоремы, я не делал. Короче, ну это ерунда какая-то тупая, видеть это больше не хочу. Примерно понятно, но пытаться разобраться в подробностях - это тупо смерть.
/clrs PoppyFanboy !VTLpv6lgGw 301 276505
Почитал про этот мастер-метод разрешения рекуррентных соотношений и посмотрел его доказательство. Но я чёт так и не понял, там f(n) должно быть неотрицательным, положительным или асимпотически положительным/отрицательным. Почему-то в этой тупой книжке в одном месте упоминается одно, а потом говорится другое.

Ну, и ещё я только сейчас понял, что эта мастер-теорема, на самом деле, применима не ко всем соотношениям вида T(n) = aT(n/b) + f(n): там между первым и вторым и между вторым и третьим случаями есть маленькие промежутки, которые не покрываются теоремой (там на первом пкрлтде пример плохого T(n)).

Алсо не понял, в чём смысл вот этой "регулярности" функции (af(n/b) ≤ cf(n) для c < 1 и достаточно больших n), но это вроде как тоже важно и может нарушаться, например, когда f(n) = n(2 - cosn): там можно подобрать такие a и b, чтобы были такие n (любые, достаточно большие), чтобы нарушалось условие c < 1.

А теорема доказывается тупо с помощью recursion tree method, при этом сначала доказывается для случаев, когда n = b в какой-то степени (чтобы нацело делилось). А потом берётся T(n) = aT([n/b]) + f(n), и там с помощью О, Ω и Θ всё очень как-то хитро сводится к случаю с делением нацело. И для этого в частности выводится верхняя граница для [...[n/b]/b...]/b (для округлений вверх/вниз), чтобы там удостовериться, что на листьях дерева получаются subroutines константного размера, не зависящего от n, и это используется ещё для доказательства, собственно, мастер-теоремы для общего случая.

И ещё я вообще почти не понял математический прикол на последнем пкрлтде: там вроде говорится о том, что в третьем случае мастер-теоремы условие про омегу-большую не обязательно, потому что регулярности достаточно, но при этом там используется условие регулярности при n=1 при том, что регулярность определяется для достаточно больших n. Ну и в целом это что-то странное и выглядит как доказательство уровня фокусов про 2 + 2 = 5, как минимум, потому что там мы начинаем с одним n, потом мы его меняем на 1, а после этого мы вводим новое n, которое n := b^m - это как-то подозрительно и странно.

Упражнения по применению мастер-метода и уж тем более упражнения, связанные с доказательством мастер-теоремы, я не делал. Короче, ну это ерунда какая-то тупая, видеть это больше не хочу. Примерно понятно, но пытаться разобраться в подробностях - это тупо смерть.
sage PoppyFanboy !VTLpv6lgGw 302 276990
ну всё я сдох
PoppyFanboy !VTLpv6lgGw 303 277522
>>276990
ну, ладно, умер и умер, ничего уже не поделаешь: с того света не возвращаются, так что и горевать особо по этому поводу нет смысла, хотя это обидно, конечно. нет, всё же, всё же грустно и неприятно, и об этом не получается перестать думать просто так

>1.jpg


Рекуррентное соотношение из упражнений CLRS, которое непонятно как надо решать: мастер-теорема не подходит, просто сумму посчитать - сложно и даже Akra-Bazzi Theorem (>.jpg) по сути не работает, так как там получается несходящийся несобственный интеграл. Короче, мутная это тема какая-то: если не знать хотя бы примерно, как доказывается и на чём основывается эта теорема (а я, конечно же, этого не знаю), то непонятно, что делать в таких ситуациях.

>Linear Recurrences.jpg


Ещё я вспомнил, что бывают же ещё линейные однородные/неоднородные рекуррентные соотношения, которые имеют крутое свойство с линейной комбинацией своих решений и решаются нахождением корней их характеристического уравнения. Но там самая большая проблема с нахождением частного решения: можно, конечно, попробовать угадать его, перебрав варианты той же формы, что и добавочный член, но не факт, что подберётся что-нибудь нормальное.

Посмотрел хеллсинг ультимате. Нормально.
304 277572
>>277522

> Посмотрел хеллсинг ультимате. Нормально.


Нет
PoppyFanboy !VTLpv6lgGw 305 278171
>>277572
ну, разве что эпилог не очень, а в остальном вполне неблохо, ясчитаю

продолжение упражнений из CLRS к главе про Divide and Conquer
Generating Function for Fibonacci Numbers
Ну, про это я ещё давно слышал, но, во-первых, думал, что за производящими функциями стоит значительно больше теории (а это, как оказалось, просто способ записи числовых последовательностей), и, во-вторых, не считал необходимым даже смотреть, как там вывести closed form для последовательности Фибоначчи, ведь есть же гораздо более простой >>277522 способ (T(n) = T(n - 1) + T(n - 2) - линейное рекуррентное соотношение). Ну, насчёт последнего, конечно, я немного погорячился: способ сам, действительно, простой, только вот, как доказывать теорию, стоящую за ним, я не знаю, поэтому так говорить не совсем честно.

Что интересно, производящие функции вовсе не обязательно могут иметь closed form (и ряд, который они описывают, соответственно, тоже необязательно сходится), то есть это не более, чем форма записи, однако, в некоторых случаях довольно при кольная, вот, как в случае с числами Фибоначчи.

>1.jpg >2.jpg


Производящая функция для {an} определяется просто как ряд F(z) = Σznan. Closed form находится довольно просто, но я бы не додумался до такого самостоятельно. И там дальше просто всё приводится к красивому и удобному виду: F(z) = 1/√5(1/(1 - φz) + 1/(1 - φ'z)).

И вот в этот момент я очень сильно затупил, потому что не признал в полученном выражении очевидной суммы бесконечной геометрической прогрессии. Вернее я увидел это, конечно, но я совсем забыл о том, что z в теории может быть совершенно любым, в том числе, достаточно малым, чтобы |φz| < 1 и |φ'z| < 1. Поэтому я зачем-то доказал формулу индукцией, что особо смысла не имеет, мы же хотим вывести эту формулу с нуля. Но потом я до всего додумался и всё вывел, в том числе более упрощённый вариант формулы с использованием округления к ближайшему целому на >3.jpg.

Глупая задачка про чипы
которую я до сих пор не совсем понимаю, но она, скорее всего, супер-классическая, а я супер-тупой

>Professor Diogenes has n supposedly identical integrated-circuit chips that in principle are capable of testing each other. The professor’s test jig accommodates two chips at a time. When the jig is loaded, each chip tests the other and reports whether it is good or bad. A good chip always reports accurately whether the other chip is good or bad, but the professor cannot trust the answer of a bad chip.


То есть если чипы A и B тестируют друг друга, то возможны такие варианты:
- A: B хороший, B: A хороший => либо оба хорошие, либо оба плохие
- A: B хороший, B: A плохой => либо оба плохие, либо только A плохой
- A: B плохой, B: A хороший => либо оба плохие, либо только B плохой
- A: B плохой, B: A плохой => по крайней мере один из чипов плохой
А теперь сами задания:

>a. Show that if more than n=2 chips are bad, the professor cannot necessarily determine which chips are good using any strategy based on this kind of pairwise test. Assume that the bad chips can conspire to fool the professor.


Честно, я не додумался сам, как это решать, поэтому полез искать решение в интернетах. Там было примерно такое объяснение: так как плохих чипов больше половины, то среди них можно выделить группу чипов (назовём их чипами-лжецами), совпадающую размером с группой хороших чипов и которые будут говорить, что хорошие чипы - плохие, чипы-лжецы - хорошие, все остальные - плохие. И тогда получается, что невозможно отличить хороший чип от чипа-лжеца, даже, если мы рассортируем чипы на три кучи (хорошие, лжецы, остальные плохие), мы не сможем отличить кучу с лжецами от кучи с хорошими чипами: они просто дают одинаковые оценки работоспособности других чипов.

Это понятно, здорово, но вот, чего я не понимаю - это почему чипов-лжецов обязательно должно быть столько же, сколько и хороших чипов? И ещё, известно ли профессору соотношение количеств хороших/плохих чипов? И влияет ли это знание на что-либо? Вот, допустим, пусть плохих всё так же больше, чем хороших, но среди плохих есть только один чип-лжец. Мы ведь всё равно не можем отличить лжеца от хорошего чипа, зачем тогда в решении говорится о том, что чипов лжецов должно быть столько же, сколько и хороших чипов? И, если в теории это не так важно, то как можно потенциально выделить хорошие чипы, даже если у нас их больше половины? Вот на последний вопрос отвечает решение следующей части задачки.

>b. Consider the problem of finding a single good chip from among n chips, assuming that more than n=2 of the chips are good. Show that bn=2c pairwise tests are sufficient to reduce the problem to one of nearly half the size.


Тут я тоже не стал особо пытаться что-то придумать и сразу полез в ответы. Там оказалася довольно интересный рекурсивный алгоритм, который просто (я мог неправильно понять, потому что там криво расписано, но примерно что-то в этом духе):
1. Делит все чипы по парам, если остался один лишний, то его откладываем
2. Тестируем пары чипов: если результат (True, True), то выбрасываем один (выбросим либо один плохой из пары из двух плохих, либо один хороший из пары из двух хороших, то есть плохих и хорощих тут выбрасывается одинаковое количество, поэтому хороших остаётся больше), а второй оставляем, если получаем любой другой результат, то выбрасываем из пары оба (в худшем случае мы выбросим один хороший и один плохой, так что хороших останется больше, чем плохих). То есть получили новую кучку, размером вдвое меньшую оригинальной, где хороших чипов столько же или больше плохих.
3. Два варианта:
- в получившейся после шага 2 куче хороших столько же, сколько и плохих, значит, на первом шаге мы отбросили хороший чип (так как по условию известно, что изначально хороших строго больше плохих) и если рекурсивно применить наш алгоритм к этой куче из второго шага, то он постепенно выбросит из кучи все-все элементы (вроде как, я как-то не особо сильно задумывался над этим, но интуитивно должно выбросить все чипы). Так что в конце у нас остаётся единственный хороший чип, полученный на шаге 1.
- в получившейся после шага 2 куче хороших строго больше, чем плохих, значит, мы можем применить наш алгоритм, получить хороший чип, а чип, оставшийся от первого шага можно выбросить, нам же только один рабочий надо найти.

Вроде так, а потом можно этим хорошим чипом протестить все остальные.
Только вот единственная проблема в том, что для того, чтобы применить этот алгоритм, надо знать, что исправных чипов больше, чем неисправных. Конечно, на практике, скорее всего, так и есть: вряд ли может случиться такое, чтобы навернулась половина модулей какой-то условной системы, так что вот это precondition про количество чипов можно вообще принять как что-то известное априори.

А, если мы не знаем, какая доля чипов не исправна? Тогда всё, тогда не понятно, что делать: вполне может быть так, что вообще все чипы сломаны. Так какой тогда смысл в первой части задачки? Больше ли половины чипов сломано, меньше - без разницы, мы ничего не можем сделать.
PoppyFanboy !VTLpv6lgGw 305 278171
>>277572
ну, разве что эпилог не очень, а в остальном вполне неблохо, ясчитаю

продолжение упражнений из CLRS к главе про Divide and Conquer
Generating Function for Fibonacci Numbers
Ну, про это я ещё давно слышал, но, во-первых, думал, что за производящими функциями стоит значительно больше теории (а это, как оказалось, просто способ записи числовых последовательностей), и, во-вторых, не считал необходимым даже смотреть, как там вывести closed form для последовательности Фибоначчи, ведь есть же гораздо более простой >>277522 способ (T(n) = T(n - 1) + T(n - 2) - линейное рекуррентное соотношение). Ну, насчёт последнего, конечно, я немного погорячился: способ сам, действительно, простой, только вот, как доказывать теорию, стоящую за ним, я не знаю, поэтому так говорить не совсем честно.

Что интересно, производящие функции вовсе не обязательно могут иметь closed form (и ряд, который они описывают, соответственно, тоже необязательно сходится), то есть это не более, чем форма записи, однако, в некоторых случаях довольно при кольная, вот, как в случае с числами Фибоначчи.

>1.jpg >2.jpg


Производящая функция для {an} определяется просто как ряд F(z) = Σznan. Closed form находится довольно просто, но я бы не додумался до такого самостоятельно. И там дальше просто всё приводится к красивому и удобному виду: F(z) = 1/√5(1/(1 - φz) + 1/(1 - φ'z)).

И вот в этот момент я очень сильно затупил, потому что не признал в полученном выражении очевидной суммы бесконечной геометрической прогрессии. Вернее я увидел это, конечно, но я совсем забыл о том, что z в теории может быть совершенно любым, в том числе, достаточно малым, чтобы |φz| < 1 и |φ'z| < 1. Поэтому я зачем-то доказал формулу индукцией, что особо смысла не имеет, мы же хотим вывести эту формулу с нуля. Но потом я до всего додумался и всё вывел, в том числе более упрощённый вариант формулы с использованием округления к ближайшему целому на >3.jpg.

Глупая задачка про чипы
которую я до сих пор не совсем понимаю, но она, скорее всего, супер-классическая, а я супер-тупой

>Professor Diogenes has n supposedly identical integrated-circuit chips that in principle are capable of testing each other. The professor’s test jig accommodates two chips at a time. When the jig is loaded, each chip tests the other and reports whether it is good or bad. A good chip always reports accurately whether the other chip is good or bad, but the professor cannot trust the answer of a bad chip.


То есть если чипы A и B тестируют друг друга, то возможны такие варианты:
- A: B хороший, B: A хороший => либо оба хорошие, либо оба плохие
- A: B хороший, B: A плохой => либо оба плохие, либо только A плохой
- A: B плохой, B: A хороший => либо оба плохие, либо только B плохой
- A: B плохой, B: A плохой => по крайней мере один из чипов плохой
А теперь сами задания:

>a. Show that if more than n=2 chips are bad, the professor cannot necessarily determine which chips are good using any strategy based on this kind of pairwise test. Assume that the bad chips can conspire to fool the professor.


Честно, я не додумался сам, как это решать, поэтому полез искать решение в интернетах. Там было примерно такое объяснение: так как плохих чипов больше половины, то среди них можно выделить группу чипов (назовём их чипами-лжецами), совпадающую размером с группой хороших чипов и которые будут говорить, что хорошие чипы - плохие, чипы-лжецы - хорошие, все остальные - плохие. И тогда получается, что невозможно отличить хороший чип от чипа-лжеца, даже, если мы рассортируем чипы на три кучи (хорошие, лжецы, остальные плохие), мы не сможем отличить кучу с лжецами от кучи с хорошими чипами: они просто дают одинаковые оценки работоспособности других чипов.

Это понятно, здорово, но вот, чего я не понимаю - это почему чипов-лжецов обязательно должно быть столько же, сколько и хороших чипов? И ещё, известно ли профессору соотношение количеств хороших/плохих чипов? И влияет ли это знание на что-либо? Вот, допустим, пусть плохих всё так же больше, чем хороших, но среди плохих есть только один чип-лжец. Мы ведь всё равно не можем отличить лжеца от хорошего чипа, зачем тогда в решении говорится о том, что чипов лжецов должно быть столько же, сколько и хороших чипов? И, если в теории это не так важно, то как можно потенциально выделить хорошие чипы, даже если у нас их больше половины? Вот на последний вопрос отвечает решение следующей части задачки.

>b. Consider the problem of finding a single good chip from among n chips, assuming that more than n=2 of the chips are good. Show that bn=2c pairwise tests are sufficient to reduce the problem to one of nearly half the size.


Тут я тоже не стал особо пытаться что-то придумать и сразу полез в ответы. Там оказалася довольно интересный рекурсивный алгоритм, который просто (я мог неправильно понять, потому что там криво расписано, но примерно что-то в этом духе):
1. Делит все чипы по парам, если остался один лишний, то его откладываем
2. Тестируем пары чипов: если результат (True, True), то выбрасываем один (выбросим либо один плохой из пары из двух плохих, либо один хороший из пары из двух хороших, то есть плохих и хорощих тут выбрасывается одинаковое количество, поэтому хороших остаётся больше), а второй оставляем, если получаем любой другой результат, то выбрасываем из пары оба (в худшем случае мы выбросим один хороший и один плохой, так что хороших останется больше, чем плохих). То есть получили новую кучку, размером вдвое меньшую оригинальной, где хороших чипов столько же или больше плохих.
3. Два варианта:
- в получившейся после шага 2 куче хороших столько же, сколько и плохих, значит, на первом шаге мы отбросили хороший чип (так как по условию известно, что изначально хороших строго больше плохих) и если рекурсивно применить наш алгоритм к этой куче из второго шага, то он постепенно выбросит из кучи все-все элементы (вроде как, я как-то не особо сильно задумывался над этим, но интуитивно должно выбросить все чипы). Так что в конце у нас остаётся единственный хороший чип, полученный на шаге 1.
- в получившейся после шага 2 куче хороших строго больше, чем плохих, значит, мы можем применить наш алгоритм, получить хороший чип, а чип, оставшийся от первого шага можно выбросить, нам же только один рабочий надо найти.

Вроде так, а потом можно этим хорошим чипом протестить все остальные.
Только вот единственная проблема в том, что для того, чтобы применить этот алгоритм, надо знать, что исправных чипов больше, чем неисправных. Конечно, на практике, скорее всего, так и есть: вряд ли может случиться такое, чтобы навернулась половина модулей какой-то условной системы, так что вот это precondition про количество чипов можно вообще принять как что-то известное априори.

А, если мы не знаем, какая доля чипов не исправна? Тогда всё, тогда не понятно, что делать: вполне может быть так, что вообще все чипы сломаны. Так какой тогда смысл в первой части задачки? Больше ли половины чипов сломано, меньше - без разницы, мы ничего не можем сделать.
.jpg106 Кб, 725x1024
PoppyFanboy !VTLpv6lgGw 306 278175
последнее упражнение из CLRS к главе про Divide and Conquer
Monge Arrays
Очередная смешно пахнущая штука со своими смешными свойствами и смешными эффективными алгоритмами, которые к ней можно применить. Какие-то Массивы Монжа, вот.

>1.jpg


Сначала там было упражнение на доказательство характеристического свойства массива Монжа. Вроде получилось с помощью индукции, но как-то оно странно выглядит и я не смог нормально расписать доказательство, чтобы оно было понятно кому-либо, кроме меня. При кольное свойство, довольно очевидное по смыслу, но доказывается не так просто, как я думал.

>2.jpg


Второе упражнение - это просто упражнение на посчитать, а вот третье - чуть более интересное: там надо доказать, что минимальные элементы выстраиваются в такую вот кайнд оф лесенку. Довольно просто доказывается от противного, я даже сам додумался.

>3.jpg


А вот тут чуть интереснее: используя свойство из предыдущего упражнения, можно построить алгоритм, который будет искать минимальные элементы в каждой строке массива Монжа m x n чуть быстрее, чем за Θ(mn). В процессе выведения решения рекуррентного соотношения я вдруг понял, что не знаю, как определяется О, тетты и омеги, если переменных несколько, но вроде как там всё относительно просто.

штуки из Core Java в главе про исключения, assert'ы и логирование
У меня стойкое ощущение того, что я уже читал эту главу, причём всю, от начала до конца, но я всё равно перечитал, чтобы освежить в памяти некоторые интересные моменты.

1. Я почему-то думал, что Throwable - это абстрактный класс, но, как оказалось, зачем-то можно создавать его экзамепляры. При этом компилятор проверяет, что все выбросы Throwable обработаны (то есть это checked exception). Но вот зачем бы кому-либо понадобилось использовать именно Throwable - вообще не знаю: создавать их, наверное, не стоит, потому что они как-то выбиваются из классификации исключений (RuntimeException, Error, Exception). Перехватывать их - тоже плохая идея.

2. Между тем, что должно относится к checked exceptions (класс Exception) и тем, что относится к unchecked exceptions (класс RuntimeException) какая-то слишком уж тонкая грань. Предполагается, что RuntimeException - это что-то, от чего нельзя оправиться, поэтому не стоит их перехватывать, при этом возникать они должны в ситуациях, когда вина лежит на том, кто писал код: можно было избежать того, что индекс вышел за границы массива, можно было избежать NullPointerException, но в то же время штуки вроде FileNotFoundException - это checked exception, "потому что файл может оказаться удалённым после проверки его существования". Но вообще предполагается, что ты не будешь использовать RuntimeException или наследовать что-либо от него, поэтому как правило вопроса между checked и unchecked не стоит.

3. Переменная в блоке catch, который перехватывает несколько исключений (разделённых '|'), отвечающая за пойманное исключение является implicitly final (по очевидным причинам), в простом же блоке catch её значение можно изменять.

4. Странная штука, которую я увидел вынесенной в рамочку: можно перехватить checked exception, завернуть его в unchecked exception и выбросить его в методе, который по каким-то причинам не может выбрасывать checked exception'ы (например, когда этот метод переопределяет метод родительского класса, который не выбрасывает исключения какого-то там типа или вообще их не выбрасывает). Это как-то странно, неправильно, выглядит как костыль, получившийся из-за такой замороченности джавы на теме проверяемых исключений.

5. Не знал (забыл), что мало того, что перед return'ом, расположенным в try/catch всё равно управление передаётся в finally, так ещё и вот такая штука:
https://ideone.com/6ZALmt
То есть return из finally перебивает return из try, но при этом изменить значение, которое возвращает return из try нельзя (но, если бы там был не int, а ссылка на какой-нибудь мутабельный объект, то можно было бы изменить его состояние).

6. Я не знал, что finally блок можно написать вот таким образом:

> try {


> try {


> // code that might throw exceptions


> } finally {


> // executed right after exception has occurred


> }


> } catch (Exception e) {


> // catches not only exceptions from the try clause


> // but also exceptions occurred while executing finally block


> }


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

Ну и по смыслу то же самое происходит с исключениями: исключения из finally перебивают исключения из try/catch, поэтому там надо городить жуткие конструкции вроде вот такой:

> Exception ex = null;


> try {


> try {


> // code that might throw exceptions


> } catch (Exception e) {


> ex = e;


> throw e;


> }


> } catch (Exception e) {


> // code


> } finally {


> try {


> // code that might throw exceptions


> } catch (Exception e) {


> if (ex = null) {


> throw e;


> } else {


> ex.addSuppressed(e);


> }


> }


> }


Но это всё сложно, поэтому лучше использовать try-with-resources, в котором "ресурс" - это что угодно, что реализует AutoClosable, в котором есть единственный метод close(), и, если он выбрасывает исключение одновременно с исключением в try блоке, то оно добавляется вот так же к исключению из try блока с помощью addSuppressed().

Не знал (забыл), что у try-with-resources может тоже быть finally блок, который выполняется после закрытия всех ресурсов.

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

Но в этом моменте книжка противоречит немного сама себе, потому что через пару страниц, там говорится о том, что лучше выбросить исключение, чем возвращать dummy-value (вроде -1 или null), потому что:

>Some programmers worry about throwing exceptions when they detect errors. Maybe it would be better to return a dummy value rather than throw an exception when a method is called with invalid parameters? For example, should Stack.pop return null, or throw an exception when a stack is empty? We think it is better to throw a EmptyStackException at the point of failure than to have a NullPointerException occur at later time.


Я с этим как-то не совсем согласен. Исключения же используются в “исключительных” ситуациях, и что же такого “исключительного” в ситуации, когда пытаешься снять со стека очередной элемент, а стек оказывается пустым? Ведь в большинстве случаев эта операция прошла бы без запинок. К тому же, как мне кажется, если есть возможность вернуть это самое dummy value вместо выброса исключения, то имеет смысл именно это и сделать.

Тут мне на секунду показалось, что всё, что я описал выше не очень стыкуется с тем, что существует ArrayIndexOfBoundsException, и ничего криминального в том, чтобы попытаться получить элемнт по инвалидному индексу, нет, но:
- во-первых, нет такого dummy value, которое можно было бы вернуть, потому что сам массив запросто может состоять из этих dummy value’ов
- во-вторых, всё же пытаться получить элемент массива по инвалидному индексу - это индикатор ошибки в коде и вообще это очень-очень неправильно, так как мы по сути пытаемся получить доступ к какому-то рандомному куску памяти.


Единственный здравый аргумент в пользу того, чтобы юзать исключения в случаях, когда можно выбросить dummy value, - это то, что тот, кто использует наш метод, может забыть (или не знать) о том, что метод может вернуть “плохие значения”, заюзать это “плохое значение” где-нибудь не там, где надо, и получить, например, NullPointerException какой-нибудь. Но, я щитаю, 1) сами будут в таком случае виноваты, что не читают описание метода 2) многие жалуются на то, что в джаве слишком много checked exceptions, поэтому вотт, вполне легальный и нормальный метод обойти их использование в некоторых отдельных случаях (если не рассматривать использование RuntimeException как вариант решения проблемы). Но, правда, вот ещё мне интересно, сколько проверок по типу !stack.isEmpty() будет достаточно, чтобы перевесить обработку одного исключения EmptyStackException, выброшенного единожды в самом конце чтения из стека (интересно, конечно, но не настолько, чтобы идти и выяснять это на практике).

8. Про assert'ы там было расписано совсем немного, и я так и не понял, имеет ли смысл ими пользоваться вот на постоянной основе. Но вроде как суть в том, чтобы формально отметить свои предположения по поводу состояния программы в тот или иной момент времени для упрощения тестирования.
.jpg106 Кб, 725x1024
PoppyFanboy !VTLpv6lgGw 306 278175
последнее упражнение из CLRS к главе про Divide and Conquer
Monge Arrays
Очередная смешно пахнущая штука со своими смешными свойствами и смешными эффективными алгоритмами, которые к ней можно применить. Какие-то Массивы Монжа, вот.

>1.jpg


Сначала там было упражнение на доказательство характеристического свойства массива Монжа. Вроде получилось с помощью индукции, но как-то оно странно выглядит и я не смог нормально расписать доказательство, чтобы оно было понятно кому-либо, кроме меня. При кольное свойство, довольно очевидное по смыслу, но доказывается не так просто, как я думал.

>2.jpg


Второе упражнение - это просто упражнение на посчитать, а вот третье - чуть более интересное: там надо доказать, что минимальные элементы выстраиваются в такую вот кайнд оф лесенку. Довольно просто доказывается от противного, я даже сам додумался.

>3.jpg


А вот тут чуть интереснее: используя свойство из предыдущего упражнения, можно построить алгоритм, который будет искать минимальные элементы в каждой строке массива Монжа m x n чуть быстрее, чем за Θ(mn). В процессе выведения решения рекуррентного соотношения я вдруг понял, что не знаю, как определяется О, тетты и омеги, если переменных несколько, но вроде как там всё относительно просто.

штуки из Core Java в главе про исключения, assert'ы и логирование
У меня стойкое ощущение того, что я уже читал эту главу, причём всю, от начала до конца, но я всё равно перечитал, чтобы освежить в памяти некоторые интересные моменты.

1. Я почему-то думал, что Throwable - это абстрактный класс, но, как оказалось, зачем-то можно создавать его экзамепляры. При этом компилятор проверяет, что все выбросы Throwable обработаны (то есть это checked exception). Но вот зачем бы кому-либо понадобилось использовать именно Throwable - вообще не знаю: создавать их, наверное, не стоит, потому что они как-то выбиваются из классификации исключений (RuntimeException, Error, Exception). Перехватывать их - тоже плохая идея.

2. Между тем, что должно относится к checked exceptions (класс Exception) и тем, что относится к unchecked exceptions (класс RuntimeException) какая-то слишком уж тонкая грань. Предполагается, что RuntimeException - это что-то, от чего нельзя оправиться, поэтому не стоит их перехватывать, при этом возникать они должны в ситуациях, когда вина лежит на том, кто писал код: можно было избежать того, что индекс вышел за границы массива, можно было избежать NullPointerException, но в то же время штуки вроде FileNotFoundException - это checked exception, "потому что файл может оказаться удалённым после проверки его существования". Но вообще предполагается, что ты не будешь использовать RuntimeException или наследовать что-либо от него, поэтому как правило вопроса между checked и unchecked не стоит.

3. Переменная в блоке catch, который перехватывает несколько исключений (разделённых '|'), отвечающая за пойманное исключение является implicitly final (по очевидным причинам), в простом же блоке catch её значение можно изменять.

4. Странная штука, которую я увидел вынесенной в рамочку: можно перехватить checked exception, завернуть его в unchecked exception и выбросить его в методе, который по каким-то причинам не может выбрасывать checked exception'ы (например, когда этот метод переопределяет метод родительского класса, который не выбрасывает исключения какого-то там типа или вообще их не выбрасывает). Это как-то странно, неправильно, выглядит как костыль, получившийся из-за такой замороченности джавы на теме проверяемых исключений.

5. Не знал (забыл), что мало того, что перед return'ом, расположенным в try/catch всё равно управление передаётся в finally, так ещё и вот такая штука:
https://ideone.com/6ZALmt
То есть return из finally перебивает return из try, но при этом изменить значение, которое возвращает return из try нельзя (но, если бы там был не int, а ссылка на какой-нибудь мутабельный объект, то можно было бы изменить его состояние).

6. Я не знал, что finally блок можно написать вот таким образом:

> try {


> try {


> // code that might throw exceptions


> } finally {


> // executed right after exception has occurred


> }


> } catch (Exception e) {


> // catches not only exceptions from the try clause


> // but also exceptions occurred while executing finally block


> }


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

Ну и по смыслу то же самое происходит с исключениями: исключения из finally перебивают исключения из try/catch, поэтому там надо городить жуткие конструкции вроде вот такой:

> Exception ex = null;


> try {


> try {


> // code that might throw exceptions


> } catch (Exception e) {


> ex = e;


> throw e;


> }


> } catch (Exception e) {


> // code


> } finally {


> try {


> // code that might throw exceptions


> } catch (Exception e) {


> if (ex = null) {


> throw e;


> } else {


> ex.addSuppressed(e);


> }


> }


> }


Но это всё сложно, поэтому лучше использовать try-with-resources, в котором "ресурс" - это что угодно, что реализует AutoClosable, в котором есть единственный метод close(), и, если он выбрасывает исключение одновременно с исключением в try блоке, то оно добавляется вот так же к исключению из try блока с помощью addSuppressed().

Не знал (забыл), что у try-with-resources может тоже быть finally блок, который выполняется после закрытия всех ресурсов.

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

Но в этом моменте книжка противоречит немного сама себе, потому что через пару страниц, там говорится о том, что лучше выбросить исключение, чем возвращать dummy-value (вроде -1 или null), потому что:

>Some programmers worry about throwing exceptions when they detect errors. Maybe it would be better to return a dummy value rather than throw an exception when a method is called with invalid parameters? For example, should Stack.pop return null, or throw an exception when a stack is empty? We think it is better to throw a EmptyStackException at the point of failure than to have a NullPointerException occur at later time.


Я с этим как-то не совсем согласен. Исключения же используются в “исключительных” ситуациях, и что же такого “исключительного” в ситуации, когда пытаешься снять со стека очередной элемент, а стек оказывается пустым? Ведь в большинстве случаев эта операция прошла бы без запинок. К тому же, как мне кажется, если есть возможность вернуть это самое dummy value вместо выброса исключения, то имеет смысл именно это и сделать.

Тут мне на секунду показалось, что всё, что я описал выше не очень стыкуется с тем, что существует ArrayIndexOfBoundsException, и ничего криминального в том, чтобы попытаться получить элемнт по инвалидному индексу, нет, но:
- во-первых, нет такого dummy value, которое можно было бы вернуть, потому что сам массив запросто может состоять из этих dummy value’ов
- во-вторых, всё же пытаться получить элемент массива по инвалидному индексу - это индикатор ошибки в коде и вообще это очень-очень неправильно, так как мы по сути пытаемся получить доступ к какому-то рандомному куску памяти.


Единственный здравый аргумент в пользу того, чтобы юзать исключения в случаях, когда можно выбросить dummy value, - это то, что тот, кто использует наш метод, может забыть (или не знать) о том, что метод может вернуть “плохие значения”, заюзать это “плохое значение” где-нибудь не там, где надо, и получить, например, NullPointerException какой-нибудь. Но, я щитаю, 1) сами будут в таком случае виноваты, что не читают описание метода 2) многие жалуются на то, что в джаве слишком много checked exceptions, поэтому вотт, вполне легальный и нормальный метод обойти их использование в некоторых отдельных случаях (если не рассматривать использование RuntimeException как вариант решения проблемы). Но, правда, вот ещё мне интересно, сколько проверок по типу !stack.isEmpty() будет достаточно, чтобы перевесить обработку одного исключения EmptyStackException, выброшенного единожды в самом конце чтения из стека (интересно, конечно, но не настолько, чтобы идти и выяснять это на практике).

8. Про assert'ы там было расписано совсем немного, и я так и не понял, имеет ли смысл ими пользоваться вот на постоянной основе. Но вроде как суть в том, чтобы формально отметить свои предположения по поводу состояния программы в тот или иной момент времени для упрощения тестирования.
PoppyFanboy !VTLpv6lgGw 307 278182
>>278175
1.jpg
https://pp.userapi.com/c852320/v852320770/16f437/IvKPx6BN60E.jpg
2.jpg
https://pp.userapi.com/c852320/v852320770/16f441/t91Rhv3-EF0.jpg
3.jpg
https://pp.userapi.com/c852320/v852320770/16f44b/PaZ77ZOKx5Y.jpg

Не хочет грузиться. Я и не думал, что тут настолько плохой интернет.
.jpg172 Кб, 1200x850
PoppyFanboy !VTLpv6lgGw 308 278184
9. Уже читал про логирование, но ещё раз перечитал. Ну, там ничего особо интересного. Есть LogManager, который в теории можно зачем-то заменить на другой, у которого есть конфигурационный файл JRE_HOME/lib/logging.properties (который тоже можно заменить на другой), в котором расписаны всякие штуки, связанные с логированием. Есть объекты-логгеры: им можно передавать сообщения. Как правило их называют так же, как и пакет, к которому они относятся, но есть один специальный "глобальный" логгер, идентифицирующийся пустой строкой, дефолтные настройки которого можно задать в конфигурационном файле.

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

Ещё есть обработчики (handler'ы) лог-сообщений. У логгера может быть несколько хенделров. Это, собственно, те штуки, которые выводят сообщения в консоль / в файл ещё бог весть куда. И у них тоже есть свой уровень важности сообщений: даже если логгер передал сообщение хендлеру, то хендлер может его проигнорировать. Дефолтные свойства хендлеров задаются в том же конфигурационном файле и там относительно много. Вот, например, у FileHandler можно задать его уровень, определить, будут сообщения аппендиться к файлу или нет, задать лимит на размер файла, задать паттерн имени файла, определить количество файлов, в которые будут записываться одна последовательность лог-сообщений (по достижении лимита на размер будет создаваться новый файл, но я это не тестил). Можно ещё задать фильтр и formatter.

Фильтр - это просто класс, который имплементирует одноимённый интерфейс и более тонко фильтрует записи.

Formatter - это уже штука чуть более интересная: она определяет то, как будут отформатированы лог-записи. Например, есть SimpleFormatter, который просто выводит дату, время и сообщение, а есть XMLFormatter, который выводит чуть больше информации в более структурированном виде. Там же происходит подстановка параметров в сообщение на место {n} и локализация. И ещё там можно задавать header'ы и footer'ы для последовательностей лог-сообщений (вот XMLFormatter, например, там что-то в заголовке файла пишет своё).

Можно сделать свой handler, унаследовав его от уже существующего класса и переопределив там нужные методы, чтобы, например, выводить сообщения в какой-нибудь элемент GUI (зачем-то).

Ну, етот Logging API относительно и его, наверное, имеет смысл использовать, вместо print-statement'ов.

10.

> 7.6 Debugging Tips


> Suppose you wrote your program and made it bulletproof by catching and properly handling all exceptions. Then you run it, and it does not work right. Now what? (If you never have this problem, you can skip the remainder of this chapter.)


хех
Но там ничего особо прямо интересного, только вкратце упоминаются: перенаправление stderr и stdout в файл, перенаправление непойманных исключений в файл, Xlint для включения особого злого режима компилятора, в котором он ругается на использование устаревших штук и проваливающиеся свитчи без брейков. И ещё jconsole (GUI для мониторинга ресурсов) и jmap (heap dump), которые я не смотрел и не трогал пока что.

я лох
Узнал, что в нотепаде плюс плюс есть темы и, в частности, крутая вырвиглазно розовая HelloKitty. Жесть круто, жаль только, что она влияют только на цвета в рабочей области и не меняет иконки в тулбаре сверху на цветочки и морды котов.

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

Ничего не делаю, ничего не хочу, в голове бардак.

Зачем-то перепрошёл самую лучшую в мире игру world of goo за один присест за два с половиной часа.
.jpg172 Кб, 1200x850
PoppyFanboy !VTLpv6lgGw 308 278184
9. Уже читал про логирование, но ещё раз перечитал. Ну, там ничего особо интересного. Есть LogManager, который в теории можно зачем-то заменить на другой, у которого есть конфигурационный файл JRE_HOME/lib/logging.properties (который тоже можно заменить на другой), в котором расписаны всякие штуки, связанные с логированием. Есть объекты-логгеры: им можно передавать сообщения. Как правило их называют так же, как и пакет, к которому они относятся, но есть один специальный "глобальный" логгер, идентифицирующийся пустой строкой, дефолтные настройки которого можно задать в конфигурационном файле.

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

Ещё есть обработчики (handler'ы) лог-сообщений. У логгера может быть несколько хенделров. Это, собственно, те штуки, которые выводят сообщения в консоль / в файл ещё бог весть куда. И у них тоже есть свой уровень важности сообщений: даже если логгер передал сообщение хендлеру, то хендлер может его проигнорировать. Дефолтные свойства хендлеров задаются в том же конфигурационном файле и там относительно много. Вот, например, у FileHandler можно задать его уровень, определить, будут сообщения аппендиться к файлу или нет, задать лимит на размер файла, задать паттерн имени файла, определить количество файлов, в которые будут записываться одна последовательность лог-сообщений (по достижении лимита на размер будет создаваться новый файл, но я это не тестил). Можно ещё задать фильтр и formatter.

Фильтр - это просто класс, который имплементирует одноимённый интерфейс и более тонко фильтрует записи.

Formatter - это уже штука чуть более интересная: она определяет то, как будут отформатированы лог-записи. Например, есть SimpleFormatter, который просто выводит дату, время и сообщение, а есть XMLFormatter, который выводит чуть больше информации в более структурированном виде. Там же происходит подстановка параметров в сообщение на место {n} и локализация. И ещё там можно задавать header'ы и footer'ы для последовательностей лог-сообщений (вот XMLFormatter, например, там что-то в заголовке файла пишет своё).

Можно сделать свой handler, унаследовав его от уже существующего класса и переопределив там нужные методы, чтобы, например, выводить сообщения в какой-нибудь элемент GUI (зачем-то).

Ну, етот Logging API относительно и его, наверное, имеет смысл использовать, вместо print-statement'ов.

10.

> 7.6 Debugging Tips


> Suppose you wrote your program and made it bulletproof by catching and properly handling all exceptions. Then you run it, and it does not work right. Now what? (If you never have this problem, you can skip the remainder of this chapter.)


хех
Но там ничего особо прямо интересного, только вкратце упоминаются: перенаправление stderr и stdout в файл, перенаправление непойманных исключений в файл, Xlint для включения особого злого режима компилятора, в котором он ругается на использование устаревших штук и проваливающиеся свитчи без брейков. И ещё jconsole (GUI для мониторинга ресурсов) и jmap (heap dump), которые я не смотрел и не трогал пока что.

я лох
Узнал, что в нотепаде плюс плюс есть темы и, в частности, крутая вырвиглазно розовая HelloKitty. Жесть круто, жаль только, что она влияют только на цвета в рабочей области и не меняет иконки в тулбаре сверху на цветочки и морды котов.

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

Ничего не делаю, ничего не хочу, в голове бардак.

Зачем-то перепрошёл самую лучшую в мире игру world of goo за один присест за два с половиной часа.
sage 309 278191
>>278171

> >a. Show that if more than n=2 chips are bad, the professor cannot necessarily determine which chips are good using any strategy based on this kind of pairwise test. Assume that the bad chips can conspire to fool the professor.


> >b. Consider the problem of finding a single good chip from among n chips, assuming that more than n=2 of the chips are good. Show that bn=2c pairwise tests are sufficient to reduce the problem to one of nearly half the size.


Ай, из пдфки текст плохо скопировался. "n=2" - это "n/2", а "bn=2c" - это "⌊n/2⌋".
PoppyFanboy !VTLpv6lgGw 310 278702
Продолжаю ничего не делать, потому что так проще.
311 278827
>>278702
Ничтожество, говно, пес - подумал бы я, если бы не считал, что ты молодец, сосешь конец, красавчик.
EAPaTH1UYAAXIHY (1).jpeg221 Кб, 1058x1060
PoppyFanboy !VTLpv6lgGw 312 279262

>Ничтожество, говно, пес - подумал бы я


И был бы прав в каждом из трёх пунктов.
а вот PoppyFanboy@Deonix0525 313 284691
Перепрошёл и допрошёл третий дак совс, ура, теперь я могу спать спокойно

Начать, наверное, надо с того, что у меня огромные проблемы с прохождением игр, которые хотя бы чуть-чуть, на малую толику, предсавтляют из себя челлендж и бросают тебе вызов: мне постоянно хочется либо пройти какой-то момент с как можно большим числом очков, либо за как можно меньшее количество попыток, либо стараться пройти игру на лоу-левеле, либо делать ещё, что угодно, чтобы почувствовать, что ты замастерил игру даже лучше, чем от тебя это ожидалось. Вот с дак совсом у меня примерно то же самое: я долгое время не мог заставить себя пройти дальше нескольких первых локаций просто потому, что мне постоянно казалось, что я слишком перекачан для последующих локаций и мне надо переиграть всё заново. В какой-то момент я всё же пересилил себя и прошёл почти полностью основную ветку игры >>246441, но n дней назад у меня опять случився этот приступ "сейчас по-быстрому перепройду заново, нормально завершу все квест линии и проэксплорю все локации", и я удалил этот старый сейв и начал заново. Только в этот раз я пообещал себе, что не буду жалеть денег на прокачку уровня и буду придерживаться левелов, которые указаны здесь: https://darksouls3.wiki.fextralife.com/Recommended+Level+by+Location. Так как в прошлый раз я играл за такого кайнд оф супер-ловкого ниндзю с ножом, то в этот раз я почти все очки уровней вбил в силу.

Long story short я очень сильно пожалел о том, что начал перепроходить всё заново: целиком и полностью прочувствовал на себе, насколько же бОльшая часть этой игры - нудная дрянь: огромнейшие локации, куча всяких мусорных айтемов, которые ты никогда в жизни не будешь использовать (вот, в частности, миллиард разновидностей штук, которые увеличивают сопротивляемость к и урон от молний/огня/магии/тьмы/ещё чего-то там), ну, и в целом, играть чёт было довольно скучно, единственный, кто доставил серьёзные неприянтости на пути к тому, чтобы дойти до того момента, где я остановился на старом сейве, был босс-доспехи-драконоборца: он меня постоянно ван-шотал, поэтому с учётом моей криворукости потребовалось некоторое время, чтобы пройти его, не напарываясь на его самые мощные атаки, которые выбивали из меня все хп.

Воттт, в общем, прошёл я до конца основной ветки игры, ещё раз почти непроизвольно приуныл, когда пришлось убивать Лотрика и Лориана, прокачал нечто странное с 50 силы и огромным мечом (который выпадает из рыцаря, который вторгается в канализации где-то перед боссом-большим-скелетом-в-короне) и пошёл пробовать пройти длц ashes of ariandel. Во-первых, это недоразумение даже близко не стоит с аналогичной локацией (painted world of ariamis) из первой части: тут это просто огромная площадь, покрытая снегом (с моим неумением ориентироваться в пространстве - это просто смерть, я постоянно ходил кругами и никак не мог найти проход в пещеру с вентилем, который открывает проход к финальному боссу длц, в какой-то момент подумал, что поехал головой, пришлось проходить часть локации, строго придерживаясь одной стороны, чтобы не заплутать), по которой рандомно понатыкали тупых рыцарей, живых деревьев и волков (ну, там есть в одном месте классные мобы-вороны, но их там полторы штуки). И там всё настолько глупо и разрозненно задизайнили, что в одном месте засунули лестницу, которая просто появляется из ниоткуда, когда убиваешь всех монстров вокруг (на самом дне, где лёд), чтобы сконнектить две части этой конченой локации. В-третьих, тут отвратительные боссы и их всего лишь два. Первый, вроде как необязательный, - это большой глупый волк, который просто нон-стоп спамит рывком вперёд, от которого ничего не стоит уклониться, нанести контр-атаку и так десцать раз.

А вот со вторым боссом чуть интереснее, в плохом смысле. Для начала, это босс с тремя фазами, то есть надо ему опустошить три хелс бара подряд: это очень долго и нудно, нельзя же так делать, это же всё ещё игра, а не работа на шахте, в неё должно быть весело играть. Во-вторых, это просто женщина с косой, просто обычная жэнищна в каком-то тряпье, такого же роста, как и персонаж, за которого ты играешь, просто в каких-то неопределённого цвета лохмотьях. При этом она ещё и вторичная, это очевидная калька с Присциллы из первой части: тоже орудует косой, тоже умеет становиться невидимой, тоже живёт в заснеженной локации, в которую попадаешь через портал в картине. Только вот Присцилла - миленькая кошкодевочка и ведёт себя вежливо и дружелюбно (пока ты не попытаешься отрубить ей хвост, чтобы получить особое оружие, твар), а это, ну, просто жэнщина, всё, да. В-третьих, для обычной глупой женщины она, блин, слишком сложная: размахивая косой как пластмассовой игрушкой, она спокойно сбивает тебе баланс, каким бы высоким он у тебя ни был (особенно печально в моём случае: с моим медленным оружием я даже делать взмах мечом не успевал, а она уже атаковала и выводила меня из равновесия), она постоянно прыгает из стороны в сторону, из-за чего почти не выдаётся случая нанести хотя бы два последовательных удара, она постоянно абузит невидимость, из-за чего её часто бывает просто не найти на неоправданно огромной босс-арене (для сравнения Присцилла оставляла следы на снегу, так что её можно было задетектить, и арена была значительно меньше). А ещё в своей последней, третьей, фазе она постоянно спамит ударами по площади, самонаводящимися штуками, просто сериями быстрых ударов уже двумя косами (и самое неприятное - это то, что никогда не знаешь, когда она наносит последний удар и уже можно контр-атаковать: вот вроде она уже опустила свою косу и ты готовишься ударить, а она наносит ещё пару ударов, которые ты вообще не ожидал). Я как бы не отрицаю того, что я анскилл, но блин, но как так-то, я даже записал её убивство, чтобы точно знать, что мне не приснилась победа над ней: https://youtu.be/wYDBV1zghLs

Короче, первое длц - просто отвратительное.

А вот второе мне понравилось: оно значительно больше первого, там есть две с половиной разнообразные локации с более-менее интересными врагами, есть даже нпц с хорошй квест-линией (для завершения которой надо было открыть вот эту https://youtu.be/JP0Qtt08cEw секретку; сам до решения я не догадался, вообще неочевидно, даже с учётом чьей-то подсказки на полу рядом, где упоминается, что надо мимикрировать под какой-то предмет окружения), ну, и боссы вроде как неплохие, но тоже не очень понравились. Демоны какие-то странные https://youtu.be/MM7p1gHXlM0 во второй фазе у него ну как-то слишком уж много хп и в целом босс-файт превратился в какое-то месиво, опциональный босс-дракон тоже так себе (слишком большая босс-арена, из-за чего он постоянно убегает от тебя, слишком скудный мувсет, слишком много хп). С боссом, где вместо босса могут призваться обычные игроки, забавная идея (вроде в дс2 было нечто похожее с зеркальным рыцарем), но я вообще не умею в пвп, поэтому оба раза, когда ко мне кто-то вторгся на босс-файте, я слился. Финальный босс, наверное, неплохой, напоминает немного книгхта арториса зе абиссволкера из первой части.

Но вообще это всё не так важно, самое главное - в этом длц можно найти единственный нормальный сет брони в игре https://darksouls3.wiki.fextralife.com/Desert+Pyromancer+Set, который был ещё во второй части. Жаль только, что его никак нельзя заполучить в самом начале.

В общем, второе длц лучше всей основной игры и первой длц вместе взятых и, скорее всего, именно поэтому его засунули в самый конец.

Ну, а о файнал боссе всей игры особо нечего сказать, там половина мувсета позаимствована из последнего босса первой части.

На прохождение всего со всеми длц, с эксплорингом всех локаций (настолько, насколько позволил мой топографический кретинизм), завершением квест линий большинства нпц и убийством всех боссов у меня ушло позорные 43 часа. Из всей игры мне понравились только всё второе длц, альтернативная версия храма огня и локация с драконами. Обидно, что не дают ачиевментов хотя бы за прохождение длц по отдельности. Аз ит турнс аут, третий дарк совс намного сложнее первой части (насчёт сложности второй не знаю, я её один раз прошёл, без длц, меня от неё подташнивает), но в то же время во многих моментах нуднее и скучнее. Да и, в целом, да, это и правда сЛоЖнАя игра не для додиков вроде меня, больше никогда не буду трогать её, ближайшие несколько месяцев ничего сложнее пасьянса косынки морально не осилю.
а вот PoppyFanboy@Deonix0525 313 284691
Перепрошёл и допрошёл третий дак совс, ура, теперь я могу спать спокойно

Начать, наверное, надо с того, что у меня огромные проблемы с прохождением игр, которые хотя бы чуть-чуть, на малую толику, предсавтляют из себя челлендж и бросают тебе вызов: мне постоянно хочется либо пройти какой-то момент с как можно большим числом очков, либо за как можно меньшее количество попыток, либо стараться пройти игру на лоу-левеле, либо делать ещё, что угодно, чтобы почувствовать, что ты замастерил игру даже лучше, чем от тебя это ожидалось. Вот с дак совсом у меня примерно то же самое: я долгое время не мог заставить себя пройти дальше нескольких первых локаций просто потому, что мне постоянно казалось, что я слишком перекачан для последующих локаций и мне надо переиграть всё заново. В какой-то момент я всё же пересилил себя и прошёл почти полностью основную ветку игры >>246441, но n дней назад у меня опять случився этот приступ "сейчас по-быстрому перепройду заново, нормально завершу все квест линии и проэксплорю все локации", и я удалил этот старый сейв и начал заново. Только в этот раз я пообещал себе, что не буду жалеть денег на прокачку уровня и буду придерживаться левелов, которые указаны здесь: https://darksouls3.wiki.fextralife.com/Recommended+Level+by+Location. Так как в прошлый раз я играл за такого кайнд оф супер-ловкого ниндзю с ножом, то в этот раз я почти все очки уровней вбил в силу.

Long story short я очень сильно пожалел о том, что начал перепроходить всё заново: целиком и полностью прочувствовал на себе, насколько же бОльшая часть этой игры - нудная дрянь: огромнейшие локации, куча всяких мусорных айтемов, которые ты никогда в жизни не будешь использовать (вот, в частности, миллиард разновидностей штук, которые увеличивают сопротивляемость к и урон от молний/огня/магии/тьмы/ещё чего-то там), ну, и в целом, играть чёт было довольно скучно, единственный, кто доставил серьёзные неприянтости на пути к тому, чтобы дойти до того момента, где я остановился на старом сейве, был босс-доспехи-драконоборца: он меня постоянно ван-шотал, поэтому с учётом моей криворукости потребовалось некоторое время, чтобы пройти его, не напарываясь на его самые мощные атаки, которые выбивали из меня все хп.

Воттт, в общем, прошёл я до конца основной ветки игры, ещё раз почти непроизвольно приуныл, когда пришлось убивать Лотрика и Лориана, прокачал нечто странное с 50 силы и огромным мечом (который выпадает из рыцаря, который вторгается в канализации где-то перед боссом-большим-скелетом-в-короне) и пошёл пробовать пройти длц ashes of ariandel. Во-первых, это недоразумение даже близко не стоит с аналогичной локацией (painted world of ariamis) из первой части: тут это просто огромная площадь, покрытая снегом (с моим неумением ориентироваться в пространстве - это просто смерть, я постоянно ходил кругами и никак не мог найти проход в пещеру с вентилем, который открывает проход к финальному боссу длц, в какой-то момент подумал, что поехал головой, пришлось проходить часть локации, строго придерживаясь одной стороны, чтобы не заплутать), по которой рандомно понатыкали тупых рыцарей, живых деревьев и волков (ну, там есть в одном месте классные мобы-вороны, но их там полторы штуки). И там всё настолько глупо и разрозненно задизайнили, что в одном месте засунули лестницу, которая просто появляется из ниоткуда, когда убиваешь всех монстров вокруг (на самом дне, где лёд), чтобы сконнектить две части этой конченой локации. В-третьих, тут отвратительные боссы и их всего лишь два. Первый, вроде как необязательный, - это большой глупый волк, который просто нон-стоп спамит рывком вперёд, от которого ничего не стоит уклониться, нанести контр-атаку и так десцать раз.

А вот со вторым боссом чуть интереснее, в плохом смысле. Для начала, это босс с тремя фазами, то есть надо ему опустошить три хелс бара подряд: это очень долго и нудно, нельзя же так делать, это же всё ещё игра, а не работа на шахте, в неё должно быть весело играть. Во-вторых, это просто женщина с косой, просто обычная жэнищна в каком-то тряпье, такого же роста, как и персонаж, за которого ты играешь, просто в каких-то неопределённого цвета лохмотьях. При этом она ещё и вторичная, это очевидная калька с Присциллы из первой части: тоже орудует косой, тоже умеет становиться невидимой, тоже живёт в заснеженной локации, в которую попадаешь через портал в картине. Только вот Присцилла - миленькая кошкодевочка и ведёт себя вежливо и дружелюбно (пока ты не попытаешься отрубить ей хвост, чтобы получить особое оружие, твар), а это, ну, просто жэнщина, всё, да. В-третьих, для обычной глупой женщины она, блин, слишком сложная: размахивая косой как пластмассовой игрушкой, она спокойно сбивает тебе баланс, каким бы высоким он у тебя ни был (особенно печально в моём случае: с моим медленным оружием я даже делать взмах мечом не успевал, а она уже атаковала и выводила меня из равновесия), она постоянно прыгает из стороны в сторону, из-за чего почти не выдаётся случая нанести хотя бы два последовательных удара, она постоянно абузит невидимость, из-за чего её часто бывает просто не найти на неоправданно огромной босс-арене (для сравнения Присцилла оставляла следы на снегу, так что её можно было задетектить, и арена была значительно меньше). А ещё в своей последней, третьей, фазе она постоянно спамит ударами по площади, самонаводящимися штуками, просто сериями быстрых ударов уже двумя косами (и самое неприятное - это то, что никогда не знаешь, когда она наносит последний удар и уже можно контр-атаковать: вот вроде она уже опустила свою косу и ты готовишься ударить, а она наносит ещё пару ударов, которые ты вообще не ожидал). Я как бы не отрицаю того, что я анскилл, но блин, но как так-то, я даже записал её убивство, чтобы точно знать, что мне не приснилась победа над ней: https://youtu.be/wYDBV1zghLs

Короче, первое длц - просто отвратительное.

А вот второе мне понравилось: оно значительно больше первого, там есть две с половиной разнообразные локации с более-менее интересными врагами, есть даже нпц с хорошй квест-линией (для завершения которой надо было открыть вот эту https://youtu.be/JP0Qtt08cEw секретку; сам до решения я не догадался, вообще неочевидно, даже с учётом чьей-то подсказки на полу рядом, где упоминается, что надо мимикрировать под какой-то предмет окружения), ну, и боссы вроде как неплохие, но тоже не очень понравились. Демоны какие-то странные https://youtu.be/MM7p1gHXlM0 во второй фазе у него ну как-то слишком уж много хп и в целом босс-файт превратился в какое-то месиво, опциональный босс-дракон тоже так себе (слишком большая босс-арена, из-за чего он постоянно убегает от тебя, слишком скудный мувсет, слишком много хп). С боссом, где вместо босса могут призваться обычные игроки, забавная идея (вроде в дс2 было нечто похожее с зеркальным рыцарем), но я вообще не умею в пвп, поэтому оба раза, когда ко мне кто-то вторгся на босс-файте, я слился. Финальный босс, наверное, неплохой, напоминает немного книгхта арториса зе абиссволкера из первой части.

Но вообще это всё не так важно, самое главное - в этом длц можно найти единственный нормальный сет брони в игре https://darksouls3.wiki.fextralife.com/Desert+Pyromancer+Set, который был ещё во второй части. Жаль только, что его никак нельзя заполучить в самом начале.

В общем, второе длц лучше всей основной игры и первой длц вместе взятых и, скорее всего, именно поэтому его засунули в самый конец.

Ну, а о файнал боссе всей игры особо нечего сказать, там половина мувсета позаимствована из последнего босса первой части.

На прохождение всего со всеми длц, с эксплорингом всех локаций (настолько, насколько позволил мой топографический кретинизм), завершением квест линий большинства нпц и убийством всех боссов у меня ушло позорные 43 часа. Из всей игры мне понравились только всё второе длц, альтернативная версия храма огня и локация с драконами. Обидно, что не дают ачиевментов хотя бы за прохождение длц по отдельности. Аз ит турнс аут, третий дарк совс намного сложнее первой части (насчёт сложности второй не знаю, я её один раз прошёл, без длц, меня от неё подташнивает), но в то же время во многих моментах нуднее и скучнее. Да и, в целом, да, это и правда сЛоЖнАя игра не для додиков вроде меня, больше никогда не буду трогать её, ближайшие несколько месяцев ничего сложнее пасьянса косынки морально не осилю.
PoppyFanboy !!cYLydiSRQA 314 284692
Я ретард
PoppyFanboy !!cYLydiSRQA 315 288364
Два (2) дня готовлюсь к матану, кстати (отвлекаясь на что-то каждые пять минут). До этого ничего не делал, играл в майнкрафт, смотрел мультики. Пытался с начала августа камбекнуться в бег после перерыва в две с половиной недели, но так и не получилось побить свой бест скор, поставленный в середине июня (8.5 км за 45 минут). Вчера получилось только выдавить из себя 8 км за те же 45 минут непрерывного бега, и при этом я чуть не выплюнул свои лёгкие.

Every dead body that is not exterminated, becomes one of them.
Господи, прикончите меня уже кто-нибудь, а то я совсем уже какой-то паршивый.

https://youtu.be/LxZLBs5oZSA
https://youtu.be/uHRvak30iEs
https://youtu.be/2OC6ARG6fZA
https://youtu.be/qCKEXPXtrEU
https://youtu.be/Ejv0Gk-mGko
https://youtu.be/OgfI6jzOWik
https://youtu.be/bmkY2yc1K7Q
https://youtu.be/vnmq9JDK6Yg
316 293197
Как ты там, ОПушка?
sage PoppyFanboy !!cYLydiSRQA 317 295931
>>293197
Никак, я сдох окончательно и бесповоротно
318 295934
>>295931
не будешь писать здесь?
PoppyFanboy !!cYLydiSRQA 319 298707
Э-ээ, ну, как бы, м-мм, да, вот.

CLRS — Appendix C: Counting

Глава про какой-то очень маленький кусочек комбинаторики, покрывающая только самые-самые базовые понятия и основные формулы. Настолько базовые вещи, что там даже отдельно упомянуто формальное определение k-строки (просто упорядоченная последовательность из k элементов какого-то конечного множества). Ну, и формулы для перестановок и сочетаний там тоже есть, да.

Условимся, что (n | k) — это биноминальный коэффициент, или же «цэ из эн по ка». Я мог бы записать его и вот так: (nk), что эстетически выглядит более приятно, но тогда из-за того, что здесь слишком много биноминальных коэффициентов, слетает разметка.

Тем не менее, даже тут встретились какие-то небольшие трудности, пока разбирался. Вот, например, в доказательстве формулы для нижней границы биномиального коэффициента: (n | k) ≥ (n/k)k. Сама по себе формула доказывается в два шага, но только, если знаешь вот это неравенство: (n−m)/(k−m) ≥ n/k (для 0 ≤ m < k ≤ n). Э-э, и тут я немного запутался сам в себе. Я точно помню, что доказательство этого неравенства вызывало какие-то адские трудности, но сейчас не вижу тут ничего сложного: достаточно просто сделать несколько эквивалентных преобразований:

> (n−m)/(k−m) ≥ n/k


> (n−m)/n ≥ (k−m)/k


> 1/n ≤ 1/k


> n ≥ k


Хотя, возможно, всё из-за того, что увидел я это доказательство вывернутым наизнанку (то есть n ≥ k последовательно преобразовывалось до неравенства, которое мы доказываем), что как бы формально более корректно (получаются несколько импликаций, следующих одна за другой), но выглядит при этом как последовательность магических действий, которые совершенно случайным образом приводят нас к доказываемому утверждению. В общем, это ещё один пример того, как по-дурацки записанное доказательство делает из простейшего утверждения какой-то роскет скиенсе, недоступный для понимания тупице вроде меня. И примеров таких очень-очень много, а я и так в чужих доказательствах с трудом ориентируюсь, если они не разбиты логически на пункты и не отмечено вкратце, что делается в каждом пункте. Большинство доказательств просто пишутся сплошной стеной текста, сдобренной фразочками вроде «доказательство этого утверждения предоставляется читателю в качестве упражнения» и «вот ето вот следует из утверждения 2.6.5» (формулировка которого, естественно, находится где-то далеко позади, если вообще не в другой книжке).

Ну, ладно, это была только нижняя граница для биноминального коэффициента. Верхняя же доказывается просто выводится из одной из оценок Стирлинга для факториала (там вроде довольно много всяких формул в Википедии, но я помню только вот эти две: n! ~ √(2πn)·(n/e)n и √(2π)·nn+1/2·e−n ≤ n! ≤ e·nn+1/2·e−n). В общем, всё сводится вот к этому:

> (n/k)k ≤ (nk) ≤ (e·n/k)k


И, наверное, это круто.

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

CLRS — Appendix C: Counting (Exercises)

C.1-1

>How many k-substrings does an n-string have? (Consider identical k-substrings at different positions to be different.) How many substrings does an n-string have in total?



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

Вот, например, в этой задачке можно, конечно, просто просуммировать число строк длины 1, длины 2, и так далее до n и получить (n+1 | 2). Но гораздо проще представить, что между символами в строке можно поставить условные «маркеры» (перед первым символом, после первого, ..., перед последним и после последнего, то есть всего — n+1) и тогда любая подстрока задаётся выбором каких-то двух «маркеров», стоящих по разные стороны относительно подстроки. Ну, а число способов выбрать 2 элемента из n+1 — это и есть (n+1 | 2).

Собственно, примерно в такой же манере решаются и все остальные задачки на комбинаторику. И это уже частично было, кстати, в 6.042J.

Вот, например:

> k·(n | k) = n·(n-1 | k−1)


Эту формулу можно проинтерпретировать как «число способов собрать команду из k человек (выбирая из n претендентов) и выбрать в ней капитана». Слева — мы сначала собираем команду, а потом выбираем в ней капитана, а справа — сначала выбираем n способами капитана, а потом капитан добирает себе в команду оставшихся k−1 человека. То есть разными способами считаем одно и то же.

> (n | k) = (n−1 | k) + (n−1 | k−1)


Вот эта формула вроде довольно часто встречается и даже как-то по-умному называется. Тут выделяется какой-то конкретный особый предмет среди всех n предметов, из которых мы выбираем коллекцию из k штук, и тогда все возможные наборы из k предметов делятся на два дизъюнктных множества: множество наборов, в которых этот особый предмет присутствует, и наборы, в которых его нет.

Последний факт, кстати, используется при построении Треугольника Паскаля, про который я вроде когда-то слышал, но никогда не знал толком, что это. Как оказалось, это просто последовательность строк, записанных друг под другом, где в n-ой строке выписаны n биноминальных коэффициентов: начиная с (n | 0), и, заканчивая (n | n). Получается такой прямоугольный треугольник, у которого по границе стоят единицы, а остальные элементы вычисляются как сумма вышестоящего и слева-сверху-стоящего элементов. Полезно, если ты не знаешь коэффициенты для Бинома Ньютона для какой-то там большой степени: можно быстро просуммировать на бумажке и получить их выписанными в одном из рядов в треугольнике.

С.1-10

>Покажите, что (n | k) принимает максимальное значение в k = [n/2].


Доказательство на пикрилейтеде. Я его отдельно довольно подробно расписал, потому что один раз умудрился запутаться во всех этих индексах и доказать неправильно. Сейчас вроде как нормально.

С.1-11

> (n | j+k) ≤ (n | j)·(n−j | k)


Вроде очевидно, но заставляет задуматься. Может показаться, что верно и более строгое утверждение, с равенством, но на деле это не так: слева — число способов выбрать j+k элементов из n, а справа — число способов сначала выбрать j, а потом k элементов из того же набора. То есть во втором случае нам чуть-чуть важен порядок, так что в каком-нибудь простом примере на множестве {A, B} и j=1, k=1 будет выполняться строгое неравенство: с одной стороны, можем выбрать только одним способом сразу два элемента, с другой, с учётом порядка элементы мы можем выбрать двумя способами: либо сначала A, а потом B, либо сначала B, а потом A.

C.1-13

>Use Stirling's approximation to prove that (2n | n) = чему-то там


Тут не важно, что там за формула, я всё равно её не запомню, но доказывается она просто через Стирлинга и, зачёт того, что там что-то сокращается, она становится чуть проще, так что можно оценить вот етот модный биноминальный коэффициент.

Остаются только две приложенных картинки.

Первая из двух, но третья из четырёх, вот такая математика — доказательство какого-то очередного глупого неравенства. ОБРАТИТЕ ВНИМАНИЕ на два «короче» внизу и на то, что я, будучи человеком, который неспособен сложить два двузначных числа в уме, героически посчитал производную сложной функции, доведя её до состояния, где можно понять, что производная имеет какой-то там знак на каком-то там интервале. А само доказательство получилось каким-то заковыристым, плюс наверняка там полная ерунда с областями определения n и k, так что там в некоторых местах могут быть деления на ноль, которые надо бы отдельно рассматривать, но мне всё равно, вот. А доказательство для второй половины промежутка там следует просто из такой своего рода «симметричности» биноминального коэффициента: (n | k) = (n | n−k)

На последней картинке на мой взгляд как человека, не обременённого особыми познаниями во всяких математиках, — просто какие-то формулы, которые как-то магически друг из друга выводятся. Какой смысл у всего этого, что такое binary entropy function, почему мы обозначили k = λn — не знаю.

Очень часто подглядывал в решебники, но иначе я бы потратил неоправданно большое количество времени на это всё. К тому же я не вижу челленджа в том, чтобы решить это всё именно самостоятельно.

Короче, чёт такое.

https://youtu.be/QXKe-GIcXFM
PoppyFanboy !!cYLydiSRQA 319 298707
Э-ээ, ну, как бы, м-мм, да, вот.

CLRS — Appendix C: Counting

Глава про какой-то очень маленький кусочек комбинаторики, покрывающая только самые-самые базовые понятия и основные формулы. Настолько базовые вещи, что там даже отдельно упомянуто формальное определение k-строки (просто упорядоченная последовательность из k элементов какого-то конечного множества). Ну, и формулы для перестановок и сочетаний там тоже есть, да.

Условимся, что (n | k) — это биноминальный коэффициент, или же «цэ из эн по ка». Я мог бы записать его и вот так: (nk), что эстетически выглядит более приятно, но тогда из-за того, что здесь слишком много биноминальных коэффициентов, слетает разметка.

Тем не менее, даже тут встретились какие-то небольшие трудности, пока разбирался. Вот, например, в доказательстве формулы для нижней границы биномиального коэффициента: (n | k) ≥ (n/k)k. Сама по себе формула доказывается в два шага, но только, если знаешь вот это неравенство: (n−m)/(k−m) ≥ n/k (для 0 ≤ m < k ≤ n). Э-э, и тут я немного запутался сам в себе. Я точно помню, что доказательство этого неравенства вызывало какие-то адские трудности, но сейчас не вижу тут ничего сложного: достаточно просто сделать несколько эквивалентных преобразований:

> (n−m)/(k−m) ≥ n/k


> (n−m)/n ≥ (k−m)/k


> 1/n ≤ 1/k


> n ≥ k


Хотя, возможно, всё из-за того, что увидел я это доказательство вывернутым наизнанку (то есть n ≥ k последовательно преобразовывалось до неравенства, которое мы доказываем), что как бы формально более корректно (получаются несколько импликаций, следующих одна за другой), но выглядит при этом как последовательность магических действий, которые совершенно случайным образом приводят нас к доказываемому утверждению. В общем, это ещё один пример того, как по-дурацки записанное доказательство делает из простейшего утверждения какой-то роскет скиенсе, недоступный для понимания тупице вроде меня. И примеров таких очень-очень много, а я и так в чужих доказательствах с трудом ориентируюсь, если они не разбиты логически на пункты и не отмечено вкратце, что делается в каждом пункте. Большинство доказательств просто пишутся сплошной стеной текста, сдобренной фразочками вроде «доказательство этого утверждения предоставляется читателю в качестве упражнения» и «вот ето вот следует из утверждения 2.6.5» (формулировка которого, естественно, находится где-то далеко позади, если вообще не в другой книжке).

Ну, ладно, это была только нижняя граница для биноминального коэффициента. Верхняя же доказывается просто выводится из одной из оценок Стирлинга для факториала (там вроде довольно много всяких формул в Википедии, но я помню только вот эти две: n! ~ √(2πn)·(n/e)n и √(2π)·nn+1/2·e−n ≤ n! ≤ e·nn+1/2·e−n). В общем, всё сводится вот к этому:

> (n/k)k ≤ (nk) ≤ (e·n/k)k


И, наверное, это круто.

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

CLRS — Appendix C: Counting (Exercises)

C.1-1

>How many k-substrings does an n-string have? (Consider identical k-substrings at different positions to be different.) How many substrings does an n-string have in total?



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

Вот, например, в этой задачке можно, конечно, просто просуммировать число строк длины 1, длины 2, и так далее до n и получить (n+1 | 2). Но гораздо проще представить, что между символами в строке можно поставить условные «маркеры» (перед первым символом, после первого, ..., перед последним и после последнего, то есть всего — n+1) и тогда любая подстрока задаётся выбором каких-то двух «маркеров», стоящих по разные стороны относительно подстроки. Ну, а число способов выбрать 2 элемента из n+1 — это и есть (n+1 | 2).

Собственно, примерно в такой же манере решаются и все остальные задачки на комбинаторику. И это уже частично было, кстати, в 6.042J.

Вот, например:

> k·(n | k) = n·(n-1 | k−1)


Эту формулу можно проинтерпретировать как «число способов собрать команду из k человек (выбирая из n претендентов) и выбрать в ней капитана». Слева — мы сначала собираем команду, а потом выбираем в ней капитана, а справа — сначала выбираем n способами капитана, а потом капитан добирает себе в команду оставшихся k−1 человека. То есть разными способами считаем одно и то же.

> (n | k) = (n−1 | k) + (n−1 | k−1)


Вот эта формула вроде довольно часто встречается и даже как-то по-умному называется. Тут выделяется какой-то конкретный особый предмет среди всех n предметов, из которых мы выбираем коллекцию из k штук, и тогда все возможные наборы из k предметов делятся на два дизъюнктных множества: множество наборов, в которых этот особый предмет присутствует, и наборы, в которых его нет.

Последний факт, кстати, используется при построении Треугольника Паскаля, про который я вроде когда-то слышал, но никогда не знал толком, что это. Как оказалось, это просто последовательность строк, записанных друг под другом, где в n-ой строке выписаны n биноминальных коэффициентов: начиная с (n | 0), и, заканчивая (n | n). Получается такой прямоугольный треугольник, у которого по границе стоят единицы, а остальные элементы вычисляются как сумма вышестоящего и слева-сверху-стоящего элементов. Полезно, если ты не знаешь коэффициенты для Бинома Ньютона для какой-то там большой степени: можно быстро просуммировать на бумажке и получить их выписанными в одном из рядов в треугольнике.

С.1-10

>Покажите, что (n | k) принимает максимальное значение в k = [n/2].


Доказательство на пикрилейтеде. Я его отдельно довольно подробно расписал, потому что один раз умудрился запутаться во всех этих индексах и доказать неправильно. Сейчас вроде как нормально.

С.1-11

> (n | j+k) ≤ (n | j)·(n−j | k)


Вроде очевидно, но заставляет задуматься. Может показаться, что верно и более строгое утверждение, с равенством, но на деле это не так: слева — число способов выбрать j+k элементов из n, а справа — число способов сначала выбрать j, а потом k элементов из того же набора. То есть во втором случае нам чуть-чуть важен порядок, так что в каком-нибудь простом примере на множестве {A, B} и j=1, k=1 будет выполняться строгое неравенство: с одной стороны, можем выбрать только одним способом сразу два элемента, с другой, с учётом порядка элементы мы можем выбрать двумя способами: либо сначала A, а потом B, либо сначала B, а потом A.

C.1-13

>Use Stirling's approximation to prove that (2n | n) = чему-то там


Тут не важно, что там за формула, я всё равно её не запомню, но доказывается она просто через Стирлинга и, зачёт того, что там что-то сокращается, она становится чуть проще, так что можно оценить вот етот модный биноминальный коэффициент.

Остаются только две приложенных картинки.

Первая из двух, но третья из четырёх, вот такая математика — доказательство какого-то очередного глупого неравенства. ОБРАТИТЕ ВНИМАНИЕ на два «короче» внизу и на то, что я, будучи человеком, который неспособен сложить два двузначных числа в уме, героически посчитал производную сложной функции, доведя её до состояния, где можно понять, что производная имеет какой-то там знак на каком-то там интервале. А само доказательство получилось каким-то заковыристым, плюс наверняка там полная ерунда с областями определения n и k, так что там в некоторых местах могут быть деления на ноль, которые надо бы отдельно рассматривать, но мне всё равно, вот. А доказательство для второй половины промежутка там следует просто из такой своего рода «симметричности» биноминального коэффициента: (n | k) = (n | n−k)

На последней картинке на мой взгляд как человека, не обременённого особыми познаниями во всяких математиках, — просто какие-то формулы, которые как-то магически друг из друга выводятся. Какой смысл у всего этого, что такое binary entropy function, почему мы обозначили k = λn — не знаю.

Очень часто подглядывал в решебники, но иначе я бы потратил неоправданно большое количество времени на это всё. К тому же я не вижу челленджа в том, чтобы решить это всё именно самостоятельно.

Короче, чёт такое.

https://youtu.be/QXKe-GIcXFM
.jpg107 Кб, 823x1300
PoppyFanboy !!cYLydiSRQA 320 298712
>>288364
Третьего сентября всё же осилил, во-первых, свой бест-скор по бегу на 8.5 километров за 45 минут. А чуть позже получилось и три раза пробежать 10 километров (54:15, если не останавливаясь, и 52:30, если с переходом на шаг где-то посередине по времени). Но это всё уже в очень далёком прошлом: бегать я перестал ещё в середине сентября из-за плохого настроения и плохой погоды: когда даже просто находиться на улице tyazhelovato из-за постоянного холодного ветра, которому иногда аккомпанирует мерзкий моросящий дождь. В общем, не вышло у меня выбить 10 км за 50 минут за эти шесть с половиной месяцев, что я бегал. Почти уверен, что жизнь в практически неподвижном режиме за зиму опять сделает из меня мешок с картошкой, задыхающийся после минуты бега, как это было полгода назад.

Посмотрел определённое количество аниме и до сих пор недосмотрел штуки три, которые начал. Но не скажу, какие. Скажу только, что у меня дошли руки до Адзуманги Дайо и мне она понравилась. А те три, которые начал... В обычных условиях я бы не стал смотреть одновременно несколько мультиков, но тут просто так вышло, что за какое аниме я бы ни взялся, спустя какое-то время выяснялось, что оно травит меня, унижает и вообще приходится местами смотреть через силу. Поэтому я бросал смотреть одно и начинал другое. А потом опять. Вот это проблемы у меня, конечно.

А всё остальное не важно. В смысле, может, и важно кому-то, но точно не мне, хотя и меня пытаются убедить в обратном. То, что я говорю об этом, конечно, говорит против меня, но мне всё равно.

А, ещё у меня накопилось приличное количество новой музыки, которая мне понравилась за последнее время.

https://youtu.be/WeKw6c9aTJ0
Случайно услышал этот трек, когда смотрел интервью с каким-то бездомным парнем: он заиграл из мимо проезжающей машины:
https://youtu.be/H6ZFzEW7_Q4?t=42

https://youtu.be/OC-QX_W56zQ
https://youtu.be/YHffn_sKtHA
https://youtu.be/IUk8EPipD3Y
https://youtu.be/tZu3EUVJ8-4
Экстремально крутой футуре фанк, найденный случайно мною на ютуб-канале с названием aesthetics sadness and depressive songs, и это прямо совсем не соответствует его содержанию: там в основном классные весёлые песенки, ремиксованные парнями вроде BIGWAWE и Night Tempo (больше просто никого не знаю, кто подобным занимается).

https://youtu.be/qivx7osCg7s
Ещё не слушал до конца. Вроде обещает быть чем-то неплохим. Там, кстати, есть по крайней мере один кавер (начиная с 8.11) на песенку из одного из его прошлых альбомов (Den'en ni Shisu — 1974). Но, по-моему, она и в оригинале отлично звучала, не знаю, зачем надо было перезаписывать её.

https://youtu.be/AqRHvSC-kIc
Я продолжаю потихоньку есть это. По-моему, отлично (особенно Bullet Hell и Bitten Twice). WLFGRL и Ugly Art, кстати, у них тоже очень крутые.

https://youtu.be/ybluEqQTpKk
Очень давно уже узнал про Paramore, но никак руки не доходили послушать нормально. Вот эта песенка очень классная, ещё Misery Business тоже хорошая, да и весь альбом Riot!, по-моему, классный.

https://youtu.be/ixPavrJMxRk
https://youtu.be/kiLkV2Lpaf8
Оказывается, у парня, который делает всякие каверы на украинском (UkrTrashDub) есть отдельный около-серьёзный проект. Мне нравится.

https://youtu.be/vStjmYxetY0
https://youtu.be/vStjmYxetY0
https://youtu.be/CfbCLwNlGwU
Много раз слышал про Crystal Castles, но как-то не особо нравится большинство их треков. Но вот эти неплохие. Остальные из тех, что слушал, как-то не сильно понравились.

https://youtu.be/l9cVN4ZqNIM
https://youtu.be/QeYke08Xuws
https://youtu.be/YJ1iaNHEjFU
https://youtu.be/cdiY6kijYHE
Какой-то пост-рок или как это называется. Случайно выпал в рекомендациях.

https://youtu.be/usRDtHjYKzU
https://youtu.be/WrsFXgQk5UI
https://youtu.be/Ncr8TkdQUm8
https://youtu.be/tusvYINkqoE
фу, реп

https://youtu.be/vwwkjI65Q0A
https://youtu.be/egG7fiE89IU
https://youtu.be/c3WgzxpjjnE
Что-то рандомное.

Тут не всё, но то, на что я наткнулся за последнее время. Как оказалось, что мне тяжело поддерживать в нормальном незахламлённом состоянии даже два плейлиста (в одном музыка, которая мне нравится, а во втором — то, что ещё надо будет послушать). При этом я не то чтобы очень много новой музыки добавляю: в основном слушаю просто свой основной плейлист. Возможно, я просто неорганизованное чмо даже в этом отношении.
.jpg107 Кб, 823x1300
PoppyFanboy !!cYLydiSRQA 320 298712
>>288364
Третьего сентября всё же осилил, во-первых, свой бест-скор по бегу на 8.5 километров за 45 минут. А чуть позже получилось и три раза пробежать 10 километров (54:15, если не останавливаясь, и 52:30, если с переходом на шаг где-то посередине по времени). Но это всё уже в очень далёком прошлом: бегать я перестал ещё в середине сентября из-за плохого настроения и плохой погоды: когда даже просто находиться на улице tyazhelovato из-за постоянного холодного ветра, которому иногда аккомпанирует мерзкий моросящий дождь. В общем, не вышло у меня выбить 10 км за 50 минут за эти шесть с половиной месяцев, что я бегал. Почти уверен, что жизнь в практически неподвижном режиме за зиму опять сделает из меня мешок с картошкой, задыхающийся после минуты бега, как это было полгода назад.

Посмотрел определённое количество аниме и до сих пор недосмотрел штуки три, которые начал. Но не скажу, какие. Скажу только, что у меня дошли руки до Адзуманги Дайо и мне она понравилась. А те три, которые начал... В обычных условиях я бы не стал смотреть одновременно несколько мультиков, но тут просто так вышло, что за какое аниме я бы ни взялся, спустя какое-то время выяснялось, что оно травит меня, унижает и вообще приходится местами смотреть через силу. Поэтому я бросал смотреть одно и начинал другое. А потом опять. Вот это проблемы у меня, конечно.

А всё остальное не важно. В смысле, может, и важно кому-то, но точно не мне, хотя и меня пытаются убедить в обратном. То, что я говорю об этом, конечно, говорит против меня, но мне всё равно.

А, ещё у меня накопилось приличное количество новой музыки, которая мне понравилась за последнее время.

https://youtu.be/WeKw6c9aTJ0
Случайно услышал этот трек, когда смотрел интервью с каким-то бездомным парнем: он заиграл из мимо проезжающей машины:
https://youtu.be/H6ZFzEW7_Q4?t=42

https://youtu.be/OC-QX_W56zQ
https://youtu.be/YHffn_sKtHA
https://youtu.be/IUk8EPipD3Y
https://youtu.be/tZu3EUVJ8-4
Экстремально крутой футуре фанк, найденный случайно мною на ютуб-канале с названием aesthetics sadness and depressive songs, и это прямо совсем не соответствует его содержанию: там в основном классные весёлые песенки, ремиксованные парнями вроде BIGWAWE и Night Tempo (больше просто никого не знаю, кто подобным занимается).

https://youtu.be/qivx7osCg7s
Ещё не слушал до конца. Вроде обещает быть чем-то неплохим. Там, кстати, есть по крайней мере один кавер (начиная с 8.11) на песенку из одного из его прошлых альбомов (Den'en ni Shisu — 1974). Но, по-моему, она и в оригинале отлично звучала, не знаю, зачем надо было перезаписывать её.

https://youtu.be/AqRHvSC-kIc
Я продолжаю потихоньку есть это. По-моему, отлично (особенно Bullet Hell и Bitten Twice). WLFGRL и Ugly Art, кстати, у них тоже очень крутые.

https://youtu.be/ybluEqQTpKk
Очень давно уже узнал про Paramore, но никак руки не доходили послушать нормально. Вот эта песенка очень классная, ещё Misery Business тоже хорошая, да и весь альбом Riot!, по-моему, классный.

https://youtu.be/ixPavrJMxRk
https://youtu.be/kiLkV2Lpaf8
Оказывается, у парня, который делает всякие каверы на украинском (UkrTrashDub) есть отдельный около-серьёзный проект. Мне нравится.

https://youtu.be/vStjmYxetY0
https://youtu.be/vStjmYxetY0
https://youtu.be/CfbCLwNlGwU
Много раз слышал про Crystal Castles, но как-то не особо нравится большинство их треков. Но вот эти неплохие. Остальные из тех, что слушал, как-то не сильно понравились.

https://youtu.be/l9cVN4ZqNIM
https://youtu.be/QeYke08Xuws
https://youtu.be/YJ1iaNHEjFU
https://youtu.be/cdiY6kijYHE
Какой-то пост-рок или как это называется. Случайно выпал в рекомендациях.

https://youtu.be/usRDtHjYKzU
https://youtu.be/WrsFXgQk5UI
https://youtu.be/Ncr8TkdQUm8
https://youtu.be/tusvYINkqoE
фу, реп

https://youtu.be/vwwkjI65Q0A
https://youtu.be/egG7fiE89IU
https://youtu.be/c3WgzxpjjnE
Что-то рандомное.

Тут не всё, но то, на что я наткнулся за последнее время. Как оказалось, что мне тяжело поддерживать в нормальном незахламлённом состоянии даже два плейлиста (в одном музыка, которая мне нравится, а во втором — то, что ещё надо будет послушать). При этом я не то чтобы очень много новой музыки добавляю: в основном слушаю просто свой основной плейлист. Возможно, я просто неорганизованное чмо даже в этом отношении.
.jpg591 Кб, 2048x1842
PoppyFanboy 321 298853
CLRS — Appendix C: Probability
Глава про вероятность и приколы.

Вероятностное пространство

Всё начинается довольно странно: вероятностное пространство тут толком не определяется (как тройка элементов: множество элементарных событий (sample space), сигма-алгебра событий и функция распределения вероятностей) в ущерб формальности и аккуратности, но зато, вероятно, предполагалось, что так всё будет выглядеть чуть проще: просто говорится, что вот, есть S — sample space, отдельные элементы S — элементарные события, а событие — это подмножество S. И тут же маленькими буквами делается сноска, что ну, вообще, всё не так просто и что некоторые подмножества S могут и не быть событиями. Не знаю, в чём была проблема просто написать, что события — это элементы сигма-алгебры множества S, а сигма-алгебра — это просто штука, которая содержит в себе S и замкнута относительно взятия алгебраического дополнения и счётного объединения (следовательно, и счётного пересечения) своих элементов. Ну, это не критично, но просто показалось мне странным. Да и это такая мелочь, на самом деле, не знаю, зачем об этом пишу отдельно.

Ну, для примера можно рассмотреть S = {HH, HT, TH, TT} — тут каждое элементарное событие — исход при подбрасывании двух различимых монет (Heads/Tails). Событием будет, например, подмножество A = {HH, HT, TH} — то есть, что выпал как минимум один орёл.

Так, ну, ладно, допустим, определили, что такое события. Само S называется достоверным событием, а пустое множество — невозможным. Если события не пересекаются, то они называются несовместными (mutually exclusive). Всегда путал «несовместные» и «независимые» события (а, возможно, и считал, что это вообще синонимы), хотя это вообще разные вещи.

Потом вводится определение функции вероятностного распределения (probability distribution) как функции Pr{} из множества событий на ось вещественных чисел, которая удовлетворяет вот таким аксиомам:

> Pr{A} ≥ 0 для любого события A


> Pr{S} = 1


> Pr{} счётно-аддитивна


Что интересно, только из этих трёх свойств, можно вывести, что:

> Pr{A} ≤ 1


Очевидно из этого равенства: 1 = Pr{S} = Pr{A ∪ S\A} = Pr{S} + Pr{S\A}
А, если тут же принять A за S, то можно вывести, что Pr{∅} = 0

> A ⊂ B => Pr{A} ≤ Pr{B}


Тоже легко проверяется: Pr{B} = Pr{A ∪ (S\A)∩B} = Pr{A} + Pr{(S\A)∩B} ≥ Pr{A}

Ну и в качестве примера можно привести Pr, действующую на множестве интервалов, содержащихся внутри [a, b]:

> Pr{[c, d]} = (d−c)/(b−a)


Кстати, это пример вероятностного пространства, определённого на несчётно бесконечном множестве. Все элементарные события тут (точки [c, c]) имеют вероятность 0. Вроде как такая штука называется continuous uniform probability distribution.

Условные вероятности

«Независимые» события определяются просто как те события, для которых верно равенство:

> Pr{A∩B} = Pr{A} · Pr{B}


А «условная вероятность» — это просто вот такая штука:

> Pr{A|B} = Pr{A∩B} / Pr{B}



Для меня раньше было загадкой, что это вообще такое и какой имеет смысл, но, как оказалось, там всё довольно просто. Можно проинтерпретировать Pr{A|B} как «то, как бы мы оценили вероятность события A при условии, что имело место событие B». Вот, например, у нас есть две монеты: одна фальшивая (не знаю, как по-другому назвать, по английски она «biased», а тут пускай будет «фальшивой»), другая — честная. Фальшивая всегда падает орлом вверх. Выбираем одну монету из двух и подбрасываем её. Пусть A — событие, при котором мы выбираем «честную» монету, B — то, что при подбрасывании выпал орёл. Тогда Pr{B|A} = 1/2, так как монета честная, а вот Pr{B|S\A} = 1, так как фальшивая монета всегда падает орлом вверх. И это без использования формулы, просто руководствуясь логекой. По формуле, кстати, получается те же результаты: Pr{B|A} = (1/4)/(1/2) = 1/2 и Pr{B|S\A} = (1/2)/(1/2) = 1 (Pr{(S\A)∩B} = 1/2, так как сначала с вероятностью 1/2 достаём фальшивую монету, а потом с вероятностью 1 выбиваем орла).

Кстати, интересно, что определение условной вероятности перекликается с независимыми событиями:

> A и B независимы <=> Pr{A} = Pr{A|B}


И ещё можно сделать вот такое преобразование: Pr{B} = Pr{A∩B} + Pr{(S\A)∩B}, чтобы было понятно, что условная вероятность, как и обычная, меньше или равна единице. То есть Pr{B} в знаменателе в формуле условной вероятности как бы «нормализует» значение Pr{A∩B}.

Формула Байеса

Pr{A|B} = (Pr{A} · Pr{B|A}) / Pr{B}
Легко выводится из формулы условной вероятности засчёт симметричности пересечения:

> Pr{A∩B} = Pr{A|B} · Pr{B}


> Pr{B∩A} = Pr{B|A} · Pr{A}


Классная штука, которая помогает выражать одну условную вероятность через другую, когда, например, посчитать Pr{B|A} немного проще, чем Pr{A|B}. На википедии есть прекрасный пример применения этой формулы с показаниями обследований:
https://ru.wikipedia.org/wiki/Теорема_Байеса#Пример_4_—_парадокс_теоремы_Байеса
На основе статистики (процент больных среди обследуемых и погрешность при обследовании) можно сделать вывод о том, с какой вероятностью, например, человека признают больным, если он здоров.

CLRS — Appendix C: Probability (Exercises)

C.2-2

> Prove Boole’s inequality: Pr{A1 ∪ A2 ∪ … } ≤ Pr{A1} + Pr{A2} + …


Вроде что-то очевидное (ну, понятно, что множества могут пересекаться и засчёт этого значение справа будет больше, а равенство будет достигаться только, когда все множества попарно дизъюнктны), но при этом не догадался, как это можно было бы доказать формально. Но тут всё оказалось просто: достаточно определить коллекцию множеств {Bk = Ak \ ∪(n = 1…k−1; An)}. Пусть будет такое обозначение для объединения. Я бы мог записать по-латеховски, но получилось бы неоправданно более громоздко. То есть получился набор множеств, который в объединении даёт то же самое, что и {Ak}, но при этом Bk попарно не пересекаются, а ещё Bk ⊂ Ak.

> Pr{A1 ∪ A2 ∪ … } = Pr{B1 ∪ B2 ∪ … } = Pr{B1} + Pr{B2} + … ≤ Pr{A1} + Pr{A2} + …



C.2-3

> Suppose we shuffle a deck of 10 cards, each bearing a distinct number from 1 to 10, to mix the cards thoroughly. We then remove three cards, one at a time, from the deck. What is the probability that we select the three cards in sorted (increasing) order?


Можно попробовать решить её в лоб и просто честно подсчитать все комбинации:

> (1, 2, 3), (1, 2, 4), …, (1, 2, 10)


> (1, 3, 4), (1, 3, 5), …, (1, 3, 10)


> …


> (1, 9, 10)


> (2, 3, 4), (2, 3, 5), …, (2, 3, 10)


> и так далее…


То есть всё это можно записать такой тройной суммой с единицей внутри и постепенно всё преобразовать. Там в процессе, кстати, возникает сумма квадратов чисел от 1 до n, формулу для которой я постоянно забываю. Вот тут расписан классный способ вывести её: https://brilliant.org/wiki/sum-of-n-n2-or-n3/. В общем, в итоге должно получиться 120. Всего способов достать упорядоченный набор из трёх карт — 720 штук, поэтому ответ — 1/6.

Обычно такой вот простой ответ указывает на то, что задача решена, скорее всего, правильно, но вы лох и можно было всё решить значительно проще. Тут как раз такой случай: каждое из возможных сочетаний карт (вне зависимости от порядка) достаётся с одинаковой вероятностью, так что нам по сути не важно даже, сколько там конкретно карт: засчёт симметричности всё сводится к тому, что мы достаём три карты A, B и C в случайном порядке и нам надо определить вероятность того, что мы достали их в каком-то единственно правильном порядке. А это и есть как раз 1/3! = 1/6.

И это хорошо ещё, что тут только 10 карт. Всё могло быть значительно хуже. Как, например, в зеркальной задачке про книги. Я не помню и мне лень искать точную формулировку, но суть такая: есть книжная полка с тремя многотомными сборниками произведений трёх авторов (условно там Пушкин, Есенин и Лермонтов). В сборнике Пушкина K томов, у Есенина N томов, а у Лермонтова — M томов. Требуется найти вероятность того, что если мы будем расставлять книги по полке, одну за другой, то получится так, что книги каждого автора идут по порядку (у каждого тома есть порядковый номер), но при этом необязательно друг за другом (то есть, например, Е1 П1 Л1 Л2 П2 П3 Е2 — валидная расстановка). Вот тут «в лоб» я уже не знаю, как решать, вероятно, будет довольно тяжело, особенно, если не заданы конкретные значения K, M и N. Но, на самом деле, нам нет никакого дела до того, в каком порядке расположены книги друг относительно друга, а все перестановки, как и в предыдущей задаче, равновероятны, так что достаточно просто перемножить вероятности расставить отдельно каждый сборник в своём порядке: P = 1/(K! · M! · N!).

. . .

https://youtu.be/fgnUfdYCugU
.jpg591 Кб, 2048x1842
PoppyFanboy 321 298853
CLRS — Appendix C: Probability
Глава про вероятность и приколы.

Вероятностное пространство

Всё начинается довольно странно: вероятностное пространство тут толком не определяется (как тройка элементов: множество элементарных событий (sample space), сигма-алгебра событий и функция распределения вероятностей) в ущерб формальности и аккуратности, но зато, вероятно, предполагалось, что так всё будет выглядеть чуть проще: просто говорится, что вот, есть S — sample space, отдельные элементы S — элементарные события, а событие — это подмножество S. И тут же маленькими буквами делается сноска, что ну, вообще, всё не так просто и что некоторые подмножества S могут и не быть событиями. Не знаю, в чём была проблема просто написать, что события — это элементы сигма-алгебры множества S, а сигма-алгебра — это просто штука, которая содержит в себе S и замкнута относительно взятия алгебраического дополнения и счётного объединения (следовательно, и счётного пересечения) своих элементов. Ну, это не критично, но просто показалось мне странным. Да и это такая мелочь, на самом деле, не знаю, зачем об этом пишу отдельно.

Ну, для примера можно рассмотреть S = {HH, HT, TH, TT} — тут каждое элементарное событие — исход при подбрасывании двух различимых монет (Heads/Tails). Событием будет, например, подмножество A = {HH, HT, TH} — то есть, что выпал как минимум один орёл.

Так, ну, ладно, допустим, определили, что такое события. Само S называется достоверным событием, а пустое множество — невозможным. Если события не пересекаются, то они называются несовместными (mutually exclusive). Всегда путал «несовместные» и «независимые» события (а, возможно, и считал, что это вообще синонимы), хотя это вообще разные вещи.

Потом вводится определение функции вероятностного распределения (probability distribution) как функции Pr{} из множества событий на ось вещественных чисел, которая удовлетворяет вот таким аксиомам:

> Pr{A} ≥ 0 для любого события A


> Pr{S} = 1


> Pr{} счётно-аддитивна


Что интересно, только из этих трёх свойств, можно вывести, что:

> Pr{A} ≤ 1


Очевидно из этого равенства: 1 = Pr{S} = Pr{A ∪ S\A} = Pr{S} + Pr{S\A}
А, если тут же принять A за S, то можно вывести, что Pr{∅} = 0

> A ⊂ B => Pr{A} ≤ Pr{B}


Тоже легко проверяется: Pr{B} = Pr{A ∪ (S\A)∩B} = Pr{A} + Pr{(S\A)∩B} ≥ Pr{A}

Ну и в качестве примера можно привести Pr, действующую на множестве интервалов, содержащихся внутри [a, b]:

> Pr{[c, d]} = (d−c)/(b−a)


Кстати, это пример вероятностного пространства, определённого на несчётно бесконечном множестве. Все элементарные события тут (точки [c, c]) имеют вероятность 0. Вроде как такая штука называется continuous uniform probability distribution.

Условные вероятности

«Независимые» события определяются просто как те события, для которых верно равенство:

> Pr{A∩B} = Pr{A} · Pr{B}


А «условная вероятность» — это просто вот такая штука:

> Pr{A|B} = Pr{A∩B} / Pr{B}



Для меня раньше было загадкой, что это вообще такое и какой имеет смысл, но, как оказалось, там всё довольно просто. Можно проинтерпретировать Pr{A|B} как «то, как бы мы оценили вероятность события A при условии, что имело место событие B». Вот, например, у нас есть две монеты: одна фальшивая (не знаю, как по-другому назвать, по английски она «biased», а тут пускай будет «фальшивой»), другая — честная. Фальшивая всегда падает орлом вверх. Выбираем одну монету из двух и подбрасываем её. Пусть A — событие, при котором мы выбираем «честную» монету, B — то, что при подбрасывании выпал орёл. Тогда Pr{B|A} = 1/2, так как монета честная, а вот Pr{B|S\A} = 1, так как фальшивая монета всегда падает орлом вверх. И это без использования формулы, просто руководствуясь логекой. По формуле, кстати, получается те же результаты: Pr{B|A} = (1/4)/(1/2) = 1/2 и Pr{B|S\A} = (1/2)/(1/2) = 1 (Pr{(S\A)∩B} = 1/2, так как сначала с вероятностью 1/2 достаём фальшивую монету, а потом с вероятностью 1 выбиваем орла).

Кстати, интересно, что определение условной вероятности перекликается с независимыми событиями:

> A и B независимы <=> Pr{A} = Pr{A|B}


И ещё можно сделать вот такое преобразование: Pr{B} = Pr{A∩B} + Pr{(S\A)∩B}, чтобы было понятно, что условная вероятность, как и обычная, меньше или равна единице. То есть Pr{B} в знаменателе в формуле условной вероятности как бы «нормализует» значение Pr{A∩B}.

Формула Байеса

Pr{A|B} = (Pr{A} · Pr{B|A}) / Pr{B}
Легко выводится из формулы условной вероятности засчёт симметричности пересечения:

> Pr{A∩B} = Pr{A|B} · Pr{B}


> Pr{B∩A} = Pr{B|A} · Pr{A}


Классная штука, которая помогает выражать одну условную вероятность через другую, когда, например, посчитать Pr{B|A} немного проще, чем Pr{A|B}. На википедии есть прекрасный пример применения этой формулы с показаниями обследований:
https://ru.wikipedia.org/wiki/Теорема_Байеса#Пример_4_—_парадокс_теоремы_Байеса
На основе статистики (процент больных среди обследуемых и погрешность при обследовании) можно сделать вывод о том, с какой вероятностью, например, человека признают больным, если он здоров.

CLRS — Appendix C: Probability (Exercises)

C.2-2

> Prove Boole’s inequality: Pr{A1 ∪ A2 ∪ … } ≤ Pr{A1} + Pr{A2} + …


Вроде что-то очевидное (ну, понятно, что множества могут пересекаться и засчёт этого значение справа будет больше, а равенство будет достигаться только, когда все множества попарно дизъюнктны), но при этом не догадался, как это можно было бы доказать формально. Но тут всё оказалось просто: достаточно определить коллекцию множеств {Bk = Ak \ ∪(n = 1…k−1; An)}. Пусть будет такое обозначение для объединения. Я бы мог записать по-латеховски, но получилось бы неоправданно более громоздко. То есть получился набор множеств, который в объединении даёт то же самое, что и {Ak}, но при этом Bk попарно не пересекаются, а ещё Bk ⊂ Ak.

> Pr{A1 ∪ A2 ∪ … } = Pr{B1 ∪ B2 ∪ … } = Pr{B1} + Pr{B2} + … ≤ Pr{A1} + Pr{A2} + …



C.2-3

> Suppose we shuffle a deck of 10 cards, each bearing a distinct number from 1 to 10, to mix the cards thoroughly. We then remove three cards, one at a time, from the deck. What is the probability that we select the three cards in sorted (increasing) order?


Можно попробовать решить её в лоб и просто честно подсчитать все комбинации:

> (1, 2, 3), (1, 2, 4), …, (1, 2, 10)


> (1, 3, 4), (1, 3, 5), …, (1, 3, 10)


> …


> (1, 9, 10)


> (2, 3, 4), (2, 3, 5), …, (2, 3, 10)


> и так далее…


То есть всё это можно записать такой тройной суммой с единицей внутри и постепенно всё преобразовать. Там в процессе, кстати, возникает сумма квадратов чисел от 1 до n, формулу для которой я постоянно забываю. Вот тут расписан классный способ вывести её: https://brilliant.org/wiki/sum-of-n-n2-or-n3/. В общем, в итоге должно получиться 120. Всего способов достать упорядоченный набор из трёх карт — 720 штук, поэтому ответ — 1/6.

Обычно такой вот простой ответ указывает на то, что задача решена, скорее всего, правильно, но вы лох и можно было всё решить значительно проще. Тут как раз такой случай: каждое из возможных сочетаний карт (вне зависимости от порядка) достаётся с одинаковой вероятностью, так что нам по сути не важно даже, сколько там конкретно карт: засчёт симметричности всё сводится к тому, что мы достаём три карты A, B и C в случайном порядке и нам надо определить вероятность того, что мы достали их в каком-то единственно правильном порядке. А это и есть как раз 1/3! = 1/6.

И это хорошо ещё, что тут только 10 карт. Всё могло быть значительно хуже. Как, например, в зеркальной задачке про книги. Я не помню и мне лень искать точную формулировку, но суть такая: есть книжная полка с тремя многотомными сборниками произведений трёх авторов (условно там Пушкин, Есенин и Лермонтов). В сборнике Пушкина K томов, у Есенина N томов, а у Лермонтова — M томов. Требуется найти вероятность того, что если мы будем расставлять книги по полке, одну за другой, то получится так, что книги каждого автора идут по порядку (у каждого тома есть порядковый номер), но при этом необязательно друг за другом (то есть, например, Е1 П1 Л1 Л2 П2 П3 Е2 — валидная расстановка). Вот тут «в лоб» я уже не знаю, как решать, вероятно, будет довольно тяжело, особенно, если не заданы конкретные значения K, M и N. Но, на самом деле, нам нет никакого дела до того, в каком порядке расположены книги друг относительно друга, а все перестановки, как и в предыдущей задаче, равновероятны, так что достаточно просто перемножить вероятности расставить отдельно каждый сборник в своём порядке: P = 1/(K! · M! · N!).

. . .

https://youtu.be/fgnUfdYCugU
.jpg230 Кб, 1000x1412
PoppyFanboy 322 299173
Чего-то опять так себе чувствую, поэтому сегодня опять только вот так. Проспал суммарно двенадцать часов (сначала восемь, а потом два раза по два часа: просыпался из-за телефона и почти сразу же проваливался в сон) и хочется ещё. Вообще встал с кровати только потому, что захотелось поесть. Вроде как много чего снилось, но сейчас не вспомню почти ничего, да и ничего интересного там не было. Единственное — помню, что мне снилось, как сижу рядом с какой-то собакой с её хозяином. На мой вопрос о породе собаки он ответил, что это «медовая собака», а ещё упомянул, что такая же собака была в том фильме (при этом у меня перед глазами сразу всплыл кусочек того фильма, где такая же собака за кем-то гналась). А сама собака была похожа на тёмно-рыжего нестриженого пуделя.

>>298853

. . .

C.2-5
Ещё в дополнение к штукам про условную вероятность вот такая забавная формула, которая работает для любых событий A1, …, An:

> Pr{A1 ∩ A2 ∩ … ∩ An} = Pr{A1} · Pr{A2|A1} · Pr{A3|A1 ∩ A2} · … · Pr{An | A1 ∩ … ∩ An}


Очень легко доказывается по индукции. Мне немного сложно думать о том, какой она имеет «физический» смысл (то есть смысл в терминах обывательского понимания вероятности), но выглядит красиво, да.

C.2-6

> Describe a procedure that takes as input two integers a and b such that 0 < a < b and, using fair coin flips, produces as output heads with probability a/b and tails with probability (b-a)/b.


Сначала вообще не понял, что от меня хотят, а потом понял, но не понял, как это можно реализовать, даже с учётом подсказки (>Represent a/b in binary). В общем, смысл в том, что с помощью последовательных подбрасываний монетки можно сгенерировать любое число из интервала (0, 1) (число в двоичном виде представляется с помощью последовательности нулей и единиц после запятой, каждый новый флип — новое число после запятой). Вероятность того, что случайно сгенерированное число попадёт в интервал (0, a/b) как раз и будет P = a/b, так процедуре достаточно просто возвращать «орла», если число попадает в интервал (0, a/b) и «решку» иначе. При этом достаточно генерировать число только до первой цифры, отличающейся от цифры на соответствующем месте в бинарном представлении a/b: на этот момент уже можно будет сказать, какое из чисел больше.

Тут, правда, есть одна проблема — что, если случайно сгенерируется a/b? (Допустим, что мы живём в идеальном мире и у нас нет ограничений на размер переменных.) Я не знаю, судя по всему, либо умереть в ожидании, пока процедура ищет отличающиеся цифры в двух одинаковых числах, либо где-то всё же остановиться в ущерб точности. Забавно, что вероятнее всего уже на втором подбрасывании случайное число, скорее всего, будет отличаться от заданного: ∑(n = 1…∞; n/2^n) = 2 (n — число подбрасываний умножается на 1/2^n — вероятность того, что на n-ном подбрасывании получится цифра, отличающаяся от цифры в заданном числе). Это вроде называется «математическим ожиданием», но я ещё не читал главу, где оно определяется, поэтому я назову ето «центром тяжести». То есть вариант с бесконечным числом подбрасываний очень-очень маловероятен.

C.2-7

> Show how to construct a set of n events that are pairwise independent but such that no subset of k > 2 of them is mutually independent.


Вот тут я очень сильно подвис. Вообще не было никаких идей. В каком-то решебнике был выглядящий интересно, но немного недоделанный пример такого вероятностного пространства:

> Select n random colinear points. Seeing any one of them, you know nothing new about the distribution of the others. However, given two of them, you know the line that the third point would need to lie on.


Это, конечно, выглядит довольно красиво, но что тут принять за событие? То, что точка A лежит на одной прямой вместе со всеми остальными точками? Или то, что точки A и B лежат на одной прямой? В обоих случаях я не знаю, как дальше продолжить решение. Возможно, я просто неправильно (не) понял, что имелось в виду.

А вот поинтереснее пример. Мы берём дайс с n^2 гранями и раскрашиваем его: (n−1) граней красим во всякие красивые яркие цвета, одну грань делаем в полосочку из всех использованных ярких цветов, оставшиеся грани закрашиваем чёрным. Получается, что вероятность того, что выпадет какой-то яркий цвет равна (n−1+1) / n^2 = 1/n (+1 потому что одна грань раскрашена во все яркие цвета). Вероятность того, что выпадут сразу два ярких цвета равна 1/n^2, так как у нас только одна разноцветная грань. То есть получается, что события выпадания ярких цветов попарно независимы (так как вероятности перемножаются). Но при этом вероятность того, что выпадут сразу три ярких цвета остаётся 1/n^2, тогда как для совместной независимости вероятность должна была быть 1/n^3.

И есть ещё пример, который не совсем подходит под условия задачи, но он мне тоже нравится. События A1, …, A{n−1} — выпадание орла при k-ом подбрасывании монетки. Событие An — то, что суммарное количество всех выпавших орлов — нечётно. (При этом n ≥ 3, потому что в случае n = 2 A1 и A2, очевидно, будут зависимыми событиями.) В таком случае подбрасывания монеток друг от друга не зависят, результат какого-то одного флипа тоже не зависит от чётности суммарного числа орлов (потому что Pr{Xk|Xn} = Pr{Xk}), так что эти события попарно независимы. Но при этом, если взять Pr{X1 ∩ X2 ∩ … ∩ Xn} = Pr{X1} · Pr{X2|X1} · … · Pr{Xn|X1 ∩ X2 ∩ … ∩ X{n−1}} последний множитель не равен Pr{Xn}, он равен либо нулю, либо единице в зависимости от чётности n, ведь мы уже знаем, что получили (n−1)-го орла. Так что это попарно независимые, но не совместно независимые события.

C.2-8
Ещё одна задачка на то, чтобы привести пример чего-то там:

> Give a simple but nontrivial example of two events that are not independent but are conditionally independent given a third event.


Не придумал, хотя тут довольно простой пример есть. Условно независимые события — это такие A и B, что Pr{A∩B|C} = Pr{A|C} · Pr{B|C}. Расширим пример про фальшивую и честную монетки из предыдущего поста: A, B — выпадание орла при подбрасывании выбранной монетки, C — событие выбора честной монетки (заместо фальшивой, которая со смещённым центром тяжести, которая всегда падает орлом вверх). Из-за того, что фальшивая монетка слишком оверпаверед, она очень сильно смещает вероятность получить сразу двух орлов: Pr{A} = Pr{B} = 3/4, Pr{A∩B} = 5/8, а ещё ломает независимость событий A и B: Pr{A|B} = Pr{A∩C|B} + Pr{A∩!C|B} = 1/6 + 2/3 = 5/6 ≠ Pr{A} (если выпал орёл в одном из бросков, то, вероятно, получим орла ещё раз).

*Warning! Autism intensifies!*

Я отдельно расписал подробно это, потому что очень сильно затупил при вычислении Pr{A|B}. Ну, я мог бы просто воспользоваться дефолтной формулой для условной вероятности и вычислить эти пять шестых в одно действие, но мне хотелось вообще не использовать эту формулу. Чтобы было понятнее, откуда берутся значения для Pr{A∩C|B} и Pr{A∩!C|B} можно расписать все исходы так, чтобы все они были равновероятны (0 — решка, 1 — орёл):

> 0 0 — Ч


> 0 1 — Ч


> 1 0 — Ч


> 1 1 — Ч


> 1 1 — Ф


> 1 1 — Ф


> 1 1 — Ф


> 1 1 — Ф



Первые четыре исхода относятся к тому, что может выдать честная монета, последние четыре — исходы для фальшивой, и их четыре одинаковые штуки для того, чтобы уравнять шансы для честной и фальшивой монет. В таком случае Pr{A∩C|B} = 1/6 (вычёркиваем все строки с нулём на втором месте, остаётся шесть строк, из них нам подходят только те, у которых на первом месте единица и буква «Ч», а таких только одна штука). Аналогично Pr{A∩!C|B} = 2/3.

На самом деле, я до сих пор чувствую, что что-то не до конца понимаю и можно как-то проще вычислить Pr{A∩C|B}, не прибегая ни к формуле, ни к вот такой ерунде с выписыванием всех вариантов (причём не просто всех вариантов, а ещё и чтобы они были равновероятны).

Короче, судя по всему, надо использовать формулу и не выпендриваться. На фоне этого я начинаю понимать, что означает Pr{B} в знаменателе формулы для условной вероятности. Вот рассмотрим ту же схему с равновероятными исходами, которую я выше написал. Пусть S — множество всех строк оттуда, B* — какое-то подмножество строк, соответствующее событию B, ABC* — подмножество S, соответствующее пересечению событий A, B и C (следовательно, ABC* ⊂ B*). Тогда Pr{A∩С|B} = |ABC*| / |B*| = (|ABC*| / |S|) / (|B*| / |S|) = Pr{A∩С∩B} / Pr{B}, так что у нас получается просто формула условной вероятности.

Блин, я хотел вообще про другое написать, а в итоге углубился в какие-то свои бредни, которые никому, кроме меня, понятны не будут даже, если я попытаюсь объяснить. Ну, главное — что я понял, откуда берётся формула условной вероятности. По-своему, но понял. Почти уверен, что есть в сто раз более простое объяснение всего этого, чем то, к чему я пришёл. Вообще, чем я занимаюсь? Теория вероятностей — это же нечто гораздо более обширное и сложное, чем формула условной вероятности. Почему я такой тупой, и второй день с ней разбираюсь?

. . .
.jpg230 Кб, 1000x1412
PoppyFanboy 322 299173
Чего-то опять так себе чувствую, поэтому сегодня опять только вот так. Проспал суммарно двенадцать часов (сначала восемь, а потом два раза по два часа: просыпался из-за телефона и почти сразу же проваливался в сон) и хочется ещё. Вообще встал с кровати только потому, что захотелось поесть. Вроде как много чего снилось, но сейчас не вспомню почти ничего, да и ничего интересного там не было. Единственное — помню, что мне снилось, как сижу рядом с какой-то собакой с её хозяином. На мой вопрос о породе собаки он ответил, что это «медовая собака», а ещё упомянул, что такая же собака была в том фильме (при этом у меня перед глазами сразу всплыл кусочек того фильма, где такая же собака за кем-то гналась). А сама собака была похожа на тёмно-рыжего нестриженого пуделя.

>>298853

. . .

C.2-5
Ещё в дополнение к штукам про условную вероятность вот такая забавная формула, которая работает для любых событий A1, …, An:

> Pr{A1 ∩ A2 ∩ … ∩ An} = Pr{A1} · Pr{A2|A1} · Pr{A3|A1 ∩ A2} · … · Pr{An | A1 ∩ … ∩ An}


Очень легко доказывается по индукции. Мне немного сложно думать о том, какой она имеет «физический» смысл (то есть смысл в терминах обывательского понимания вероятности), но выглядит красиво, да.

C.2-6

> Describe a procedure that takes as input two integers a and b such that 0 < a < b and, using fair coin flips, produces as output heads with probability a/b and tails with probability (b-a)/b.


Сначала вообще не понял, что от меня хотят, а потом понял, но не понял, как это можно реализовать, даже с учётом подсказки (>Represent a/b in binary). В общем, смысл в том, что с помощью последовательных подбрасываний монетки можно сгенерировать любое число из интервала (0, 1) (число в двоичном виде представляется с помощью последовательности нулей и единиц после запятой, каждый новый флип — новое число после запятой). Вероятность того, что случайно сгенерированное число попадёт в интервал (0, a/b) как раз и будет P = a/b, так процедуре достаточно просто возвращать «орла», если число попадает в интервал (0, a/b) и «решку» иначе. При этом достаточно генерировать число только до первой цифры, отличающейся от цифры на соответствующем месте в бинарном представлении a/b: на этот момент уже можно будет сказать, какое из чисел больше.

Тут, правда, есть одна проблема — что, если случайно сгенерируется a/b? (Допустим, что мы живём в идеальном мире и у нас нет ограничений на размер переменных.) Я не знаю, судя по всему, либо умереть в ожидании, пока процедура ищет отличающиеся цифры в двух одинаковых числах, либо где-то всё же остановиться в ущерб точности. Забавно, что вероятнее всего уже на втором подбрасывании случайное число, скорее всего, будет отличаться от заданного: ∑(n = 1…∞; n/2^n) = 2 (n — число подбрасываний умножается на 1/2^n — вероятность того, что на n-ном подбрасывании получится цифра, отличающаяся от цифры в заданном числе). Это вроде называется «математическим ожиданием», но я ещё не читал главу, где оно определяется, поэтому я назову ето «центром тяжести». То есть вариант с бесконечным числом подбрасываний очень-очень маловероятен.

C.2-7

> Show how to construct a set of n events that are pairwise independent but such that no subset of k > 2 of them is mutually independent.


Вот тут я очень сильно подвис. Вообще не было никаких идей. В каком-то решебнике был выглядящий интересно, но немного недоделанный пример такого вероятностного пространства:

> Select n random colinear points. Seeing any one of them, you know nothing new about the distribution of the others. However, given two of them, you know the line that the third point would need to lie on.


Это, конечно, выглядит довольно красиво, но что тут принять за событие? То, что точка A лежит на одной прямой вместе со всеми остальными точками? Или то, что точки A и B лежат на одной прямой? В обоих случаях я не знаю, как дальше продолжить решение. Возможно, я просто неправильно (не) понял, что имелось в виду.

А вот поинтереснее пример. Мы берём дайс с n^2 гранями и раскрашиваем его: (n−1) граней красим во всякие красивые яркие цвета, одну грань делаем в полосочку из всех использованных ярких цветов, оставшиеся грани закрашиваем чёрным. Получается, что вероятность того, что выпадет какой-то яркий цвет равна (n−1+1) / n^2 = 1/n (+1 потому что одна грань раскрашена во все яркие цвета). Вероятность того, что выпадут сразу два ярких цвета равна 1/n^2, так как у нас только одна разноцветная грань. То есть получается, что события выпадания ярких цветов попарно независимы (так как вероятности перемножаются). Но при этом вероятность того, что выпадут сразу три ярких цвета остаётся 1/n^2, тогда как для совместной независимости вероятность должна была быть 1/n^3.

И есть ещё пример, который не совсем подходит под условия задачи, но он мне тоже нравится. События A1, …, A{n−1} — выпадание орла при k-ом подбрасывании монетки. Событие An — то, что суммарное количество всех выпавших орлов — нечётно. (При этом n ≥ 3, потому что в случае n = 2 A1 и A2, очевидно, будут зависимыми событиями.) В таком случае подбрасывания монеток друг от друга не зависят, результат какого-то одного флипа тоже не зависит от чётности суммарного числа орлов (потому что Pr{Xk|Xn} = Pr{Xk}), так что эти события попарно независимы. Но при этом, если взять Pr{X1 ∩ X2 ∩ … ∩ Xn} = Pr{X1} · Pr{X2|X1} · … · Pr{Xn|X1 ∩ X2 ∩ … ∩ X{n−1}} последний множитель не равен Pr{Xn}, он равен либо нулю, либо единице в зависимости от чётности n, ведь мы уже знаем, что получили (n−1)-го орла. Так что это попарно независимые, но не совместно независимые события.

C.2-8
Ещё одна задачка на то, чтобы привести пример чего-то там:

> Give a simple but nontrivial example of two events that are not independent but are conditionally independent given a third event.


Не придумал, хотя тут довольно простой пример есть. Условно независимые события — это такие A и B, что Pr{A∩B|C} = Pr{A|C} · Pr{B|C}. Расширим пример про фальшивую и честную монетки из предыдущего поста: A, B — выпадание орла при подбрасывании выбранной монетки, C — событие выбора честной монетки (заместо фальшивой, которая со смещённым центром тяжести, которая всегда падает орлом вверх). Из-за того, что фальшивая монетка слишком оверпаверед, она очень сильно смещает вероятность получить сразу двух орлов: Pr{A} = Pr{B} = 3/4, Pr{A∩B} = 5/8, а ещё ломает независимость событий A и B: Pr{A|B} = Pr{A∩C|B} + Pr{A∩!C|B} = 1/6 + 2/3 = 5/6 ≠ Pr{A} (если выпал орёл в одном из бросков, то, вероятно, получим орла ещё раз).

*Warning! Autism intensifies!*

Я отдельно расписал подробно это, потому что очень сильно затупил при вычислении Pr{A|B}. Ну, я мог бы просто воспользоваться дефолтной формулой для условной вероятности и вычислить эти пять шестых в одно действие, но мне хотелось вообще не использовать эту формулу. Чтобы было понятнее, откуда берутся значения для Pr{A∩C|B} и Pr{A∩!C|B} можно расписать все исходы так, чтобы все они были равновероятны (0 — решка, 1 — орёл):

> 0 0 — Ч


> 0 1 — Ч


> 1 0 — Ч


> 1 1 — Ч


> 1 1 — Ф


> 1 1 — Ф


> 1 1 — Ф


> 1 1 — Ф



Первые четыре исхода относятся к тому, что может выдать честная монета, последние четыре — исходы для фальшивой, и их четыре одинаковые штуки для того, чтобы уравнять шансы для честной и фальшивой монет. В таком случае Pr{A∩C|B} = 1/6 (вычёркиваем все строки с нулём на втором месте, остаётся шесть строк, из них нам подходят только те, у которых на первом месте единица и буква «Ч», а таких только одна штука). Аналогично Pr{A∩!C|B} = 2/3.

На самом деле, я до сих пор чувствую, что что-то не до конца понимаю и можно как-то проще вычислить Pr{A∩C|B}, не прибегая ни к формуле, ни к вот такой ерунде с выписыванием всех вариантов (причём не просто всех вариантов, а ещё и чтобы они были равновероятны).

Короче, судя по всему, надо использовать формулу и не выпендриваться. На фоне этого я начинаю понимать, что означает Pr{B} в знаменателе формулы для условной вероятности. Вот рассмотрим ту же схему с равновероятными исходами, которую я выше написал. Пусть S — множество всех строк оттуда, B* — какое-то подмножество строк, соответствующее событию B, ABC* — подмножество S, соответствующее пересечению событий A, B и C (следовательно, ABC* ⊂ B*). Тогда Pr{A∩С|B} = |ABC*| / |B*| = (|ABC*| / |S|) / (|B*| / |S|) = Pr{A∩С∩B} / Pr{B}, так что у нас получается просто формула условной вероятности.

Блин, я хотел вообще про другое написать, а в итоге углубился в какие-то свои бредни, которые никому, кроме меня, понятны не будут даже, если я попытаюсь объяснить. Ну, главное — что я понял, откуда берётся формула условной вероятности. По-своему, но понял. Почти уверен, что есть в сто раз более простое объяснение всего этого, чем то, к чему я пришёл. Вообще, чем я занимаюсь? Теория вероятностей — это же нечто гораздо более обширное и сложное, чем формула условной вероятности. Почему я такой тупой, и второй день с ней разбираюсь?

. . .
323 299181
>>299173

>Почему я такой тупой, и второй день с ней разбираюсь?


Я и спустя много лет не понимаю до конца. Мне все время кажется, что вообще в теории вероятности есть какой-то серьезный изъян. Может с точки зрения чистой математики там все красиво и логично, но в реальности почти нет таких процессов, которые можно было бы случайными считать даже с погрешностью. Все время приходится искусственно подгонять результаты под теорию. Мне все время кажется, что в теории вероятности чего-то очень сильно не хватает, когда ее к реальной жизни применяют.
.jpg193 Кб, 900x1200
PoppyFanboy 324 299888
>>299181
Реальность не нужна.

После двенадцати часов сна тогда закономерно не мог заснуть всю ночь, удалось только под утро. И это было вроде позавчера ещё, но потом повторилось ещё дважды. Не знаю, как изменить режим, а ещё не уверен в том, что мне это надо: ненавижу просыпаться утром, особенно сейчас, когда так поздно светлеет.
И меня опять почти все обижают. Чуть до слёз не довели. На самом деле, довели. Тоже не знаю, что с этим делать.

https://youtu.be/CaoaMtW_wT4

>>299181
Так вышло, что тут относительно много всяких интересных задачек среди упражнений к этой главе. Вот особенно две последние.

. . .

C.2-9
Mounty Hall Problem
Участнику какого-то абстрактного шоу по телевизору предлагается выбрать одну из трёх коробок, в одной из которых находится супер-приз, а в остальных — пусто. После того, как игрок делает свой выбор, ведущий (который знает, в какой коробке находится приз) открывает одну из оставшихся пустых коробок. И после этого участнику шоу предлагается либо настоять на своём и открыть коробку, выбранную им изначально, либо сменить свой выбор. Вопрос состоит в том, во сколько раз уменьшатся или увеличатся шансы участника на выигрыш, если он сменит свой изначальный выбор.

Поначалу может показаться, что шансы выиграть приз одинаковые и не важно, какую из двух оставшихся коробок выберет игрок. Но на деле всё не совсем так. Рассмотрим все возможные расположения приза в трёх коробках (1 — коробка с призом). Так как все случаи выбора игроком какой-то коробки симметричны (можем переставить коробки так, как нам вздумается), будем считать, что игрок выбрал первую коробку. Также вычеркнем коробку, которую откроет ведущий.

> 0 0 1 (вероятность — 1/3)


> 0 1 0 (1/3)


> 1 0 0 (1/6)


> 1 0 0 (1/6)



И отсюда видно, что только в последних двух случаях с суммарной вероятностью 1/3 игрок получит приз, настояв на своём изначальном выборе, а во всех остальных он гарантированно побеждает, если меняет коробку. То есть шансы увеличиваются вдвое (с 1/3 до 2/3). Такой вот пример того, как интуитивное понимание вероятности может разниться с тем, как всё есть на самом деле.

Тот же самый результат можно получить более формальным способом, пользуясь формулой условной вероятности. Определим вот такие события:
- Ck — приз в k-ой коробке
- Hk — ведущий открывает k-ую коробку
- Xk — участник выбирает k-ую коробку
(Определили значительно больше событий, чем нам понадобится просто для красоты, чтобы у всех был индекс.)

Найдём, например, вероятность выиграть, не меняя свой выбор (опять же, в силу симметричности всех случаев выбора коробок участником и ведущим можем считать, что игрок выбрал первую коробку, а ведущий открыл вторую):

> Pr{C1|H2∩X1} = Pr{C1∩H2∩X1} / Pr{H2∩X1} = Pr{H2|C1∩X1} · Pr{C1∩X1} / Pr{H2∩X1} = Pr{H2|C1∩X1} · Pr{C1|X1} / Pr{H2|X1} = (1/2 · 1/3) / (1/2) = 1/3


Следовательно, автоматически Pr{C3|H2∩X1} = 1−1/3 = 2/3, так как в одной из двух оставшихся коробок гарантированно лежит приз.

А перекос вероятности выигрыша связан с тем, что ведущий открывает пустую коробку отнюдь не случайным образом: он выбирает коробку именно из оставшихся после выбора игрока. Если бы он выбирал любую пустую коробку, то вероятности бы уравнялись:

> Pr{C1|H2∩X1} = Pr{H2|C1∩X1} · Pr{C1|X1} / Pr{H2|X1} = (1/2 · 1/3) / (1/3) = 1/2


(Здесь Pr{H2|X1} = 1/3, так как выбор игрока не влияет на то, какую коробку откроет ведущий.)

C-2.10
Three Prisoners problem

> A prison warden has randomly picked one prisoner among three to go free. The other two will be executed. The guard knows which one will go free but is forbidden to give any prisoner information regarding his status. Let us call the prisoners X, Y , and Z. Prisoner X asks the guard privately which of Y or Z will be executed, arguing that since he already knows that at least one of them must die, the guard won’t be revealing any information about his own status. The guard tells X that Y is to be executed. Prisoner X feels happier now, since he figures that either he or prisoner Z will go free, which means that his probability of going free is now 1/2. Is he right, or are his chances still 1/3?



Сначала я подумал, что тут и правда X обхитрил смотрителя и теперь его шансы немного повысились, ведь теперь, раз Y точно казнят, то it is now between him and Z. Но тут вся загвоздка в постановке вопроса. «Кого из Y и Z казнят?» — смотритель волен ответить как угодно, если и того, и другого казнят, то шансы того, что он ответит «Y» равны один к двум. Заключённый X и так знал, что кого-то из оставшихся казнят: то, что ему назвали одно из имён ничего не меняет. Вот, если бы заключённый спросил: «Казнят ли Y?», — и смотритель бы ответил положительно, то Pr{X|!Y} = Pr{X∩!Y}/Pr{!Y} = (1/3) / (2/3) = 1/2 — вероятность выжить для X и правда бы увеличилась.

Можно доказать это более формально. Пусть X, Y и Z — события, соответствующие тому, что помилуют X, Y и Z. А «y» — то, что смотритель говорит X, что Y казнят. В таком случае нам надо найти вероятность Pr{X|y}.

> Pr{y} = Pr{y∩X} + Pr{y∩Y} + Pr{y∩Z} = Pr{y|X} · P{X} + Pr{y|Y} · P(Y) + Pr{y|Z} · P(Z) = (1/2) · (1/3) + 0 · (1/3) + 1 · (1/3) = 1/2 — вероятность того, что смотритель скажет, что Y казнят.


> Pr{X|y} = Pr{y|X} · Pr{X} / Pr{y} = (1/6) / (1/2) = 1/3 — то есть шансы выжить для X остались те же.



А вот, если X расскажет Z о том, что Y собираются казнить, то шансы Z на то, чтобы выжить, подлетят аж до 2/3, так как Pr{X|y} + Pr{Z|y} = 1 (кто-то из них обязательно должен остаться живым). Если интуитивно, то всё потому, что смотритель назвал имя Y и при этом условии очень маловероятно, что помилуют X, так что скорее уж отпустят Y. Это видно отсюда:

> X помилуют и смотритель сказал, что казнят Y (вероятность — 1/6)


> X помилуют и смотритель сказал, что казнят Z (1/6)


> Y помилуют и смотритель сказал, что казнят Z (1/3)


> Z помилуют и смотритель сказал, что казнят Y (1/3)


(У первых двух случаев вероятность 1/6, так как в случае, если отпускают X, смотритель с равной вероятностью называет имена Y и Z.)

Если честно, я уже сам немного запутался, но чуть лучше понял, как расписывать вот такие схемы с перечислением всех возможных исходов: тут достаточно указать вероятность для каждого исхода, не надо выписывать некоторые исходы повторно, чтобы получилось так, чтобы все строки имели одинаковую вероятность, как я делал выше (к тому же это немного путает). Вообще, я так понимаю, в первую очередь надо опираться на формулы, потому что иначе попытки скипнуть какие-то шаги в решении задачи, основанные на интуиции, могут привести к неправильному ответу.

CLRS — Appendix C: Discrete Random Variables
Унылейшая глава, про случайные величины (discrete random variables), математическое ожидание (expected value) и дисперсию (variance). Тем не менее я обо всём этом только где-то слышал и никогда не разбирался нормально, хотя это вроде как встречается много, где.

В общем, всё начинается с определения случайной величины. Как оказалось, это, внезапно, вещественнозначная функция, определённая на конечном или счётно-бесконечном пространстве элементарных событий S. При этом S может быть и несчётно-бесконечным, но, я так понимаю, там уже потребуется теория меры (измеримые множества и функции, интеграл Лебега, вот это вот всё) для того, чтобы аккуратно доказать все нужные штуки. Но я обойдусь и без этого, мне особо не важно. Так вот, случайная величина — это просто функция и определена она может быть вообще как угодно: например, можно взять вероятностное пространство, получающееся при подбрасывании двух различимых дайсов и принять за значения случайной величины сумму выпавших значений на дайсах. Обозначается случайная величина обычно большой буквой «X» (ну, или там «Y» или «Z»), из-за чего я до этого всё время думал, что это просто переменная, а не функция.

А потом на том же множестве S задаются вот такие попарно несовместные события «X=x» := {s ∈ S : X(s) = x}. То есть это множество тех элементарных событий, которым сопоставляется значение случайной величины x. Если посчитать вероятность такого события (Pr{X=x}), то получим то, с какой вероятностью выпадет данная случайная величина, а функция от x, сопоставляющая каждому значению случайной величины X её вероятность (f(x) := Pr{X=x}), называется плотностью вероятности (probability density function). Вот, к примеру, возвращаясь к тому примеру с дайсами, функция f(x) отражала бы, какова вероятность получить x очков за один бросок. При этом, очевидно, сумма f(x) по всем значениям X всегда равна единице.

Аналогично определяется joint probability density function: f(x, y) := Pr{X=x and Y=y}. То есть подсчитывается вероятность того, чтобы выпали одновременно два каких-то случайных значения. Тут мне сложнее придумать пример, но, например, можно немного видоизменить функцию: f(x, y) = Pr{X≥x and Y=y} и X оставить суммарным количеством очков, а Y пусть отображает событие в единицу, если выпало два одинаковых значения, и в ноль — иначе. Тогда f(3, 1) будет вероятностью того, что выпал дубль и это не 1-1. Ну, и эта штука, расширяется до скольки угодно переменных.

. . .
.jpg193 Кб, 900x1200
PoppyFanboy 324 299888
>>299181
Реальность не нужна.

После двенадцати часов сна тогда закономерно не мог заснуть всю ночь, удалось только под утро. И это было вроде позавчера ещё, но потом повторилось ещё дважды. Не знаю, как изменить режим, а ещё не уверен в том, что мне это надо: ненавижу просыпаться утром, особенно сейчас, когда так поздно светлеет.
И меня опять почти все обижают. Чуть до слёз не довели. На самом деле, довели. Тоже не знаю, что с этим делать.

https://youtu.be/CaoaMtW_wT4

>>299181
Так вышло, что тут относительно много всяких интересных задачек среди упражнений к этой главе. Вот особенно две последние.

. . .

C.2-9
Mounty Hall Problem
Участнику какого-то абстрактного шоу по телевизору предлагается выбрать одну из трёх коробок, в одной из которых находится супер-приз, а в остальных — пусто. После того, как игрок делает свой выбор, ведущий (который знает, в какой коробке находится приз) открывает одну из оставшихся пустых коробок. И после этого участнику шоу предлагается либо настоять на своём и открыть коробку, выбранную им изначально, либо сменить свой выбор. Вопрос состоит в том, во сколько раз уменьшатся или увеличатся шансы участника на выигрыш, если он сменит свой изначальный выбор.

Поначалу может показаться, что шансы выиграть приз одинаковые и не важно, какую из двух оставшихся коробок выберет игрок. Но на деле всё не совсем так. Рассмотрим все возможные расположения приза в трёх коробках (1 — коробка с призом). Так как все случаи выбора игроком какой-то коробки симметричны (можем переставить коробки так, как нам вздумается), будем считать, что игрок выбрал первую коробку. Также вычеркнем коробку, которую откроет ведущий.

> 0 0 1 (вероятность — 1/3)


> 0 1 0 (1/3)


> 1 0 0 (1/6)


> 1 0 0 (1/6)



И отсюда видно, что только в последних двух случаях с суммарной вероятностью 1/3 игрок получит приз, настояв на своём изначальном выборе, а во всех остальных он гарантированно побеждает, если меняет коробку. То есть шансы увеличиваются вдвое (с 1/3 до 2/3). Такой вот пример того, как интуитивное понимание вероятности может разниться с тем, как всё есть на самом деле.

Тот же самый результат можно получить более формальным способом, пользуясь формулой условной вероятности. Определим вот такие события:
- Ck — приз в k-ой коробке
- Hk — ведущий открывает k-ую коробку
- Xk — участник выбирает k-ую коробку
(Определили значительно больше событий, чем нам понадобится просто для красоты, чтобы у всех был индекс.)

Найдём, например, вероятность выиграть, не меняя свой выбор (опять же, в силу симметричности всех случаев выбора коробок участником и ведущим можем считать, что игрок выбрал первую коробку, а ведущий открыл вторую):

> Pr{C1|H2∩X1} = Pr{C1∩H2∩X1} / Pr{H2∩X1} = Pr{H2|C1∩X1} · Pr{C1∩X1} / Pr{H2∩X1} = Pr{H2|C1∩X1} · Pr{C1|X1} / Pr{H2|X1} = (1/2 · 1/3) / (1/2) = 1/3


Следовательно, автоматически Pr{C3|H2∩X1} = 1−1/3 = 2/3, так как в одной из двух оставшихся коробок гарантированно лежит приз.

А перекос вероятности выигрыша связан с тем, что ведущий открывает пустую коробку отнюдь не случайным образом: он выбирает коробку именно из оставшихся после выбора игрока. Если бы он выбирал любую пустую коробку, то вероятности бы уравнялись:

> Pr{C1|H2∩X1} = Pr{H2|C1∩X1} · Pr{C1|X1} / Pr{H2|X1} = (1/2 · 1/3) / (1/3) = 1/2


(Здесь Pr{H2|X1} = 1/3, так как выбор игрока не влияет на то, какую коробку откроет ведущий.)

C-2.10
Three Prisoners problem

> A prison warden has randomly picked one prisoner among three to go free. The other two will be executed. The guard knows which one will go free but is forbidden to give any prisoner information regarding his status. Let us call the prisoners X, Y , and Z. Prisoner X asks the guard privately which of Y or Z will be executed, arguing that since he already knows that at least one of them must die, the guard won’t be revealing any information about his own status. The guard tells X that Y is to be executed. Prisoner X feels happier now, since he figures that either he or prisoner Z will go free, which means that his probability of going free is now 1/2. Is he right, or are his chances still 1/3?



Сначала я подумал, что тут и правда X обхитрил смотрителя и теперь его шансы немного повысились, ведь теперь, раз Y точно казнят, то it is now between him and Z. Но тут вся загвоздка в постановке вопроса. «Кого из Y и Z казнят?» — смотритель волен ответить как угодно, если и того, и другого казнят, то шансы того, что он ответит «Y» равны один к двум. Заключённый X и так знал, что кого-то из оставшихся казнят: то, что ему назвали одно из имён ничего не меняет. Вот, если бы заключённый спросил: «Казнят ли Y?», — и смотритель бы ответил положительно, то Pr{X|!Y} = Pr{X∩!Y}/Pr{!Y} = (1/3) / (2/3) = 1/2 — вероятность выжить для X и правда бы увеличилась.

Можно доказать это более формально. Пусть X, Y и Z — события, соответствующие тому, что помилуют X, Y и Z. А «y» — то, что смотритель говорит X, что Y казнят. В таком случае нам надо найти вероятность Pr{X|y}.

> Pr{y} = Pr{y∩X} + Pr{y∩Y} + Pr{y∩Z} = Pr{y|X} · P{X} + Pr{y|Y} · P(Y) + Pr{y|Z} · P(Z) = (1/2) · (1/3) + 0 · (1/3) + 1 · (1/3) = 1/2 — вероятность того, что смотритель скажет, что Y казнят.


> Pr{X|y} = Pr{y|X} · Pr{X} / Pr{y} = (1/6) / (1/2) = 1/3 — то есть шансы выжить для X остались те же.



А вот, если X расскажет Z о том, что Y собираются казнить, то шансы Z на то, чтобы выжить, подлетят аж до 2/3, так как Pr{X|y} + Pr{Z|y} = 1 (кто-то из них обязательно должен остаться живым). Если интуитивно, то всё потому, что смотритель назвал имя Y и при этом условии очень маловероятно, что помилуют X, так что скорее уж отпустят Y. Это видно отсюда:

> X помилуют и смотритель сказал, что казнят Y (вероятность — 1/6)


> X помилуют и смотритель сказал, что казнят Z (1/6)


> Y помилуют и смотритель сказал, что казнят Z (1/3)


> Z помилуют и смотритель сказал, что казнят Y (1/3)


(У первых двух случаев вероятность 1/6, так как в случае, если отпускают X, смотритель с равной вероятностью называет имена Y и Z.)

Если честно, я уже сам немного запутался, но чуть лучше понял, как расписывать вот такие схемы с перечислением всех возможных исходов: тут достаточно указать вероятность для каждого исхода, не надо выписывать некоторые исходы повторно, чтобы получилось так, чтобы все строки имели одинаковую вероятность, как я делал выше (к тому же это немного путает). Вообще, я так понимаю, в первую очередь надо опираться на формулы, потому что иначе попытки скипнуть какие-то шаги в решении задачи, основанные на интуиции, могут привести к неправильному ответу.

CLRS — Appendix C: Discrete Random Variables
Унылейшая глава, про случайные величины (discrete random variables), математическое ожидание (expected value) и дисперсию (variance). Тем не менее я обо всём этом только где-то слышал и никогда не разбирался нормально, хотя это вроде как встречается много, где.

В общем, всё начинается с определения случайной величины. Как оказалось, это, внезапно, вещественнозначная функция, определённая на конечном или счётно-бесконечном пространстве элементарных событий S. При этом S может быть и несчётно-бесконечным, но, я так понимаю, там уже потребуется теория меры (измеримые множества и функции, интеграл Лебега, вот это вот всё) для того, чтобы аккуратно доказать все нужные штуки. Но я обойдусь и без этого, мне особо не важно. Так вот, случайная величина — это просто функция и определена она может быть вообще как угодно: например, можно взять вероятностное пространство, получающееся при подбрасывании двух различимых дайсов и принять за значения случайной величины сумму выпавших значений на дайсах. Обозначается случайная величина обычно большой буквой «X» (ну, или там «Y» или «Z»), из-за чего я до этого всё время думал, что это просто переменная, а не функция.

А потом на том же множестве S задаются вот такие попарно несовместные события «X=x» := {s ∈ S : X(s) = x}. То есть это множество тех элементарных событий, которым сопоставляется значение случайной величины x. Если посчитать вероятность такого события (Pr{X=x}), то получим то, с какой вероятностью выпадет данная случайная величина, а функция от x, сопоставляющая каждому значению случайной величины X её вероятность (f(x) := Pr{X=x}), называется плотностью вероятности (probability density function). Вот, к примеру, возвращаясь к тому примеру с дайсами, функция f(x) отражала бы, какова вероятность получить x очков за один бросок. При этом, очевидно, сумма f(x) по всем значениям X всегда равна единице.

Аналогично определяется joint probability density function: f(x, y) := Pr{X=x and Y=y}. То есть подсчитывается вероятность того, чтобы выпали одновременно два каких-то случайных значения. Тут мне сложнее придумать пример, но, например, можно немного видоизменить функцию: f(x, y) = Pr{X≥x and Y=y} и X оставить суммарным количеством очков, а Y пусть отображает событие в единицу, если выпало два одинаковых значения, и в ноль — иначе. Тогда f(3, 1) будет вероятностью того, что выпал дубль и это не 1-1. Ну, и эта штука, расширяется до скольки угодно переменных.

. . .
Ююко !hhoO7CxTZY 325 299892
>>299181
В алгоритмическом трейдинге применяется, как и теория игр.

>>299888

>Реальность не нужна.



Вот тут - да. Но от нее трудно уйти
.jpg1,6 Мб, 2508x3460
PoppyFanboy 326 300491
>>299892
Привет (・ ・)ノ☆

>>299888

. . .

Ну, определили probability density function для случайной величины X, и тогда через неё можно определить независимость случайных величин X и Y: для независимости нужно, чтобы для любых x и y выполнялось равенство Pr{X=x and Y=y} = Pr{X=x} · Pr{Y=y}. И точно так же, как и для событий, можно определить Pr{X=x|Y=y}.

Математическое ожидание (или чуть лучше звучащее expected value) определяется просто как ∑(x · Pr{X=x}) — такая сумма, которая проходится по всем возможным значениям случайной величины. Что интересно, эта штука линейна по даже не обязательно независимым случайным величинам: E[X + Y] = E[X] + E[Y]. Это легко следует из вот этого равенства: ∑x∈XPr{X=x and Y=y} = Pr{Y=y}. И вроде как оно ещё и счётно-аддитивно и линейно, но тут я уже не знаю точно, как это доказывать. А вот, чтобы выполнялось E[X1 · … · Xn] = E[X1] · … · E[Xn], в отличие от аддитивности тут уже нужна совместная независимость всех этих случайных величин.

В одном из предыдущих заданий (>>299173 C-2.6) надо было посчитать вот такую сумму

> ∑(n = 1…∞; n · Pr{X=n}), Pr{X=n} = 1/2^n


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

> 1/2 + 1/4 + 1/8 + …


> + 1/4 + 1/8 + ...


> + 1/8 + ...


> и так далее...


Расписываем сумму вот таким треугольником (у нас в сумме один раз встречается 1/2, два раза 1/4, три раза 1/8 и так далее), а потом суммируем её по строкам: в первой строке получается 1 (ну, тут просто на глаз видно), во второй: 1 − 1/2, в третьей: 1 − 1/2 − 1/4 и дальше аналогично. И теперь остаётся просуммировать все строки: 1 + 1/2 + 1/4 + … = 2.

Но этот же результат можно было получить немного по-другому и в немного более общем виде:

> E[X] = ∑n · Pr{X=n} = ∑n · (Pr{X ≥ n} − Pr{X ≥ n + 1}) = [Pr{X ≥ n} n раз прибавляется и (n − 1) раз вычитается] = ∑Pr{X ≥ n}


То есть в предыдущем примере можно было сразу перейти к E[X] = ∑(1/2^n + 1/2^(n + 1) + …) = 2 и не пытаться это вывести каким-то странным выписыванием чисел в каком-то странном порядке.
Но, на са-амом, деле, это тоже полнейшая ерунда, которая не делает ничего проще. Тут достаточно продифференцировать правую и левую части равенства ∑q^n = 1/(1 − q), где |q| < 1 и получить вот тот ряд. И всё, да. Кстати, аналогично можно найти сумму ряда ∑n^2 · q^n.

Ещё узнал про существование выпуклых функций (convex function). (Они, кстати, вроде упоминались у нас где-то то ли на матане, то ли на дифференциальных уравнениях.) По сути это функция, у которой, если взять любые две точки на её графике и провести отрезок между ними, то отрезок будет лежать над графиком этой функции. Для них ещё есть вот такое интересное неравенство (Jensen’s inequality): f(∑qk · xk) ≤ ∑qk · f(xk), где xk — конечное число любых точек на графике, а q1, …, qn — набор положительных чисел, которые в сумме дают единицу. Доказывается просто по индукции (там надо у двух последних слагаемых вынести (q{n−1} − qn), чтобы перейти по индукционному предположению). И получается, что это перекликается с мат ожиданием: f(E[X]) ≤ E[f(X)], если f — выпуклая. Не знаю, какой это имеет смысл.

***

Дальше про дисперсию (variance). В общем, это просто штука, которая показывает отклонение случайной величины от своего среднего значения (мат ожидания). Что интересно, у разных случайных величин могут быть одинаковые мат ожидания, но разные дисперсии. Для примера можно представить себе два разные расположения двух одинаковых грузов на палочке: в первом случае грузы подвешены за концы палки, а во втором — ближе к середине. В обоих случаях центр массы палки будет расположен посередине, но при этом в первом случае грузы в первом случае подвешены дальше от центра, чем во втором. То есть дисперсии различаются.

Собственно, определяется довольно логичным образом: Var[X] = E[(X − E[X])^2]. Почему квадрат — не знаю, наверное, чтобы получилось положительное число. Меня всегда путал вот этот «X» внутри «E[X]»: я думал, что это аргумент, но, на самом деле, E[X] — это уже число, поэтому можно делать всякие странно выглядящие вещи вроде: E[E[X] · X] = E[X]^2 в силу линейности E. Благодаря приятным свойствам мат ожидания определение дисперсии можно преобразовать к более простому виду: Var[X] = E[X^2] - E[X]^2, смысл которого, правда, для меня немного теряется. И, кстати, вот тут видно, что E[X^2] и правда больше, чем E[X]^2, так как f(x) = x^2 — на глаз вроде выпуклая функция и можно применить то неравенство.

У дисперсии тоже есть ряд свойств, которые относительно просто выводятся из свойств E[X]:
- Var[aX] = a^2Var[X]
- Var[X + Y] = Var[X] + Var[Y], где X и Y должны быть независимыми (потому что там в процессе приходится применять свойство E[X · Y] = E[X] · E[Y]).
- И аддитивность для конечного числа случайных величин (что интересно, там требуется только парная независимость случайных величин). Доказывается просто по индукции.

И ещё определяется стандартное (среднеквадратическое) отклонение (standart deviation) просто как корень из дисперсии. Наверное, чтобы просто убрать тот квадрат, который появился в определении дисперсии и, чтобы она была выражена в тех же единицах, в которых выражаются значения случайной величины. Но, в любом случае, я так понимаю, само значение стандартного отклонения как характеристики каких-то конкретных данных не то чтобы имеет конкретный смысл, потому что это просто мера того, насколько сильно значения отклоняются от среднего. А вот, если рассматривать несколько наборов данных, то их дисперсии уже можно сравнить и получить из этого какую-то информацию.

CLRS — Appendix C: Discrete Random Variables (Exercises)
Упражнения тут были не только скучные и неинтересные, но ещё и необычно простые: там в основном просто на использование формул. Единственное, что вызвало сложности — упражнение, где надо было доказать, что, если независимы случайные величины X и Y, то из этого следует, что независимы и f(X) и g(Y). Тут вот как раз вроде требуется теория меры для доказательства, но мне достаточно и крайне неаккуратного доказательства по типу «ну, если будь f(X) и g(Y) зависимы, то, зная, например что-то про g(Y) (а, следовательно, и про Y) можно было бы сказать что-то и про f(X) (а, следовательно, и про X), поэтому противоречие с независимостью X и Y». Получается такая транзитивность.

Ну, и ещё было чуть-чуть не очевидное свойство дисперсии: Var[X] = E[X] · E[1 − X], если X отображается только в ноль или единицу. Это следует просто из того, что в таком случае E[X^2] = E[X] (1^2 = 1, 0^2 = 0).

CLRS — Appendix C: The Geometric and Binomial Distributions
Тут я, если честно, немного уже теряю практический смысл всего этого. Наверное, эти два распределения просто часто встречаются на практике и довольно логично рассмотреть их отдельно в общем виде.

В самом начале там определяется последовательность испытаний Бернулли как последовательность совместно независимых экспериментов, оканчивающихся либо успехом с вероятностью p, либо неудачей с вероятностью q, при этом все эксперименты имеют одинаковые вероятности успеха. Вот, и у нас получается вот такое вероятностное пространство последовательностей испытаний Бернулли длин n.

Если мы хотим получить вероятность того, какова вероятность получить успех после (n−1) неудач, то достаточно посчитать Pr{X=n} = q^(n−1) · p. Такое распределение называется геометрическим. E[X] = 1/p — чтобы добиться одного «успеха» в среднем приходится провести 1/p испытаний (что логично, так как шансы получить успех — один к 1/p). Var[X] = q/p^2. (Это всё просто подсчитывается по формулам.)

Pr{X} = (n | k) · p^k · q^(n−k) =: b(k; n, p) — вероятность получить k успехов за n испытаний. Это биномиальное распределение. На графике оно выглядит как такая горочка. E[X] = np (можно даже не вычислять, очевидно просто по смыслу). Интересный способ вычисления дисперсии: Var[X] = ∑Var[Xk] = ∑(E[Xk^2] − E[Xk]^2) = ∑(E[Xk] − E[Xk]^2) = ∑(p − p^2) = ∑(pq) = npq. Xk тут случайная величина отображающаяся в ноль, если исход k-ого испытания — неудача, в единицу — если успех.

Можно ещё показать, для какого числа успехов вероятность их получить будет максимальной: если посчитать соотношение b(k; n, p) / b(k − 1; n, p), то оно окажется равным [p(n + 1) − k] / [kq] + 1, то есть всё решает знак числителя первого слагаемого. Получается, если p(n+1) — нецелое, то максимальное значение достигается где-то при k из интервала (np − q, p(n + 1)). Если же оно целое, то максимум будет в двух (если 0 < p < 1) точках: k = np − q и k = p(n + 1).

Это была четвёртая глава аппендикса из 5, ещё чуть-чуть.
.jpg1,6 Мб, 2508x3460
PoppyFanboy 326 300491
>>299892
Привет (・ ・)ノ☆

>>299888

. . .

Ну, определили probability density function для случайной величины X, и тогда через неё можно определить независимость случайных величин X и Y: для независимости нужно, чтобы для любых x и y выполнялось равенство Pr{X=x and Y=y} = Pr{X=x} · Pr{Y=y}. И точно так же, как и для событий, можно определить Pr{X=x|Y=y}.

Математическое ожидание (или чуть лучше звучащее expected value) определяется просто как ∑(x · Pr{X=x}) — такая сумма, которая проходится по всем возможным значениям случайной величины. Что интересно, эта штука линейна по даже не обязательно независимым случайным величинам: E[X + Y] = E[X] + E[Y]. Это легко следует из вот этого равенства: ∑x∈XPr{X=x and Y=y} = Pr{Y=y}. И вроде как оно ещё и счётно-аддитивно и линейно, но тут я уже не знаю точно, как это доказывать. А вот, чтобы выполнялось E[X1 · … · Xn] = E[X1] · … · E[Xn], в отличие от аддитивности тут уже нужна совместная независимость всех этих случайных величин.

В одном из предыдущих заданий (>>299173 C-2.6) надо было посчитать вот такую сумму

> ∑(n = 1…∞; n · Pr{X=n}), Pr{X=n} = 1/2^n


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

> 1/2 + 1/4 + 1/8 + …


> + 1/4 + 1/8 + ...


> + 1/8 + ...


> и так далее...


Расписываем сумму вот таким треугольником (у нас в сумме один раз встречается 1/2, два раза 1/4, три раза 1/8 и так далее), а потом суммируем её по строкам: в первой строке получается 1 (ну, тут просто на глаз видно), во второй: 1 − 1/2, в третьей: 1 − 1/2 − 1/4 и дальше аналогично. И теперь остаётся просуммировать все строки: 1 + 1/2 + 1/4 + … = 2.

Но этот же результат можно было получить немного по-другому и в немного более общем виде:

> E[X] = ∑n · Pr{X=n} = ∑n · (Pr{X ≥ n} − Pr{X ≥ n + 1}) = [Pr{X ≥ n} n раз прибавляется и (n − 1) раз вычитается] = ∑Pr{X ≥ n}


То есть в предыдущем примере можно было сразу перейти к E[X] = ∑(1/2^n + 1/2^(n + 1) + …) = 2 и не пытаться это вывести каким-то странным выписыванием чисел в каком-то странном порядке.
Но, на са-амом, деле, это тоже полнейшая ерунда, которая не делает ничего проще. Тут достаточно продифференцировать правую и левую части равенства ∑q^n = 1/(1 − q), где |q| < 1 и получить вот тот ряд. И всё, да. Кстати, аналогично можно найти сумму ряда ∑n^2 · q^n.

Ещё узнал про существование выпуклых функций (convex function). (Они, кстати, вроде упоминались у нас где-то то ли на матане, то ли на дифференциальных уравнениях.) По сути это функция, у которой, если взять любые две точки на её графике и провести отрезок между ними, то отрезок будет лежать над графиком этой функции. Для них ещё есть вот такое интересное неравенство (Jensen’s inequality): f(∑qk · xk) ≤ ∑qk · f(xk), где xk — конечное число любых точек на графике, а q1, …, qn — набор положительных чисел, которые в сумме дают единицу. Доказывается просто по индукции (там надо у двух последних слагаемых вынести (q{n−1} − qn), чтобы перейти по индукционному предположению). И получается, что это перекликается с мат ожиданием: f(E[X]) ≤ E[f(X)], если f — выпуклая. Не знаю, какой это имеет смысл.

***

Дальше про дисперсию (variance). В общем, это просто штука, которая показывает отклонение случайной величины от своего среднего значения (мат ожидания). Что интересно, у разных случайных величин могут быть одинаковые мат ожидания, но разные дисперсии. Для примера можно представить себе два разные расположения двух одинаковых грузов на палочке: в первом случае грузы подвешены за концы палки, а во втором — ближе к середине. В обоих случаях центр массы палки будет расположен посередине, но при этом в первом случае грузы в первом случае подвешены дальше от центра, чем во втором. То есть дисперсии различаются.

Собственно, определяется довольно логичным образом: Var[X] = E[(X − E[X])^2]. Почему квадрат — не знаю, наверное, чтобы получилось положительное число. Меня всегда путал вот этот «X» внутри «E[X]»: я думал, что это аргумент, но, на самом деле, E[X] — это уже число, поэтому можно делать всякие странно выглядящие вещи вроде: E[E[X] · X] = E[X]^2 в силу линейности E. Благодаря приятным свойствам мат ожидания определение дисперсии можно преобразовать к более простому виду: Var[X] = E[X^2] - E[X]^2, смысл которого, правда, для меня немного теряется. И, кстати, вот тут видно, что E[X^2] и правда больше, чем E[X]^2, так как f(x) = x^2 — на глаз вроде выпуклая функция и можно применить то неравенство.

У дисперсии тоже есть ряд свойств, которые относительно просто выводятся из свойств E[X]:
- Var[aX] = a^2Var[X]
- Var[X + Y] = Var[X] + Var[Y], где X и Y должны быть независимыми (потому что там в процессе приходится применять свойство E[X · Y] = E[X] · E[Y]).
- И аддитивность для конечного числа случайных величин (что интересно, там требуется только парная независимость случайных величин). Доказывается просто по индукции.

И ещё определяется стандартное (среднеквадратическое) отклонение (standart deviation) просто как корень из дисперсии. Наверное, чтобы просто убрать тот квадрат, который появился в определении дисперсии и, чтобы она была выражена в тех же единицах, в которых выражаются значения случайной величины. Но, в любом случае, я так понимаю, само значение стандартного отклонения как характеристики каких-то конкретных данных не то чтобы имеет конкретный смысл, потому что это просто мера того, насколько сильно значения отклоняются от среднего. А вот, если рассматривать несколько наборов данных, то их дисперсии уже можно сравнить и получить из этого какую-то информацию.

CLRS — Appendix C: Discrete Random Variables (Exercises)
Упражнения тут были не только скучные и неинтересные, но ещё и необычно простые: там в основном просто на использование формул. Единственное, что вызвало сложности — упражнение, где надо было доказать, что, если независимы случайные величины X и Y, то из этого следует, что независимы и f(X) и g(Y). Тут вот как раз вроде требуется теория меры для доказательства, но мне достаточно и крайне неаккуратного доказательства по типу «ну, если будь f(X) и g(Y) зависимы, то, зная, например что-то про g(Y) (а, следовательно, и про Y) можно было бы сказать что-то и про f(X) (а, следовательно, и про X), поэтому противоречие с независимостью X и Y». Получается такая транзитивность.

Ну, и ещё было чуть-чуть не очевидное свойство дисперсии: Var[X] = E[X] · E[1 − X], если X отображается только в ноль или единицу. Это следует просто из того, что в таком случае E[X^2] = E[X] (1^2 = 1, 0^2 = 0).

CLRS — Appendix C: The Geometric and Binomial Distributions
Тут я, если честно, немного уже теряю практический смысл всего этого. Наверное, эти два распределения просто часто встречаются на практике и довольно логично рассмотреть их отдельно в общем виде.

В самом начале там определяется последовательность испытаний Бернулли как последовательность совместно независимых экспериментов, оканчивающихся либо успехом с вероятностью p, либо неудачей с вероятностью q, при этом все эксперименты имеют одинаковые вероятности успеха. Вот, и у нас получается вот такое вероятностное пространство последовательностей испытаний Бернулли длин n.

Если мы хотим получить вероятность того, какова вероятность получить успех после (n−1) неудач, то достаточно посчитать Pr{X=n} = q^(n−1) · p. Такое распределение называется геометрическим. E[X] = 1/p — чтобы добиться одного «успеха» в среднем приходится провести 1/p испытаний (что логично, так как шансы получить успех — один к 1/p). Var[X] = q/p^2. (Это всё просто подсчитывается по формулам.)

Pr{X} = (n | k) · p^k · q^(n−k) =: b(k; n, p) — вероятность получить k успехов за n испытаний. Это биномиальное распределение. На графике оно выглядит как такая горочка. E[X] = np (можно даже не вычислять, очевидно просто по смыслу). Интересный способ вычисления дисперсии: Var[X] = ∑Var[Xk] = ∑(E[Xk^2] − E[Xk]^2) = ∑(E[Xk] − E[Xk]^2) = ∑(p − p^2) = ∑(pq) = npq. Xk тут случайная величина отображающаяся в ноль, если исход k-ого испытания — неудача, в единицу — если успех.

Можно ещё показать, для какого числа успехов вероятность их получить будет максимальной: если посчитать соотношение b(k; n, p) / b(k − 1; n, p), то оно окажется равным [p(n + 1) − k] / [kq] + 1, то есть всё решает знак числителя первого слагаемого. Получается, если p(n+1) — нецелое, то максимальное значение достигается где-то при k из интервала (np − q, p(n + 1)). Если же оно целое, то максимум будет в двух (если 0 < p < 1) точках: k = np − q и k = p(n + 1).

Это была четвёртая глава аппендикса из 5, ещё чуть-чуть.
.jpg332 Кб, 2000x1270
PoppyFanboy 327 300836
Какой-то странный день. Меня сначала опять угораздило пролежать в выключенном состоянии часов одиннадцать как минимум, а потом я ещё полдня ходил и не понимал, что вокруг происходит.

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

Совершенно случайно наткнулся на это:
https://youtu.be/m5H-YlcMSbc
Надо будет потом ещё послушать что-нибудь у них.

>>300491
Чего-то я конкретно уже устал от этой части книжки про вероятность, комбинаторику и прочую ерунду. Я как-то думал, что тут будет значительно меньше всего, но раз уж начал и прошёл уже больше половины, хочется всё-таки закончить.

CLRS — Appendix C: The Geometric and Binomial Distributions (Exercises)

Ну, тут, как и среди упражнений предыдущей главы про случайные величины, дисперсию и математическое ожидание, было довольно мало всего интересного и все упражнения были в основном про доказательство каких-то простых и не очень с виду полезных штук.

C.4-1
Тут зачем-то впихнули упражнение на то, чтобы доказать явно, что функция геометрического распределения Pr{X=n} = q^(n−1)p удовлетворяет той аксиоме вероятностного распределения, которая Pr{S} = 1. Ну, это как бы и так понятно, даже без каких-то конкретных вычислений: если X отображает всё S в множество натуральных чисел, то, если мы возьмём обратную функцию от N, мы ведь и получим это самое S, какой бы ни была X. Что-то странное.

C.4-4

> Показать, что максимум биномиального распределения по k равен приблизительно равен 1/√(2πnpq).


Тут просто используется формула Стирлинга для факториала (что сразу видно по вылезшему откуда-то Пи в условии задачи), а потом вместо k можно подставить np, потому что это мат ожидание, и получить ответ. Не знаю, насколько вообще это точная оценка и где её можно использовать при условии, что это и не верхняя, и не нижняя оценка, но выглядит как минимум красиво.

C.4-6
А вот эта интересная:

> Вася и Петя каждый подбрасывает монетку n раз. Найдите вероятность того, что у них у обоих суммарно выпадет одинаковое количество орлов.


Тут, чтобы всё максимально упростить, надо немного схитрить, и для Васи считать его подбрасывания успешными, если выпадает орёл, а для Пети — наоборот, принять выпадение решек за успех. В таком случае, если мы хотим посчитать вероятность того, что у обоих выпадет k орлов, то это будет равносильно тому, что у Васи будет k успехов, а у Пети — (n−k) успехов. В силу того, что монетки честные, можно считать, что у нас нет никаких Вась и Петь, а есть просто 2n испытаний Бернулли и нам нужно выбить k + (n − k) = n любых успехов, чтобы у них было одинаковое число орлов. Вероятность этого равна (2n | n) / 4^n.

Но это ещё не всё: с помощью этой задачки можно сделать «комбинаторное» доказательство равенства ∑[k = 0…n; (n | k)^2] = (2n | n). Если обе части равенства поделить на 2^(2n) = 4^n, то слева получится как раз сумма по k вероятностей получить одновременно k орлов в задачке выше, и справа тоже будет оно, что мы только что доказали. Так что вот: если сложить квадраты биномиальных коэффициентов, то, внезапно, получится что-то осмысленное.

C-4.7
Внезапно опять всплыло упражнение, где есть формула бинарной энтропии, и я понял, какой же я придурок, что тогда (>>298707), не смог разобраться, какой она имеет смысл.

> H(λ) = −λlg(λ) − (1−λ)lg(1−λ) — бинарная энтропия (lg(0) принимается за 0)


Или более общая её форма:

> H = −∑λn · log(b; λn)


В действительности, эта штука означает меру беспорядка в зависимости от вероятности λ. То есть, например, если λ = 1/2, то в случае для бинарной энтропии нельзя предположить, какое из двух событий произойдёт, максимальная неопределённость.

А, если присмотреться, то можно увидеть, что формула не такая уж и бессмысленная: −lg(λ) — это же мера того, сколько информации содержится в сообщении о том, что произойдёт событие с вероятностью λ (формула Шеннона). И получается, что H(λ) — это мат ожидание количества информации: например, если монетка честная, то результат её подбрасывания принесёт очень много информации по сравнению с тем, если бы монетка была со смещённым центром тяжести и чаще падала, скажем, орлом вверх. В последнем случае мы знаем, каким будет, скорее всего, исход, поэтому никакой новой информации не ожидаем и энтропия будет маленькой.

Учитывая это, приобретает смысл та формула, значение которой, я не понял:

> (n | k) ≤ 2^(n · H(λ)), где k = λn


Если взять n испытаний Бернулли с вероятностью успеха λ, то мы можем предполагать приблизительно (n | λn) возможных раскладов (мат ожидание k успехов как раз равно λn). При этом всего всех возможных последовательностей успехов и неудач — 2^n штук. И в этой формуле мы пытаемся на основе неопределённости ограничить сверху количество возможных последовательностей успехов и неудач при данном нам λ: если неопределённость высока, то мы не можем ничего предположить и берём максимальную верхнюю границу: 2^(n · H(1/2)) = 2^n. А вот, если бы вероятность успеха была, скажем 1/4, то мы бы могли отбросить часть совсем маловероятных вариантов и понизить оценку. Чёт я так себе объяснил, в голове звучало лучше.

Короче, вот:
https://en.wikipedia.org/wiki/Binary_entropy_function

C.4-8
Вот это тоже интересная штука: надо было доказать, что, если у нас последовательность из n испытаний Бернулли, каждое из которых имеет вероятность pk, то, если мы повысим вероятность всех событий до p ≥ max{pk}, то вероятность получить меньше, чем m успехов, снизится. Интуитивно это понятно из того, что мы как бы делаем медвежью услугу себе же, повышая вероятность успехов при том, что нам надо как можно меньшее их количество.

Более формально это доказывается через переход к немного другому вероятностному пространству: из промежутка [0, 1] выбираются случайным образом числа a1, …, an. В таком случае случайную величину Xk = ak ≤ pk ? 1 : 0 можно воспринимать как успех в k-ом испытании из условия задачи, а Yk = ak ≤ p ? 1 : 0— успех в k-ом испытании после увеличения всех вероятностей. В таком случае Xk всегда будет меньше или равно Yk: когда число ak попадает в интервал [0, pk], оно, естественно, попадает и в [0, p].

А раз так, то можно использовать неравенства из предыдущей главы, которые я незаслуженно обделил вниманием:

> X ≥ Y => Pr{X ≥ t} ≥ Pr{Y ≥ t}


> X ≤ Y => Pr{X ≤ t} ≥ Pr{Y ≤ t}


В общем-то, из одного из них мы сразу же получаем нужный результат.

А сами неравенства доказываются относительно просто по определению probability density function. Ну, и это видно из здравого смысла: если одна величина больше другой, то вероятнее, что она окажется больше какого-то t, и наоборот.

C.4-9
Похожая задачка, но тут у нас две последовательности испытаний Бернулли: у первой вероятности успеха равны pk, у второй — sk, и при этом sk ≥ pk. X — число успехов в первой последовательности, Y — во второй. Надо доказать, что Pr{Y ≥ k} ≥ Pr{X ≥ k}.

Здесь всё аналогично предыдущему заданию. Не знаю, чем они отличаются по сути, возможно, в C.4-8 есть какое-то более простое решение. Как-то странно.

CLRS — Appendix C: The Tails of Binomial Distribution
Тут более подробно рассматривается биномиальное распределение, а именно его «хвосты» (не знаю, как по-русски оно точно называется): то есть всё то, что лежит по левую и по правую стороны от мат ожидания. Ничего особо интересного.

Сначала там доказывается простая и по ощущениям довольно грубая верхняя граница для Pr{X ≥ k}:

> Определим As как событие того, что в испытаниях с номерами из S ⊂ {1, …, n} были успехи


> Pr{X ≥ k} = Pr{все As, для которых |S| = k, они могут пересекаться} ≤ ∑(|S| = k; Pr{As}) = (n | k) · p^k


> Последнее равенство следует из того, что есть (n | k) способов выбрать S, а вероятность получить успехи в событиях с номерами из S равно p^k.


> Это вроде и простое доказательство, но при этом оно какое-то не совсем очевидное: первое, что приходит в голову — это суммировать вероятности получить k успехов, k+1 успех и так далее, а не вот так делать.



Из этого сразу же выводится верхняя граница и для Pr{X ≤ k} ≤ (n|n − k) · (1 − p)^(n − k), так как «получение меньше, чем k успехов или ровно k оных» равносильно «получению как минимум n−k неудач», а это мы уже знаем, как оценить.
.jpg332 Кб, 2000x1270
PoppyFanboy 327 300836
Какой-то странный день. Меня сначала опять угораздило пролежать в выключенном состоянии часов одиннадцать как минимум, а потом я ещё полдня ходил и не понимал, что вокруг происходит.

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

Совершенно случайно наткнулся на это:
https://youtu.be/m5H-YlcMSbc
Надо будет потом ещё послушать что-нибудь у них.

>>300491
Чего-то я конкретно уже устал от этой части книжки про вероятность, комбинаторику и прочую ерунду. Я как-то думал, что тут будет значительно меньше всего, но раз уж начал и прошёл уже больше половины, хочется всё-таки закончить.

CLRS — Appendix C: The Geometric and Binomial Distributions (Exercises)

Ну, тут, как и среди упражнений предыдущей главы про случайные величины, дисперсию и математическое ожидание, было довольно мало всего интересного и все упражнения были в основном про доказательство каких-то простых и не очень с виду полезных штук.

C.4-1
Тут зачем-то впихнули упражнение на то, чтобы доказать явно, что функция геометрического распределения Pr{X=n} = q^(n−1)p удовлетворяет той аксиоме вероятностного распределения, которая Pr{S} = 1. Ну, это как бы и так понятно, даже без каких-то конкретных вычислений: если X отображает всё S в множество натуральных чисел, то, если мы возьмём обратную функцию от N, мы ведь и получим это самое S, какой бы ни была X. Что-то странное.

C.4-4

> Показать, что максимум биномиального распределения по k равен приблизительно равен 1/√(2πnpq).


Тут просто используется формула Стирлинга для факториала (что сразу видно по вылезшему откуда-то Пи в условии задачи), а потом вместо k можно подставить np, потому что это мат ожидание, и получить ответ. Не знаю, насколько вообще это точная оценка и где её можно использовать при условии, что это и не верхняя, и не нижняя оценка, но выглядит как минимум красиво.

C.4-6
А вот эта интересная:

> Вася и Петя каждый подбрасывает монетку n раз. Найдите вероятность того, что у них у обоих суммарно выпадет одинаковое количество орлов.


Тут, чтобы всё максимально упростить, надо немного схитрить, и для Васи считать его подбрасывания успешными, если выпадает орёл, а для Пети — наоборот, принять выпадение решек за успех. В таком случае, если мы хотим посчитать вероятность того, что у обоих выпадет k орлов, то это будет равносильно тому, что у Васи будет k успехов, а у Пети — (n−k) успехов. В силу того, что монетки честные, можно считать, что у нас нет никаких Вась и Петь, а есть просто 2n испытаний Бернулли и нам нужно выбить k + (n − k) = n любых успехов, чтобы у них было одинаковое число орлов. Вероятность этого равна (2n | n) / 4^n.

Но это ещё не всё: с помощью этой задачки можно сделать «комбинаторное» доказательство равенства ∑[k = 0…n; (n | k)^2] = (2n | n). Если обе части равенства поделить на 2^(2n) = 4^n, то слева получится как раз сумма по k вероятностей получить одновременно k орлов в задачке выше, и справа тоже будет оно, что мы только что доказали. Так что вот: если сложить квадраты биномиальных коэффициентов, то, внезапно, получится что-то осмысленное.

C-4.7
Внезапно опять всплыло упражнение, где есть формула бинарной энтропии, и я понял, какой же я придурок, что тогда (>>298707), не смог разобраться, какой она имеет смысл.

> H(λ) = −λlg(λ) − (1−λ)lg(1−λ) — бинарная энтропия (lg(0) принимается за 0)


Или более общая её форма:

> H = −∑λn · log(b; λn)


В действительности, эта штука означает меру беспорядка в зависимости от вероятности λ. То есть, например, если λ = 1/2, то в случае для бинарной энтропии нельзя предположить, какое из двух событий произойдёт, максимальная неопределённость.

А, если присмотреться, то можно увидеть, что формула не такая уж и бессмысленная: −lg(λ) — это же мера того, сколько информации содержится в сообщении о том, что произойдёт событие с вероятностью λ (формула Шеннона). И получается, что H(λ) — это мат ожидание количества информации: например, если монетка честная, то результат её подбрасывания принесёт очень много информации по сравнению с тем, если бы монетка была со смещённым центром тяжести и чаще падала, скажем, орлом вверх. В последнем случае мы знаем, каким будет, скорее всего, исход, поэтому никакой новой информации не ожидаем и энтропия будет маленькой.

Учитывая это, приобретает смысл та формула, значение которой, я не понял:

> (n | k) ≤ 2^(n · H(λ)), где k = λn


Если взять n испытаний Бернулли с вероятностью успеха λ, то мы можем предполагать приблизительно (n | λn) возможных раскладов (мат ожидание k успехов как раз равно λn). При этом всего всех возможных последовательностей успехов и неудач — 2^n штук. И в этой формуле мы пытаемся на основе неопределённости ограничить сверху количество возможных последовательностей успехов и неудач при данном нам λ: если неопределённость высока, то мы не можем ничего предположить и берём максимальную верхнюю границу: 2^(n · H(1/2)) = 2^n. А вот, если бы вероятность успеха была, скажем 1/4, то мы бы могли отбросить часть совсем маловероятных вариантов и понизить оценку. Чёт я так себе объяснил, в голове звучало лучше.

Короче, вот:
https://en.wikipedia.org/wiki/Binary_entropy_function

C.4-8
Вот это тоже интересная штука: надо было доказать, что, если у нас последовательность из n испытаний Бернулли, каждое из которых имеет вероятность pk, то, если мы повысим вероятность всех событий до p ≥ max{pk}, то вероятность получить меньше, чем m успехов, снизится. Интуитивно это понятно из того, что мы как бы делаем медвежью услугу себе же, повышая вероятность успехов при том, что нам надо как можно меньшее их количество.

Более формально это доказывается через переход к немного другому вероятностному пространству: из промежутка [0, 1] выбираются случайным образом числа a1, …, an. В таком случае случайную величину Xk = ak ≤ pk ? 1 : 0 можно воспринимать как успех в k-ом испытании из условия задачи, а Yk = ak ≤ p ? 1 : 0— успех в k-ом испытании после увеличения всех вероятностей. В таком случае Xk всегда будет меньше или равно Yk: когда число ak попадает в интервал [0, pk], оно, естественно, попадает и в [0, p].

А раз так, то можно использовать неравенства из предыдущей главы, которые я незаслуженно обделил вниманием:

> X ≥ Y => Pr{X ≥ t} ≥ Pr{Y ≥ t}


> X ≤ Y => Pr{X ≤ t} ≥ Pr{Y ≤ t}


В общем-то, из одного из них мы сразу же получаем нужный результат.

А сами неравенства доказываются относительно просто по определению probability density function. Ну, и это видно из здравого смысла: если одна величина больше другой, то вероятнее, что она окажется больше какого-то t, и наоборот.

C.4-9
Похожая задачка, но тут у нас две последовательности испытаний Бернулли: у первой вероятности успеха равны pk, у второй — sk, и при этом sk ≥ pk. X — число успехов в первой последовательности, Y — во второй. Надо доказать, что Pr{Y ≥ k} ≥ Pr{X ≥ k}.

Здесь всё аналогично предыдущему заданию. Не знаю, чем они отличаются по сути, возможно, в C.4-8 есть какое-то более простое решение. Как-то странно.

CLRS — Appendix C: The Tails of Binomial Distribution
Тут более подробно рассматривается биномиальное распределение, а именно его «хвосты» (не знаю, как по-русски оно точно называется): то есть всё то, что лежит по левую и по правую стороны от мат ожидания. Ничего особо интересного.

Сначала там доказывается простая и по ощущениям довольно грубая верхняя граница для Pr{X ≥ k}:

> Определим As как событие того, что в испытаниях с номерами из S ⊂ {1, …, n} были успехи


> Pr{X ≥ k} = Pr{все As, для которых |S| = k, они могут пересекаться} ≤ ∑(|S| = k; Pr{As}) = (n | k) · p^k


> Последнее равенство следует из того, что есть (n | k) способов выбрать S, а вероятность получить успехи в событиях с номерами из S равно p^k.


> Это вроде и простое доказательство, но при этом оно какое-то не совсем очевидное: первое, что приходит в голову — это суммировать вероятности получить k успехов, k+1 успех и так далее, а не вот так делать.



Из этого сразу же выводится верхняя граница и для Pr{X ≤ k} ≤ (n|n − k) · (1 − p)^(n − k), так как «получение меньше, чем k успехов или ровно k оных» равносильно «получению как минимум n−k неудач», а это мы уже знаем, как оценить.
PoppyFanboy 328 301068
>>300836
Чёт, оно как-то совсем скатилось под конец просто в рандомные математические приколы: «Смотри, можно вот так оценить эту сумму, правда круто? А теперь упражнения, где ты сможешь применить все эти оценки. Зачем? Чтобы оценивать просто какие-то искусственные суммы, конечно же».

В общем, тех простеньких оценок Pr{X ≤ k} и Pr{X ≥ k} (где X — количество успехов в n испытаниях Бернулли, где успех в каждом испытании равен p) оказалось мало, поэтому сюда впихнули ещё две, судя по всему, чуть более точных:

> Pr{X < k} < [kq / (np−k)] · b(k; n, p) для 0 < k < np


> Pr{X > k} < [(n−k)·p / (k−np)] · b(k; n, p) для np < k < n


То есть это оценки уже конкретно для левого и правого хвостов, а не просто оценка вероятности того, что X примет значения большие или меньшие какого-то k. Есть ли смысл пытаться запомнить их? Э-э, не знаю, наверное, нет. Но зато с помощью них можно доказать более интересные факты:

> Pr{X < k} < Pr{X = k} для 0 < k ≤ np/2


> Pr{X > k} < Pr{X = k−1} для (np+n)/2 < k < n



Получается, далеко справа и далеко слева находятся настолько маловероятные события, что их всех перевешивает только одно событие, которое стоит чуть-чуть ближе к среднему значению.

Для доказательства вот этих оценок, кстати, используется довольно интересный способ, о котором я раньше ни разу не слышал. Если у нас есть какая-то конечная сумма из n элементов и мы знаем, что ak/ak+1 ≤ x < 1 для всех k (ну, или, если у нас зеркальная ситуация с ak+1/ak ≤ x < 1), то мы можем оценить все элементы суммы ak с помощью an, домноженного на какую-то степень x (или, соответственно, a1 на степень x). В общем, должно получиться так, что там можно будет вынести что-то из-под знака суммы, чтобы внутри осталась только степень икса. И теперь можно увеличить сумму с n слагаемых до бесконечности, чтобы получилась бесконечно убывающая геометрическая прогрессия, для которой сумма всех членов известна. Тут, вероятно, предполагается, что в изначальной сумме достаточно много слагаемых, чтобы x^n было уже чем-то настолько незначительным, чтобы добавление x^(n+1) + x^(n+2) + … сверху к оценке не сделало бы её бессмысленной.

> 1.jpg


Ну, вот, получается, там и доказывается одна из оценок, о которых я говорил, а также расписан один из способов оценки суммы.

Это всё были оценки для случаев, когда все испытания Бернулли имеют одинаковые вероятности успеха. Для случая же с различающимися вероятностями тоже есть свои оценки. Я не буду уже пытаться уместить формулы в plain text тут, так что просто вот:

> 2.jpg


Тут всё очень не очевидно. Надо отметить тут Markov’s inequality, которое я посчитал не сильно важным и не рассказал о нём, когда читал одну из предыдущих глав, но, как оказалось, вот, оно используется. Это оценка всё того же Pr{X ≥ k}, но для не обязательно одинаковых вероятностей. Почему мы вдруг там решили взять экспоненту от всего — не знаю. Это, наверное, можно попробовать оправдать тем, что экспоненты легко перемножать и вообще они классные, но не знаю, не очень очевидное движение. Ну, и там в конце, в следствии, выводится частный случай для одинаковых вероятностей.

Кстати, используя только эту, только что доказанную теорему, можно уже сразу вывести оценку и для Pr{X ≤ E[X] − r}. Достаточно определить новую случайную величину Y, у которой успехи появляются с вероятностями qi, а неудачи — с шансом pi. То есть по сути Y считает неудачи X: Y = n − X. Тогда, очевидно, E[Y] = n − E[X]. Подставляем Y в теорему >2.jpg, а потом меняем Y на X и получаем:

> Pr{X ≤ E[X]−r} ≤ [(n−E[X]·e)/r]^r для r > n−E[X]


Короче, ещё одна оценка, да, классно. В душе себе не представляю, где всё это может использоваться: выглядит всё это как просто какие-то рандомные неочевидные безымянные формулы.

CLRS — Appendix C: The Tails of Binomial Distribution (Exercises)

C.5-1

> Что менее вероятно, не получить ни одного орла за n подбрасываний или получить меньше, чем n орлов за 4n подбрасываний?


Это довольно странное упражнение. Тут при решении даже вроде нельзя применить ни одну из тех оценок, которые были упомянуты в главе, потому что тут требуется нижняя оценка, а не верхняя. Посчитать вероятность в первом случае — легко (1/2^n), во втором она записывается только с помощью суммы, которую надо оценить снизу самым большим её членом, а потом доказать, что эта самая оценка снизу больше, чем 1/2^n. Сделать это можно индукцией по n, и там не всё так легко из-за того, что там придётся оценивать значение какой-то громоздкой дроби.

Ну, ладно, допустим, индукционный переход у нас есть, а что насчёт базы индукции? n = 1 не подходит, для такого n первое событие более вероятно, чем второе. То же самое для n = 2, n = 3… В общем, первое подходящее значение n встречается ближе к двадцати. То есть нам ещё тут надо перебрать все значения n, чтобы найти базовый случай.

Дальше там шёл ряд искусственных упражнений на применение оценок, упомянутых в главе, но там нет ничего интересного. Единственное, мне пришлось вспомнить, что n! всегда меньше или равен n^n. Это легко выводится по индукции [(n+1)^(n+1) = (n+1) · (n+1)^n ≥ (n+1) · n^n ≥ (n+1) · n! = (n+1)!], но я как-то об этом не задумывался. Ещё это вроде должно быть видно из одного из приближений Стирлинга для факториала.

C.5-6

> Докажите ещё одну ненужную оценку бла-бла-бла.


Тут само доказательство неравенства довольно простое: оно до какого-то момента повторяет доказательство той оценки на 2.jpg, а потом там немного по-другому оценивается кое-какое мат ожидание. Проблема вот как раз в этой оценке: её нужно отдельно доказать. В решебнике (всё-таки, судя по количеству ошибок, неофициальном) расписано довольно громоздкое доказательство с кучей дыр и я уже испугался, что ни сам не смогу подтвердить неравенство, ни даже просто прочесть доказательство, но, неожиданно получилось довольно легко доказать самому.

Само неравенство вот:

> p·e^(aq) + q·e^(−ap) ≤ e^(a^2 / 2), где a — любое вещественное, 0 < p < 1, q = 1−p



Рассмотрим функцию f(x) = e^(x^2 / 2) − [p·e^(xq) + q·e^(−xp)]. %И вот тут я понял, что доказал не совсем правильно.% В общем, вроде же очевидно, что функция имеет только один корень в нуле, да? %Нет, это надо формально доказать, но я не знаю, как.% Потому что e^(x^2 / 2) жесть быстро улетает вверх по сравнению с выражением в квадратных скобках. В общем, эта функция обращается в ноль только в нуле: f(0) = 0.

Теперь найдём знак f(1) = √e − pe^q − qe^(−p). Для этого выразим q через p, рассмотрим pe^(1−p)+(1−p)e^(−p) как функцию от p, найдём её максимальное значение на [0, 1], взяв производную, и убедимся в том, что это значение меньше, чем √e, так что f(1) > 0.

Окей, теперь мы знаем, что у нас есть непрерывная функция f(x), которая нигде на (0, ∞) не пересекает ось абсцисс, а ещё она положительна в точке x = 1. Делаем вывод, что она положительна на всём интервале (0, ∞). Аналогично доказывается для (−∞, 0)

CLRS — Appendix C: Problems
C-1: Balls and Bins
Набор простеньких упражнений на шарики и урны. Я слышал, что что-то подобное есть в задачнике у Феллера, который я никогда в своей жизни не открывал и вряд ли открою. Мне пока что хватило поверхностного знания теории вероятностей и всех при колов.

> Сколько существует способов разложить n различимых шаров по b урнам?


Тут просто: для каждого шара есть b урн, куда его можно положить. Так что ответ — b^n

> Сколько существует способов разложить n различимых шаров в b урн при условии, что порядок внутри урн тоже учитывается. (Судя по всему, подразумевается, что урны там такие, что шарики в них выстраиваются в вертикальный столбик, как воланчики на той lewd гифке, которую мне лень искать. Там порядок важен.)


Тут применяется распространённый приём с добавлением разделителей между шарами: всего b−1 разделитель, n шаров, а значит, (b+n−1)! способов расположить разделители и шары. Всё? А вот и нет, разделители-то у нас неразличимые, поэтому надо ещё поделить на (b−1)!, чтобы получить ответ: (b+n−1)! / (b−1)!

Если же в этой же задачке шары будут неразличимы, то, соответственно, надо будет дополнительно поделить на n!. Ответ будет (b+n−1 | n)

> Сколько существует способов разложить n одинаковых шаров по b урнам, в каждую из которых умещается только один шар? (То есть n ≤ b по условию.)


Здесь легко: для первого шара есть b возможных урн, для второго — b−1 урн и так далее. Суммарно получается b! / (b−n)! шары по условию неразличимы, поэтому делим всё дополнительно на n! и получаем ответ: (b | n)

> Аналогичная задачка, но тут нам надо положить во все урны как минимум по одному шару.


Сначала располагаем по одному шару в каждую урну, а затем распихиваем оставшиеся по формуле из одной из задачек выше. Получаем довольно неочевидно выглядящий ответ: (n−1 | b−1)
PoppyFanboy 328 301068
>>300836
Чёт, оно как-то совсем скатилось под конец просто в рандомные математические приколы: «Смотри, можно вот так оценить эту сумму, правда круто? А теперь упражнения, где ты сможешь применить все эти оценки. Зачем? Чтобы оценивать просто какие-то искусственные суммы, конечно же».

В общем, тех простеньких оценок Pr{X ≤ k} и Pr{X ≥ k} (где X — количество успехов в n испытаниях Бернулли, где успех в каждом испытании равен p) оказалось мало, поэтому сюда впихнули ещё две, судя по всему, чуть более точных:

> Pr{X < k} < [kq / (np−k)] · b(k; n, p) для 0 < k < np


> Pr{X > k} < [(n−k)·p / (k−np)] · b(k; n, p) для np < k < n


То есть это оценки уже конкретно для левого и правого хвостов, а не просто оценка вероятности того, что X примет значения большие или меньшие какого-то k. Есть ли смысл пытаться запомнить их? Э-э, не знаю, наверное, нет. Но зато с помощью них можно доказать более интересные факты:

> Pr{X < k} < Pr{X = k} для 0 < k ≤ np/2


> Pr{X > k} < Pr{X = k−1} для (np+n)/2 < k < n



Получается, далеко справа и далеко слева находятся настолько маловероятные события, что их всех перевешивает только одно событие, которое стоит чуть-чуть ближе к среднему значению.

Для доказательства вот этих оценок, кстати, используется довольно интересный способ, о котором я раньше ни разу не слышал. Если у нас есть какая-то конечная сумма из n элементов и мы знаем, что ak/ak+1 ≤ x < 1 для всех k (ну, или, если у нас зеркальная ситуация с ak+1/ak ≤ x < 1), то мы можем оценить все элементы суммы ak с помощью an, домноженного на какую-то степень x (или, соответственно, a1 на степень x). В общем, должно получиться так, что там можно будет вынести что-то из-под знака суммы, чтобы внутри осталась только степень икса. И теперь можно увеличить сумму с n слагаемых до бесконечности, чтобы получилась бесконечно убывающая геометрическая прогрессия, для которой сумма всех членов известна. Тут, вероятно, предполагается, что в изначальной сумме достаточно много слагаемых, чтобы x^n было уже чем-то настолько незначительным, чтобы добавление x^(n+1) + x^(n+2) + … сверху к оценке не сделало бы её бессмысленной.

> 1.jpg


Ну, вот, получается, там и доказывается одна из оценок, о которых я говорил, а также расписан один из способов оценки суммы.

Это всё были оценки для случаев, когда все испытания Бернулли имеют одинаковые вероятности успеха. Для случая же с различающимися вероятностями тоже есть свои оценки. Я не буду уже пытаться уместить формулы в plain text тут, так что просто вот:

> 2.jpg


Тут всё очень не очевидно. Надо отметить тут Markov’s inequality, которое я посчитал не сильно важным и не рассказал о нём, когда читал одну из предыдущих глав, но, как оказалось, вот, оно используется. Это оценка всё того же Pr{X ≥ k}, но для не обязательно одинаковых вероятностей. Почему мы вдруг там решили взять экспоненту от всего — не знаю. Это, наверное, можно попробовать оправдать тем, что экспоненты легко перемножать и вообще они классные, но не знаю, не очень очевидное движение. Ну, и там в конце, в следствии, выводится частный случай для одинаковых вероятностей.

Кстати, используя только эту, только что доказанную теорему, можно уже сразу вывести оценку и для Pr{X ≤ E[X] − r}. Достаточно определить новую случайную величину Y, у которой успехи появляются с вероятностями qi, а неудачи — с шансом pi. То есть по сути Y считает неудачи X: Y = n − X. Тогда, очевидно, E[Y] = n − E[X]. Подставляем Y в теорему >2.jpg, а потом меняем Y на X и получаем:

> Pr{X ≤ E[X]−r} ≤ [(n−E[X]·e)/r]^r для r > n−E[X]


Короче, ещё одна оценка, да, классно. В душе себе не представляю, где всё это может использоваться: выглядит всё это как просто какие-то рандомные неочевидные безымянные формулы.

CLRS — Appendix C: The Tails of Binomial Distribution (Exercises)

C.5-1

> Что менее вероятно, не получить ни одного орла за n подбрасываний или получить меньше, чем n орлов за 4n подбрасываний?


Это довольно странное упражнение. Тут при решении даже вроде нельзя применить ни одну из тех оценок, которые были упомянуты в главе, потому что тут требуется нижняя оценка, а не верхняя. Посчитать вероятность в первом случае — легко (1/2^n), во втором она записывается только с помощью суммы, которую надо оценить снизу самым большим её членом, а потом доказать, что эта самая оценка снизу больше, чем 1/2^n. Сделать это можно индукцией по n, и там не всё так легко из-за того, что там придётся оценивать значение какой-то громоздкой дроби.

Ну, ладно, допустим, индукционный переход у нас есть, а что насчёт базы индукции? n = 1 не подходит, для такого n первое событие более вероятно, чем второе. То же самое для n = 2, n = 3… В общем, первое подходящее значение n встречается ближе к двадцати. То есть нам ещё тут надо перебрать все значения n, чтобы найти базовый случай.

Дальше там шёл ряд искусственных упражнений на применение оценок, упомянутых в главе, но там нет ничего интересного. Единственное, мне пришлось вспомнить, что n! всегда меньше или равен n^n. Это легко выводится по индукции [(n+1)^(n+1) = (n+1) · (n+1)^n ≥ (n+1) · n^n ≥ (n+1) · n! = (n+1)!], но я как-то об этом не задумывался. Ещё это вроде должно быть видно из одного из приближений Стирлинга для факториала.

C.5-6

> Докажите ещё одну ненужную оценку бла-бла-бла.


Тут само доказательство неравенства довольно простое: оно до какого-то момента повторяет доказательство той оценки на 2.jpg, а потом там немного по-другому оценивается кое-какое мат ожидание. Проблема вот как раз в этой оценке: её нужно отдельно доказать. В решебнике (всё-таки, судя по количеству ошибок, неофициальном) расписано довольно громоздкое доказательство с кучей дыр и я уже испугался, что ни сам не смогу подтвердить неравенство, ни даже просто прочесть доказательство, но, неожиданно получилось довольно легко доказать самому.

Само неравенство вот:

> p·e^(aq) + q·e^(−ap) ≤ e^(a^2 / 2), где a — любое вещественное, 0 < p < 1, q = 1−p



Рассмотрим функцию f(x) = e^(x^2 / 2) − [p·e^(xq) + q·e^(−xp)]. %И вот тут я понял, что доказал не совсем правильно.% В общем, вроде же очевидно, что функция имеет только один корень в нуле, да? %Нет, это надо формально доказать, но я не знаю, как.% Потому что e^(x^2 / 2) жесть быстро улетает вверх по сравнению с выражением в квадратных скобках. В общем, эта функция обращается в ноль только в нуле: f(0) = 0.

Теперь найдём знак f(1) = √e − pe^q − qe^(−p). Для этого выразим q через p, рассмотрим pe^(1−p)+(1−p)e^(−p) как функцию от p, найдём её максимальное значение на [0, 1], взяв производную, и убедимся в том, что это значение меньше, чем √e, так что f(1) > 0.

Окей, теперь мы знаем, что у нас есть непрерывная функция f(x), которая нигде на (0, ∞) не пересекает ось абсцисс, а ещё она положительна в точке x = 1. Делаем вывод, что она положительна на всём интервале (0, ∞). Аналогично доказывается для (−∞, 0)

CLRS — Appendix C: Problems
C-1: Balls and Bins
Набор простеньких упражнений на шарики и урны. Я слышал, что что-то подобное есть в задачнике у Феллера, который я никогда в своей жизни не открывал и вряд ли открою. Мне пока что хватило поверхностного знания теории вероятностей и всех при колов.

> Сколько существует способов разложить n различимых шаров по b урнам?


Тут просто: для каждого шара есть b урн, куда его можно положить. Так что ответ — b^n

> Сколько существует способов разложить n различимых шаров в b урн при условии, что порядок внутри урн тоже учитывается. (Судя по всему, подразумевается, что урны там такие, что шарики в них выстраиваются в вертикальный столбик, как воланчики на той lewd гифке, которую мне лень искать. Там порядок важен.)


Тут применяется распространённый приём с добавлением разделителей между шарами: всего b−1 разделитель, n шаров, а значит, (b+n−1)! способов расположить разделители и шары. Всё? А вот и нет, разделители-то у нас неразличимые, поэтому надо ещё поделить на (b−1)!, чтобы получить ответ: (b+n−1)! / (b−1)!

Если же в этой же задачке шары будут неразличимы, то, соответственно, надо будет дополнительно поделить на n!. Ответ будет (b+n−1 | n)

> Сколько существует способов разложить n одинаковых шаров по b урнам, в каждую из которых умещается только один шар? (То есть n ≤ b по условию.)


Здесь легко: для первого шара есть b возможных урн, для второго — b−1 урн и так далее. Суммарно получается b! / (b−n)! шары по условию неразличимы, поэтому делим всё дополнительно на n! и получаем ответ: (b | n)

> Аналогичная задачка, но тут нам надо положить во все урны как минимум по одному шару.


Сначала располагаем по одному шару в каждую урну, а затем распихиваем оставшиеся по формуле из одной из задачек выше. Получаем довольно неочевидно выглядящий ответ: (n−1 | b−1)
nyortxP.gif676 Кб, 380x212
Рируру !!gYmpHned/k 329 301115
>>301068

>шарики в них выстраиваются в вертикальный столбик, как воланчики на той lewd гифке, которую мне лень искать


(・ε・)
PoppyFanboy 330 303077
сегодня только так

>>301115
( ・・)ノ~ ♡

>>301068
Вы, на верное, поду мали, что это ещё не всё, но нет, вероятности из этой книжки закончились. И я бы хотел продолжать писать так же много, но в ближайшее время из этого вряд ли что-то выйдет, потому что не о чем, а ждать достаточно долго, пока накопится достаточно, чтобы едва ли влезало в лимит по символам, мне не хочется, потому что информация в моей голове имеет свойство портиться, покрываться плесенью и становится непригодной к употреблению. (Не сказать, что она представляет из себя что-то съедобное и в свежем виде, но, по крайней мере, я могу перечитать и не подавиться.)

Не знаю, что буду смотреть дальше, на фоне прогрессирующего желания ничего не делать прочтение или делание хотя бы чего-нибудь уже будет вполне неплохим результатом. Выбор, я думаю, в основном будет падать на всё ту же CLRS: продолжу читать с того места, где я остановился перед тем, как перескочил на аппендикс про теорию вероятностей, а именно с пятой главы «Probabilistic Analysis and Randomized Algorithms», и буду надеяться, что не заброшу это.

А насчёт остального — не знаю. Возможно, просто не хочу говорить. Если что-то будет, то оно, рано или поздно, здесь окажется. Просто не хочется давать обещаний даже самому себе: знаю же, что нарушу, не задумываясь. Но, скорее всего, ничего не будет, уже поздновато, да.

Всякие штуки
Я нашёл коробку со всякими штуками.

Вычисление полинома за минимальное количество умножений

>Вычислите значение x^4 + x^3 + x^2 + x + 1 за два умножения.


Честно — я сам вообще даже близко не догадался. Думал, что его то ли надо представить как (1 − x^5) / (1 − x) и потом что-то с ним сделать, то ли разложить на произведение двух многочленов второй степени. (Кстати, у меня в совершенстве из головы вылетело, как раскладывать многочлены на неприводимые и было ли у меня вообще когда-либо в голове такое знание. Вроде как в гугле есть какой-то метод Кронекера и вроде даже я что-то подобное уже видел. Надо будет потом посмотреть, что это.) Так вот, ничего из этого не подходит: потому что надо раскладывать не сам многочлен, а только его часть: x^4 + x^3 + x^2 + x = (x^2 + x) · (x^2 + 1). Ну, и там единицу прибавить остаётся.

Деление с остатком, но без деления

>Для целых a и b вычислить такое целое q, чтобы выполнялось a = bq + r, где 0 ≤ r < |b|.


Тут всё просто, но единственная сложность — это, когда появляются отрицательные числа. Тогда ответы начинают разниться и с интуитивным восприятием деления с остатком, и с тем, что выдаёт компьютер, когда пишешь, скажем, «−13 / 4». Для примера можно как разобрать все возможные варианты расстановки знаков:

> 13 / 4 → q = 3 (r = 1)


> −13 / 4 → q = −4 (r = 3)


> 13 / (−4) → q = −3 (r = 1)


> −13 / (−4) → q = 4 (r = 3)


(И да, можно было бы рассмотреть отдельно каждый из четырёх случаев, но мне хотелось сделать что-нибудь более-менее выразительное.)

Для начала можно выделить две пары случаев, где значения q отличаются только знаком, запомнить этот знак, а потом свести один случай к другому, инвертировав знак b (только потом надо не забыть домножить ответ на минус единицу, если это надо). Так что нам достаточно знать, как вычислить q, например, для случаев 13 / 4 и −13 / −4. Обработку обоих случаев можно впихнуть в один цикл:

> while (a < 0 || a >= b && b > 0) {


>   a -= b;


>   q += 1;


> }


Условие b > 0 тут необходимо для того, чтобы один случай случайно не перетёк в другой. Если бы его не было, то вычисление, например, −6 / (−3) обернулось бы бесконечным циклом:

> (a = −7, b = −3, q = 0) → (a = −4, b = −3, q = 1) → (a = −1, b = −3, q = 2) → (a = 2, b = −3, q = 3) → [вот тут надо было бы остановиться, но `a` стало больше или равно `b`] → (a = 5, b = −3, q = 4) → …



Мне кажется, неплохо получилось.

Перемена мест кусков массива, но без использования дополнительных буферов

>Есть массив, условно поделённый на два массива. Нужно их переставить, не используя никаких дополнительных массивов: [a1, …, an, b1, …, bm] → [b1, …, bm, a1, …, an]


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

И, ко всему прочему, когда перемещаешь какой-то элемент в массиве:
- необязательно на каждом шаге делать перестановку элементов: можно запомнить переставляемый элемент и потом поставить его в освободившуюся ячейку после того, как все остальные элементы будут сдвинуты
- это можно сделать копированием куска массива и его вставкой его чуть левее/правее (в джаве это можно сделать с помощью быстрого System.arraycopy, который нативно реализован внутри JVM)

А что касательно более адекватных и быстрых решений:

Рируру придумал жесть крутое «рекурсивное» (по своему смыслу) решение: после того, как мы ставим на своё место меньший массив, у нас опять появляются два подмассива, которые надо переставить:

> n < m: [a1, ..., an, b1, ..., bn, bn+1, ..., bm] → [b1, ..., bn, a1, ..., an, bn+1, ..., bm]


> n > m: [a1, ..., am, am+1, ..., an, b1, ..., bm] → [b1, ..., bm, am+1, ..., an, a1, ..., am]



И чуть позже я нашёл то решение, которое, судя по всему, и подразумевалось в задачке: можно перевернуть сначала весь массив, а потом перевернуть каждый из подмассивов по отдельности:

> [1 2 … 7 | 8 9 10]


> [10 9 8 | 7 … 2 1]


> [8 9 10 | 1 2 … 7]



Не знаю, какой вариант выигрывает по количеству перестановок элементов, скорее всего, они примерно одинаково оптимальны, если не абсолютно одинаковы по числу свопов. Но второй алгоритм чуть проще в реализации.

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

Когда-то там давно зачем-то пробовал собирать решения с помощью Gradle, в котором можно менеджить зависимости, создавать скрипты для сборки-тестирования-запуска проектов, и там это всё удобно ещё тем, что Gradle-проект можно скармливать какой-нибудь штуке, которая бы делала автоматически билды ночью или после каждого коммита (например, с помощью какого-нибудь Circle CI, который ещё и интегрирован в гитхаб и прямо там для каждого коммита пишет, успешно ли прошла сборка).

Но, что касается сборок, тестов и подключения зависимостей, всё это уже есть в IDE, а автоматические сборки мне не особо нужны, поэтому я на секунду решил удариться немного в другую крайность: захотелось попробовать делать всё только через командную строку. Но, как оказалось, это немного муторно: я кое-как написал скрипты для сборки и тестирования для конкретных классов, но в идеале, наверное, нужно сделать так, чтобы принимали в качестве аргументов какие-то конкретные классы/пакеты. Короче, я пока что на всё это забил и просто собираю всё в идее. Как-нибудь потом.

https://youtu.be/1FH-q0I1fJY?t=72
Судя по всему, это что-то довольно популярное, вообще странно, что я раньше ни разу не слышал о них.

https://youtu.be/AbiCIwAAIP4
Послушал только первый час, вроде как неплохо.

https://youtu.be/qovlQ1M-1R0

Короче, продолжаю страдать какой-то ерундой, лодырничать и лоботрясничать, да.
PoppyFanboy 330 303077
сегодня только так

>>301115
( ・・)ノ~ ♡

>>301068
Вы, на верное, поду мали, что это ещё не всё, но нет, вероятности из этой книжки закончились. И я бы хотел продолжать писать так же много, но в ближайшее время из этого вряд ли что-то выйдет, потому что не о чем, а ждать достаточно долго, пока накопится достаточно, чтобы едва ли влезало в лимит по символам, мне не хочется, потому что информация в моей голове имеет свойство портиться, покрываться плесенью и становится непригодной к употреблению. (Не сказать, что она представляет из себя что-то съедобное и в свежем виде, но, по крайней мере, я могу перечитать и не подавиться.)

Не знаю, что буду смотреть дальше, на фоне прогрессирующего желания ничего не делать прочтение или делание хотя бы чего-нибудь уже будет вполне неплохим результатом. Выбор, я думаю, в основном будет падать на всё ту же CLRS: продолжу читать с того места, где я остановился перед тем, как перескочил на аппендикс про теорию вероятностей, а именно с пятой главы «Probabilistic Analysis and Randomized Algorithms», и буду надеяться, что не заброшу это.

А насчёт остального — не знаю. Возможно, просто не хочу говорить. Если что-то будет, то оно, рано или поздно, здесь окажется. Просто не хочется давать обещаний даже самому себе: знаю же, что нарушу, не задумываясь. Но, скорее всего, ничего не будет, уже поздновато, да.

Всякие штуки
Я нашёл коробку со всякими штуками.

Вычисление полинома за минимальное количество умножений

>Вычислите значение x^4 + x^3 + x^2 + x + 1 за два умножения.


Честно — я сам вообще даже близко не догадался. Думал, что его то ли надо представить как (1 − x^5) / (1 − x) и потом что-то с ним сделать, то ли разложить на произведение двух многочленов второй степени. (Кстати, у меня в совершенстве из головы вылетело, как раскладывать многочлены на неприводимые и было ли у меня вообще когда-либо в голове такое знание. Вроде как в гугле есть какой-то метод Кронекера и вроде даже я что-то подобное уже видел. Надо будет потом посмотреть, что это.) Так вот, ничего из этого не подходит: потому что надо раскладывать не сам многочлен, а только его часть: x^4 + x^3 + x^2 + x = (x^2 + x) · (x^2 + 1). Ну, и там единицу прибавить остаётся.

Деление с остатком, но без деления

>Для целых a и b вычислить такое целое q, чтобы выполнялось a = bq + r, где 0 ≤ r < |b|.


Тут всё просто, но единственная сложность — это, когда появляются отрицательные числа. Тогда ответы начинают разниться и с интуитивным восприятием деления с остатком, и с тем, что выдаёт компьютер, когда пишешь, скажем, «−13 / 4». Для примера можно как разобрать все возможные варианты расстановки знаков:

> 13 / 4 → q = 3 (r = 1)


> −13 / 4 → q = −4 (r = 3)


> 13 / (−4) → q = −3 (r = 1)


> −13 / (−4) → q = 4 (r = 3)


(И да, можно было бы рассмотреть отдельно каждый из четырёх случаев, но мне хотелось сделать что-нибудь более-менее выразительное.)

Для начала можно выделить две пары случаев, где значения q отличаются только знаком, запомнить этот знак, а потом свести один случай к другому, инвертировав знак b (только потом надо не забыть домножить ответ на минус единицу, если это надо). Так что нам достаточно знать, как вычислить q, например, для случаев 13 / 4 и −13 / −4. Обработку обоих случаев можно впихнуть в один цикл:

> while (a < 0 || a >= b && b > 0) {


>   a -= b;


>   q += 1;


> }


Условие b > 0 тут необходимо для того, чтобы один случай случайно не перетёк в другой. Если бы его не было, то вычисление, например, −6 / (−3) обернулось бы бесконечным циклом:

> (a = −7, b = −3, q = 0) → (a = −4, b = −3, q = 1) → (a = −1, b = −3, q = 2) → (a = 2, b = −3, q = 3) → [вот тут надо было бы остановиться, но `a` стало больше или равно `b`] → (a = 5, b = −3, q = 4) → …



Мне кажется, неплохо получилось.

Перемена мест кусков массива, но без использования дополнительных буферов

>Есть массив, условно поделённый на два массива. Нужно их переставить, не используя никаких дополнительных массивов: [a1, …, an, b1, …, bm] → [b1, …, bm, a1, …, an]


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

И, ко всему прочему, когда перемещаешь какой-то элемент в массиве:
- необязательно на каждом шаге делать перестановку элементов: можно запомнить переставляемый элемент и потом поставить его в освободившуюся ячейку после того, как все остальные элементы будут сдвинуты
- это можно сделать копированием куска массива и его вставкой его чуть левее/правее (в джаве это можно сделать с помощью быстрого System.arraycopy, который нативно реализован внутри JVM)

А что касательно более адекватных и быстрых решений:

Рируру придумал жесть крутое «рекурсивное» (по своему смыслу) решение: после того, как мы ставим на своё место меньший массив, у нас опять появляются два подмассива, которые надо переставить:

> n < m: [a1, ..., an, b1, ..., bn, bn+1, ..., bm] → [b1, ..., bn, a1, ..., an, bn+1, ..., bm]


> n > m: [a1, ..., am, am+1, ..., an, b1, ..., bm] → [b1, ..., bm, am+1, ..., an, a1, ..., am]



И чуть позже я нашёл то решение, которое, судя по всему, и подразумевалось в задачке: можно перевернуть сначала весь массив, а потом перевернуть каждый из подмассивов по отдельности:

> [1 2 … 7 | 8 9 10]


> [10 9 8 | 7 … 2 1]


> [8 9 10 | 1 2 … 7]



Не знаю, какой вариант выигрывает по количеству перестановок элементов, скорее всего, они примерно одинаково оптимальны, если не абсолютно одинаковы по числу свопов. Но второй алгоритм чуть проще в реализации.

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

Когда-то там давно зачем-то пробовал собирать решения с помощью Gradle, в котором можно менеджить зависимости, создавать скрипты для сборки-тестирования-запуска проектов, и там это всё удобно ещё тем, что Gradle-проект можно скармливать какой-нибудь штуке, которая бы делала автоматически билды ночью или после каждого коммита (например, с помощью какого-нибудь Circle CI, который ещё и интегрирован в гитхаб и прямо там для каждого коммита пишет, успешно ли прошла сборка).

Но, что касается сборок, тестов и подключения зависимостей, всё это уже есть в IDE, а автоматические сборки мне не особо нужны, поэтому я на секунду решил удариться немного в другую крайность: захотелось попробовать делать всё только через командную строку. Но, как оказалось, это немного муторно: я кое-как написал скрипты для сборки и тестирования для конкретных классов, но в идеале, наверное, нужно сделать так, чтобы принимали в качестве аргументов какие-то конкретные классы/пакеты. Короче, я пока что на всё это забил и просто собираю всё в идее. Как-нибудь потом.

https://youtu.be/1FH-q0I1fJY?t=72
Судя по всему, это что-то довольно популярное, вообще странно, что я раньше ни разу не слышал о них.

https://youtu.be/AbiCIwAAIP4
Послушал только первый час, вроде как неплохо.

https://youtu.be/qovlQ1M-1R0

Короче, продолжаю страдать какой-то ерундой, лодырничать и лоботрясничать, да.
331 303356
>>303077

>Если что-то будет, то оно, рано или поздно, здесь окажется.


Это ты о чем? намекни хоть.
332 303439
Mars Argo > Poppy
Ты молодец, анончик, продолжай в том же духе
PoppyFanboy 333 304136
>>303356
Скорее всего, ни о чём, потому что я всё более уверен, что ничего из этого не произойдёт. Да и я не говорю ни о чём конкретном. Так что неважно.

>>303439
>продолжай в том же духе
Сложно придумать более херовое и неуместное пожелание.

CLRS — Chapter 5: Probabilistic Analysis and Randomized Algorithms
Звучит довольно пафосно и сложно, но на деле это (пока что) выглядит просто как дополнение к разделу про вероятность, где особо ничего нового не вводится, а просто показываются какие-то варианты практического использования теории вероятностей.

The hiring problem
Сначала там в качестве примера рассматривается не особо реалистичный алгоритм отбора кандидатов на какую-то должность, который оценивается с точки зрения средств, затраченных на поиск самого лучшего кандидата. Если по пунктам, то:
- к нам на интервью последовательно в каком-то случайном порядке приходят n кандидатов
- предполагается, что у нас прямо сейчас на этой должности есть least-qualified dummy candidate, так что на первом интервью мы всегда кого-нибудь нанимаем
- у нас есть абсолютный критерий их оценки
- требуется принять на работу самого лучшего специалиста из пришедших
- за каждое интервью мы платим незначительное количество средств (c_i каких-то единиц), за увольнение прежнего сотрудника и принятие на должность нового мы платим значительную сумму денег (c_h) (не знаю, наверное, какие-то налоги)
- после интервью мы можем либо нанять человека, либо отпустить его (то есть нельзя сначала определить, кто из них самый лучший и в конце нанять только его)

И нам надо оценить, насколько хорошо с этой задачей справится вот такой алгоритм:

> for k = 1 to n:


>   проводим интервью с k-ым кандидатом


>   если k лучше, чем текущий сотрудник, то мы нанимаем его, а старого увольняем


Очевидно, что в худшем случае оценка затраченных средств равна O(c_h · n), но, если учитывать распределение входных данных, то можно посчитать average-case running time (только конкретно в данном случае, не running time, а затраченные средства).

(Тут, чтобы не было небольшой путаницы в определениях: average-case complexity может относиться в принципе к любому алгоритму, для которого мы знаем распределение входных данных. Чтобы его вычислить, нужно просто посчитать мат ожидание сложности алгоритма. А вот expected algorithm complexity уже относится только к randomized algorithms (которые таковы, что its behavior is determined not only by its input, but also by values produced by the RNG). И, если мы считаем average-case complexity для рандомизированного алгоритма, то нам надо искать мат ожидание от expected complexity. Так что в этой книжке это разные вещи, хоть и звучат идентично.)

Будем предполагать, что все варианты того, в каком порядке (относительно их «рангов») к нам приходят кандидаты равновероятны. Вычислим математическое ожидание количества раз, когда мы кого-то нанимаем на работу:

> E[X] = [Xk равно 1, если k-ого кандидата принимают на работу, 0 — иначе] = E[∑Xk] = ∑E[Xk] = ∑1/k = lg(n) + O(1)


(Вероятность а точнее мат ожидание, но тут они равны, потому что это Xk принимает значения только 0 и 1 равна 1/k, так как это вероятность того, что k-ый кандидат окажется лучшим среди всех уже пришедших кандидатов, что эквивалентно тому, что он проходит интервью.)
(Вот эти Xk называются indicator random variables и их обычно очень удобно использовать для вычислений засчёт аддитивности мат ожидания, а ещё потому, что от них очень легко находить это самое мат ожидание.)

То есть в среднем мы бы затратили O(c_h · lg(n)) для того, чтобы нанять самого лучшего сотрудника. Выглядит чуть более оптимистично, чем worst-case оценка.

Здесь, кстати, в последнем равенстве используется оценка частичной суммы гармонического ряда (это сумма 1 + 1/2 + 1/3 + …, она, кстати, расходится), о которой я не знал и и разу не слышал. Доказывается примерно вот так:

>Элементы суммы находятся на интервале [0, 1], так что мы можем разбить его на несколько интервалов и оценить отдельно: сумму элементов, принадлежащих интервалу [1, 1/2), сумму элементов из [1/2, 1/4), [1/4, 1/8) и так далее. (Ну, то есть, получается, мы всё же не весь [0, 1] разбиваем целиком, потому что нам не нужен вот этот остаточный кусочек около нуля, на котором уже нет элементов суммы.)


>Для частичной суммы ряда из n элементов разобьём [0, 1] на ⎿lg(n)⏌+1 кусок. А теперь пройдёмся по всем этим интервалам, оценивая все элементы суммы на каждом интервале самым большим элементом на этом интервале. То есть, например, для n = 5:


> i = 0 — [1, 1/2): 1 ≤ 1


> i = 1 — [1/2, 1/4): 1/2 + 1/3 ≤ 1/2 + 1/2 = 1


> i = 2 = lg(4) — [1/4, 1/8): 1/4 + 1/5 ≤ 1/4 + 1/5 + 1/6 + 1/7 ≤ 1/4 + 1/4 + 1/4 + 1/4 = 1


>


>(Каждый интервал однозначно идентифицируется своим левым концом.)


>(На последнем интервале оценка чуть более грубая, чтобы везде в сумме была единичка.)


>Ну, я не буду формально сумму эту в общем случае выписывать, там видно, что ∑1/k ≤ lg(n) + 1 для любого n, так что можно сказать, что ∑1/k − lg(n) = O(1).


(Расписал подробно, потому что сначала ничего не понял из тех объяснений, которые нашёл, а ещё потому, что это вроде как такой, довольно универсальный (или по крайней мере невырожденный) способ оценивать всякие суммы: разбить элементы на несколько групп и оценить сумму каждой отдельно.)

Exercises

5.1–2

>Напишите процедуру, которая бы вытаскивала рандомное целое число из интервала [a, b], используя только обращения к Random(0, 1).


Сразу же напрашивается очевидное решение — просуммировать b−a раз Random(0, 1), но тут есть более оптимальное решение: каждое подбрасывание монеты будет решать, в какой половине интервала будет находиться рандомное значение, которое мы хотим выбить. В таком случае сложность алгоритма (от длины промежутка) будет логарифмической в отличие от жесть линейной.

5.1–3

>Используя монетку со смещённым центром тяжести (для которой вероятность упасть орлом вверх равна p) придумать алгоритм, который бы возвращал орлов с вероятностью 1/2.


Тут вообще какое-то максимально не очевидное решение. Будем подбрасывать монетку по два раза за одну итерацию алгоритма. Можно заметить, что вероятности получить (Орёл, Решка) и (Решка, Орёл) равны p(p − 1), какой бы ни была p. (Первую комбинацию можно ассоциировать с орлом, вторую — с решкой.)

Так что нам надо сузить область возможных вариантов того, как выпадают монетки, до вот этих двух вариантов: если выпадает что-то другое (например, два орла подряд), то мы подбрасываем монетки ещё раз, до тех пор, пока не выпадет то, что нам надо. Выглядит, если честно, немного странно: выходит, что у нас, помимо «успехов» и «неудач» в последовательности испытаний появляются какие-то «осечки»? которые мы вообще не должны учитывать. Как если бы монета могла могла упасть ребром, но мы бы никак не учитывали такие подбрасывания, а просто бросали бы заново.

Вероятность выбить одного орла и одну решку равна 2p(p − 1), так что в среднем придётся подкинуть biased монетку 1/2p(p − 1) раз (см. полиномиальное распределение) для того, чтобы выбить нужную нам комбинацию и алгоритм мог бы вернуть ответ.

. . .

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

https://youtu.be/9FSVPnVLUUQ
https://youtu.be/MoUlMlCjibw
PoppyFanboy 333 304136
>>303356
Скорее всего, ни о чём, потому что я всё более уверен, что ничего из этого не произойдёт. Да и я не говорю ни о чём конкретном. Так что неважно.

>>303439
>продолжай в том же духе
Сложно придумать более херовое и неуместное пожелание.

CLRS — Chapter 5: Probabilistic Analysis and Randomized Algorithms
Звучит довольно пафосно и сложно, но на деле это (пока что) выглядит просто как дополнение к разделу про вероятность, где особо ничего нового не вводится, а просто показываются какие-то варианты практического использования теории вероятностей.

The hiring problem
Сначала там в качестве примера рассматривается не особо реалистичный алгоритм отбора кандидатов на какую-то должность, который оценивается с точки зрения средств, затраченных на поиск самого лучшего кандидата. Если по пунктам, то:
- к нам на интервью последовательно в каком-то случайном порядке приходят n кандидатов
- предполагается, что у нас прямо сейчас на этой должности есть least-qualified dummy candidate, так что на первом интервью мы всегда кого-нибудь нанимаем
- у нас есть абсолютный критерий их оценки
- требуется принять на работу самого лучшего специалиста из пришедших
- за каждое интервью мы платим незначительное количество средств (c_i каких-то единиц), за увольнение прежнего сотрудника и принятие на должность нового мы платим значительную сумму денег (c_h) (не знаю, наверное, какие-то налоги)
- после интервью мы можем либо нанять человека, либо отпустить его (то есть нельзя сначала определить, кто из них самый лучший и в конце нанять только его)

И нам надо оценить, насколько хорошо с этой задачей справится вот такой алгоритм:

> for k = 1 to n:


>   проводим интервью с k-ым кандидатом


>   если k лучше, чем текущий сотрудник, то мы нанимаем его, а старого увольняем


Очевидно, что в худшем случае оценка затраченных средств равна O(c_h · n), но, если учитывать распределение входных данных, то можно посчитать average-case running time (только конкретно в данном случае, не running time, а затраченные средства).

(Тут, чтобы не было небольшой путаницы в определениях: average-case complexity может относиться в принципе к любому алгоритму, для которого мы знаем распределение входных данных. Чтобы его вычислить, нужно просто посчитать мат ожидание сложности алгоритма. А вот expected algorithm complexity уже относится только к randomized algorithms (которые таковы, что its behavior is determined not only by its input, but also by values produced by the RNG). И, если мы считаем average-case complexity для рандомизированного алгоритма, то нам надо искать мат ожидание от expected complexity. Так что в этой книжке это разные вещи, хоть и звучат идентично.)

Будем предполагать, что все варианты того, в каком порядке (относительно их «рангов») к нам приходят кандидаты равновероятны. Вычислим математическое ожидание количества раз, когда мы кого-то нанимаем на работу:

> E[X] = [Xk равно 1, если k-ого кандидата принимают на работу, 0 — иначе] = E[∑Xk] = ∑E[Xk] = ∑1/k = lg(n) + O(1)


(Вероятность а точнее мат ожидание, но тут они равны, потому что это Xk принимает значения только 0 и 1 равна 1/k, так как это вероятность того, что k-ый кандидат окажется лучшим среди всех уже пришедших кандидатов, что эквивалентно тому, что он проходит интервью.)
(Вот эти Xk называются indicator random variables и их обычно очень удобно использовать для вычислений засчёт аддитивности мат ожидания, а ещё потому, что от них очень легко находить это самое мат ожидание.)

То есть в среднем мы бы затратили O(c_h · lg(n)) для того, чтобы нанять самого лучшего сотрудника. Выглядит чуть более оптимистично, чем worst-case оценка.

Здесь, кстати, в последнем равенстве используется оценка частичной суммы гармонического ряда (это сумма 1 + 1/2 + 1/3 + …, она, кстати, расходится), о которой я не знал и и разу не слышал. Доказывается примерно вот так:

>Элементы суммы находятся на интервале [0, 1], так что мы можем разбить его на несколько интервалов и оценить отдельно: сумму элементов, принадлежащих интервалу [1, 1/2), сумму элементов из [1/2, 1/4), [1/4, 1/8) и так далее. (Ну, то есть, получается, мы всё же не весь [0, 1] разбиваем целиком, потому что нам не нужен вот этот остаточный кусочек около нуля, на котором уже нет элементов суммы.)


>Для частичной суммы ряда из n элементов разобьём [0, 1] на ⎿lg(n)⏌+1 кусок. А теперь пройдёмся по всем этим интервалам, оценивая все элементы суммы на каждом интервале самым большим элементом на этом интервале. То есть, например, для n = 5:


> i = 0 — [1, 1/2): 1 ≤ 1


> i = 1 — [1/2, 1/4): 1/2 + 1/3 ≤ 1/2 + 1/2 = 1


> i = 2 = lg(4) — [1/4, 1/8): 1/4 + 1/5 ≤ 1/4 + 1/5 + 1/6 + 1/7 ≤ 1/4 + 1/4 + 1/4 + 1/4 = 1


>


>(Каждый интервал однозначно идентифицируется своим левым концом.)


>(На последнем интервале оценка чуть более грубая, чтобы везде в сумме была единичка.)


>Ну, я не буду формально сумму эту в общем случае выписывать, там видно, что ∑1/k ≤ lg(n) + 1 для любого n, так что можно сказать, что ∑1/k − lg(n) = O(1).


(Расписал подробно, потому что сначала ничего не понял из тех объяснений, которые нашёл, а ещё потому, что это вроде как такой, довольно универсальный (или по крайней мере невырожденный) способ оценивать всякие суммы: разбить элементы на несколько групп и оценить сумму каждой отдельно.)

Exercises

5.1–2

>Напишите процедуру, которая бы вытаскивала рандомное целое число из интервала [a, b], используя только обращения к Random(0, 1).


Сразу же напрашивается очевидное решение — просуммировать b−a раз Random(0, 1), но тут есть более оптимальное решение: каждое подбрасывание монеты будет решать, в какой половине интервала будет находиться рандомное значение, которое мы хотим выбить. В таком случае сложность алгоритма (от длины промежутка) будет логарифмической в отличие от жесть линейной.

5.1–3

>Используя монетку со смещённым центром тяжести (для которой вероятность упасть орлом вверх равна p) придумать алгоритм, который бы возвращал орлов с вероятностью 1/2.


Тут вообще какое-то максимально не очевидное решение. Будем подбрасывать монетку по два раза за одну итерацию алгоритма. Можно заметить, что вероятности получить (Орёл, Решка) и (Решка, Орёл) равны p(p − 1), какой бы ни была p. (Первую комбинацию можно ассоциировать с орлом, вторую — с решкой.)

Так что нам надо сузить область возможных вариантов того, как выпадают монетки, до вот этих двух вариантов: если выпадает что-то другое (например, два орла подряд), то мы подбрасываем монетки ещё раз, до тех пор, пока не выпадет то, что нам надо. Выглядит, если честно, немного странно: выходит, что у нас, помимо «успехов» и «неудач» в последовательности испытаний появляются какие-то «осечки»? которые мы вообще не должны учитывать. Как если бы монета могла могла упасть ребром, но мы бы никак не учитывали такие подбрасывания, а просто бросали бы заново.

Вероятность выбить одного орла и одну решку равна 2p(p − 1), так что в среднем придётся подкинуть biased монетку 1/2p(p − 1) раз (см. полиномиальное распределение) для того, чтобы выбить нужную нам комбинацию и алгоритм мог бы вернуть ответ.

. . .

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

https://youtu.be/9FSVPnVLUUQ
https://youtu.be/MoUlMlCjibw
PoppyFanboy 334 313846
Сдал матан, думаю, дропнуть вуз, наверное. Не могу больше туда ходить и пытаться что-то делать.

https://youtu.be/p4l_WC7p8eY
https://youtu.be/vRpbtf8_7XM

>>304136
Нужно исправить небольшое недоразумение.

> Сразу же напрашивается очевидное решение — просуммировать (b−a) раз Random(0, 1)


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

> каждое подбрасывание монеты будет решать, в какой половине интервала будет находиться рандомное значение, которое мы хотим выбить


Это было бы верно, если бы мы рассматривали интервалы, содержащие исключительно 2^k возможных значений, иначе получается, что «пути» до одних значений будут длиннее, чем до других. Взять хотя бы интервал [1, 3]: здесь единицу можно найти за один Random(0, 1), а двойку и тройку — только за два вызова рандома.

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

CLRS — Chapter 5.2: Indicator Random Variables (Exercises)
Содержание самой главы я уже описал в предыдущем посте: там как раз выводится формула для expected algorithm complexity для задачи про поиск наилучшего работника среди кандидатов, условие которой описано там же.

5.2–1

> Вычислить вероятность того, что в процессе выбора кандидатов будет нанят ровно один/два/n сотрудников.


Для одного всё очевидно: чтобы нанять ровно одного, нужно, чтобы первым в списке стоял самый квалифицированный, вероятность чего равна 1/n. Для n тоже легко: нужно, чтобы кандидаты стояли в порядке возрастания своей квалификации, вероятность этого равна 1/n! (из всех перестановок кандидатов нам подходит только одна).

А вот с двумя чуть сложнее. По условию мы всегда нанимаем первого же пришедшего кандидата (обозначим его как E1), после чего ищем того, кто был бы лучше него. То есть для случая с ровно двумя успешными интервью нужно, чтобы первый по счёту кандидат, который был бы лучше, чем E1 был самым лучшим вообще среди всех сотрудников, чтобы после него уже никого вместо него не могли нанять. Вероятность этого равна 1/(n − rank(E1)) в предположении, конечно, что rank(E1) != n. Таким образом:

> P = ∑(k = 1…n−1; 1/n · 1/(n−k)) = 1/n · ∑(k = 1…n−1; 1/k) = 1/n · (lg(n−1) + O(1)) = lg(n−1)/n + O(1/n)



5.2–3

>Hat-check problem: посетители какого-то условного театра сдают в гардероб свои шляпы, а потом получают их в случайном порядке. Среднее значение количества шляп, которые вернутся их владельцам — ? Вероятности того, что ровно один / хотя бы один / никто получат свои шляпы обратно — ?


Проще всего тут посчитать мат ожидание: E[X] = E[∑Xk] = ∑E[Xk] = ∑Pr{Xk = 1} = ∑1/n = 1, где Xk обращается в единицу, если k-ый человек получает свою шляпу обратно. А для решения остальных пунктов нужно (но необязательно) ввести несколько новых штук.

Формулы включения-исключения (вроде так называются):

> Пусть у нас есть конечный набор каких-то событий {Ai}i=1…n. Найдём формулы для вычисления вероятностей того, что произойдёт хотя бы одно событие из набора и ровно одно событие из него же:


> P(хотя бы одно) = ∑P(Ak) − ∑P(Ak & Aj) + ∑P(Ak & Aj & Ai) − … + (−1)^(n+1) · ∑P(A1 & … & An)


> P(ровно одно) = ∑P(Ak) − 2∑P(Ai & Aj) + … + k · (−1)^(k+1) · ∑P(A_i1 & … & A_ik) + … + n · (−1)^(n+1) · P(A1 & … & An)


>


> В суммах элементы не повторяются с учётом коммутативности «&», то есть в k-ой по счёту сумме в каждой из формул — (n | k) элементов. Они обе интуитивно очевидны на малых значениях n: достаточно взять за вероятностное пространство — плоскость, а за набор событий — как-то пересекающиеся круги Эйлера. А доказываются по индукции. Там вроде не такой уж и тривиальный индукционный переход, чтобы он прямо сразу был виден, но я как-нибудь потом попробую доказать. Сейчас не хочется.



Derangement (беспорядок) — такая перестановка, что в ней никакие элементы не остаются на своих местах.

Subfactorial of n (обозначается, внезапно, как !n) — количество всех беспорядков конечного множества из n элементов.

!n = n! · (1 − 1/1! + 1/2! − 1/3! + … + (−1)^n / n!)

> S = {s1, s2, …, sn}; Ak — множество перестановок S, в которых элемент sk остаётся на месте (при этом в Ak могут быть и такие перестановки, которые оставляют на месте какие-то другие элементы, кроме sk)


> Тогда |∪Ak| — количество перестановок, которые оставляют на месте хотя бы один элемент. Вычислить конкретное значение можно по по формуле включения-исключения:


> |∪Ak| = [вероятности того, что мы фиксируем какие-то любые k элементов, равны между собой] = (n | 1) · |A1| − (n | 2) · |A1 ∩ A2| + … + (−1)^(n+1) · (n | n) · |A1 ∩ … ∩ An| = [фиксируем k элементов = переставляем (n−k) элементов] = (n | 1) · (n − 1)! − (n | 2) · (n − 2)! + … + (−1)^(n+1) · (n | n) · (n − n)! = n! · (1/1! − 1/2! + … + (−1)^(n+1) · 1/n!)


>


> Ну и заканчиваем доказательство: !n = n! − |∪Ak|



С учётом этого всего можно решить задачку про шляпы:

> P(хотя бы один получает шляпу обратно) = 1 − !n/n!


> P(никто) = !n/n!


> P(ровно один) = n · P(A1 ∩ !A2 ∩ … ∩ !An) = n · P(!A2 ∩ … ∩ !An | A1) · P(A1) = n · !(n − 1) / (n − 1)! · (1/n) = !(n − 1) / (n − 1)!


> Ak — k-ый человек получает свою шляпу назад


> довольно интересный способ вычисления вероятности этого события



5.2–5

> Найти мат ожидание количества инверсий в массиве из n различных элементов.


Так как глава про «индикаторные» случайные величины, то тут подразумевается вот такое решение:

> Xij (i < j) — принимает значение 1, если (i, j) — инверсия; X = ∑Xij — количество инверсий в массиве


> E[Xij] = P((i, j) — инверсия) = 1/2 — так как ровно в половине случаев одно число больше, чем другое


> E[X] = ∑(i = 1…n−1; ∑(j = i+1…n; E[Xij])) = ∑(i = 1…n−1; ∑(j = i+1…n; 1)) / 2 = ∑(i = 1…n−1; n−i) / 2 = ∑(i = 1…n−1; i) / 2 = n(n−1)/4


И оно как бы простое само по себе, но догадаться до того, какую случайную величину выбрать, как по мне, — жесть не очевидно и сложно.

Пока гуглил это решение, нашёл другое, в котором использовалось условное мат ожидание и law of total expectation, о которых в CLRS рассказано не было, поэтому вот, небольшая минимальная справка:

> E[X|A] = ∑x · Pr{X=x|A}, где A — какое-то событие — conditional expectation.


>


> E[X] = E[E[X|Y]], здесь Y — это случайная величина и наружное мат ожидание проходится по значениям случайной величины Y — это law of total expectation.


>


> E[X] = ∑E[X|Ak] · Pr{Ak}, где {Ak} — счётное множество, полная система событий.


Эти две последние формулы доказываются просто, если расписать формулы для мат ожидания. Вот тут есть: https://en.wikipedia.org/wiki/Law_of_total_expectation. Если честно, не знаю, где можно применить law of total expectation как-то наглядно, потому что всё сильно ограничивается тем, что E[X] должно быть определено само по себе (то есть, грубо говоря, X и Y должны относиться к какому-то одному явлению, но описывать его какие-то его характеристики; вот, например, на вики есть пример, где X — обращается в 1, если выпавшее на костях число чётное, Y — обращается в 1, если выпало простое число и тогда E[X] = E[E[X|Y]]).

Вторая же формула с разделением вероятностного пространства уже выглядит поинтереснее. На той же вики есть вот такой пример:

> X — средняя длина жизни лампочки (различна для лампочек, произведённых на разных заводах)


> A1 — событие того, что лампочка произведена на первом заводе, A2 — на втором


> Тогда: E[X] = E[X|A1] · Pr{A1} + E[X|A2] · Pr{A2} — можно вычислить среднюю длину жизни лампочки.



Используя всё это, вот неочевидное решение той задачки про инверсии с использованием условного мат ожидания:

> Xk — количество инверсий в под-массиве A[1…k]. Тогда в зависимости от того, какой элемент встанет на (k+1)-ое место, можно вычислить количество инверсий в подмассиве A[1…k+1]: если там ноль, то X_k+1 = Xk + k, если единица, то X_k+1 = Xk + (k − 1), ну, и так далее.


> E[X_k+1|Xk = M] = [i — элемент, который встанет на (k+1)-ое место] = ∑(i = 0…k; 1/(k+1) · (i + M)) = k/2 + M


> E[X_k+1] = E[E[X_k+1|Xk]] = E[k/2 + Xk] = k/2 + E[Xk] — ну и дальше понятно, что можно вычислить E[Xn].



Сейчас это всё выглядит очевидным, но самому додуматься у меня не получилось да и, когда нашёл решения, тоже не сразу разобрался.

Чего-то слишком тяжело писать формулы текстом да и из-за их обилия всё превращается в какое-то нечитабельное месиво, поэтому буду лучше от руки писать, если где-то будет их так же много, как здесь, и прикреплять картинкой. Да и я как-то перебарщиваю с тем, насколько всё подробно описываю, это же тут ни к чему. Это последний раз, когда я занимаюсь подобным. Или нет. Не знаю.
PoppyFanboy 334 313846
Сдал матан, думаю, дропнуть вуз, наверное. Не могу больше туда ходить и пытаться что-то делать.

https://youtu.be/p4l_WC7p8eY
https://youtu.be/vRpbtf8_7XM

>>304136
Нужно исправить небольшое недоразумение.

> Сразу же напрашивается очевидное решение — просуммировать (b−a) раз Random(0, 1)


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

> каждое подбрасывание монеты будет решать, в какой половине интервала будет находиться рандомное значение, которое мы хотим выбить


Это было бы верно, если бы мы рассматривали интервалы, содержащие исключительно 2^k возможных значений, иначе получается, что «пути» до одних значений будут длиннее, чем до других. Взять хотя бы интервал [1, 3]: здесь единицу можно найти за один Random(0, 1), а двойку и тройку — только за два вызова рандома.

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

CLRS — Chapter 5.2: Indicator Random Variables (Exercises)
Содержание самой главы я уже описал в предыдущем посте: там как раз выводится формула для expected algorithm complexity для задачи про поиск наилучшего работника среди кандидатов, условие которой описано там же.

5.2–1

> Вычислить вероятность того, что в процессе выбора кандидатов будет нанят ровно один/два/n сотрудников.


Для одного всё очевидно: чтобы нанять ровно одного, нужно, чтобы первым в списке стоял самый квалифицированный, вероятность чего равна 1/n. Для n тоже легко: нужно, чтобы кандидаты стояли в порядке возрастания своей квалификации, вероятность этого равна 1/n! (из всех перестановок кандидатов нам подходит только одна).

А вот с двумя чуть сложнее. По условию мы всегда нанимаем первого же пришедшего кандидата (обозначим его как E1), после чего ищем того, кто был бы лучше него. То есть для случая с ровно двумя успешными интервью нужно, чтобы первый по счёту кандидат, который был бы лучше, чем E1 был самым лучшим вообще среди всех сотрудников, чтобы после него уже никого вместо него не могли нанять. Вероятность этого равна 1/(n − rank(E1)) в предположении, конечно, что rank(E1) != n. Таким образом:

> P = ∑(k = 1…n−1; 1/n · 1/(n−k)) = 1/n · ∑(k = 1…n−1; 1/k) = 1/n · (lg(n−1) + O(1)) = lg(n−1)/n + O(1/n)



5.2–3

>Hat-check problem: посетители какого-то условного театра сдают в гардероб свои шляпы, а потом получают их в случайном порядке. Среднее значение количества шляп, которые вернутся их владельцам — ? Вероятности того, что ровно один / хотя бы один / никто получат свои шляпы обратно — ?


Проще всего тут посчитать мат ожидание: E[X] = E[∑Xk] = ∑E[Xk] = ∑Pr{Xk = 1} = ∑1/n = 1, где Xk обращается в единицу, если k-ый человек получает свою шляпу обратно. А для решения остальных пунктов нужно (но необязательно) ввести несколько новых штук.

Формулы включения-исключения (вроде так называются):

> Пусть у нас есть конечный набор каких-то событий {Ai}i=1…n. Найдём формулы для вычисления вероятностей того, что произойдёт хотя бы одно событие из набора и ровно одно событие из него же:


> P(хотя бы одно) = ∑P(Ak) − ∑P(Ak & Aj) + ∑P(Ak & Aj & Ai) − … + (−1)^(n+1) · ∑P(A1 & … & An)


> P(ровно одно) = ∑P(Ak) − 2∑P(Ai & Aj) + … + k · (−1)^(k+1) · ∑P(A_i1 & … & A_ik) + … + n · (−1)^(n+1) · P(A1 & … & An)


>


> В суммах элементы не повторяются с учётом коммутативности «&», то есть в k-ой по счёту сумме в каждой из формул — (n | k) элементов. Они обе интуитивно очевидны на малых значениях n: достаточно взять за вероятностное пространство — плоскость, а за набор событий — как-то пересекающиеся круги Эйлера. А доказываются по индукции. Там вроде не такой уж и тривиальный индукционный переход, чтобы он прямо сразу был виден, но я как-нибудь потом попробую доказать. Сейчас не хочется.



Derangement (беспорядок) — такая перестановка, что в ней никакие элементы не остаются на своих местах.

Subfactorial of n (обозначается, внезапно, как !n) — количество всех беспорядков конечного множества из n элементов.

!n = n! · (1 − 1/1! + 1/2! − 1/3! + … + (−1)^n / n!)

> S = {s1, s2, …, sn}; Ak — множество перестановок S, в которых элемент sk остаётся на месте (при этом в Ak могут быть и такие перестановки, которые оставляют на месте какие-то другие элементы, кроме sk)


> Тогда |∪Ak| — количество перестановок, которые оставляют на месте хотя бы один элемент. Вычислить конкретное значение можно по по формуле включения-исключения:


> |∪Ak| = [вероятности того, что мы фиксируем какие-то любые k элементов, равны между собой] = (n | 1) · |A1| − (n | 2) · |A1 ∩ A2| + … + (−1)^(n+1) · (n | n) · |A1 ∩ … ∩ An| = [фиксируем k элементов = переставляем (n−k) элементов] = (n | 1) · (n − 1)! − (n | 2) · (n − 2)! + … + (−1)^(n+1) · (n | n) · (n − n)! = n! · (1/1! − 1/2! + … + (−1)^(n+1) · 1/n!)


>


> Ну и заканчиваем доказательство: !n = n! − |∪Ak|



С учётом этого всего можно решить задачку про шляпы:

> P(хотя бы один получает шляпу обратно) = 1 − !n/n!


> P(никто) = !n/n!


> P(ровно один) = n · P(A1 ∩ !A2 ∩ … ∩ !An) = n · P(!A2 ∩ … ∩ !An | A1) · P(A1) = n · !(n − 1) / (n − 1)! · (1/n) = !(n − 1) / (n − 1)!


> Ak — k-ый человек получает свою шляпу назад


> довольно интересный способ вычисления вероятности этого события



5.2–5

> Найти мат ожидание количества инверсий в массиве из n различных элементов.


Так как глава про «индикаторные» случайные величины, то тут подразумевается вот такое решение:

> Xij (i < j) — принимает значение 1, если (i, j) — инверсия; X = ∑Xij — количество инверсий в массиве


> E[Xij] = P((i, j) — инверсия) = 1/2 — так как ровно в половине случаев одно число больше, чем другое


> E[X] = ∑(i = 1…n−1; ∑(j = i+1…n; E[Xij])) = ∑(i = 1…n−1; ∑(j = i+1…n; 1)) / 2 = ∑(i = 1…n−1; n−i) / 2 = ∑(i = 1…n−1; i) / 2 = n(n−1)/4


И оно как бы простое само по себе, но догадаться до того, какую случайную величину выбрать, как по мне, — жесть не очевидно и сложно.

Пока гуглил это решение, нашёл другое, в котором использовалось условное мат ожидание и law of total expectation, о которых в CLRS рассказано не было, поэтому вот, небольшая минимальная справка:

> E[X|A] = ∑x · Pr{X=x|A}, где A — какое-то событие — conditional expectation.


>


> E[X] = E[E[X|Y]], здесь Y — это случайная величина и наружное мат ожидание проходится по значениям случайной величины Y — это law of total expectation.


>


> E[X] = ∑E[X|Ak] · Pr{Ak}, где {Ak} — счётное множество, полная система событий.


Эти две последние формулы доказываются просто, если расписать формулы для мат ожидания. Вот тут есть: https://en.wikipedia.org/wiki/Law_of_total_expectation. Если честно, не знаю, где можно применить law of total expectation как-то наглядно, потому что всё сильно ограничивается тем, что E[X] должно быть определено само по себе (то есть, грубо говоря, X и Y должны относиться к какому-то одному явлению, но описывать его какие-то его характеристики; вот, например, на вики есть пример, где X — обращается в 1, если выпавшее на костях число чётное, Y — обращается в 1, если выпало простое число и тогда E[X] = E[E[X|Y]]).

Вторая же формула с разделением вероятностного пространства уже выглядит поинтереснее. На той же вики есть вот такой пример:

> X — средняя длина жизни лампочки (различна для лампочек, произведённых на разных заводах)


> A1 — событие того, что лампочка произведена на первом заводе, A2 — на втором


> Тогда: E[X] = E[X|A1] · Pr{A1} + E[X|A2] · Pr{A2} — можно вычислить среднюю длину жизни лампочки.



Используя всё это, вот неочевидное решение той задачки про инверсии с использованием условного мат ожидания:

> Xk — количество инверсий в под-массиве A[1…k]. Тогда в зависимости от того, какой элемент встанет на (k+1)-ое место, можно вычислить количество инверсий в подмассиве A[1…k+1]: если там ноль, то X_k+1 = Xk + k, если единица, то X_k+1 = Xk + (k − 1), ну, и так далее.


> E[X_k+1|Xk = M] = [i — элемент, который встанет на (k+1)-ое место] = ∑(i = 0…k; 1/(k+1) · (i + M)) = k/2 + M


> E[X_k+1] = E[E[X_k+1|Xk]] = E[k/2 + Xk] = k/2 + E[Xk] — ну и дальше понятно, что можно вычислить E[Xn].



Сейчас это всё выглядит очевидным, но самому додуматься у меня не получилось да и, когда нашёл решения, тоже не сразу разобрался.

Чего-то слишком тяжело писать формулы текстом да и из-за их обилия всё превращается в какое-то нечитабельное месиво, поэтому буду лучше от руки писать, если где-то будет их так же много, как здесь, и прикреплять картинкой. Да и я как-то перебарщиваю с тем, насколько всё подробно описываю, это же тут ни к чему. Это последний раз, когда я занимаюсь подобным. Или нет. Не знаю.
PoppyFanboy 335 314457
https://youtu.be/lvPRs_HC7Wg
https://youtu.be/MqYL8QqlYW4
https://youtu.be/V8sM-xsxTgM

CLRS — Chapter 5.3: Randomized algorithms

В самом начале зачем-то излишне подробно разжёвывается то, что перед обработкой массива данных можно его перемешать для того, чтобы вероятностное распределение различных перестановок массива не влияло на среднюю сложность алгоритма (instead of assuming a distribution of inputs, we impose a distribution), но мне сложно представить хороший пример, где можно было бы применить это.

К тому же, я думаю, что если нам известно что-то о распределении входных данных, то лучше было бы попытаться использовать это себе на руку, а не выравнивать распределение: в случае с сортировкой массивов, если бы входные массивы перекашивало в сторону частичной отсортированности (или неотсортированности, в таком случае надо было бы предварительно перевернуть массив за Θ(n)), то можно было бы использовать какой-нибудь алгоритм сортировки, который бы делал меньше перестановок на таких массивах (ну, то есть использовать какой-нибудь merge sort, возможно, было бы более затратно даже, чем какой-нибудь bubble sort). С другой стороны, если о распределении данных неизвестно ничего, то, возможно, в случае использования какой-нибудь быстрой сортировки, которая работает за O(n^2) в худшем случае, было бы, возможно, разумно внести предварительное перемешивание массива, если данные достаточно большие и оверхед, который вносит тасовка массива, достаточно мал для того, чтобы не руинить скорость работы алгоритма.

Randomly permuting arrays

Сначала там предлагается довольно неэффективный алгоритм, который заключается в том, чтобы каждому элементу присвоить свой рандомный ранг, после чего отсортировать этот массив, используя нововведённый ранг элементов в качестве ключа. И так тут очень часто делается: вот в одной из предыдущих глав зачем-то впихнули странный неэффективный и сложный для своей задачи divide and conquer алгоритм для maximum subarray problem, хотя она решается за линейное время.

При этом ранг элементов массива лучше выбирать не из интервала [1, n], а из [1, n^3], потому как так будет больше вероятность набрать n различных значений без рероллов. Вероятность получить n различных значений будет равна P ≥ 1 − 1/n. Чтобы увидеть это, достаточно оценить вероятность того, что все ранги окажутся одинаковыми:

> Xij — событие того, что ранги элементов i и j совпадают.


> Pr{Xij} = ∑Pr{A = r & A[j] = r} = ∑Pr{A = r} · Pr{A[j] = r} = ∑[(1/n^3) · (1/n^3)] = 1/n^3


> (там сумма по всем n^3 значениям рангов r)


> И дальше просто суммируем все Pr{Xij} и оцениваем сверху эту сумму 1/n.



Не знаю точно, что нужно делать, если нескольким элементам выдался один и тот же ранг. Наверное, попробовать распределить ранги ещё раз, но уже только в рамках элементов с одинаковыми рангами. Но в таком случае даже, если мы пытаемся перемешать массив из двух элементов, шансы того, что нам выпадут два одинаковых значения из интервала [1, 2^3] равны 12.5% и это довольно много. Так что для малых значений надо, наверное, брать рандом на интервалах побольше.

Для того, чтобы проверить, что этот алгоритм производит равномерно распределённые перестановки, достаточно, на самом деле, только убедиться в том, что вероятность того, что алгоритм оставит все элементы массива на месте, равна 1/n!, так как все остальные случаи можно доказать симметрично:

> Ek — событие того, что A[k] получает k-ый по счёту ранг (среди n возможных)


> Pr{E1 ∩ … ∩ En} = Pr{E1} · Pr{E2|E1} · … · Pr{En|E1 ∩ … ∩ E_n−1} = 1/n · 1/(n−1) · … · 1/2 · 1/1 = 1/n!


> А для вероятностей остальных перестановок достаточно перемешать порядок рангов, там тоже получится 1/n!



И в этот момент можно на секунду подумать, что любой алгоритм тасовки массива, у которого вероятность получить k-ый элемент на j-ом месте равна 1/n, будет равномерно перемешивать массивы, но на деле это не так. В качестве контрпримера можно взять алгоритм, который делает циклический сдвиг массива на рандомное число позиций: он как раз удовлетворяет требованию с вероятностью 1/n, так как только при сдвиге на 0 позиций какой-то отдельный взятый элемент будет стоять на своём месте, но при этом таким алгоритмом нельзя будет получить большинство (n! − n) перестановок.

Говоря о значительно более эффективных алгоритмах, вот:

> for k = 1…n:


>   swap A[k] with A[Random(k, n)]


То есть мы просто на каждом k-ом шаге выбираем k-ый рандомный элемент перестановки: как если бы мы поочерёдно доставали из кучи случайные камни и ставили бы их в ряд в том порядке, в котором их достаём. Только здесь не используется дополнительный буфер для хранения новой перестановки и нет нужды беспокоиться о том, что при вытягивании очередного элемента из массива окажется, что мы его уже трогали.

Равномерность распределения доказывается по индукции: здесь получается, что перед каждой k-ой итерацией цикла вероятность получить любую перестановку из первых k выбранных элементов равна (n − k)! / n! (интуитивно — первые k элементов фиксированы, а остальные можно переставлять), и надо доказать, что это свойство поддерживается на протяжении всех итераций (то есть показать, что это loop invariant):

> A — событие того, что после (k−1) итераций мы выбрали перестановку (x1, …, x_k−1)


> B — событие того, что на k-ой итерации мы выбрали элемент xk


>


> Pr{A ∩ B} = Pr{A} · Pr{B|A} = [используем гипотезу] = ((n − k + 1)! / n!) · Pr{B|A} = [нужно достать какой-то конкретный элемент среди (n − (k − 1)) оставшихся] = ((n − k + 1)! / n!) · 1/(n − k + 1) = (n −k)!/n!


>


> Так что после n-ного выполнения цикла мы получим, что вероятность получить любую перестановку равна (n − n)!/n! = 1/n!



Очень важно, чтобы после k-ой итерации то, что мы накопили в первых k ячейках массива оставалось неизменным, иначе, если делать своп A[k] с A[Random(1, n)], то получится неравномерное распределение и вообще каша. (Исход работы алгоритма полностью определяется тем, какие рандомные числа выпадают по ходу его работы. И, если взять случай с n = 3, то получится 27 равновероятных троек из рандомных значений, которые никак не получается поровну разделить между 6 перестановками. Так что равномерное распределение просто физически невозможно тут.)
PoppyFanboy 335 314457
https://youtu.be/lvPRs_HC7Wg
https://youtu.be/MqYL8QqlYW4
https://youtu.be/V8sM-xsxTgM

CLRS — Chapter 5.3: Randomized algorithms

В самом начале зачем-то излишне подробно разжёвывается то, что перед обработкой массива данных можно его перемешать для того, чтобы вероятностное распределение различных перестановок массива не влияло на среднюю сложность алгоритма (instead of assuming a distribution of inputs, we impose a distribution), но мне сложно представить хороший пример, где можно было бы применить это.

К тому же, я думаю, что если нам известно что-то о распределении входных данных, то лучше было бы попытаться использовать это себе на руку, а не выравнивать распределение: в случае с сортировкой массивов, если бы входные массивы перекашивало в сторону частичной отсортированности (или неотсортированности, в таком случае надо было бы предварительно перевернуть массив за Θ(n)), то можно было бы использовать какой-нибудь алгоритм сортировки, который бы делал меньше перестановок на таких массивах (ну, то есть использовать какой-нибудь merge sort, возможно, было бы более затратно даже, чем какой-нибудь bubble sort). С другой стороны, если о распределении данных неизвестно ничего, то, возможно, в случае использования какой-нибудь быстрой сортировки, которая работает за O(n^2) в худшем случае, было бы, возможно, разумно внести предварительное перемешивание массива, если данные достаточно большие и оверхед, который вносит тасовка массива, достаточно мал для того, чтобы не руинить скорость работы алгоритма.

Randomly permuting arrays

Сначала там предлагается довольно неэффективный алгоритм, который заключается в том, чтобы каждому элементу присвоить свой рандомный ранг, после чего отсортировать этот массив, используя нововведённый ранг элементов в качестве ключа. И так тут очень часто делается: вот в одной из предыдущих глав зачем-то впихнули странный неэффективный и сложный для своей задачи divide and conquer алгоритм для maximum subarray problem, хотя она решается за линейное время.

При этом ранг элементов массива лучше выбирать не из интервала [1, n], а из [1, n^3], потому как так будет больше вероятность набрать n различных значений без рероллов. Вероятность получить n различных значений будет равна P ≥ 1 − 1/n. Чтобы увидеть это, достаточно оценить вероятность того, что все ранги окажутся одинаковыми:

> Xij — событие того, что ранги элементов i и j совпадают.


> Pr{Xij} = ∑Pr{A = r & A[j] = r} = ∑Pr{A = r} · Pr{A[j] = r} = ∑[(1/n^3) · (1/n^3)] = 1/n^3


> (там сумма по всем n^3 значениям рангов r)


> И дальше просто суммируем все Pr{Xij} и оцениваем сверху эту сумму 1/n.



Не знаю точно, что нужно делать, если нескольким элементам выдался один и тот же ранг. Наверное, попробовать распределить ранги ещё раз, но уже только в рамках элементов с одинаковыми рангами. Но в таком случае даже, если мы пытаемся перемешать массив из двух элементов, шансы того, что нам выпадут два одинаковых значения из интервала [1, 2^3] равны 12.5% и это довольно много. Так что для малых значений надо, наверное, брать рандом на интервалах побольше.

Для того, чтобы проверить, что этот алгоритм производит равномерно распределённые перестановки, достаточно, на самом деле, только убедиться в том, что вероятность того, что алгоритм оставит все элементы массива на месте, равна 1/n!, так как все остальные случаи можно доказать симметрично:

> Ek — событие того, что A[k] получает k-ый по счёту ранг (среди n возможных)


> Pr{E1 ∩ … ∩ En} = Pr{E1} · Pr{E2|E1} · … · Pr{En|E1 ∩ … ∩ E_n−1} = 1/n · 1/(n−1) · … · 1/2 · 1/1 = 1/n!


> А для вероятностей остальных перестановок достаточно перемешать порядок рангов, там тоже получится 1/n!



И в этот момент можно на секунду подумать, что любой алгоритм тасовки массива, у которого вероятность получить k-ый элемент на j-ом месте равна 1/n, будет равномерно перемешивать массивы, но на деле это не так. В качестве контрпримера можно взять алгоритм, который делает циклический сдвиг массива на рандомное число позиций: он как раз удовлетворяет требованию с вероятностью 1/n, так как только при сдвиге на 0 позиций какой-то отдельный взятый элемент будет стоять на своём месте, но при этом таким алгоритмом нельзя будет получить большинство (n! − n) перестановок.

Говоря о значительно более эффективных алгоритмах, вот:

> for k = 1…n:


>   swap A[k] with A[Random(k, n)]


То есть мы просто на каждом k-ом шаге выбираем k-ый рандомный элемент перестановки: как если бы мы поочерёдно доставали из кучи случайные камни и ставили бы их в ряд в том порядке, в котором их достаём. Только здесь не используется дополнительный буфер для хранения новой перестановки и нет нужды беспокоиться о том, что при вытягивании очередного элемента из массива окажется, что мы его уже трогали.

Равномерность распределения доказывается по индукции: здесь получается, что перед каждой k-ой итерацией цикла вероятность получить любую перестановку из первых k выбранных элементов равна (n − k)! / n! (интуитивно — первые k элементов фиксированы, а остальные можно переставлять), и надо доказать, что это свойство поддерживается на протяжении всех итераций (то есть показать, что это loop invariant):

> A — событие того, что после (k−1) итераций мы выбрали перестановку (x1, …, x_k−1)


> B — событие того, что на k-ой итерации мы выбрали элемент xk


>


> Pr{A ∩ B} = Pr{A} · Pr{B|A} = [используем гипотезу] = ((n − k + 1)! / n!) · Pr{B|A} = [нужно достать какой-то конкретный элемент среди (n − (k − 1)) оставшихся] = ((n − k + 1)! / n!) · 1/(n − k + 1) = (n −k)!/n!


>


> Так что после n-ного выполнения цикла мы получим, что вероятность получить любую перестановку равна (n − n)!/n! = 1/n!



Очень важно, чтобы после k-ой итерации то, что мы накопили в первых k ячейках массива оставалось неизменным, иначе, если делать своп A[k] с A[Random(1, n)], то получится неравномерное распределение и вообще каша. (Исход работы алгоритма полностью определяется тем, какие рандомные числа выпадают по ходу его работы. И, если взять случай с n = 3, то получится 27 равновероятных троек из рандомных значений, которые никак не получается поровну разделить между 6 перестановками. Так что равномерное распределение просто физически невозможно тут.)
PoppyFanboy 336 314806
Как вытащить рандомное подмножество заданной мощности

https://youtu.be/IJ2wzFDpFss
У него, оказывается, такой крутой голос.

https://youtu.be/7pcOCZlSuO0
https://youtu.be/KS13XGG8rAY
337 314810
>>314806
Кокой красивый и аккуратный почерк :3
PoppyFanboy !!cYLydiSRQA 338 316086
life's hard
everything sucks

Здесь должен был быть пост про что-то нормальное, но это какая-то ерунда с дебильным вступлением и неуместным и нелепым использованием английского.

Устроил небольшую попытку пройти всё за всех персонажей в TBoI, но довольно быстро перегорел. Даже кипера ещё не открыл (но там оставалось всего монет 50 закинуть в донат-машину). За лоста вообще невозможно ничего пройти, даже с правом на ошибку в каждой комнате. Не хочется больше в это играть. На самом деле, такая тупая ситуация: я вроде купил игру сразу после того, как она вышла, но так и не прошёл её на все достижения. Всё из-за того, что очень много раз удалял сейвы и начинал заново.

Зато, наконец-то, получилось хотя бы один раз доехать до концерта в death skid marks. Правда, я не сильно-то много раз пытался, да и в этот раз получилось только благодаря тому, что я в один момент очень удачно всё реролльнул, и у меня почему-то машина сама по себе чинилась, когда тёрлась о другие машины, НО ЭТО НЕВАЖНО, я доехал, все четверо выжили и им хватило билетов. Жесть крутой в этой игре саундтрек в контексте самой игры:
https://youtu.be/wmOq86mHzWQ
И такого там очень много (настолько, что в голову приходит мысль о том, что всё это AI generated). Пусть и немного однообразное, но оно просто буравит уши на протяжении всей поездки.

И жесть, конечно, игра про девочку в шляпе крутая. Так приятно управляется, такие классные локации, а ещё это игра про девочку в шляпе, которая пробивает себе путь зонтиком, разве только этого недостаточно? Пока что прошёл только город мафии почти до конца и кусочек главы про птиц-кинорежиссёров.

Единственный глупый момент — это с лотереей на кастомизации шляп. Там хоть это и сглажено немного тем, что у тебя есть две попытки крутануть рулетку заново, если тебе не понравился приз, но всё равно лучше было бы сделать какую-нибудь реализацию простого магазина, а то мне за несколько попыток выпала только одна нормальная кастомизация, остальные — какие-то некрасивые цветовые палитры для аутфита и бантик на шляпу.

https://youtu.be/0bVdx1gf630
https://youtu.be/iOtp-GQMpXg
Касане Тето

>>314810
Сложно назвать такое почерком, это почти что печатные буквы. >Да, знаю, что >почерк — система движений, с помощью которой выполняются условные графические знаки, или что-то такое, но печтаные буквы не почерк, я сказал. Единственный плюс — это то, что он более-менее аккуратный и мне его легко читать по сравнению с некоторыми чужими почерками. А в остальном он обычно причиняет только неудобства: писать быстро им не могу, а когда пытаюсь, всё превращается в нечитаемое месиво и рука быстро устаёт, а ещё.. ну, всё, но только этого достаточно: для использования по назначению он практически непригоден.

Да и к тому же у меня рука живёт немного отдельно от содержимого головы, поэтому часто делаю опечатки, которые руинят даже потенциальную аккуратность (а это единственный бонус, который даёт мне мой почерк). На компе меня спасает Ctrl+Z, но на бумаге такого вроде как нет, а замазки сохнут слишком долго, учитывая количество ошибок, которые я совершаю на N символов. Вот сейчас страшно стало, потому что я не понимаю, в какой падеж тут поставить слово «которые». И вообще, к чему оно относится: к «количеству» или к «ошибкам»? И «которые» или «которых»? Вот, что происходит при гниении содержимого головы. Правда, на самом деле, тут я немного лукавлю, ведь есть крутые модные ленточные замазки, поверх которых можно сразу же писать, но мне всё равно, писать от руки на бумаге — отстой.

Не знаю, почему так вышло, но есть подозрение что я просто слишком тупой для того, чтобы запомнить, как соединять буквы друг с другом, придать буквам наклон и сделать их хоть сколько-нибудь красивыми (хотя бы не писать строчную «д» как треугольник). Сколько-то лет назад я ещё пытался как-то исправить это, но особо ничего не выходило: рукописный текст по-прежнему выглядел как каракули первоклассника. Поэтому всё выродилось в то, во что выродилось. Кстати, ещё можно заметить рудиментарные строчные «в», «б» и «т», которые выглядят как нормальные рукописные буквы, но перемежаются с печатными их вариантами.

извините, я должен был это куда-нибудь впихнуть, потому что это уже давно было в моей голове
PoppyFanboy !!cYLydiSRQA 338 316086
life's hard
everything sucks

Здесь должен был быть пост про что-то нормальное, но это какая-то ерунда с дебильным вступлением и неуместным и нелепым использованием английского.

Устроил небольшую попытку пройти всё за всех персонажей в TBoI, но довольно быстро перегорел. Даже кипера ещё не открыл (но там оставалось всего монет 50 закинуть в донат-машину). За лоста вообще невозможно ничего пройти, даже с правом на ошибку в каждой комнате. Не хочется больше в это играть. На самом деле, такая тупая ситуация: я вроде купил игру сразу после того, как она вышла, но так и не прошёл её на все достижения. Всё из-за того, что очень много раз удалял сейвы и начинал заново.

Зато, наконец-то, получилось хотя бы один раз доехать до концерта в death skid marks. Правда, я не сильно-то много раз пытался, да и в этот раз получилось только благодаря тому, что я в один момент очень удачно всё реролльнул, и у меня почему-то машина сама по себе чинилась, когда тёрлась о другие машины, НО ЭТО НЕВАЖНО, я доехал, все четверо выжили и им хватило билетов. Жесть крутой в этой игре саундтрек в контексте самой игры:
https://youtu.be/wmOq86mHzWQ
И такого там очень много (настолько, что в голову приходит мысль о том, что всё это AI generated). Пусть и немного однообразное, но оно просто буравит уши на протяжении всей поездки.

И жесть, конечно, игра про девочку в шляпе крутая. Так приятно управляется, такие классные локации, а ещё это игра про девочку в шляпе, которая пробивает себе путь зонтиком, разве только этого недостаточно? Пока что прошёл только город мафии почти до конца и кусочек главы про птиц-кинорежиссёров.

Единственный глупый момент — это с лотереей на кастомизации шляп. Там хоть это и сглажено немного тем, что у тебя есть две попытки крутануть рулетку заново, если тебе не понравился приз, но всё равно лучше было бы сделать какую-нибудь реализацию простого магазина, а то мне за несколько попыток выпала только одна нормальная кастомизация, остальные — какие-то некрасивые цветовые палитры для аутфита и бантик на шляпу.

https://youtu.be/0bVdx1gf630
https://youtu.be/iOtp-GQMpXg
Касане Тето

>>314810
Сложно назвать такое почерком, это почти что печатные буквы. >Да, знаю, что >почерк — система движений, с помощью которой выполняются условные графические знаки, или что-то такое, но печтаные буквы не почерк, я сказал. Единственный плюс — это то, что он более-менее аккуратный и мне его легко читать по сравнению с некоторыми чужими почерками. А в остальном он обычно причиняет только неудобства: писать быстро им не могу, а когда пытаюсь, всё превращается в нечитаемое месиво и рука быстро устаёт, а ещё.. ну, всё, но только этого достаточно: для использования по назначению он практически непригоден.

Да и к тому же у меня рука живёт немного отдельно от содержимого головы, поэтому часто делаю опечатки, которые руинят даже потенциальную аккуратность (а это единственный бонус, который даёт мне мой почерк). На компе меня спасает Ctrl+Z, но на бумаге такого вроде как нет, а замазки сохнут слишком долго, учитывая количество ошибок, которые я совершаю на N символов. Вот сейчас страшно стало, потому что я не понимаю, в какой падеж тут поставить слово «которые». И вообще, к чему оно относится: к «количеству» или к «ошибкам»? И «которые» или «которых»? Вот, что происходит при гниении содержимого головы. Правда, на самом деле, тут я немного лукавлю, ведь есть крутые модные ленточные замазки, поверх которых можно сразу же писать, но мне всё равно, писать от руки на бумаге — отстой.

Не знаю, почему так вышло, но есть подозрение что я просто слишком тупой для того, чтобы запомнить, как соединять буквы друг с другом, придать буквам наклон и сделать их хоть сколько-нибудь красивыми (хотя бы не писать строчную «д» как треугольник). Сколько-то лет назад я ещё пытался как-то исправить это, но особо ничего не выходило: рукописный текст по-прежнему выглядел как каракули первоклассника. Поэтому всё выродилось в то, во что выродилось. Кстати, ещё можно заметить рудиментарные строчные «в», «б» и «т», которые выглядят как нормальные рукописные буквы, но перемежаются с печатными их вариантами.

извините, я должен был это куда-нибудь впихнуть, потому что это уже давно было в моей голове
.jpg183 Кб, 2048x1460
PoppyFanboy !!cYLydiSRQA 339 316094
Я не знаю, есть ли смысл для меня повторяться тут, да и я всё равно не помню, что со мной происходило в течение последних полутора лет, так что не смогу даже достоверно определить, повторяюсь я или нет.

Но я просто хочу ещё раз для успокоения себя сказать, что я исключительно по своей воле собрал в себе всё самое худшее, что только мог, сформировав огромного никчёмного и бесполезного слизня.
PoppyFanboy 340 316868
birthday paradox

сколько человек должно быть в комнате, чтобы с 50% вероятностью по крайней мере у двух людей был день рождения в один день?

выборку из скольки людей надо взять, чтобы можно было бы ожидать, что хотя бы два человека среди выбранных родились в один день?

ответы на эти вопросы различаются, но имеют один порядок роста, что, скорее всего, просто совпадение. но, в любом случае, смысл в том, что для проявления подобных совпадений нужно не так уж и много людей

https://youtu.be/mMscN_Xa8qw
341 316902
>>252847
Чекнул спустя полгода - всё еще держишь планку. Причем картинки разных стилей и авторов.
.jpg489 Кб, 1247x2036
PoppyFanboy 342 317067
>>316902
а куда ты пропал, кстати? или это >>252847 не ты?

Ааа, я даже не знаю, с чего начать с в каком порядке, поэтому просто пройдусь в том, в котором я это увидел.

https://youtu.be/pXwbj_ZPKwg

Короче, есть такая штука, которая называется Dynamic Connectivity Problem и заключается она в том, чтобы эффективно поддерживать вычисления на модели, состоящей из N объектов, которые каким-то образом связаны между собой. В данном случае под связью подразумевается отношение эквивалентности на множестве объектов, так что имеют место рефлексивность, симметричность и транзитивность.

Из операций над объектами есть функция connected(X, Y), проверяющая, есть ли явная или неявная транзитивная связь между объектами X и Y, и процедура создания связи между объектами union(X, Y). Так как связи у нас образуют классы эквивалентности или компоненты связности (в терминах теории графов), то вместо того, чтобы явно хранить для каждого элемента множество элементов, с которыми он связан, можно поддерживать (делать соответствующие изменения в них при вызове процедуры union) в каком-то виде хранение набора компонент связности: в таком случае будет значительно меньше избыточности.

Один из вариантов — это перенумеровать все объекты от 0 до N−1 и для каждого в массиве из N элементов указать номер компоненты связности, в которой объект находится. Изначально, когда между объектами связей нет, можно инициализировать массив просто первыми N натуральными числами, потому что каждый элемент сам по себе — компонента связности, а потом, при вызове операции union при необходимости объединять компоненты связности, присваивая всем элементам из обоих классов какой-то общий индекс. Ну, а реализация connected в таком случае сводится всего лишь к сравнению значений в двух ячейках массива.

Такой вариант решения проблемы был обозначен как eager approach, потому как вне зависимости от того, будет ли вообще когда-либо вызвана функция connected, мы запоминаем и поддерживаем актуальность связей между всеми элементами, так что вызов этой функции занимает константное время. И, как оказалось, это не просто какое-то удачное название для такого подхода, которое было дано в рамках рассказа именно об этом алгоритме, а вполне себе термин, который, правда, применяется больше не к алгоритмам, а к тому, каким образом вычислять функции.

https://en.wikipedia.org/wiki/Evaluation_strategy
Стоит отметить, что в лямбда исчислении я не разбираюсь ни на толику и трогать его сейчас не хочу.

Короче, аз ит турнз аут, функции можно вычислять по-разному и всё не ограничивается только лишь очевидными передачей значения по значению или по ссылке. В общем случае стратегия вычисления характеризуется двумя вещами: тем, в какой момент времени и каким образом вычисляются аргументы функции, и в какой момент времени вычисляется само тело функции. И вот тут как раз и появляются два основных подхода: strict evaluation и non-strict evaluation (или eager evaluation и lazy evaluation по Чёрчу, соответственно).

Strict (eager) evaluation
Это такой, более очевидный и простой для восприятия человеком (мной) вариант, когда аргументы функции вычисляются до того, как мы переходим к телу функции. Функция тут вычисляется в applicative order — это когда, грубо говоря, выражение последовательно преобразовывается редуцированием (вычислением) самой левой самой глубокой по вложенности штуки (я думаю, можно было и не упоминать, что я не знаю ничего о лямбда-исчислении):

> double (average 2 4) = double (divide (plus 2 4) 2) = [короче, просто залезаем в самую глубокую штуку, а если их несколько, то выбираем самую левую из них] = double (divide 6 2) = double 3 = 6


> // здесь double просто удваивает свой аргумент, не имеет ничего общего с типами данных


Таким образом, тело функции double будет вычислено в самую последнюю очередь.

А вот с аргументами тут может быть значительно больше вариаций (про первые три я, конечно, знал, а вот про остальные не слышал):

Call by value: значение аргумента вычисляется и присваиваются локальной переменной внутри функции, так что изменения внутри функции никак не повлияет на вызывающий код. Но тут, конечно, стоит отметить, что побочных эффектов нет только в том случае, если передаваемое значение не является ссылкой на какой-то другой объект.

Call by reference: вот это противоположный случай, когда вызванная функция получает неявную ссылку на переменную, использованную в качестве аргумента в вызывающем коде.

Call by sharing: что-то вроде промежуточного варианта, когда с помощью call by value передаётся ссылка на объект, который посредством неё можно изменять.

Call by copy-restore: вот про это я уже не слышал, это одна из вариаций на call by reference, но здесь сначала для каждого аргумента-переменной выделяется отдельное место в памяти, а затем, после окончания выполнения функции, изменённые значения переменных копируются обратно в переменные из вызывающего кода. Грубо говоря, получается call by reference, работающий с задержкой: во время выполнения функции она не влияет на вызывающий код.

Единственный хитрый момент проявляется, когда мы передаём в качестве аргументов две переменных, ссылающихся на одну и ту же ячейку в памяти (ну или просто одну и ту же переменную в качестве двух разных аргументов). В таком случае в отличие от стандартного вызова по ссылке, внутри функции эти два аргумента не будут влиять друг на друга и могут принять различные значения, и то, какое из них в итоге скопируется в изначальную переменную, зависит от порядка обработки переменных после возврата из функции.

Ну и вот это

> When the reference is passed to the callee uninitialized, this evaluation strategy may be called "call by result".


забавная штука, которая сработала бы и в дефолтном вызове по ссылке, но была бы немного неотёсанной из-за возможных промежуточных значений.

Partial evaluation: частичное вычисление функции во время компиляции программы. То есть вычисляется всё, что известно в статике. Тем самым в том числе производится оптимизация и результирующий код с частично подставленными штуками будет работать быстрее. (Это всё, если не предполагать возможности наличия побочных эффектов, которые бы потерялись после выполнения такой оптимизации во время компиляции. Насколько я понимаю, там есть какие-то способы с этим бороться, но это всё опять уходит в лямбда-исчисление, так что как-нибудь потом почитаю.)
.jpg489 Кб, 1247x2036
PoppyFanboy 342 317067
>>316902
а куда ты пропал, кстати? или это >>252847 не ты?

Ааа, я даже не знаю, с чего начать с в каком порядке, поэтому просто пройдусь в том, в котором я это увидел.

https://youtu.be/pXwbj_ZPKwg

Короче, есть такая штука, которая называется Dynamic Connectivity Problem и заключается она в том, чтобы эффективно поддерживать вычисления на модели, состоящей из N объектов, которые каким-то образом связаны между собой. В данном случае под связью подразумевается отношение эквивалентности на множестве объектов, так что имеют место рефлексивность, симметричность и транзитивность.

Из операций над объектами есть функция connected(X, Y), проверяющая, есть ли явная или неявная транзитивная связь между объектами X и Y, и процедура создания связи между объектами union(X, Y). Так как связи у нас образуют классы эквивалентности или компоненты связности (в терминах теории графов), то вместо того, чтобы явно хранить для каждого элемента множество элементов, с которыми он связан, можно поддерживать (делать соответствующие изменения в них при вызове процедуры union) в каком-то виде хранение набора компонент связности: в таком случае будет значительно меньше избыточности.

Один из вариантов — это перенумеровать все объекты от 0 до N−1 и для каждого в массиве из N элементов указать номер компоненты связности, в которой объект находится. Изначально, когда между объектами связей нет, можно инициализировать массив просто первыми N натуральными числами, потому что каждый элемент сам по себе — компонента связности, а потом, при вызове операции union при необходимости объединять компоненты связности, присваивая всем элементам из обоих классов какой-то общий индекс. Ну, а реализация connected в таком случае сводится всего лишь к сравнению значений в двух ячейках массива.

Такой вариант решения проблемы был обозначен как eager approach, потому как вне зависимости от того, будет ли вообще когда-либо вызвана функция connected, мы запоминаем и поддерживаем актуальность связей между всеми элементами, так что вызов этой функции занимает константное время. И, как оказалось, это не просто какое-то удачное название для такого подхода, которое было дано в рамках рассказа именно об этом алгоритме, а вполне себе термин, который, правда, применяется больше не к алгоритмам, а к тому, каким образом вычислять функции.

https://en.wikipedia.org/wiki/Evaluation_strategy
Стоит отметить, что в лямбда исчислении я не разбираюсь ни на толику и трогать его сейчас не хочу.

Короче, аз ит турнз аут, функции можно вычислять по-разному и всё не ограничивается только лишь очевидными передачей значения по значению или по ссылке. В общем случае стратегия вычисления характеризуется двумя вещами: тем, в какой момент времени и каким образом вычисляются аргументы функции, и в какой момент времени вычисляется само тело функции. И вот тут как раз и появляются два основных подхода: strict evaluation и non-strict evaluation (или eager evaluation и lazy evaluation по Чёрчу, соответственно).

Strict (eager) evaluation
Это такой, более очевидный и простой для восприятия человеком (мной) вариант, когда аргументы функции вычисляются до того, как мы переходим к телу функции. Функция тут вычисляется в applicative order — это когда, грубо говоря, выражение последовательно преобразовывается редуцированием (вычислением) самой левой самой глубокой по вложенности штуки (я думаю, можно было и не упоминать, что я не знаю ничего о лямбда-исчислении):

> double (average 2 4) = double (divide (plus 2 4) 2) = [короче, просто залезаем в самую глубокую штуку, а если их несколько, то выбираем самую левую из них] = double (divide 6 2) = double 3 = 6


> // здесь double просто удваивает свой аргумент, не имеет ничего общего с типами данных


Таким образом, тело функции double будет вычислено в самую последнюю очередь.

А вот с аргументами тут может быть значительно больше вариаций (про первые три я, конечно, знал, а вот про остальные не слышал):

Call by value: значение аргумента вычисляется и присваиваются локальной переменной внутри функции, так что изменения внутри функции никак не повлияет на вызывающий код. Но тут, конечно, стоит отметить, что побочных эффектов нет только в том случае, если передаваемое значение не является ссылкой на какой-то другой объект.

Call by reference: вот это противоположный случай, когда вызванная функция получает неявную ссылку на переменную, использованную в качестве аргумента в вызывающем коде.

Call by sharing: что-то вроде промежуточного варианта, когда с помощью call by value передаётся ссылка на объект, который посредством неё можно изменять.

Call by copy-restore: вот про это я уже не слышал, это одна из вариаций на call by reference, но здесь сначала для каждого аргумента-переменной выделяется отдельное место в памяти, а затем, после окончания выполнения функции, изменённые значения переменных копируются обратно в переменные из вызывающего кода. Грубо говоря, получается call by reference, работающий с задержкой: во время выполнения функции она не влияет на вызывающий код.

Единственный хитрый момент проявляется, когда мы передаём в качестве аргументов две переменных, ссылающихся на одну и ту же ячейку в памяти (ну или просто одну и ту же переменную в качестве двух разных аргументов). В таком случае в отличие от стандартного вызова по ссылке, внутри функции эти два аргумента не будут влиять друг на друга и могут принять различные значения, и то, какое из них в итоге скопируется в изначальную переменную, зависит от порядка обработки переменных после возврата из функции.

Ну и вот это

> When the reference is passed to the callee uninitialized, this evaluation strategy may be called "call by result".


забавная штука, которая сработала бы и в дефолтном вызове по ссылке, но была бы немного неотёсанной из-за возможных промежуточных значений.

Partial evaluation: частичное вычисление функции во время компиляции программы. То есть вычисляется всё, что известно в статике. Тем самым в том числе производится оптимизация и результирующий код с частично подставленными штуками будет работать быстрее. (Это всё, если не предполагать возможности наличия побочных эффектов, которые бы потерялись после выполнения такой оптимизации во время компиляции. Насколько я понимаю, там есть какие-то способы с этим бороться, но это всё опять уходит в лямбда-исчисление, так что как-нибудь потом почитаю.)
343 317075
>>317067
Я это. Просто захожу в /dr редко. Проверяю только тебя и Ююко.
PoppyFanboy 344 317081
>>317075
по нятно

>>317067
Так вот, к чему это всё вообще было.

https://youtu.be/Y6-ahJvHIbs

Последний способ вычисления аргументов интересен тем, что он имеет очень крутое применение: Futamura projections. Суть заключается в том, чтобы использовать механизм partial evaluation для создания компилятора компиляторов на основе интерпретатора.

Вот тут https://www.gwern.net/docs/cs/2009-gluck.pdf во второй главе есть формальные описания того, что такое интерпретатор, компилятор, специализатор (штука, которая реализует partial evaluation) и компилятор компиляторов (compiler-compiler), но тут тот случай, когда формальные обозначения особо не помогают нормально разобраться.

http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html
Перерисовал картинки в одну кучу, чтобы было лучше понятно.

Поэтому проще абстрагироваться от всего этого и представить, что мы работаем не с программами, а с механизмами для чеканки монет.

Пусть у нас есть простой автомат, который штампует гравировку для одноцентовых монеток на болванках. В таком случае автомат — это исполняемый файл, а болванки — входные данные, поступающие динамически. Тем не менее, одних таких монеток нам недостаточно и мы хотели бы штамповать ещё и четвертаки. Можно было бы построить и такой механизм тоже, но в перспективе, если нам в будущем потребуется штамповать монеты самых разных номиналов, это не очень выгодная стратегия: каждый раз тратить время на то, чтобы разрабатывать новую машину с нуля — невыгодно.

Поэтому нам естественным образом приходит гениальная идея: сделать машину, которая может штамповать что угодно по заданному описанию. Очевидные аналогии: механизм, производящий только одноцентовые монеты, — fixed-program computer, ну, или просто программа, принимающая на вход монеты; чудо-механизм, чеканящий что угодно — stored-program computer или интерпретатор, где описания монет — это программы.

Конечно, такие продвинутые механизмы — это здорово, но они будут работать значительно медленнее, чем их однозадачные вариации с фиксированным номиналом монет. К тому же внезапно мы понимаем, что мы не так уж и часто меняем программы (описания монет) в этих интерпретаторах, так что они как правило просто стоят с заткнутыми слотами (вот как на картинке: пока печатаем партию одноцентовых монет, инструкция/программа не вытаскивается из интерпретатора). Тем не менее, самим разрабатывать fixed-program механизмы для каждого вида монеты нам тоже не хотелось бы, поэтому мы заставим специализатор сделать это за нас: если засунуть в его первый вход интерпретатор, а во второй — программу, которую мы хотели бы захардкодить для интерпретатора, то на выходе мы получим как раз нужную нам fixed-program штуку, которая печатает строго монеты заданного номинала. Это first Futamura projection — создание исполняемого файла (компиляция) на основе интерпретатора.

С другой стороны, интерпретаторов тоже может быть несколько: допустим, у нас появился более эффективный интерпретатор или тот, который по тем же инструкциям печатает монетки с меньшим процентом брака или просто делает это более качественно. И, вероятно, мы хотим использовать разные интерпретаторы для разных целей, так что нам неплохо было бы обзавестись несколькими вариантами компиляторов. (Эм, не знаю, допустим, когда печатаем монеты, используя какие-то дорогие материалы, нам бы хотелось, чтобы брака было как можно меньше, и мы готовы пожертвовать ради этого временем. С другой стороны, простые монеты нам бы хотелось чеканить быстро и приемлемый процент брака там выше.)

Для этого нам всего лишь надо засунуть в специализатор сам специализатор вместе с каким-нибудь интерпретатором и на выходе из этой штуки мы получим специализатор с фиксированным интерпретатором и единственным входом, в который запихиваются программы. Это уже создание компиляторов и second Futamura projection.

Наконец, можно заметить, что в последней нашей собранной машине один из слотов статически занят специализатором, поэтому мы уже по третьему кругу оптимизируем это, засовывая в специализатор дважды самого в себя. Это third Futamura projection: на выходе этой штуки мы получаем компилятор компиляторов, который принимает на вход интерпретаторы.

Короче, таким образом:
1. специализатор(интерпретатор, программа) => исполняемый файл — принимает на вход динамические данные — выполняет программу
2. специализатор(специализатор, интерпретатор) => компилятор — принимает на вход программы — возвращает исполняемый файл (скомпилированный на основе заданного интерпретатора)
3. специализатор(специализатор, специализатор) => компилятор компиляторов — принимает на вход интерпретаторы — возвращает компилятор для заданного интерпретатора

Ну, и получается такая цепочка: compiler-compiler => compiler => executable.

Вроде как выгода в том, что интерпретатор значительно проще писать, чем компилятор, а специализатор уж тем более довольно легко сделать, так что можно получить компилятор значительно меньшими усилиями, чем если бы мы писали его сами с нуля. Там наверняка есть какие-то подводные камни, из-за которых всё не так просто реализовывается, но в общих чертах получается вот такая штука.
PoppyFanboy 344 317081
>>317075
по нятно

>>317067
Так вот, к чему это всё вообще было.

https://youtu.be/Y6-ahJvHIbs

Последний способ вычисления аргументов интересен тем, что он имеет очень крутое применение: Futamura projections. Суть заключается в том, чтобы использовать механизм partial evaluation для создания компилятора компиляторов на основе интерпретатора.

Вот тут https://www.gwern.net/docs/cs/2009-gluck.pdf во второй главе есть формальные описания того, что такое интерпретатор, компилятор, специализатор (штука, которая реализует partial evaluation) и компилятор компиляторов (compiler-compiler), но тут тот случай, когда формальные обозначения особо не помогают нормально разобраться.

http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html
Перерисовал картинки в одну кучу, чтобы было лучше понятно.

Поэтому проще абстрагироваться от всего этого и представить, что мы работаем не с программами, а с механизмами для чеканки монет.

Пусть у нас есть простой автомат, который штампует гравировку для одноцентовых монеток на болванках. В таком случае автомат — это исполняемый файл, а болванки — входные данные, поступающие динамически. Тем не менее, одних таких монеток нам недостаточно и мы хотели бы штамповать ещё и четвертаки. Можно было бы построить и такой механизм тоже, но в перспективе, если нам в будущем потребуется штамповать монеты самых разных номиналов, это не очень выгодная стратегия: каждый раз тратить время на то, чтобы разрабатывать новую машину с нуля — невыгодно.

Поэтому нам естественным образом приходит гениальная идея: сделать машину, которая может штамповать что угодно по заданному описанию. Очевидные аналогии: механизм, производящий только одноцентовые монеты, — fixed-program computer, ну, или просто программа, принимающая на вход монеты; чудо-механизм, чеканящий что угодно — stored-program computer или интерпретатор, где описания монет — это программы.

Конечно, такие продвинутые механизмы — это здорово, но они будут работать значительно медленнее, чем их однозадачные вариации с фиксированным номиналом монет. К тому же внезапно мы понимаем, что мы не так уж и часто меняем программы (описания монет) в этих интерпретаторах, так что они как правило просто стоят с заткнутыми слотами (вот как на картинке: пока печатаем партию одноцентовых монет, инструкция/программа не вытаскивается из интерпретатора). Тем не менее, самим разрабатывать fixed-program механизмы для каждого вида монеты нам тоже не хотелось бы, поэтому мы заставим специализатор сделать это за нас: если засунуть в его первый вход интерпретатор, а во второй — программу, которую мы хотели бы захардкодить для интерпретатора, то на выходе мы получим как раз нужную нам fixed-program штуку, которая печатает строго монеты заданного номинала. Это first Futamura projection — создание исполняемого файла (компиляция) на основе интерпретатора.

С другой стороны, интерпретаторов тоже может быть несколько: допустим, у нас появился более эффективный интерпретатор или тот, который по тем же инструкциям печатает монетки с меньшим процентом брака или просто делает это более качественно. И, вероятно, мы хотим использовать разные интерпретаторы для разных целей, так что нам неплохо было бы обзавестись несколькими вариантами компиляторов. (Эм, не знаю, допустим, когда печатаем монеты, используя какие-то дорогие материалы, нам бы хотелось, чтобы брака было как можно меньше, и мы готовы пожертвовать ради этого временем. С другой стороны, простые монеты нам бы хотелось чеканить быстро и приемлемый процент брака там выше.)

Для этого нам всего лишь надо засунуть в специализатор сам специализатор вместе с каким-нибудь интерпретатором и на выходе из этой штуки мы получим специализатор с фиксированным интерпретатором и единственным входом, в который запихиваются программы. Это уже создание компиляторов и second Futamura projection.

Наконец, можно заметить, что в последней нашей собранной машине один из слотов статически занят специализатором, поэтому мы уже по третьему кругу оптимизируем это, засовывая в специализатор дважды самого в себя. Это third Futamura projection: на выходе этой штуки мы получаем компилятор компиляторов, который принимает на вход интерпретаторы.

Короче, таким образом:
1. специализатор(интерпретатор, программа) => исполняемый файл — принимает на вход динамические данные — выполняет программу
2. специализатор(специализатор, интерпретатор) => компилятор — принимает на вход программы — возвращает исполняемый файл (скомпилированный на основе заданного интерпретатора)
3. специализатор(специализатор, специализатор) => компилятор компиляторов — принимает на вход интерпретаторы — возвращает компилятор для заданного интерпретатора

Ну, и получается такая цепочка: compiler-compiler => compiler => executable.

Вроде как выгода в том, что интерпретатор значительно проще писать, чем компилятор, а специализатор уж тем более довольно легко сделать, так что можно получить компилятор значительно меньшими усилиями, чем если бы мы писали его сами с нуля. Там наверняка есть какие-то подводные камни, из-за которых всё не так просто реализовывается, но в общих чертах получается вот такая штука.
PoppyFanboy 345 323080
https://youtu.be/rzyMjBu7rYw
https://youtu.be/HPXvjH3SRqs

Я не знаю, что сюда надо писать, я не знаю, что сюда можно писать. У меня стала чаще болеть голова, нет режима сна и я не знаю, нужен ли он мне. Часто чувствую сонливость посреди дня. Я хочу послушать что-нибудь, кроме нероче и gybe, где были бы элементы спокен ворда, но мне лень искать это что-то. Ютуб предложил послушать какую-то группу модератор, меня устраивает. Я пью кофе, потому что оно всегда стоит на столе на кухне, а за чаем надо тянуться и открывать шкаф, добавляю очень много сахара и это плохо, но пью пепси без сахара, потому что чувствую, что выпивать полтора литра сахарной воды за один раз - это не совсем правильно. А если растянуть это на несколько дней порциями по 200 мл, то это уже не кажется таким уж страшным. На вкус ужасно, но без него совсем плохо.

Мне рассказали про то, как эффективно поддерживать систему непересекающихся множеств (снм): нужен массив, который определяет, что элемент множества k связан с элементом a[k], так что получается несколько таких древовидных структур. Чтобы определить, находятся ли элементы в одном множестве, нужно пройтись вверх по деревьям и проверить, совпадают ли корни.

А ещё есть операция объединения, которая коннектит два множества с помощью связи между двумя элементами: в этой реализации снм она коннектит корень одного дерева к корню другого. Чтобы избежать вырожденных случаев с длинными деревьями, надо коннектить меньшее по количеству элементов дерево к большему: в таком случае глубина любого элемента будет где-то порядка lgN, потому что при выполнении объединения глубина увеличивается только на 1 и этих объединений можно сделать разве что lgN, так как она увеличивает размер дерева, в котором находится таргетный элемент как минимум в два раза.

В реализации достаточно хранить в корнях размеры деревьев и апдейтить их при объединении. Поэтому объединение и проверка на вхождение в одну компоненту связности требуют только логарифм по времени. Это всё можно ещё сильнее оптимизировать, если по ходу того, как поднимаешься вверх к корню, сжимать эту ветку дерева, перекидывая ссылки с родителей на дедушек:

> while x != a[x]:


>   a[x] = a[a[x]]


>   x = a[x]


Таким образом x1 → x2 → x3 → x4 → head сжимается сначала в [x1, x2] → x3 → x4 → head, а затем в [x4, [x1, x2] → x3] → head. Получается, каждый раз, когда вызывается функция поиска корня, какая-то ветка сжимается вдвое и это вносит только маленький оверхед в виде дополнительного обращения к массиву. Можно пойти ещё дальше и плющить деревья максимально сильно, добавив дополнительный травёрс от элемента к корню, который перекидывает все связи на корень.

А ещё есть какое-то предложение хопкрофта-ульмана, которое говорит о том, что этот алгоритм со всеми улучшениями работает на N объектах и M операциях за O(N + Mlg⃰N) обращений к массиву, но я как-то не совсем понимаю, что под этим имеется в виду и откуда здесь взялся первый член N, видимо, это стоимость инициализации снм, когда каждому элементу сопоставляется он же сам в массиве со ссылками. А модный логарифм со звёздочкой - это iterated logarithm - функция, которая показывает, сколько раз надо применить логарифм к числу, чтобы оно стало меньше или равно нулю. Всё, что о ней тут надо знать, это то, что она растёт очень медленно, так что можно считать, что алгоритм работает почти линейно, но при этом вроде как доказано, что тру линейного алгоритма не существует.

Ещё мне рассказали про то, что это всё можно использовать для решения percolation problem - это когда есть поле из клеток, некоторые из которых закрашены, сверху льётся вода, которая растекается только по смежным пустым клеткам в четыре стороны, и надо определить, стекает ли вода с потолка до дна. Для этого можно использовать как раз снм, в котором просто объединять смежные пустые клетки. А потом проверять, доходит ли вода с какой-нибудь верхней клетки до какой-нибудь нижней. Последняя проверка может стать боттлнеком, потому что требует N^2 проверок, но можно этого избежать, если добавить две фиктивные вершины, сверху и снизу, которые коннектятся к свободным клеткам пола и потолка, и просто проверять связность между ними. Но в таком случае может наблюдаться забавный эффект: если рассмотреть какое-нибудь такое поле:

> |⻭⻭ ⻭|


> |⻭⻭  |


> |  ⻭ |


> | ⻭⻭ |


то из-за того, что верхняя фиктивная вершина окажется присоединена к пустой клетке с потолка, а нижняя - к левой и правой клеткам на дне, то получится транзитивная связь между дыркой в потолке и вот этой пещерой снизу-слева. Из-за этого, если мы захотим показать, как вода заливает это поле, и мы для каждой пустой клетки будем проверять связь с верхней фиктивной вершиной, то у нас зальётся водой всё поле. Очевидное, но, скорее всего, не самое эффективное решение - это инициализировать вторую снм, в которой не будет нижней фиктивной вершины.

Кстати, если построить график зависимости вероятности протекания такой системы от доли открытых клеток, то выяснится, что там есть точка, в которой происходит очень резкий скачок от нулевой вероятности к 100% вероятности. Математически это число никто не вычислил, но методом монте карло можно для достаточно большого поля достаточно большое количество раз провести такой эксперимент: начинаем с полностью закрашенного поля, а потом рандомно открываем клетки до тех пор, пока система не начинает протекать. Результаты запоминаем, а потом просто считаем среднее значение. Получится что-то вроде 0.59 - это доля открытых клеток. А ещё можно вычислить стандартное отклонение (корень из дисперсии), который покажет, насколько резок вот этот переход от нулевой вероятности к единичной. И потом ещё можно вычислить 95% confidence interval, в котором с большой вероятностью находится тру среднее значение: mean ± stddev · 1.96 / √N, где N - количество экспериментов, а 1.96 - магическая константа. Чем она больше, тем больше вероятность, потому что увеличивается разброс, для 95% - это 1.96, для 90% - это 1.645, для 98% - 2.33. Не знаю, откуда берутся эти числа, я их просто нашёл в интернете.

Ещё возможные применения снм:
- если у нас есть отметки о том, как люди в какой-то абстрактной соц сети добавляют друг друга в френды, то, так как мы храним для каждого дерева его размер, можно отследить момент, когда все станут транзитивными друзьями друг друга.

- если для каждого корня дерева хранить максимальный индекс среди элементов, содержащихся в дереве, и апдейтить его так же, как и размеры деревьев, то можно научиться быстро находить следующее большее число в множестве изначально последовательных чисел, из которого постепенно убирают элементы: просто храним то, какие числа удалены и связываем числа в чанки удалённых элементов с помощью снм. Чтобы найти следующее большее неудалённое число, увеличиваем число на единицу и, если число удалено, то находим его корень и в корне смотрим максимальный индекс в этом поддереве.

Я не хочу выкладывать код, потому что он некрасивый. В штуке, которая проверяла метод монте карло для percolation problem была автоматическая коде стайл проверка и она мне сказала некоторые поля, значения которых не модифицируются, объявлять как final и, наверное, это правильно.

Научный подход - это, когда на основе наблюдений из реального мира строишь теоретическую модель, делаешь предсказания с помощью модели и сверяешь их с новыми наблюдениями. Итеративно улучшаешь свою модель до тех пор, пока тебя не будет устраивать достоверность модели.

Я раньше не задумывался об этом, но большую тетту можно определить через предел частного функций: он должен сходиться к какой-нибудь ненулевой константе. То есть эквивалентность функций - это частный случай для большой тетты.

Алгоритмы квадратичной сложности, применённые к в 10 раз более объёмным входным данным, будут работать в 10 раз медленнее на компьютерах в 10 раз более мощных.

log-log scale график делает из мономов прямые линии. Если сравнить на таком графике разные стандартные функции, описывающие сложность алгоритмов, то окажется, что график NlgN очень сильно близок к графику N, а график lgN похож на график константы. Я не думал, что между N^2 и NlgN есть такая большая разница.
PoppyFanboy 345 323080
https://youtu.be/rzyMjBu7rYw
https://youtu.be/HPXvjH3SRqs

Я не знаю, что сюда надо писать, я не знаю, что сюда можно писать. У меня стала чаще болеть голова, нет режима сна и я не знаю, нужен ли он мне. Часто чувствую сонливость посреди дня. Я хочу послушать что-нибудь, кроме нероче и gybe, где были бы элементы спокен ворда, но мне лень искать это что-то. Ютуб предложил послушать какую-то группу модератор, меня устраивает. Я пью кофе, потому что оно всегда стоит на столе на кухне, а за чаем надо тянуться и открывать шкаф, добавляю очень много сахара и это плохо, но пью пепси без сахара, потому что чувствую, что выпивать полтора литра сахарной воды за один раз - это не совсем правильно. А если растянуть это на несколько дней порциями по 200 мл, то это уже не кажется таким уж страшным. На вкус ужасно, но без него совсем плохо.

Мне рассказали про то, как эффективно поддерживать систему непересекающихся множеств (снм): нужен массив, который определяет, что элемент множества k связан с элементом a[k], так что получается несколько таких древовидных структур. Чтобы определить, находятся ли элементы в одном множестве, нужно пройтись вверх по деревьям и проверить, совпадают ли корни.

А ещё есть операция объединения, которая коннектит два множества с помощью связи между двумя элементами: в этой реализации снм она коннектит корень одного дерева к корню другого. Чтобы избежать вырожденных случаев с длинными деревьями, надо коннектить меньшее по количеству элементов дерево к большему: в таком случае глубина любого элемента будет где-то порядка lgN, потому что при выполнении объединения глубина увеличивается только на 1 и этих объединений можно сделать разве что lgN, так как она увеличивает размер дерева, в котором находится таргетный элемент как минимум в два раза.

В реализации достаточно хранить в корнях размеры деревьев и апдейтить их при объединении. Поэтому объединение и проверка на вхождение в одну компоненту связности требуют только логарифм по времени. Это всё можно ещё сильнее оптимизировать, если по ходу того, как поднимаешься вверх к корню, сжимать эту ветку дерева, перекидывая ссылки с родителей на дедушек:

> while x != a[x]:


>   a[x] = a[a[x]]


>   x = a[x]


Таким образом x1 → x2 → x3 → x4 → head сжимается сначала в [x1, x2] → x3 → x4 → head, а затем в [x4, [x1, x2] → x3] → head. Получается, каждый раз, когда вызывается функция поиска корня, какая-то ветка сжимается вдвое и это вносит только маленький оверхед в виде дополнительного обращения к массиву. Можно пойти ещё дальше и плющить деревья максимально сильно, добавив дополнительный травёрс от элемента к корню, который перекидывает все связи на корень.

А ещё есть какое-то предложение хопкрофта-ульмана, которое говорит о том, что этот алгоритм со всеми улучшениями работает на N объектах и M операциях за O(N + Mlg⃰N) обращений к массиву, но я как-то не совсем понимаю, что под этим имеется в виду и откуда здесь взялся первый член N, видимо, это стоимость инициализации снм, когда каждому элементу сопоставляется он же сам в массиве со ссылками. А модный логарифм со звёздочкой - это iterated logarithm - функция, которая показывает, сколько раз надо применить логарифм к числу, чтобы оно стало меньше или равно нулю. Всё, что о ней тут надо знать, это то, что она растёт очень медленно, так что можно считать, что алгоритм работает почти линейно, но при этом вроде как доказано, что тру линейного алгоритма не существует.

Ещё мне рассказали про то, что это всё можно использовать для решения percolation problem - это когда есть поле из клеток, некоторые из которых закрашены, сверху льётся вода, которая растекается только по смежным пустым клеткам в четыре стороны, и надо определить, стекает ли вода с потолка до дна. Для этого можно использовать как раз снм, в котором просто объединять смежные пустые клетки. А потом проверять, доходит ли вода с какой-нибудь верхней клетки до какой-нибудь нижней. Последняя проверка может стать боттлнеком, потому что требует N^2 проверок, но можно этого избежать, если добавить две фиктивные вершины, сверху и снизу, которые коннектятся к свободным клеткам пола и потолка, и просто проверять связность между ними. Но в таком случае может наблюдаться забавный эффект: если рассмотреть какое-нибудь такое поле:

> |⻭⻭ ⻭|


> |⻭⻭  |


> |  ⻭ |


> | ⻭⻭ |


то из-за того, что верхняя фиктивная вершина окажется присоединена к пустой клетке с потолка, а нижняя - к левой и правой клеткам на дне, то получится транзитивная связь между дыркой в потолке и вот этой пещерой снизу-слева. Из-за этого, если мы захотим показать, как вода заливает это поле, и мы для каждой пустой клетки будем проверять связь с верхней фиктивной вершиной, то у нас зальётся водой всё поле. Очевидное, но, скорее всего, не самое эффективное решение - это инициализировать вторую снм, в которой не будет нижней фиктивной вершины.

Кстати, если построить график зависимости вероятности протекания такой системы от доли открытых клеток, то выяснится, что там есть точка, в которой происходит очень резкий скачок от нулевой вероятности к 100% вероятности. Математически это число никто не вычислил, но методом монте карло можно для достаточно большого поля достаточно большое количество раз провести такой эксперимент: начинаем с полностью закрашенного поля, а потом рандомно открываем клетки до тех пор, пока система не начинает протекать. Результаты запоминаем, а потом просто считаем среднее значение. Получится что-то вроде 0.59 - это доля открытых клеток. А ещё можно вычислить стандартное отклонение (корень из дисперсии), который покажет, насколько резок вот этот переход от нулевой вероятности к единичной. И потом ещё можно вычислить 95% confidence interval, в котором с большой вероятностью находится тру среднее значение: mean ± stddev · 1.96 / √N, где N - количество экспериментов, а 1.96 - магическая константа. Чем она больше, тем больше вероятность, потому что увеличивается разброс, для 95% - это 1.96, для 90% - это 1.645, для 98% - 2.33. Не знаю, откуда берутся эти числа, я их просто нашёл в интернете.

Ещё возможные применения снм:
- если у нас есть отметки о том, как люди в какой-то абстрактной соц сети добавляют друг друга в френды, то, так как мы храним для каждого дерева его размер, можно отследить момент, когда все станут транзитивными друзьями друг друга.

- если для каждого корня дерева хранить максимальный индекс среди элементов, содержащихся в дереве, и апдейтить его так же, как и размеры деревьев, то можно научиться быстро находить следующее большее число в множестве изначально последовательных чисел, из которого постепенно убирают элементы: просто храним то, какие числа удалены и связываем числа в чанки удалённых элементов с помощью снм. Чтобы найти следующее большее неудалённое число, увеличиваем число на единицу и, если число удалено, то находим его корень и в корне смотрим максимальный индекс в этом поддереве.

Я не хочу выкладывать код, потому что он некрасивый. В штуке, которая проверяла метод монте карло для percolation problem была автоматическая коде стайл проверка и она мне сказала некоторые поля, значения которых не модифицируются, объявлять как final и, наверное, это правильно.

Научный подход - это, когда на основе наблюдений из реального мира строишь теоретическую модель, делаешь предсказания с помощью модели и сверяешь их с новыми наблюдениями. Итеративно улучшаешь свою модель до тех пор, пока тебя не будет устраивать достоверность модели.

Я раньше не задумывался об этом, но большую тетту можно определить через предел частного функций: он должен сходиться к какой-нибудь ненулевой константе. То есть эквивалентность функций - это частный случай для большой тетты.

Алгоритмы квадратичной сложности, применённые к в 10 раз более объёмным входным данным, будут работать в 10 раз медленнее на компьютерах в 10 раз более мощных.

log-log scale график делает из мономов прямые линии. Если сравнить на таком графике разные стандартные функции, описывающие сложность алгоритмов, то окажется, что график NlgN очень сильно близок к графику N, а график lgN похож на график константы. Я не думал, что между N^2 и NlgN есть такая большая разница.
.jpg408 Кб, 858x1200
PoppyFanboy 346 323090
>>323080

>iterated logarithm - функция, которая показывает, сколько раз надо применить логарифм к числу, чтобы оно стало меньше или равно нулю


Опечатался. Меньше ли равно не нулю, а единице.

https://youtu.be/7zwCIz-Ohn4
.jpg229 Кб, 1246x2048
PoppyFanboy 347 323378
https://youtu.be/PShsPWm9r14
https://youtu.be/kZnJSw2cNLc

Сегодня мне рассказали про то, что такое стек и очередь, я, конечно, знал это, но никогда сам не реализовывал и не вдавался в детали того, как это можно было бы сделать. Стек можно реализовать односвязным списком, от которого можно хранить только голову и при вставке/удалении просто менять голову списка.

Есть ещё реализация через массив, но только надо грамотно ресайзить его, когда элементы перестают в него помещаться. Если по-наивному увеличивать на единицу каждый раз, когда нам перестаёт хватать места, то push N раз займёт квадратичное время. Поэтому лучше удваивать размер массива. Тогда выходит, что за N push'ов мы обратимся к массиву где-то N + (1 + 2 + 4 + 8 + ... + N) = N + 2^(lgN + 1) = 3N раз. А всё потому, что к тому моменту, когда нам надо будет увеличивать массив длины N вдвое, мы уже обратились N раз к нему, чтобы сделать push и ещё где-то суммарно N обращений ушло на другие удваивания.

Так что в получается, что push работает в среднем за константное время. Это называется amortized analysis:

>The basic idea is that a worst-case operation can alter the state in such a way that the worst case cannot occur again for a long time, thus "amortizing" its cost.



А чтобы зря не занимать место, нужно ещё сокращать массив в размере, причём делать это, когда занято четверть или меньше от всего массива, потому что если сокращать на половине заполненности, то можно делать трешинг push-pop-push-pop-... массив будет постоянно то увеличиваться, то уменьшаться, и последовательность из N таких операций займёт квадратичное время. Если брать четверть, то тут то же самое, amortized analysis показывает, что N pop'ов будут работать за линейное время.

Если вдваваться в дурацкие никому не нужные подробности, то узел связного списка будет занимать приблизительно 16 байт (оверхед для объекта в джаве) + 8 байт (на ссылку на некст узел) + 8 байт (на ссылку на данные) = 32 байт. Так что весь стек будет занимать ~32N байт. В случае с массивом там использование памяти будет между ~8N при полной заполненности и ~32N при 25%-заполненности. То есть в теории тут немного лучше по памяти, потому что не надо дополнительно хранить поинтеры, но при этом в худшем случае push/pop работают за линейное время, тогда как в связных списках там константное время - это worst case. Правда, я не знаю, действительно ли поинтеры списка так сильно на что-то влияют в плане использования памяти.

С очередями примерно то же самое, но там надо хранить два указателя: на голову и на хвост списка, и добавлять в конец, но забирать из начала. А в реализации с массивом там всё немного сложнее опять же, из-за того, что вместо одного - два индекса, которые ходят по массиву. Но в остальном то же самое. Единственное, там надо обработать специальный случай, когда массив заполнен на 25%-50% и мы дошли до его конца: [ null, null, null, null, null, 1, 2, 3 ] в таком случае надо просто переместить значения влево.

Ещё мне рассказали про то, что можно реализовать очередь с помощью двух стеков. При этом это можно сделать двумя способами: с медленными enqueue, но быстрыми dequeue (в первом стеке храним элементы в порядке [X1, ..., XN], когда надо добавить новый элемент в очередь, сначала перебрасываем всё во второй стек и при этом всё переворачивается [XN, ..., X1], потом добавляем новый элемент XN+1 в первый пустой стек и после этого возвращаем элементы из второго стека в первый, куда они добавятся перед XN+1: [X1, ..., XN, XN+1]) и наоборот, с медленными dequeue (добавляем элементы в первый стек, если надо достать элемент из очереди, то достаём его из второго стека, если тот не пустой, а если пустой, то перебрасываем туда элементы из первого и снимаем верхний элемент с этого второго стека; это работает, потому что, опять же, когда перебрасываем из одного стека в другой, всё переворачивается и становится в обратном порядке).

Ещё мне рассказали, про 2-sum problem, которую можно решить перебором за N^2, сортировкой + бинарным поиском за NlgN (сначала сортируем, а потом перебираем первый элемент, а к нему ищем за lgN второй) или просто за линейное время при условии отсортированности входных данных (в начале и конце массива ставятся два итератора, левый сдвигается дальше вправо, если сумма элементов по этим двум индексам слишком большая, правый сдвигается влево, если сумма слишком маленькая). Отсюда вытекает решение 3-sum problem за N^2, в которой перебирается первый элемент и к нему добираются ещё два.

Ещё есть такая штука, которая называется bitonic array - это массив, в котором значения сначала увеличиваются, а потом уменьшаются. И в нём можно искать за 2lgN. Алгоритм похож на бинарный поиск: делим массив пополам, по соседнему элементу смотрим, в какую часть массива мы попали, в убывающую или возрастающую. Для простоты пусть в возрастающую: [1, 2, 3, 4, 5, 6, 4, 2, 0]. Если искомое значение меньше, чем значение в середине, то используем возрастающий бинарный поиск для [1, 2], если не находим нужного значения, то делаем, внезапно, убывающий бинарный поиск по [4, 5, 6, 4, 2, 0]. Он сработает, потому что вот в этом возрастающем куске значения заведомо большие искомого, так что нас перебросит в убывающую часть массива. Если же искомое значение больше, чем a[mid], то рекурсивно вызываем поиск по битоническому массиву [4, 5, 6, 4, 2, 0].

Ещё я видел странное задание, в котором надо было определить за сколько-то попыток, имея какое-то количество яиц, при броске с какой высоты яйцо разобьётся (egg drop competition). Бросаем яйца мы с N-этажного здания, яйцо не разбивается при падении с этажей 1...T-1 и гарантированно разбивается при падении с этажей T...N.

> 1 яйцо, ≤ T попыток


Просто линейный поиск.

> lgN яиц, lgN попыток


Бинарный поиск.

> lgT яиц, 2lgT попыток


Начиная с первого этажа, идём по этажам, соответствующим степеням двойки: 1, 2, 4, 8, пока не добираемся до этажа, на котором яйцо разбивается. Таким образом, мы получаем интервал [2^(t-1), 2^t], на котором где-то лежит T, и мы делаем бинарный поиск по нему, тратя на это где-то lgT яиц и lgT попыток. Мне сначала показалось, что можно было бы линейно по нему пройтись, но это не так, потому что 2^t - 2^(t-1) > 2^lg(T) - 2^(t-1) = T - 2^(t-1), то есть длина интервала линейно зависит от T.

> 2 яйца, 2√N попыток


Здесь просто шагаем по этажам с интервалом в √N, находим нужный интервал длины √n и проходимся по нему линейно. Профит, видимо, в том, что тратится не очень много яиц + sublinear time, но при этом количество попыток зависит от высотности здания, а не от высоты, при падении с которого яйцо разбивается.

> 2 яйца, 2√2 · √T попыток


Тут надо бросать яйцо вот с этих этажей: 1 +2, 3 +3, 6 +4, 10 +5, 15, 21, 28 и так далее. То есть каждый номер этажа вычисляется по формуле t(t+1)/2. Чтобы добраться такими шагами до T, потребуется где-то T = t^2/2 => t = √(2T) попыток. А потом линейным поиском за √(2T) попыток и ещё одно яйцо находим нужное значение. То есть суммарно получится 2√2 · √T попыток.

Я попробовал сделать deque через двусвязный список, но не стал делать его через массив, потому что не подумал о том, что так тоже можно сделать. Там, наверное, пришлось бы утраивать массив, чтобы он всегда находился в подушке безопасности из пустых ячеек слева и справа. Хотя нет, я сейчас посмотрел, и там есть более умная идея: использовать циклический массив для того, чтобы не надо было тратить впустую столько места. И, наверное, этот же циклический массив можно использовать в реализации просто очереди через массив, чтобы не надо было сдвигать элементы в начало в ситуации вроде той, о которой я говорил: [ null, null, null, null, null, 1, 2, 3 ].

Ещё я как бы знал про итераторы, но никогда не пробовал их реализовывать, но дело не в этом, а в том, что в интерфейсе Iterable я нашёл метод forEach, который принимает на вход консюмер, который последовательно применяется к каждому элементу коллекции, так что можно написать list.forEach(System.out::println) вместо цикла. А ещё там есть метод, который возвращает сплитератор, который представляет из себя итератор, который можно поделить пополам: у него есть метод, который возвращает другой сплитератор, который проходится по первой половине Iterable объекта, а тот, изначальный сплитератор, теперь проходится по второй половине объекта. Я не совсем понял, какое может быть у этого применение, в интернете я видел пример, в котором использовался stream api, но я его не понял.

А ещё у итератора, оказывается, есть метод remove, который по дизайну представляет из себя единственный способ безопасно модифицировать коллекцию во время того, как ты по ней проходишься. Но по дефолту он бросает исключение.
.jpg229 Кб, 1246x2048
PoppyFanboy 347 323378
https://youtu.be/PShsPWm9r14
https://youtu.be/kZnJSw2cNLc

Сегодня мне рассказали про то, что такое стек и очередь, я, конечно, знал это, но никогда сам не реализовывал и не вдавался в детали того, как это можно было бы сделать. Стек можно реализовать односвязным списком, от которого можно хранить только голову и при вставке/удалении просто менять голову списка.

Есть ещё реализация через массив, но только надо грамотно ресайзить его, когда элементы перестают в него помещаться. Если по-наивному увеличивать на единицу каждый раз, когда нам перестаёт хватать места, то push N раз займёт квадратичное время. Поэтому лучше удваивать размер массива. Тогда выходит, что за N push'ов мы обратимся к массиву где-то N + (1 + 2 + 4 + 8 + ... + N) = N + 2^(lgN + 1) = 3N раз. А всё потому, что к тому моменту, когда нам надо будет увеличивать массив длины N вдвое, мы уже обратились N раз к нему, чтобы сделать push и ещё где-то суммарно N обращений ушло на другие удваивания.

Так что в получается, что push работает в среднем за константное время. Это называется amortized analysis:

>The basic idea is that a worst-case operation can alter the state in such a way that the worst case cannot occur again for a long time, thus "amortizing" its cost.



А чтобы зря не занимать место, нужно ещё сокращать массив в размере, причём делать это, когда занято четверть или меньше от всего массива, потому что если сокращать на половине заполненности, то можно делать трешинг push-pop-push-pop-... массив будет постоянно то увеличиваться, то уменьшаться, и последовательность из N таких операций займёт квадратичное время. Если брать четверть, то тут то же самое, amortized analysis показывает, что N pop'ов будут работать за линейное время.

Если вдваваться в дурацкие никому не нужные подробности, то узел связного списка будет занимать приблизительно 16 байт (оверхед для объекта в джаве) + 8 байт (на ссылку на некст узел) + 8 байт (на ссылку на данные) = 32 байт. Так что весь стек будет занимать ~32N байт. В случае с массивом там использование памяти будет между ~8N при полной заполненности и ~32N при 25%-заполненности. То есть в теории тут немного лучше по памяти, потому что не надо дополнительно хранить поинтеры, но при этом в худшем случае push/pop работают за линейное время, тогда как в связных списках там константное время - это worst case. Правда, я не знаю, действительно ли поинтеры списка так сильно на что-то влияют в плане использования памяти.

С очередями примерно то же самое, но там надо хранить два указателя: на голову и на хвост списка, и добавлять в конец, но забирать из начала. А в реализации с массивом там всё немного сложнее опять же, из-за того, что вместо одного - два индекса, которые ходят по массиву. Но в остальном то же самое. Единственное, там надо обработать специальный случай, когда массив заполнен на 25%-50% и мы дошли до его конца: [ null, null, null, null, null, 1, 2, 3 ] в таком случае надо просто переместить значения влево.

Ещё мне рассказали про то, что можно реализовать очередь с помощью двух стеков. При этом это можно сделать двумя способами: с медленными enqueue, но быстрыми dequeue (в первом стеке храним элементы в порядке [X1, ..., XN], когда надо добавить новый элемент в очередь, сначала перебрасываем всё во второй стек и при этом всё переворачивается [XN, ..., X1], потом добавляем новый элемент XN+1 в первый пустой стек и после этого возвращаем элементы из второго стека в первый, куда они добавятся перед XN+1: [X1, ..., XN, XN+1]) и наоборот, с медленными dequeue (добавляем элементы в первый стек, если надо достать элемент из очереди, то достаём его из второго стека, если тот не пустой, а если пустой, то перебрасываем туда элементы из первого и снимаем верхний элемент с этого второго стека; это работает, потому что, опять же, когда перебрасываем из одного стека в другой, всё переворачивается и становится в обратном порядке).

Ещё мне рассказали, про 2-sum problem, которую можно решить перебором за N^2, сортировкой + бинарным поиском за NlgN (сначала сортируем, а потом перебираем первый элемент, а к нему ищем за lgN второй) или просто за линейное время при условии отсортированности входных данных (в начале и конце массива ставятся два итератора, левый сдвигается дальше вправо, если сумма элементов по этим двум индексам слишком большая, правый сдвигается влево, если сумма слишком маленькая). Отсюда вытекает решение 3-sum problem за N^2, в которой перебирается первый элемент и к нему добираются ещё два.

Ещё есть такая штука, которая называется bitonic array - это массив, в котором значения сначала увеличиваются, а потом уменьшаются. И в нём можно искать за 2lgN. Алгоритм похож на бинарный поиск: делим массив пополам, по соседнему элементу смотрим, в какую часть массива мы попали, в убывающую или возрастающую. Для простоты пусть в возрастающую: [1, 2, 3, 4, 5, 6, 4, 2, 0]. Если искомое значение меньше, чем значение в середине, то используем возрастающий бинарный поиск для [1, 2], если не находим нужного значения, то делаем, внезапно, убывающий бинарный поиск по [4, 5, 6, 4, 2, 0]. Он сработает, потому что вот в этом возрастающем куске значения заведомо большие искомого, так что нас перебросит в убывающую часть массива. Если же искомое значение больше, чем a[mid], то рекурсивно вызываем поиск по битоническому массиву [4, 5, 6, 4, 2, 0].

Ещё я видел странное задание, в котором надо было определить за сколько-то попыток, имея какое-то количество яиц, при броске с какой высоты яйцо разобьётся (egg drop competition). Бросаем яйца мы с N-этажного здания, яйцо не разбивается при падении с этажей 1...T-1 и гарантированно разбивается при падении с этажей T...N.

> 1 яйцо, ≤ T попыток


Просто линейный поиск.

> lgN яиц, lgN попыток


Бинарный поиск.

> lgT яиц, 2lgT попыток


Начиная с первого этажа, идём по этажам, соответствующим степеням двойки: 1, 2, 4, 8, пока не добираемся до этажа, на котором яйцо разбивается. Таким образом, мы получаем интервал [2^(t-1), 2^t], на котором где-то лежит T, и мы делаем бинарный поиск по нему, тратя на это где-то lgT яиц и lgT попыток. Мне сначала показалось, что можно было бы линейно по нему пройтись, но это не так, потому что 2^t - 2^(t-1) > 2^lg(T) - 2^(t-1) = T - 2^(t-1), то есть длина интервала линейно зависит от T.

> 2 яйца, 2√N попыток


Здесь просто шагаем по этажам с интервалом в √N, находим нужный интервал длины √n и проходимся по нему линейно. Профит, видимо, в том, что тратится не очень много яиц + sublinear time, но при этом количество попыток зависит от высотности здания, а не от высоты, при падении с которого яйцо разбивается.

> 2 яйца, 2√2 · √T попыток


Тут надо бросать яйцо вот с этих этажей: 1 +2, 3 +3, 6 +4, 10 +5, 15, 21, 28 и так далее. То есть каждый номер этажа вычисляется по формуле t(t+1)/2. Чтобы добраться такими шагами до T, потребуется где-то T = t^2/2 => t = √(2T) попыток. А потом линейным поиском за √(2T) попыток и ещё одно яйцо находим нужное значение. То есть суммарно получится 2√2 · √T попыток.

Я попробовал сделать deque через двусвязный список, но не стал делать его через массив, потому что не подумал о том, что так тоже можно сделать. Там, наверное, пришлось бы утраивать массив, чтобы он всегда находился в подушке безопасности из пустых ячеек слева и справа. Хотя нет, я сейчас посмотрел, и там есть более умная идея: использовать циклический массив для того, чтобы не надо было тратить впустую столько места. И, наверное, этот же циклический массив можно использовать в реализации просто очереди через массив, чтобы не надо было сдвигать элементы в начало в ситуации вроде той, о которой я говорил: [ null, null, null, null, null, 1, 2, 3 ].

Ещё я как бы знал про итераторы, но никогда не пробовал их реализовывать, но дело не в этом, а в том, что в интерфейсе Iterable я нашёл метод forEach, который принимает на вход консюмер, который последовательно применяется к каждому элементу коллекции, так что можно написать list.forEach(System.out::println) вместо цикла. А ещё там есть метод, который возвращает сплитератор, который представляет из себя итератор, который можно поделить пополам: у него есть метод, который возвращает другой сплитератор, который проходится по первой половине Iterable объекта, а тот, изначальный сплитератор, теперь проходится по второй половине объекта. Я не совсем понял, какое может быть у этого применение, в интернете я видел пример, в котором использовался stream api, но я его не понял.

А ещё у итератора, оказывается, есть метод remove, который по дизайну представляет из себя единственный способ безопасно модифицировать коллекцию во время того, как ты по ней проходишься. Но по дефолту он бросает исключение.
348 323578
Бамп
.jpg634 Кб, 1222x1471
PoppyFanboy 349 323742
>>323578
Больше нечем заняться, да?

https://youtu.be/I3A3phknN5U
https://youtu.be/sB1e_0jkvE8

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

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

Прикол в том, что в джаве генерик классов в байткоде не существует, а есть только raw типы (просто класс без типовых параметров), для которых все типовые параметры затираются с помощью механизма type erasure. Благодаря этому в том числе поддерживается совместимость с легаси кодом, в котором какой-нибудь ArrayList объявлен без треугольных скобочек. А ещё можно запускать байт код, транслированный из исходного кода с генериками, даже на джава машине, релизнутой до введения генериков, но не знаю, насколько это вообще полезно.

Type erasure меняет везде типовые параметры на их верхние границы, а там, где необходимо, делает соответствующие касты. При этом выставляется самая первая верхняя граница из всех перечисленных, а для всех остальных опять же, вставляются касты, так что можно утопить байткод в куче кастов, если поставить на первое место какой-нибудь маркерный интерфейс.

А ещё там делаются специальные bridge методы при наследовании от генерик классов. Вот, например, пусть у нас есть генерик класс Pair<T>, который хранит в себе два объекта типа T, но мы хотим унаследовать от Pair<Integer> свой класс Interval, в котором было бы запрещено задавать значения для пары такие, чтобы первое число в паре было больше второго. Поэтому мы в том числе переопределяем метод setFirst(Integer value). Но при type erasure у нас есть только класс Pair, в котором определён метод setFirst(Object value), так что, чтобы не ломать полифорфизм, в классе Interval при компиляции создаётся вот такой bridge метод:

> public void setFirst(Object value) {


>   setFirst((Integer) value);


> }


Аналогично происходит с getFirst, но из-за этого получается так, что у нас в классе Interval появляются два метода getFirst, отличающиеся только типом возвращаемого значения, но это нормально, потому что в джава машине так можно, но в исходном коде такое делать нельзя.

И вот этот механизм с bridge методами используется не только в type erasure, но и тогда, когда метод в подклассе оверрайдится с более restrictive типами возвращаемых значений, опять же, чтобы не ломать полиморфизм. (Например, когда оверрайдим метод clone()).

✲ ✲ ✲

Когда взаимодействуем с легаси кодом, нет никаких гарантий, ни что мы не получим из него raw тип, содержащий в себе какой-то мусор, ни что передав в легаси код свой генерик тип, он нам не засунет в коллекцию что-то странное, что потом вызовет ClassCastException. Но типовые параметры хуже ситуацию не делают, впрочем, они и не помогают никак.

В качестве типовых параметров нельзя ставить примитивные типы, потому что тогда не сможет сделаться type erasure и, с одной стороны, это не проблема, потому что есть же просто всякие Integer, Double и так далее, которые делают автобоксинг, поэтому это не особо ухудшает читабельность кода, но, с другой, я не знаю, насколько сильно влияет на производительность коллекций то, что она работает не с примитивными типами, а с оболочками.

Ещё я не задумывался о том, что class (находит класс в статике, чтобы использовать его в reflexion api) и getClass() (находит класс для объекта в рантайме) возвращают raw типы для генерик типов и объектов генерик типов. А ещё я не знал, что в reflexion api нельзя инициализировать массив как, например, String[].class.getConstructor(int.class), а вместо этого надо их инициализировать через Array.newInstance(String.class, n).

✲ ✲ ✲

Ещё, говоря об ограничениях, которые накладываются на генерики в джаве, тут нельзя явно создавать массивы из генерик типов. Наиболее распространённое объяснение тому - это то, что массивы ковариантны, а генерики - нет, так что, будь создание генерик массивов возможным, можно было бы сделать так:

> List<String>[] genericArray = new ArrayList<>[10];


> Object[] array = genericArray;


> // из-за type erasure это не вызовет ArrayStoreException


> array[0] = new List<Integer>();


> // ClassCastException


> List<String> stringList = genericArray[0];


Но при этом ничего не мешает нам проделать примерно те же самые манипуляции с массивом ArrayList[], который инициализировать можно, видимо, для того, чтобы не ломать легаси код, в котором было можно создавать такие массивы, потому что это не ухудшало ситуацию с генериками. А теперь в свете существования генериков это выглядит уже глупо. Но это только моя догадка.

А ещё проблема в том, что даже, если бы создание генерик массивов было бы разрешено, это невозможно было бы реализовать грамотно с учётом type erasure, потому что в рантайме не существует генерик типов, так что нельзя было бы вообще никак предотвратить ситуацию с инвариатностью генериков, описанную выше, вызвав ArrayStoreException.

✲ ✲ ✲

Аналогично нельзя инициализировать просто генерик тип как new T(), потому что type erasure и просто создался бы Object. Это ограничение можно обойти, если явно передать коду, который должен создать объект типа T, соответствующий конструктор. Это можно сделать либо с помощью reflexion api (я так понимаю, так делалось до того, как были введены лямбда выражения), либо вот просто передав какой-нибудь String::new, который имеет тип Supplier<String> - это функциональный интерфейс, метод в котором возвращает значение String.

И массивы тоже нельзя new T[n], вообще ничего нельзя, всё запрещено, и здесь причины менее очевидны, потому что массивы по умолчанию инициализруются значениями null, так что нет проблемы с конструктором. И тут работал бы защитный механизм в виде ArrayStoreException, если бы не type erasure, из-за которого всё бы сломалось так же, как и с инвариантными генериками и массивами из генерик типов. Так что тут аналогично надо передавать конструктор для создания массива через String[]::new или же вот через reflexion api его передавать.

✲ ✲ ✲

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

https://ideone.com/3lYbKB
Вы, наверное, подумали, что в рантайме все неограниченные типовые параметры заменяются на Object? А вот и нет, получайте ArrayStoreException в лицо, судя по всему, потому что тут всё же происходит не type erasure, а неявное создание массива заданного типа. Так что это вполне легальный способ создавать массивы типа T.

Будет ли то же самое работать с массивами из генерик типов? Нет, потому что вот тут уже type erasure точно работает и List<T> превращается в List независимо ни от чего. Так что тут можно
https://ideone.com/gBGmkC
И ещё там забавно то, что из-за type erasure происходит немного контринтуитивная штука, когда переменная типа T может хранить в себе любое значение, хоть Integer, хоть String, потому что её тип при компиляции занимается на Object. Поэтому внутри getArrayOfGenericObjects1 не удаётся вызвать ClassCastException так же, как это получается сделать в getArrayOfGenericObjects2.

✲ ✲ ✲

А ещё запрещено наследовать генерик классы от Throwable, видимо, потому что тогда, если будут два блока catch, которые ловят одно и то же исключение, но с разными типовыми параметрами, будет непонятно, какой из двух этих блоков выполнять, потому что type erasure.

Но при этом с помощью генериков можно сделать нечто странное:
https://ideone.com/VwJJ5S
Мы перебрасываем исключение через объявление с использованием типовых параметров. Тут компилятор знает, что мы выбрасываем заново какое-то исключение, но он точно не знает, является оно подклассом RuntimeException (это unchecked исключения) или же это проверяемое исключение, поэтому он, видимо, решает, что в таком случае можно не декларировать исключения, хотя оно класса Throwable. И я вообще не понимаю, почему это так работает, потому что если сделать явный каст какого-нибудь RuntimeException к Throwable и выбросить его, то без объявления того, что метод выбрасывает Throwable, ничего не скомпилируется.

Ну и ещё нельзя, чтобы класс имплементировал два генерик интерфейса с разными типовыми параметрами, потому что там ломается полифорфизм из-за type erasure и bridge методов.

✲ ✲ ✲

Короче, генерики тут какие-то сломанные.
.jpg634 Кб, 1222x1471
PoppyFanboy 349 323742
>>323578
Больше нечем заняться, да?

https://youtu.be/I3A3phknN5U
https://youtu.be/sB1e_0jkvE8

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

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

Прикол в том, что в джаве генерик классов в байткоде не существует, а есть только raw типы (просто класс без типовых параметров), для которых все типовые параметры затираются с помощью механизма type erasure. Благодаря этому в том числе поддерживается совместимость с легаси кодом, в котором какой-нибудь ArrayList объявлен без треугольных скобочек. А ещё можно запускать байт код, транслированный из исходного кода с генериками, даже на джава машине, релизнутой до введения генериков, но не знаю, насколько это вообще полезно.

Type erasure меняет везде типовые параметры на их верхние границы, а там, где необходимо, делает соответствующие касты. При этом выставляется самая первая верхняя граница из всех перечисленных, а для всех остальных опять же, вставляются касты, так что можно утопить байткод в куче кастов, если поставить на первое место какой-нибудь маркерный интерфейс.

А ещё там делаются специальные bridge методы при наследовании от генерик классов. Вот, например, пусть у нас есть генерик класс Pair<T>, который хранит в себе два объекта типа T, но мы хотим унаследовать от Pair<Integer> свой класс Interval, в котором было бы запрещено задавать значения для пары такие, чтобы первое число в паре было больше второго. Поэтому мы в том числе переопределяем метод setFirst(Integer value). Но при type erasure у нас есть только класс Pair, в котором определён метод setFirst(Object value), так что, чтобы не ломать полифорфизм, в классе Interval при компиляции создаётся вот такой bridge метод:

> public void setFirst(Object value) {


>   setFirst((Integer) value);


> }


Аналогично происходит с getFirst, но из-за этого получается так, что у нас в классе Interval появляются два метода getFirst, отличающиеся только типом возвращаемого значения, но это нормально, потому что в джава машине так можно, но в исходном коде такое делать нельзя.

И вот этот механизм с bridge методами используется не только в type erasure, но и тогда, когда метод в подклассе оверрайдится с более restrictive типами возвращаемых значений, опять же, чтобы не ломать полиморфизм. (Например, когда оверрайдим метод clone()).

✲ ✲ ✲

Когда взаимодействуем с легаси кодом, нет никаких гарантий, ни что мы не получим из него raw тип, содержащий в себе какой-то мусор, ни что передав в легаси код свой генерик тип, он нам не засунет в коллекцию что-то странное, что потом вызовет ClassCastException. Но типовые параметры хуже ситуацию не делают, впрочем, они и не помогают никак.

В качестве типовых параметров нельзя ставить примитивные типы, потому что тогда не сможет сделаться type erasure и, с одной стороны, это не проблема, потому что есть же просто всякие Integer, Double и так далее, которые делают автобоксинг, поэтому это не особо ухудшает читабельность кода, но, с другой, я не знаю, насколько сильно влияет на производительность коллекций то, что она работает не с примитивными типами, а с оболочками.

Ещё я не задумывался о том, что class (находит класс в статике, чтобы использовать его в reflexion api) и getClass() (находит класс для объекта в рантайме) возвращают raw типы для генерик типов и объектов генерик типов. А ещё я не знал, что в reflexion api нельзя инициализировать массив как, например, String[].class.getConstructor(int.class), а вместо этого надо их инициализировать через Array.newInstance(String.class, n).

✲ ✲ ✲

Ещё, говоря об ограничениях, которые накладываются на генерики в джаве, тут нельзя явно создавать массивы из генерик типов. Наиболее распространённое объяснение тому - это то, что массивы ковариантны, а генерики - нет, так что, будь создание генерик массивов возможным, можно было бы сделать так:

> List<String>[] genericArray = new ArrayList<>[10];


> Object[] array = genericArray;


> // из-за type erasure это не вызовет ArrayStoreException


> array[0] = new List<Integer>();


> // ClassCastException


> List<String> stringList = genericArray[0];


Но при этом ничего не мешает нам проделать примерно те же самые манипуляции с массивом ArrayList[], который инициализировать можно, видимо, для того, чтобы не ломать легаси код, в котором было можно создавать такие массивы, потому что это не ухудшало ситуацию с генериками. А теперь в свете существования генериков это выглядит уже глупо. Но это только моя догадка.

А ещё проблема в том, что даже, если бы создание генерик массивов было бы разрешено, это невозможно было бы реализовать грамотно с учётом type erasure, потому что в рантайме не существует генерик типов, так что нельзя было бы вообще никак предотвратить ситуацию с инвариатностью генериков, описанную выше, вызвав ArrayStoreException.

✲ ✲ ✲

Аналогично нельзя инициализировать просто генерик тип как new T(), потому что type erasure и просто создался бы Object. Это ограничение можно обойти, если явно передать коду, который должен создать объект типа T, соответствующий конструктор. Это можно сделать либо с помощью reflexion api (я так понимаю, так делалось до того, как были введены лямбда выражения), либо вот просто передав какой-нибудь String::new, который имеет тип Supplier<String> - это функциональный интерфейс, метод в котором возвращает значение String.

И массивы тоже нельзя new T[n], вообще ничего нельзя, всё запрещено, и здесь причины менее очевидны, потому что массивы по умолчанию инициализруются значениями null, так что нет проблемы с конструктором. И тут работал бы защитный механизм в виде ArrayStoreException, если бы не type erasure, из-за которого всё бы сломалось так же, как и с инвариантными генериками и массивами из генерик типов. Так что тут аналогично надо передавать конструктор для создания массива через String[]::new или же вот через reflexion api его передавать.

✲ ✲ ✲

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

https://ideone.com/3lYbKB
Вы, наверное, подумали, что в рантайме все неограниченные типовые параметры заменяются на Object? А вот и нет, получайте ArrayStoreException в лицо, судя по всему, потому что тут всё же происходит не type erasure, а неявное создание массива заданного типа. Так что это вполне легальный способ создавать массивы типа T.

Будет ли то же самое работать с массивами из генерик типов? Нет, потому что вот тут уже type erasure точно работает и List<T> превращается в List независимо ни от чего. Так что тут можно
https://ideone.com/gBGmkC
И ещё там забавно то, что из-за type erasure происходит немного контринтуитивная штука, когда переменная типа T может хранить в себе любое значение, хоть Integer, хоть String, потому что её тип при компиляции занимается на Object. Поэтому внутри getArrayOfGenericObjects1 не удаётся вызвать ClassCastException так же, как это получается сделать в getArrayOfGenericObjects2.

✲ ✲ ✲

А ещё запрещено наследовать генерик классы от Throwable, видимо, потому что тогда, если будут два блока catch, которые ловят одно и то же исключение, но с разными типовыми параметрами, будет непонятно, какой из двух этих блоков выполнять, потому что type erasure.

Но при этом с помощью генериков можно сделать нечто странное:
https://ideone.com/VwJJ5S
Мы перебрасываем исключение через объявление с использованием типовых параметров. Тут компилятор знает, что мы выбрасываем заново какое-то исключение, но он точно не знает, является оно подклассом RuntimeException (это unchecked исключения) или же это проверяемое исключение, поэтому он, видимо, решает, что в таком случае можно не декларировать исключения, хотя оно класса Throwable. И я вообще не понимаю, почему это так работает, потому что если сделать явный каст какого-нибудь RuntimeException к Throwable и выбросить его, то без объявления того, что метод выбрасывает Throwable, ничего не скомпилируется.

Ну и ещё нельзя, чтобы класс имплементировал два генерик интерфейса с разными типовыми параметрами, потому что там ломается полифорфизм из-за type erasure и bridge методов.

✲ ✲ ✲

Короче, генерики тут какие-то сломанные.
350 324221
Уважаемый, Оп. Красиво пишешь :3
Скажи пожалуйста, как ты рисуешь такие милые картиночки?
вот где формулы и все такое. Распиши плиз
351 324300
Извиняюсь, что врываюсь в интеллектуальный тред с тупым вопросом.
Короче, у Марины есть семь любовников, каждый из которых приходит к ней каждый день с вероятностью 1/7.
Какова вероятность того, что у Марины сегодня вечером будет ноль любовников? Один любовник, два, и так далее до семи?
Когда-то я умел решать подобные задачи, но забыл напрочь.
PoppyFanboy 352 325036
>>324221
Я использую устройство для ввода информации, созданной от руки, непосредственно в компьютер.

>>324300
Уу, такой-то интеллектуалистический тред. В задаче надо перемножить вероятности того, что каждый из любовников не придёт:

> 1 - 1/7 = 6/7 - вероятность того, что k-ый любовник сегодня вечером не явится к Марине


> 6/7 · 6/7 · ... · 6/7 = 67/77 - вероятность того, что вообще никто не придёт



https://youtu.be/FFA5e_1Mrvo
https://youtu.be/h1pSSrmdEtw

Сегодня опять почти ничего не делал, несмотря на то, что как-то пытался этому противостоять. В третий раз попытался начать смотреть книжку по гиту, чтобы узнать, как делать что-то помимо создания коммитов. Но, видимо, ничего кроме коммитов мне не надо, поэтому я откладываю её постоянно, бросая на первой же главе. Ну, по крайней мере, ещё раз вспомнил, весь етот процесс задания конфигов и ремоутов, который не особо отпечатывается в голове, потому что делается он разве что при создании нового репозитория.

Я сделал deque на зацикленном массиве, она выглядит отвратительно. По крайней мере таковой казалась в процессе, но потом перестала, потому что я смотрел на неё достаточно долго. Хотя я пытался сделать читабельно.
https://ideone.com/nsAVWx
Изначально хотел, чтобы индексы lo и hi указывали на некст позицию для операций добавления, чтобы не надо было сначала увеличивать массив, а потом вставлять новый элемент, но потом показалось, что так будет сложнее. Вообще это вечная тупая проблема с тем, как определять интервалы в массивах: две границы, обе включены в интервал, две границы, вторая не включена в интервал, или нижняя граница + количество элементов в интервале. И вот не знаю, что лучше и чего лучше придерживаться.

✲ ✲ ✲

Мне рассказали про всякие дурацкие сортировки, которые работают хуже, чем за NlgN. Selection sort, которая примечательна, видимо, только тем, что использует минимальное количество обменов в массиве. Insertion sort, которая, наверное, может быть полезна тем, что может сортировать элементы, которые постепенно поступают потоком. И ещё тут упоминалось понятие частично упорядоченного массива - это массив, в котором O(N) инверсий, и что сортировка вставкой работает за линейное время на таких массивах, потому что делает столько же обменов, сколько есть инверсий в массивве, и линейное же количество сравнений.

И ещё там была сортировка шелла, которая вообще мимо меня прошла. Она сначала несколько раз h-сортирует массив для постепенно уменьшающихся значений h и в конце делает просто сортировку вставкой (при h = 1). h-сортировка - это сортировка всех подмассивов вида [ai, ai+h, ai+2h, ...] И при правильном выборе последовательности уменьшающихся h там получается субквадратичная сложность в среднем, потому что для больших значений h нам надо сортировать маленькие массивы, а когда дело дойдёт до маленьких h, то массив уже будет более-менее отсортирован, поэтому там тоже всё будет работать чуть быстрее.

Но, на самом деле, тут не так всё просто, потому что не очень очевидно, почему k-отсортированный массив остаётся таковым после h-сортировки. Для этого надо проверить, что после h-сортировки для элементов массива, находящихся на расстоянии k, выполняется неравенство "≤". И мне слишком сложно пытаться объяснить это на словах, поэтому там на пикрилейтед доказательство. Оно не особо понятно расписано, но я пытался. Почему-то не нашёл нормального объяснения в интернете и пришлось подсмотреть это всё, внезапно, у кнута.

Остаётся только определиться с правильным выбором последовательности из h. Самый простой вариант - это взять 1, 4, 13, 40, ... (умножить на три, плюс один), тогда в среднем будет работать за O(N^(3/2)). (Понятия не имею, как это доказывается, кстати.) Вроде там ещё есть какие-то эмпирически выведенные последовательности, которые дают лучший результат, но их либо сложнее вычислять, либо лень запоминать.

Не знаю, в чём интерес использовать эту сортировку. На вики написано, что так как её легко написать и она не использует стек вызовов, то её можно использовать во всяких embedded системах.

✲ ✲ ✲

Ещё я узнал про three-way partitioning. Как бы там идея очевидная, но я просто не задумывался о том, что массив можно сортировать за линейное время и за O(1) дополнительной памяти, если он состоит только из трёх различных значений (ну, или если разделить значения на три диапазона и сортировать по ним): если попадается что-то маленькое, то кидаем его в начало массива и двигаемся дальше, если что-то среднее, то пропускаем и идём дальше, если что-то большое, то закидываем в конец массива и смотрим, что мы вынули из конца массива. В первом случае смотреть, что мы вынули из начала массива, не нужно, потому что там будет гарантированно что-то среднее и мы это всё равно бы скипнули.

✲ ✲ ✲

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

Также известны вот такие свойства выпуклой оболочки:
- она обходится против часовой стрелки, в каждой вершине делая поворот против часовой стрелки (потому что иначе она бы получилась невыпуклой)
- если у выпуклой оболочки взять самую нижнюю точку, то остальные точки при обходе выпуклой оболочки будут идти в порядке увеличения наклона прямых, проведённых через эту нижнюю точку и через точки, которые мы обходим

Так что, чтобы найти convex hull для набора точек, надо взять самую нижнюю точку, отсортировать остальные в порядке увеличения угла и потом последовательно перебирать их, пытаясь построить выпуклую оболочку, делая возвраты и избавляясь от точек, через которые у нас не получается (происходит поворот по часовой стрелке) построить выпуклый многоугольник (вот как на картинке 3.png, выбрасываем тройку? пробуем построить через 1-2-4, опять не получается, выбрасываем двойку, пробуем построить через 1-4-5-6, потом через 1-4-6-... и так далее).

Этот алгоритм называется graham scan. Вроде как может использоваться для того, чтобы найти кратчайший путь, чтобы обойти препятствие, или чтобы найти две самые удалённые друг от друга точки в наборе без полного их перебора (хотя там всё равно будет перебор пар точек на выпуклой оболочке и в худшем случае он всё равно будет O(N^2), не знаю, можно ли тут как-нибудь схитрить).
PoppyFanboy 352 325036
>>324221
Я использую устройство для ввода информации, созданной от руки, непосредственно в компьютер.

>>324300
Уу, такой-то интеллектуалистический тред. В задаче надо перемножить вероятности того, что каждый из любовников не придёт:

> 1 - 1/7 = 6/7 - вероятность того, что k-ый любовник сегодня вечером не явится к Марине


> 6/7 · 6/7 · ... · 6/7 = 67/77 - вероятность того, что вообще никто не придёт



https://youtu.be/FFA5e_1Mrvo
https://youtu.be/h1pSSrmdEtw

Сегодня опять почти ничего не делал, несмотря на то, что как-то пытался этому противостоять. В третий раз попытался начать смотреть книжку по гиту, чтобы узнать, как делать что-то помимо создания коммитов. Но, видимо, ничего кроме коммитов мне не надо, поэтому я откладываю её постоянно, бросая на первой же главе. Ну, по крайней мере, ещё раз вспомнил, весь етот процесс задания конфигов и ремоутов, который не особо отпечатывается в голове, потому что делается он разве что при создании нового репозитория.

Я сделал deque на зацикленном массиве, она выглядит отвратительно. По крайней мере таковой казалась в процессе, но потом перестала, потому что я смотрел на неё достаточно долго. Хотя я пытался сделать читабельно.
https://ideone.com/nsAVWx
Изначально хотел, чтобы индексы lo и hi указывали на некст позицию для операций добавления, чтобы не надо было сначала увеличивать массив, а потом вставлять новый элемент, но потом показалось, что так будет сложнее. Вообще это вечная тупая проблема с тем, как определять интервалы в массивах: две границы, обе включены в интервал, две границы, вторая не включена в интервал, или нижняя граница + количество элементов в интервале. И вот не знаю, что лучше и чего лучше придерживаться.

✲ ✲ ✲

Мне рассказали про всякие дурацкие сортировки, которые работают хуже, чем за NlgN. Selection sort, которая примечательна, видимо, только тем, что использует минимальное количество обменов в массиве. Insertion sort, которая, наверное, может быть полезна тем, что может сортировать элементы, которые постепенно поступают потоком. И ещё тут упоминалось понятие частично упорядоченного массива - это массив, в котором O(N) инверсий, и что сортировка вставкой работает за линейное время на таких массивах, потому что делает столько же обменов, сколько есть инверсий в массивве, и линейное же количество сравнений.

И ещё там была сортировка шелла, которая вообще мимо меня прошла. Она сначала несколько раз h-сортирует массив для постепенно уменьшающихся значений h и в конце делает просто сортировку вставкой (при h = 1). h-сортировка - это сортировка всех подмассивов вида [ai, ai+h, ai+2h, ...] И при правильном выборе последовательности уменьшающихся h там получается субквадратичная сложность в среднем, потому что для больших значений h нам надо сортировать маленькие массивы, а когда дело дойдёт до маленьких h, то массив уже будет более-менее отсортирован, поэтому там тоже всё будет работать чуть быстрее.

Но, на самом деле, тут не так всё просто, потому что не очень очевидно, почему k-отсортированный массив остаётся таковым после h-сортировки. Для этого надо проверить, что после h-сортировки для элементов массива, находящихся на расстоянии k, выполняется неравенство "≤". И мне слишком сложно пытаться объяснить это на словах, поэтому там на пикрилейтед доказательство. Оно не особо понятно расписано, но я пытался. Почему-то не нашёл нормального объяснения в интернете и пришлось подсмотреть это всё, внезапно, у кнута.

Остаётся только определиться с правильным выбором последовательности из h. Самый простой вариант - это взять 1, 4, 13, 40, ... (умножить на три, плюс один), тогда в среднем будет работать за O(N^(3/2)). (Понятия не имею, как это доказывается, кстати.) Вроде там ещё есть какие-то эмпирически выведенные последовательности, которые дают лучший результат, но их либо сложнее вычислять, либо лень запоминать.

Не знаю, в чём интерес использовать эту сортировку. На вики написано, что так как её легко написать и она не использует стек вызовов, то её можно использовать во всяких embedded системах.

✲ ✲ ✲

Ещё я узнал про three-way partitioning. Как бы там идея очевидная, но я просто не задумывался о том, что массив можно сортировать за линейное время и за O(1) дополнительной памяти, если он состоит только из трёх различных значений (ну, или если разделить значения на три диапазона и сортировать по ним): если попадается что-то маленькое, то кидаем его в начало массива и двигаемся дальше, если что-то среднее, то пропускаем и идём дальше, если что-то большое, то закидываем в конец массива и смотрим, что мы вынули из конца массива. В первом случае смотреть, что мы вынули из начала массива, не нужно, потому что там будет гарантированно что-то среднее и мы это всё равно бы скипнули.

✲ ✲ ✲

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

Также известны вот такие свойства выпуклой оболочки:
- она обходится против часовой стрелки, в каждой вершине делая поворот против часовой стрелки (потому что иначе она бы получилась невыпуклой)
- если у выпуклой оболочки взять самую нижнюю точку, то остальные точки при обходе выпуклой оболочки будут идти в порядке увеличения наклона прямых, проведённых через эту нижнюю точку и через точки, которые мы обходим

Так что, чтобы найти convex hull для набора точек, надо взять самую нижнюю точку, отсортировать остальные в порядке увеличения угла и потом последовательно перебирать их, пытаясь построить выпуклую оболочку, делая возвраты и избавляясь от точек, через которые у нас не получается (происходит поворот по часовой стрелке) построить выпуклый многоугольник (вот как на картинке 3.png, выбрасываем тройку? пробуем построить через 1-2-4, опять не получается, выбрасываем двойку, пробуем построить через 1-4-5-6, потом через 1-4-6-... и так далее).

Этот алгоритм называется graham scan. Вроде как может использоваться для того, чтобы найти кратчайший путь, чтобы обойти препятствие, или чтобы найти две самые удалённые друг от друга точки в наборе без полного их перебора (хотя там всё равно будет перебор пар точек на выпуклой оболочке и в худшем случае он всё равно будет O(N^2), не знаю, можно ли тут как-нибудь схитрить).
.png35 Кб, 512x512
PoppyFanboy 353 325040
https://youtu.be/QXczfq3MCYQ

https://youtu.be/Y0pwT-vbamc
Это настолько хороший кавер, что я довольно поздно понял, что это не оригинал (не знаю, как я так умудрился, особенно с учётом того, что в самом начале там написано, что музыку писал neru, который делает вокалоидные песенки). Оригинал с кагамине рин и лен, кстати, звучит в разы хуже, и я боюсь того, что это не просто какой-то единичный случай, а правило: настоящий голос >>> вокалоид.

То же самое вот, кстати, с этой песней:
https://youtu.be/Vs1nhyUvYUw
Вокалоид версия значительно более блеклая что ли.

Сегодня должен был быть день, когда это место превратилось бы в vylezatorski blozhik, но этого не произошло, потому что я ничего не делал. Может быть, завтра.

У меня в голове сидит дебильная идея засунуть всякие штуки вроде базовых понятий из теории вероятностей, алгоритмов и ещё бог весть чего в какое-то одно место в интернете и чтобы оно было оформлено в техе. А всё потому, что у меня отвратительная память и некоторые вещи приходится в ней отряхивать от пыли, и одновременно с этим оказалось, что записи с сплющенными формулами в плейн тексте, которые здесь есть, не очень хорошо воспринимаются, если читать их спустя какое-то время. Я просто чувствую себя каким-то неуверенным в том, что вроде как знаю, но при этом у меня нет этой информации записанной где-то в быстром доступе.

Вообще сбор всей этой информации в теории не должен занять много времени, потому что я и не знаю ничего по большому счёту, но я всё равно, думаю, что буду заниматься этим очень постепенно. Опять же, не знаю, насколько это будет вообще полезно, у меня какое-то нездоровое желание всё это сгруппировать и засунуть в одно место. Всё из-за того, что моя голова - это слишком ненадёжное место для хранения информации.

Немного фрустрирован тем, что не могу изменить режим сна в обратную сторону: заснуть раньше не могу, проснуться раньше - тоже: вообще не соображаю, что происходит вокруг меня утром. Не спать чуть больше суток - бесполезно, сколько ни пробовал, новый режим держится разве что пару дней, а потом я один раз засыпаю слишком поздно и всё опять ломается. Вроде в этих ситуациях все используют мелатонин, но это надо идти в аптеку. К тому же я жесть ненавижу существовать утром, особенно зимой, когда светлеет относительно поздно, от предрассветного неба ужасно тошно почему-то становится. И я как-то никогда не чувствовал никакого прилива сил по утрам, хотя обычно утренние часы рекламируют как лучшее время для того, чтобы чем-то заниматься, но у меня всё наоборот. А ещё утром сильнее всего давит прокрастинация, потому что кажется, что ещё весь день впереди и торопиться некуда.

Ещё большая проблема с тем, чтобы начать день, просто не получается заставить себя утром начать вообще что-либо делать: просто лежу в постели часа два.

Ну, короче, да, сегодня был плохой день.
.png35 Кб, 512x512
PoppyFanboy 353 325040
https://youtu.be/QXczfq3MCYQ

https://youtu.be/Y0pwT-vbamc
Это настолько хороший кавер, что я довольно поздно понял, что это не оригинал (не знаю, как я так умудрился, особенно с учётом того, что в самом начале там написано, что музыку писал neru, который делает вокалоидные песенки). Оригинал с кагамине рин и лен, кстати, звучит в разы хуже, и я боюсь того, что это не просто какой-то единичный случай, а правило: настоящий голос >>> вокалоид.

То же самое вот, кстати, с этой песней:
https://youtu.be/Vs1nhyUvYUw
Вокалоид версия значительно более блеклая что ли.

Сегодня должен был быть день, когда это место превратилось бы в vylezatorski blozhik, но этого не произошло, потому что я ничего не делал. Может быть, завтра.

У меня в голове сидит дебильная идея засунуть всякие штуки вроде базовых понятий из теории вероятностей, алгоритмов и ещё бог весть чего в какое-то одно место в интернете и чтобы оно было оформлено в техе. А всё потому, что у меня отвратительная память и некоторые вещи приходится в ней отряхивать от пыли, и одновременно с этим оказалось, что записи с сплющенными формулами в плейн тексте, которые здесь есть, не очень хорошо воспринимаются, если читать их спустя какое-то время. Я просто чувствую себя каким-то неуверенным в том, что вроде как знаю, но при этом у меня нет этой информации записанной где-то в быстром доступе.

Вообще сбор всей этой информации в теории не должен занять много времени, потому что я и не знаю ничего по большому счёту, но я всё равно, думаю, что буду заниматься этим очень постепенно. Опять же, не знаю, насколько это будет вообще полезно, у меня какое-то нездоровое желание всё это сгруппировать и засунуть в одно место. Всё из-за того, что моя голова - это слишком ненадёжное место для хранения информации.

Немного фрустрирован тем, что не могу изменить режим сна в обратную сторону: заснуть раньше не могу, проснуться раньше - тоже: вообще не соображаю, что происходит вокруг меня утром. Не спать чуть больше суток - бесполезно, сколько ни пробовал, новый режим держится разве что пару дней, а потом я один раз засыпаю слишком поздно и всё опять ломается. Вроде в этих ситуациях все используют мелатонин, но это надо идти в аптеку. К тому же я жесть ненавижу существовать утром, особенно зимой, когда светлеет относительно поздно, от предрассветного неба ужасно тошно почему-то становится. И я как-то никогда не чувствовал никакого прилива сил по утрам, хотя обычно утренние часы рекламируют как лучшее время для того, чтобы чем-то заниматься, но у меня всё наоборот. А ещё утром сильнее всего давит прокрастинация, потому что кажется, что ещё весь день впереди и торопиться некуда.

Ещё большая проблема с тем, чтобы начать день, просто не получается заставить себя утром начать вообще что-либо делать: просто лежу в постели часа два.

Ну, короче, да, сегодня был плохой день.
sage 354 325164
>>324221
Двачую вот этого
>>325036

>Я использую устройство для ввода информации, созданной от руки, непосредственно в компьютер.


Опчик, ну чего ты. Анону лишь интересно в какой ты программе ты рисуешь записи и каким планшетом пользуешься

Может анон хотел с тобой подискутировать на тему что лучше, диджитал записи или в тетраде? Не будь бякой
355 325182
Опчик, ни в коем разе на тебя не гоню за твой ответ. Твой дневник - твои правила.

Твои записи смотивировали меня на использования планшета при решении задачек. Вот и любопытствую теперь, чем мой сенсей пользуется

(>>325164 анон. Сага случайно зацепилась)
UCLLDeque.png302 Кб, 1200x1080
Рируру !!gYmpHned/k 356 325294
>>325036
Сделал сложную и противную реализацию (UCLLDeque, standing for “unrolled circular linked list”), которую сам использую:
https://ideone.com/BVj9Bb
Её суть в том, чтобы, с одной стороны, обойтись сублинейным числом аллокаций, с другой — никогда ничего никуда не перемещать: состояние headNode == tailNode && iHead > iTail, провоцирующее столкновение головы и хвоста, запрещено, и вместо перехода в него создаётся новый узел.

А вообще я люблю гетерогенные очереди, состоящие не из объектов фиксированного типа, а из байт, переинтерпретируемых как объекты, что позволяет создавать и читать их прямо на месте. Псевдокод:

struct command_base { virtual void perform(); virtual size_t instance_size(); };
struct print_cmd : command_base { string what; ... };
struct print_colored_cmd : command_base { string what; color color; ... };
struct clear_screen_cmd : command_base { ... };

heterogeneous_queue work;

// добавление работы в очередь. Используется placement new для вызова конструктора на уже выделенной памяти.
{
  print_cmd* print = new (work.put_back(sizeof(print_cmd))) print_cmd;
  print->what = "строка";
}

{
  print_colored_cmd* print_colored = new (work.put_back(sizeof(print_colored_cmd))) print_colored_cmd;
  print_colored->what = "строка красным"
  print_colored->color = color::red;
}

{
  clear_cmd* clear = new (work.put_back(sizeof(clear_cmd))) clear_cmd;
}

// выполнение работы
while (command_base* cmd = work.peek_front())
{
  cmd->perform();
  cmd->~cmd(); // деструктор
  work.pop_front(cmd->instance_size()); // возвращение сырой памяти в ведение очереди
}
UCLLDeque.png302 Кб, 1200x1080
Рируру !!gYmpHned/k 356 325294
>>325036
Сделал сложную и противную реализацию (UCLLDeque, standing for “unrolled circular linked list”), которую сам использую:
https://ideone.com/BVj9Bb
Её суть в том, чтобы, с одной стороны, обойтись сублинейным числом аллокаций, с другой — никогда ничего никуда не перемещать: состояние headNode == tailNode && iHead > iTail, провоцирующее столкновение головы и хвоста, запрещено, и вместо перехода в него создаётся новый узел.

А вообще я люблю гетерогенные очереди, состоящие не из объектов фиксированного типа, а из байт, переинтерпретируемых как объекты, что позволяет создавать и читать их прямо на месте. Псевдокод:

struct command_base { virtual void perform(); virtual size_t instance_size(); };
struct print_cmd : command_base { string what; ... };
struct print_colored_cmd : command_base { string what; color color; ... };
struct clear_screen_cmd : command_base { ... };

heterogeneous_queue work;

// добавление работы в очередь. Используется placement new для вызова конструктора на уже выделенной памяти.
{
  print_cmd* print = new (work.put_back(sizeof(print_cmd))) print_cmd;
  print->what = "строка";
}

{
  print_colored_cmd* print_colored = new (work.put_back(sizeof(print_colored_cmd))) print_colored_cmd;
  print_colored->what = "строка красным"
  print_colored->color = color::red;
}

{
  clear_cmd* clear = new (work.put_back(sizeof(clear_cmd))) clear_cmd;
}

// выполнение работы
while (command_base* cmd = work.peek_front())
{
  cmd->perform();
  cmd->~cmd(); // деструктор
  work.pop_front(cmd->instance_size()); // возвращение сырой памяти в ведение очереди
}
.png36 Кб, 512x512
PoppyFanboy 357 325300
>>324300
Ой, извини, я не заметил, что ты спрашивал про вероятности для одного, двух и так далее любовников. Здесь чуть сложнее:

> вероятность того, что к марине придут k каких-то отдельно выбранных человек = (1/7)k · (6/7)7-k - то есть это вероятность того, что, например, придут именно Петя, Вася и Семён (k = 3), а не три каких-то рандома, так что это ещё не ответ


> количество способов выбрать группу из k человек из 7 считается по формуле 7!/(k! · (7-k)!)


> и теперь, чтобы получить вероятность того, что придут k каких-то любовников, надо сложить вероятности для появления всех возможных групп любовников, но, так как у вероятности для всех групп одинаковые, то достаточно умножить количество способов выбрать группу из k любовников на уже вычисленную вероятность (1/7)k · (6/7)7-k


Вообще это табличная формула, гугли биномиальное распределение или что-то про испытания бернулли.
Чёт я не знаю, то ли я слишком подробно объяснил, то ли недостаточно подробно

>>325164
Ну извини! я не думал о том, что эта информация может быть важной (дешёвые китайские планшеты друг от друга не особо отличаются, да и выбор ПО не особо важен). У меня гаомон m10k 2018, он такой, относительно большой, без экрана, сам по размеру где-то с лист а4, есть много кнопок и штука, которая делает зум. Рисовательная область по размеру как немного вытянутый тетрадный лист. Картинки рисую в sai2 просто дефолтным карандашом со сглаживанием, но, я думаю, есть варианты получше, может, какие-то векторные редакторы. С тем, как лучше писать, на бумаге, или сразу в цифровом виде я пока что не определился. Для меня есть по крайней мере один значительный плюс планшета - это наличие Ctrl+Z: на бумаге я сразу начисто писать не могу, очень часто ошибаюсь.

>>325294
Прикольная штука. То есть мы стартуем только с одной ноды, к которой потом по мере необходимости цепляем новые. При этом поддерживаем вот это пустое пространство между нодой-головой и нодой-хвостом, чтобы нельзя было попеременными push'ами и pop'ами заставлять очередь постоянно выделять и освобождать память: если хвост грозится залезть на голову или наоборот, то вставляем её явным образом, если между головой и хвостом внезапно появляется пустое пространство, то используем его под этот безопасный буфер.

Кстати, а зачем там функция calcItemsCount? Можно ведь просто поддерживать количество элементов в очереди, апдейтя его после каждой операции добавления/удаления элементов.

И я как-то не совсем понимаю, к чему вот этот кусок в addFront (и аналогичный ему в addBack) и за что он вообще отвечает:

> if (iTail == 0) {


>   tailNode = tailNode.prev;


>   iTail = tailNode.values.length;


> }


Я вроде как понял, что этот кусок выполняется только в начальном случае (потому что ни в каком другом iTail не будет равняться 0?), когда очередь пуста и iTail и iHead равны нулю, так что если мы добавляем элемент вперёд, то нам надо апдейтнуть iTail, чтобы он принял адекватное значение.

> if (iHead == headNode.values.length) {


>   headNode = headNode.next;


>   iHead = 0;


> }


А вот с iHead я как-то не понимаю: он же никогда не примет значение values.length в этом месте. Или это сделано с расчётом на то, что iTail и iHead могут быть по умолчанию быть заданы как values.length?

Ничего не понял, слишком сложно. Ну, идею, наверное, понял (это очередь в которой хранятся элементы разной длины и помимо самих элементов мы ещё храним их размеры в байтах?), но не понял в частности, как вообще в такой очереди работает peek_front, почему peek_front не требует размера элемента, а pop_front - требует, и что означает "возвращение сырой памяти в ведение очереди" (это чтобы очередь могла потом переиспользовать эту память, когда надо будет выделять память под новые объекты?).

✲ ✲ ✲

https://youtu.be/lEGG_JPE3UQ
https://youtu.be/4Ois3zB7SJ4

Я ничего не делал. Я ничего не делал! Меня сегодня родители вытащили в театр, поэтому большую часть дня я существовал вне дома, но это так себе оправдание для того, чтобы не делать ничего в оставшееся время. По дороге обратно не повезло пройти мимо области влияния чайной мафии, что создало +1 дурацкую интеракцию с незнакомым человеком.

Я не знаю, что я делал в остальное время, ничего полезного или хорошего. Пытался себя заставить хотя бы дочитать главу про генерики в джаве (там про wildcard типы оставалось и ещё про что-то), но не дочитал до конца. Ну, как бы да, vylezatorstvo идёт полным ходом.

Не получилось заснуть в полночь или около того, хотя я очень старался: первые два часа просто пытался заснуть, но потом начал думать слишком много и стало как-то не очень хорошо и не до того, чтобы думать о сне. Не помню уже, как заснул, но вроде в то же время, что и обычно. И проснулся тоже поздно, где-то в половине одиннадцатого.

Возможно, мне не хватает чёткого планирования, но у меня оно никогда не получалось, поэтому я даже не вижу смысла в том, чтобы пытаться заниматься подобным.
.png36 Кб, 512x512
PoppyFanboy 357 325300
>>324300
Ой, извини, я не заметил, что ты спрашивал про вероятности для одного, двух и так далее любовников. Здесь чуть сложнее:

> вероятность того, что к марине придут k каких-то отдельно выбранных человек = (1/7)k · (6/7)7-k - то есть это вероятность того, что, например, придут именно Петя, Вася и Семён (k = 3), а не три каких-то рандома, так что это ещё не ответ


> количество способов выбрать группу из k человек из 7 считается по формуле 7!/(k! · (7-k)!)


> и теперь, чтобы получить вероятность того, что придут k каких-то любовников, надо сложить вероятности для появления всех возможных групп любовников, но, так как у вероятности для всех групп одинаковые, то достаточно умножить количество способов выбрать группу из k любовников на уже вычисленную вероятность (1/7)k · (6/7)7-k


Вообще это табличная формула, гугли биномиальное распределение или что-то про испытания бернулли.
Чёт я не знаю, то ли я слишком подробно объяснил, то ли недостаточно подробно

>>325164
Ну извини! я не думал о том, что эта информация может быть важной (дешёвые китайские планшеты друг от друга не особо отличаются, да и выбор ПО не особо важен). У меня гаомон m10k 2018, он такой, относительно большой, без экрана, сам по размеру где-то с лист а4, есть много кнопок и штука, которая делает зум. Рисовательная область по размеру как немного вытянутый тетрадный лист. Картинки рисую в sai2 просто дефолтным карандашом со сглаживанием, но, я думаю, есть варианты получше, может, какие-то векторные редакторы. С тем, как лучше писать, на бумаге, или сразу в цифровом виде я пока что не определился. Для меня есть по крайней мере один значительный плюс планшета - это наличие Ctrl+Z: на бумаге я сразу начисто писать не могу, очень часто ошибаюсь.

>>325294
Прикольная штука. То есть мы стартуем только с одной ноды, к которой потом по мере необходимости цепляем новые. При этом поддерживаем вот это пустое пространство между нодой-головой и нодой-хвостом, чтобы нельзя было попеременными push'ами и pop'ами заставлять очередь постоянно выделять и освобождать память: если хвост грозится залезть на голову или наоборот, то вставляем её явным образом, если между головой и хвостом внезапно появляется пустое пространство, то используем его под этот безопасный буфер.

Кстати, а зачем там функция calcItemsCount? Можно ведь просто поддерживать количество элементов в очереди, апдейтя его после каждой операции добавления/удаления элементов.

И я как-то не совсем понимаю, к чему вот этот кусок в addFront (и аналогичный ему в addBack) и за что он вообще отвечает:

> if (iTail == 0) {


>   tailNode = tailNode.prev;


>   iTail = tailNode.values.length;


> }


Я вроде как понял, что этот кусок выполняется только в начальном случае (потому что ни в каком другом iTail не будет равняться 0?), когда очередь пуста и iTail и iHead равны нулю, так что если мы добавляем элемент вперёд, то нам надо апдейтнуть iTail, чтобы он принял адекватное значение.

> if (iHead == headNode.values.length) {


>   headNode = headNode.next;


>   iHead = 0;


> }


А вот с iHead я как-то не понимаю: он же никогда не примет значение values.length в этом месте. Или это сделано с расчётом на то, что iTail и iHead могут быть по умолчанию быть заданы как values.length?

Ничего не понял, слишком сложно. Ну, идею, наверное, понял (это очередь в которой хранятся элементы разной длины и помимо самих элементов мы ещё храним их размеры в байтах?), но не понял в частности, как вообще в такой очереди работает peek_front, почему peek_front не требует размера элемента, а pop_front - требует, и что означает "возвращение сырой памяти в ведение очереди" (это чтобы очередь могла потом переиспользовать эту память, когда надо будет выделять память под новые объекты?).

✲ ✲ ✲

https://youtu.be/lEGG_JPE3UQ
https://youtu.be/4Ois3zB7SJ4

Я ничего не делал. Я ничего не делал! Меня сегодня родители вытащили в театр, поэтому большую часть дня я существовал вне дома, но это так себе оправдание для того, чтобы не делать ничего в оставшееся время. По дороге обратно не повезло пройти мимо области влияния чайной мафии, что создало +1 дурацкую интеракцию с незнакомым человеком.

Я не знаю, что я делал в остальное время, ничего полезного или хорошего. Пытался себя заставить хотя бы дочитать главу про генерики в джаве (там про wildcard типы оставалось и ещё про что-то), но не дочитал до конца. Ну, как бы да, vylezatorstvo идёт полным ходом.

Не получилось заснуть в полночь или около того, хотя я очень старался: первые два часа просто пытался заснуть, но потом начал думать слишком много и стало как-то не очень хорошо и не до того, чтобы думать о сне. Не помню уже, как заснул, но вроде в то же время, что и обычно. И проснулся тоже поздно, где-то в половине одиннадцатого.

Возможно, мне не хватает чёткого планирования, но у меня оно никогда не получалось, поэтому я даже не вижу смысла в том, чтобы пытаться заниматься подобным.
f45a89c6dc2529ead099ba14fbcc0ee0.png837 Кб, 707x1000
Рируру !!gYmpHned/k 358 325305
>>325300
Эти ситуации могут возникнуть на пустой или опустевшей очереди.

>А вот с iHead я как-то не понимаю: он же никогда не примет значение values.length в этом месте.


Это редкий случай, наступающий при выполнении двух условий, и я его специально ловил (закомментированный код в main занимался именно этим, лол): если в очереди находится единственный элемент, причём (1) ровно в конце узла, то после его (2) удаления вызовом popFront() очередь придёт в состояние headNode == tailNode, iHead == iTail == headNode.values.length. Можно было это предусмотреть где-нибудь в другом месте, но там, где эта проверка сейчас, она симметрична с проверкой iTail == 0, а значит, в предположении своей неизбежности, наиболее естественна.

>это очередь в которой хранятся элементы разной длины и помимо самих элементов мы ещё храним их размеры в байтах?


В однонаправленной очереди можно даже не хранить размеры, тогда ты сам сообщаешь их в pop (и отвечаешь за их корректность), а очередь хранит просто сырые байты. Например:
‌><- - - - - - - - - - - - - - - - - -
— пустая очередь с предвыделенными 18 байтами.

Добавим объект A размером 3 байта. Для этого вызовем push(3), который вернёт указатель на память под объект — байт #0 (@p).
‌>p - -< - - - - - - - - - - - - - - -

Через указатель инициализируем объект A и заполняем его данными.
‌>A A A< - - - - - - - - - - - - - - -

Добавим второй объект B размером 7 байт. push(7) вернёт указатель на байт #3 (@p) и приведёт очередь в состояние:
‌>A A A p - - - - - -< - - - - - - - -

Создаём B по указателю @p.
‌>A A A B B B B B B B< - - - - - - - -

Аналогично добавим последний, третий объект C размером 5 байт.
‌>A A A B B B B B B B C C C C C< - - -

Теперь извлекаем объекты.
peekFront() возвращает указатель на самый левый объект. Предполагается, что ты можешь восстановить из него тип и размер объекта. Например, можно хранить в очереди POD-структуры и начинать каждую с uint32 type. В моём же случае всё проще и вместе с тем хитрее: известно, что в очереди лежат наследники command_base, по указателю на который мы можем вызвать виртуальные perform(), get_instance_size() и деструктор — всё, что нам нужно. Полиморфный тип объекта-наследника command_base физически хранится как указатель на VMT где-то среди его первых sizeof(command_base) байт, так что принципиально это тот же uint32 type.

Так вот, peek_front() возвращает указатель на A, с которым мы можем работать.
После обработки его нужно уничтожить (вручную). Очередь придёт в состояние
‌>- - - B B B B B B B C C C C C< - - -

Наконец, вызываем pop_front(size). Этого нельзя сделать сразу, т. к. после этой операции очередь может решить освободить кусок слева от >.
- - - >B B B B B B B C C C C C< - - -

Аналогично извлекаем и обрабатываем B и C, и остаётся пустая очередь:
- - - - - - - - - - - - - - - - ><- - -

Пример: https://ideone.com/pcYwEF.

На самом деле всё ещё веселее: я использую такую очередь как очередь работы, в которую добавляются реквесты переменного размера потоками-заказчиками и извлекаются потоками-исполнителями. Pop, разделённый на две части, естественным образом соответствует моментам, когда нужно захватить и освободить блокировку очереди, чтобы обеспечить атомарность Pop как операции, ну и Put тоже разделяется на LockPut(size) ... формирование объекта ... UnlockPut.

>Кстати, а зачем там функция calcItemsCount?


В прошлом веке существовала философия не хранить легко вычисляемые вещи (https://devblogs.microsoft.com/oldnewthing/20041220-00/?p=36943), к тому же это уменьшает количество точек отказа — мест, где можно допустить ошибку. calcItemsCount вызывается логарифмическое от количества операций число раз в течение всей жизни очереди, и сама занимает тоже логарифмическое время.
f45a89c6dc2529ead099ba14fbcc0ee0.png837 Кб, 707x1000
Рируру !!gYmpHned/k 358 325305
>>325300
Эти ситуации могут возникнуть на пустой или опустевшей очереди.

>А вот с iHead я как-то не понимаю: он же никогда не примет значение values.length в этом месте.


Это редкий случай, наступающий при выполнении двух условий, и я его специально ловил (закомментированный код в main занимался именно этим, лол): если в очереди находится единственный элемент, причём (1) ровно в конце узла, то после его (2) удаления вызовом popFront() очередь придёт в состояние headNode == tailNode, iHead == iTail == headNode.values.length. Можно было это предусмотреть где-нибудь в другом месте, но там, где эта проверка сейчас, она симметрична с проверкой iTail == 0, а значит, в предположении своей неизбежности, наиболее естественна.

>это очередь в которой хранятся элементы разной длины и помимо самих элементов мы ещё храним их размеры в байтах?


В однонаправленной очереди можно даже не хранить размеры, тогда ты сам сообщаешь их в pop (и отвечаешь за их корректность), а очередь хранит просто сырые байты. Например:
‌><- - - - - - - - - - - - - - - - - -
— пустая очередь с предвыделенными 18 байтами.

Добавим объект A размером 3 байта. Для этого вызовем push(3), который вернёт указатель на память под объект — байт #0 (@p).
‌>p - -< - - - - - - - - - - - - - - -

Через указатель инициализируем объект A и заполняем его данными.
‌>A A A< - - - - - - - - - - - - - - -

Добавим второй объект B размером 7 байт. push(7) вернёт указатель на байт #3 (@p) и приведёт очередь в состояние:
‌>A A A p - - - - - -< - - - - - - - -

Создаём B по указателю @p.
‌>A A A B B B B B B B< - - - - - - - -

Аналогично добавим последний, третий объект C размером 5 байт.
‌>A A A B B B B B B B C C C C C< - - -

Теперь извлекаем объекты.
peekFront() возвращает указатель на самый левый объект. Предполагается, что ты можешь восстановить из него тип и размер объекта. Например, можно хранить в очереди POD-структуры и начинать каждую с uint32 type. В моём же случае всё проще и вместе с тем хитрее: известно, что в очереди лежат наследники command_base, по указателю на который мы можем вызвать виртуальные perform(), get_instance_size() и деструктор — всё, что нам нужно. Полиморфный тип объекта-наследника command_base физически хранится как указатель на VMT где-то среди его первых sizeof(command_base) байт, так что принципиально это тот же uint32 type.

Так вот, peek_front() возвращает указатель на A, с которым мы можем работать.
После обработки его нужно уничтожить (вручную). Очередь придёт в состояние
‌>- - - B B B B B B B C C C C C< - - -

Наконец, вызываем pop_front(size). Этого нельзя сделать сразу, т. к. после этой операции очередь может решить освободить кусок слева от >.
- - - >B B B B B B B C C C C C< - - -

Аналогично извлекаем и обрабатываем B и C, и остаётся пустая очередь:
- - - - - - - - - - - - - - - - ><- - -

Пример: https://ideone.com/pcYwEF.

На самом деле всё ещё веселее: я использую такую очередь как очередь работы, в которую добавляются реквесты переменного размера потоками-заказчиками и извлекаются потоками-исполнителями. Pop, разделённый на две части, естественным образом соответствует моментам, когда нужно захватить и освободить блокировку очереди, чтобы обеспечить атомарность Pop как операции, ну и Put тоже разделяется на LockPut(size) ... формирование объекта ... UnlockPut.

>Кстати, а зачем там функция calcItemsCount?


В прошлом веке существовала философия не хранить легко вычисляемые вещи (https://devblogs.microsoft.com/oldnewthing/20041220-00/?p=36943), к тому же это уменьшает количество точек отказа — мест, где можно допустить ошибку. calcItemsCount вызывается логарифмическое от количества операций число раз в течение всей жизни очереди, и сама занимает тоже логарифмическое время.
e672ffc63190d32e97f5d66658aa487d.png1,9 Мб, 981x1132
Рируру !!gYmpHned/k 359 325330
>>325300
>>325305
А нет, переделал (ссылка та же, https://ideone.com/BVj9Bb).

НОВЫЙ ИНВАРИАНТ:
iTail, всё ещё указывая за последний элемент, гарантированно указывает на валидный индекс (как и iHead до этого), таким образом, никогда не может равняться tailNode.values.length. Вместо этого по заполнении tailNode он сразу переходит на 0 следующего узла. Таким образом, по иронии эта очередь, как и моя версия очереди на массиве, всегда содержит минимум 1 пустую ячейку:

>[(iHead)1, 2, 3, 4] → [5, 6, (iTail)null, null]



>...addBack(7)...


>[(iHead)1, 2, 3, 4] → [5, 6, 7, (iTail)null]



>...addBack(8)...


>[(iHead)1, 2, 3, 4] → [5, 6, 7, 8] → [(iTail)null, null, null, ..., null].



Можно заметить, что если к последнему состоянию добавить элемент слева, будет выделен новый узел:

>...addFront(-5)...


>[null, ..., null, null, (iHead)-5] → [1, 2, 3, 4] → [5, 6, 7, 8] → [(iTail)null, null, null, ..., null].


Теперь, если удалить по элементу справа и слева — образуются 2 пустых узла, один из которых будет удалён, и повторяя этот процесс, мы разводим очередь на O(N) аллокаций. У прошлой реализации была та же проблема, я просто её не заметил. Это решается удерживанием двух буферных узлов между хвостом и головой вместо одного (одного достаточно для однонаправленной очереди).

Подводя итоги, стало гораздо проще:
⟡ реализация сократилась на 15 строк

и лучше:
— скорость стала всегда на уровне очереди на массиве, без случайных проваливаний (и это вроде как даже не совсем плацебо: раньше стабильно выдавало slower на одном-двух триалах, теперь ни на одном);

— благодаря исправлению с 2 удерживаемыми пустыми узлами вместо 1 очередь ТЕПЕРЬ-ТО УЖ ТОЧНО невозможно подловить на O(N), а на вот том fuzz-безобразии, по которому очередь прогоняется сейчас и которое по своей природе часто триггерило этот баг ненамеренно, число аллокаций (считая аллокациями создание узла и удаление узла из списка с его передачей в лапы GC) сократилось с почти 500 до 80. Очередь над массивом, надо заметить, выполняет 15–25, но у неё они гораздо, гора-аздо тяжелее: реаллокация массива копирует данные из старого, аллокация узла не делает больше ничего.
e672ffc63190d32e97f5d66658aa487d.png1,9 Мб, 981x1132
Рируру !!gYmpHned/k 359 325330
>>325300
>>325305
А нет, переделал (ссылка та же, https://ideone.com/BVj9Bb).

НОВЫЙ ИНВАРИАНТ:
iTail, всё ещё указывая за последний элемент, гарантированно указывает на валидный индекс (как и iHead до этого), таким образом, никогда не может равняться tailNode.values.length. Вместо этого по заполнении tailNode он сразу переходит на 0 следующего узла. Таким образом, по иронии эта очередь, как и моя версия очереди на массиве, всегда содержит минимум 1 пустую ячейку:

>[(iHead)1, 2, 3, 4] → [5, 6, (iTail)null, null]



>...addBack(7)...


>[(iHead)1, 2, 3, 4] → [5, 6, 7, (iTail)null]



>...addBack(8)...


>[(iHead)1, 2, 3, 4] → [5, 6, 7, 8] → [(iTail)null, null, null, ..., null].



Можно заметить, что если к последнему состоянию добавить элемент слева, будет выделен новый узел:

>...addFront(-5)...


>[null, ..., null, null, (iHead)-5] → [1, 2, 3, 4] → [5, 6, 7, 8] → [(iTail)null, null, null, ..., null].


Теперь, если удалить по элементу справа и слева — образуются 2 пустых узла, один из которых будет удалён, и повторяя этот процесс, мы разводим очередь на O(N) аллокаций. У прошлой реализации была та же проблема, я просто её не заметил. Это решается удерживанием двух буферных узлов между хвостом и головой вместо одного (одного достаточно для однонаправленной очереди).

Подводя итоги, стало гораздо проще:
⟡ реализация сократилась на 15 строк

и лучше:
— скорость стала всегда на уровне очереди на массиве, без случайных проваливаний (и это вроде как даже не совсем плацебо: раньше стабильно выдавало slower на одном-двух триалах, теперь ни на одном);

— благодаря исправлению с 2 удерживаемыми пустыми узлами вместо 1 очередь ТЕПЕРЬ-ТО УЖ ТОЧНО невозможно подловить на O(N), а на вот том fuzz-безобразии, по которому очередь прогоняется сейчас и которое по своей природе часто триггерило этот баг ненамеренно, число аллокаций (считая аллокациями создание узла и удаление узла из списка с его передачей в лапы GC) сократилось с почти 500 до 80. Очередь над массивом, надо заметить, выполняет 15–25, но у неё они гораздо, гора-аздо тяжелее: реаллокация массива копирует данные из старого, аллокация узла не делает больше ничего.
.png36 Кб, 512x512
PoppyFanboy 360 325559
https://youtu.be/_l4FsnJt0k4
https://youtu.be/MYp_gJQwRx8

>>323742
Аа, что там оставалось про генерики. Wildcard типы. Так как генерики тут инвариантны (потому что иначе из-за type erasure нельзя было бы вызывать ArrayStoreException так же как с массивами), то требуется всё же какой-нибудь механизм, с помощью которого можно было бы определить супертип для совокупности генерик классов. Это можно делать вот как раз с помощью wildcard'ов, которые бывают ограниченными сверху/снизу или неограниченными.

И тут надо сразу оговориться, что wildcard - это знак вопроса, а вот под wildcard типами подразумеваются типы, которые используют wildcard'ы в своём объявлении (parameterized type with wildcard arguments).

wildcards, ограниченные сверху
A<? extends C> - обозначает совокупность классов вида A<X>, где X extends C. Это можно использовать, например, для того, чтобы сделать метод, который бы мог принимать на вход списки из, скажем, Number объектов. Правда, это же самое можно реализовать и через типовые параметры:

> static <T extends Number> void doSomething(List<T> list)


> static void doSomething(List<? extends Number> list)


Эти два объявления внешне будут работать совершенно одинаково. Различие только в том, что во втором случае мы говорим, что передаём список из объектов какого-то подкласса Number, но мы точно не знаем, что это конкретно за подкласс, поэтому мы не можем передавать в методы списка аргументы, которые были определены через типовой параметр. Можем в них разве что null передать, потому что это значение подходит под все типы аргументов. А вот доставать значения из списка и засовывать их в переменные типа Number - можно.

Мне как-то сложно придумать, какое этому можно найти применение с учётом того, что наиболее очевидное исопльзование в качестве типа для аргументов в методе легко заменяется на другое, более функциональное решение. Может быть, можно исопльзовать в случаях, когда нам не надо мутировать передаваемый генерик объект, чтобы не вставлять в объявление метода определение типовых параметров.

wildcards, ограниченные снизу
A<? super C> - тут всё наоборот: в качестве аргументов можно передавать любые подклассы C, а вот присваивать возвращаемые значения можно только переменным типа Object, потому что верхняя граница не определена.

У этого уже чуть больше очевидных полезных применений. Во-первых, с помощью него можно более грамотно определить Comparable тип в объявлении метода:

> static <T extends Comparable<? super T>> T min(T[] a)


Это нужно на тот случай, если Comparable имплеменируется не прямо в классе T, а в каком-то из его суперклассов, так что в этом случае просто <T extends Comparable<T>> не подошло бы и вызвало compile-time ошибку. (Кстати, она может не выскочить, если не присваивать ничему возвращаемое значение, потому что компилятор очень-очень умный и в таком случае он задаст T суперклассом, который уже соответствует <T extends Comparable<T>>.)

А ещё можно, например, передавать реализации всяких функциональных интерфейсов в методы:

> static <T> void doSomething(List<T> a, Predicate<? super T> p)


То есть можно будет передать как предикат, который работает на объектах типа T, так и предикат, который бы апплаился к каким-то их суперклассам. Но тут опять же, без всего этого можно обойтись, если сделать кучу небезопасных кастов или определить более specific предикат.

неограниченные wildcards
Это уже нечто странное. Грубо говоря, с ними получаются классы, из которых читаются непонятно какие значения и в которые нельзя ничего толком передать (в этом их отличие от raw типов, они по сути являются их более безопасной заменой).

> static <T> void doSomething(List<T> list)


> static void doSomething(List<?> list)


Опять, по сути одинаковые извне объявления, но второе имеет ограничения в виде того, что ты не можешь мутировать список, и не можешь достать из него ничего конкретного. Не знаю, наверное, это нужно для более краткой записи, когда ты хочешь что-то проделать с генерик объектом что-то, что не требует от него знания его типа. А ещё можно делать безопасные коллекции, которые могут хранить в себе GenericType<?> - что-то вроде легальных безопасных массивов из генерик типов, с которыми почти ничего нельзя делать.

Я нашёл интересные статьи на каком-то рандомном сайтике вот как раз по теме. Там чуть более подробно расписаны некоторые моменты, чем в книжке.
http://bayou.io/draft/Capturing_Wildcards.html
http://bayou.io/draft/Wildcard_Case_Studies.html

capture conversion
Собственно, это механизм, по которому работают все wildcard типы. Каждое вхождение переменной типа, в объявлении которого есть <? super/extends что-то там> последовательно заменяется на переменную конкретного типа X, о котором компилятору известно, что он наследуется или является чьим-то суперклассом. С пониманием этого будет немного проще воспринимать несколько экзотические вещи, которые пойдут дальше.

capture helper
Это стандартный трюк для того, чтобы получить чуть больший контроль над wildcard типами. Так-то мы не можем никак нигде в коде заюзать этот значок вопроса. Хотелось бы сделать так:

> static void swap(Pair<?> pair) {


>   ? temp = pair.getFirst();


>   pair.setFirst(pair.getSecond());


>   pair.setSecond(temp);


> }


Но первая строка невозможна в принципе, а вторая вызовет ошибку "setFirst(capture<?>) cannot be applied to capture<?>", потому что capture conversion сначала приведёт результат pair.getSecond() к конкретному типу X, а потом попытается запихнуть его в setFirst, который принимает неизвестно что, и зафейлится на этом.

Решение в том, чтобы просто передать pair генерик методу вида

> static <T> void swap(Pair<T> pair)


Там описанных проблем не будет, потому что знак вопроса "захватывается" типовым параметром T и там уже можно с ней спокойно работать.

вложенные wildcard'ы
Какими бы классными ни были wildcard'ы, генерики всё ещё остаются инвариантными, поэтому какой-нибудь List<Pair<?>> не является супертипом для List<Pair<X>>. Но можно заменить на вот такое объявление: List<? extends Pair<?>>, и тогда всё будет в порядке.

Там ещё в статье рассказывается про ковариантность <? extends X> и контрвариантность <? super X>. И что Supplier<? extends A>, Consumer<? super B>, Function<? super A, ? extends B> - эти штуки следует объявлять вот так, чтобы они работали так, как задумывались, но это очевидно.

wildcard'ы на практике
Они используются не только самим программистом, но и компилятором в тех случаях, когда надо привести два генерик типа к одной нижней общей границе (например, в varargs вида T... или в возвращаемом значении тернарного оператора). Так будет определена чёткая верхняя граница. Например, List<Exception> и List<Error> приведутся к List<? extends Throwable>.

Однако из-за этого раздувается список классов, которые могут быть супертипами для заданного класса. В статье есть пример с Integer'ом, который помимо явных супертипов, которые определены программистами (Object, Number, Comparable<Integer>, Serializable) имеет ещё и всякие

> Comparable<? extends Integer>


> Comparable<? super Integer>


И дальше можно это раздувать бесконечно, заменяя Integer в первом варианте на новый Comparable и так далее до бесконечности. Из-за этого всего сообщения об ошибках иногда выглядят слишком монструозно: extends и super слишком уж длинные слова, а когда их много, всё просто превращается в нечитабельное месиво.

Кстати, вот одно из последствий того, что capture conversion производится последовательно:
https://ideone.com/J8DkhS
Нужно компилятору явно тыкнуть тем, что ты хочешь создать список из Pair<?>, а не список, который хранит какие-то конкретные пары Pair<X>.

как взаимодействовать с легаси кодом, в котором нет wildcard'ов
https://ideone.com/jYRd56
Это вот на случай, если легаси код принимает на вход какой-нибудь List<Object>, так что в метод нельзя просто передать List<Integer>. Ну и аналогично с контравариантными компараторами и функциями, у которых слишком большая область задания и слишком конкретное множество значений (метод принимает функцию из R в множество натуральных чисел, а мы хотим передать функцию, которая отображает натуральные числа в R).

tight bounds
Судя по тому, что написано в статье, раньше было так, что List<? super Object> - было тем же самым, что и просто List<Object> (потому что существует только один класс X, который бы удовлетворял X super Object, - это сам Object и есть, так что эти классы совпадают по логике). И это можно было проверить, присвоив переменной типа List<List<Object>> переменную типа List<List<? super Object>>. (Тут используется инвариантность генериков, чтобы проверить совпадение классов.) Но сейчас это выдаёт compile-time ошибку.

Я вообще не знаю, зачем я так подробно про всё это читаю. Ну, а, ну, м, да, просто, почему нет. По крайней мере, дочитав статью до конца, я узнал об вот том интересном способе конверсии между генерик типами, когда взаимодействуешь с легаси кодом.
.png36 Кб, 512x512
PoppyFanboy 360 325559
https://youtu.be/_l4FsnJt0k4
https://youtu.be/MYp_gJQwRx8

>>323742
Аа, что там оставалось про генерики. Wildcard типы. Так как генерики тут инвариантны (потому что иначе из-за type erasure нельзя было бы вызывать ArrayStoreException так же как с массивами), то требуется всё же какой-нибудь механизм, с помощью которого можно было бы определить супертип для совокупности генерик классов. Это можно делать вот как раз с помощью wildcard'ов, которые бывают ограниченными сверху/снизу или неограниченными.

И тут надо сразу оговориться, что wildcard - это знак вопроса, а вот под wildcard типами подразумеваются типы, которые используют wildcard'ы в своём объявлении (parameterized type with wildcard arguments).

wildcards, ограниченные сверху
A<? extends C> - обозначает совокупность классов вида A<X>, где X extends C. Это можно использовать, например, для того, чтобы сделать метод, который бы мог принимать на вход списки из, скажем, Number объектов. Правда, это же самое можно реализовать и через типовые параметры:

> static <T extends Number> void doSomething(List<T> list)


> static void doSomething(List<? extends Number> list)


Эти два объявления внешне будут работать совершенно одинаково. Различие только в том, что во втором случае мы говорим, что передаём список из объектов какого-то подкласса Number, но мы точно не знаем, что это конкретно за подкласс, поэтому мы не можем передавать в методы списка аргументы, которые были определены через типовой параметр. Можем в них разве что null передать, потому что это значение подходит под все типы аргументов. А вот доставать значения из списка и засовывать их в переменные типа Number - можно.

Мне как-то сложно придумать, какое этому можно найти применение с учётом того, что наиболее очевидное исопльзование в качестве типа для аргументов в методе легко заменяется на другое, более функциональное решение. Может быть, можно исопльзовать в случаях, когда нам не надо мутировать передаваемый генерик объект, чтобы не вставлять в объявление метода определение типовых параметров.

wildcards, ограниченные снизу
A<? super C> - тут всё наоборот: в качестве аргументов можно передавать любые подклассы C, а вот присваивать возвращаемые значения можно только переменным типа Object, потому что верхняя граница не определена.

У этого уже чуть больше очевидных полезных применений. Во-первых, с помощью него можно более грамотно определить Comparable тип в объявлении метода:

> static <T extends Comparable<? super T>> T min(T[] a)


Это нужно на тот случай, если Comparable имплеменируется не прямо в классе T, а в каком-то из его суперклассов, так что в этом случае просто <T extends Comparable<T>> не подошло бы и вызвало compile-time ошибку. (Кстати, она может не выскочить, если не присваивать ничему возвращаемое значение, потому что компилятор очень-очень умный и в таком случае он задаст T суперклассом, который уже соответствует <T extends Comparable<T>>.)

А ещё можно, например, передавать реализации всяких функциональных интерфейсов в методы:

> static <T> void doSomething(List<T> a, Predicate<? super T> p)


То есть можно будет передать как предикат, который работает на объектах типа T, так и предикат, который бы апплаился к каким-то их суперклассам. Но тут опять же, без всего этого можно обойтись, если сделать кучу небезопасных кастов или определить более specific предикат.

неограниченные wildcards
Это уже нечто странное. Грубо говоря, с ними получаются классы, из которых читаются непонятно какие значения и в которые нельзя ничего толком передать (в этом их отличие от raw типов, они по сути являются их более безопасной заменой).

> static <T> void doSomething(List<T> list)


> static void doSomething(List<?> list)


Опять, по сути одинаковые извне объявления, но второе имеет ограничения в виде того, что ты не можешь мутировать список, и не можешь достать из него ничего конкретного. Не знаю, наверное, это нужно для более краткой записи, когда ты хочешь что-то проделать с генерик объектом что-то, что не требует от него знания его типа. А ещё можно делать безопасные коллекции, которые могут хранить в себе GenericType<?> - что-то вроде легальных безопасных массивов из генерик типов, с которыми почти ничего нельзя делать.

Я нашёл интересные статьи на каком-то рандомном сайтике вот как раз по теме. Там чуть более подробно расписаны некоторые моменты, чем в книжке.
http://bayou.io/draft/Capturing_Wildcards.html
http://bayou.io/draft/Wildcard_Case_Studies.html

capture conversion
Собственно, это механизм, по которому работают все wildcard типы. Каждое вхождение переменной типа, в объявлении которого есть <? super/extends что-то там> последовательно заменяется на переменную конкретного типа X, о котором компилятору известно, что он наследуется или является чьим-то суперклассом. С пониманием этого будет немного проще воспринимать несколько экзотические вещи, которые пойдут дальше.

capture helper
Это стандартный трюк для того, чтобы получить чуть больший контроль над wildcard типами. Так-то мы не можем никак нигде в коде заюзать этот значок вопроса. Хотелось бы сделать так:

> static void swap(Pair<?> pair) {


>   ? temp = pair.getFirst();


>   pair.setFirst(pair.getSecond());


>   pair.setSecond(temp);


> }


Но первая строка невозможна в принципе, а вторая вызовет ошибку "setFirst(capture<?>) cannot be applied to capture<?>", потому что capture conversion сначала приведёт результат pair.getSecond() к конкретному типу X, а потом попытается запихнуть его в setFirst, который принимает неизвестно что, и зафейлится на этом.

Решение в том, чтобы просто передать pair генерик методу вида

> static <T> void swap(Pair<T> pair)


Там описанных проблем не будет, потому что знак вопроса "захватывается" типовым параметром T и там уже можно с ней спокойно работать.

вложенные wildcard'ы
Какими бы классными ни были wildcard'ы, генерики всё ещё остаются инвариантными, поэтому какой-нибудь List<Pair<?>> не является супертипом для List<Pair<X>>. Но можно заменить на вот такое объявление: List<? extends Pair<?>>, и тогда всё будет в порядке.

Там ещё в статье рассказывается про ковариантность <? extends X> и контрвариантность <? super X>. И что Supplier<? extends A>, Consumer<? super B>, Function<? super A, ? extends B> - эти штуки следует объявлять вот так, чтобы они работали так, как задумывались, но это очевидно.

wildcard'ы на практике
Они используются не только самим программистом, но и компилятором в тех случаях, когда надо привести два генерик типа к одной нижней общей границе (например, в varargs вида T... или в возвращаемом значении тернарного оператора). Так будет определена чёткая верхняя граница. Например, List<Exception> и List<Error> приведутся к List<? extends Throwable>.

Однако из-за этого раздувается список классов, которые могут быть супертипами для заданного класса. В статье есть пример с Integer'ом, который помимо явных супертипов, которые определены программистами (Object, Number, Comparable<Integer>, Serializable) имеет ещё и всякие

> Comparable<? extends Integer>


> Comparable<? super Integer>


И дальше можно это раздувать бесконечно, заменяя Integer в первом варианте на новый Comparable и так далее до бесконечности. Из-за этого всего сообщения об ошибках иногда выглядят слишком монструозно: extends и super слишком уж длинные слова, а когда их много, всё просто превращается в нечитабельное месиво.

Кстати, вот одно из последствий того, что capture conversion производится последовательно:
https://ideone.com/J8DkhS
Нужно компилятору явно тыкнуть тем, что ты хочешь создать список из Pair<?>, а не список, который хранит какие-то конкретные пары Pair<X>.

как взаимодействовать с легаси кодом, в котором нет wildcard'ов
https://ideone.com/jYRd56
Это вот на случай, если легаси код принимает на вход какой-нибудь List<Object>, так что в метод нельзя просто передать List<Integer>. Ну и аналогично с контравариантными компараторами и функциями, у которых слишком большая область задания и слишком конкретное множество значений (метод принимает функцию из R в множество натуральных чисел, а мы хотим передать функцию, которая отображает натуральные числа в R).

tight bounds
Судя по тому, что написано в статье, раньше было так, что List<? super Object> - было тем же самым, что и просто List<Object> (потому что существует только один класс X, который бы удовлетворял X super Object, - это сам Object и есть, так что эти классы совпадают по логике). И это можно было проверить, присвоив переменной типа List<List<Object>> переменную типа List<List<? super Object>>. (Тут используется инвариантность генериков, чтобы проверить совпадение классов.) Но сейчас это выдаёт compile-time ошибку.

Я вообще не знаю, зачем я так подробно про всё это читаю. Ну, а, ну, м, да, просто, почему нет. По крайней мере, дочитав статью до конца, я узнал об вот том интересном способе конверсии между генерик типами, когда взаимодействуешь с легаси кодом.
.png40 Кб, 512x512
PoppyFanboy 361 325563
https://youtu.be/XCyKJD6uQyg
https://youtu.be/YIALlhlyqO4

https://youtu.be/r52KqG4G678
М, оказывается, есть версия без этого чёрного парня. Но мне больше нравится версия с ним.

>>325305

>Предполагается, что ты можешь восстановить из него тип и размер объекта. Например, можно хранить в очереди POD-структуры и начинать каждую с uint32 type.


>Полиморфный тип объекта-наследника command_base физически хранится как указатель на VMT где-то среди его первых sizeof(command_base) байт, так что принципиально это тот же uint32 type.


Понятно, я примерно так себе это и представлял, но меня сбило с толку то, что pop_front зачем-то требует размер size, из-за того, что я забыл про деструктор, который делает невозможным сделать так же, как и в peek_front.

>В прошлом веке существовала философия не хранить легко вычисляемые вещи


М, ну да, оно вычисляется за логарифм, так что это не должно сделать хуже и с ошибками тут да, тоже имеет смысл. Я на это так затриггерился, потому что я не так давно был в ситуации, где лучше было делать size++ и size-- при операциях добавления/удаления, потому что это был стек на однонаправленной очереди. Поэтому сейчас не подумал о том, что тут будет разумнее сделать по-другому.

>Это редкий случай, наступающий при выполнении двух условий


Ну да, ето ты уже объяснил
https://ideone.com/0r1ovb

>>325330

>Теперь, если удалить по элементу справа и слева — образуются 2 пустых узла, один из которых будет удалён, и повторяя этот процесс, мы разводим очередь на O(N) аллокаций.


Даа, вот я тоже посмотрел предыдущую реализацию и не подумал об этом. Но это из-за того, что у меня просто память ужасная: предложением ранее ты говоришь о том, что

>состояние headNode == tailNode && iHead > iTail, провоцирующее столкновение головы и хвоста, запрещено


А потом у меня в голове рисуется картинка, где создаётся буферный узел, благодаря которому должно амортизироваться линейное время, затраченное на аллокацию памяти под этот узел, и в голове неосознанно рисуется картинка, где iTail немного залезает на узел, на котором находится iHead, и это не выглядит криминальным, потому что они же всё равно далеко, хоть и в одном массиве, поэтому то запрещённое состояние как-то забывается.

>число аллокаций сократилось с почти 500 до 80


>Очередь над массивом, надо заметить, выполняет 15–25, но у неё они гораздо, гора-аздо тяжелее: реаллокация массива копирует данные из старого, аллокация узла не делает больше ничего


Даа, вот это крутая идея поэтому. Почему-то ни на секунду не задумался о том, почему в первом варианте всё было наоборот, хотя, казалось бы, были созданы все условия, чтобы крутой циклический unrolled связный список побеждал немощную реализацию на массиве, которой приходится перетаскивать байты с места на место. Подумал, что ну ето медленная джава, наверное, как обычно чудит.

В общем, да, классные штуки, спасибо что рассказал и показал про них.

✲ ✲ ✲

Сегодня меня тоже немного вытащили на улицу и за стол, опять родственники, снова на это ушла большая часть дня, но пока что это такое происходит в последний раз на некоторое время, просто из-за нового года так совпало, что это происходит два дня подряд.

Сегодня я читал вот про wildcard'ы, хотел сначала ограничиться только тем, что написано в книжке, но потом нашёл ту крутую статью, в которой было всё очень подробно расписано с кучей примеров. На это всё ушло некоторое время, потому что я очень много тупил и не понимал, что вообще происходит, поэтому больше ничем я не занимался. Ну и отчасти я так много с этим маялся из-за того, что часто отвлекался. Не знаю, что с этим делать. На фоне перестал слушать музыку со словами, это немного помогает, но она всё равно в какой-то степени отвлекает, хоть и значительно меньше, чем песни, пусть даже на совершенно незнакомом мне языке.

Сейчас не знаю, что делать, я хотел попробовать всё же не спать > суток, чтобы лечь спать в нормальное время: сдвинуть режим назад у меня вообще никак не получается. Не уверен, что это поможет, особенно с учётом того, что я не сильно-то мотивирован делать это, но, думаю, стоит попробовать.

Не знаю, что ещё я как-то ничего особо не делаю и считаю за благо, когда занимаюсь хотя бы чем-то, пусть даже бесполезным, но что требует от меня каких-то минимальных усилий для выполнения. Если получится переместить режим сна хотя бы на примерно 3 часа назад (если лягу спать хотя бы 5 раз не позже часа ночи), то попробую добавить что-нибудь ещё добавить, но пока что буду заниматься сном.

Я думал через несколько часов выйти на улицу куда-нибудь, чтобы походить ногами и проверить, насколько достоверны заезженные шутки про пустеющие улицы утром первого января, но не уверен, что получится себя заставить.

Я специально пишу так странно, вставляя слова-паразиты и прочий мусор между кусками предложений, которые несут в себе какой-то смысл, и не пытаюсь избегать повторений, потому что иначе я начинаю слишком много думать о том, что и как я пишу, ловлю себя на том, что мне противно вчитываться в то, что я печатаю, и слишком сильно начинает хотеться всё стереть, а так я никак не рецензирую свою речь, особо не задумываюсь о форме и почти не думаю о содержании, поэтому писать что-либо чуть проще.
.png40 Кб, 512x512
PoppyFanboy 361 325563
https://youtu.be/XCyKJD6uQyg
https://youtu.be/YIALlhlyqO4

https://youtu.be/r52KqG4G678
М, оказывается, есть версия без этого чёрного парня. Но мне больше нравится версия с ним.

>>325305

>Предполагается, что ты можешь восстановить из него тип и размер объекта. Например, можно хранить в очереди POD-структуры и начинать каждую с uint32 type.


>Полиморфный тип объекта-наследника command_base физически хранится как указатель на VMT где-то среди его первых sizeof(command_base) байт, так что принципиально это тот же uint32 type.


Понятно, я примерно так себе это и представлял, но меня сбило с толку то, что pop_front зачем-то требует размер size, из-за того, что я забыл про деструктор, который делает невозможным сделать так же, как и в peek_front.

>В прошлом веке существовала философия не хранить легко вычисляемые вещи


М, ну да, оно вычисляется за логарифм, так что это не должно сделать хуже и с ошибками тут да, тоже имеет смысл. Я на это так затриггерился, потому что я не так давно был в ситуации, где лучше было делать size++ и size-- при операциях добавления/удаления, потому что это был стек на однонаправленной очереди. Поэтому сейчас не подумал о том, что тут будет разумнее сделать по-другому.

>Это редкий случай, наступающий при выполнении двух условий


Ну да, ето ты уже объяснил
https://ideone.com/0r1ovb

>>325330

>Теперь, если удалить по элементу справа и слева — образуются 2 пустых узла, один из которых будет удалён, и повторяя этот процесс, мы разводим очередь на O(N) аллокаций.


Даа, вот я тоже посмотрел предыдущую реализацию и не подумал об этом. Но это из-за того, что у меня просто память ужасная: предложением ранее ты говоришь о том, что

>состояние headNode == tailNode && iHead > iTail, провоцирующее столкновение головы и хвоста, запрещено


А потом у меня в голове рисуется картинка, где создаётся буферный узел, благодаря которому должно амортизироваться линейное время, затраченное на аллокацию памяти под этот узел, и в голове неосознанно рисуется картинка, где iTail немного залезает на узел, на котором находится iHead, и это не выглядит криминальным, потому что они же всё равно далеко, хоть и в одном массиве, поэтому то запрещённое состояние как-то забывается.

>число аллокаций сократилось с почти 500 до 80


>Очередь над массивом, надо заметить, выполняет 15–25, но у неё они гораздо, гора-аздо тяжелее: реаллокация массива копирует данные из старого, аллокация узла не делает больше ничего


Даа, вот это крутая идея поэтому. Почему-то ни на секунду не задумался о том, почему в первом варианте всё было наоборот, хотя, казалось бы, были созданы все условия, чтобы крутой циклический unrolled связный список побеждал немощную реализацию на массиве, которой приходится перетаскивать байты с места на место. Подумал, что ну ето медленная джава, наверное, как обычно чудит.

В общем, да, классные штуки, спасибо что рассказал и показал про них.

✲ ✲ ✲

Сегодня меня тоже немного вытащили на улицу и за стол, опять родственники, снова на это ушла большая часть дня, но пока что это такое происходит в последний раз на некоторое время, просто из-за нового года так совпало, что это происходит два дня подряд.

Сегодня я читал вот про wildcard'ы, хотел сначала ограничиться только тем, что написано в книжке, но потом нашёл ту крутую статью, в которой было всё очень подробно расписано с кучей примеров. На это всё ушло некоторое время, потому что я очень много тупил и не понимал, что вообще происходит, поэтому больше ничем я не занимался. Ну и отчасти я так много с этим маялся из-за того, что часто отвлекался. Не знаю, что с этим делать. На фоне перестал слушать музыку со словами, это немного помогает, но она всё равно в какой-то степени отвлекает, хоть и значительно меньше, чем песни, пусть даже на совершенно незнакомом мне языке.

Сейчас не знаю, что делать, я хотел попробовать всё же не спать > суток, чтобы лечь спать в нормальное время: сдвинуть режим назад у меня вообще никак не получается. Не уверен, что это поможет, особенно с учётом того, что я не сильно-то мотивирован делать это, но, думаю, стоит попробовать.

Не знаю, что ещё я как-то ничего особо не делаю и считаю за благо, когда занимаюсь хотя бы чем-то, пусть даже бесполезным, но что требует от меня каких-то минимальных усилий для выполнения. Если получится переместить режим сна хотя бы на примерно 3 часа назад (если лягу спать хотя бы 5 раз не позже часа ночи), то попробую добавить что-нибудь ещё добавить, но пока что буду заниматься сном.

Я думал через несколько часов выйти на улицу куда-нибудь, чтобы походить ногами и проверить, насколько достоверны заезженные шутки про пустеющие улицы утром первого января, но не уверен, что получится себя заставить.

Я специально пишу так странно, вставляя слова-паразиты и прочий мусор между кусками предложений, которые несут в себе какой-то смысл, и не пытаюсь избегать повторений, потому что иначе я начинаю слишком много думать о том, что и как я пишу, ловлю себя на том, что мне противно вчитываться в то, что я печатаю, и слишком сильно начинает хотеться всё стереть, а так я никак не рецензирую свою речь, особо не задумываюсь о форме и почти не думаю о содержании, поэтому писать что-либо чуть проще.
.png37 Кб, 512x512
PoppyFanboy 362 325716
https://youtu.be/nCaqf9WhqOY
https://youtu.be/nya7hAU6S-o

Вышел на улицу на несколько часов. Не знаю, чего я ожидал, выходя туда рано утром и в такой день. Больше не буду ходить куда-то далеко только потому, что там якобы интереснее ходить: потребность ходить ногами надо удовлетворять самым дешёвым из возможных способов, в разнообразии это не нуждается.

После всё же не выдержал случайно заснул часа на 4, а потом ничего не делал, только немного играл в игры. Не получается заставлять себя что-то делать, не знаю, как с этим справляться. Сейчас попробую написать список дел на завтра (который всё равно не открою на следующий день) и пойду спать.

всё, это последний стекер из этого ужасного стекер пака. больше не буду постить подобное
.jpg487 Кб, 2426x4052
PoppyFanboy 363 326055
https://youtu.be/9rlNpWYQunY
https://youtu.be/CYy5irjG4c4

Какой-то ужасный опять день, лучше бы его не существовало, а лучше бы и меня тоже вместе с ним никогда не существовало, вот это было бы лучше всего, но непоправимое уже случилось, так что ничего не поделаешь.

Несмотря на то, что лёг спать достаточно рано, всё равно проспал миллиард часов и проснулся в то же время, как если бы я лёг спать в четыре ночи. В общем, всё, режим сна изменить невозможно, я сдаюсь и намеренно больше не буду пытаться. Следующая vylezatorskaya цель - выходить из дома каждый день хотя бы на минут 40 и делать zryadku по утрам. Не знаю, почему, но, если я даже дня 3-4 никуда не выхожу, то начинаю себя чувствовать физически отвратительно. Выходить на улицу - это не то чтобы какая-то проблема, потому что обычно это было просто необходимостью, но в ближайшее время я мог бы обходиться и без этого, поэтому приходится специально заставлять себя это делать. Зарядку никогда в своей жизни не делал и не получалось заставлять себя, попробую с этого момента её пытаться делать, хотя бы какие-то простые упражнения.

Ээ, да, сегодня я проснулся опять слишком поздно, с утра вышел на улицу где-то минут на 50, прошёл по кругу просто один раз. Мне пытались рассказать про сортировку слиянием, которую я, блин, конечно, знаю, но написать не могу. Очень сильно тупил, поэтому ничего не прошёл вообще, просто прослушал несколько видео, состоящих из воды и нескольких интересных моментов.

Во-первых, я узнал, что в mergesort'е можно немного сэкономить на количестве array access'ов. Если у нас есть массив a с данными и aux, который мы используем в качестве буфера при слиянии подмассивов, то можно сделать так, чтобы sort(A, aux) обрабатывала массив aux и помещала отсортированные половинки в A, а merge(A, aux) засовывала бы результат слияния массивов из A в массив aux. В таком случае, если изначально иницализировать aux значениями из A, можно написать вот такое:

> sort(a, aux) {


>  // отсортированные половинки кладутся в aux


>   sort(aux, A);


>   sort(aux, A);


>   // отсортированный массив кладётся в A


>   merge(aux, A);


Так можно немного уменьшить количество записей/чтений массива. В стандартной версии на каждом уровне рекурсии при слиянии выполняется 2N чтений/записей (чтобы переместить данные в дополнительный массив), 2N операций чтения (сравнение элементов при слиянии), 2N операций чтения/записи, чтобы перенести всё обратно в изначальный массив. То есть всего 6N.

А в улучшенной версии будет 2N чтений на сравнение и 2N на запись из одного массива в другой. Плюс ещё надо будет все данные перед выполнением алгоритма скопировать в буферный массив. Ну, получается, где-то в полтора раза меньше array access'ов.

А ещё можно в два раза уменьшить использование памяти, если копировать не весь массив в буфер перед слиянием, а только левую его половину. То есть левую половину массива читать из буферного массива, а правую - из изначального source массива, в который же мы сразу же и пишем результат. В худшем случае мы заполним source массив элементами из первой половины, а потом начнём заменять элементы из правого массива самих на себя, потому что левый массив кончился.

А можно избежать и вот этого дурацкого случая и заодно немного повысить эффективность сортировки, если просто сделать проверку a[mid - 1] < a[mid] перед тем, как делать слияние массивов. Так сортировка будет работать за линейное время на отсортированном массиве.

Во-вторых мне рассказали про bottom-up версию сортировки слиянием, которая же без рекурсии, которая же начинает со слияния маленьких массивов и постепенно доходит до больших. Вот тут у меня были огромные проблемы с индексами, потому что я сначала хотел делать цикл с размерами массивов (size), которые надо было бы делить пополам (то есть начинать с size=2), но в конце оказалось, что вряд ли с этим получится что-либо адекватное, потому что при слиянии последних двух половинок size может получиться больше размера массива и тогда будет непонятно, как делить массив.

Ээ, и сейчас я понял, что можно было бы просто поделить size пополам, чтобы получить массив на [0, size/2] и [size/2, array.length], но это пришлось бы спешлкейсить, наверное, в общем, проще брать size, начиная с единицы. Да, я вот с этим тупил.

В-третьих, мне рассказали про то, почему compare-based сортировка не может работать быстрее, чем за NlgN сравнений. Для этого достаточно построить дерево решений для массива размера N (ну, такое же дерево, какое получается при определении, в каком порядке идут числа a, b и c: в узлах a<b, b<c, a<c и так далее). В этом дереве должно быть N! листьев для каждого исхода (перестановки). Тогда, если h - высота дерева, то 2^h ≥ N!, потому что 2^h - максимальное количество вершин в бинарном дереве высоты h.

И теперь достаточно взять логарифм от факториала и по форумуле Стирлинга понять, что h = O(NlgN), а h - это как раз и есть худший случай для сортировки (самый длинный путь от верхней вершины к самому дальнему листку). Ну, это очень грубое доказательство, даже не доказательство, а скорее его набросок, потому что я там даже написал О-большое, а не тетту, хотя там надо было написать тетту, но в целом понятно, как доказывать.

Ещё мне показали алгоритм поиска количества инверсий за NlgN, который максимально похож на сортировку слиянием и отличается от неё только в процедуре merge, которая тут дополнительно считает инверсии: если находим элемент слева, который был бы больше, чем элемент справа, то мы увеличиваем счётчик инверсий на количество элементов, остающихся в левом массиве, потому что при условии отсортированности они все будут больше, чем текущий элемент справа. И мы считаем вот так инверсии и приплюсовываем к ним инверсии внутри левого и правого массивов и получаем результат.

И ещё мне показали алгоритм перемешивания связного списка за O(NlgN) и O(1) дополнительной памяти. Там список делится пополам, каждая половинка рекурсивно перемешивается отдельно, а потом эти два перемешанных списка сливаются в один, как будто бы мы тасуем карты, но при этом мы должны учитывать размеры массивов. Можно рассмотреть самый простой случай для лучшего понимания:

> надо собрать воедино списки [2, 1] и [3, 4]


> каждый раз будем выбирать элемент из левого массива с вероятностью len(left) / (len(left) + len(right)), иначе берём правый


> в таком случае получится, что у всех шести возможных здесь перестановок будут одинаковые вероятности


> а если каждый раз выбирать с вероятностью 1/2, то получится, например, что вероятность получить перестановку 2134 выше, чем вероятность получить 2314


Я не знаю точно, как это работает, но оно интуитивно понятно. Ну, а ещё, наверное, можно за O(N) дополнительной памяти запомнить все элементы списка в массив, перемешать его за O(N) и за линейное же время собрать новый список.

Короче, я очень сильно расстроился из-за того, что я такой тупой и ничего не сделал не потому что я бездельничал, а потому что я очень сильно тупой и, видимо процесс гниения дошёл до головы, поэтому я начал делать ерунду, думал, сегодня же и закончить, но слишком быстро понял, что переоценил себя, поэтому сделал только фигурки и возможность их переворачивать ДА, ЗА ГОД ПРОГРЕСС ОТ ЗМЕЙКИ ДО ЭТОГО, я просто хочу что-нибудь начать делать, можно я сначала это просто попробую сделать и, если получится, то это будет хотя бы каким-то гарантом того, что я смогу сделать что-то сложнее.

Я уже успел принять очень много странных решений, как минимум у меня есть два enuma, один для фигурок из четырёх блоков, второй - для фигурок от пяти, причём фигурки хранятся как массивы из строк, потому что стена из true-false выглядит слишком жутко, и там пришлось сделать отдельный метод, который в static initialization блоке переводит все фигурки из строковой формы в массив boolean[][]. Ну и ещё я сделал, чтобы можно было вертеть их.

Я пока что не знаю, как лучше хранить фигурки, как boolean[][] или как отдельный объект, в котором указаны цвет, поворот фигурки и тип фигурки (вот один из enum'ов, для которых можно сделать интерфейс с методами поворота и доставания boolean[][] массива с описанием того, как фигурка выглядит). Вообще я больше склоняюсь ко второму, да.

Короче, всё, сейчас напишу план на завтрашний день, который всё равно не выполню, в который надо включить зарядку и пойти на улицу на 40 минут, всё, перечитывать не буду, не знаю, что я тут написал.
.jpg487 Кб, 2426x4052
PoppyFanboy 363 326055
https://youtu.be/9rlNpWYQunY
https://youtu.be/CYy5irjG4c4

Какой-то ужасный опять день, лучше бы его не существовало, а лучше бы и меня тоже вместе с ним никогда не существовало, вот это было бы лучше всего, но непоправимое уже случилось, так что ничего не поделаешь.

Несмотря на то, что лёг спать достаточно рано, всё равно проспал миллиард часов и проснулся в то же время, как если бы я лёг спать в четыре ночи. В общем, всё, режим сна изменить невозможно, я сдаюсь и намеренно больше не буду пытаться. Следующая vylezatorskaya цель - выходить из дома каждый день хотя бы на минут 40 и делать zryadku по утрам. Не знаю, почему, но, если я даже дня 3-4 никуда не выхожу, то начинаю себя чувствовать физически отвратительно. Выходить на улицу - это не то чтобы какая-то проблема, потому что обычно это было просто необходимостью, но в ближайшее время я мог бы обходиться и без этого, поэтому приходится специально заставлять себя это делать. Зарядку никогда в своей жизни не делал и не получалось заставлять себя, попробую с этого момента её пытаться делать, хотя бы какие-то простые упражнения.

Ээ, да, сегодня я проснулся опять слишком поздно, с утра вышел на улицу где-то минут на 50, прошёл по кругу просто один раз. Мне пытались рассказать про сортировку слиянием, которую я, блин, конечно, знаю, но написать не могу. Очень сильно тупил, поэтому ничего не прошёл вообще, просто прослушал несколько видео, состоящих из воды и нескольких интересных моментов.

Во-первых, я узнал, что в mergesort'е можно немного сэкономить на количестве array access'ов. Если у нас есть массив a с данными и aux, который мы используем в качестве буфера при слиянии подмассивов, то можно сделать так, чтобы sort(A, aux) обрабатывала массив aux и помещала отсортированные половинки в A, а merge(A, aux) засовывала бы результат слияния массивов из A в массив aux. В таком случае, если изначально иницализировать aux значениями из A, можно написать вот такое:

> sort(a, aux) {


>  // отсортированные половинки кладутся в aux


>   sort(aux, A);


>   sort(aux, A);


>   // отсортированный массив кладётся в A


>   merge(aux, A);


Так можно немного уменьшить количество записей/чтений массива. В стандартной версии на каждом уровне рекурсии при слиянии выполняется 2N чтений/записей (чтобы переместить данные в дополнительный массив), 2N операций чтения (сравнение элементов при слиянии), 2N операций чтения/записи, чтобы перенести всё обратно в изначальный массив. То есть всего 6N.

А в улучшенной версии будет 2N чтений на сравнение и 2N на запись из одного массива в другой. Плюс ещё надо будет все данные перед выполнением алгоритма скопировать в буферный массив. Ну, получается, где-то в полтора раза меньше array access'ов.

А ещё можно в два раза уменьшить использование памяти, если копировать не весь массив в буфер перед слиянием, а только левую его половину. То есть левую половину массива читать из буферного массива, а правую - из изначального source массива, в который же мы сразу же и пишем результат. В худшем случае мы заполним source массив элементами из первой половины, а потом начнём заменять элементы из правого массива самих на себя, потому что левый массив кончился.

А можно избежать и вот этого дурацкого случая и заодно немного повысить эффективность сортировки, если просто сделать проверку a[mid - 1] < a[mid] перед тем, как делать слияние массивов. Так сортировка будет работать за линейное время на отсортированном массиве.

Во-вторых мне рассказали про bottom-up версию сортировки слиянием, которая же без рекурсии, которая же начинает со слияния маленьких массивов и постепенно доходит до больших. Вот тут у меня были огромные проблемы с индексами, потому что я сначала хотел делать цикл с размерами массивов (size), которые надо было бы делить пополам (то есть начинать с size=2), но в конце оказалось, что вряд ли с этим получится что-либо адекватное, потому что при слиянии последних двух половинок size может получиться больше размера массива и тогда будет непонятно, как делить массив.

Ээ, и сейчас я понял, что можно было бы просто поделить size пополам, чтобы получить массив на [0, size/2] и [size/2, array.length], но это пришлось бы спешлкейсить, наверное, в общем, проще брать size, начиная с единицы. Да, я вот с этим тупил.

В-третьих, мне рассказали про то, почему compare-based сортировка не может работать быстрее, чем за NlgN сравнений. Для этого достаточно построить дерево решений для массива размера N (ну, такое же дерево, какое получается при определении, в каком порядке идут числа a, b и c: в узлах a<b, b<c, a<c и так далее). В этом дереве должно быть N! листьев для каждого исхода (перестановки). Тогда, если h - высота дерева, то 2^h ≥ N!, потому что 2^h - максимальное количество вершин в бинарном дереве высоты h.

И теперь достаточно взять логарифм от факториала и по форумуле Стирлинга понять, что h = O(NlgN), а h - это как раз и есть худший случай для сортировки (самый длинный путь от верхней вершины к самому дальнему листку). Ну, это очень грубое доказательство, даже не доказательство, а скорее его набросок, потому что я там даже написал О-большое, а не тетту, хотя там надо было написать тетту, но в целом понятно, как доказывать.

Ещё мне показали алгоритм поиска количества инверсий за NlgN, который максимально похож на сортировку слиянием и отличается от неё только в процедуре merge, которая тут дополнительно считает инверсии: если находим элемент слева, который был бы больше, чем элемент справа, то мы увеличиваем счётчик инверсий на количество элементов, остающихся в левом массиве, потому что при условии отсортированности они все будут больше, чем текущий элемент справа. И мы считаем вот так инверсии и приплюсовываем к ним инверсии внутри левого и правого массивов и получаем результат.

И ещё мне показали алгоритм перемешивания связного списка за O(NlgN) и O(1) дополнительной памяти. Там список делится пополам, каждая половинка рекурсивно перемешивается отдельно, а потом эти два перемешанных списка сливаются в один, как будто бы мы тасуем карты, но при этом мы должны учитывать размеры массивов. Можно рассмотреть самый простой случай для лучшего понимания:

> надо собрать воедино списки [2, 1] и [3, 4]


> каждый раз будем выбирать элемент из левого массива с вероятностью len(left) / (len(left) + len(right)), иначе берём правый


> в таком случае получится, что у всех шести возможных здесь перестановок будут одинаковые вероятности


> а если каждый раз выбирать с вероятностью 1/2, то получится, например, что вероятность получить перестановку 2134 выше, чем вероятность получить 2314


Я не знаю точно, как это работает, но оно интуитивно понятно. Ну, а ещё, наверное, можно за O(N) дополнительной памяти запомнить все элементы списка в массив, перемешать его за O(N) и за линейное же время собрать новый список.

Короче, я очень сильно расстроился из-за того, что я такой тупой и ничего не сделал не потому что я бездельничал, а потому что я очень сильно тупой и, видимо процесс гниения дошёл до головы, поэтому я начал делать ерунду, думал, сегодня же и закончить, но слишком быстро понял, что переоценил себя, поэтому сделал только фигурки и возможность их переворачивать ДА, ЗА ГОД ПРОГРЕСС ОТ ЗМЕЙКИ ДО ЭТОГО, я просто хочу что-нибудь начать делать, можно я сначала это просто попробую сделать и, если получится, то это будет хотя бы каким-то гарантом того, что я смогу сделать что-то сложнее.

Я уже успел принять очень много странных решений, как минимум у меня есть два enuma, один для фигурок из четырёх блоков, второй - для фигурок от пяти, причём фигурки хранятся как массивы из строк, потому что стена из true-false выглядит слишком жутко, и там пришлось сделать отдельный метод, который в static initialization блоке переводит все фигурки из строковой формы в массив boolean[][]. Ну и ещё я сделал, чтобы можно было вертеть их.

Я пока что не знаю, как лучше хранить фигурки, как boolean[][] или как отдельный объект, в котором указаны цвет, поворот фигурки и тип фигурки (вот один из enum'ов, для которых можно сделать интерфейс с методами поворота и доставания boolean[][] массива с описанием того, как фигурка выглядит). Вообще я больше склоняюсь ко второму, да.

Короче, всё, сейчас напишу план на завтрашний день, который всё равно не выполню, в который надо включить зарядку и пойти на улицу на 40 минут, всё, перечитывать не буду, не знаю, что я тут написал.
a488d9db0781c44df0e73972611dc60e+.jpg1,9 Мб, 2523x1382
Рируру !!gYmpHned/k 364 326223
>>326055

>boolean[][]


https://ideone.com/6SNrhV
Со строки 128 по строку 208 — это такой смешной прикол, не обращайте внимания. Хотя теоретически туда можно вместо копирования передавать как параметр произвольную трёхоперандную функцию, с тем, чтобы выполнять операции над битами не так, как они сейчас выполняются в .or() и .andNot(), а пачками, и тем самым дать битовому полю шанс показать себя чем-то большим, нежели вариант boolean[][] для людей с маленьким членом, которым оно является сейчас.
PoppyFanboy 365 326665
>>326223
Крутая штука, я, правда, особо не вчитывался в код, может быть, потом нормально посмотрю.

https://youtu.be/bsUWK-fixiA
https://youtu.be/hzqFmXZ8tOE

Вчера ничего не делал, только вышел на улицу на 45 минут и сделал небольшую зарядку с утра, а в остальное время играл в пятую гта. Впервые за все разы, что играл во что-то из этой серии, попробовал попроходить миссии, и мне сначала очень сильно понравилось, но потом в какой-то момент я понял, что меня разводят и пытаются впихнуть что-то по геймплею не сильно опережающее мобильные раннеры: ты просто постоянно катаешься от одной точки к другой, параллельно слушаешь диалоги и иногда стреляешь. Сайд миссии какие-то не очень, основные - тоже, но, может быть, я просто ещё дошёл до крутых миссий. Использовать спецспособности франклина и майкла - какое-то жуткое читерство. Франклин может замедлять время при вождении и настолько сильно увеличивает сцепление с дорогой, что даже на крутых поворотах на большой скорости ты не уходишь в занос. А майкл замедляет время при стрельбе, так что можно спокойно раздавать всем хедшоты. На машинках как-то не очень здорово ездить, может быть, на геймпаде было бы лучше, потому что там можно контролировать скорость. В общем, не знаю, может быть, потом доиграю её.

Сегодня ничего прямо совсем ничего не делал, на улицу не выходил, зарядку не сделал, морально чувствую себя ещё хуже, чем вчера. Только сделал домашнее задание, в котором надо было написать штуку, которая бы среди множества из N точек находила поднаборы из 4 или больше точек, которые бы лежали на одной прямой. При этом вот эти отрезки с точками надо задавать двумя точками на концах и они должны быть максимально возможно продолженными в обе стороны. Перебор брутфорсом - это жесть экспонента и я не знаю, как можно было бы избегать дубликатов, тут есть значительно более простой способ: выбираем стартовую точку, остальные точки сортируем относительно неё по полярному углу прямой, проведённой через стартовую точку и другую точку, и потом просто проходимся и линейным поиском собираем те наборы, в которых полярный угол повторяется. И так надо перебрать все стартовые точки.

Единственная сложность тут - это разобраться с тем, чтобы не было дубликатов. Для этого, во-первых, перед каждой сортировкой по углу с новой стартовой точкой надо иметь массив точек, предварительно отсортированный сначала по игреку (снизу вверх), а потом по иксу (слева направо), так что после сортировки точки бы шли в предсказуемом порядке. И нужно брать только те отрезки, у которых стартовая точка лежит ниже (или левее, если одинаковые ординаты), чем следующая по счёту точка в отрезке. На пикриле выбрана стартовая точка и выделены точки, которые имеют со стартовой один и тот же полярный угол. И вот в таком случае (start, 3) включён в ответ не будет, потому что start лежит выше, чем точка 1. А если бы start была на месте 1, то отрезок бы попал в ответ. (Ну, он и так попадёт, потому что под стартовые точки у нас перебираются все точки из множества.)

Я даже не пытался нормально объяснить. Короче, оно работает за O(N2lgN), даа, это лучше, чем перебирать вообще всё.

Немного посмотрел школьную планиметрию, потому что потому что. Узнал про то, что для биссектрисы треугольника есть куча формул, в том числе для вычисления её длины и для вычисления отрезков, на которые она разбивает противоположную сторону, и всё выражается через стороны треугольника. Вот, например, если биссектриса проведена к стороне a, а p и q - это длины отрезков, на которые она разбивает сторону a, то её длина равна √(bc - pq). Выглядит красиво, но на деле это всё невозможно запомнить проще вывести заново, чем запомнить, хотел бы сказать я, но доказательство я тоже вряд ли запомню, там не очень очевидные построения какие-то

Ещё теорема чевы - при кольная штука. Суть её в том, что она даёт критерий, по которому можно определить, пересекаются ли чевианы (отрезки, проведённые из вершины к стороне / продолжению стороны) треугольника в одной точке. Доказывается через подобие кучи каких-то треугольников. В частности с её помощью можно легко доказать, что биссектрисы, медианы и высоты треугольника пересекаются в одной точке.

Ещё я, наконец-то, нормально посмотрел и мгновенно понял, как работают формулы приведения в тригонометрии (ну вот эти вот всякие sin(3π/2 - α) = -cosα) и что там всё просто.

Мне настучали по голове за то, что я якобы шумлю по ночам. Я не уверен, что я в действительности издаю много звуков ночью, но, вне зависимости от этого, я попробую пойти спать сейчас, хотя проснулся сегодня в половине первого. Скорее всего, не смогу заснуть и буду просто смотреть что-нибудь с телефона. И попробую опять составить план дня на завтра, хотя я на следующий день никогда его не открываю, потому что всегда точно знаю, что мне надо делать, но никогда не делаю, потому что я лох
PoppyFanboy 365 326665
>>326223
Крутая штука, я, правда, особо не вчитывался в код, может быть, потом нормально посмотрю.

https://youtu.be/bsUWK-fixiA
https://youtu.be/hzqFmXZ8tOE

Вчера ничего не делал, только вышел на улицу на 45 минут и сделал небольшую зарядку с утра, а в остальное время играл в пятую гта. Впервые за все разы, что играл во что-то из этой серии, попробовал попроходить миссии, и мне сначала очень сильно понравилось, но потом в какой-то момент я понял, что меня разводят и пытаются впихнуть что-то по геймплею не сильно опережающее мобильные раннеры: ты просто постоянно катаешься от одной точки к другой, параллельно слушаешь диалоги и иногда стреляешь. Сайд миссии какие-то не очень, основные - тоже, но, может быть, я просто ещё дошёл до крутых миссий. Использовать спецспособности франклина и майкла - какое-то жуткое читерство. Франклин может замедлять время при вождении и настолько сильно увеличивает сцепление с дорогой, что даже на крутых поворотах на большой скорости ты не уходишь в занос. А майкл замедляет время при стрельбе, так что можно спокойно раздавать всем хедшоты. На машинках как-то не очень здорово ездить, может быть, на геймпаде было бы лучше, потому что там можно контролировать скорость. В общем, не знаю, может быть, потом доиграю её.

Сегодня ничего прямо совсем ничего не делал, на улицу не выходил, зарядку не сделал, морально чувствую себя ещё хуже, чем вчера. Только сделал домашнее задание, в котором надо было написать штуку, которая бы среди множества из N точек находила поднаборы из 4 или больше точек, которые бы лежали на одной прямой. При этом вот эти отрезки с точками надо задавать двумя точками на концах и они должны быть максимально возможно продолженными в обе стороны. Перебор брутфорсом - это жесть экспонента и я не знаю, как можно было бы избегать дубликатов, тут есть значительно более простой способ: выбираем стартовую точку, остальные точки сортируем относительно неё по полярному углу прямой, проведённой через стартовую точку и другую точку, и потом просто проходимся и линейным поиском собираем те наборы, в которых полярный угол повторяется. И так надо перебрать все стартовые точки.

Единственная сложность тут - это разобраться с тем, чтобы не было дубликатов. Для этого, во-первых, перед каждой сортировкой по углу с новой стартовой точкой надо иметь массив точек, предварительно отсортированный сначала по игреку (снизу вверх), а потом по иксу (слева направо), так что после сортировки точки бы шли в предсказуемом порядке. И нужно брать только те отрезки, у которых стартовая точка лежит ниже (или левее, если одинаковые ординаты), чем следующая по счёту точка в отрезке. На пикриле выбрана стартовая точка и выделены точки, которые имеют со стартовой один и тот же полярный угол. И вот в таком случае (start, 3) включён в ответ не будет, потому что start лежит выше, чем точка 1. А если бы start была на месте 1, то отрезок бы попал в ответ. (Ну, он и так попадёт, потому что под стартовые точки у нас перебираются все точки из множества.)

Я даже не пытался нормально объяснить. Короче, оно работает за O(N2lgN), даа, это лучше, чем перебирать вообще всё.

Немного посмотрел школьную планиметрию, потому что потому что. Узнал про то, что для биссектрисы треугольника есть куча формул, в том числе для вычисления её длины и для вычисления отрезков, на которые она разбивает противоположную сторону, и всё выражается через стороны треугольника. Вот, например, если биссектриса проведена к стороне a, а p и q - это длины отрезков, на которые она разбивает сторону a, то её длина равна √(bc - pq). Выглядит красиво, но на деле это всё невозможно запомнить проще вывести заново, чем запомнить, хотел бы сказать я, но доказательство я тоже вряд ли запомню, там не очень очевидные построения какие-то

Ещё теорема чевы - при кольная штука. Суть её в том, что она даёт критерий, по которому можно определить, пересекаются ли чевианы (отрезки, проведённые из вершины к стороне / продолжению стороны) треугольника в одной точке. Доказывается через подобие кучи каких-то треугольников. В частности с её помощью можно легко доказать, что биссектрисы, медианы и высоты треугольника пересекаются в одной точке.

Ещё я, наконец-то, нормально посмотрел и мгновенно понял, как работают формулы приведения в тригонометрии (ну вот эти вот всякие sin(3π/2 - α) = -cosα) и что там всё просто.

Мне настучали по голове за то, что я якобы шумлю по ночам. Я не уверен, что я в действительности издаю много звуков ночью, но, вне зависимости от этого, я попробую пойти спать сейчас, хотя проснулся сегодня в половине первого. Скорее всего, не смогу заснуть и буду просто смотреть что-нибудь с телефона. И попробую опять составить план дня на завтра, хотя я на следующий день никогда его не открываю, потому что всегда точно знаю, что мне надо делать, но никогда не делаю, потому что я лох
PoppyFanboy 366 327141
https://youtu.be/GP72zM75hug
https://youtu.be/110LKtCJNOc
https://youtu.be/LaPAfzuL6L4

Заснул вроде как значительно раньше, чем обычно, но случайно проспал 12 часов, хотя никаких предпосылок к тому не было. И проснулся в полпервого, как если бы я лёг спать в четыре ночи, мда. Сейчас опять ложусь спать примерно в то же время, что и вчера, надеюсь, на этот раз такого не повторится. Ну, а если повторится, то это значит, что моему организму требуется 12 часов сна? Или как это работает вообще.

Из-за этого, а ещё из-за своей лени сегодня опять ничего не делал, впрочем, чуть меньше ничего, чем вчера. Сделал небольшую зарядку утром и вышел на улицу где-то минут на 50, прошёл больше, чем в прошлый раз, и анлокнул новый круг, по которому можно ходить. Относительно много людей бегают, но я вообще не представляю, как они это делают при таком сильном ветре и холоде. А ещё там жесть слишком много красивых людей, от чего становится жесть грустно жесть.

Короче, сегодня был очень-очень-очень плохой день, лучше бы его не было. Опять снились вещи, из-за которых не хочется просыпаться обратно, лучше бы мне снилось что-то жуткое и страшное, вообще за последние N лет мне ни разу не снились кошмары, это расстраивает.

Оставшееся время я не знаю, куда испарилось. Я просто не понимаю, как так происходит. Возможно, это особенность, которая сопутствует людям с маленьким айкю, слишком низкая осознанность происходящего вокруг. У меня даже чувство времени просто напрочь отсутствует: 5 и 15 минут, например, для меня по ощущениям длятся примерно одинаково. А если я во что-то погружён, то не могу заметить как пройдёт 2 часа или даже больше. Это плохо, потому что для тупых людей нет никакого смысла заниматься чем-то не-механическим на протяжении более, чем часа, без перерыва: в какой-то момент теряется концентрация и ты становишься ужасно неэффективным.

Сейчас напишу план на завтра, который даже не открою, и пойду спать.

Я посмотрел всякие формулы из школьной тригонометрии и как их доказывать. Их как-то слишком много и я не вижу особого смысла пытаться их все запомнить, особенно с учётом того, что они друг через друга выражаются. В основном всё доказывается через формулу косинуса суммы, которая в свою очередь доказывается геометрически построением пары векторов с концами на единичной окружности с координатами (cosα, sinα) и (cosβ, sinβ). И смысл в том, что угол между ними может быть либо β-α, либо 2π-(β-α), так что косинус разности будет равен косинусу угла между этими векторами, а он в свою очередь равен просто их dot-product'у, потому что векторы единичные. И отсюда по формулам приведения можно вывести синус суммы/разности.

Формулы понижения степени, оказывается, есть и для произвольных n, то есть можно выразить sinnα через синусы без степеней, но они какие-то сложные, доказываются, наверное, по индукции, но как выводятся - не знаю и мне не очень интересно смотреть. Я думаю, для небольших значений n будет хватать формул для квадрата и куба синуса/косинуса, которые выводятся из формул для синусов/косинусов двойного и тройного углов. Просто последовательно применить их, чтобы избавиться от степени. Я думаю, так и делается индукционный переход при доказательстве общей формулы для степени n.

Если что-то из предыдущего ещё можно было бы как-то запомнить, то вот формулы для суммы синусов/косинусов и для их произведения вообще выглядят абсолютно рандомно. Но хотя бы доказываются легко: sinα + sinβ = sin((α+β)/2 + (α-β)/2) + sin((α+β)/2 + (α-β)/2) = ... и там дальше просто всё разложить. Сумма/разность косинусов по формулам приведения просто выводится. Произведение синусов/косинусов легко выводится через формулы для синуса/косинуса суммы, но запомнить тоже нереально.

И вот единственное, что из всего этого меня интересовало - это универсальная тригонометрическая подстановка, которая выражает все тригонометрические функции через тангенс половинного угла. Она довольно легко доказывается, но там проблема с областями определения: выражение с тангенсами, которое получается, имеет более restrictive область определения, поэтому, если делать такое преобразование при решении какого-нибудь уравнения, то надо будет отдельно рассмотреть возможные корни, которые теряются при таком преобразовании. Я почему-то думал, что там может быть такое, что из-за этой подстановки для тангенса/котангенса могут появиться новые корни, но нет. А ещё там так совпало, что для котангенса там вообще ничего не теряется.

Короче, я так понял, что среди всех этих дефолтных формул единственные небезопасные - это формулы универсальной подстановки и формулы тангенса/котангенса суммы. Кстати, вот в формуле тангенса суммы в знаменателе стоит 1-tgαtgβ, но проверять на то, не является ли это нулём, необязательно, потому что tgαtgβ=1 только, когда это дополнительные углы (ну, на самом деле, не только, но там аналогичные случаи), а дополнительные углы в сумме дают π/2, так что нам можно по этому поводу не беспокоиться. С котангенсом суммы/разности там примерно то же самое: в знаменателе есть ctgα±ctgβ, и там, скорее всего, тоже ничего не теряется, но тут уже надо чуть более аккуратно проверять, а мне лень. Короче, видимо, надо беспокоиться только о том, чтобы ctgα и ctgβ вообще были определены.

✲ ✲ ✲

Ещё посмотрел немного видео про быструю сортировку, про то, как она может неочевидным образом выродиться в квадратичный алгоритм, если сортировать ключи совпадающие с ключом pivot элемента, только в одну сторону, про её average-case analysis и что он делается довольно легко, можно прямо в рекуррентном соотношении запихнуть среднее значение рекурсивного шага:

> T(N) = (N+1) + (T(0) + T(N-1)) / N + (T(1) + T(N-2)) / N + ... + (T(N-1) + T(0)) / N


и дальше по-умному решить это соотношение. Ну и там получится линеаритмическое количество сравнений. То, что там N+1 сравнений - это, наверное, зависит от реализации, вот в той, которую я смотрел, было столько, потому что N-1 сравнений делается до того, как два итератора встанут вплотную друг к другу, и ещё два, чтобы они прошли мимо друг друга, и всё остановилось. Но это вообще не так важно, я думаю, можно было и N просто поставить, ничего бы особо сильно не изменилось, а если записывать сложность алгоритма через тетту - так уж точно всё равно.

И ещё там он говорил про то, что можно использовать three-way partitioning, о котором я говорил где-то выше, когда делишь массив, чтобы в лучшем случае быстрая сортировка работала за линейное время. И ещё, что вместо или вместе с перемешиванием массива можно выбирать медианные элементы (для маленьких массивов просто брать то, что по середине стоит, для средних - брать медиану среди первого, последнего и серединного, а для больших - вычислять tukey's ninther, в котором надо взять девять элементов, для каждой тройки вычислить медиану, а потом для трёх медиан найти ещё одну медиану, всего тут, получается 12 сравнений в худшем случае). И вроде как в функциях сортировки из всяких стандартных библиотек как раз используется именно нахождение медианы вместо предварительного перемешивания, видимо, чтобы гарантировать воспроизводимость результатов сортировки (quicksort же нестабильна, так что при предварительном shuffling'е она может давать разные результаты), но на деле из-за этого, скорее всего, можно создать массив данных, который бы стабильно убивал такую сортировку.

Кстати, я вот там где-то писал про то, как можно вывести, что compare-based сортировка в худшем случае может работать разве что за NlgN и никак быстрее, и, на самом деле, можно провести такой же анализ не для N! различных перестановок элементов массива, а для N!/(x1!x2!...xn!) различных ключей (xk - количество элементов массива с ключом k) и тогда там немного другая формула. И вот как раз quicksort с three-way-partitioning вроде как более-менее удовлетворяет этому соотношению. Но при этом она да, нестабильна.

А ещё быстрая сортировка хороша тем, что она in-place, и, как оказалось, in-place означает, что она использует максимум логарифм дополнительной памяти, а не константу, потому что тут учитываются рекурсивные алгоритмы с логарифмической глубиной, которые на каждом уровне рекурсии используют константное количество памяти.

А ещё при быстрой сортировке лучше обрабатывать сначала меньший массив, а потом больший, потому что так, видимо, будет работать хвостовая рекурсия: если бы обрабатывали сначала больший, то нам пришлось бы возвращаться вверх по стеку, чтобы обработать меньшую половинку.
PoppyFanboy 366 327141
https://youtu.be/GP72zM75hug
https://youtu.be/110LKtCJNOc
https://youtu.be/LaPAfzuL6L4

Заснул вроде как значительно раньше, чем обычно, но случайно проспал 12 часов, хотя никаких предпосылок к тому не было. И проснулся в полпервого, как если бы я лёг спать в четыре ночи, мда. Сейчас опять ложусь спать примерно в то же время, что и вчера, надеюсь, на этот раз такого не повторится. Ну, а если повторится, то это значит, что моему организму требуется 12 часов сна? Или как это работает вообще.

Из-за этого, а ещё из-за своей лени сегодня опять ничего не делал, впрочем, чуть меньше ничего, чем вчера. Сделал небольшую зарядку утром и вышел на улицу где-то минут на 50, прошёл больше, чем в прошлый раз, и анлокнул новый круг, по которому можно ходить. Относительно много людей бегают, но я вообще не представляю, как они это делают при таком сильном ветре и холоде. А ещё там жесть слишком много красивых людей, от чего становится жесть грустно жесть.

Короче, сегодня был очень-очень-очень плохой день, лучше бы его не было. Опять снились вещи, из-за которых не хочется просыпаться обратно, лучше бы мне снилось что-то жуткое и страшное, вообще за последние N лет мне ни разу не снились кошмары, это расстраивает.

Оставшееся время я не знаю, куда испарилось. Я просто не понимаю, как так происходит. Возможно, это особенность, которая сопутствует людям с маленьким айкю, слишком низкая осознанность происходящего вокруг. У меня даже чувство времени просто напрочь отсутствует: 5 и 15 минут, например, для меня по ощущениям длятся примерно одинаково. А если я во что-то погружён, то не могу заметить как пройдёт 2 часа или даже больше. Это плохо, потому что для тупых людей нет никакого смысла заниматься чем-то не-механическим на протяжении более, чем часа, без перерыва: в какой-то момент теряется концентрация и ты становишься ужасно неэффективным.

Сейчас напишу план на завтра, который даже не открою, и пойду спать.

Я посмотрел всякие формулы из школьной тригонометрии и как их доказывать. Их как-то слишком много и я не вижу особого смысла пытаться их все запомнить, особенно с учётом того, что они друг через друга выражаются. В основном всё доказывается через формулу косинуса суммы, которая в свою очередь доказывается геометрически построением пары векторов с концами на единичной окружности с координатами (cosα, sinα) и (cosβ, sinβ). И смысл в том, что угол между ними может быть либо β-α, либо 2π-(β-α), так что косинус разности будет равен косинусу угла между этими векторами, а он в свою очередь равен просто их dot-product'у, потому что векторы единичные. И отсюда по формулам приведения можно вывести синус суммы/разности.

Формулы понижения степени, оказывается, есть и для произвольных n, то есть можно выразить sinnα через синусы без степеней, но они какие-то сложные, доказываются, наверное, по индукции, но как выводятся - не знаю и мне не очень интересно смотреть. Я думаю, для небольших значений n будет хватать формул для квадрата и куба синуса/косинуса, которые выводятся из формул для синусов/косинусов двойного и тройного углов. Просто последовательно применить их, чтобы избавиться от степени. Я думаю, так и делается индукционный переход при доказательстве общей формулы для степени n.

Если что-то из предыдущего ещё можно было бы как-то запомнить, то вот формулы для суммы синусов/косинусов и для их произведения вообще выглядят абсолютно рандомно. Но хотя бы доказываются легко: sinα + sinβ = sin((α+β)/2 + (α-β)/2) + sin((α+β)/2 + (α-β)/2) = ... и там дальше просто всё разложить. Сумма/разность косинусов по формулам приведения просто выводится. Произведение синусов/косинусов легко выводится через формулы для синуса/косинуса суммы, но запомнить тоже нереально.

И вот единственное, что из всего этого меня интересовало - это универсальная тригонометрическая подстановка, которая выражает все тригонометрические функции через тангенс половинного угла. Она довольно легко доказывается, но там проблема с областями определения: выражение с тангенсами, которое получается, имеет более restrictive область определения, поэтому, если делать такое преобразование при решении какого-нибудь уравнения, то надо будет отдельно рассмотреть возможные корни, которые теряются при таком преобразовании. Я почему-то думал, что там может быть такое, что из-за этой подстановки для тангенса/котангенса могут появиться новые корни, но нет. А ещё там так совпало, что для котангенса там вообще ничего не теряется.

Короче, я так понял, что среди всех этих дефолтных формул единственные небезопасные - это формулы универсальной подстановки и формулы тангенса/котангенса суммы. Кстати, вот в формуле тангенса суммы в знаменателе стоит 1-tgαtgβ, но проверять на то, не является ли это нулём, необязательно, потому что tgαtgβ=1 только, когда это дополнительные углы (ну, на самом деле, не только, но там аналогичные случаи), а дополнительные углы в сумме дают π/2, так что нам можно по этому поводу не беспокоиться. С котангенсом суммы/разности там примерно то же самое: в знаменателе есть ctgα±ctgβ, и там, скорее всего, тоже ничего не теряется, но тут уже надо чуть более аккуратно проверять, а мне лень. Короче, видимо, надо беспокоиться только о том, чтобы ctgα и ctgβ вообще были определены.

✲ ✲ ✲

Ещё посмотрел немного видео про быструю сортировку, про то, как она может неочевидным образом выродиться в квадратичный алгоритм, если сортировать ключи совпадающие с ключом pivot элемента, только в одну сторону, про её average-case analysis и что он делается довольно легко, можно прямо в рекуррентном соотношении запихнуть среднее значение рекурсивного шага:

> T(N) = (N+1) + (T(0) + T(N-1)) / N + (T(1) + T(N-2)) / N + ... + (T(N-1) + T(0)) / N


и дальше по-умному решить это соотношение. Ну и там получится линеаритмическое количество сравнений. То, что там N+1 сравнений - это, наверное, зависит от реализации, вот в той, которую я смотрел, было столько, потому что N-1 сравнений делается до того, как два итератора встанут вплотную друг к другу, и ещё два, чтобы они прошли мимо друг друга, и всё остановилось. Но это вообще не так важно, я думаю, можно было и N просто поставить, ничего бы особо сильно не изменилось, а если записывать сложность алгоритма через тетту - так уж точно всё равно.

И ещё там он говорил про то, что можно использовать three-way partitioning, о котором я говорил где-то выше, когда делишь массив, чтобы в лучшем случае быстрая сортировка работала за линейное время. И ещё, что вместо или вместе с перемешиванием массива можно выбирать медианные элементы (для маленьких массивов просто брать то, что по середине стоит, для средних - брать медиану среди первого, последнего и серединного, а для больших - вычислять tukey's ninther, в котором надо взять девять элементов, для каждой тройки вычислить медиану, а потом для трёх медиан найти ещё одну медиану, всего тут, получается 12 сравнений в худшем случае). И вроде как в функциях сортировки из всяких стандартных библиотек как раз используется именно нахождение медианы вместо предварительного перемешивания, видимо, чтобы гарантировать воспроизводимость результатов сортировки (quicksort же нестабильна, так что при предварительном shuffling'е она может давать разные результаты), но на деле из-за этого, скорее всего, можно создать массив данных, который бы стабильно убивал такую сортировку.

Кстати, я вот там где-то писал про то, как можно вывести, что compare-based сортировка в худшем случае может работать разве что за NlgN и никак быстрее, и, на самом деле, можно провести такой же анализ не для N! различных перестановок элементов массива, а для N!/(x1!x2!...xn!) различных ключей (xk - количество элементов массива с ключом k) и тогда там немного другая формула. И вот как раз quicksort с three-way-partitioning вроде как более-менее удовлетворяет этому соотношению. Но при этом она да, нестабильна.

А ещё быстрая сортировка хороша тем, что она in-place, и, как оказалось, in-place означает, что она использует максимум логарифм дополнительной памяти, а не константу, потому что тут учитываются рекурсивные алгоритмы с логарифмической глубиной, которые на каждом уровне рекурсии используют константное количество памяти.

А ещё при быстрой сортировке лучше обрабатывать сначала меньший массив, а потом больший, потому что так, видимо, будет работать хвостовая рекурсия: если бы обрабатывали сначала больший, то нам пришлось бы возвращаться вверх по стеку, чтобы обработать меньшую половинку.
divmod disasm.png269 Кб, 1486x1228
Рируру !!gYmpHned/k 367 327206
>>326665
Извините, я тут в рамках прокрастинации решил проверить то, о чём говорил — операции над пачками бит:
https://ideone.com/FLigf3
Без них битовое поле оказалось сильно медленнее boolean[][] (в 3–4 раза), с ними — поровну или чуть быстрее (процентов на 15).

Потом я вспомнил, что оно интенсивно использует (bitIndex / BASE) и (bitIndex % BASE), где BASE — число бит в базовом типе (зд. int), являющееся степенью двойки, и что я рассчитывал на автоматическую оптимизацию деления на степень двойки, которая, однако, хуже работает для знаковых чисел: для отрицательных значений в дополнительном коде арифметический сдвиг (bitIndex / BASE == bitIndex >> log2BASE) или побитовое «и» (bitIndex % BASE == bitIndex & (BASE - 1)) не дают ответы напрямую, требуя дополнительных телодвижений (см. картинку), а в Java все типы знаковые, и ей сложно догадаться, что некоторые числа никогда не бывают отрицательными.

Поэтому я заменил (bitIndex / BASE) и (bitIndex % BASE) на (bitIndex >> BASEP2) и (bitIndex & BASEMASK), и стало ещё быстрее (по битам медленнее boolean[][] «всего» в 2–3 раза, пачками — быстрее на 50%).

Забавно, что заинлайненная обработка (вместо void or(other, ...) { this.apply(other, ..., (a, b) -> a|b) } переписать тело apply, заменив вызов коллбэка на конкретную операцию) даёт огромное (ещё +50–100%) ускорение на первом проходе, а на остальных сравнивается — такое ощущение, что JVM доходит до того, чтобы самостоятельно клонировать функцию и встроить в неё содержимое конкретного коллбэка.
368 327211
>>327141
На второй фотке медицинская маска, бафф или что? Как это называется?
.jpg312 Кб, 1448x2048
PoppyFanboy 369 327390
>>327206
Прикольно, не знал об этой штуке с оптимизацией деления нацело и остатка. И не задумывался о том, что для беззнаковых чисел оптимизация будет ещё лучше, чем для знаковых.

>такое ощущение, что JVM доходит до того, чтобы самостоятельно клонировать функцию и встроить в неё содержимое конкретного коллбэка


Звучит правдоподобно, я думаю, так и происходит.

>>327211

>бафф


Жесть первый раз такое модное слово слышу.
Не знаю, какая-то маска, я в таком не разбираюсь.

https://youtu.be/Cudfi9AHkeU
https://youtu.be/jJirzFqSp-A

Сегодня ещё хуже, чем вчера. Проснулся в этот раз относительно рано, хотя ночью долго не мог заснуть. Сделал зарядку, это всё ещё просто несколько упражнений на 10 минут, немного позже, когда это более-менее войдёт в привычку, я добавлю к ним какие-нибудь другие упражнения. Вышел на улицу на 50 минут, прошёл ровно столько же, сколько в прошлый раз.

Всё, больше ничего не делал, половину дня чувствовал себя ужасно, вторую половину - просто плохо, без причины болела голова и никак не хотела проходить, а потом меня поглотила сонливость напополам с приступом дейдриминга. Я не знаю, что делать со своей тупостью и тем, что у меня не получается сразу же просто сесть и начать что-то делать, а мне надо слишком много времени, чтобы я успокоился и перестал легко отвлекаться на сторонние вещи. Я знаю, что я делаю не так, я всё делаю не так, но не могу делать по-другому. Может быть, со временем станет лучше, но я в этом не уверен. Вернее уверен в том, что ничего не получится.

Сейчас опять напишу план на завтрашний день, который завтра даже не открою и не выполню и на половину, и пойду спать.

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

Досмотрел школьную тригонометрию, там про обратные тригонометрические функции. Там опять в основном была куча бесполезных формул, в частности про вычисление синусов/косинусов/тангенсов от аркфункций. Там на удивление получаются хорошие формулы, на область определения которых не накладываются никакие ограничения. Их можно вывести через просто sin2α + sin2β, а ещё проще нарисовать такой треугольник, чтобы у него угол α был равен аркфункции из формулы, которую хотим вывести (ну там, например, sin(arctgx) = ?), и потом просто вычислить синус/косинус/тангенс этого угла. Так что их можно даже не запоминать.

С помощью вот этих формул можно написать ещё кучу других, с помощью которых можно выражать одну аркфункцию через другую: просто подбираем нужную формулу из предыдущего списка и берём аркфункцию от обоих сторон, к которой мы хотели бы прийти. Только тут вот уже возникает проблема с областями определения, поэтому, например в arccos(cos(arctgx)) = arccos(...) придётся разделять случаи для положительных иксов и для отрицательных. Ну, там можно по формулам приведения так преобразовать формулу, чтобы можно было безопасно избавиться от arccos(cos(...)).

Я понятия не имею, зачем нужны все эти формулы, а в особенности, зачем кому-то понадобится выражать одну аркфункцию через другую, потому что они же вроде не особо суммируются так что это преобразование вряд ли упростит никакое гипотетическое выражение со всякими аркфункциями. И вообще всё школьная тригонометрия состоит из каких-то дурацких ненужных формул.

Посмотрел видео про бинарную кучу, про сортировку кучей, но ничего из этого сам не написал, так что это не считается. И ещё посмотрел про то, как можно использовать priority queue в event-driven симуляции абсолютно упругих столкновений. Там по полю линейно перемещаются круглые частицы, которые могут сталкиваться друг с другом и ударяться об стены, но при этом энергия никуда не девается, так что они делают это бесконечно и энергия при каждом столкновении просто как-то перераспределяется. И там была интересная идея с тем, чтобы изначально за квадрат времени предсказать время всех возможных столкновений частиц со стенами и друг другом и записать все эти предсказания в MinPQ с ключом по времени. А дальше всё работает за NlgN: мы достаём новое предсказание, продолжаем симуляцию до момента, когда оно может произойти (мы записываем в тупую все возможные столкновения, так что некоторые из предсказаний не сбудутся), если оно сбывается, то изменяем вектора скоростей двух столкнувшихся частиц (или одной, если она о стену ударилась), для изменённых векторов делаем линейное количество предсказаний столкновений со всеми остальными шарами. И всё, после этого достаём новое предсказание.

Это намного лучше, чем делать N^2 проверок на каждом тике симуляции, потому что в таком случае при достаточно маленьком интервале тиков всё будет жесть тормозить, а при достаточно большом - можно будет пропустить некоторые столкновения (это, кстати, называется time-driven симуляция). А вот в event-driven симуляции мы избегаем такой сильной избыточности за счёт того, что ничего не делаем между столкновениями и проверяем коллизии только, когда есть шанс, что они произойдут. Тут, правда, проблема в том, что конкретно в этой реализации рассматриваются столкновения только между двумя частицами, так что результат симуляции, возможно, немного будет отличаться от того, как бы выглядело одновременное столкновение трёх или четырёх шаров, но тут я уже не знаю, это физика, в которой я не разбираюсь.

Ещё немного читал книжку по дажвдажвдве, но совсем немного, я начал листать главу про коллекции, из которой пока что только узнал, что у упорядоченных списков есть свой особый итератор ListIterator, который может ходить не только вперёд, но и назад, а ещё может добавлять элементы в коллекцию и заменять их (чего не мог делать обычный итератор по более общей коллекции Collection). При этом, если есть два итератора, которые будут изменять значения элементов, то это не вызовет ошибку (наверное, чтобы можно было реализовать ту же быструю сортировку для коллекции), а если один из итераторов сделает какие-то структурные изменения (добавит новый элемент или удалит элемент), то это вызовет ошибку при вызове какого-либо метода другого итератора. Это сделано, чтобы все итераторы по коллекции были актуальными, реализовано просто поддержанием количества структурных изменений внутри коллекции и внутри каждого из итераторов. Но я пока что так толком и не понял, зачем нужны ListIterator'ы, кроме того, что когда проходимся по связному списку, лучше модифицировать его через итератор, а не вызовом метода коллекции set, потому что последний всегда занимает линейное время.

А ещё я не знал о существовании маркерного интерфейса RandomAccess, который показывает, что коллекция поддерживает эффективный случайный доступ к элементам. Так что если есть какой-нибудь List list, то можно проверить, является ли он связным списком или списком на массиве просто через list instanceof RandomAccess. И это, на самом деле, какой-то тупой момент, как мне кажется, потому что кроме листов вроде же никто из коллекций не поддерживает случайный доступ, так что можно было бы просто сделать вместо List два интерфейса, а не добавлять инвалидский маркерный.

Я не знаю, зачем подробно останавливаться на каких-то таких особенностях какой-то конкретной стандартной библиотеки.
.jpg312 Кб, 1448x2048
PoppyFanboy 369 327390
>>327206
Прикольно, не знал об этой штуке с оптимизацией деления нацело и остатка. И не задумывался о том, что для беззнаковых чисел оптимизация будет ещё лучше, чем для знаковых.

>такое ощущение, что JVM доходит до того, чтобы самостоятельно клонировать функцию и встроить в неё содержимое конкретного коллбэка


Звучит правдоподобно, я думаю, так и происходит.

>>327211

>бафф


Жесть первый раз такое модное слово слышу.
Не знаю, какая-то маска, я в таком не разбираюсь.

https://youtu.be/Cudfi9AHkeU
https://youtu.be/jJirzFqSp-A

Сегодня ещё хуже, чем вчера. Проснулся в этот раз относительно рано, хотя ночью долго не мог заснуть. Сделал зарядку, это всё ещё просто несколько упражнений на 10 минут, немного позже, когда это более-менее войдёт в привычку, я добавлю к ним какие-нибудь другие упражнения. Вышел на улицу на 50 минут, прошёл ровно столько же, сколько в прошлый раз.

Всё, больше ничего не делал, половину дня чувствовал себя ужасно, вторую половину - просто плохо, без причины болела голова и никак не хотела проходить, а потом меня поглотила сонливость напополам с приступом дейдриминга. Я не знаю, что делать со своей тупостью и тем, что у меня не получается сразу же просто сесть и начать что-то делать, а мне надо слишком много времени, чтобы я успокоился и перестал легко отвлекаться на сторонние вещи. Я знаю, что я делаю не так, я всё делаю не так, но не могу делать по-другому. Может быть, со временем станет лучше, но я в этом не уверен. Вернее уверен в том, что ничего не получится.

Сейчас опять напишу план на завтрашний день, который завтра даже не открою и не выполню и на половину, и пойду спать.

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

Досмотрел школьную тригонометрию, там про обратные тригонометрические функции. Там опять в основном была куча бесполезных формул, в частности про вычисление синусов/косинусов/тангенсов от аркфункций. Там на удивление получаются хорошие формулы, на область определения которых не накладываются никакие ограничения. Их можно вывести через просто sin2α + sin2β, а ещё проще нарисовать такой треугольник, чтобы у него угол α был равен аркфункции из формулы, которую хотим вывести (ну там, например, sin(arctgx) = ?), и потом просто вычислить синус/косинус/тангенс этого угла. Так что их можно даже не запоминать.

С помощью вот этих формул можно написать ещё кучу других, с помощью которых можно выражать одну аркфункцию через другую: просто подбираем нужную формулу из предыдущего списка и берём аркфункцию от обоих сторон, к которой мы хотели бы прийти. Только тут вот уже возникает проблема с областями определения, поэтому, например в arccos(cos(arctgx)) = arccos(...) придётся разделять случаи для положительных иксов и для отрицательных. Ну, там можно по формулам приведения так преобразовать формулу, чтобы можно было безопасно избавиться от arccos(cos(...)).

Я понятия не имею, зачем нужны все эти формулы, а в особенности, зачем кому-то понадобится выражать одну аркфункцию через другую, потому что они же вроде не особо суммируются так что это преобразование вряд ли упростит никакое гипотетическое выражение со всякими аркфункциями. И вообще всё школьная тригонометрия состоит из каких-то дурацких ненужных формул.

Посмотрел видео про бинарную кучу, про сортировку кучей, но ничего из этого сам не написал, так что это не считается. И ещё посмотрел про то, как можно использовать priority queue в event-driven симуляции абсолютно упругих столкновений. Там по полю линейно перемещаются круглые частицы, которые могут сталкиваться друг с другом и ударяться об стены, но при этом энергия никуда не девается, так что они делают это бесконечно и энергия при каждом столкновении просто как-то перераспределяется. И там была интересная идея с тем, чтобы изначально за квадрат времени предсказать время всех возможных столкновений частиц со стенами и друг другом и записать все эти предсказания в MinPQ с ключом по времени. А дальше всё работает за NlgN: мы достаём новое предсказание, продолжаем симуляцию до момента, когда оно может произойти (мы записываем в тупую все возможные столкновения, так что некоторые из предсказаний не сбудутся), если оно сбывается, то изменяем вектора скоростей двух столкнувшихся частиц (или одной, если она о стену ударилась), для изменённых векторов делаем линейное количество предсказаний столкновений со всеми остальными шарами. И всё, после этого достаём новое предсказание.

Это намного лучше, чем делать N^2 проверок на каждом тике симуляции, потому что в таком случае при достаточно маленьком интервале тиков всё будет жесть тормозить, а при достаточно большом - можно будет пропустить некоторые столкновения (это, кстати, называется time-driven симуляция). А вот в event-driven симуляции мы избегаем такой сильной избыточности за счёт того, что ничего не делаем между столкновениями и проверяем коллизии только, когда есть шанс, что они произойдут. Тут, правда, проблема в том, что конкретно в этой реализации рассматриваются столкновения только между двумя частицами, так что результат симуляции, возможно, немного будет отличаться от того, как бы выглядело одновременное столкновение трёх или четырёх шаров, но тут я уже не знаю, это физика, в которой я не разбираюсь.

Ещё немного читал книжку по дажвдажвдве, но совсем немного, я начал листать главу про коллекции, из которой пока что только узнал, что у упорядоченных списков есть свой особый итератор ListIterator, который может ходить не только вперёд, но и назад, а ещё может добавлять элементы в коллекцию и заменять их (чего не мог делать обычный итератор по более общей коллекции Collection). При этом, если есть два итератора, которые будут изменять значения элементов, то это не вызовет ошибку (наверное, чтобы можно было реализовать ту же быструю сортировку для коллекции), а если один из итераторов сделает какие-то структурные изменения (добавит новый элемент или удалит элемент), то это вызовет ошибку при вызове какого-либо метода другого итератора. Это сделано, чтобы все итераторы по коллекции были актуальными, реализовано просто поддержанием количества структурных изменений внутри коллекции и внутри каждого из итераторов. Но я пока что так толком и не понял, зачем нужны ListIterator'ы, кроме того, что когда проходимся по связному списку, лучше модифицировать его через итератор, а не вызовом метода коллекции set, потому что последний всегда занимает линейное время.

А ещё я не знал о существовании маркерного интерфейса RandomAccess, который показывает, что коллекция поддерживает эффективный случайный доступ к элементам. Так что если есть какой-нибудь List list, то можно проверить, является ли он связным списком или списком на массиве просто через list instanceof RandomAccess. И это, на самом деле, какой-то тупой момент, как мне кажется, потому что кроме листов вроде же никто из коллекций не поддерживает случайный доступ, так что можно было бы просто сделать вместо List два интерфейса, а не добавлять инвалидский маркерный.

Я не знаю, зачем подробно останавливаться на каких-то таких особенностях какой-то конкретной стандартной библиотеки.
PoppyFanboy 370 327647
https://youtu.be/nEJ-m6KNddI
https://youtu.be/xauTD6nRMio

давай следующий
будущего ещё не существует, но оно уже выглядит не очень
PoppyFanboy 371 327666
https://youtu.be/OQ8pgdIVKyU

Конструкция состоит из металлического штыря, воткнутого в землю, на который на ниточке привязывается достаточно крупная гайка. Когда ветер раскачивает гайку, она стукается о металлический штырь и отпугивает всяких существ; если покрыть некоторую площадь такими конструкциями, можно полностью защитить эту область от существ.

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

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

Можно вытаскивать гвозди из деревяшек, оставшихся от разломанного сарая, выпрямлять их молотком и складывать в одну кучу, может быть, они потом пригодятся. От удара молотком по ногтю остаётся чёрная штука, которая довольно долго не рассасывается. Если пытаться сделать табуретку по памяти, то можно запутаться в том, сколько надо сделать перекладин, не позволяющих ножкам разъезжаться, и случайно сделать столик с ящиком.

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

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

Кстати, этот дом строился как будто действительно из кубиков. Это было необходимостью, ведь надо было построить хотя бы что-то до наступления холодов, чтобы там можно было жить и использовать этот мини-блок как микро-дом: после его построения можно прицепить к нему новый блок, и ещё один, и ещё один. Единственная проблема в том, что тогда придётся грамотно планировать расположение окон, чтобы не получилось так, что ты будешь цеплять новый блок к той стене, в которой уже есть окно. Ну, впрочем, это уже не так важно, потому что именно это и случилось, когда домик полностью собрался из четырёх блоков: из второго по счёту блока есть сквозное окно в первый. И ещё есть окно из первого в четвёртый, но его уже было решено зашить досками со стороны четвёртого блока, так что из первого блока это выглядит как окно в очень узкое пространство. Хоть и предполагалось, что окно могло открываться, и там даже была ручка для этого, ручка была снята, а само окно всегда завешивается шторами. Не знаю, почему так.

Немного больше о блоках, из которых состоит дом. Сами они все прямоугольные и укомплектованы в один прямоугольник. Нумеруются от правого верхнего угла против часовой стрелки. Первый блок - блок с печкой и двумя кроватями. Там же есть мистические подвал и чердак с осами, которых я никогда не видел. Одна из кроватей двухэтажная, но верхний этаж используется под хранение хлама. Почему нельзя для этого использовать чердак? Я не помню, чтобы количество хлама уменьшалось или прибавлялось, не помню, чтобы кто-то что-то вытаскивал из этой кучи, почему нельзя перенести это на чердак к осам? Дверь в этот блок очень тяжёлая, так как определённое время служила входной дверью, имеет один нерабочий замок. Возможно, он не работает из-за того, что под своей тяжестью дверь просела (или, может быть, фундамент дома просел) и теперь штука, которая выдвигается из двери, когда проворачиваешь ключ в замке, не попадает в дырку.

Для решения проблемы с дверьми, было придумано решение из нескольких сваренных вместе арматурин, которые служили чем-то вроде засова с навесным замком. Только с тем отличием, что если засов двигается параллельно стене, то эта штука поворачивалась на петлях. И, если честно, я забыл суть всей этой конструкции и сейчас не могу точно сказать, не являются ли как раз петли слабым местом всей этой идеи. Вроде как в поворачивающейся штуке была щель под другую штуку, которая уже крепилась к дому и через которую продевался навесной замок. Дверь открывается наружу, так что с активированной поворачивающейся штукой в дом было не попасть.

Я так подробно описал эту конструкцию, потому что она будет встречаться ещё несколько раз. Только в одном этом ничем не примечательном доме их три штуки: на двери между первым и вторым блоком, на двери между вторым и третьим блоком и на входной двери в третий блок, которая также по совместительству является текущей входной дверью в весь дом. И да, выходит, что два из трёх засовов находятся уже внутри дома, хотя когда-то были снаружи, когда не все блоки ещё были достроены. Таким образом, если запереть все засовы, то наиболее защищённым оказывается первый блок с печкой.

Вообще я так немного задумался о том, что идея навесного замка, наверное, же жесть стара и уходит куда-то в древности. И неудивительно, что теперь эта конструкция в каком-то роде вошла в культуру, как минимум, схематическое изображение используется повсеместно и однозначно распознаётся. И это, наверное, интересно, как технологии интегрируются в культуру. Всякие музыкальные инструменты, какие-то базовые плотницкие инструменты, не знаю, что ещё привести в качестве примера. Это не что-то мимолётное, это что-то фундаментальное, которое стало как будто чем-то неразделимым с человеком. С другой стороны, конечно, то же самое можно сказать про самолёты, для них тоже есть схематическое обозначение, которое совершенно точно распознаётся, и они вряд ли существенно изменятся или будут заменены чем-то, но это скорее очень удачное совпадение. Или нет, я не знаю, к чему это, просто замки крутые, да.

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

Я долгое время не знал, зачем нужно поддувало в печи и до сих пор не знаю. Там скапливается зола, которую надо вычищать. И вроде как, если открыть поддувало, то дрова должны лучше гореть, потому что поступает больше кислорода. Но я не знаю, когда надо открывать и когда закрывать поддувало, это для меня что-то немного мистическое.
PoppyFanboy 371 327666
https://youtu.be/OQ8pgdIVKyU

Конструкция состоит из металлического штыря, воткнутого в землю, на который на ниточке привязывается достаточно крупная гайка. Когда ветер раскачивает гайку, она стукается о металлический штырь и отпугивает всяких существ; если покрыть некоторую площадь такими конструкциями, можно полностью защитить эту область от существ.

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

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

Можно вытаскивать гвозди из деревяшек, оставшихся от разломанного сарая, выпрямлять их молотком и складывать в одну кучу, может быть, они потом пригодятся. От удара молотком по ногтю остаётся чёрная штука, которая довольно долго не рассасывается. Если пытаться сделать табуретку по памяти, то можно запутаться в том, сколько надо сделать перекладин, не позволяющих ножкам разъезжаться, и случайно сделать столик с ящиком.

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

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

Кстати, этот дом строился как будто действительно из кубиков. Это было необходимостью, ведь надо было построить хотя бы что-то до наступления холодов, чтобы там можно было жить и использовать этот мини-блок как микро-дом: после его построения можно прицепить к нему новый блок, и ещё один, и ещё один. Единственная проблема в том, что тогда придётся грамотно планировать расположение окон, чтобы не получилось так, что ты будешь цеплять новый блок к той стене, в которой уже есть окно. Ну, впрочем, это уже не так важно, потому что именно это и случилось, когда домик полностью собрался из четырёх блоков: из второго по счёту блока есть сквозное окно в первый. И ещё есть окно из первого в четвёртый, но его уже было решено зашить досками со стороны четвёртого блока, так что из первого блока это выглядит как окно в очень узкое пространство. Хоть и предполагалось, что окно могло открываться, и там даже была ручка для этого, ручка была снята, а само окно всегда завешивается шторами. Не знаю, почему так.

Немного больше о блоках, из которых состоит дом. Сами они все прямоугольные и укомплектованы в один прямоугольник. Нумеруются от правого верхнего угла против часовой стрелки. Первый блок - блок с печкой и двумя кроватями. Там же есть мистические подвал и чердак с осами, которых я никогда не видел. Одна из кроватей двухэтажная, но верхний этаж используется под хранение хлама. Почему нельзя для этого использовать чердак? Я не помню, чтобы количество хлама уменьшалось или прибавлялось, не помню, чтобы кто-то что-то вытаскивал из этой кучи, почему нельзя перенести это на чердак к осам? Дверь в этот блок очень тяжёлая, так как определённое время служила входной дверью, имеет один нерабочий замок. Возможно, он не работает из-за того, что под своей тяжестью дверь просела (или, может быть, фундамент дома просел) и теперь штука, которая выдвигается из двери, когда проворачиваешь ключ в замке, не попадает в дырку.

Для решения проблемы с дверьми, было придумано решение из нескольких сваренных вместе арматурин, которые служили чем-то вроде засова с навесным замком. Только с тем отличием, что если засов двигается параллельно стене, то эта штука поворачивалась на петлях. И, если честно, я забыл суть всей этой конструкции и сейчас не могу точно сказать, не являются ли как раз петли слабым местом всей этой идеи. Вроде как в поворачивающейся штуке была щель под другую штуку, которая уже крепилась к дому и через которую продевался навесной замок. Дверь открывается наружу, так что с активированной поворачивающейся штукой в дом было не попасть.

Я так подробно описал эту конструкцию, потому что она будет встречаться ещё несколько раз. Только в одном этом ничем не примечательном доме их три штуки: на двери между первым и вторым блоком, на двери между вторым и третьим блоком и на входной двери в третий блок, которая также по совместительству является текущей входной дверью в весь дом. И да, выходит, что два из трёх засовов находятся уже внутри дома, хотя когда-то были снаружи, когда не все блоки ещё были достроены. Таким образом, если запереть все засовы, то наиболее защищённым оказывается первый блок с печкой.

Вообще я так немного задумался о том, что идея навесного замка, наверное, же жесть стара и уходит куда-то в древности. И неудивительно, что теперь эта конструкция в каком-то роде вошла в культуру, как минимум, схематическое изображение используется повсеместно и однозначно распознаётся. И это, наверное, интересно, как технологии интегрируются в культуру. Всякие музыкальные инструменты, какие-то базовые плотницкие инструменты, не знаю, что ещё привести в качестве примера. Это не что-то мимолётное, это что-то фундаментальное, которое стало как будто чем-то неразделимым с человеком. С другой стороны, конечно, то же самое можно сказать про самолёты, для них тоже есть схематическое обозначение, которое совершенно точно распознаётся, и они вряд ли существенно изменятся или будут заменены чем-то, но это скорее очень удачное совпадение. Или нет, я не знаю, к чему это, просто замки крутые, да.

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

Я долгое время не знал, зачем нужно поддувало в печи и до сих пор не знаю. Там скапливается зола, которую надо вычищать. И вроде как, если открыть поддувало, то дрова должны лучше гореть, потому что поступает больше кислорода. Но я не знаю, когда надо открывать и когда закрывать поддувало, это для меня что-то немного мистическое.
.jpg65 Кб, 349x480
PoppyFanboy 372 327904
Сегодня опять ничего не делал. Немного играл в игры, большую часть времени маялся от безделья, но всё равно стоически терпел и избегал любой полезной деятельности.

В течение некоторого времени можно ожидать ещё несколько подобных постов подряд, потому что пик стронгли рилейтед.

https://youtu.be/08MqYvU-yuM
373 328306
Ну что, помогли тебе алгоритмы в работе? Я кстати не увидел, работаешь ли ты? Хотя признаюсь, что тред полностью не читал, а только лишь бегло просмотрел. Сегодня вечером возможно прочитаю весь твой тредик.

Я за выходные каникулы прочитал почти целую главу Кормена(мог больше, но ещё подолгу решал кучу задачек и страдал хернёй), дошёл до основной теоремы о рекуррентных соотношениях, ещё на codewars зарегался и с восьмого ранга апнулся до пятого, почти четвертый. Прогресс для меня очень заметен, стал структурированее мыслить, на каждый алгоритм сразу стал преждевременно думать об алгоритмической временной сложности(хотя конечно же я знаю, что преждевременная оптимизация зло), поэтому буду читать дальше.
.jpeg425 Кб, 2048x1880
PoppyFanboy !XCH.JOxpwU 374 328893
>>328306
Даже если бы работал, было бы странно говорить о том, помогли ли мне они, я же почти ничего так и не прошёл по алгоритмам.

>тред полностью не читал


И лучше не надо, там всякий мусор по большей части.
Кормен да, прикольный, но я его, к слову, пока что бросил временно.

✲ ✲ ✲

https://youtu.be/ScSW9C3DF18
https://youtu.be/WDUA7z3703g

Не знаю, был ли бы смысл в том, чтобы несколько раз написать о том, что я ничего не делал. Я выбрал не делать этого, но это сути особо не меняет. Большую часть времени бездельничал, оставшееся время занимался какой-то настолько сомнительной ерундой, что мне стыдно об этом говорить. Может быть, завтра начну делать что-нибудь нормальное.
.jpeg80 Кб, 568x1000
PoppyFanboy !!cYLydiSRQA 375 328894
>>328893
Ясно. Можно даже было не пытаться использовать трипкод.
376 328979
Напиши возраст и опционально город, живёшь с родителями и университет
PoppyFanboy !!cYLydiSRQA 377 331048
>>328979
я хотел ответить нормально, но потом передумал
живу с родителями и за счёт родителей, город большой, а остальное, ну, наверное, не особо важно

https://youtu.be/QvO8kcWFFT0
https://youtu.be/y8-6QPEes1k

на самом деле, я могу заниматься ничем бесконечно
потому что, блин, да, вот, да, я ничего, считай, опять не делал, я попробую завтра
побольше
наверное
ещё

Ноо я, во-первых, всё же сделал два варианта перемешивания связных списков: in-place за O(NlgN) и O(N) за дополнительную O(N) память. И тут сложнее всего было сделать сам этот связный список, а всё из-за того, что я решил, что хранить голову - это хорошая идея, но совершенно не утрудил себя тем, чтобы корректно его поддерживать, поэтому очень сильно удивился, когда у меня ничего не заработало, естественно я не подумал о том, что хвост надо менять не только при аппенде, поэтому пришлось сделать штуку, которая тестирует список на всякие операции, и сравнивать результаты операций с референсным ArrayList'ом. Не знаю, насколько это было правильным решением, но я сначала генерировал набор случайных операций над списком без аргументов к ним, а потом генерировал аргументы по ходу, используя для тестируемого списка и референсного. А потом перебрасывал исключения, выпадавшие при выполнении операций вместе со списком операций, референсом и тестируемым списком. И в конце сравнивал референс и мой список.

Я таких штук раньше не делал, но вот, сделал, и оно помогло решить пусть и жесть тривиальную проблему.

Кстати, я там где-то писал о том, что маркерный интерфейс RandomAccess для коллекций со случайным доступом - это плохое решение, и у меня был шанс удостовериться в этом, когда я хотел, чтобы мой метод принимал только списки с эффективным рандомным доступом, то мне пришлось писать что-то вроде

> static <T extends List<?> & RandomAccess> void doSomething(T list)


такого вместо вот такого, какое могло быть

> static void doSomething(RandomAccessList list)


И был бы просто ещё дополнительно интерфейс SequentialList. И оба бы имплементировали интерфейс List. Конечно, там в стандартной библиотеке есть абстрактный класс AbstractList, который

>provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "random access" data store (such as an array)


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

а, ну и само перемешивание списков
https://www.ideone.com/Jm2E0I
мне в целом нравится, как оно получилось, вот в плане того, что оно возвращает просто голову нлуь-терминированного списка, на приватные методы, которые бросают исключения, не обращайте внимания, я их скопировал из другого класса, в котором они у меня были публичными, за кривой английский в комментариях извините, это моя единственная возможность его практиковать только толку от такой практики, если я грамматику не знаю совсем-совсем почти и словарный запас у меня как у младенца, но да ладно

Ещё я сделал быструю сортировку, но её я скидывать не буду, потому что это просто два дефолтных варианта реализации: в одной массив делится на две половинки ровно, а другая - чуть более хитрая, она на каждой итерации ставит pivot элемент на своё место. Вторую реализацию можно, кстати, использовать для того, чтобы находить k-ый по величине элемент за линейное время: если после partitioning'а массива pivot встал на индекс равный k, то это и есть k-ый элемент, если pivot встал на индекс больший, чем k, то, очевидно, k-ый по величине элемент где-то слева, иначе - справа. То есть получается простой линейный (1 + 2 + 4 + ... + N = (2^(lgN + 1) - 1) / (2 - 1) = 2N - 1, если я нигде не ошибся, потому что проверять точно мне сейчас лень) нерекурсивный (потому что в отличие от быстрой сортировки у нас тут нет ветвления) алгоритм. Это я тоже показывать не буду.

Ещё сделал неоправданно нагруженное всяким мусором вроде генериков решение простой задачки про ключи и замки / гайки и болты. Суть в том, что у нас куча гаек и куча болтов, при этом на каждую гайку среди болтов найдётся ровно один подходящий. Нельзя сравнивать между собой диаметры болтов и гаек, можно только пробовать надеть гайку на болт и тут можно сказать, подходит ли гайка для болта, гайка слишком маленькая или слишком большая. Суть решения в том, что мы два раза применяем partitioning из быстрой сортировки: сначала в качестве pivot'а берём любую гайку, делим относительно неё болты на две кучки а также находим болт, налезающий на эту pivot гайку. А потом болтом делим гайки на две кучки. Получается, что разделили задачу на две. И дальше рекурсивно.
https://www.ideone.com/SC6H9P
Я его не проверял, но выглядит более-менее рабочим вроде. Да и там негде ошибиться, я думаю.

и ещё вот такое
https://www.ideone.com/6NxXBH
для двух отсортированных массивов одного размера надо найти их медиану (я знаю, что там есть ещё вариации этой задачки, я их ещё не смотрел)

И Я ОПЯТЬ НЕ ПРОВЕРЯЛ, НАСКОЛЬКО ВООБЩЕ ЭТО РЕШЕНИЕ ПРАВИЛЬНОЕ, ПОТОМУ ЧТО МНЕ ЛЕНЬ ПИСАТЬ ТЕСТЫ
и, наверное, там можно обойтись без избыточных индексов, там вряд ли нужно каждый кусочек идентифицировать как lo и hi, но я не знаю точно, как это сделать, и я чувствую, что иногда более оправдано сделать более тупое решение, чем более умное, чуть более эффективное в пределах константы, но менее читабельное

Есть очевидный неочевидный линейный алгоритм, который в точности повторяет алгоритм слияния массивов и состоит в том, чтобы пройтись ровно до половины воображаемого merged массива и сохранить только два последних элемента.

А есть менее очевидный метод, работающий за логарифм, в котором мы находим медиану левого подмассива A, правого подмассива B, таким образом делим их на A_left, A_right, B_left, B_right (ну тут я их делю необязательно, чтобы они были взаимо исключающими, то есть обе половинки могут включать медиану). И теперь, если медианы A и B равны, то всё, эта медиана будет медианой и цельного массива, потому что слева от каждой медианы в A и B по n/2 элементов, так что в merged массиве эти медианы будут стоять на местах n и n+1. Если же медиана A меньше медианы B, то это означает, что:

(стоит отметить, что так как массивов два, то merged массив будет иметь чётное число элементов, так что он идеально делится на две одинаковые половинки)

> max(B_left) ≥ max(A_left), так что левая часть merged массива не может заканчиваться на элемент из A_left, потому что сначла там пройдут как минимум n/2 элементов из A_left, пока итератор в B_left застопорится на максимальном элементе, так что левая часть merged массива может закончиться либо на элементе из B_left, либо из A_right



> min(B_right) ≥ min(A_right), тут аналогично: элементы из B_right не смогут никак начать правую половинку merged массива, потому что в A_right есть достаточно маленькие элементы



Таким образом, нас интересуют только A_right и B_left, потому что если представить, что мы ищем медиану, последовательно сдвигая два итератора по массиву (тут с чётной длиной) друг навстречу другу, то мы можем убрать на их пути одинаковое число любых элементов, кроме последних двух, так что A_left и B_right мы просто выбрасываем, они как раз имеют одинаковую длину. И теперь мы получили такую же задачу, но вдвое меньшую, которую будем решать рекурсивно.

Кстати, для бэйз кейса там есть специальная формула: если мы остались с двумя отсортированными массивами [a1, a2] и [b1, b2], то медиана вычисляется как (max(a1, b1) + min(a2, b2)) / 2. Я ВООБЩЕ ПОНЯТИЯ НЕ ИМЕЮ, откуда она такая красивая взялась, я там в комментариях к коду попытался понять, почему она вообще работает, и её действительно можно вывести, если рассмотреть все 6 случаев того, как может смерджиться массив из этих двух, но какое смысловое значение такая формула имеет и как её можно вывести не перебором, я не понимаю.

перечитывать не буду, если что-то выглядит непонятным, то, скорее всего, мои руки рассинхронизировались с головой
как будто бы кто-то будет читать
PoppyFanboy !!cYLydiSRQA 377 331048
>>328979
я хотел ответить нормально, но потом передумал
живу с родителями и за счёт родителей, город большой, а остальное, ну, наверное, не особо важно

https://youtu.be/QvO8kcWFFT0
https://youtu.be/y8-6QPEes1k

на самом деле, я могу заниматься ничем бесконечно
потому что, блин, да, вот, да, я ничего, считай, опять не делал, я попробую завтра
побольше
наверное
ещё

Ноо я, во-первых, всё же сделал два варианта перемешивания связных списков: in-place за O(NlgN) и O(N) за дополнительную O(N) память. И тут сложнее всего было сделать сам этот связный список, а всё из-за того, что я решил, что хранить голову - это хорошая идея, но совершенно не утрудил себя тем, чтобы корректно его поддерживать, поэтому очень сильно удивился, когда у меня ничего не заработало, естественно я не подумал о том, что хвост надо менять не только при аппенде, поэтому пришлось сделать штуку, которая тестирует список на всякие операции, и сравнивать результаты операций с референсным ArrayList'ом. Не знаю, насколько это было правильным решением, но я сначала генерировал набор случайных операций над списком без аргументов к ним, а потом генерировал аргументы по ходу, используя для тестируемого списка и референсного. А потом перебрасывал исключения, выпадавшие при выполнении операций вместе со списком операций, референсом и тестируемым списком. И в конце сравнивал референс и мой список.

Я таких штук раньше не делал, но вот, сделал, и оно помогло решить пусть и жесть тривиальную проблему.

Кстати, я там где-то писал о том, что маркерный интерфейс RandomAccess для коллекций со случайным доступом - это плохое решение, и у меня был шанс удостовериться в этом, когда я хотел, чтобы мой метод принимал только списки с эффективным рандомным доступом, то мне пришлось писать что-то вроде

> static <T extends List<?> & RandomAccess> void doSomething(T list)


такого вместо вот такого, какое могло быть

> static void doSomething(RandomAccessList list)


И был бы просто ещё дополнительно интерфейс SequentialList. И оба бы имплементировали интерфейс List. Конечно, там в стандартной библиотеке есть абстрактный класс AbstractList, который

>provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "random access" data store (such as an array)


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

а, ну и само перемешивание списков
https://www.ideone.com/Jm2E0I
мне в целом нравится, как оно получилось, вот в плане того, что оно возвращает просто голову нлуь-терминированного списка, на приватные методы, которые бросают исключения, не обращайте внимания, я их скопировал из другого класса, в котором они у меня были публичными, за кривой английский в комментариях извините, это моя единственная возможность его практиковать только толку от такой практики, если я грамматику не знаю совсем-совсем почти и словарный запас у меня как у младенца, но да ладно

Ещё я сделал быструю сортировку, но её я скидывать не буду, потому что это просто два дефолтных варианта реализации: в одной массив делится на две половинки ровно, а другая - чуть более хитрая, она на каждой итерации ставит pivot элемент на своё место. Вторую реализацию можно, кстати, использовать для того, чтобы находить k-ый по величине элемент за линейное время: если после partitioning'а массива pivot встал на индекс равный k, то это и есть k-ый элемент, если pivot встал на индекс больший, чем k, то, очевидно, k-ый по величине элемент где-то слева, иначе - справа. То есть получается простой линейный (1 + 2 + 4 + ... + N = (2^(lgN + 1) - 1) / (2 - 1) = 2N - 1, если я нигде не ошибся, потому что проверять точно мне сейчас лень) нерекурсивный (потому что в отличие от быстрой сортировки у нас тут нет ветвления) алгоритм. Это я тоже показывать не буду.

Ещё сделал неоправданно нагруженное всяким мусором вроде генериков решение простой задачки про ключи и замки / гайки и болты. Суть в том, что у нас куча гаек и куча болтов, при этом на каждую гайку среди болтов найдётся ровно один подходящий. Нельзя сравнивать между собой диаметры болтов и гаек, можно только пробовать надеть гайку на болт и тут можно сказать, подходит ли гайка для болта, гайка слишком маленькая или слишком большая. Суть решения в том, что мы два раза применяем partitioning из быстрой сортировки: сначала в качестве pivot'а берём любую гайку, делим относительно неё болты на две кучки а также находим болт, налезающий на эту pivot гайку. А потом болтом делим гайки на две кучки. Получается, что разделили задачу на две. И дальше рекурсивно.
https://www.ideone.com/SC6H9P
Я его не проверял, но выглядит более-менее рабочим вроде. Да и там негде ошибиться, я думаю.

и ещё вот такое
https://www.ideone.com/6NxXBH
для двух отсортированных массивов одного размера надо найти их медиану (я знаю, что там есть ещё вариации этой задачки, я их ещё не смотрел)

И Я ОПЯТЬ НЕ ПРОВЕРЯЛ, НАСКОЛЬКО ВООБЩЕ ЭТО РЕШЕНИЕ ПРАВИЛЬНОЕ, ПОТОМУ ЧТО МНЕ ЛЕНЬ ПИСАТЬ ТЕСТЫ
и, наверное, там можно обойтись без избыточных индексов, там вряд ли нужно каждый кусочек идентифицировать как lo и hi, но я не знаю точно, как это сделать, и я чувствую, что иногда более оправдано сделать более тупое решение, чем более умное, чуть более эффективное в пределах константы, но менее читабельное

Есть очевидный неочевидный линейный алгоритм, который в точности повторяет алгоритм слияния массивов и состоит в том, чтобы пройтись ровно до половины воображаемого merged массива и сохранить только два последних элемента.

А есть менее очевидный метод, работающий за логарифм, в котором мы находим медиану левого подмассива A, правого подмассива B, таким образом делим их на A_left, A_right, B_left, B_right (ну тут я их делю необязательно, чтобы они были взаимо исключающими, то есть обе половинки могут включать медиану). И теперь, если медианы A и B равны, то всё, эта медиана будет медианой и цельного массива, потому что слева от каждой медианы в A и B по n/2 элементов, так что в merged массиве эти медианы будут стоять на местах n и n+1. Если же медиана A меньше медианы B, то это означает, что:

(стоит отметить, что так как массивов два, то merged массив будет иметь чётное число элементов, так что он идеально делится на две одинаковые половинки)

> max(B_left) ≥ max(A_left), так что левая часть merged массива не может заканчиваться на элемент из A_left, потому что сначла там пройдут как минимум n/2 элементов из A_left, пока итератор в B_left застопорится на максимальном элементе, так что левая часть merged массива может закончиться либо на элементе из B_left, либо из A_right



> min(B_right) ≥ min(A_right), тут аналогично: элементы из B_right не смогут никак начать правую половинку merged массива, потому что в A_right есть достаточно маленькие элементы



Таким образом, нас интересуют только A_right и B_left, потому что если представить, что мы ищем медиану, последовательно сдвигая два итератора по массиву (тут с чётной длиной) друг навстречу другу, то мы можем убрать на их пути одинаковое число любых элементов, кроме последних двух, так что A_left и B_right мы просто выбрасываем, они как раз имеют одинаковую длину. И теперь мы получили такую же задачу, но вдвое меньшую, которую будем решать рекурсивно.

Кстати, для бэйз кейса там есть специальная формула: если мы остались с двумя отсортированными массивами [a1, a2] и [b1, b2], то медиана вычисляется как (max(a1, b1) + min(a2, b2)) / 2. Я ВООБЩЕ ПОНЯТИЯ НЕ ИМЕЮ, откуда она такая красивая взялась, я там в комментариях к коду попытался понять, почему она вообще работает, и её действительно можно вывести, если рассмотреть все 6 случаев того, как может смерджиться массив из этих двух, но какое смысловое значение такая формула имеет и как её можно вывести не перебором, я не понимаю.

перечитывать не буду, если что-то выглядит непонятным, то, скорее всего, мои руки рассинхронизировались с головой
как будто бы кто-то будет читать
.jpeg103 Кб, 1300x1300
PoppyFanboy !!cYLydiSRQA 378 331544
https://youtu.be/qrwVthk38b0
https://youtu.be/qrwVthk38b0

на обед сегодня ничего с привкусом головокружения

Я должен ставить цели здесь? Мне просто стыдно писать здесь о таких вещах. Стыдно потом говорить, что мол вот, ни того, ни этого не сделал, это оказалось слишком сложным, а это мне вообще неинтересно, не буду это делать совсем.

А бумажный дневник или даже текстовый файл.
Я просто не могу такое вести, не хватает терпения, очень быстро забиваю на него, а перед этим всё ещё и скатывается в какой-то бессвязный бред без знаков препинания. И я не могу всё равно потом заставить себя перечитывать это, так что оно обычно либо удаляется, либо комкается и отправляется в мусорную корзину. Даже, если это просто список того, что я хотел бы сделать.

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

Цель должна быть конкретной, но я не могу заранее определить, что я буду делать. Да и я просто не вижу смысла в том, чтобы ставить какие-то конкретные цели, я всегда совершенно точно знаю, что нужно делать. Когда пытаюсь сформулировать конкретно, постоянно кажется, что мало, а потом оказывается, что я не делаю и восьмой части от запланированного. Всё выглядит слишком сложным и комплексным, я слишком тупой, у меня слишком ссохшийся и маленький мозг, это оправдание? Или действительно так и есть? Наверное, нельзя так думать даже, если это так, но оно постоянно напрашивается ведь.

Если ставить только минимум. Если иметь какой-то пулл из конкретных задач и говорить только о тех, про которые ты точно знаешь, что сможешь хотя бы потрогать их, и в целом тебе не будет стыдно сказать о них. Или выделить время на то, чтобы заниматься стыдными целями строго отведённое количество времени и ставить процесс занятия стыдными целями как отедельную цель. Но это же противоречит тому, чтобы ставить конкретные цели. Или, если я буду ставить хотя бы какие-то, то это уже будет лучше, чем ничего?

Это всё абсолютно пустое, всё, никто о таком не думает, все просто делают то, что им хочется, они могут отрицать это, говорить, что никому не хочется работать или ещё что-то такое делать, но потом вдруг оказывается, что у них есть другие хотелки, которые обеспечиваются как раз работой, так что получается, что они как раз транзитивно делают то, что им хочется. Не будь этих потребностей, они бы не стали стараться. И у меня тоже такое есть, но в значительной меньшей степени и обычно относится вообще совершенно не к тому, что я бы обозначил как полезное. Ну вот и выходит, что у меня полезное бесполезно, а бесполезное наоборот - полезно.

ну так что
вот допустим
> сделать поиск медианы для двух отсортированных массивов разных размеров (линейный и за логарифм)
> доделать interview questions третьей недели
> сделать бинарную кучу, d-арную кучу, priority queue на основе какой-то кучи и сортировку кучей
> ну и написать о чём-нибудь из этого
это выглядит простым, это просто, это не должно занять время, но не стоит ли остановиться именно здесь
чтобы я точно мог это сделать, чтобы это было первым, чем я должен буду озаботиться
но это вообще, считай, ничего, все говорят о том, что маленькими шагами можно своротить горы, только, видимо, у всех эти маленькие шаги такие, что я бы едва ли своими нормальными вприпрыжку за ними поспевал

нужно ли определять тут всякие стыдные вещи
их надо ограничить во времени?
надо понизить их в приоритете?
я не знаю, я вообще не понимаю ничего
они появляются всегда внезапно, всегда затягивают, всегда я слишком поздно понимаю, что это какой-то бред
ну, допустим
> 1 час на стыдные вещи
> 1 час на что угодно, лишь бы что-то было
что это означает? я должен 2 часа заниматься стыдными вещами? или это лимит? если я совсем-совсем не трачу время на стыдные вещи, то это хорошо или плохо? если занимаюсь чем угодно, лишь бы чем-то, больше заданной отметки, то это хорошо? я не знаю, я запутался, я постоянно оставляю это на завтрашнего меня, но это никогда не работает: завтрашний я - это всё тот же я, только ещё хуже, ещё тупее, ещё более безвольный, ещё более потерянный

ну ладно, в любом случае, надо сделать хотя бы то, о чём я написал

короче, на самом деле, nvm, не знаю, что это вообще со мной
.jpeg103 Кб, 1300x1300
PoppyFanboy !!cYLydiSRQA 378 331544
https://youtu.be/qrwVthk38b0
https://youtu.be/qrwVthk38b0

на обед сегодня ничего с привкусом головокружения

Я должен ставить цели здесь? Мне просто стыдно писать здесь о таких вещах. Стыдно потом говорить, что мол вот, ни того, ни этого не сделал, это оказалось слишком сложным, а это мне вообще неинтересно, не буду это делать совсем.

А бумажный дневник или даже текстовый файл.
Я просто не могу такое вести, не хватает терпения, очень быстро забиваю на него, а перед этим всё ещё и скатывается в какой-то бессвязный бред без знаков препинания. И я не могу всё равно потом заставить себя перечитывать это, так что оно обычно либо удаляется, либо комкается и отправляется в мусорную корзину. Даже, если это просто список того, что я хотел бы сделать.

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

Цель должна быть конкретной, но я не могу заранее определить, что я буду делать. Да и я просто не вижу смысла в том, чтобы ставить какие-то конкретные цели, я всегда совершенно точно знаю, что нужно делать. Когда пытаюсь сформулировать конкретно, постоянно кажется, что мало, а потом оказывается, что я не делаю и восьмой части от запланированного. Всё выглядит слишком сложным и комплексным, я слишком тупой, у меня слишком ссохшийся и маленький мозг, это оправдание? Или действительно так и есть? Наверное, нельзя так думать даже, если это так, но оно постоянно напрашивается ведь.

Если ставить только минимум. Если иметь какой-то пулл из конкретных задач и говорить только о тех, про которые ты точно знаешь, что сможешь хотя бы потрогать их, и в целом тебе не будет стыдно сказать о них. Или выделить время на то, чтобы заниматься стыдными целями строго отведённое количество времени и ставить процесс занятия стыдными целями как отедельную цель. Но это же противоречит тому, чтобы ставить конкретные цели. Или, если я буду ставить хотя бы какие-то, то это уже будет лучше, чем ничего?

Это всё абсолютно пустое, всё, никто о таком не думает, все просто делают то, что им хочется, они могут отрицать это, говорить, что никому не хочется работать или ещё что-то такое делать, но потом вдруг оказывается, что у них есть другие хотелки, которые обеспечиваются как раз работой, так что получается, что они как раз транзитивно делают то, что им хочется. Не будь этих потребностей, они бы не стали стараться. И у меня тоже такое есть, но в значительной меньшей степени и обычно относится вообще совершенно не к тому, что я бы обозначил как полезное. Ну вот и выходит, что у меня полезное бесполезно, а бесполезное наоборот - полезно.

ну так что
вот допустим
> сделать поиск медианы для двух отсортированных массивов разных размеров (линейный и за логарифм)
> доделать interview questions третьей недели
> сделать бинарную кучу, d-арную кучу, priority queue на основе какой-то кучи и сортировку кучей
> ну и написать о чём-нибудь из этого
это выглядит простым, это просто, это не должно занять время, но не стоит ли остановиться именно здесь
чтобы я точно мог это сделать, чтобы это было первым, чем я должен буду озаботиться
но это вообще, считай, ничего, все говорят о том, что маленькими шагами можно своротить горы, только, видимо, у всех эти маленькие шаги такие, что я бы едва ли своими нормальными вприпрыжку за ними поспевал

нужно ли определять тут всякие стыдные вещи
их надо ограничить во времени?
надо понизить их в приоритете?
я не знаю, я вообще не понимаю ничего
они появляются всегда внезапно, всегда затягивают, всегда я слишком поздно понимаю, что это какой-то бред
ну, допустим
> 1 час на стыдные вещи
> 1 час на что угодно, лишь бы что-то было
что это означает? я должен 2 часа заниматься стыдными вещами? или это лимит? если я совсем-совсем не трачу время на стыдные вещи, то это хорошо или плохо? если занимаюсь чем угодно, лишь бы чем-то, больше заданной отметки, то это хорошо? я не знаю, я запутался, я постоянно оставляю это на завтрашнего меня, но это никогда не работает: завтрашний я - это всё тот же я, только ещё хуже, ещё тупее, ещё более безвольный, ещё более потерянный

ну ладно, в любом случае, надо сделать хотя бы то, о чём я написал

короче, на самом деле, nvm, не знаю, что это вообще со мной
.jpg498 Кб, 1411x1964
PoppyFanboy !!cYLydiSRQA 379 331545
>>331544
Дурацкий глючный ютуб копирует ссылку на предыдущее открытое в плейлисте видео, хотя я уже открыл другое. Постоянно так происходит. Второй песенкой там должно было быть это:
https://youtu.be/kvnIFo3xMfY
.jpeg263 Кб, 1550x2340
PoppyFanboy !!cYLydiSRQA 380 331547
>>331544
Изо дня в день делать только минимум, найти планку, которую ты мог бы осилить на каждодневной основе, выполнять её, а после - отдыхать, смотреть мультики и играть в игры. Я даже на это не способен, я не способен даже попытаться определить эту минимальную планку. Обычно советуют пообещать себе позаниматься чем-то ровно пять минут и оставить это дело, если дальше тяжело или не хочется. И как правило люди увлекаются делом за эти пять минут, продолжают его делать на протяжении десяти, двадцати. А я даже сесть заставить себя не могу, просто снять наушники и перестать постоянно слушать что-то на фоне, просто на пять минут оторваться.

Надо приобрести чувство смысла, сказать себе, что всё это зачем-то нужно, хотя на деле никакого абсолютно толку от этого нет. Это недостающая чсть? Или что вообще. Я не знаю, я вижу вокруг только груду бесполезного мусора, в которую я погружён по самую шею, так, что даже не могу пошевелить руками. Пойду спать, может быть, мне надо выспаться.

https://youtu.be/N2pINglzvX8
https://youtu.be/9HOYRRljwOk
PoppyFanboy !!cYLydiSRQA 381 332064
https://youtu.be/uzDjwziLCPI
https://youtu.be/F8ySq2EHvms

что это и кто с этим делать
https://www.ideone.com/Z5I9f3

всё же я там выше ошибся в коде для медианы двух массивов одинаковой длины, вроде как он фейлится на вот таких массивах

> a = [ 1, 3, 5, 7]; b = [ 2, 4, 5, 8 ]


и выдаёт 5 вместо 4.5, так как я ошибочно думал, что если a[lo1 + hi1 >> 1] == b[lo2 + hi2 >> 1], то это означает, что они попали в медиану, но на деле, если, допустим, есть два массива с чётными длинами m и n, и выполняется a[m / 2] == b[n / 2], то это означает, что есть (m + n) / 2 элементов не больших, чем a[m / 2], но нам-то нужно только, чтобы их было ровно (m + n) / 2 - 1, так что надо сравнивать a[m - 1 >> 1] с b[n >> 1] и a[m >> 1] с b[n - 1 >> 1], и тогда всё должно работать корректно

для массивов с разными длинами всё аналогично, там почти такой же код, только надо рассмотреть больше базовых случаев: массивы с длинами (0, чёт), (0, нечёт), (1, чёт), (1, нечёт), (2, чёт), (2, нечёт), (2, 2), (1, 1). но там более-менее легко, просто муторно это делать

Для k-ого большего элемента среди двух отсортированных массивов там немного другой подход, я не смог сам написать, пришлось списать (ну, не прямо списать, но пару кусков примерно), а потом разобраться. Там базовые случаи - это когда один из массивов пуст (возвращаем k-ый элемент непустого массива) и когда мы ищем нулевой элемент (возвращаем минимум из первых элементов двух массивов).

А основной цикл работает так: каждый раз мы сокращаем какой-то из массивов на k / 2 первых элементов, тем самым уменьшая то, какой по величине элемент мы ищем, на k / 2 же. А так, там то же самое, что и с медианами: берём k/2-ые элементы первого и второго массива. Если они равны, то это как раз то, что надо. Если a[k / 2] < b[k / 2], то отбрасываем первые k / 2 из первого массива, потому что они слишком маленькие, и k-ый по величине находится либо где-то во втором массиве, левее k/2-ого элемента, либо где-то дальше в первом массиве.

При этом там отдельно рассматривается случай, когда первый (нуо wlog меньший массив) содержит только k / 2 элементов или ещё меньше: тогда есть шанс, что все эти элементы меньше k-ого по величине и они все нам не важны. Поэтому пытаемся добить первый массив элементами из второго до размера k и сравниваем последний элемент первого массива с последним элементом подмассива, который получился из второго. Если последний элемент первого меньше, то k-ый по величине это вот последний элемент, которым мы добиваем воображаемый merged массив до k элементов, если же нет, то k-ый элемент находится где-то среди последних элементов первого массива, так что вырезаем ведущие элементы второго массива (только k / 2, видимо, для последовательности? можно было бы и немного больше вырезать, наверное, но я не разбирался).

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

Короче, получилась какая-то гора мусора, кстати, обращаю внимание на то,

>assert hi1 - lo1 <= 2 || hi2 - lo2 <= 2;


>assert isSorted(a, lo1, hi1) && isSorted(b, lo2, hi2);


>assert rangeCheck(a, lo1, hi1) && rangeCheck(a, lo1, hi1);


какая я мразь и делаю столько избыточных проверок, которые ни разу даже не пригодились. Не знаю, индексы расставлял больше интуитивно, и я так понимаю, так и надо делать в большинстве таких заданий: сначала писать как придётся, используя какую-то наполовину интуитивную идею, а потом тщательно тестировать (чего я так и не сделал, мда) и на конкретных непроходящих тест кейсах смотреть, как исправить так, чтобы не сделать ещё хуже, чем есть.
PoppyFanboy !!cYLydiSRQA 381 332064
https://youtu.be/uzDjwziLCPI
https://youtu.be/F8ySq2EHvms

что это и кто с этим делать
https://www.ideone.com/Z5I9f3

всё же я там выше ошибся в коде для медианы двух массивов одинаковой длины, вроде как он фейлится на вот таких массивах

> a = [ 1, 3, 5, 7]; b = [ 2, 4, 5, 8 ]


и выдаёт 5 вместо 4.5, так как я ошибочно думал, что если a[lo1 + hi1 >> 1] == b[lo2 + hi2 >> 1], то это означает, что они попали в медиану, но на деле, если, допустим, есть два массива с чётными длинами m и n, и выполняется a[m / 2] == b[n / 2], то это означает, что есть (m + n) / 2 элементов не больших, чем a[m / 2], но нам-то нужно только, чтобы их было ровно (m + n) / 2 - 1, так что надо сравнивать a[m - 1 >> 1] с b[n >> 1] и a[m >> 1] с b[n - 1 >> 1], и тогда всё должно работать корректно

для массивов с разными длинами всё аналогично, там почти такой же код, только надо рассмотреть больше базовых случаев: массивы с длинами (0, чёт), (0, нечёт), (1, чёт), (1, нечёт), (2, чёт), (2, нечёт), (2, 2), (1, 1). но там более-менее легко, просто муторно это делать

Для k-ого большего элемента среди двух отсортированных массивов там немного другой подход, я не смог сам написать, пришлось списать (ну, не прямо списать, но пару кусков примерно), а потом разобраться. Там базовые случаи - это когда один из массивов пуст (возвращаем k-ый элемент непустого массива) и когда мы ищем нулевой элемент (возвращаем минимум из первых элементов двух массивов).

А основной цикл работает так: каждый раз мы сокращаем какой-то из массивов на k / 2 первых элементов, тем самым уменьшая то, какой по величине элемент мы ищем, на k / 2 же. А так, там то же самое, что и с медианами: берём k/2-ые элементы первого и второго массива. Если они равны, то это как раз то, что надо. Если a[k / 2] < b[k / 2], то отбрасываем первые k / 2 из первого массива, потому что они слишком маленькие, и k-ый по величине находится либо где-то во втором массиве, левее k/2-ого элемента, либо где-то дальше в первом массиве.

При этом там отдельно рассматривается случай, когда первый (нуо wlog меньший массив) содержит только k / 2 элементов или ещё меньше: тогда есть шанс, что все эти элементы меньше k-ого по величине и они все нам не важны. Поэтому пытаемся добить первый массив элементами из второго до размера k и сравниваем последний элемент первого массива с последним элементом подмассива, который получился из второго. Если последний элемент первого меньше, то k-ый по величине это вот последний элемент, которым мы добиваем воображаемый merged массив до k элементов, если же нет, то k-ый элемент находится где-то среди последних элементов первого массива, так что вырезаем ведущие элементы второго массива (только k / 2, видимо, для последовательности? можно было бы и немного больше вырезать, наверное, но я не разбирался).

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

Короче, получилась какая-то гора мусора, кстати, обращаю внимание на то,

>assert hi1 - lo1 <= 2 || hi2 - lo2 <= 2;


>assert isSorted(a, lo1, hi1) && isSorted(b, lo2, hi2);


>assert rangeCheck(a, lo1, hi1) && rangeCheck(a, lo1, hi1);


какая я мразь и делаю столько избыточных проверок, которые ни разу даже не пригодились. Не знаю, индексы расставлял больше интуитивно, и я так понимаю, так и надо делать в большинстве таких заданий: сначала писать как придётся, используя какую-то наполовину интуитивную идею, а потом тщательно тестировать (чего я так и не сделал, мда) и на конкретных непроходящих тест кейсах смотреть, как исправить так, чтобы не сделать ещё хуже, чем есть.
PoppyFanboy !!cYLydiSRQA 382 332406
PoppyFanboy !!cYLydiSRQA 383 334163
а, получается, я начал что-то опять делать только вчера
ну ладно, вот

https://youtu.be/2-zPY0vrpjQ
https://youtu.be/HdC2cB_DZok

а хотите
неоправданно усложнённую реализацию бесполезной очереди с приоритетом, основанной на неупорядоченном массиве?
https://www.ideone.com/FC6zAU
Есть подозрение, что там даже грамотно работает remove() у итератора. Вообще итератор я сделал довольно тупо: он копирует кучу и делает remove() для копии при каждом вызове next() у итератора. А в общем-то необязательный remove() у итератора я сделал, дополнительно отслеживая, каким индексам в изначальной куче соответствуют индексы в скопированной куче. Всё значительно упрощается тем, что remove() у итератора можно вызвать только единожды после каждого next(), так что достаточно хранить индекс последнего удалённого элемента и удалять его из изначальной кучи в remove(). Только надо после этого не забыть сдвинуть все индексы:

> До удаления:


> heap: [2, 1, 5, 4, 3]


> iterator.heap: [2, 1, 3, null, null] - сделали два next(), которые вернули сначала 5, а потом 4


> iterator.indices: [0, 1, 4, -1, -1]


>


> Допустим, удаляем 4, который только что вернули вызовом next() (то есть сейчас iLastTraversed = 3)


> heap: [2, 1, 5, 3, null]


> iterator.heap: [2, 1, 3, null, null]


> iterator.indices: [0, 1, 3, -1, -1] - вот тут надо было уменьшить на 1 все индексы большие, чем iLastTraversed


Ну, вроде так.

Ещё я как-то так и не понял, как нормально работать с этими resizing массивами. Ну, я задал там минимальный размер min_size для массива. И, если он переполняется или оказывается заполненным менее, чем на четверть, то я вычисляю новый размер просто по формуле new_length = size + max(min_size, size / 2), где size - количество элементов, которые хранятся в массиве. И ещё я не сокращаю массив, если он в длину меньше, чем 2min_size, потому что при сокращении длина массива уменьшается как минимум вдвое. Как бы, эм, всё? У меня почему-то такое ощущение, что я что-то упускаю, какой-нибудь неочевидный вырожденный случай, когда всё ломается.

На самом деле, такой вариант PQ не то чтобы прямо бесполезен. Его как минимум можно использовать для тестирования чуть более сложных реализаций PQ. Правда, это при условии того, что вот эта unordered-array-based max PQ implementation работает корректно.

А binary heap, d-ary heap и heapsort я вроде сделал, но пока не буду показывать, потому что они прямо совсем не протестированы и, скорее всего, там ничего нормально не работает.
PoppyFanboy !!cYLydiSRQA 383 334163
а, получается, я начал что-то опять делать только вчера
ну ладно, вот

https://youtu.be/2-zPY0vrpjQ
https://youtu.be/HdC2cB_DZok

а хотите
неоправданно усложнённую реализацию бесполезной очереди с приоритетом, основанной на неупорядоченном массиве?
https://www.ideone.com/FC6zAU
Есть подозрение, что там даже грамотно работает remove() у итератора. Вообще итератор я сделал довольно тупо: он копирует кучу и делает remove() для копии при каждом вызове next() у итератора. А в общем-то необязательный remove() у итератора я сделал, дополнительно отслеживая, каким индексам в изначальной куче соответствуют индексы в скопированной куче. Всё значительно упрощается тем, что remove() у итератора можно вызвать только единожды после каждого next(), так что достаточно хранить индекс последнего удалённого элемента и удалять его из изначальной кучи в remove(). Только надо после этого не забыть сдвинуть все индексы:

> До удаления:


> heap: [2, 1, 5, 4, 3]


> iterator.heap: [2, 1, 3, null, null] - сделали два next(), которые вернули сначала 5, а потом 4


> iterator.indices: [0, 1, 4, -1, -1]


>


> Допустим, удаляем 4, который только что вернули вызовом next() (то есть сейчас iLastTraversed = 3)


> heap: [2, 1, 5, 3, null]


> iterator.heap: [2, 1, 3, null, null]


> iterator.indices: [0, 1, 3, -1, -1] - вот тут надо было уменьшить на 1 все индексы большие, чем iLastTraversed


Ну, вроде так.

Ещё я как-то так и не понял, как нормально работать с этими resizing массивами. Ну, я задал там минимальный размер min_size для массива. И, если он переполняется или оказывается заполненным менее, чем на четверть, то я вычисляю новый размер просто по формуле new_length = size + max(min_size, size / 2), где size - количество элементов, которые хранятся в массиве. И ещё я не сокращаю массив, если он в длину меньше, чем 2min_size, потому что при сокращении длина массива уменьшается как минимум вдвое. Как бы, эм, всё? У меня почему-то такое ощущение, что я что-то упускаю, какой-нибудь неочевидный вырожденный случай, когда всё ломается.

На самом деле, такой вариант PQ не то чтобы прямо бесполезен. Его как минимум можно использовать для тестирования чуть более сложных реализаций PQ. Правда, это при условии того, что вот эта unordered-array-based max PQ implementation работает корректно.

А binary heap, d-ary heap и heapsort я вроде сделал, но пока не буду показывать, потому что они прямо совсем не протестированы и, скорее всего, там ничего нормально не работает.
Ch0166c1.gif8,2 Мб, 1136x640
Рируру !!gYmpHned/k 384 334276
>>334163
Человек взял и проигнорировал мои изыскания на тему толерантного к изменениям обхода контейнеров, которыми я занимался не далее как пару месяцев назад, потому что изменение во время обхода было типичнейшим сценарием того, где я собирался это использовать, и вариант «падать при iterator.containerVersion != container.version» (в твоей терминологии «nQueueMutations») не подходил вообще никак.

Оригинальное творчество на Pascal: https://pastebin.com/VmKfx11j.
Код на Java, переделанный без копирования и прочих ужастиков (полагая, что Hash/TreeSet — не ужастики, хотя это и неправда): https://ideone.com/5m2iJu.

Суть
В присутствие живых итераторов мы не можем по-настоящему удалять элементы. (Теоретически есть вариант вести «реестр» открытых итераторов и явно исправлять их при изменениях, но это совсем некрасиво.)
<A> <B> <C> <D> <E> <F>

В итераторе нужно запомнить актуальное количество элементов и итерироваться только в его пределах — после этого можно спокойно добавлять новые элементы, не боясь помешать итерированию.
<A> <B> <C> <D> <E> <F>:end <+G> <+H>

Удаляемые же элементы нужно помечать для удаления и в обходах делать вид, что их не существует.
<A> <rem:B> <rem:C> <D> <E> it_end:<F> <+G> <+H>

После закрытия последнего итератора элементы, помеченные для удаления, можно удалить по-нормальному.

Самый большой подводный камень
Как отследить закрытие итератора-то?
Самый очевидный и нормальный способ, который я и сделал — RAII.
Но его нужно использовать явно в виде AutoCloseable и try-with-resources.
С одной стороны, можно самонадеянно утверждать, что если пользователь неправильно использует твой класс, то он ССЗБ.

С другой, можно попробовать упростить ему жизнь, тем более что RAII в Java исторически неидиоматичен и есть диаметрально противоположный взгляд — если пользователь смог неправильно использовать класс, то умственными способностями хохла обладает как раз-таки автор класса. Но помимо RAII я не вижу другого способа, кроме как упихнуть закрытие итератора в его finalize().

На самом деле это неплохой вариант: финализатор как раз приемлем для таких штук с освобождением чего-то некритичного когда-нибудь в будущем. Пока удаления не применены, класс просто будет работать медленнее, чем мог бы. Возможно, сильно. GC увидит только memory pressure от недоудалённых элементов, сравнительно небольшое по сравнению с сопряжённым с ними линейным снижением производительности.

НО. (Или, принимая во внимание сказанное под спойлером, «БОЛЕЕ ТОГО»)
(Это мои догадки, я не проверял...)
Финализатор вызывается в другом потоке.

Поэтому, даже если класс задуман для использования одним потоком, придётся приписать synchronized ко всем публичным методам и, соответственно, обрабатывать смерть итератора в finalize() тоже под synchronized(MaxPQUnorderedArray.this). Впрочем, это скорее эстетическая проблема.

Человеческое решение
Изначально я не заметил, что ~Ты здесь не просто так~ ты итерируешь очередь не просто так, а в порядке приоритетов.
Задумавшись о том, насколько это больная идея и что я делаю не так в этой жизни, я вдруг понял, что есть гораздо лучший, и даже отчасти более очевидный, способ этого, без сомнения, спорного занятия — лолдерево поиска (у меня дежавю).

В нём изначально можно найти минимум/максимум за O(log N), просто до упора спустившись влево/вправо. Ещё лучше будет заточиться под сценарий использования дерева как очереди с приоритетом и обеспечить мгновенный peek(), поддерживая ссылку на актуальный минимум/максимум во время добавлений и удалений (скорее всего, в них это займёт лишние O(1)).

Шаг к предыдущему/следующему элементу в дереве поиска занимает амортизированные O(1). Для обхода в прямом порядке нужно начать с минимального элемента и для получения каждого следующего либо спуститься 1 раз вправо и до упора влево, либо (если правого элемента не было) подняться до первого узла, в котором окажется, что мы пришли из его левого сына. Короче: https://stackoverflow.com/a/2942598, https://ideone.com/eFOAzM.

К сожалению, дерево никак не упрощает модификации на лету.
С удалениями ничего нового, а добавления можно разрулить

1) гибридным подходом — у очереди int version, в узлах int addedInVersion, в итераторах int startedInVersion, и итераторы отдают наружу только элементы с addedInVersion <= startedInVersion,

-либо-

2) переделкой моего варианта — все узлы дерева хранятся в Node[] / ArrayList<Node>, вместо указателей left/right/parent используются индексы, итератор запоминает startingNodesCount = nodesCount и впоследствии возвращает только узлы с index < startingNodesCount.

Первый вариант неприятен из-за маячащего на горизонте переполнения version, а long version уже как-то слишком жирно. Реально поменять версию нужно только перед первой add/remove с момента последнего создания итератора, но даже при таких условиях насоздавать 2×10⁹ итераторов несложно — они даже не должны пересекаться во времени для этого.
Ch0166c1.gif8,2 Мб, 1136x640
Рируру !!gYmpHned/k 384 334276
>>334163
Человек взял и проигнорировал мои изыскания на тему толерантного к изменениям обхода контейнеров, которыми я занимался не далее как пару месяцев назад, потому что изменение во время обхода было типичнейшим сценарием того, где я собирался это использовать, и вариант «падать при iterator.containerVersion != container.version» (в твоей терминологии «nQueueMutations») не подходил вообще никак.

Оригинальное творчество на Pascal: https://pastebin.com/VmKfx11j.
Код на Java, переделанный без копирования и прочих ужастиков (полагая, что Hash/TreeSet — не ужастики, хотя это и неправда): https://ideone.com/5m2iJu.

Суть
В присутствие живых итераторов мы не можем по-настоящему удалять элементы. (Теоретически есть вариант вести «реестр» открытых итераторов и явно исправлять их при изменениях, но это совсем некрасиво.)
<A> <B> <C> <D> <E> <F>

В итераторе нужно запомнить актуальное количество элементов и итерироваться только в его пределах — после этого можно спокойно добавлять новые элементы, не боясь помешать итерированию.
<A> <B> <C> <D> <E> <F>:end <+G> <+H>

Удаляемые же элементы нужно помечать для удаления и в обходах делать вид, что их не существует.
<A> <rem:B> <rem:C> <D> <E> it_end:<F> <+G> <+H>

После закрытия последнего итератора элементы, помеченные для удаления, можно удалить по-нормальному.

Самый большой подводный камень
Как отследить закрытие итератора-то?
Самый очевидный и нормальный способ, который я и сделал — RAII.
Но его нужно использовать явно в виде AutoCloseable и try-with-resources.
С одной стороны, можно самонадеянно утверждать, что если пользователь неправильно использует твой класс, то он ССЗБ.

С другой, можно попробовать упростить ему жизнь, тем более что RAII в Java исторически неидиоматичен и есть диаметрально противоположный взгляд — если пользователь смог неправильно использовать класс, то умственными способностями хохла обладает как раз-таки автор класса. Но помимо RAII я не вижу другого способа, кроме как упихнуть закрытие итератора в его finalize().

На самом деле это неплохой вариант: финализатор как раз приемлем для таких штук с освобождением чего-то некритичного когда-нибудь в будущем. Пока удаления не применены, класс просто будет работать медленнее, чем мог бы. Возможно, сильно. GC увидит только memory pressure от недоудалённых элементов, сравнительно небольшое по сравнению с сопряжённым с ними линейным снижением производительности.

НО. (Или, принимая во внимание сказанное под спойлером, «БОЛЕЕ ТОГО»)
(Это мои догадки, я не проверял...)
Финализатор вызывается в другом потоке.

Поэтому, даже если класс задуман для использования одним потоком, придётся приписать synchronized ко всем публичным методам и, соответственно, обрабатывать смерть итератора в finalize() тоже под synchronized(MaxPQUnorderedArray.this). Впрочем, это скорее эстетическая проблема.

Человеческое решение
Изначально я не заметил, что ~Ты здесь не просто так~ ты итерируешь очередь не просто так, а в порядке приоритетов.
Задумавшись о том, насколько это больная идея и что я делаю не так в этой жизни, я вдруг понял, что есть гораздо лучший, и даже отчасти более очевидный, способ этого, без сомнения, спорного занятия — лолдерево поиска (у меня дежавю).

В нём изначально можно найти минимум/максимум за O(log N), просто до упора спустившись влево/вправо. Ещё лучше будет заточиться под сценарий использования дерева как очереди с приоритетом и обеспечить мгновенный peek(), поддерживая ссылку на актуальный минимум/максимум во время добавлений и удалений (скорее всего, в них это займёт лишние O(1)).

Шаг к предыдущему/следующему элементу в дереве поиска занимает амортизированные O(1). Для обхода в прямом порядке нужно начать с минимального элемента и для получения каждого следующего либо спуститься 1 раз вправо и до упора влево, либо (если правого элемента не было) подняться до первого узла, в котором окажется, что мы пришли из его левого сына. Короче: https://stackoverflow.com/a/2942598, https://ideone.com/eFOAzM.

К сожалению, дерево никак не упрощает модификации на лету.
С удалениями ничего нового, а добавления можно разрулить

1) гибридным подходом — у очереди int version, в узлах int addedInVersion, в итераторах int startedInVersion, и итераторы отдают наружу только элементы с addedInVersion <= startedInVersion,

-либо-

2) переделкой моего варианта — все узлы дерева хранятся в Node[] / ArrayList<Node>, вместо указателей left/right/parent используются индексы, итератор запоминает startingNodesCount = nodesCount и впоследствии возвращает только узлы с index < startingNodesCount.

Первый вариант неприятен из-за маячащего на горизонте переполнения version, а long version уже как-то слишком жирно. Реально поменять версию нужно только перед первой add/remove с момента последнего создания итератора, но даже при таких условиях насоздавать 2×10⁹ итераторов несложно — они даже не должны пересекаться во времени для этого.
PoppyFanboy !!cYLydiSRQA 385 336717
мм
ну, это уже относительно старое

https://youtu.be/swqbfMh467A
https://youtu.be/ZFI7xoIHt-Q

с бинарной кучей получилось вот это
https://www.ideone.com/ETkMD0
(итератор там для вида, только, чтобы никто не ругался на нереализованный iterator())
не знаю вот только, как быть, когда добавляются несколько элементов сразу, тут я вычисляю двоичный логарифм за константу времени через битовые операции, чтобы определить размер массива, в который надо будет впихивать элементы

-

с d-арной кучей получилось вот это
https://www.ideone.com/ps4Xb1
тут закономерно возникла проблема с тем, что надо в смысле я не знаю, как по-другому, поэтому "надо" вычислять логарифм по основанию d, а его так же просто как по основанию 2 не вычислишь

я видел в интернете варианты сначала вычислить очень-очень приближённо через какие-то битовые операции, а потом приблизить решение методом ньютона, но это мне показалось каким-то оверкиллом с учётом того, что тут сложность вычисления логарифма не влияет на сложность ре-аллокаций, так что я оставил вариант с вычислением логарифма в тупую, и немножко оптимизировал это всё для добавлений/удалений одного элемента: в этих случаях размер массива просто либо умножается на d и делается плюс один, либо делится на d, соответственно

а ещё я сейчас подумал, что, наверное, надо было увеличивать/уменьшать массивы так же, как обычно, то есть не сразу выделять массив из d^0 + d^1 + d^2 + ... + d^h = (d^(h + 1) - 1) / (d - 1) элементов, а каждый раз выделять в полтора раза больше, чем требуется?

-

randomized meldable heap - действительно, при кольно, и очень легко реализуется

-

heap sort - при кольно, нестабильно, работает лучше на d-арной куче, потому что тогда будет выполняться меньше длинных прыжков, и это перевешивает то, что в d-арной куче утапливание элемента делается дороже, чем в бинарной куче (за O(d · log_d N))

при этом её можно немного оптимизировать, если при сортировке не сразу утапливать элемент до своего места, а топить его сначала до самого дна, экономя на каждом уровне одно сравнение, а потом поднимать его наверх до своего места, тратя одно сэкономленное сравнение на каждом уровне, и надеяться, что оно окупится

ещё немного неочевидно то, что в этой сортировке куча на массиве строится за линейное время, если утапливать элементы кучи вниз, начиная с самого последнего. как бы очевидно то, что это лучше, чем поднимать их вверх, начиная с первых элементов кучи (в первом случае работаем много на верхних уровнях, где мало элементов, во втором случае - работаем много на нижних уровнях, где и элементов много), но почему ето так - не совсем очевидно. ну и, чтобы убедиться в этом, надо посчитать просто сумму

> sum_{h = 1}^{floor(lgN)} ceil(N / 2^{h + 1}) · O(h)


где ceil(N / 2^{h + 1}) - это количество элементов в куче на каждом уровне

это будет количество обменов, необходимых для построения кучи, соответственно, сравнений, будет просто в два раза больше

-

чтобы найти все элементы в массиве длины N, которые встречаются чаще, чем N/10 раз, достаточно пройтись по всем кандидатам на такие элементы: если отсортировать массив и условно разделить его на 10 примерно одинаковых по длине интервалов, то можно будет легко увидеть, что жирные куски повторяющихся элементов, которые нас интересуют, будут либо находиться ровно в каком-нибудь из выделенных интервалов, либо будут залезать на другие интервалы, но, в общем, в любом случае, они будут лежать в том числе рядом с правой границей какого-нибудь интервала я отлично объясняю короче, надо просто пройтись по (k · N / 10) - ым по величине элементам и проверить для каждого из них, не попадается ли он достаточное число раз в массиве

-

медианная кучаа, я бы сам не догадался

>надо поддерживать набор чисел и уметь доставать из него медиану за константу времени


идея простая - в max heap храним числа меньшие текущей медианы, в min heap - числа большие медианы. при этом при добавлениях поддерживаем разницу в размерах куч максимум в один элемент, если перевешивает, то перебрасываем элементы из одной кучи в другую. медианой будет либо топовый элемент из большей кучи, либо, если кучи одинакового размера, то берём просто среднее топовых элементов

-

таксикаб числа (ну или что-то близкое к ним, я не гуглил), я бы сам не догадался

>надо найти все числа меньше N, для которых есть как минимум два различных разложения a^3 + b^3 = c^3 + d^3 = число


наивная реализация - вычислить все суммы кубов, из которых потенциально можно составить число меньшее N, отсортировать их и найти дубликаты. это O(N^2 · lgN) времени, что, видимо, не так страшно, но O(N^2) памяти, а это уже не очень при кольно

(ну, о том, что не нужно повторно перебирать a^3 + b^3 и b^3 + a^3 и что надо идти только до floor(N^(1/3)) я молччу, это очевидно)

умная реализация - перебор кучей: начинаем с кучи, в которой изначально находятся пары (1, 1), ..., (M, M), то есть это элементы с главной диагонали, если представить перебираемые пары как матрицу, в узлах которой находятся суммы кубов индексов. куча ориентирована по сумме кубов чисел из пары, а если сумма кубов двух каких-то элементов одинаковая, то тут уже просто смотрим на первое число в паре

так вотт, если посмотреть на ту матрицу, про которую я говорил, то можно заметить, что в ней значения сумм кубов по строкам и столбцам отсортированы по возрастанию (что как бы очевидно), так что когда мы достаём минимальную пару из кучи, то следующей по величине парой будет либо та, что в матрице ниже на одну клетку, либо какая-то пара из некст столбца

так что мы можем изначально забьём кучу парами (1, 1), ..., (M, M), то дальше мы можем просто доставать оттуда минимальную пару, а вместо неё ставить пару, которая находится на одну клетку ниже, и, таким образом, мы одновременно при переборе будем хранить только M пар

короче, вотт, там, правда, первая пара (0, 0) лишняя, но мне лень фиксить
https://www.ideone.com/1SqVXq

-

ещё я посмотрел (списал, показывать не буду) на штуку, которая решает головоломку-пятнашки, там используется крутая штука, которая называется A star search algorithm, основная суть в том, что у нас есть доски с циферками и мы хотим за как можно меньшее число шагов уменьшить расстояние между изначальной доской и той, у которой циферки расставлены по порядку

расстояние между досками (manhattan distance) вычисляется как сумма расстояний между каждой плиткой и тем местом, на котором она должна стоять (таксикаб метрика), то есть это по сути минимальное (скорее всего, недостижимое) количество шагов, которое надо сделать, чтобы поставить все элементы на свои места. добавляем к этому расстоянию число шагов, проделанных от изначальной доски и получаем значение (в референсе, по которому я решал задачку оно было обозначено как manhattan prority), по которому мы будем упорядочивать доски-search-nodes в куче

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

подводные камени: топтание на месте (когда плитка двигается сначала в одну сторону, а потом возвращается на место), конечно, никак не влияет на правильность результата, потому что всё учтено в nahmahttan priority, но всё же занимают место и, скорее всего, немного убивают производительность, так что их можно заавоидить, если хранить то, как выглядела предыдущая доска, и не допускать рождение повторяющихся досок

что если доска нерешабельная: все доски делятся на два класса эквивалентности: с нечётным количеством инверсий и с чётным, и есть так кой математический прикол про то, что класс решабельных досок совпадает либо с чётным классом, либо с нечётным, так что если одновременно решать данную по условию доску и доску, полученную свапом каких-то двух элементов (то есть с другой чётностью количества инверсий), то одна из них обязательно решится и тогда можно будет либо выдать решение, либо сказать, что извините, доска нерешабельная

можно сделать смешной цикл, с переменной, которая хранит текущую обрабатываемую кучу, и свапать её значение с кучей для доски другой чётности, и это бы выглядело даже прикольно, если бы в тупой джаве можно было сделать метод, который бы делал свап
PoppyFanboy !!cYLydiSRQA 385 336717
мм
ну, это уже относительно старое

https://youtu.be/swqbfMh467A
https://youtu.be/ZFI7xoIHt-Q

с бинарной кучей получилось вот это
https://www.ideone.com/ETkMD0
(итератор там для вида, только, чтобы никто не ругался на нереализованный iterator())
не знаю вот только, как быть, когда добавляются несколько элементов сразу, тут я вычисляю двоичный логарифм за константу времени через битовые операции, чтобы определить размер массива, в который надо будет впихивать элементы

-

с d-арной кучей получилось вот это
https://www.ideone.com/ps4Xb1
тут закономерно возникла проблема с тем, что надо в смысле я не знаю, как по-другому, поэтому "надо" вычислять логарифм по основанию d, а его так же просто как по основанию 2 не вычислишь

я видел в интернете варианты сначала вычислить очень-очень приближённо через какие-то битовые операции, а потом приблизить решение методом ньютона, но это мне показалось каким-то оверкиллом с учётом того, что тут сложность вычисления логарифма не влияет на сложность ре-аллокаций, так что я оставил вариант с вычислением логарифма в тупую, и немножко оптимизировал это всё для добавлений/удалений одного элемента: в этих случаях размер массива просто либо умножается на d и делается плюс один, либо делится на d, соответственно

а ещё я сейчас подумал, что, наверное, надо было увеличивать/уменьшать массивы так же, как обычно, то есть не сразу выделять массив из d^0 + d^1 + d^2 + ... + d^h = (d^(h + 1) - 1) / (d - 1) элементов, а каждый раз выделять в полтора раза больше, чем требуется?

-

randomized meldable heap - действительно, при кольно, и очень легко реализуется

-

heap sort - при кольно, нестабильно, работает лучше на d-арной куче, потому что тогда будет выполняться меньше длинных прыжков, и это перевешивает то, что в d-арной куче утапливание элемента делается дороже, чем в бинарной куче (за O(d · log_d N))

при этом её можно немного оптимизировать, если при сортировке не сразу утапливать элемент до своего места, а топить его сначала до самого дна, экономя на каждом уровне одно сравнение, а потом поднимать его наверх до своего места, тратя одно сэкономленное сравнение на каждом уровне, и надеяться, что оно окупится

ещё немного неочевидно то, что в этой сортировке куча на массиве строится за линейное время, если утапливать элементы кучи вниз, начиная с самого последнего. как бы очевидно то, что это лучше, чем поднимать их вверх, начиная с первых элементов кучи (в первом случае работаем много на верхних уровнях, где мало элементов, во втором случае - работаем много на нижних уровнях, где и элементов много), но почему ето так - не совсем очевидно. ну и, чтобы убедиться в этом, надо посчитать просто сумму

> sum_{h = 1}^{floor(lgN)} ceil(N / 2^{h + 1}) · O(h)


где ceil(N / 2^{h + 1}) - это количество элементов в куче на каждом уровне

это будет количество обменов, необходимых для построения кучи, соответственно, сравнений, будет просто в два раза больше

-

чтобы найти все элементы в массиве длины N, которые встречаются чаще, чем N/10 раз, достаточно пройтись по всем кандидатам на такие элементы: если отсортировать массив и условно разделить его на 10 примерно одинаковых по длине интервалов, то можно будет легко увидеть, что жирные куски повторяющихся элементов, которые нас интересуют, будут либо находиться ровно в каком-нибудь из выделенных интервалов, либо будут залезать на другие интервалы, но, в общем, в любом случае, они будут лежать в том числе рядом с правой границей какого-нибудь интервала я отлично объясняю короче, надо просто пройтись по (k · N / 10) - ым по величине элементам и проверить для каждого из них, не попадается ли он достаточное число раз в массиве

-

медианная кучаа, я бы сам не догадался

>надо поддерживать набор чисел и уметь доставать из него медиану за константу времени


идея простая - в max heap храним числа меньшие текущей медианы, в min heap - числа большие медианы. при этом при добавлениях поддерживаем разницу в размерах куч максимум в один элемент, если перевешивает, то перебрасываем элементы из одной кучи в другую. медианой будет либо топовый элемент из большей кучи, либо, если кучи одинакового размера, то берём просто среднее топовых элементов

-

таксикаб числа (ну или что-то близкое к ним, я не гуглил), я бы сам не догадался

>надо найти все числа меньше N, для которых есть как минимум два различных разложения a^3 + b^3 = c^3 + d^3 = число


наивная реализация - вычислить все суммы кубов, из которых потенциально можно составить число меньшее N, отсортировать их и найти дубликаты. это O(N^2 · lgN) времени, что, видимо, не так страшно, но O(N^2) памяти, а это уже не очень при кольно

(ну, о том, что не нужно повторно перебирать a^3 + b^3 и b^3 + a^3 и что надо идти только до floor(N^(1/3)) я молччу, это очевидно)

умная реализация - перебор кучей: начинаем с кучи, в которой изначально находятся пары (1, 1), ..., (M, M), то есть это элементы с главной диагонали, если представить перебираемые пары как матрицу, в узлах которой находятся суммы кубов индексов. куча ориентирована по сумме кубов чисел из пары, а если сумма кубов двух каких-то элементов одинаковая, то тут уже просто смотрим на первое число в паре

так вотт, если посмотреть на ту матрицу, про которую я говорил, то можно заметить, что в ней значения сумм кубов по строкам и столбцам отсортированы по возрастанию (что как бы очевидно), так что когда мы достаём минимальную пару из кучи, то следующей по величине парой будет либо та, что в матрице ниже на одну клетку, либо какая-то пара из некст столбца

так что мы можем изначально забьём кучу парами (1, 1), ..., (M, M), то дальше мы можем просто доставать оттуда минимальную пару, а вместо неё ставить пару, которая находится на одну клетку ниже, и, таким образом, мы одновременно при переборе будем хранить только M пар

короче, вотт, там, правда, первая пара (0, 0) лишняя, но мне лень фиксить
https://www.ideone.com/1SqVXq

-

ещё я посмотрел (списал, показывать не буду) на штуку, которая решает головоломку-пятнашки, там используется крутая штука, которая называется A star search algorithm, основная суть в том, что у нас есть доски с циферками и мы хотим за как можно меньшее число шагов уменьшить расстояние между изначальной доской и той, у которой циферки расставлены по порядку

расстояние между досками (manhattan distance) вычисляется как сумма расстояний между каждой плиткой и тем местом, на котором она должна стоять (таксикаб метрика), то есть это по сути минимальное (скорее всего, недостижимое) количество шагов, которое надо сделать, чтобы поставить все элементы на свои места. добавляем к этому расстоянию число шагов, проделанных от изначальной доски и получаем значение (в референсе, по которому я решал задачку оно было обозначено как manhattan prority), по которому мы будем упорядочивать доски-search-nodes в куче

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

подводные камени: топтание на месте (когда плитка двигается сначала в одну сторону, а потом возвращается на место), конечно, никак не влияет на правильность результата, потому что всё учтено в nahmahttan priority, но всё же занимают место и, скорее всего, немного убивают производительность, так что их можно заавоидить, если хранить то, как выглядела предыдущая доска, и не допускать рождение повторяющихся досок

что если доска нерешабельная: все доски делятся на два класса эквивалентности: с нечётным количеством инверсий и с чётным, и есть так кой математический прикол про то, что класс решабельных досок совпадает либо с чётным классом, либо с нечётным, так что если одновременно решать данную по условию доску и доску, полученную свапом каких-то двух элементов (то есть с другой чётностью количества инверсий), то одна из них обязательно решится и тогда можно будет либо выдать решение, либо сказать, что извините, доска нерешабельная

можно сделать смешной цикл, с переменной, которая хранит текущую обрабатываемую кучу, и свапать её значение с кучей для доски другой чётности, и это бы выглядело даже прикольно, если бы в тупой джаве можно было сделать метод, который бы делал свап
PoppyFanboy !!cYLydiSRQA 386 336730
https://youtu.be/8Z3TbMBfDM0
https://youtu.be/UVadfCxNnoY

но, на самом деле, важно не это, а важно то, что, во-первых, я опять ничего не делал, во-вторых, я потратил слишком много времени на одну тупую штуку, тупость которой я постараюсь описать в нескольких словах ниже, но не надеюсь передать то, насколько это уродливое и вообще мертворождённое чудище, даже на десятую долю процента, а, в-третьих, я снова ничего не делал

в общем, я хотел сделать маленькую штуку, которая бы в хтмл фаеле расставляла бы в нужных местах <span class="comment">, чтобы подсветить другим цветом комментарии в коде, и, это сделать было очень легко, но, внезапно выяснилось, что "//" встречается не только в коде, но и где-то внутри хтмльных тегов, так что моя штука немного руинила разметку

И вроде как всё в порядке, достаточно было просто ограничить редактирование файла только до содержимого тегов <code>, в которых находилось то, что мне надо было подсветить, но я почему-то решил, что будет немного при кольнее сделать штуку, которая целиком кушает хтмльный файл и разбирает его по тегам. У меня в голове это было максимально легко: просто идём по файлу, пушим в стек открывающиеся теги, если находим закрывающийся, то достаём всё из стека до соответствующего открывающегося, добавляем это внутрь тега, который только что закрыли, и пушим его обратно в стек. И оно и должно было быть просто, это же проще, чем разобрать арифметическое выражение в инфиксной нотации, но я как обычно всё заруинил.

Первая ошиббка - дегенеративный набор кастомных структур данных:

действующие лица:
HTMLTag у меня - это, ну, просто тег00а4шггшпаукцпрл поктмкому что да, вот почему бы не сделать такую штуку, просто какой-то тег, может быть, он парный, а может и нет, действительно, да. Он хранит у себя список из атрибутов тега (который я назвал параметрами тега, потому что мне было в тот момент лень гуглить, как они там правильно называются), умеет парсить и печатать сам себя через какой-то там стрим. Ещё он дополнительно хранит у себя то, на каком уровне вложенности он находится, надо ли его печатать на новой строке (это используется, чтобы сохранить более-менее оригинальный вид хтмл фаела, который парсится) и надо ли его выделять отступами при печати (это используется только для корректной печати содержимого <pre>).

HTMLPairedTag extends HTMLTag - это уже точно парный тег, содержит в себе список вложенных тегов. Когда в него запихиваются другие теги, он на всякий случай апдейтит их уровень вложенности, и это просто ужасно, потому что ему приходится проходиться по всему дереву, чтобы всем выставить правильную циферку.

HTMLNullTag extends HTMLTag - это уже совсем какой-то жуткий уродец, который на самом деле не тег, а содержимое тега (в общем, любой plain text), но оно всё равно у меня тЕг, потому что я подумал, что так будет проще, но, на самом деле, я просто не знаю, как сделать по-другому.

Проблема со всеми этими тремя штуками, в том, что везде, где надо хранить набор тегов, они хранятся как HTMLTag, так что в коде очень много уродливых проверок вида tag instanceof HTMLPairedTag или tag instanceof HTMLNullTag, за которыми следуют ещё более уродливые касты.

TagParameter - атрибут тега: пара name-value и тип кавычек, в которые обрамляется value.

HTMLDocument - это уже да, разделанный по тегам хтмл файл, в котором в теории должны были быть всякие уу очень уДоБнЫе методы для того, чтобы прикреплять css, вот выделять серым цветом комментарии внутри <code>, добавлять table of contents и делать прочие штуки.

Вторая ошиббка - пытаться работать с тем, что я сделал

Я написал этот глупый парсер, там всё легко и просто: фаел просто читается по строкам, в каждой строке по заданному паттерну ищутся теги, plain text между ними просто пушится в стек. Так что теперь можно было читать хтмл файлы и печатать потом их обратно.

И вроде как вот оно, теперь можно легко найти все теги <code>, пройдясь по дереву тегов, и сделать то, что надо было сделать изначально, но я вдруг понял, что для выделения однострочных комментариев мне нужно уметь определять, где находится конец строки. И то, что у меня есть избыточная структура документа, мне не помогает с этим прямо совсем. Поэтому пришлось сделать отвратительный костыль, который по заданному тегу создаёт двусвязное дерево тегов, и позволяет читать его построчно. Он травёрсит дерево до тех пор, пока не находит тег, который начинается на новой строке (информация об этом хранится в каждом теге), и тогда возвращает всё, что он там обошёл.

И это тоже не помогло: я внезапно понял, что содержимое тега <code> может быть уже отформатировано какими-то другими тегами, и, если я обработую вот такую строку:

><code>//...<span ...>...


вот так:

><code><span class="comment">//...<span ....>...</comment>


то я всё заруиню. Так что пришлось сделать так, чтобы та штука, которая проходится по тегам построчно, возвращало список всего того, что находится между тегами, чтобы я мог уже это всё обработать и получить вот такой результат:

><code><span class="comment">//...</span><span ...><span class="comment">...</span>



При этом вот то, что находилось между тегами - это был plain text, но теперь-то это не просто plain text, поэтому я не придумал ничего лучше, чем заново распарсить содержимое <code>, прочитав его построчно, чтобы получить то, что мне надо, только, чтобы <span class="comment"> был не просто частью плейн текста, а тегом в этом тупом дереве.

И оно вроде получилось, и оно вроде работает, но я в очередной раз столкнулся с тем, насколько всё плохо, когда понял, что теперь, если я дважды попытаюсь подсветить комментарии, то они повторно обернутся в тег <span class="comment">. Ну и тут я уже не знаю, как это решать: надо либо очень аккуратно отслеживать отца для каждого тега, либо по ходу того, как достаёшь plain text между тегами, ещё смотреть, не находится ли он внутри указанного тега. Ну или можно просто плюнуть на всё это и не подсвечивать содержимое <code>, если там внутри есть хотя бы один тег из класса comment.

Третья ошибка - не уметь работать с фаелами

Ну, в конечном итоге, я на всё забил и попытался хотя бы как-то довести это всё до конца, чтобы у меня был рабочий jar, который мог принимать на вход команды, но я умудрился заруинить работу с файлами и у меня нигде, кроме как в папке с проектом, эта штука не заработала. В этот момент я окончательно смирился с тем, что этот мусор никогда не будет работать.

Короче, да, вот, не хочу больше видеть эту груду мусора, всё-таки я должен бы куда-то вылить эти страдания с собственной башкой.
PoppyFanboy !!cYLydiSRQA 386 336730
https://youtu.be/8Z3TbMBfDM0
https://youtu.be/UVadfCxNnoY

но, на самом деле, важно не это, а важно то, что, во-первых, я опять ничего не делал, во-вторых, я потратил слишком много времени на одну тупую штуку, тупость которой я постараюсь описать в нескольких словах ниже, но не надеюсь передать то, насколько это уродливое и вообще мертворождённое чудище, даже на десятую долю процента, а, в-третьих, я снова ничего не делал

в общем, я хотел сделать маленькую штуку, которая бы в хтмл фаеле расставляла бы в нужных местах <span class="comment">, чтобы подсветить другим цветом комментарии в коде, и, это сделать было очень легко, но, внезапно выяснилось, что "//" встречается не только в коде, но и где-то внутри хтмльных тегов, так что моя штука немного руинила разметку

И вроде как всё в порядке, достаточно было просто ограничить редактирование файла только до содержимого тегов <code>, в которых находилось то, что мне надо было подсветить, но я почему-то решил, что будет немного при кольнее сделать штуку, которая целиком кушает хтмльный файл и разбирает его по тегам. У меня в голове это было максимально легко: просто идём по файлу, пушим в стек открывающиеся теги, если находим закрывающийся, то достаём всё из стека до соответствующего открывающегося, добавляем это внутрь тега, который только что закрыли, и пушим его обратно в стек. И оно и должно было быть просто, это же проще, чем разобрать арифметическое выражение в инфиксной нотации, но я как обычно всё заруинил.

Первая ошиббка - дегенеративный набор кастомных структур данных:

действующие лица:
HTMLTag у меня - это, ну, просто тег00а4шггшпаукцпрл поктмкому что да, вот почему бы не сделать такую штуку, просто какой-то тег, может быть, он парный, а может и нет, действительно, да. Он хранит у себя список из атрибутов тега (который я назвал параметрами тега, потому что мне было в тот момент лень гуглить, как они там правильно называются), умеет парсить и печатать сам себя через какой-то там стрим. Ещё он дополнительно хранит у себя то, на каком уровне вложенности он находится, надо ли его печатать на новой строке (это используется, чтобы сохранить более-менее оригинальный вид хтмл фаела, который парсится) и надо ли его выделять отступами при печати (это используется только для корректной печати содержимого <pre>).

HTMLPairedTag extends HTMLTag - это уже точно парный тег, содержит в себе список вложенных тегов. Когда в него запихиваются другие теги, он на всякий случай апдейтит их уровень вложенности, и это просто ужасно, потому что ему приходится проходиться по всему дереву, чтобы всем выставить правильную циферку.

HTMLNullTag extends HTMLTag - это уже совсем какой-то жуткий уродец, который на самом деле не тег, а содержимое тега (в общем, любой plain text), но оно всё равно у меня тЕг, потому что я подумал, что так будет проще, но, на самом деле, я просто не знаю, как сделать по-другому.

Проблема со всеми этими тремя штуками, в том, что везде, где надо хранить набор тегов, они хранятся как HTMLTag, так что в коде очень много уродливых проверок вида tag instanceof HTMLPairedTag или tag instanceof HTMLNullTag, за которыми следуют ещё более уродливые касты.

TagParameter - атрибут тега: пара name-value и тип кавычек, в которые обрамляется value.

HTMLDocument - это уже да, разделанный по тегам хтмл файл, в котором в теории должны были быть всякие уу очень уДоБнЫе методы для того, чтобы прикреплять css, вот выделять серым цветом комментарии внутри <code>, добавлять table of contents и делать прочие штуки.

Вторая ошиббка - пытаться работать с тем, что я сделал

Я написал этот глупый парсер, там всё легко и просто: фаел просто читается по строкам, в каждой строке по заданному паттерну ищутся теги, plain text между ними просто пушится в стек. Так что теперь можно было читать хтмл файлы и печатать потом их обратно.

И вроде как вот оно, теперь можно легко найти все теги <code>, пройдясь по дереву тегов, и сделать то, что надо было сделать изначально, но я вдруг понял, что для выделения однострочных комментариев мне нужно уметь определять, где находится конец строки. И то, что у меня есть избыточная структура документа, мне не помогает с этим прямо совсем. Поэтому пришлось сделать отвратительный костыль, который по заданному тегу создаёт двусвязное дерево тегов, и позволяет читать его построчно. Он травёрсит дерево до тех пор, пока не находит тег, который начинается на новой строке (информация об этом хранится в каждом теге), и тогда возвращает всё, что он там обошёл.

И это тоже не помогло: я внезапно понял, что содержимое тега <code> может быть уже отформатировано какими-то другими тегами, и, если я обработую вот такую строку:

><code>//...<span ...>...


вот так:

><code><span class="comment">//...<span ....>...</comment>


то я всё заруиню. Так что пришлось сделать так, чтобы та штука, которая проходится по тегам построчно, возвращало список всего того, что находится между тегами, чтобы я мог уже это всё обработать и получить вот такой результат:

><code><span class="comment">//...</span><span ...><span class="comment">...</span>



При этом вот то, что находилось между тегами - это был plain text, но теперь-то это не просто plain text, поэтому я не придумал ничего лучше, чем заново распарсить содержимое <code>, прочитав его построчно, чтобы получить то, что мне надо, только, чтобы <span class="comment"> был не просто частью плейн текста, а тегом в этом тупом дереве.

И оно вроде получилось, и оно вроде работает, но я в очередной раз столкнулся с тем, насколько всё плохо, когда понял, что теперь, если я дважды попытаюсь подсветить комментарии, то они повторно обернутся в тег <span class="comment">. Ну и тут я уже не знаю, как это решать: надо либо очень аккуратно отслеживать отца для каждого тега, либо по ходу того, как достаёшь plain text между тегами, ещё смотреть, не находится ли он внутри указанного тега. Ну или можно просто плюнуть на всё это и не подсвечивать содержимое <code>, если там внутри есть хотя бы один тег из класса comment.

Третья ошибка - не уметь работать с фаелами

Ну, в конечном итоге, я на всё забил и попытался хотя бы как-то довести это всё до конца, чтобы у меня был рабочий jar, который мог принимать на вход команды, но я умудрился заруинить работу с файлами и у меня нигде, кроме как в папке с проектом, эта штука не заработала. В этот момент я окончательно смирился с тем, что этот мусор никогда не будет работать.

Короче, да, вот, не хочу больше видеть эту груду мусора, всё-таки я должен бы куда-то вылить эти страдания с собственной башкой.
78681154p1.jpg265 Кб, 1200x848
Рируру !!gYmpHned/k 387 336814
>>336717

>тратя одно сэкономленное сравнение на каждом уровне, и надеяться, что оно окупится


А оно окупится, потому что мы топим не полностью произвольный элемент, а только что достанный с самого дна.

>работает лучше на d-арной куче, потому что тогда будет выполняться меньше длинных прыжков, и это перевешивает то, что в d-арной куче утапливание элемента делается дороже, чем в бинарной куче (за O(d · log_d N))


Неправда.
Математически оптимальной, а именно минимизирующей количество сравнений при утоплении — d × logdN, является куча с арностью d, равной числу e (по тому же принципу, что google:оптимальное основание системы счисления). Ближайшая к ней целая арность — 3, не 2.

В реализации же утопления на 4-куче количество сравнений будет РАВНО количеству сравнений на 2-куче: так совпало, что 22 = 4, поэтому с удвоением ёмкости узла 2→4 уполовинивается высота кучи log2N→log4N. Однако на практике 4-куча всегда быстрее 2-кучи, и это обусловлено в первую очередь её дружественностью к кэшу. Пока d × sizeof(item) ≤ cache_line_size, где sizeof(item) — обычно 4 (int или указатель на 32-битной платформе) или 8 (long или указатель на 64-битной платформе), а cache_line_size — обычно 64, прыжок на следующий уровень будет генерировать только один промах L1-кэша, таким образом, утопление в 4-куче выполняет столько же сравнений, сколько в 2-куче, но с уполовиненным числом L1-промахов, ну и присваиваний/обменов. И да, здесь снова не обязательно просвапывать элемент до финиша, оптимальнее сдвинуть всё на пути и присвоить исходный элемент в итоговую позицию, иными словами, вместо e a b c → a e b c → a b e c → a b c e делать (item = e); _ a b c → a a b c → a b b c → a b c c → a b c e.

>>336730

>HTMLTag


>HTMLPairedTag extends HTMLTag


Забудьте про перспективу и прямые линии наследование, пожалуйста, навсегда если достаточно полей.
PoppyFanboy !!cYLydiSRQA 388 337605
>>336814
♥♥♥

https://youtu.be/QadukC1cfw8
https://youtu.be/a_Q1yuiO0oA

Полистал главу про коллекции в джаве, но не долистал до конца. Там просто перечисляются релазиации всех основные thread-unsafe коллекции.

Внезапно узнал, что java.util.Stack наследуется от thread-safe версии списка на массиве java.util.Vector, так что в однопоточном приложении лучше пользоваться ArrayDeque вместо этого вот Stack, который вообще непонятно что делает тут, видимо, остался с каких-то старых версий. Я так остановился на этом, потому что вроде много куда пихал Stack и никак не думал, что это не самое лучшее решение.

Ещё там были какие-то общие слова про все вот эти списки, очереди, HashSet, TreeSet (которая реализует и SortedSet, и NavigableSet, второй отличается дополнительной возможностью достать элемент с ближайшим значением), для последних двух я вот всё ещё так и не посмотрел реализации, и не сделал их сам. Для map'ов там, оказывается, есть специальные методы, которые применяют всякие функции к каким-то парам маппинга, и это вроде как даже выглядит не так плохо с лямбдами:

> map.merge(word, 1, Integer::sum);


чтобы увеличить на 1 количество вхождений какого-то слова в маппинге (например) вместо

> map.put(word, map.getOrDefault(word, 0) + 1);


(правда, первый вариант выглядит всё равно менее понятным)
В merge там передаётся функция с двумя аргументами, которая меняет старое значение по ключу word на Integer.sum(1, oldValue). А если никакое значение ещё не было ассоциировано с word, то word тупо ассоциируется с единицей.

Не знал про существование map view'ов. Сами по себе map'ы коллекциями не являются согласно API, но могут вернуть множество ключей, множество значений и множество пар соответствий (Map.Entry<K, V>). При этом они изменяются вместе с map'ом, от которого они родились. Единственное - нельзя добавлять новые ключи и новые значения в отдельные view для ключей и коллекций (если честно, я забыл проверить, что при этом происходит, наверняка выпадает что-то вроде UnsupportedOperationException). Map view с парами ключ-значение, кстати, тоже выбрасывает исключение при попытке туда что-нибудь засунуть, не вполне очевидно, почему (ну, я, конечно, понимаю, что пытаться так делать - это тупо, но почему нельзя?) И вообще создать самому entry для этого библиотечного map view невозможно: всё, что есть - это абстрактный Map.Entry, который нельзя инстанциировать.

Ну, и как обычно, итераторы по этим map view'ам имеют fail-fast поведение: умирают, если кто-то пытается модифицировать map, от которого они родились, или коллекции, по которым они итерируют.

-

Вот, на самом деле, то про что я совсем не знал - это про WeakHashMap и про вот эти модные слабые ссылки в целом. У меня такое ощущение, что я где-то что-то такое уже слышал, но никогда не читал нормально про это.

Суть в том, что существуют ссылки разной степени слабости на объекты и в зависимости от того, доступен ли объект через последовательность достаточно сильных ссылок (в итоге то, насколько reachable будет объект определяется самой слабой ссылкой в самой короткой цепочке), объект будет по-разному обрабатываться GC'ом.

Strong references - самые сильные ссылки, обычно используются именно они, GC ничего не может сделать с strongly reachable объектами. Soft references - их GC обычно не трогает, но, если не хватает памяти, то он освобождает память от softly reachable объектов (в том числе гарантируется, что прежде чем выбросится ошибка о переполнении памяти, будут вычищены все объекты с soft ссылками). Weak references - как только GC обнаруживает, что у объекта есть только weak ссылки, то он начинает заниматься удалением этого объекта. Phantom references стоят немного в стороне от других ссылок в плане их юзабельности, но объекты с фантомными ссылками GC тоже вроде как удаляет как только, так сразу.

Вообще, как я понял, на деле сами ссылки не то чтобы чем-то особенным отличаются: SoftReference, WeakReference, PhantomReference - это всё обычные классы, которые содержат в себе приватное поле, ссылающееся на какой-то объект. Весь при кол в том, как GC обрабатывает объекты этих классов: если он находит weakly reachable объект, то он очищает вот это внутреннее поле внутри всех объектов-ссылок, которые ссылаются на этот объект, тем самым делая его unreachable и пригодным для финализации и удаления.

Помимо самих ссылок в пакете есть ещё ReferenceQueue, которая представляет из себя своего рода список уведомлений о том, что GC определил, что какие-то объекты стали слишком слабо доступными, чтобы они оставались в памяти. RQ передаётся при создании ссылки и она помещается в случае с weak/soft reference после того, как GC задетектил, что объект weakly reachable / softly reachable и мало памяти, и в случае с phantom references, если для объекта был вызван финализатор и он был удалён. Собственно, это единственное предназначение фантомных ссылок - определять, когда объект был полностью удалён из памяти (выполнение finalize() ещё ни о чём не говорит, потому что внутри finalize() могла быть создана strong ссылка на объект и он бы продолжил жить).

пример того, как weak reference добавляется в RQ при живом объекте,
а phantom reference ждёт до последнего, потому что там вроде как минимум требуется несколько циклов GC, чтобы фантомная ссылка была добавлена в RQ
https://www.ideone.com/27AlHW

Вот уже вместе с RQ можно делать всякие интересные штуки. Например, WeakHashMap, которая обёртывает ключи в слабые ссылки, так что если на ключ теряется ссылка, то weak ссылка на этот ключ добавляется в RQ и при следующем взаимодействии с WeakHashMap (я думаю, там нет отдельного потока, который циклично проверяет, не попало ли что-нибудь в RQ) соответствующее утерянному ключу значение будет удалено из хеш-таблицы. При этом такая хеш-таблица не годится в качестве кеша (мы следим за ключами, а не за хранимыми объектами). А ещё, если в хранимых объектах будет strong ссылка на ключ, то всё сломается. Насколько я понял, такая штука называется Canonicalized Mapping.

Ещё weak references, видимо, можно использовать при реализации string interning, чтобы не хранить более не используемые строки. Кстати, только вот сейчас узнал, что это такое, а ещё узнал о том, что конкретно в джаве все константые строки уже интернированы по умолчанию, так что даже вот это "2" + "2" == "22" должно вернуть true.

С помощью soft references можно делать кеши, а с помощью фантомных ссылок можно удостовериваться в том, что объект был удалён из памяти (это может потребоваться, например, если мы работаем с какими-то большими объектами и хотели бы загружать в память следующий большой объект только после того, как выгрузили предыдущий).

И, кстати, вот ещё нашёл статью про то, почему finalize() - это плохо, как работает GC и как с помощью слабых ссылок можно обойтись без финализатора при необходимости освободить ресурсы.
https://www.oracle.com/technical-resources/articles/javase/finalization.html
Основная идея там в том, что если есть какой-то объект (Image), с которым сопряжён какой-то ресурс, то ссылка на ресурс поддерживается (в том числе) в WeakReference<Image>. И ещё одновременно с этим в статике поддерживаются RQ и список из weak ссылок. Последний нужен для того, чтобы объекты Image оставались weakly reachable и в конечном итоге попали бы в RQ, когда на них не останется достаточно сильных ссылок. Когда ссылка попадает в RQ, мы можем просто достать из неё ссылку на ресурс и освободить его. Причём всё это в теории должно занять меньше времени, чем если бы мы сидели и ждали, пока GC сначала определит, что объект unreachable, добавит его в очередь на финализацию и потом уже спустя некоторое время выполнится finalize().

Проверка же RQ на наличие чего-либо может делаться либо неограниченное число раз в отдельном потоке (у RQ есть метод remove(), который блочится до тех пор, пока в RQ что-то не добавится), либо ограниченное количество раз перед чем-то, что часто вызывается.

если честно, я так и не знаю, во всём ли я тут прав, потому что в интернете по этой теме я нашёл только несколько статей разной степени вшивости, а javadoc слишком слабо раскрывает эту тему

-

А ещё в книжке было про linked hash sets и maps, которые за относительно небольшую плату делают возможным травёрсить элементы в том порядке, в котором они были добавлены. А для LinkedHashSet ещё есть возможность обходить элементы в порядке того, насколько давно их трогали, что может быть, видимо, полезно при создании кешей.

И в конце там ещё были EnumSet - множества enum'ов на битовых полях, EnumMap - отображения из enum'ов в другие объекты на массивах (видимо, там просто два массива одинаковой длины: keys и objects), и identity hash maps - особые хеш-таблицы, которые вместо equals(Object) используют "==", и используют хеш-функцию, определённую в классе Object (не знаю, для чего такая штука используется).
PoppyFanboy !!cYLydiSRQA 388 337605
>>336814
♥♥♥

https://youtu.be/QadukC1cfw8
https://youtu.be/a_Q1yuiO0oA

Полистал главу про коллекции в джаве, но не долистал до конца. Там просто перечисляются релазиации всех основные thread-unsafe коллекции.

Внезапно узнал, что java.util.Stack наследуется от thread-safe версии списка на массиве java.util.Vector, так что в однопоточном приложении лучше пользоваться ArrayDeque вместо этого вот Stack, который вообще непонятно что делает тут, видимо, остался с каких-то старых версий. Я так остановился на этом, потому что вроде много куда пихал Stack и никак не думал, что это не самое лучшее решение.

Ещё там были какие-то общие слова про все вот эти списки, очереди, HashSet, TreeSet (которая реализует и SortedSet, и NavigableSet, второй отличается дополнительной возможностью достать элемент с ближайшим значением), для последних двух я вот всё ещё так и не посмотрел реализации, и не сделал их сам. Для map'ов там, оказывается, есть специальные методы, которые применяют всякие функции к каким-то парам маппинга, и это вроде как даже выглядит не так плохо с лямбдами:

> map.merge(word, 1, Integer::sum);


чтобы увеличить на 1 количество вхождений какого-то слова в маппинге (например) вместо

> map.put(word, map.getOrDefault(word, 0) + 1);


(правда, первый вариант выглядит всё равно менее понятным)
В merge там передаётся функция с двумя аргументами, которая меняет старое значение по ключу word на Integer.sum(1, oldValue). А если никакое значение ещё не было ассоциировано с word, то word тупо ассоциируется с единицей.

Не знал про существование map view'ов. Сами по себе map'ы коллекциями не являются согласно API, но могут вернуть множество ключей, множество значений и множество пар соответствий (Map.Entry<K, V>). При этом они изменяются вместе с map'ом, от которого они родились. Единственное - нельзя добавлять новые ключи и новые значения в отдельные view для ключей и коллекций (если честно, я забыл проверить, что при этом происходит, наверняка выпадает что-то вроде UnsupportedOperationException). Map view с парами ключ-значение, кстати, тоже выбрасывает исключение при попытке туда что-нибудь засунуть, не вполне очевидно, почему (ну, я, конечно, понимаю, что пытаться так делать - это тупо, но почему нельзя?) И вообще создать самому entry для этого библиотечного map view невозможно: всё, что есть - это абстрактный Map.Entry, который нельзя инстанциировать.

Ну, и как обычно, итераторы по этим map view'ам имеют fail-fast поведение: умирают, если кто-то пытается модифицировать map, от которого они родились, или коллекции, по которым они итерируют.

-

Вот, на самом деле, то про что я совсем не знал - это про WeakHashMap и про вот эти модные слабые ссылки в целом. У меня такое ощущение, что я где-то что-то такое уже слышал, но никогда не читал нормально про это.

Суть в том, что существуют ссылки разной степени слабости на объекты и в зависимости от того, доступен ли объект через последовательность достаточно сильных ссылок (в итоге то, насколько reachable будет объект определяется самой слабой ссылкой в самой короткой цепочке), объект будет по-разному обрабатываться GC'ом.

Strong references - самые сильные ссылки, обычно используются именно они, GC ничего не может сделать с strongly reachable объектами. Soft references - их GC обычно не трогает, но, если не хватает памяти, то он освобождает память от softly reachable объектов (в том числе гарантируется, что прежде чем выбросится ошибка о переполнении памяти, будут вычищены все объекты с soft ссылками). Weak references - как только GC обнаруживает, что у объекта есть только weak ссылки, то он начинает заниматься удалением этого объекта. Phantom references стоят немного в стороне от других ссылок в плане их юзабельности, но объекты с фантомными ссылками GC тоже вроде как удаляет как только, так сразу.

Вообще, как я понял, на деле сами ссылки не то чтобы чем-то особенным отличаются: SoftReference, WeakReference, PhantomReference - это всё обычные классы, которые содержат в себе приватное поле, ссылающееся на какой-то объект. Весь при кол в том, как GC обрабатывает объекты этих классов: если он находит weakly reachable объект, то он очищает вот это внутреннее поле внутри всех объектов-ссылок, которые ссылаются на этот объект, тем самым делая его unreachable и пригодным для финализации и удаления.

Помимо самих ссылок в пакете есть ещё ReferenceQueue, которая представляет из себя своего рода список уведомлений о том, что GC определил, что какие-то объекты стали слишком слабо доступными, чтобы они оставались в памяти. RQ передаётся при создании ссылки и она помещается в случае с weak/soft reference после того, как GC задетектил, что объект weakly reachable / softly reachable и мало памяти, и в случае с phantom references, если для объекта был вызван финализатор и он был удалён. Собственно, это единственное предназначение фантомных ссылок - определять, когда объект был полностью удалён из памяти (выполнение finalize() ещё ни о чём не говорит, потому что внутри finalize() могла быть создана strong ссылка на объект и он бы продолжил жить).

пример того, как weak reference добавляется в RQ при живом объекте,
а phantom reference ждёт до последнего, потому что там вроде как минимум требуется несколько циклов GC, чтобы фантомная ссылка была добавлена в RQ
https://www.ideone.com/27AlHW

Вот уже вместе с RQ можно делать всякие интересные штуки. Например, WeakHashMap, которая обёртывает ключи в слабые ссылки, так что если на ключ теряется ссылка, то weak ссылка на этот ключ добавляется в RQ и при следующем взаимодействии с WeakHashMap (я думаю, там нет отдельного потока, который циклично проверяет, не попало ли что-нибудь в RQ) соответствующее утерянному ключу значение будет удалено из хеш-таблицы. При этом такая хеш-таблица не годится в качестве кеша (мы следим за ключами, а не за хранимыми объектами). А ещё, если в хранимых объектах будет strong ссылка на ключ, то всё сломается. Насколько я понял, такая штука называется Canonicalized Mapping.

Ещё weak references, видимо, можно использовать при реализации string interning, чтобы не хранить более не используемые строки. Кстати, только вот сейчас узнал, что это такое, а ещё узнал о том, что конкретно в джаве все константые строки уже интернированы по умолчанию, так что даже вот это "2" + "2" == "22" должно вернуть true.

С помощью soft references можно делать кеши, а с помощью фантомных ссылок можно удостовериваться в том, что объект был удалён из памяти (это может потребоваться, например, если мы работаем с какими-то большими объектами и хотели бы загружать в память следующий большой объект только после того, как выгрузили предыдущий).

И, кстати, вот ещё нашёл статью про то, почему finalize() - это плохо, как работает GC и как с помощью слабых ссылок можно обойтись без финализатора при необходимости освободить ресурсы.
https://www.oracle.com/technical-resources/articles/javase/finalization.html
Основная идея там в том, что если есть какой-то объект (Image), с которым сопряжён какой-то ресурс, то ссылка на ресурс поддерживается (в том числе) в WeakReference<Image>. И ещё одновременно с этим в статике поддерживаются RQ и список из weak ссылок. Последний нужен для того, чтобы объекты Image оставались weakly reachable и в конечном итоге попали бы в RQ, когда на них не останется достаточно сильных ссылок. Когда ссылка попадает в RQ, мы можем просто достать из неё ссылку на ресурс и освободить его. Причём всё это в теории должно занять меньше времени, чем если бы мы сидели и ждали, пока GC сначала определит, что объект unreachable, добавит его в очередь на финализацию и потом уже спустя некоторое время выполнится finalize().

Проверка же RQ на наличие чего-либо может делаться либо неограниченное число раз в отдельном потоке (у RQ есть метод remove(), который блочится до тех пор, пока в RQ что-то не добавится), либо ограниченное количество раз перед чем-то, что часто вызывается.

если честно, я так и не знаю, во всём ли я тут прав, потому что в интернете по этой теме я нашёл только несколько статей разной степени вшивости, а javadoc слишком слабо раскрывает эту тему

-

А ещё в книжке было про linked hash sets и maps, которые за относительно небольшую плату делают возможным травёрсить элементы в том порядке, в котором они были добавлены. А для LinkedHashSet ещё есть возможность обходить элементы в порядке того, насколько давно их трогали, что может быть, видимо, полезно при создании кешей.

И в конце там ещё были EnumSet - множества enum'ов на битовых полях, EnumMap - отображения из enum'ов в другие объекты на массивах (видимо, там просто два массива одинаковой длины: keys и objects), и identity hash maps - особые хеш-таблицы, которые вместо equals(Object) используют "==", и используют хеш-функцию, определённую в классе Object (не знаю, для чего такая штука используется).
Top o Nerae 2! Diebuster 1.webm2,3 Мб, webm,
1280x720, 0:14
Рируру !!gYmpHned/k 389 337735
>>337605

>А ещё, если в хранимых объектах будет strong ссылка на ключ, то всё сломается.


ГЬЯ-ХЬЯ-Ы-Ы-ИГО-ГОХ-ХАХАХ! Они просто лохи ебать.

Проблема с сильными ссылками на ключи из значений давно имеет решение под названием «эфемерные ссылки» (https://en.wikipedia.org/wiki/Ephemeron). Одним из первопроходцев, по-видимому, был Haskell в 1999, а в Lua, откуда я про это изначально и узнал, оно абсолютно невидимо для пользователя, без внешних изменений в финализации и подобном, адаптировано в 2011: http://www.inf.puc-rio.br/~roberto/docs/ry08-06.pdf.

В свете вышесказанного, вот с этого вот https://bugs.openjdk.java.net/browse/JDK-8172476 орнул в голосину: если решение с эфемерными ссылками вообще будет реализовано, то через новый класс ссылки Ephemeron<K, V> extends Reference<K>, тычущий пользователю в ебало.

И после этого эти лошары утверждают мне, что простой finalize — это плохо, а вот те статические очереди ссылок на абстрактные фабрики адаптеров, которые потом нужно придумывать, откуда поллить — норм.

Ну да, ну да.

Оппортунистически дёргая поллинг без блокировки, пользователь переизобретает sweep-проход инкрементального GC, традиционно точно так же распыляемый на много мелких шажков, привязанных к аллокациям. Ведь настоящий GC sweep'ал слева направо, а надо справа налево и мелькнуть панцушотом в камеру.

Дёргая поллинг с блокировкой в отдельном потоке, пользователь переизобретает зачем-то спящий 99,999% своей жизни finalizer thread, ведь существующий был недостаточно хорош, и невыспавшимся к тому же, для финализации его прекрасных объектов.
Тред утонул или удален.
Это копия, сохраненная 31 июля 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /dr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски