Code Monkey home page Code Monkey logo

nsu-programming.github.io's Introduction

NSU-Programming.github.io

nsu-programming.github.io's People

Contributors

agerasev avatar ddyak avatar nikita-p avatar savchenkoyana avatar sekrasoft avatar vitalyvorobyev avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

nsu-programming.github.io's Issues

Примеры разворачивания коллекции через std::accumulate

Стоит добавить в лекцию что-то про мощь std::accumulate, например с наивным копированием:

#include <iostream>
#include <vector>
#include <numeric>

int main() {
	std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	
	std::vector<int> v1 = std::accumulate(v.begin(), v.end(), std::vector<int>(),
		[](std::vector<int> xs, int x){ xs.push_back(x); return xs; });

	std::cout << "copy:";
	for (auto& x : v1) std::cout << " " << x;
	std::cout << std::endl;

	std::vector<int> v2 = std::accumulate(v.begin(), v.end(), std::vector<int>(),
		[](std::vector<int> xs, int x){ xs.insert(xs.begin(), x); return xs; });

	std::cout << "reversed:";
	for (auto& x : v2) std::cout << " " << x;
	std::cout << std::endl;

	return 0;
}

Или на ссылках, хотя там функциональная чистота теряется.

https://habr.com/ru/post/57503/

Скорректировать раздел "Как отправлять решение задач"

  1. Вероятно, студенты сначала прочитают раздел "Установка и настройка VS Code". И начнут работать с репоситорием hello-classroom. Сделают все действия, описанные в данном разделе, в частности git push -u origin master. Работать с разделом "Как отправлять решение задач" они начнут позже, т.к. он расположен ниже в списке разделов. Когда при чтении раздела "Как отправлять решение задач" они дойдут до момента "включить использование workflows", у них может возникнуть недопонимание. Как так, я включил workflow, а тест не происходит. В тексте написано, что workflow начинает работать сразу после push-а. Надо это явно подчернкнуть: например, написать, что после "включения workflows", нужно обязательно сделать push, чтобы запустить тесты.
  2. Считаю, что необходимо немного скорректировать описание того, как делать pull request. Прочитав сначала "Установка и настройка VS Code", а затем раздел "Как отправлять решение задач" и выполнив все указанные действия, студент наткнется на проблемму. Так как бранч solution не был заблаговременно создан, то github откажется проводит pull request в другой бранч одного и тогоже форка (кнопка будет неактивна), т.к. нет изменений. Нужно где-то, скажем в разделе "Установка и настройка VS Code", попросить студентов создать новый бранч solution до того, как они начали вносить изменения. Или предложить другое решение. Во всяком случае, когда я последовательно выполнял все описанные действия - наткнулся на эту проблемму. Я-то понимаю английский язык и представляю, что от меня просят, а студент скорее всего будет долго возиться с этой проблеммой.

Улучшить textbook-python-numpy

  • статистика массива: mean, std, ...
  • правильные случайные числа
  • column_stack, concatenate, ...
  • операции по осям, axis=1, ...
  • подробнее про np.einsum

Норма Лоренц-вектора

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

  2. То, как норма определена в тестах - математический волюнтаризм. Лучше попросить реализовать norm2 - скалярное произведение на себя.

python-basics-set2

В test_exercises.py:

from fractions import gcd 

не работает начиная с Python 3.9. При использовании Python 3.9++ нужно поменять строку на

from math import gcd

Тесты к задаче "Сложение матриц"

В ветке master репозитория matrix пара тестов работает неправильно. Это тесты, которые проверяют сумму матриц из заранее подготовленных файлов. Сумма матриц из файлов .in не равна матрице из файла .out. Проверил на питоне с numpy - это действительно так. Суммарная ошибка sum(m1 + m2 - m3) = 3.e-6 для лейбла small, sum(m1 + m2 - m3) = 3.7e-4 для лейбла long. Предполагаемая причина проблеммы - округление при записи в файлы .out. Сгенерировал с использованием numpy свои фаллы custom1.in, custom2.in, custom.out - тесты с этим лейблом успешно прошлись (для больших и маленьких размерностей)

Примеры на деструкторы

Лоренц-вектор является сетевым интерфейсом. В конструкторе соединяется с сетью, в деструкторе разъединяется.

Например, был константный вектор, а потом наука решила его значения уточнять. Каждый месяц/минуту значение улучшается и доступно по веб-апи. Объект символизирует некоторый вектор, который берёт состояние из сети каждый раз при обращении к геттерам.

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

Или синхронизация с файлом: в конструкторе вектор читается из файла, в деструкторе - пишется в файл.

Напугать порядком инициализации и выделением памяти

Кусок текста про статические поля, который можно куда-нибудь вставить:

Использовать статические поля следует с опаской. Во-первых, на них распространяются все проблемы глобальных переменных, кроме глобальной видимости. Во-вторых, порядок их инициализации не определён. Если необходимо сделать статическим обьект некоторого класса (например, `std::vector<int>`). Такой указатель обычно инициализируют нулём, а выделение памяти и инициализацию объекта производят позже в программе.

Придумать favicon

Может быть кто-нибудь умеет рисовать? Придумать бы нам простой логотип :)

Реогранизовать описание стандартных модулей python

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

Комментарии к cpp/inheritance..python/str

cpp/inheritance:

необходимость диспетчеризации

Вероятно, стоит в скобках пояснить термин.

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

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

cpp/dynamic-memory:

Программе на C++ доступны два вида памяти: стек и куча (heap).

А как же статическая память?

std::list<std::unique_ptr>

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

python/basics:

Объекты list - изменяемые (в отличие от str и tuple):

Где-то надо показать разницу между a += (1,2) и a = (1,2), что в C++ второе бы не сработало для const объекта, а в python переменная изменяема, хотя её значение может быть неизменяемым.

arr[::-3]

неудачный пример, т.к. вышло, что это равно развёрнутому arr[::3]

К коментарию функции можно обратиться

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.