2022-12-11

vak: (Default)
"Этот компьютер загружает OS/8 с Raspberry Pi с SerialDisk, используя ноутбук в качестве последовательного терминала. MUSIC.PA был написан в 1970-х годах и поддерживает четыре ноты полифонии, чего обычно достаточно для создания узнаваемой музыки.

Благодаря новому (и очень простому) аудиоинтерфейсу Omnibus PDP-8/M, подключенному к корпусу усилителя Cordovox, качество звука значительно улучшилось по сравнению с предыдущими экспериментами с AM-радио. Осциллограф производит выборку выходного сигнала аудиоинтерфейса (перезапускаемый моностабильный мультивибратор 74123, настроенный на 7 микросекунд запуска по сигналу INITIALIZE), показывая, что аудиовыход состоит исключительно из импульсов. Программа использует серию импульсов для увеличения громкости и использует больше импульсов для более низких частот, чтобы лучше выровнять звук."

vak: (Default)
Читаю книжку по третьей Скале, всё нравится. Но теория одно дело, а надо же инструментарий освоить. Минимальный набор практических навыков: создать проект, скомпилировать, добавить юнит тесты, протестировать. То, что для Си/Си++ решается через make/cmake/gtest, здесь делается посредством утилиты sbt.

В качестве задачки, чтобы долго не гадать, взял #1 с Leetcode. Есть такой сайт leetcode.com, где предлагается решать программистские задачки на разных языках. Полезно для самообразования, да и работодатели часто дают задания через Leetcode при отборе кандидатов. Задачи там подобраны вполне неплохие. Самая первая из них называется Two-Sum: найти в массиве пару чисел с заданной суммой. Условие смотрите здесь: https://leetcode.com/problems/two-sum/

Scala мне не всякая годится, а только native. Вообще обычно Скалу применяют на виртуальной машине JVM, или через JavaScript в веб-браузере. В моей области всё это не годится. Но есть третий способ: компиляция в native код. Ровно то что нужно (scala-native.org).

Для юнит тестов в Скале есть несколько пакетов, но native работает только JUnit. Нормальная вещь, годится. Подробности здесь: scala-native.org/en/stable/user/testing.html

Собрал я всё это дело в кучу, готовый проект выложил на Гитхабе: two-sum-native. Основная ценность в файлах конфигурации: build.sbt, project/plugins.sbt.

Само решение задачки я честно нагуглил в интернете, маленько приспособив под себя. Вот первый вариант: решение в лоб, медленное, со сложностью O(n²). Зато красивый функциональный стиль. Можно вообще в одну строчку записать, но малопонятно будет. Комментарии мои.