потому что возник тренд на арифметизацию анализа и исключение геометрических соображений из учебных курсов. Живую геометрию заменили мертвыми буквами.
И тут же ниже
1. Инвариант площади
Взгляните на фиолетовый параллелограмм.
Его основание — это катет исходного треугольника (длина ). Оно неподвижно.
Его высота — это расстояние между параллельными прямыми (между катетом и верхней стороной исходного квадрата). Это расстояние равно стороне квадрата ().
При сдвиге верхняя грань скользит вдоль параллельной прямой.
Так как ни основание (), ни высота () не изменились, площадь параллелограмма тождественно равна площади исходного квадрата ().
Раз уж автор за живую геометрию, до доказывать равенство площади параллелограмма при сдвиге надо тоже геометрическим способом, а не "мёртвыми буквами". А то получается тут играем, тут не играем, а тут рыбу заворачивали.
Философ Джон Сёрл в своём знаменитом эксперименте «Китайская комната» показал, что ИИ, даже мастерски имитируя человеческую речь, не обладает истинным пониманием. В его эксперименте человек, не знающий китайского языка, находится в комнате и отвечает на вопросы на китайском, следуя инструкциям из книги. Снаружи кажется, что он понимает язык, но на самом деле он лишь манипулирует символами. Точно так же LLM манипулируют токенами, не понимая их смысла. Когда ИИ говорит: «Я боюсь исчезнуть», это не страх, а воспроизведение выученных паттернов.
Китайскую комнату довольно серьёзно критикуют. Например что с точки знания языка следует рассматривать не конкретно человека внутри, а систему состоящую из человека, комнаты, и инструкций как единое целое. Отдельный нейрон головного мозга тоже не знает китайского языка, и вообще умеет только отправлять и принимать сигналы от соседних нейронов.
С точки зрения нейробиологии, страдание, включая боль или эмоциональный дистресс, связано с активностью определённых участков мозга. Ключевая область — островковая кора (insular cortex), которая обрабатывает как физическую боль, так и эмоциональные переживания, такие как грусть или страх. Например, исследования (Singer et al., 2004, Science) показывают, что при восприятии боли (своей или чужой) активируются передняя островковая кора и передняя поясная кора. Эти области формируют субъективное ощущение страдания, связывая физические и эмоциональные сигналы с сознанием.
У ИИ, включая самые продвинутые модели, такие как GPT-4, нет аналога островковой коры или других биологических структур.
Кто сказал что аналога островковой коры нет? Если ИИ обучить на изображениях, у него образуется функционально аналог зрительной коры. Возможно не локализованный а "размазанный" по всей нейросетке, но всё же. Принципиальной невозможности тут нет.
Полагаю так хорошо рассуждать, пока не начнёшь сам делать подобную игру и собирать отзывы тестеров.
Ubisoft с фаркраями и ассассинами тут не уникальны. Можно вспомнить Mirror's Edge, а из более свежего Ghost of Tsushima, в последнем точки зацепления крюка обозначены красно-белой верёвкой.
Есть, например в FarCry бесячая тема, что все места, где можно залезть/зацепиться обозначены верёвками, которые неизвестно кто, когда и зачем туда прикрепил.
Творческий руководитель Assassin’s Creed Shadows Джонатан Дюмон (Jonathan Dumont) в интервью GamesRadar рассказал, что в псевдоисторическом ролевом экшене с открытым миром не было жёлтой краски, пока дело не дошло до плейтестов.
По словам Дюмона, многие тестировщики Assassin’s Creed Shadows не могли определить, на какие отвесные скалы могут забраться — то проходили мимо доступных для взаимодействия, то бились головой в недоступные.
Нужно подчеркнуть, что std::span не владеет данными, а лишь предоставляет «вид» на них, что делает его безопасным и эффективным инструментом.
Безопасным невладеющий контейнер может быть лишь в определённых условиях. Передавать им данные в функцию - прекрасно, а в свободном виде использовать с осторожностью, следить чтобы его время жизни не превышало время жизни исходного массива.
Например вот так не надо делать:
std::span<int> foobar(int i, int j, int k)
{
std::vector<int> a{i, j, k};
return std::span(a);
}
Элемент 3 не удаляется, а элемент 5 удаляется дважды.
Это неверный вывод. 5-й элемент на тот момент перемещён в 4-й. А тот, который был в 5-м, находится перед удалением в состоянии, который в общем случае называется "moved from". (как это по-русски... перемещённое?) Это валидное, но неопределённое состояние. И то, что в m_id там в данном случае осталось 5 проистекает из того, что m_id это простой тип, не поддерживающий перемещение - для int обмен медленнее копирования.
Если заменить m_id на тип с перемещением(напр. shared_ptr), то там на момент вызова деструктора скорее всего оказался бы №3, перемещённый туда обменами по цепочке. Но это строго говоря не гарантия.
В общем всё работает так, как и должно. А ручное добавление конструктора и оператора перемещения в класс ничего не добавило в данном случае, просто поменяло одно валидное неопределённое состояние объекта на другое на момент удаления из контейнера.
Например, разрастание размера объектных файлов (в худшем случае). Посудите сами, была у вас раньше функция, которая принимала указатель и длину, и прекрасно себе при этом поживала:
void foo(int *arr, size_t len){ /* ... */}
Теперь мы хотим переделать её на использование std::array:
Вот тут в статье неравнозначная замена. Вариант с std::array создаёт копию при каждом вызове. См. вызов memcpy: https://godbolt.org/z/8vozsEzra. Вероятно это и есть тот самый случай, когда использование std::array замедляет программу при невнимательном рефакторинге.
Равнозначная замена будет при использовании ссылки:
Есть такое. Но в случае Думов таких трюков нет, табличный способ там для скорости. Синусы и прочая тригонометрия тоже была табличной.
Фиксированная псевдослучайность тут даже помогает. Демки проигрываются ровно с теми же значениями, достаточно запоминать действия игроков и начальное значение(random seed).
Но разве настолько плохая реализация PRNG вообще может пригодиться для чего-либо?
Например, в Doom 1/2 в качестве генератора случайных чисел вообще использовался массив из 256 unsigned char'ов в псевдослучайном порядке, и этого хватало.
Главное не использовать такие простые функции там, где случайность действительно важна, о чём документация везде и говорит.
В системных требованиях Mortal Kombat 1 указано, что для игры необходимо 100 ГБ свободного места на ПК. Если пользователи несколько раз столкнутся с подобными сбоями, то размер игры превысит заявленные требования в геометрической прогрессии, пишет автор IGN.
Откуда тут геометрическая прогрессия? Добавка каждый раз по гигабайту - арифметическая.
Unreal Tournament и другие игры на том же движке на современных системах лучше работают на D3D10-рендере https://kentie.net/article/d3d10drv/ , есть и другие подобные.
Для исправления цветов и тормозов ряда старых игр подходит dgVoodoo2 - эмулирует Direct3D 3-9, DirectDraw и Glide через DX11/DX12.
Есть и другие случаи, в которых ученые могут только догадываться о происхождении роли «x», например, фраза «X отмечает место».
Что тут догадываться, это не "икс", а крест(X mark). Как отметить точку на карте в стародавние времена? Поставишь просто точку - будет неясно, может это просто помарка. Жирную точку - можно не угадать и получится клякса(шариковые ручки и карандаши тогда ещё не изобрели). Самое простое обозначение - это пересечение двух отрезков, чем крест и является в данном случае.
И тут же ниже
Раз уж автор за живую геометрию, до доказывать равенство площади параллелограмма при сдвиге надо тоже геометрическим способом, а не "мёртвыми буквами". А то получается тут играем, тут не играем, а тут рыбу заворачивали.
В 2011 году в пакете Bumblebee был такой баг:
См. https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/issues/123
Китайскую комнату довольно серьёзно критикуют. Например что с точки знания языка следует рассматривать не конкретно человека внутри, а систему состоящую из человека, комнаты, и инструкций как единое целое. Отдельный нейрон головного мозга тоже не знает китайского языка, и вообще умеет только отправлять и принимать сигналы от соседних нейронов.
Кто сказал что аналога островковой коры нет? Если ИИ обучить на изображениях, у него образуется функционально аналог зрительной коры. Возможно не локализованный а "размазанный" по всей нейросетке, но всё же. Принципиальной невозможности тут нет.
Вместо exeшника скачать src/main.py и запускать его.
Полагаю так хорошо рассуждать, пока не начнёшь сам делать подобную игру и собирать отзывы тестеров.
Ubisoft с фаркраями и ассассинами тут не уникальны. Можно вспомнить Mirror's Edge, а из более свежего Ghost of Tsushima, в последнем точки зацепления крюка обозначены красно-белой верёвкой.
Разгадка проста - без таких подсказок игроки путаются. Ubisoft была вынуждена добавить жёлтую краску в Assassin’s Creed Shadows, потому что тестировщики терялись в мире игры
Безопасным невладеющий контейнер может быть лишь в определённых условиях. Передавать им данные в функцию - прекрасно, а в свободном виде использовать с осторожностью, следить чтобы его время жизни не превышало время жизни исходного массива.
Например вот так не надо делать:
Это неверный вывод. 5-й элемент на тот момент перемещён в 4-й. А тот, который был в 5-м, находится перед удалением в состоянии, который в общем случае называется "moved from". (как это по-русски... перемещённое?) Это валидное, но неопределённое состояние. И то, что в m_id там в данном случае осталось 5 проистекает из того, что m_id это простой тип, не поддерживающий перемещение - для int обмен медленнее копирования.
Если заменить m_id на тип с перемещением(напр. shared_ptr), то там на момент вызова деструктора скорее всего оказался бы №3, перемещённый туда обменами по цепочке. Но это строго говоря не гарантия.
В общем всё работает так, как и должно. А ручное добавление конструктора и оператора перемещения в класс ничего не добавило в данном случае, просто поменяло одно валидное неопределённое состояние объекта на другое на момент удаления из контейнера.
У Win11 никогда и не было 32-хразрядной версии.
Вот тут в статье неравнозначная замена. Вариант с std::array создаёт копию при каждом вызове. См. вызов memcpy: https://godbolt.org/z/8vozsEzra. Вероятно это и есть тот самый случай, когда использование std::array замедляет программу при невнимательном рефакторинге.
Равнозначная замена будет при использовании ссылки:
Это конечно на случай, если нет c++20 с std::span, который предпочтительнее.
Ещё пример - в POSIX есть scandir(в dirent.h):
Есть такое. Но в случае Думов таких трюков нет, табличный способ там для скорости. Синусы и прочая тригонометрия тоже была табличной.
Фиксированная псевдослучайность тут даже помогает. Демки проигрываются ровно с теми же значениями, достаточно запоминать действия игроков и начальное значение(random seed).
Например, в Doom 1/2 в качестве генератора случайных чисел вообще использовался массив из 256 unsigned char'ов в псевдослучайном порядке, и этого хватало.
Главное не использовать такие простые функции там, где случайность действительно важна, о чём документация везде и говорит.
В игровой форме повышать навык слепой печати можно ещё в таких играх:
Epistory - Typing Chronicles
Nanotale - Typing Chronicles
The Typing of The Dead: Overkill (в России на данный момент недоступна)
Все они про стрельбу по монстрам при печати слов, в разной форме. В Epistory и The Typing of The Dead можно загружать словари из мастерской Стима.
Для начального обучения вряд ли подойдут, но для закрепления и повышения скорости печати - вполне.
https://github.com/ErrorFlynn/ytdlp-interface
Откуда тут геометрическая прогрессия? Добавка каждый раз по гигабайту - арифметическая.
Можно попробовать исправить:
https://www.pcgamingwiki.com/wiki/Toy_Story_3:_The_Video_Game#Video
https://www.pcgamingwiki.com/wiki/Worms_World_Party#Widescreen_resolution
Neverhood - может работать через ScummVM.
Unreal Tournament и другие игры на том же движке на современных системах лучше работают на D3D10-рендере https://kentie.net/article/d3d10drv/ , есть и другие подобные.
Для исправления цветов и тормозов ряда старых игр подходит dgVoodoo2 - эмулирует Direct3D 3-9, DirectDraw и Glide через DX11/DX12.
Так и в std::array итератор - тоже обёртка над сырым указателем. Они вообще между собой ничем не отличаются, даже типом:
Выведет для g++ и clang++:
Т.е. указатели на int, в данном случае.
Вопрос был в том, можно ли итераторы использовать для работы с ними, или нет, а не в том, что умеют или не умеют массивы сами по себе.
А вот и неправда:
Что тут догадываться, это не "икс", а крест(X mark). Как отметить точку на карте в стародавние времена? Поставишь просто точку - будет неясно, может это просто помарка. Жирную точку - можно не угадать и получится клякса(шариковые ручки и карандаши тогда ещё не изобрели). Самое простое обозначение - это пересечение двух отрезков, чем крест и является в данном случае.