Как стать автором
Обновить
1666.65
МТС
Про жизнь и развитие в IT

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

Время на прочтение25 мин
Количество просмотров18K

Согласно самым разным источникам, в мире существует от нескольких сотен до нескольких тысяч языков программирования. Правда, ЯП, с которыми реально имеют дело десятки и сотни тысяч человек, немного. Больше, конечно, нишевых языков, применяемых для решения узкого круга задач. Существуют ЯП для обучения разработчиков, а также проекты, созданные исключительно для развлечения. В статье — 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]

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

Теги:
Хабы:
Всего голосов 39: ↑25 и ↓14+24
Комментарии15

Публикации

Информация

Сайт
www.mts.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия