Напишите короткий код на ассемблере для сетки ЦП, которые передают значения соседям, превращая входной поток в целевой без риска блокировки.
Как играть
Вы программируете сетку из очень маленьких компьютеров. Каждый узел выполняет собственный короткий список инструкций и может общаться только с соседями по сторонам, передавая значения через порты. Поэтому числу, которому нужно пересечь сетку, приходится передаваться вручную, узел за узлом.
У каждого узла есть аккумулятор и набор инструкций: переместить значение, сложить, вычесть, перейти.
Узел может читать или записывать данные в узел сверху, снизу, слева или справа, а также во входной и выходной потоки.
Порты блокируются. Узел, пишущий вправо, просто ждёт, пока узел справа от него не прочитает данные из левого порта.
Это значит, что два узла должны синхронизироваться не только по значению, но и по времени.
Если за полный цикл никто не продвинулся, а кто-то всё ещё ждёт, сетка оказывается в состоянии блокировки.
Головоломка решена, когда выходной поток совпадает с целевым, заданным уровнем.
Управление
На компьютере: введите код в текстовое поле каждого узла, выберите уровень из выпадающего списка и нажмите «Запуск».
На телефоне и планшете: игра работает, но для ввода кода настоятельно рекомендуется внешняя клавиатура.
Режимы игры
Ежедневный: одна общая головоломка, генерируемая на основе сегодняшней даты.
Практика: переключайтесь между новыми случайными входными данными с помощью кнопки «Новый».
Советы и стратегия
Сначала спланируйте маршрут, потом арифметику. Чаще всего ошибки возникают из-за того, что значения не могут попасть туда, куда нужно, а не из-за неверных сумм.
Два узла, ожидающие друг друга, — это классическая блокировка. Если оба пишут навстречу друг другу, прежде чем кто-либо прочитает, ни один не сдвинется с места.
По возможности направляйте поток данных в одну сторону. Сетку с единым направлением гораздо проще анализировать, чем ту, где значения пересекаются.
Используйте узел как чистый ретранслятор, когда это нужно. Просто передавать значение дальше — легитимная и часто необходимая задача.
Смотрите на заблокированный узел, а не на неверный ответ. Когда вывод замирает, важнее всего понять, какой узел ждёт и на кого именно.
Чему вы научитесь
Node Network — это головоломка о параллельном программировании, передаче сообщений и избегании блокировок в сети процессоров.
Навыки: параллельное и конкурентное программирование, передача сообщений, предотвращение блокировок.
Для кого: примерно 9–12 классы (возраст 14+).
Для родителей и учителей: наглядное изучение конкурентности и блокировок.
Происхождение
Сетка очень маленьких компьютеров, каждый из которых выполняет собственный короткий список инструкций и может общаться только с непосредственными соседями, — это TIS-100, Zachtronics, июль 2015 года, игра, поместившая свои головоломки на вымышленную повреждённую машину 1970-х годов.
Преподаваемое ограничение реально и занимает центральное место в параллельных вычислениях: без общей памяти значение, которому нужно пересечь сетку, приходится передавать вручную, узел за узлом, с помощью передачи сообщений.
А ручная передача — это то, как вы встречаете взаимную блокировку: два узла, каждый из которых ждёт другого, оба остановлены навсегда. Эту ошибку по-настоящему нельзя объяснить на доске, потому что вся трудность в том, что каждый узел по отдельности ведёт себя правильно.
О игре Node Network
Node Network — это головоломка о параллельном программировании, передаче сообщений и избегании блокировок в сети процессоров. Это оригинальная бесплатная браузерная игра, разработанная специально для PlayPendium.
Оригинальная бесплатная игра в браузере — без загрузки. Смотреть все игры →