Неплохо бы поиграться и с форматами дат. Например, если вся таблица называется «Платежи 2025», то повторять год в дате не обязательно.
До того отнюдь не прекрасного момента когда по какой-то причине дата окажется 17.12.2024, и бухгалтер поставит всех на уши в попытке найти платёж от 17.12.2025.
Я бы сказал так: если скрываете данные для красоты в некотором предположении, сделайте условное форматирование, которое подсветит вырвиглазным красным ячейки где это предположение нарушено. Если не знаете как это сделать - не скрывайте данные, эти грабли бьют по лбу редко, но больно.
Баянист наверняка сможет за краткое время освоить гитару, но восхитительный фламенко будет ему недоступен.
Вопрос в том, каковы реальные требования. И из вакансии они очень плохо считываются - то ли людям нужен относительно приличный гитарист (понятно что чем лучше тем лучше, но "приличного" достаточно), то ли нужно с первого дня играть техничный спид-металл.
Я бы оценивал что и сколько нужно переучивать под нужды проекта, и "сменить язык" здесь не всегда самый большой барьер. Питонист в средний C++ проект - в общем случае так себе идея, но переход C# -> Go выглядит не сильно хуже чем "в проекте активно используются CGo-вызовы внешних библиотек, нужна привычка правильно расставлять defer" (которой у человека с номинальным опытом Go всё ещё может не быть).
Да, принято, запутался в терминах. Человек из Anthropic почти наверняка имел в виду "Super AI" (или его синонимы, любой удачный термин в этой области быстро захватывают маркетологи и начинают рассказывать что это-де они уже продают).
Нет, я включаю в превосходит "производит строго лучший результат при строго меньшем расходовании электроэнергии, времени, площади земной поверхности и иных ограниченных ресурсов".
Да, я согласен что планетарный оракул, способный ответить не более чем на 8000 запросов в сутки и не масштабируемый из-за прожорливости, даже если он на них отвечает кратно лучше людей, сам по себе такой ситуации не создаст (но его можно спросить "как сделать тебя более энергоэффективным?"...).
выкладывает графики не имеющие физического смысла, на основании которых делает глубокие выводы
Почему вам кажется что эти графики - основание, а не иллюстрация?
А то у меня периодически бывают споры с людьми, которые берут иллюстрацию к ОТО "пространство - это эластичный лист, который продавливается шарами с массой" и спрашивают "и что, эти физики-тупицы так и не задались вопросом, а что тогда притягивает эти шары вниз?"
Экономический аргумент вообще-то грустный: "сильный ИИ", по определению термина, есть штука, которая превосходит почти всех людей в почти всех областях деятельности. Если мы считаем его достижимым в ближней перспективе (если!), то для большинства людей не будет существовать экономически оправданной занятости, за которую бы им платили деньги - обладатель денег может получить больше, потратив их на экземпляр ИИ. (Это, разумеется, подразумевает что "сильный ИИ" и "экономика-как-сегодня" вообще совместимы.)
Можно, но 1) при этом пострадает качество текста в целом (мы, возможно, хотели бы динамически подстраивать температуру под "важность" токена, но сейчас никто вроде не пытается это делать); 2) в менее очевидных случаях нулей не будет (скажем, при ответе "да"/"нет" на нетривиальный вопрос логиты обоих опций будут существенно ненулевыми).
Не решения, право доступа к работающей системе. Судя по тому что Роскомнадзор некоторое время назад выкатывал ТЗ "сделать свой СОРМ, с маджонгом и гейшами" (там были формулировки отчётливо из времён "трёхглавого закона", выглядит так что копипастили из ТЗ какой-то существующей реализации), я восстанавливаю что они попытались пробить себе доступ к СОРМ без судебных решений и были посланы.
Разработка способов блокировки, как и способов обхода этих самых блокировок, должно быть, очень технически сложные задачи
Не очень. Точнее, некоторая идеальная блокировка, когда целью ставится написать простые в исполнении правила, которые практически блокируют конкретный протокол и при этом порождают мало проблем в остальном трафике - нетривиальная задача (если протокол специально маскируется под безобидные или под хрен-пойми-что), но, судя по результатам, решают не её.
Те кто хотят решать нетривиальные задачи анализа протоколов и идеологически не против государственного надзора за гражданами - идут работать над СОРМ (который, судя по доносящимся новостям, Роскомнадзоровцев послал к чёрту). Там решается более сложная задача - по совокупности трафика понять, что именно человек делал, без права вмешательства. (На всякий случай оговорка: я не говорю что фактическая перлюстрация трафика есть морально достойное занятие, я обсуждаю именно то, насколько технически интересные задачи при этом возникают.)
В условии нет нормального описания того, как именно работает команда сложения. Довольно очевидно, что предполагается что числа представлены в двоичной записи, машинное слово содержит сколько-то бит (а не трит или чего-то более экзотического), отрицательные числа представлены в дополнительном коде, при переполнении старшие биты тихо исчезают. Но всё это вообще-то надо сказать.
Ещё хуже что непонятно сочетание условия что есть только команда сложения (нет условных переходов, нет присваивания константы, нет call/ret, etc) и слов про "язык программирования".
Но поехали. Пусть у нас слова по 32 бита, и все команды сложения по одному слову (т.е. регистр команд IP при каждом сложении увеличивается на 1). Регистры обозначаем латинскими буквами и считаем что их сколько угодно, результат образуется в регистре по имени a.
1) Команда зануления. a := a + a x32.
2) Команда присваивания единицы. a := 0 b := 0 b := IP a := IP # повторить 32 раза a := a+b b := b+b
3) Очевидно, аналогично можно присвоить регистру любую константу: a := 0 b := 1 # пишем 42 = 00101010 b := b+b #0 a := a+b #1 b := b+b b := b+b #0 a := a+b #1 b := b+b b := b+b #0 a := a+b #1 (Важно заметить, что эта операция может быть дополнена инструкциями b := b+b и поэтому всегда может занимать ровно 0xa6 команд)
4а) Условные переходы. Пусть TP, FP и Ri - выделенные регистры, которые не используются никак иначе, и мы можем разместить команды по следующим адресам: # 0x00000000 IP := IP + FP # 0x80000000 R0 := 0x7fffff59 # вычисление использует R1 TP := TP + R0 IP := IP + TP
Тогда можно сделать команду перехода на инструкцию TP если a имеет значение 0x80000000 и FP если a имеет значение 0, JMP31 a: b := <дополнение (адреса текущей инструкции+2)> b := b+a IP := IP+b
4б) Команда перехода на TP если a имеет 1 в n-ном младшем бите и FP если он имеет в нём значение 0, при условии что все биты младше - нулевые, JMPn: a := a+a x(31-n), JMP31 a
4в) Команда перехода на TP если a не 0, на FP иначе, JNZ a: b := 0 b := b + FP FP := L1 JMP0 a L1: FP := L2 JMP1 a ... JMP30 a L31:FP := 0 FP := b + FP JMP31 a
5) Аналогично, побитовое обращение b: a := 0 c := 1 d := 0 d := d+b FP := L1 TP := L2 JMP0 d L1: a := a+c TP := L3 JMP0 c L2: e := 0xffffffff d := d+e L3:c := c+c FP := L4 TP := L5 L4: a := a+c L5: c := c+c ...
6) Вычитание, a := b - c: d := ~c e := 1 d := d + e a := b + d
Умножение и деление дальше вроде довольно очевидны.
Об именах переменных: не используйте что-либо вне ASCII-набора, даже если среда это позволяет (потому что нынче она, к сожалению, иногда позволяет). Отладка путаницы между int cap и int сар согреет вашу пятую точку как мало что другое.
Обращайте внимание на предупреждение "name XXX hides outer variable". C++ позволяет дублирование имён во вложенных блоках: int a = 2; for(int b = 0; b < a; ) { int a = 17; //... --a; } - но это почти никогда не идёт на пользу читаемости программы.
Если вы таки-используете глобальные переменные, называйте их уникальным образом, чтобы при чтении было очень хорошо видно, что вот здесь модифицируется глобальная переменная. Аналогичный совет относится к статическим переменным в функциях/методах и данным-членам классов.
Разделяйте имена переменных и функций (скажем, одни с маленькой буквы, другие с большой), потому что в C++ они умеют конфликтовать.
Либо не используйте макросы вообще, либо давайте им визуально отличные от всего остального имена (обычное соглашение - ИСПОЛЬЗОВАТЬ_КАПС). Имя макроса может быть распознано в совершенно любом контексте и результат способен порождать очень озадачивающие сообщения компилятора. (Да, старайтесь не включать windows.h по крайней мере в заголовочных файлах, эта падла определяет тонну макросов, иногда с очень неудачными именами.)
Называйте переменные и функции по тому, что они представляют, а не потому, как они реализованы: bool IsLessThanMinusTen(int number) {return number <= -10;} // плохо bool IsLethalHP(int hp) {return hp <= -10;} // лучше
Хотя имена могут быть слишком длинными, на современных мониторах "строка не влезает в экран" - отчётливый признак того, что вы делаете что-то кошмарно не то. Найдите в настройках среды визуализацию вертикальной линеечки и выставьте её на какую-нибудь разумную ширину. Есть люди которые рекомендуют 80, на мой вкус это бывает слишком коротко, я предпочитаю 120 (это удачно совпадает со строкой, которая не переносится в интерфейсе нашего gitlab при сравнении side-by-side).
Я знаю "канонический" ответ (круглую крышку в принципе невозможно уронить в люк который она закрывает), но он на мой вкус очень странный. Эти крышки и специально-то обратно на место у меня получается положить со второй-третьей попытки. Кроме того, крышка реалистичной толщины и с реалистичной "полочкой" не пролезет в собственное посадочное место даже будь она квадратной.
1) Они не всегда круглые, автор этого комментария воочию видел квадратные.
2) Они в общем случае не обязаны иметь форму колодца под ними (основание крышки всё равно делается отдельно).
3) Насколько я понимаю, в основном "так исторически сложилось" - есть налаженный процесс изготовления крышек, который сейчас или когда-то в прошлом было проще наладить для условно круглых и нет причины эту форму менять. (Я бы ожидал что сейчас их отливают, что позволяет сделать любую простую форму со сравнимой лёгкостью.)
Впервые (нет) на арене: нумерую все рациональные числа. Беру рациональное число p/q, записываю p и q в восьмеричной системе счисления, объединяю через 8. Например: 355/113 -> 0543 / 0161 -> 5438161. Всё, все рациональные числа получили по натуральному номеру и ещё прорва натуральных номеров осталась.
Нет никакого фундаментального отличия "природы" от "системы", по крайней мере на уровне онлайн-казино. Кидает шарик в рулетку живой крупье или генерируется следующий член гаммы блочного шифра - с точки зрения игрока это гипотезы с одним и тем же распределением исходов. То что абстрактное казино что-то "знает" - совершенно неважно, если миры в которых оно "знает" и "не знает" эмпирически неотличимы.
Вся «удача» — это разница в информационных правах: казино знает всё, игрок не знает ничего.
"Удача" казино в том, что а) математическое ожидание выигрыша для игрока отрицательно (именно для этого на рулетке есть сектор "зеро", к примеру); б) у казино на порядки больше капитала (cf. "задача о разорении игрока"). Разницы между генератором в который можно подглядеть и гипотетическим идеальным генератором, равно непредсказуемым для всех сторон, в смысле этих двух факторов нет.
Да, в принципе казино может мухлевать. Но для этого ему всё ещё совершенно не требуется предсказывать значение генератора, оно может просто заменить очередной выход генератора желаемым - как искусный крупье может намеренно выбросить "красное" на рулетке по заказу.
Уверен, что реальные казино используют более сложные генераторы, но суть не меняется: перед нами не случайность, а алгоритм, тщательно скрывающий свой порядок.
"Боле сложный генератор" может использовать источники истинной битовой энтропии (т.е. выдавать разные выходы в программно идентичных ситуациях).
Почти наверняка его реализация использует какой-нибудь современный блочный шифр, что делает
время и денежные ресурсы для того, чтобы определить выигрышную стратегию в игре
эффективным образом бесконечными: вы пытаетесь разработать стратегию взлома AES, и, спойлер, у вас это не получится.
Но проблема ли это?
идет игра, в игре есть два игрока: казино и пользователь
"Игрок" подразумевает, что казино принимает какие-то решения в ходе игры. Но в большинстве игр (не уверен что во всех, может есть странные исключения) крупье действует по жёстко заданному алгоритму. Иными словами, нет никакой разницы, знает или нет крупье при игре в блэкджек, что следующая карта в колоде - туз: он обязан взять карту в зависимости от текущих очков, даже если это было бы неоптимальное решение.
Математически, общая информация между поведением игрока и состоянием генератора равна нулю (потому что игрок не в состоянии установить состояние генератора), но и общая информация между поведением казино и состоянием генератора равна нулю (потому что у казино нет свободы поведения).
В теории игр это означает перевод игры из категории азартных, где есть элемент случайности, в категорию стратегических, где игра идет в соответствии с определёнными закономерностями
Это... очень базовый результат теории игр - что в детерминированных играх всё ещё могут быть оптимальны смешанные стратегии (т.е. оптимальная стратегия может включать действие "кинуть (свой собственный) кубик"). Обратно, даже если исходы игры есть лотереи, в VNM-предположениях нет фундаментальной разницы между лотереей с вероятностью некоторого исхода 1 и лотереей, у которой все исходы имеют вероятности <1.
(Отдельно, меня раздражает фраза "настоящая случайность": это понятие, в отличие от "вероятности при условии данных априорных гипотез", очень тяжело определить. Скажем, я сейчас взял две монетки и предлагаю вам угадать, орлом ли выпадет вторая. При этом первую я подбросил сразу, и если на ней выпал орёл - я уже подбросил вторую, а если решка - подброшу только после того как вы ответите. Является ли угадываемое вами значение при этом "по-настоящему случайным"?..)
Это франшиза (франчайз, кто как произносит), вполне стандартная штука. Её лучше видно для ресторанов (Rostic's / Il Patio это активно делали): сам считаешь аренду/найм/продукты/etc, ты получаешь известную вывеску в обмен на правила использования этой вывески. Для WB пространство собственных решений поуже, кажется в основном это про прикинуть отношение стоимости аренды к потоку через точку.
Так можно пронумеровать некоторые иррациональные числа (например: 2, √2, ³√2, ⁴√2, ...). Но у вас не получится составить последовательность, которая включила бы в себя все иррациональные числа (обычно доказывается через т.н. "диагональный аргумент" Кантора).
У меня довольно плохо с чувством "красиво" для таких рукомахательных объяснений, если что. Может получиться перегружено. Но, например:
Возьмём теперь точку (x₀, y₀) и проведём через неё прямую, её уравнение есть k(x-x₀) + (y-y₀) = 0 (исключим из рассмотрения вертикальные прямые). Если x₀ и y₀ рациональны, то при любом иррациональном k это уравнение не имеет иных рациональных решений (рациональное решение (x₁, y₁) позволило бы записать k = -(y₁-y₀)/(x₁-x₀)) - прямая с таким наклоном не пересекает вообще никаких иных рациональных точек. Если же x₀ (y₀) иррационально, то мы всегда можем провести вертикальную (соответственно горизонтальную) прямую через эту точку: x=x₀ (y=y₀), которая, очевидно, не имеет рациональных точек. Если хочется провести именно "наклонную" прямую, то можно поступить хитрее: взять a=x₀+y₀, b=2x₀+y₀. Поскольку x₀ = b-a, y₀= 2a-b, то по крайней мере одно из a, b иррационально. Пусть, для примера, это будет a. Возьмём k = 1 (соответственно 2 для иррационального b). Имеем kx+y = a, во всех рациональных точках левая часть рациональна, тогда как правая иррациональна.
а значение c такое, что x и y одновременно не принимают рациональных значений в одной точке.
Неконструктивное описание. Получается: "если взять такие параметры, что прямая не проходит ни через одну рациональную точку, то она не проходит ни через одну рациональную точку". Что, э... верно, но не очень интересно (в частности, из такого определения не очевидно что c вообще существует).
Если в любой сколь угодно малой области будет бесконечное количество точек, плотность нельзя назвать бесконечной. Это недостаточное условие?
а) если это так, то у нас нет "точки в свободной области", потому что всякая область не является свободной от выбранных точек. б) из условия " бесконечным количеством не совпадающих по своему положению точек однородно таким образом, чтобы у каждой точки координаты были рациональными " не следует что во всякой области будет бесконечно много точек, я привёл контрпример.
Они сделали вывод, что, хотя чат-боты и созданы для поддержания диалога, с технической точки зрения они представляют собой машины, которые предугадывают следующее слово в последовательности на основе огромного объёма полученного текста.
Ого. Сами додумались, или подсказал кто?
А по существу - люди взяли план урока от GPT и проверили его по своим методичкам, а не по живым детям. С учётом того, что к методичкам... есть вопросы (скажем, в них иногда фигурирует постулат что разделение детей на группы по способностям - Плохое Решение Которое Никогда Не Может Работать), ценность исследования условна.
До того отнюдь не прекрасного момента когда по какой-то причине дата окажется 17.12.2024, и бухгалтер поставит всех на уши в попытке найти платёж от 17.12.2025.
Я бы сказал так: если скрываете данные для красоты в некотором предположении, сделайте условное форматирование, которое подсветит вырвиглазным красным ячейки где это предположение нарушено. Если не знаете как это сделать - не скрывайте данные, эти грабли бьют по лбу редко, но больно.
Вопрос в том, каковы реальные требования. И из вакансии они очень плохо считываются - то ли людям нужен относительно приличный гитарист (понятно что чем лучше тем лучше, но "приличного" достаточно), то ли нужно с первого дня играть техничный спид-металл.
Я бы оценивал что и сколько нужно переучивать под нужды проекта, и "сменить язык" здесь не всегда самый большой барьер. Питонист в средний C++ проект - в общем случае так себе идея, но переход C# -> Go выглядит не сильно хуже чем "в проекте активно используются CGo-вызовы внешних библиотек, нужна привычка правильно расставлять defer" (которой у человека с номинальным опытом Go всё ещё может не быть).
Да, принято, запутался в терминах. Человек из Anthropic почти наверняка имел в виду "Super AI" (или его синонимы, любой удачный термин в этой области быстро захватывают маркетологи и начинают рассказывать что это-де они уже продают).
Нет, я включаю в превосходит "производит строго лучший результат при строго меньшем расходовании электроэнергии, времени, площади земной поверхности и иных ограниченных ресурсов".
Да, я согласен что планетарный оракул, способный ответить не более чем на 8000 запросов в сутки и не масштабируемый из-за прожорливости, даже если он на них отвечает кратно лучше людей, сам по себе такой ситуации не создаст (но его можно спросить "как сделать тебя более энергоэффективным?"...).
Почему вам кажется что эти графики - основание, а не иллюстрация?
А то у меня периодически бывают споры с людьми, которые берут иллюстрацию к ОТО "пространство - это эластичный лист, который продавливается шарами с массой" и спрашивают "и что, эти физики-тупицы так и не задались вопросом, а что тогда притягивает эти шары вниз?"
Экономический аргумент вообще-то грустный: "сильный ИИ", по определению термина, есть штука, которая превосходит почти всех людей в почти всех областях деятельности. Если мы считаем его достижимым в ближней перспективе (если!), то для большинства людей не будет существовать экономически оправданной занятости, за которую бы им платили деньги - обладатель денег может получить больше, потратив их на экземпляр ИИ.
(Это, разумеется, подразумевает что "сильный ИИ" и "экономика-как-сегодня" вообще совместимы.)
Можно, но
1) при этом пострадает качество текста в целом (мы, возможно, хотели бы динамически подстраивать температуру под "важность" токена, но сейчас никто вроде не пытается это делать);
2) в менее очевидных случаях нулей не будет (скажем, при ответе "да"/"нет" на нетривиальный вопрос логиты обоих опций будут существенно ненулевыми).
Не решения, право доступа к работающей системе. Судя по тому что Роскомнадзор некоторое время назад выкатывал ТЗ "сделать свой СОРМ, с маджонгом и гейшами" (там были формулировки отчётливо из времён "трёхглавого закона", выглядит так что копипастили из ТЗ какой-то существующей реализации), я восстанавливаю что они попытались пробить себе доступ к СОРМ без судебных решений и были посланы.
Не очень. Точнее, некоторая идеальная блокировка, когда целью ставится написать простые в исполнении правила, которые практически блокируют конкретный протокол и при этом порождают мало проблем в остальном трафике - нетривиальная задача (если протокол специально маскируется под безобидные или под хрен-пойми-что), но, судя по результатам, решают не её.
Те кто хотят решать нетривиальные задачи анализа протоколов и идеологически не против государственного надзора за гражданами - идут работать над СОРМ (который, судя по доносящимся новостям, Роскомнадзоровцев послал к чёрту). Там решается более сложная задача - по совокупности трафика понять, что именно человек делал, без права вмешательства.
(На всякий случай оговорка: я не говорю что фактическая перлюстрация трафика есть морально достойное занятие, я обсуждаю именно то, насколько технически интересные задачи при этом возникают.)
В условии нет нормального описания того, как именно работает команда сложения. Довольно очевидно, что предполагается что числа представлены в двоичной записи, машинное слово содержит сколько-то бит (а не трит или чего-то более экзотического), отрицательные числа представлены в дополнительном коде, при переполнении старшие биты тихо исчезают. Но всё это вообще-то надо сказать.
Ещё хуже что непонятно сочетание условия что есть только команда сложения (нет условных переходов, нет присваивания константы, нет call/ret, etc) и слов про "язык программирования".
Но поехали. Пусть у нас слова по 32 бита, и все команды сложения по одному слову (т.е. регистр команд
IPпри каждом сложении увеличивается на 1). Регистры обозначаем латинскими буквами и считаем что их сколько угодно, результат образуется в регистре по имениa.1) Команда зануления.
a := a + ax32.2) Команда присваивания единицы.
a := 0b := 0
b := IP
a := IP
# повторить 32 раза
a := a+b
b := b+b
3) Очевидно, аналогично можно присвоить регистру любую константу:
a := 0b := 1
# пишем 42 = 00101010
b := b+b #0
a := a+b #1
b := b+b
b := b+b #0
a := a+b #1
b := b+b
b := b+b #0
a := a+b #1
(Важно заметить, что эта операция может быть дополнена инструкциями
b := b+bи поэтому всегда может занимать ровно0xa6команд)4а) Условные переходы. Пусть
TP,FPиRi- выделенные регистры, которые не используются никак иначе, и мы можем разместить команды по следующим адресам:# 0x00000000IP := IP + FP
# 0x80000000
R0 := 0x7fffff59 # вычисление использует R1
TP := TP + R0
IP := IP + TP
Тогда можно сделать команду перехода на инструкцию
TPеслиaимеет значение0x80000000иFPеслиaимеет значение0,JMP31 a:b := <дополнение (адреса текущей инструкции+2)>b := b+a
IP := IP+b
4б) Команда перехода на
TPеслиaимеет1в n-ном младшем бите иFPесли он имеет в нём значение0, при условии что все биты младше - нулевые,JMPn:a := a+ax(31-n),JMP31 a4в) Команда перехода на
TPеслиaне0, наFPиначе,JNZ a:b := 0b := b + FP
FP := L1
JMP0 a
L1: FP := L2
JMP1 a
...
JMP30 a
L31:FP := 0
FP := b + FP
JMP31 a
5) Аналогично, побитовое обращение
b:a := 0c := 1
d := 0d := d+bFP := L1
TP := L2
JMP0 d
L1: a := a+c
TP := L3JMP0 cL2: e := 0xffffffff
d := d+eL3:c := c+cFP := L4
TP := L5
L4: a := a+c
L5: c := c+c
...
6) Вычитание,
a := b - c:d := ~ce := 1
d := d + e
a := b + d
Умножение и деление дальше вроде довольно очевидны.
Бледно.
Об именах переменных: не используйте что-либо вне ASCII-набора, даже если среда это позволяет (потому что нынче она, к сожалению, иногда позволяет). Отладка путаницы между
int capиint сарсогреет вашу пятую точку как мало что другое.Обращайте внимание на предупреждение "name XXX hides outer variable". C++ позволяет дублирование имён во вложенных блоках:
int a = 2;for(int b = 0; b < a; ) {
int a = 17;
//...
--a;
}
- но это почти никогда не идёт на пользу читаемости программы.
Если вы таки-используете глобальные переменные, называйте их уникальным образом, чтобы при чтении было очень хорошо видно, что вот здесь модифицируется глобальная переменная.
Аналогичный совет относится к статическим переменным в функциях/методах и данным-членам классов.
Разделяйте имена переменных и функций (скажем, одни с маленькой буквы, другие с большой), потому что в C++ они умеют конфликтовать.
Либо не используйте макросы вообще, либо давайте им визуально отличные от всего остального имена (обычное соглашение - ИСПОЛЬЗОВАТЬ_КАПС). Имя макроса может быть распознано в совершенно любом контексте и результат способен порождать очень озадачивающие сообщения компилятора.
(Да, старайтесь не включать
windows.hпо крайней мере в заголовочных файлах, эта падла определяет тонну макросов, иногда с очень неудачными именами.)Называйте переменные и функции по тому, что они представляют, а не потому, как они реализованы:
bool IsLessThanMinusTen(int number) {return number <= -10;} // плохоbool IsLethalHP(int hp) {return hp <= -10;} // лучше
Хотя имена могут быть слишком длинными, на современных мониторах "строка не влезает в экран" - отчётливый признак того, что вы делаете что-то кошмарно не то. Найдите в настройках среды визуализацию вертикальной линеечки и выставьте её на какую-нибудь разумную ширину. Есть люди которые рекомендуют 80, на мой вкус это бывает слишком коротко, я предпочитаю 120 (это удачно совпадает со строкой, которая не переносится в интерфейсе нашего gitlab при сравнении side-by-side).
Я знаю "канонический" ответ (круглую крышку в принципе невозможно уронить в люк который она закрывает), но он на мой вкус очень странный. Эти крышки и специально-то обратно на место у меня получается положить со второй-третьей попытки. Кроме того, крышка реалистичной толщины и с реалистичной "полочкой" не пролезет в собственное посадочное место даже будь она квадратной.
1) Они не всегда круглые, автор этого комментария воочию видел квадратные.
2) Они в общем случае не обязаны иметь форму колодца под ними (основание крышки всё равно делается отдельно).
3) Насколько я понимаю, в основном "так исторически сложилось" - есть налаженный процесс изготовления крышек, который сейчас или когда-то в прошлом было проще наладить для условно круглых и нет причины эту форму менять. (Я бы ожидал что сейчас их отливают, что позволяет сделать любую простую форму со сравнимой лёгкостью.)
Впервые (нет) на арене: нумерую все рациональные числа. Беру рациональное число p/q, записываю p и q в восьмеричной системе счисления, объединяю через 8. Например: 355/113 -> 0543 / 0161 -> 5438161. Всё, все рациональные числа получили по натуральному номеру и ещё прорва натуральных номеров осталась.
Нет никакого фундаментального отличия "природы" от "системы", по крайней мере на уровне онлайн-казино. Кидает шарик в рулетку живой крупье или генерируется следующий член гаммы блочного шифра - с точки зрения игрока это гипотезы с одним и тем же распределением исходов. То что абстрактное казино что-то "знает" - совершенно неважно, если миры в которых оно "знает" и "не знает" эмпирически неотличимы.
"Удача" казино в том, что а) математическое ожидание выигрыша для игрока отрицательно (именно для этого на рулетке есть сектор "зеро", к примеру); б) у казино на порядки больше капитала (cf. "задача о разорении игрока"). Разницы между генератором в который можно подглядеть и гипотетическим идеальным генератором, равно непредсказуемым для всех сторон, в смысле этих двух факторов нет.
Да, в принципе казино может мухлевать. Но для этого ему всё ещё совершенно не требуется предсказывать значение генератора, оно может просто заменить очередной выход генератора желаемым - как искусный крупье может намеренно выбросить "красное" на рулетке по заказу.
"Боле сложный генератор" может использовать источники истинной битовой энтропии (т.е. выдавать разные выходы в программно идентичных ситуациях).
Почти наверняка его реализация использует какой-нибудь современный блочный шифр, что делает
эффективным образом бесконечными: вы пытаетесь разработать стратегию взлома AES, и, спойлер, у вас это не получится.
Но проблема ли это?
"Игрок" подразумевает, что казино принимает какие-то решения в ходе игры. Но в большинстве игр (не уверен что во всех, может есть странные исключения) крупье действует по жёстко заданному алгоритму. Иными словами, нет никакой разницы, знает или нет крупье при игре в блэкджек, что следующая карта в колоде - туз: он обязан взять карту в зависимости от текущих очков, даже если это было бы неоптимальное решение.
Математически, общая информация между поведением игрока и состоянием генератора равна нулю (потому что игрок не в состоянии установить состояние генератора), но и общая информация между поведением казино и состоянием генератора равна нулю (потому что у казино нет свободы поведения).
Это... очень базовый результат теории игр - что в детерминированных играх всё ещё могут быть оптимальны смешанные стратегии (т.е. оптимальная стратегия может включать действие "кинуть (свой собственный) кубик"). Обратно, даже если исходы игры есть лотереи, в VNM-предположениях нет фундаментальной разницы между лотереей с вероятностью некоторого исхода 1 и лотереей, у которой все исходы имеют вероятности <1.
(Отдельно, меня раздражает фраза "настоящая случайность": это понятие, в отличие от "вероятности при условии данных априорных гипотез", очень тяжело определить. Скажем, я сейчас взял две монетки и предлагаю вам угадать, орлом ли выпадет вторая. При этом первую я подбросил сразу, и если на ней выпал орёл - я уже подбросил вторую, а если решка - подброшу только после того как вы ответите. Является ли угадываемое вами значение при этом "по-настоящему случайным"?..)
Это франшиза (франчайз, кто как произносит), вполне стандартная штука. Её лучше видно для ресторанов (Rostic's / Il Patio это активно делали): сам считаешь аренду/найм/продукты/etc, ты получаешь известную вывеску в обмен на правила использования этой вывески. Для WB пространство собственных решений поуже, кажется в основном это про прикинуть отношение стоимости аренды к потоку через точку.
Так можно пронумеровать некоторые иррациональные числа (например: 2, √2, ³√2, ⁴√2, ...). Но у вас не получится составить последовательность, которая включила бы в себя все иррациональные числа (обычно доказывается через т.н. "диагональный аргумент" Кантора).
У меня довольно плохо с чувством "красиво" для таких рукомахательных объяснений, если что. Может получиться перегружено. Но, например:
Возьмём теперь точку
(x₀, y₀)и проведём через неё прямую, её уравнение естьk(x-x₀) + (y-y₀) = 0(исключим из рассмотрения вертикальные прямые).Если x₀ и y₀ рациональны, то при любом иррациональном k это уравнение не имеет иных рациональных решений (рациональное решение
(x₁, y₁)позволило бы записатьk = -(y₁-y₀)/(x₁-x₀)) - прямая с таким наклоном не пересекает вообще никаких иных рациональных точек.Если же x₀ (y₀) иррационально, то мы всегда можем провести вертикальную (соответственно горизонтальную) прямую через эту точку:
x=x₀(y=y₀), которая, очевидно, не имеет рациональных точек.Если хочется провести именно "наклонную" прямую, то можно поступить хитрее: взять
a=x₀+y₀,b=2x₀+y₀. Посколькуx₀ = b-a,y₀= 2a-b, то по крайней мере одно из a, b иррационально. Пусть, для примера, это будетa. Возьмёмk = 1(соответственно 2 для иррациональногоb). Имеемkx+y = a, во всех рациональных точках левая часть рациональна, тогда как правая иррациональна.Неконструктивное описание. Получается: "если взять такие параметры, что прямая не проходит ни через одну рациональную точку, то она не проходит ни через одну рациональную точку". Что, э... верно, но не очень интересно (в частности, из такого определения не очевидно что
cвообще существует).а) если это так, то у нас нет "точки в свободной области", потому что всякая область не является свободной от выбранных точек.
б) из условия " бесконечным количеством не совпадающих по своему положению точек однородно таким образом, чтобы у каждой точки координаты были рациональными " не следует что во всякой области будет бесконечно много точек, я привёл контрпример.
Ого. Сами додумались, или подсказал кто?
А по существу - люди взяли план урока от GPT и проверили его по своим методичкам, а не по живым детям. С учётом того, что к методичкам... есть вопросы (скажем, в них иногда фигурирует постулат что разделение детей на группы по способностям - Плохое Решение Которое Никогда Не Может Работать), ценность исследования условна.