Зворотня польська нотація

В інституті в мене був предмет «Паралельні комп'ютерні системи». На лекціях поважний професор розповідав нам абсолютно неактуальні та непотрібні факти про архітектуру архаїчних суперкомп'ютерів, а потім примушував то все вчити напам'ять. А от лабораторні роботи були значно цікавіші. Фактично весь семестр потрібно було допилювати та розвивати одну й ту саму задачу: паралельне обчислення арифметичного виразу.

На першій лабі треба було просто якось його розпарсити і порахувати результат, на другій додати дужки, на третій оптимізувати обчислення і винести за дужки операнди, на четвертій побудувати AST, на п'ятій за допомогою алгоритмів розподілити цей AST на ядра процесору, потім все це візуалізувати, потім додати редактор, і так далі.

Поки одногрупники писали купу іфів і думали як впоратися з дужками, я вирішив піти неортодоксальним шляхом, і конвертував вираз з звичайної нотації у зворотню польську, а все інше вже було ділом техніки.

З вікіпедії копіпастну вам, наприклад вираз a + b конвертується в a b +, а вираз (a + t) * (b * (a + c))^(c + d) конвертувався у a t + b a c + * c d + ^ *.

Далі ця штука дуже легко обчислювалась, і по ній не менш просто було побудувати граф. Граф я малював та редагував за допомогою Swing, там можна було рухати ноди як хочеш і на те щоб стрілочки-ребра між вершинами правильно анімувалися, я витратив цілий вечір! І ніякого джаваскріпта! В мене досі десь лежить робочий зошит, де я за допомогою тригонометрії обчислював кути для тих самих стрілочок.

То була дуже крута робота, і за все життя, здається, я не робив нічого складнішого.

Але найприкрішим виявилося те, що викладачка на одному з етапів не хотіла приймати в мене цей шедевр. Так сталося, що я не зміг здати лабу вчасно через дуже велику бажаючих, і здавав частину якраз з зворотньою нотацією аж через місяць після того як її зробив. Викладачка перевірила що все працює, а далі задала якесь питання, типу як я це зробив. Так як часу вже пройшло багато, то я вже забув і відповів щось не те, їй це не сподобалося і вона відмовилась приймати в мене роботу.

В наші часи дуже розповсюдженим було здавати так зване «палєво», це роботи студентів з попередніх курсів, або однокурсників. Бралась програма, якось модифікувалась щоб не виглядало вже зовсім однаково і «впарювалась». На інститутському жаргоні успішна здача роботи називалась «впарити лабу» або «здати палєво».

Я дав свою роботу декільком одногрупникам, і через це мав проблеми. Через те що я відразу не зміг відповісти на якесь питання вона зробила висновок що ми всі отримали палєво від третього джерела і намагаємося напарити їй чужу роботу.

Потужність мого батхерту складно передати. Я не одну ніч провів за шліфовкою цієї програми, а викладачка мене навіть слухати не хотіла. Я навіть щось почав їй пояснювати за логи мого власного SVN-сервера, де видно коли я все робив і комітив, але вона просто відмовилась приймати роботу. І зворотня польська нотація, яку ніхто крім мене не використовував, тут мені не допомогла.

Врешті я якось поздавав всі ті лабораторні, хоч і був дуже близьким до відрахування.

P.S.: а безглузду маячню типу кількості векторних конвеєрів та флопсів в CRAY-1 на екзамені я просто списав.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred