Malbolge — езотерична мова програмування, яку вигадав Бен Олмстед 1998 року. Мова розроблена з метою бути максимально складною для написання програм.
Назва походить від Malebolge, восьмого кола пекла Данте.
Програмування на Malbolge
Код першої програми, яка виводить «Hello World», згенерувала інша програма мовою Lisp, що використовувала пошук у множині всіх можливих програм, через два роки після появи самої мови Malbolge. Сам автор ніколи не писав програм на Malbolge.
24 серпня 2000 Ентоні Юхас у своєму блогу повідомив про 3 робочих програми мовою Malbolge, що виводять фрази «Hello, world.», «Malbolge sucks.» і «antwon.com rules!».
Пізніше Лу Шеффер зробив криптоаналіз мови і продемонстрував програму для копіювання вхідних даних на вихід.
17 серпня 2004 Томаш Вегжановскі написав генератор програм, що виводять задані рядки. Однак програми, отримані цим шляхом, довші за програми Юхаса.
Hello world
Ця програма на Malbolge відображає «Hello, world.»:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Інший варіант:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
Віртуальна машина
Malbolge — це машинна мова для віртуальної машини (інтерпретатора), що працює в трійковій системі числення.
Регістри
У віртуальній машині Malbolge є три регістри: a, c і d.
Регістр c — регістр коду, що використовується як покажчик на поточну команду.
Регістр d — регістр даних, що використовується для керування даними.
Регістр a — акумулятор, також використовуваний деякими командами для маніпуляції даними.
При запуску програми всі регістри дорівнюють нулю.
Пам'ять
Розмір пам'яті віртуальної машини — 59049 (310) комірок із числами з 10 трійкових цифр. Всі комірки з адресами від 0 до 59048 мають значення від 0 до 59048. Всі зміни відбуваються за модулем 59049 (mod 59049). При запуску програми початок пам'яті заповнюється ASCII-кодами символів її початкового коду. Символи порожнього простору (пропуски, табуляція, переноси рядків тощо) нехтуються, а решта символів повинні бути командами Malbolge (див. нижче). Залишок пам'яті заповнюється з використанням операції crazy (див. нижче): [m] = crz [m-2], [m-1].
Команди
У Malbolge є 8 команд. Віртуальна машина визначає, яку команду виконувати, так: до значення комірки з адресою c ([c]) додається значення c, а командою виступає остача від ділення цього числа на 94 (оскільки у вхідному алфавіті мови 94 символи, ASCII-коди яких від 33 до 126).
Таблиця дій інтерпретатора:
Значення ([c] + c) % 94 | Інструкція | Пояснення |
---|---|---|
4 | mov c, [d] | Перехід до комірки з номером [d]. |
5 | out a | Виведення значення ASCII-символу з кодом a % 256 на екран. |
23 | in a | Введення ASCII-символу в a. Роздільник рядків має код 10. Кінець файлу — 59048. |
39 | rotr [d] mov a, [d] | Зсуває значення [d] на одну трійкову цифру вправо (0002111112 перетворюється в 2000211111). Результат зберігається в [d] і в a. |
40 | mov d, [d] | Копіювання значення з [d] в d. |
62 | crz [d], a mov a, [d] | Застосувати операцію crazy (див. нижче) до значень [d] і a. Результат зберігається в [d] і в a. |
68 | nop | Нічого не робить. |
81 | end | Кінець програми. |
Будь-які інші значення нічого не роблять. Вони не дозволені при завантаженні програми, але дозволені після цього. |
Після виконання кожної інструкції вона шифрується операцією crazy. Після цього значення c і d збільшуються на 1 і виконання продовжується з наступної інструкції.
Операція crazy
Операція є аналогом побітових операцій — вона застосовується до двох відповідних цифр.
crz | 2-а цифра | |||
---|---|---|---|---|
0 | 1 | 2 | ||
1-а цифра | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 2 | |
2 | 2 | 2 | 1 |
Шифрування
Після того, як чергову інструкцію виконано, інструкція шифрується за допомогою такої таблиці перекладу (якщо вона є одним з можливих символів мови):
!"#$%>&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@
тобто ! стає 5 тощо.
У популярній культурі
У 10-му епізоді першого сезону серіалу «Елементарно» ключовим доказом у розгадці злочину послужив клаптик паперу, на одному з боків якого роздруковано код програми на Malbolge (що є неточною копією програми «Hello World», наведеної вище), а на іншому записано замовлення кави.
Приклад
- Робочий початковий код [ 10 листопада 2020 у Wayback Machine.] для пісні «99 пляшок пива» з використанням справжніх циклів. Написав Хісасі Ідзава.
- Робочий квайн написано 3 грудня 2012 року, через 14 років після створення самої мови.
Примітки
- Temkin, Daniel (3 листопада 2014). . esoteric.codes. Архів оригіналу за 7 вересня 2021. Процитовано 7 січня 2021.
- . Архів оригіналу за 18 жовтня 2010. Процитовано 25 жовтня 2010.
- Scheffer, Lou (17 квітня 2015). . Архів оригіналу за 6 травня 2021. Процитовано 9 червня 2017.
- Palaiologos (4 березня 2021), , архів оригіналу за 5 серпня 2021, процитовано 23 березня 2021
- . 99 Bottles of Beer. 29 грудня 2005. Архів оригіналу за 14 травня 2020. Процитовано 19 листопада 2020.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Malbolge ezoterichna mova programuvannya yaku vigadav Ben Olmsted 1998 roku Mova rozroblena z metoyu buti maksimalno skladnoyu dlya napisannya program Nazva pohodit vid Malebolge vosmogo kola pekla Dante Programuvannya na MalbolgeKod pershoyi programi yaka vivodit Hello World zgeneruvala insha programa movoyu Lisp sho vikoristovuvala poshuk u mnozhini vsih mozhlivih program cherez dva roki pislya poyavi samoyi movi Malbolge Sam avtor nikoli ne pisav program na Malbolge 24 serpnya 2000 Entoni Yuhas u svoyemu blogu povidomiv pro 3 robochih programi movoyu Malbolge sho vivodyat frazi Hello world Malbolge sucks i antwon com rules Piznishe Lu Sheffer zrobiv kriptoanaliz movi i prodemonstruvav programu dlya kopiyuvannya vhidnih danih na vihid 17 serpnya 2004 Tomash Vegzhanovski napisav generator program sho vivodyat zadani ryadki Odnak programi otrimani cim shlyahom dovshi za programi Yuhasa Hello world Cya programa na Malbolge vidobrazhaye Hello world lt 9876Z4321UT Q M amp H Bzy z KwZY44Eq0 mlk hKs dG5 m BA Y Vb rR5431M zHGwEDCBA 98 6543W10 R O lt Inshij variant amp 9 z2Vxwv POqponl Hjig eB gt lt M 9wv6WsU2T nm jcL I amp CB V Tx lt uVtT Rpo3NlF Jh FdbCBA 4XzyTT43Qsqq Lnmkj Fhg z gt Virtualna mashinaMalbolge ce mashinna mova dlya virtualnoyi mashini interpretatora sho pracyuye v trijkovij sistemi chislennya Registri U virtualnij mashini Malbolge ye tri registri a c i d Registr c registr kodu sho vikoristovuyetsya yak pokazhchik na potochnu komandu Registr d registr danih sho vikoristovuyetsya dlya keruvannya danimi Registr a akumulyator takozh vikoristovuvanij deyakimi komandami dlya manipulyaciyi danimi Pri zapusku programi vsi registri dorivnyuyut nulyu Pam yat Rozmir pam yati virtualnoyi mashini 59049 310 komirok iz chislami z 10 trijkovih cifr Vsi komirki z adresami vid 0 do 59048 mayut znachennya vid 0 do 59048 Vsi zmini vidbuvayutsya za modulem 59049 mod 59049 Pri zapusku programi pochatok pam yati zapovnyuyetsya ASCII kodami simvoliv yiyi pochatkovogo kodu Simvoli porozhnogo prostoru propuski tabulyaciya perenosi ryadkiv tosho nehtuyutsya a reshta simvoliv povinni buti komandami Malbolge div nizhche Zalishok pam yati zapovnyuyetsya z vikoristannyam operaciyi crazy div nizhche m crz m 2 m 1 Komandi U Malbolge ye 8 komand Virtualna mashina viznachaye yaku komandu vikonuvati tak do znachennya komirki z adresoyu c c dodayetsya znachennya c a komandoyu vistupaye ostacha vid dilennya cogo chisla na 94 oskilki u vhidnomu alfaviti movi 94 simvoli ASCII kodi yakih vid 33 do 126 Tablicya dij interpretatora Komandi Znachennya c c 94 Instrukciya Poyasnennya 4 mov c d Perehid do komirki z nomerom d 5 out a Vivedennya znachennya ASCII simvolu z kodom a 256 na ekran 23 in a Vvedennya ASCII simvolu v a Rozdilnik ryadkiv maye kod 10 Kinec fajlu 59048 39 rotr d mov a d Zsuvaye znachennya d na odnu trijkovu cifru vpravo 0002111112 peretvoryuyetsya v 2000211111 Rezultat zberigayetsya v d i v a 40 mov d d Kopiyuvannya znachennya z d v d 62 crz d a mov a d Zastosuvati operaciyu crazy div nizhche do znachen d i a Rezultat zberigayetsya v d i v a 68 nop Nichogo ne robit 81 end Kinec programi Bud yaki inshi znachennya nichogo ne roblyat Voni ne dozvoleni pri zavantazhenni programi ale dozvoleni pislya cogo Pislya vikonannya kozhnoyi instrukciyi vona shifruyetsya operaciyeyu crazy Pislya cogo znachennya c i d zbilshuyutsya na 1 i vikonannya prodovzhuyetsya z nastupnoyi instrukciyi Operaciya crazy Operaciya ye analogom pobitovih operacij vona zastosovuyetsya do dvoh vidpovidnih cifr Operaciya crazy crz 2 a cifra 0 1 2 1 a cifra 0 1 0 0 1 1 0 2 2 2 2 1 Shifruvannya Pislya togo yak chergovu instrukciyu vikonano instrukciya shifruyetsya za dopomogoyu takoyi tablici perekladu yaksho vona ye odnim z mozhlivih simvoliv movi gt amp 0123456789 lt gt ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 5z amp gqtyfr we4 WP H Zn 3dL Q gt U pJS72FhOA1CB6v I 0 8 jsb9m lt TVac uY MK X xDl REokN G i tobto staye 5 tosho U populyarnij kulturiU 10 mu epizodi pershogo sezonu serialu Elementarno klyuchovim dokazom u rozgadci zlochinu posluzhiv klaptik paperu na odnomu z bokiv yakogo rozdrukovano kod programi na Malbolge sho ye netochnoyu kopiyeyu programi Hello World navedenoyi vishe a na inshomu zapisano zamovlennya kavi PrikladRobochij pochatkovij kod 10 listopada 2020 u Wayback Machine dlya pisni 99 plyashok piva z vikoristannyam spravzhnih cikliv Napisav Hisasi Idzava Robochij kvajn napisano 3 grudnya 2012 roku cherez 14 rokiv pislya stvorennya samoyi movi PrimitkiTemkin Daniel 3 listopada 2014 esoteric codes Arhiv originalu za 7 veresnya 2021 Procitovano 7 sichnya 2021 Arhiv originalu za 18 zhovtnya 2010 Procitovano 25 zhovtnya 2010 Scheffer Lou 17 kvitnya 2015 Arhiv originalu za 6 travnya 2021 Procitovano 9 chervnya 2017 Palaiologos 4 bereznya 2021 arhiv originalu za 5 serpnya 2021 procitovano 23 bereznya 2021 99 Bottles of Beer 29 grudnya 2005 Arhiv originalu za 14 travnya 2020 Procitovano 19 listopada 2020