5 самых странных языков программирования: для чего они нужны и что на них можно написать

от автора

Согласно самым разным источникам, в мире существует от нескольких сотен до нескольких тысяч языков программирования. Правда, ЯП, с которыми реально имеют дело десятки и сотни тысяч человек, немного. Больше, конечно, нишевых языков, применяемых для решения узкого круга задач. Существуют ЯП для обучения разработчиков, а также проекты, созданные исключительно для развлечения. В статье — 5 наиболее странных языков из когда-либо созданных. Brainfuck, кстати, опустим, ведь его на Хабре и так регулярно вспоминают. Что же, поехали.

Malbolge

Это если не самый, то один из наиболее сложных языков программирования в мире. Собственно, уже его название происходит от Malebolge, восьмого круга ада по Данте. Язык — эзотерический, для троичной виртуальной машины.

«Эзотерический» означает вовсе не «выход в астральные миры» при помощи программирования. Нет, в случае разработки этот термин означает, что ЯП создан для исследования границ возможностей других языков. Эзотерические языки применяются для доказательства потенциально возможной реализации некой идеи.

На практике эти языки бесполезны, но некоторые можно использовать для тренировки. Конечно, всё это тоже условно, поскольку есть, например, язык, построенный на трёх символах — пробел, табуляция и конец строки. Что и как с его помощью можно тренировать?

Но вернёмся к Malbolge. Общеизвестный факт, что даже его создатель так ничего и не смог написать на этом ЯП. Для создания очень простой программы Hello, World пришлось разработать другую программу, которая и смогла выполнить эту задачу.

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Сейчас есть несколько облегчённая версия языка, которая называется Dis. Также создан и Тьюринг-полный «диалект», который называется Malbolge Unshackled. Он ещё сложнее оригинала, гораздо сложнее.

Вот пример всё того же Hello, World, написанного на диалекте:
bCBA@?>=<;:9876543210/.-,I*)(E~%$#"RQ}|{zyxwvutsrD0|nQl,+*)(f%dF"a3_^] \[ZYXWVUTSRQJmNMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#dc~}|_^yrwZu tsrqpinPlOjihgf_dcEaD_^]\UZYX:V9TSRQPONGLK.IHGF?DCB$@#>=<;4987w/v3210/ .-,+$k('&%|#"!~w`{zyxwputslUponmlkjiKgf_Hcba`_^]\[ZYXWP9TSRQPONMFKJCHA *EDCBA@?>=<|:98y6543210).-,%*#j'&%$#"!~}|^ty\wvutslkTonmlkjcLafedc\aD_ X]\[TY<WVOTSLQ4ONMFKDC,GFEDC<A$9>=<;49z765.3,+r/.-,l*)(!h%$#"!~}|{zyxw vunWrqponmlkjihgfed]Fa`_^]\[ZYXW9UTSRK4ONMLKJIHGFEDCBA@?8!<;:987654321 0/.-,%l)('&%$#"!~}|^t]xqvYnsrqpinQlejihafIdc\a`Y^A\[ZSXQ:8NSRQJ3NMLKJI HGFEDC%;$?8=<}49876543210qp',+*)('&%$#"!b}`{zyrwpuXmrqpohmlOdihgfedcba `_^]\?=S<WPU8SRQJOHM0EJIHG@ED'<A@?>=<;:987654us+r/(-,m*#('&%$#"!~a`{ty xwvutsrqpoRmPkjibg`eHcb[`_X]@UZYXWPUT7RKPONMLKJIHGFED'%;$?8=~;:387054u 2+0/.-,+*)('&%$ecyb}v{z]xwputsrqponQPkjchgfedcba`_B]@[ZSXWPU8SLQPOHML/ JIBGFEDCBA@?>=<}{3z705v321*/(om%*)j'&}$#"!~}|{zyxwZXnWrkpoRmlkdihgfedc FE`_^W\[ZYXWVUT7R5PONGLEJ-HG@ED=B%@9>=<5:9z765.3210/.-,+*)jh~g${"c~}v{ zsxwZutslqponmlkjihgJH^Gb[`_B]\[ZSXWVUTS65PONMFKJIHGFED'B%@?>7<5:9z765 4-210/.-,+*)jh~g${dbx}|_zyxwputsrqponmlOMcLg`edGba`_^W\[ZYX;:UTSRQJONM LKJI,G*EDC<A:?"=<5:927x5.321*/p',+*)"'&g$#"!~w|{zyxwvutWUkTohmlOjihgf_ dcba`_^]\?=S<WPUT7RQPONMLEJIH+*EDCBA@?8=<;:9z7x543,1*/.o,+*)('&}$#"!~} |_]s\wputWrqponmlejihgfedGE[D_X]\?ZYXWVUTSLQP32MLKJIHGF?DCBA$?"=<;4927 x54-21*/p-&+*)"'h}$#"!x}|_zyxwvutslqponmlOMcLg`edGba`_^]\[TYXWVUT75K4O HML/JIHGFEDCBA@9"=~;:987654321*/p-n+*)"'~%f#"y~}v{^sxwvunsrUponmlkjihg f_dcbECYB]V[>YXQVUNSR5PONMLKJIHGF?DCB%#9"=6;:{876543210/.-&m*)j'&%$#"! ~}|{zs\wZutslqjoRmfkjibgfIdcba`_^]\[ZYRWV97M6QJ31GLK.IHGFEDCBA@?>7<;|z 2y6/43t10/.-,+*)('&%|e"!~a|{zyxwvutsrqpiRmlOjibgf_dGb[`_^W\[>YXWVUTSRQ PONMFK.,B+F?DC&A@?>=<;:98765.3tr*q.',+l)('&%$#"!~}|{zs\wvutWrqponmlkji hgfe^Gba`C^]\UZSX;VUNSRKP3HMLKJCHG*EDCBA@?>=<;:981xv.u2+0/p-,+*)('&%$# "!~w`^t]xqvuXsrqponmlkjihgfe^Gba`_^A\[ZYXWVUTSRQPONG0KJIH+FED=B;@?"=<; :9876543210/(o,l$k(!hf|#"c~}|{zyxwvutsrqpiRmOeNibgfIdcba`_^]\[ZYXWVUN7 RQPONM0KJIHGFEDCBA@?>=<5|98765v3,10/(-n%*)('~%$e"!~}|{zyxwvutsrqjSnmOe NibgJe^cbaZ_^A\[ZYXWVUTSRQPONMF/JI+A*E>CB%@?>=<;:9876543210)p-,+*)('h% $#"!~}|{zyxwvutslUponmlkNihg`e^cbE`_^]\[ZYXWVUTSRQPI2MLK-C,G@E(CB;@?8= ~;498705v-210/(om%*)j'&%$#"!~}|{zyxwvunWrqpRhQlejiLgfedcba`_^]\[ZYXWVO 87RQ4ONMLKJIHGFEDCBA@?>7~}:{876/4-2s0/(-,%*k"'&%${"!b}|{zyxwvutsrqponm leNihgfH^Gb[`C^]V[ZSXW:UTSRQPONMLKJIHGFED=&A@?>~6}:387x543210/.-,+*)(' &%$#zc~a|{^yxwvutsrqponmlkjihg`IdGbE`_X]\UZ=XQVUTMRQ4ONMLKJIHGFEDCBA@? >=6}:9876v.u2+0q.-,%*#jh~%$e"!~}|{zyxwvutsrqpongPkjihgI_Hc\a`C^]\?TY<W VUTSR5PO2MLK.CH+FEDCBA$?"=<;4927x54-21*/p-&+*)"'h}$#"!x}|_zyx[puXsrqpo nmlkjLbKf_dGba`Y^W\?ZSXWVOTS6QPO2GL/JIHGFEDCBA#9"=6;:{876w4321*/.o,+*) ('&%$#"c~}`{zy\wvutmrqTonmlkjihgfeHcFa`_X]V[>YRWVUNS6KPONMFKJ-HGF)DCBA :?>!<;:9876543210/.n&m*#('h%$#d!~}|uzy\wvutsrqponmlkjiKaJe^cbED_XA\[ZY XWVUTSR5PO21LE.IHGFEDCBA@?"=~;:92705v32+0/(-n%*)('~%$ed!xa|{zyxwvutsrq ponPfOjchgJId]Fa`_^]\[ZYXWVUTS5K4OHML/.IHA*EDCBA@?>=<;:{87xw43,s0/.-,+ *)('&%f#"cb}|u^yxwvutsrqponmlkjLbKf_dcFE`_XA\[ZYXWVUTSRQPONM/E.IBGF)(C BA:#>=<;:98765432s0/po,+*#j'&%$#"!~}|{zy\wZunsrqjoRglkjibgfIHcbaZC^]\[ ZYXWVUTSRQPON0F/JCH+F?DCB;@?"!<;:3z76543210/.-,+*)('g}f#z!~a`{zyxqvuts rqponmlkjihKfeHGba`_X]\[ZYXWVUTSRQPO2M0KJCHG@E(=BA@?8=<}|9876/43210/.- ,+*)('&%$#"bxa|uzy\[vutslqponmlkjihgfedcba`_AW@[TYX;:UTSRQJONMLKJIHGFE DCB%@?"!<;:9816543210/.-,+*)j'h%$#z!x}`uzyxwputWVqponmfkjihgfedcba`_^] \[Z<R;VOT7RQPINGL/DIHGF?DC&%@?>=<5:9876543210/.-,+*)i!h%|#"cb}|{zyxqvu tsrqponmlkjMhgJIdcba`_X]\[ZYXWVUTSRQ4O2MLKDIBG*ED=BA:?"7<;:9276wv3210/ .',+*)('&%$#"!~}|{z\r[votWrqjonglkNMhgfedc\a`_^]\[ZYXWVUTSRQ3I2MFKJ-,G FEDCBA:?>=<;:987654u21rq.-,+*)(!&%$#"!~}|{zy\wZutmrqjoRmfkjibgfIHcba`_ ^]V[ZYXWVUTSRQPONML.D-HAF)DCB;@9"~6;:{z7654321*/.-,+*)('&%$#"!~`v_zsxw vutmVqponmlkjihgJedcbaZC^]\[ZYXWVUT7R5PONGLEJ-HG@ED=B%@9>=<5:{27654-21 0/.'n+*)('&%$#"!~}|{]s\wpuXsrqjohmPkdihg`edcbaZC^]\[ZYXWVUTSRQP2H1LEJI HGFEDCBA:#>=<;:98765432+r/.-,+*)('&%$#zc~`v_zs\ZputsrqponmleNiKaJe^cba `_^]\[ZYRWVUTSRQPONMLKJIHGFEDCBA@?>=<;:98y65432s0/.-,+*)('&}$#"!~}|{zy xwvutsrqponmlkjihgfedcFa`_^]@[>YXWPUNSRQPONMLKJIBGFEDCBA@?>=<;:9876543 210/.-,+*)(i&%$#"!~}|^t]xqvutsrqponmlejihgfedcba`_^]\[ZYXWVUTSRQPONMLK .IHGFEDCBA#9"=6;:9876543210/(-,+*)('&%$#"!~}|{zyxwvutsrqponQlkjihKfedc ba`_^]\[ZSXWVUTSRQPONMLKJIHGFEDCBA@?>=<;|98765v3t10).-&+l)"'&%|#dy~}|{ tyxwvutsrqponmfkjihgfedcba`_^]\[ZYXWVUTSRQPON1LKJIHGFED&<%@9>!<;49816w 4-210).-,+*)('&%$#"y~}|{zyxwvutsrqponmlkjihgfedcbaD_^]\[ZYXW9O8SLQPONM LKJIHGFED=BA@?>=<;:9876543210/.-,+*)('&g$#"!~a|{zyxwvutsrqpohmlkjihgfe dcba`_^]\[ZYXWVUTSRQ4ONMLK.I,GFE>C<A$?8=<;49z16543,10/.-,+*)('&%${"!~} |{zyxwvutsrqponmlkjihgfedGba`_^]\[Z<R;VOT7RQPINGL/JCHGF?DCBA@?>=<;:987 0543210/.-,+*)('&%$#"!~}|{zyxwZutsrqponmOeNibgfedcba`_^]\[ZYRWVUTSRQPO NMLKJIHGFEDCBA@?>=<}:9876w43210/.-,+*)('&}$#"!~}|{zyxwvutsrqponmlkjihg JedcbaD_^]\[ZYXWVUTSRQJONMLKJIHGFEDCBA@?>=<;:987654u210/.-,+*j"i&}$e"y ~}|uz]rwvutmVTjonmlkjihgfedcbaZ_^]\[ZYXWVUTSRQPONMLKJIHGFED'BA@?>=<;:z 2y6/43210q(-,+*)('&%$#"!~}|{zyxwvutsrqTonmlkNihgfeH]ba`_^]\[ZYXWVUTSRQ PONMLKJIH+FEDCB%@#>=6;:387654u,10/.-,+*)('&%$#"!~}|{zyxwvuXsrqponmlkMc Lg`eHc\a`_X]@UZYXWP97MRQPON1FKJIHGFEDCBA@?>=<;:987654321r/.-,+*)('g}f# z!~}|{^yrwvutsrqponmlkjihgfedcba`_^A\[ZYX;VUTSR5PINMLKJIHGFEDCBA@?>=<; :98765v3210/p-,+*)j'~%$#"!~}|{zyxwvutsrqponmlkjMhgfedcba`BXA\UZ=XWPUTM R5JONMLE.,BGFEDC&A:?>=<;:9876543210/.-,+*)('&g$#"!~}|{z\r[votsrqpSnmfk jihgfedcba`_^]\[ZYXWVUTS6QPONM0KJIHG*ED=BA@?>=<;:9876543210/.-,+*k('&% $e"c~}v{zsx[votsrkponmlOjibgfedcba`_^]\[ZYXWVUTSRQPO2MLKJIHGFE'=&A:?"= 6;:9276543t10).-,+*)('&%$#"!~}|{zyxwvutWrqponmlkjLbKf_dcba`C^]\UZYXWVU TSRQPONMLKJIHGFEDC&A@?>=~;:987x543,10/.-,+*)('&%$#"!~}|{zyx[vutsrUponm lOjihafedcba`_^]\[ZYXWVUTSRQPO2MLKJIHGFE'=&A:?"=<;4927x5.321*/p',+*)"i g}$#"!~a|{zsxwvutsrqponmlkjihgfedcbaD_^]\[ZYXW9O8SLQPONM0KJIHGFEDCB;@? >=<;:9876543210q.-,+*k('&%$e"!~}|{zyxwputsrqponmlkjihgfeHcba`_B]@[ZYRW PU8SRKPOHM0KDIHG@E(=BA@?8=<;:9z76543210/.',+*)('&%$#"!~}|{z]xwvutsrqpR hQlejMhg`ed]bE`Y^]\UZ=RWVUTMRQPON1LKJIHGFEDC<A@?>=<;:987654321r/.-,+*) ('g}f#z!~}|{^yxwvutsrUjonmlkjihgfedcbE`_^]\?ZYXWV9TSRQPONM0EJIHGFEDCBA @?>=~;:987x5v321*/(-n+$)('~%f{"!~}v{zyxwZutsrqponQfkjihgfedcba`_^A\[ZY XWVUT6L5PIN1LKJCHAF)D=BA@9>=<;:{87654321r).-,+*)('&%$#"!b}|{zyxwvuWmVq jonmPeNihgfedcba`_^]\[ZY<WVUTS6QPO2G0KJIHGFEDCBA@?>=<;|98765v3t10/(-&+ l)"'&%|#dy~}|{tyxwZoXsrqponmlkjihgfedcFa`_^]\[ZY;Q:UNSRQ4I2MLKJIHGFEDC BA@?>=~;:9876543s+r/(-,+l)"'h%$#"!~}|{zyxwvutsVqponmPkjiLg`eHcba`_^]\[ ZYXWVUTS6QPONM0K.IHG@E>C&A:?>=6;|38765.321r/(-n+*)('&%$#"!~}|{zy\wvuts rqpoQgPkdihgJe^cFa`_^]\[ZYXWVUTSRQ4ONMLKJIHG)?(C<A@?"=<5|9876543210/.- ,+*)j'&%$#d!~}`{zs\wvutsrqponmlkjihgJedcbaD_B]\UZYRW:OTSRQJONM0KJC,GFE DCBA@?>=<;:987x543210/.-m%l)"'h}$#"!x}|{^yxqZutsrqponmlkjihgfeHcba`_^] \[=S<WPUTS6QPOHM0KJIHGFEDCBA@?>=<;|98765v321r/.-&+l)('&%$#"!~}|{zyxwZu tsrqToRmlkdibgJed]baZ_BW\[ZYRWVU8SRQJO2MLKJIHGFEDCBA@?>=~;:9876543s+r/ (-,+l)('~%f#"!~}|{zyxwvutsrqTonmlkjihgI_Hc\a`_B]\[ZYRW:UTSRQPONMLKJIHG FE(CBA@?"=<;|98765.3t10/.-,+*)('&%$#"!b}|{zy\wZunsrqjoRglkjibgfeHcba`_ X]@[ZYXWVUTSRQPONMLK.IHGFEDCBA#9"=6;|92765.321r/.-,+$)j'&%$#"!~}|{zyxw vuXsrqponmlkMcLg`edcFa`_^]\U>YXWVUTSRQPONMLKJI,GFEDC&A@?"=<;:981x54321 0/.-,+*)('&%f#"!~}`{^yxwpunsVqpinmfkNchgfe^cbaD_^]\[ZS<WVUTSRQPONMLKJI HG*EDCBA@?>=}5|92765v3210/.'n+*)('&%$#"!~}|{zy\wvutsrqpoQgPkdihgJedcba `_^W@[ZYXWVUTSRQPONMLK.IHGFE(CBA$?>=<;:981x543210/.-,+*)('&%f#"!~}`{^y rwvunsVkponmfkjiLgfedcba`YB]\[ZYXWVUTSRQPONM0KJIHGFEDC%;$?8=~;49870543 t10/.-,+*#j'&%$#"!~}|{zyxwvuXsrqponmlkMcLg`edcFa`_^]\[ZYRW:UTSRQPONMLK JIHGFE(CBA@?"=<;|987654321*/p-,+*)('&%$#"!~}|{^yxwvuXsVqpohmfkNihafe^c F[`_^]V[ZY<WVUTSRQPOHM0KJIHGFEDCBA@?>=<;|987654321q)p-&+*)j'&%$#"!~}v{ ^yxwvutsrqponmlkjiLgfedcba`_AW@[TYXW:UTSRQPONMLKDI,GFEDCBA@?>=<;:987x5 4321r/.-n+*)('&%$#"!x}`{zyxwvutsrqponmlkNihgfeHcFaZ_^]V[>SXWVUNSRQ4ONM LKJIHGFE>C&A@?>=<;:987654321r/.-,+*)('g}f#z!b}v{zyrwvuXsrqponmlkjibgJe dcba`_^]\[ZYXWVU8SRQPONMLK-C,G@EDC&A@?>=<;:9876/v3210/.-,+*)('&%$#d!~} |{^yxwZutsrqponmlkjcLgfedcba`_^]\[ZYXW:UTSRQ4O2MLKDIBG*ED=BA:?"7<;:927 65v3210/.-,+*)(!h%$#"!~}|{zyxwvutsVqponmlkjiKaJe^cbaD_^]\[ZYXWVUTM6QPO NMLKJIHGFEDCBA$?>=<;:987w/v3,10/p-,+*)('&%$#"!x}`{zyxwvutsrqponmlkNihg feHcbaD_^]\[ZYXWVUTSLQ4ONMLKJIHGFEDCBA@?"=<;:9z765v3210/.-,+*)('~%f#"! ~}|{zyxwvutsrqTonmlkjihgI_Hc\ECY^]\?ZYXWVUTSRQPONGL/JIHGFEDCBA@?>=<;:{ 876543210p(o,%*)(i&%$#"!~}|{zyxwpYtsrqponmlkjihgfedGba`_^A\[Z=XWVUTSRQ PONMLKD-HGFEDCBA@?>=<;:98y65432s0q.',+*#(i~%$#"y~}|_zyxwvutsrqponmfOji hgfedcba`_^]\[Z=XWVUTSRQP2H1LEJ-HAFED=BA@#>=<;:987654321*q.-,+*)('&%$# "!~}|_zyxwvutsrTjSnglkjMhgfedcba`_^]\[ZSX;VUTSRQPONMLKJIHGF)DCBA@#>=<} :9876543210/.-,%*k('&%$#"!~}|{zyxwvYtsrqpSnQlkdihafI^cba`Y^]\?ZYXWVUTS RQPONMLEJ-HGFEDCBA@?>=<;:98y6543210/.n&m*#('&g$#"!~}|{zyxwvutmrUponmlk jihgfedcba`C^]\[ZYXWV8N7RKPON1LKJIHGFEDCBA@?>=6}:9876543210/.-,+*k('&% $e"!~a|{zyxwvutsrqponmfOjihgfedcba`_^]\[Z=XWVUT7R5PONGLEJ-HG@ED=B%:?>= <5:98y6543210/.-,+*)('~g$#"!~}|{zyxwvutsrUponmlkjihJ`Id]bE`_X]\UZYX;VU TSRQPONMLKJIHG@)DCBA@?>=<;:987654u210/.-,+*j"i&}$#"c~}|{zyxwvutsrqpong lOjihgfedcba`_^]\[Z=XWVUT7RQP3NMLKJIHGFEDCBA@?>7<}:9876543210/.-,+*k(' &%$e"c~}|uzsx[votsrkponQlkjihgfedcba`_^]\UZ=XWVUTSRQPONMLKJIH+FEDCBA@? >~6}:3zx0543t10/.-,+*)('&%$#"!x}`{zyxwvutsrqponmlkNihgfedcbaCYB]V[ZY<W VUTSRQPONMLKJIHGFEDCBA@?>=<;:98765432+r/.-,+*)('&%$#"!~}`{zyxwZutsVqpo nmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLE.IHGFEDCBA@?>=<;:9z76543t1r/.-&+$) j'~%$#z!bw|{zyrwvuXsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONG0KJIHGFEDCBA @?>=<;|987654321q)p-&+l)('~%|#d!x}|{ty\qvutslqpoRmlkjihgfedcba`_^]\[ZY XWVUTSRQPONMLKJIHA*EDCBA@?>=<;:98765v3210/.-,+k#j'~%$#d!~}|{zyxwvutsrq ponmlkjihgfedcba`_^]\[ZYRW:UTSRQPONMLKJIHGFE(CBA@?"=<;|9876543210/.-,+ *)('&%$#"!~}|{zyxwvutsrqjoRmlkjihgfedcba`_^]@[ZYXW:U8SRQJOHM0KDIHG@E(= BA@?8=<;|9876543210/.-,+*)('&%$#"!~}|{zyxwvutsrqjoRmlkjihgfedcba`_^]@[ ZYXWVUTS5K4OHMLK.IHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#z!b}|{zyxwvuts rqponmPkjihgfedcE[D_X]\[>YXWVUTSRQPONM0E.IHGFEDCBA@?>=<;:9z76543t10/p- ,+*)('&%$#"!bw`{zyxwvutsrqponmlkNihgfeHcFa`_X]V[>YRWVUNS6KPONMFKJI,GFE DCBA@?>=<;|3z76543210/.-,+*)('h%$#"!~}|{]s\wputsVqponmlkjihgfeH]Fa`_^] \[ZYXWVUTSRQ4ONMLKJIHG)?(C<A@?"=<;:987654321r/(-n+*)('&%$#"!~}|{zy\wvu tsVqpoRmlkjihgfedcbaD_X]@[ZYXWVUTSRQPONMLK.IHGFE(C&A@?8=6;|92765.3t+0/ .-&+*)j'&%$#"!~}|{zy\wpuXsrqponmlkjihgfedcFa`_^]\[ZY;Q:UNSRQ4ONMLKJIHG FEDC&A:?"=<;:9876543210/.-n+*)('&%$#cyb}v{zy\wvutsrqponmlkNihaJedcba`_ ^]\[ZYXWVU8SRQPO2MLK.IHGFEDCBA@?>=~;:3z76543210/.-,+*)('h%$#"!b}`{zyrw puXslqpohmPejihg`edcFa`_^]\[ZYXWVU8SRK4ONMLKJIHGFEDCBA@?"=<;:98765u-t1 */p-,+$)"'h%|#"!x}`uzyxwputsVqponmlkjihgfeHcb[D_^]\[ZYXWVUTSRQPO2MLKJI HGFE'=&A:?>=~;:9876543210/p-,+$)j'&%$#"!~}|{zyxwvuXsrqpoRmlkNihgfedcba `_^]@[ZYRW:UTSRQPONMLKJIHGFE(CBA@?"=~;:92705v3,10/(-n%*)('~%$#d!~}|{zy xwvutsVqpohmPkjihgfedcba`_^]\[>YXWVUTSRQ3I2MFKJI,GFEDCBA@?>=<;|98705v3 210/.-,+*)('&%$#d!~}|{zyxwYoXslqpoRmlkjihgfedcbaD_^]\U>YXWVUTSRQPONMLK JI,GFEDC&A@?"=<;:987654321r/.-,%l)('&%$#"!~}|{zyxwZutsrqToRmlkdibgJe^c baZ_BW\[ZYRWVU8SRQPONMLKJIHG*EDCB;$?>=<;:9876543210/p-,+*)('&%e{d!x}|{ ^yxwvutsrqponmPkjihaJedcba`_^]\[ZYXWVU8SRQPONMLK-C,G@EDC&A@?>=<;:98765 v3210/(-n+*)('&%$#"!~}|{zy\wvutsVqpoRmlkjihgfedcbaD_^]\[TY<WVUTSRQPONM LKJIHG*EDCBA$?"=<;4927x5.321*/p',+*)"'&%f#"!~}|{zyxwvuXsrqpohmPkjihgfe dcba`_^]\[>YXWVUTSRQ3I2MFKJI,GFEDCBA@?>=<;|98765.3t10/.-,+*)('&%$#"!b} |{zyxwvuWmVqjonmPkjihgfedcba`_B]\[ZYXQ:UTSRQPONMLKJIHGFE(CBA@?"=<;|987 6543210/.-n+*)('&}f#"!~}|{zyxwvutsrqTonmlkNiLgfe^c\aD_X]\[TY<QVUTSLQPO 2MLKJIHGFEDCBA$?>=<;:3z76543210/.-,+*)('h%$#"!~}|{]s\wputsVqponmlkjihg feHcba`_^W@[ZYXWVUTSRQPONMLK.IHGFEDCBA#9"=6;:9z76543210/.-,+l)('&%$#z! b}|{zyxwvutsrqponmPkjihgJedcFa`_^]\[ZYXWVU8SRQPONMFK.IHGFEDCBA@?>=<;:9 z76543t1r/.-&+$)j'~%$#z!bw|{zyrwvuXsrqponmlkjihgJedcba`_X]@[ZYXWVUTSRQ PONMLK.IHGFEDCBA#9"=6;:9z76543210/.-,+l)('&%$#z!b}|{zyxwvutsrqponmPkji hgfedcE[D_X]\[>YXWVUTSRQPONM0KJIHGFED=&A@?>=<;:987654321r/.-,+l)('h%$# "!~}|{zyxwZutsrqpongPkjihgfedcba`_^]\[>YXWVU8S6QPOHMFK.IBGFE>C&;@?>=6; :9z76543210/.-,+l)('&%$#"yb}|{zyxwvutsrqponmPkjihgfedcE[D_X]\[>YXWVUTS RQPONM0KJIHGFED=&A@?>=<;:987654321r/.-,+*)('g}f#z!~}`{zyxwvutsrqpoRmlk jihgfe^cFa`_^]\[ZYXWVUTSRQ4ONMLK.IHG*EDCBA@?>=<;:9z76543210/(-n+*)('&% $#"!~}|{zy\wvutsVqTonmfkdiLgf_dc\aD_X]\[TY<QVUTSLQPO2MLKJIHGFEDCBA$?>= <;:98705v3210/.-,+*)('&%$#d!~}|{zyxwYoXslqpoRmlkjihgfedcbaD_^]\[ZYXWPU 8SRQPONMLKJIHGFEDC&A@?>=<;:9y1x5.321r/.-,+*)('&%$#d!~}|{zyxwvoXsrqponm lkjihgfedcFa`_^]@[ZY<WVUTSRQPONMLK.IHGFEDCBA@9"=<;:9876543210/.-n+*)(' h%f#"y~}v{^sxwvunsrqTonmlkjihgfedcFa`_^]\[ZYXQ:UTSRQPONMLKJIHGFE(CBA@? >=<;{3z70543t10/.-,+*)('&%f#"!~}|{zyxqZutsrqponmlkjihgfeHcba`_^]\[=S<W PUTS6QPONMLKJIHGFE(CBA@?>=<;:927x543210/.-,+*)('&%f#"!~}`{zy\wvutsrqpo nmlkNihgfedcba`_X]@[ZYXWVUTSRQPONMLK.IHGFE(C&A@?8=6;|98165.3t1*/.-&+l# ('&%|#"!b}|{zyxwvutsrqTonmlkjihgfe^cFa`_^]\[ZYXWVUTSRQ4ONMLKJIHG)?(C<A @?"=<;:987654321r/.-,+*)('&%|#d!~}|{zyxwvutsrqpoRmlkjihgfeG]FaZ_^]@[ZY XWVUTSRQPO2MLKJIHGFEDCBA@9"=<;:9876543210/.-n+*)('h%$#d!~}|{zyxwvutsVq ponmlkjihgfed]Fa`_^]\[ZYXWVUTSRQ4ONMLK.I,GFE>C<A$?>7<;49z70543,1r).-,+ $)('h%$#"!~}|{zyxwZutsrqponmlkjihaJedcba`_^]\[ZYXWVU8SRQPONMLK-C,G@EDC &A@?>=<;:98765v3210/.-,+*)('&}f#"!~}|{zyxwvutsrqTonmlkjihgI_Hc\a`_B]\[ ZYXWVUTSRQ4ONMLKJIHGFEDCBA@?8=~;:9876543210/.-,+l)('&%f#"!b}|{zyxwvuts rqTonmlkjihgfedcba`_X]@[ZYXWVUTSRQPONMLK.IHGFE(CBA$?>=<;:9876543t10/.- ,+*)('&%$#"!x}`{zyxwvutsrqponmlkNihgfedcbaCYB]V[>YXQVUNS6QJONMFK.CHGFE >'%;@?>!<;:9876543210q.-,+*)('&%$#"!~}|uz]xwvutsrqponmlkjihKfedcba`_^@ V?ZSXWV9TSRQPONMLKJIH+FEDCBA@?>=<;:98765.u210/.-,+*)('&%$#"c~}|{z]xwvY tsrqponmlkjihKfedcba`_^]\[ZYXWVUN7RQPONMLKJIHGFEDCB%@?>=<}:{876/4-2s*/ .-,%*)(i&%$#"!~}|{zyx[vutsrqponmlkjihgfe^Gba`_^]\[ZYXWVUTSR5PONMLKJIH* @)D=B%:?>=<5:98y6543210/.-,+*k('&%$#"!~}|{zyxwvunWrqponmlkjihgfedcbE`_ ^]\[ZYX:P9TMRQP3NMLKJIHGFEDCB%@?>=<;:9876543210/.',m*)('&%$#"!~}|{zyx[ vutsrUponQlkjihgfedcba`C^]\[ZYXWVUTSRQPONMLEJ-HGFEDCBA@?>=<;:98y65432s 0q(-,+*#('&g$#"!~}|{zyxwvYtsrqponmlkjihgfedcb[`C^]\[ZYXWVUTSRQPON1LKJI HGFED&<%@9>!6;:981654u210/.-,+*)('&g$#"!~}|{zyxwvutsrqpinQlkjihgfedcba `_^]\?ZYXWVUTSR4J3NGLKJ-HGFEDCBA@?>=<}:9876543210/.-,+*)('~g$#"!~}|{zy xwvutsrUponmlOjihKfedcba`_^]\[Z=XWVUTSRQPONMLKJIHGFE>'BA@?>=<;:9876543 2s0/.-,m*k('&}${"c~}v{zsxwvYtsrqponmlkjihKfedcba`_^]\[ZYXWVUTSL5PONMLK JIHGFEDCBA@#>=<;:9876v.u2+rp(-,+l)('&%$#"!~}|{^yxwvutsrqponmlkjihgf_Hc ba`_^]\[ZYXWVUTS6QPONMLKJI+A*E>CBA$?>=<;:9876543t10/.-,+*)('&%$#"!~}|{ ty\wvutsrqponmlkjihgJedcbaD_^]@[ZYXWVUTSRQPO2MLKJIHGFEDCBA@?>=<;:927x5 43210/.-,+*)('&%f#"!~}`{^yxwpunsVqjonmfkjiLgfedcba`_^]\[>YXWVUTSRQPONM LKJIHGFE>C&A@?>=<;:987654321r/.-,+*)('g}f#z!b}|uzyr[YotsrUponmlkjihgfe dGba`_^]\[ZYXWVUTSRQPONGL/JIHGFEDCBA@?>=<;:{876543210p(o,%*)(i&%$#"!~} |{zyx[vutsrqponmlkjihgfedcbaZC^]\[ZYXWVUTSRQPON1LKJIH+FED'BA@?>=<;:987 6w43210/.-,+*)('&%$#"!~}v_zyxwvutsrqponmlkjMhgfedGbE`_^W\UZYX;VUTSRQPO NMLKJ-HGFEDCBA@?>=<;:9876543,s0/.-,+*)('&%$#"!~a|{zyxwvutVlUpiRPfkjiLg fedcba`_^]\[>YXWVUTSRQPONMLKJIHGFED=&A@?>=<;:987654321r/.-,+*)('g}f#z! ~}`{zyxwvutsrqpoRmlkjihgfedcba`_^]\[ZYXWPU8SRQPONMLKJIHGFEDC&A@?>=~;:9 z76543210/.-,+l)('&%$#"!~}|{zyxwvutsrqjoRmlkjihgfedcba`_^]@[ZYXW:UTS6Q PONMLKJIHGFE(CBA@?>=<;:9876543210/.-&+l)('&%$#"!~}|{zyxwZutsrqponmOeNi bgJedc\aZCAW\[Z=XWVUTSRQPONML/JIHGFEDCBA@?>=<;:987654-2s0/.-,+*)('&%$# "!~a|{zyxwvutVlUpinmlOjihgfedcba`_^A\[ZYXWVUTSRQPONMLKJIHGFE>'BA@?>=<; :98765432s0/.-,m*)(i&%$#"!~}|{zyx[vutsrqponmlkjihgfedcba`_XA\[ZYXWVUTS RQPONML/JIHGF)DCB%@?>=<;:987654u210/.-,+*)('&%$#"!~}|{zyr[vutsrqponmlk jihgfIdcba`_^]\>T=XQV9TSLQPIN1LEJIHAF)>CBA@9"~6;:9z76543210/.-,+l)('&% $#"!~}|{zyxwvutsrqpiRmlkjihgfedcba`_^]@[ZYXWVUTS5K4OHMLK.IHGFEDCBA@?>= ~;:9876543210/.-,+*)('&%$#z!b}|{zyxwvutsrqponmPkjihgJedcFa`_^]\[ZYXWVU 8SRQPONMLKJIHGFEDCBA@?>=<;49z76543210/.-,+*)('h%$#"!b}|{^yxwvutsrqponm Pkjihgfedcba`_^]\[ZYXWVUTSLQ4ONMLKJIHGFEDCBA@?"=<;:98765u-t1*/.-n+*)(' &%$#"!~}`{zyxwvutsrqponmlkjihgfedc\aD_^]\[ZYXWVUTSRQPO2MLKJIHGFE'=&A:? >=~;:9876543210/p-,+*)('&%$#"!~}|{zyxwvutsrkTonmlkjihgfedcba`_B]\[ZY<W VU8SRQPONMLKJIHG*EDCBA@?>=<;:9876543210/.-,%l)('&%$#"!~}|{zyxwZutsrqTo RmlkdibgfeHcba`_^]\[ZYXW:UTSRQPONMLKJIHGFEDCBA@?>=<5|9876543210/.-,+*) j'&%$#"!~}_u^yrwZutmrqjoRmfkjibgJ_dcbaZCAW\[Z=XWVUTSRQPONML/JIHGFEDCBA @?>=<;:987654321*q.-,+*)('&%$#"!~}|_zyxwvutsrTjSnglkjMhgfedcba`_^]\?ZY XWVUTSRQPONMLKJIHGFEDCBA@9>!<;:9876543210/.-,m*)('&g$#"c~}|{zyxwvutsrU ponmlkjihgfedcba`_^]\[ZYXWVOT7RQPONMLKJIHGFEDCB%@?>=<}:{876/4-2s*/.-,% *)(i&%$#"!~}|{zyx[vutsrqponmlkjihgfedcba`_^]\UZ=XWVUTSRQPONMLKJIH+FEDC BA@?>~6}:38y654-2+0q(-,+*#('&g$#"!~}|{zyxwvYtsrqponmlkjihgfedcba`_^]\[ ZSX;VUTSRQPONMLKJIHGF)DCBA@?>=<|4{81654u210/.-,+*)('&g$#"!~}|{zyxwvuts rqponmlkjihg`Idcba`_^]\[ZYXWVUT7RQPON1LKJ-HGFEDCBA@?>=<}:9876543210/.- ,+*)('&%$#"!~}v_zyxwvutsrqponmlkjMhgfedGbE`_X]\UZ=RWVUTMRQP3NMLKJIHGFE DCB%@?>=<;:9876543210/.-,+*)('&%|e"!~}|{zyxwvutsrqpSnmlkjihgfH^Gb[`_^A \[ZYXWVUTSRQP3NMLKJIHGFEDCBA@?>=<;:9876543,s0/.-,+*)('&%$#"!~a|{zyxwvu tVlUpinmlOjihgfedcba`_^A\[ZYXWVUTSRQPONMLKJIHGFEDCBA@9>!<;:9876543210/ .-,m*)('&g$#"c~}|{zyxwvutsrUponmlkjihgfedcba`_^]\[ZYXWVUTMR5PONMLKJIHG FEDCBA@#>=<;:{8y654-2+0q.-&+*#(i~%$#"y~}|_zyxwvutsrqponQlkjihgfedcba`_ ^]\[ZYXWVUTSRQPIN1LKJIHGFEDCBA@?>=<}:98765432r*q.',m*)"'&}$#"c~}|{zyxw vutsrUponmlkjihgfedcba`_^]\[ZYXWVUTMR5PONMLKJIHGFEDCBA@#>=<;:9876v.u2+ 0/.o,+*)('&%$#"!~a|{zyxwvutsrqponmlkjihgfedcba`_XA\[ZYXWVUTSRQPONML/JI HGF)DCB%@?>=<;:987654u210/.-,+*)('&%$#"!~}|{zyxwvutslUponmlkjihgfedcba `C^]\[Z=X;VUTMRKP3NMFKJCH+F?DCB;@?>!<;:9876543210q.-,+*)('&%$#"!~}|{zy xwvutsrqpohQlkjihgfedcba`_^]\?ZYXWVUTSR4J3NG0.DIHG*EDCBA@?>=<;:9z76543 210/.-,+*)('&%$#"!~}|{zyxqZutsrqponmlkjihgfeHcba`_^]\[=S<WPUTS6QPONMLK JIHGFE(CBA@?>=<;:9876543210/.-,+*)('&%|#d!~}|{zyxwvutsrqpoRmlkjiLgfeHc ba`_^]\[ZYXW:UTSRQPONMLKJIHGFEDCBA@?>=<;:98705v3210/.-,+*)('&%$#d!~}|{ ^y\wvotslqTinmlkdihgJedcba`_^]\[ZY<WVUTSRQPONMLKJIHGFEDCBA@?>=<;:927x5 43210/.-,+*)('&%f#"!~}|{zy[qZunsrqTonmlkjihgfedcFa`_^]\[ZYXWVUTSRQPONM LKJIHGFEDC<A$?>=<;:9876543210/p-,+*)('&%e{d!x}|{^yxwvutsrqponmPkjihgfe dcba`_^]\[ZYXWVUTSRQPONMLE.IHGFEDCBA@?>=<;:9z76543t10/p-,+*)('&%$#"!b} |{zyxwvutsrqponmlkjihgfedcba`_^W@[ZYXWVUTSRQPONMLK.IHGFE(C&A@?8=6;|981 65.3t+0/.-&+*)j'&%$#"!~}|{zy\wvutsrqponmlkjihgfedcba`_^]\[ZYXQ:UTSRQPO NMLKJIHGFE(CBA@?>=<;{3z705v32+0/(-,+l)('&%$#"!~}|{^yxwvutsrqponmlkjihg fedcba`_^]\[ZS<WVUTSRQPONMLKJIHG*EDCBA@?>=}5|92765v3210/.-,+*)('h%$#"! ~}|{zyxwvutsrqponmlkjihgfedc\aD_^]\[ZYXWVUTSRQPO2MLKJI,GFE(CBA@?>=<;:9 87x543210/.-,+*)('&%$#"!~}|{zyxwvutslqTonmlkjihgfedcba`_B]\[ZY<WVU8SRQ PONMLKJIHG*EDCBA@?>=<;:9876543210/.-,+*)('&%|#d!~}|{zyxwvutsrqpoRmlkji hgfeG]FaZ_B]\UZYRW:OTSRQJ31GLKJ-HGFEDCBA@?>=<}:9876543210/.-,+*)('&%$# "!~}|{zyxqvYtsrqponmlkjihgfedGba`_^]\[Z<R;VOTSR5PONMLKJIHGFED'BA@?>=<; :9876543210/.-,+*)('&%$#"!xa|{zyxwvutsrqponmlOjihgfIdcbE`_^]\[ZYXWVUT7 RQPONMLKJIHGFEDCBA@?>=<;:987654321*q.-,+*)('&%$#"!~}|_zyxwvYtWrqjonglO dihgf_dcbE`_^]\[ZYXWVUT7RQPONMLKJIHGFEDCBA@?>=<;:987654321*q.-,+*)('&% $#"!~}|_zyxwvutsrTjSnglkjMhgfedcba`_^]\?ZYXWVUTSRQPONMLKJIHGFEDCBA@?>= <;:92y6543210/.-,+*)('&g$#"!~}|{z\r[votsrUponmlkjihgfedGba`_^]\[ZYXWVU TSRQPONMLKJIHGFEDCBA@9>!<;:9876543210/.-,m*)('&g$#"c~}|{zyxwvutsrUponm lkjihgfedcba`_^]\[ZYXWVUTSRQPONGL/JIHGFEDCBA@?>=<;:{87654u2s0/.',%*k(' ~%${"cx}|{zsxwvYtsrqponmlkjihKfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFED=B%@? >=<;:9876543210q.-,+*)('&f|e"y~a|{tyxqvutWrqponmlkjihgfIdcba`_^]\[ZYXW VUTSRQPONMLKJIHGFEDCB;@#>=<;:9876543210/.o,+*)('&%$dzc~w|{z]xwvutsrqpo nmlOjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHG@)DCBA@?>=<;:987654u210/.o,+*k ('&%$#"!~}|{z]xwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUN7RQPONMLKJIHGFEDCB% @?>=<}:98y6543210/.-,+*k('&%$#"!~}|{zyxwvutsrqponmlkjihgfedc\E`_^]\[ZY XWVUTSRQP3NMLKJIHGF(>'B;@#>=<5:38y6/432+0q(-,+*#jh~%$#d!~}|{zyxwvutsVq ponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONG0KJIHGFEDCBA@?>=<;|98765v3210/.-,+ *)('&%$#"caa|{zyxwvutWUUponmlkjihKIIdcba`_^]\?==XWVUTSRQP311LKJIHGFED' %%@?>=<;:98yww43210/.-,mkk('&%$#"!~a__zyxwvutsrUSSnPlkjiLaJedcba`CXA\> ZS<QV97ML53O20FE.,,**((&&$$">=~5|9y70w.32s*q.n,+*)('h}f#"!~}|{z]r[vXtm VkpSQgfOMiLJ`_HFbECYXA??==;;99775Q42HG0.JIHG*?(C%A:#8=~|43zx6wu-,sqqoo mmkkiig%fdzyb`|{zy\qZutsrqponmlO*ihgfedcba`_^]\[ZYXWVUTS6QPONML/--gGFE DCBA@#!!<;:987654uss0/.-,+*)(igg$#"!~}|{z][[vutsrqponQOOjihgfedcbECC^] \[ZYXWV977RQPONMLKJ-++FEDCBA@?>!}}:98765432sqq.n,+*)j!h%$#"!~av_z\xqZo tWUkjSQQOkNLbaJHHFbECYXA??==;;997SR5J3N0LE.CH+)?>'%%##!!}}{98y0w4t210/ .-n%l)('&%$#"cxa|^zs\qvYWmlUSoRPfeNLLJJHdGE[ZCA]@>TS<::88664P31GF/-IHG F)>'B$@9"7<}{32ywwuussqqo-nl$#jhhffddb~a_ut][wvutWlUponmlkjihgJ%dcba`_ ^]\[ZY<WVUTSR533mMLKJIHGF)''BA@?>=<;:{yy6543210/.omm*)('&%$#"caa|{zyxw vutWUUponmlkjihKIIdcba`_^]\?==XWVUTSRQP311LKJIHGFED'%%@?>=<;:98yww4t21 0/p'n+*)('&g|e"b~w`uz][qpYWsVTjiRPPNNLLJJHdcF[D_A]V?TY<:PO86R53IH1//-- ++))'CB%:#>~<;:987x/v3210/.-,m$k(h&}f{"cawv_]y\ZpoXVrUSihQOkNLbaJHHFFD `CAWV?==;;9U86LK42NMLK.C,G)E>'<A$"87~||zzx6wu-,sqqoom+lj"!hf$#"!bw`{zy xwvutsrU0onmlkjihgfedcba`_B]\[ZYX;99srRQP3NMLKJIHG*((CBA@?>=<;|zz76543 210/pnn+*)('&%$#dbb}|{zyxwvuXVVqponmlkjiLJJedcba`_^]@>>YXWVUTSRQ422MLK JIHGFE(&&A@?>=<;:9zxx5u3210q(o,+*)('h}f#c!xav{^\rqZXXVrUSihQOkNLbaJHHF FDDBB@\[>S<W9UN7LQ42HG0..,H+)?>'%A$"87~||zzxxvvt21r)p-m+*)('&g|e"!~}|{ zy\qZuWslUjoRPfeNLhKI_^GEaDBXW@>Z=;QP97S64JI20L/-CB+))''%A$"87~|:987x/ v3s1*q(-nl$#jhhf$ecyxa_{^\rqZXXVVTpSQgfOMihgfI^Gba`_^]\[ZY<uVUTSRQPONM LKJIHGFED'BA@?>=~||X87654321rpp-,+*)('&%fdd!~}|{zyxwZXXsrqponmlkNLLgfe dcba`_B@@[ZYXWVUTS644ONMLKJIHG*((CBA@?>=<;|zz76543210/pnn+*)('&%$#dbb} _{zyx[pYtsrqpoRgPkMibK`eHF\[DB^A?UT=;W:8NM64P31GF/--++))''%%#?>!6}:z81 x/4us+*qo-nl$#jhhffddbb``^zy\qZuWsrqponQfOjihgfedcF[D_A]V?TY<:PO8664P3 1GF/-I,*@?(&&$@#!76}{{yyw5vt,+rp.-,+l#j'g%|ez!b`vu^\\ZvYWmlUSoRPfeNLLJ JHHFFD`CAWV?=YXWV9N7RQPONMLKJI,eFEDCBA@?>=<}:98765vttP0/.-,+*)jhh%$#"! ~}|{^\\wvutsrqpoRPPkjihgfedcFDD_^]\[ZYXW:88SRQPONMLK.,,GFEDCBA@?"~~;:9 876543trr/.-,+*)('hff#"!~}|{zy\ZZuWsrqpShQlkjihgJ_HcEaZCX]@>TS<:V97ML5 331M0.DC,**((&&$$""~<;|3z7w5.u,1rp('nllj(ig}|eccaa__]][[YutWlUpRnmlkji LaJedcba`_^AV?Z<XQ:OT75KJ311//--+G*(>=&$@#!76}{{yyw5vt,+rp.-,+l#j'g%|e z!b`vu^\xwvuXmVqponmlkjihK&edcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<; :987x543210qooK+*)('&%$ecc~}|{zyxwvYWWrqponmlkjMKKfedcba`_^A??ZYXWVUTS R533NMLKJIHGF)''BA@?>=<;:{yy6543210/.omm*)('&%$#"caa|{zyxwvutWUUpRnmlk NcLgfedcbEZC^@\U>SX;9ON7553O20FE.,H+)?>'%A$"87~||zzxxvvt21r)p-m+$k"'hf |{db~a_ut][wZXnmVTTRRPPNNLhgJ_HcEa`_^]\?T=XWVUTSRQ4I2M/KD-BG*(>=&$@#!7 6}{9zx0/vt2sq)(om+lj"!hffddb~a_ut][[YuXVlkTRnmlkNcLgIe^G\aDBXW@>><X;9O N755331M0.DC,**(D'%;:#!=<;:{2y6543210/.-nI*k('&%$#dbb>|{zyxwvuXVVqponm lkjiLJJedcba`_^]@>>YXWVUTSRQ422MLKJIHGFE(&&A@?>=<;:9zxx543210/.-nll)(' &%$#"!b``{zyxwvutsVTTonmlkjihgJHHcEa`_^AV?ZYXWVU8M6Q3OH1FK.,BA*((&B%#9 8!};|z21xvvttrrppn,+l#j'g%|ez!b`vu^\\ZvYWmlUSoRPfeNLLJJHHFFD`_BW@[=YXW VUT7L5PONMLKJI,A*E'C<%:?"~65|zzx6wu-,sqqo-nl$#jhhf$ecyxa_{zyx[pYtVrkTi nQOedMKKIeHF\[DB^]\[>S<WVUTSRQPON1jKJIHGFEDCBA@?>=<;:9876543210/.-,+*) ('&%$#"!~}|_zyxwvuXVV2ponmlkjiLJJedcba`_^]@>>YXWVUTSRQ422MLKJIHGFE(&&A @?>=<;:9zxx543210/.-nll)('&%$#"!b``{zyxwvutsVTTonmlkjihgJHHcba`_^]\[>< <W9UTSR5J3NMLKJI,A*E'C<%:?"~65|zzx6wu-,sq/pn&%ljjhhffddb~}`u^y[wpYnsVT jiRPlOMcbKIIGGEECCA]\?T=X:VUTSRQ4I2MLKJIHGF)>'B$@9"7<}{32yw5vt,+rppn,m k#"igge#dbxw`^z][qpYWWUqTRhgPNjihgJ_HcEaZCX]@>TS<:V97ML5331M0.DC,*FEDC &;$?>=<;:9876wR3210/.-,+*)('&%$#"!~}`{zyxwvYWW3qponmlkjMKKfedcba`_^A?? ZYXWVUTSR533NMLKJIHGF)''BA@?>=<;:{yy6543210/.omm*)('&%$#"caa|{zyxwvutW UUponmlkjihKIIdcba`_^]\?==X:VUTS6K4ONMLKJ-B+F(D=&;@#!76}{9zx0/vttrrppn nl*)j!h%e#zcx}`^ts\ZvYWmlUSSQQOOMMKgfI^GbD`_^]\[>S<WVUTSRQP3H1L.JC,AF) '=<%#?"~65|z8yw/.us1rp('nllj(ig}|ec!b`vu^\x[YonWUUSoRPfeNLhgfeH]FaC_XA V[><RQ:8866442N1/ED-+G*(>=&$$">!}54{y7654u,s0/.-,+*)('hC$e"!~}|{^\\8vu tsrqpoRPPkjihgfedcFDD_^]\[ZYXW:88SRQPONMLK.,,GFEDCBA@?"~~;:9876543trr/ .-,+*)('hff#"!~}|{zy\ZZutsrqponmPNNihgfedcbaDBB]?[ZYX;P9TSRQPO2G0K-IB+ @E(&<;$""~<}{32ywwu3tr*)pnnlljjhhf$#dyb}_{t]rwZXnmVTTRRPPNjMKa`IGGEECC AA?[Z=R;V8TSRQPO2G0KJIHGFED'<%@">7~5:{y10wu3tr*)pn,mk#"igge#dbxw`^z][q pYWWUqTRhgPNjihgJ_HcEaZCX]@>TS<::8866442N1/ED-++)E(&<;$">=<;|3z7654321 0/.oJ+*)('&%$#"!~}|{zyxwvutsrqponmPkjihgfIGG#a`_^]\[Z=;;VUTSRQPON1//JI HGFEDCB%##>=<;:9876wuu210/.-,+*kii&%$#"!~}|_]]xwvutsrqpSQQlkjihgfedGEE `_^]\[ZYX;99TSRQPONML/--H*FEDC&;$?>=<;:{2y6v4-t+0qo'&mkki'hf|{dbb``^^\ \ZZXtsVkToQmfOdiLJ`_HFFDDBB@@>><XW:O8S5QPONML/D-HGFEDCBA$9"=};4{27xv.- trrp.om%$ki'hf|{db~a_ut][wZXnmVTpSQgfOMMKgJH^]FD`_^]@U>Y;WP9NS64JI200. J-+A@)'C&$:9"~~||z8yw/.ussq/pn&%lj('&%f{d!~}|{zyxwvY4srqTonmlkjMKK'edc ba`_^A??ZYXWVUTSR533NMLKJIHGF)''BA@?>=<;:{yy6543210/.omm*)('&%$#"caa|{ zyxwvutWUUponmlkjihKIIdcba`_^]\?==XWVUTSRQP311L.JIHG*?(CBA@?>!6}:z81x/ 4us+*qoom+lj"!hffddbb``^^\\ZvuXmVqSohQfkNLbaJHHFbECYXA??==;;9977553ON1 F/J,HGFEDC&;$?>=<;:98y0w4t2+r).om%$kiiggeec!b`vu^\\ZvYWmlUSSQmPNdcLJfe dcF[D_A]V?TY<:PO86644220L/-CB+))''%%#?"~65|z8765v-t10/.-,+*)(iD%$#"!~} |{zyxwvutsrqpoRmlkjihKII%pba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987 654RQ

Неплохо, правда?

Whitespace

Об этом ЯП немного рассказано выше — в моменте про пробелы, табуляции и переносы строк. На самом деле это ещё один эзотерический язык, который можно назвать «шпионским». Всё потому, что код, написанный на нём, можно скрывать в тексте других ЯП. Таким образом, решается задача невидимости и маскировки кода, что открывает новые горизонты для разработчиков.

В отличие от предыдущего языка, Whitespace можно использовать на практике. Например, в обычном коде традиционного ЯП можно скрыть сообщение для коллеги или кого угодно. Поскольку сообщение будет состоять лишь из невидимых знаков, которые обычно игнорируются при чтении кода, то обнаружить его непросто.

Уникальность ЯП как раз в том, что его можно встраивать, не мешая функциональности программы-носителя. Whitespace можно применять для разработки пасхалок или исследований в информационной безопасности. Либо же просто применять его just for fun.

Вот пример Hello World на этом языке:
Hello,[Space]world![Space][Space][Tab][Space][Space][Tab][Space][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Space][Tab][Space][Tab][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Tab][Tab][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Tab][Tab][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Tab][Tab][Tab][Tab][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Space][Tab][Tab][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Space][Space][Space][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Tab][Space][Tab][Tab][Tab][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Tab][Tab][Tab][Tab][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Tab][Space][Space][Tab][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Tab][Tab][Space][Space][LF] [Tab][LF][Space][Space] [Space][Space][Space][Tab][Tab][Space][Space][Tab][Space][Space][LF] [Tab][LF][Space][Space] [LF][LF][LF]

Можно рекомендовать основы языка для изучения, чтобы, если так можно выразиться, расширить собственные горизонты.

Chef

Ещё один весьма странный язык. Его можно рекомендовать тем разработчикам, кто одновременно является и гурманом. Дело в том, что переменные здесь обозначаются названиями реальных кухонных продуктов. А код на Chef выглядит как рецепт. Вероятно, если его увидит даже не обычный пользователь, а опытный разработчик, он подумает, что это рецепт. Если не верите, то вот код, написанный на этом ЯП:

Пример кода
Hello World Cake with Chocolate sauce.   This prints hello world, while being tastier than Hello World Souffle. The main chef makes a " world!" cake, which he puts in the baking dish. When he gets the sous chef to make the "Hello" chocolate sauce, it gets put into the baking dish and then the whole thing is printed when he refrigerates the sauce. When actually cooking, I'm interpreting the chocolate sauce baking dish to be separate from the cake one and Liquify to mean either melt or blend depending on context.   Ingredients. 33 g chocolate chips 100 g butter 54 ml double cream 2 pinches baking powder 114 g sugar 111 ml beaten eggs 119 g flour 32 g cocoa powder 0 g cake mixture   Cooking time: 25 minutes.   Pre-heat oven to 180 degrees Celsius.   Method. Put chocolate chips into the mixing bowl. Put butter into the mixing bowl. Put sugar into the mixing bowl. Put beaten eggs into the mixing bowl. Put flour into the mixing bowl. Put baking powder into the mixing bowl. Put cocoa powder into the mixing bowl. Stir the mixing bowl for 1 minute. Combine double cream into the mixing bowl. Stir the mixing bowl for 4 minutes. Liquify the contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. bake the cake mixture. Wait until baked. Serve with chocolate sauce.   chocolate sauce.   Ingredients. 111 g sugar 108 ml hot water 108 ml heated double cream 101 g dark chocolate 72 g milk chocolate   Method. Clean the mixing bowl. Put sugar into the mixing bowl. Put hot water into the mixing bowl. Put heated double cream into the mixing bowl. dissolve the sugar. agitate the sugar until dissolved. Liquify the dark chocolate. Put dark chocolate into the mixing bowl. Liquify the milk chocolate. Put milk chocolate into the mixing bowl. Liquify contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Refrigerate for 1 hour.

В этом ЯП используются следующие понятия:

  • ингредиент — переменная. Название ингредиента задаёт её имя, количество — значение, а консистенция (сухой или жидкий) — тип при выводе на печать (число или ASCII-код)

  • миски и формы для выпечки — стеки, в которых хранятся целочисленные значения. Над значениями в стеках-мисках производятся все действия; формы для выпечки служат для вывода их содержимого на печать. Запас мисок и форм неограничен; если их используется несколько, на них ссылаются по их номерам («первая миска»)

В общем, вот такой вкусный язык программирования. Может, кто уже «готовил» с его помощью? Расскажите, как он вам?

INTERCAL

Это язык для тех, кому по душе вежливость. Дело в том, что код содержит большое количество ключевых слов вроде DO (ВЫПОЛНЯЙ), PLEASE (ПОЖАЛУЙСТА) или PLEASE DO (ПОЖАЛУЙСТА, ВЫПОЛНЯЙ). При этом обойтись без вежливости нельзя — по правилам ЯП от трети до пятой части инструкций из кода должны содержать «признаки вежливости».

Кстати, INTERCAL обладает Тьюринг-полнотой, поэтому, если есть время, можно писать прикладные программы. Уже есть наработки — к примеру, веб-фреймворк на основе INTERCAL с командами типа ick (компилирует код) и gross (запускает сервер). За несколько лет существования у языка появилось большое сообщество, представители которого создают приложения и дорабатывают язык. Например, не так давно появились новые команды COME FROM и DO COME FROM.

Вот пример кода программы, которая вычисляет числа Фибоначчи:
DO .9 <- #16 DO .10 <- #0 DO .11 <- #1   (1) PLEASE READ OUT .11 DO .1 <- .10 DO .2 <- .11 PLEASE (1009) NEXT DO .10 <- .11 DO .11 <- .3   DO (3) NEXT DO (1) NEXT   (3) DO (4) NEXT PLEASE GIVE UP   (4) DO .1 <- .9 DO .2 <- #1 PLEASE (1010) NEXT DO .9 <- .3 DO .1 <- '.9~.9'~#1 PLEASE (1020) NEXT DO RESUME .1

Ещё одна особенность языка в том, что любой команде можно задать вероятность выполнения, а некоторые операторы блокируют выполнение других команд или запрещают изменять переменные.

Язык непростой, ещё одно его качество — запутанность. Вот, например, код, который позволяет сохранить значение 65536 в 32-битной переменной:

DO: 1 <— # 0 $ # 256

Получается, что, кроме вежливости, этот ЯП можно использовать для написания сложного для понимания кода — если постараться, его не поймёт и опытный разработчик. В документации, кроме отсылок к «Алисе в Стране чудес», говорится ещё и следующее: «INTERCAL позволяет программисту генерировать в 20 раз больше кода, чем большинство других языков. Благодаря этому разработчик становится гораздо более плодовитым, чем его коллеги, вынужденные программировать на лаконичных языках. А ещё программирование займёт у вас гораздо больше времени».

Shakespeare

Язык программирования для гурманов уже есть, а теперь очередь для ЯП, который понравится любителям поэзии. Shakespeare — эзотерический язык, который всегда маскирует свой код под труды Шекспира. Так, первый абзац программы — эпиграф, список персонажей — это количество стеков, а реплики участников действа — операции ввода-вывода.

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

Пример кода
Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Prince Hamlet, the flatterer of Andersen Insulting A/S.   Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo. [Enter Hamlet and Romeo]   Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind!   You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind!   You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind. Speak your mind!   [Exit Romeo]   Scene II: The praising of Juliet. [Enter Juliet]   Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind!   [Exit Juliet]   Scene III: The praising of Ophelia. [Enter Ophelia]   Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind!   Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind!   [Exeunt Ophelia and Hamlet]   Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation. [Enter Romeo and Juliet]   Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind!   Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind!   [Exit Romeo]   Scene II: Juliet and Ophelia's conversation. [Enter Ophelia] Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind!   Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind!   [Exeunt]

Эзотерических языков сейчас много, а их количество продолжает увеличиваться. Если есть интерес к изучению таких языков, вот вики, где включены если не все, то большинство подобных ЯП. Это весьма объёмный ресурс, так что будьте осторожны — можно утонуть во всей этой информации. Не говорите, что мы не предупреждали.


ссылка на оригинал статьи https://habr.com/ru/articles/797301/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *