V druhém díle našeho obludária si ukážeme další dva esoterické programovací jazyky. Prvním bude Single Four a ten druhý se jmenuje AAAAAAAAAAAAAA!!!!. Navíc se potom můžete zúčastnit malé soutěže, kterou najdete na konci článku.
Single Four
Single Four je programovací jazyk, který navrhla Starla Insigna, programátorka s extrémní oblibou čísla 4. Její osobní web můžete najít na FourIsland.com.
Tento jazyk samotný je opravdu téměř nepoužitelný, protože jeho vyjadřovacími znaky jsou pouze mezera a číslice 4. Každá řádka programu potom sestává z volání funkcí, kterým se předávají parametry oddělené mezerou.
Programování v Single Four je tedy opravdovou výzvou. Předdefinováno je celkem 21 základních funkcí (jejich seznam je k nalezení zde). Nejjednodušší je samozřejmě volání funkcí 4 a 44, u ostatních je to problematičtější, protože jejich číslo je nejprve třeba vypočítat.
Uvedeme si dva základní programy.
Ukázka 1
4 4 4 4
Tento program volá funkci číslo 4 (dělení) a dělí číslo 4 číslem 4 a výsledek ukládá do proměnné 4.
Ukázka 2
4 4 44 44
44 44
Tento program nejprve dělí (funkce 4) číslo 4 číslem 44. Výsledkem je 0 (jde o celočíselné dělení) a ta je uložena do proměnné 44. Druhý řádek volá funkci 44, která umožňuje zavolání funkce, která má ID rovné hodnotě v proměnné, která je jí předána jako parametr - tedy v našem případě voláme funkci 0, která ukončuje program.
Hello, world!
Pokud jste se těšili, že se dočkáte popisu programu "Hello, world!", musím vás zklamat. Tento program sice existuje, ale má 485 řádek, a tak by jeho popis nebyl příliš záživný. Každopádně zájemci si jej mohou přečíst u autorky zde, spolu s komentáři na každém řádku.
AAAAAAAAAAAAAA!!!!
Druhý dnešní jazyk má poměrně dlouhý název AAAAAAAAAAAAAA!!!! (pozor neplést s AAAAAAAAAAAA!!!! nebo AAAAAAAAAAAAAA!!, to už nejsou programovací jazyky, to již neznamená zhola nic :-) ). Tento programovací jazyk vytvořil Zzo38, který již má podobných jazyků na kontě desítky. AAAAAAAAAAAAAA!!!! používá poměrně malé množství znaků, konkrétně velké písmeno A, čárku, mezeru a vykřičník. Navíc je možné program zpřehlednit bílými znaky jako novými řádky, ty však interpret dle slov autora přeskakuje.
Pro správné pochopení alespoň základní ukázky programu si musíme nejprve uvést ořezaný seznam příkazů, operátorů a operandů. Pokud budete chtít po dočtení článku svoje znalosti rozšířit, na stránce jazyka najdete další pokročilejší instrukce.
Příkazy
- AA AAA n! - vypisuje číslo n jako znak
- AA AAAA AA! - ukončuje program
- AAA A AAA n! -začít definici subrutiny s názvem n
- AAAA A AAA! - konec subrutiny
- AAA A AA AAAA n! - vrátit návratovou hodnotu n
- AAAAAA n! - zavolání subrutiny n
Operátory, operandy
- AAAA - číslo 0
- AAA - číslo 1
- A - číslo 2
- AA A - číslo 3
- AA A, a b - součet čísel a a b
- AA AA, a b - absolutní hodnota rozdílu (a - b)
- AAA, a b - součin čísel a a b
- AAAAA A n, a - volání subrutiny s názvem n a parametrem a
Z uvedeného výpisu si můžeme všimnout dvou překvapivých faktů. Prvním je to, že AAAAAAAAAAAAAA!!!! je schopné vypisovat pouze znaky, tedy pro výpis číselného výsledku je nutné jednotlivé číslice převádět na znaky. Druhým je to, že v programu si musíme vystačit pouze se čtyřmi čísly - 0, 1, 2 a 3 a jakákoliv jiná čísla musíme získat s jejich pomocí.
Nyní již máme dostatek informací potřebných pro uvedení ukázkového programu, který kupodivu nevypisuje "Hello World", ale pouze "He". Ptáte se proč? Odpověď je snadná - bude nám to stačit, pochopení programu bude už tak dostatečně problematické.
Nakonec ještě uvádím, že jde o kopii programu ze stránky jazyka a pro předvedení alespoň částečného arzenálu jazyka AAAAAAAAAAAAAA!!!! obsahuje i ukázku definice subrutiny, což však není nutností a jejím vynecháním by se program mírně (ale opravdu pouze mírně) zjednodušil. Inu, jdeme na to.
Ukázkový program
AA AAA AA AA, AAA, AAA, AA A AAA, AA A AA A AA A AAA, AA A AA A!
AA AAA AA A, AAA AAAAA A AAAA, AAA!
AA AAAA AA! AAA A AAA AAAA! AAA A AA AAAA AAA,
AA A, AAA AAA, AA A AA A AA A,
AAA AAA, AA A AA A! AAAA A AAA!
Takže, půjdeme hezky postupně po jednotlivých příkazech, abychom se neztratili. Program začíná příkazem výpisu AA AAA, za kterým následuje číslo znaku, který chceme vypsat - pro získání tohoto čísla potřebujeme celý zbytek řádku až po vykřičník, který samotný výpis provádí. AA AA, nám uvádí, že budeme počítat absolutní hodnotu rozdílu. Prvním operandem tohoto rozdílu bude součin* (AAA,) součinu^ (další AAA,) čísla tři (AA A) a součinu (AAA,) čísel 3 a 3, a čísla 3 (druhý operand součinu^), a součinu čísel 3 a 3 (druhý operand součinu*). Když si to pomalu a pečlivě přepíšeme do přehlednějšího formátu, první řádek představuje následující:
vypiš(absolutní hodnota rozdílu(součin(součin(3,součin(3,3)),3),součin(3,3)))
Když si to přepočítáme, vyjde nám, že se vypíše znak odpovídající kódu 72 - po nahlédnutí do ASCII tabulky zjistíme, že jde o znak "H". Tak máme polovinu práce za sebou, teď tu druhou.
Na druhém řádku je nejprve uveden příkaz výpisu a ten dostává jako parametr součet (AA A,) čísla 1 (AAA) a výsledku volání subrutiny s číslem 0 (AAAAA A AAAA, AAA). Všimněte si, že subrutině předáváme parametr 1, přestože jej nevyužije, ale neparametrické subrutiny jazyk AAAAAAAAAAAAAA!!!! nepovoluje.
Třetí řádek nejprve ukončuje program (AA AAAA AA!) a poté začíná definici subrutiny s názvem 0 (AAA A AAA AAAA!). Ta obsahuje příkaz pro vrácení hodnoty (AAA A AA AAAA) výrazu až po nejbližší vykřičník. Zde opět musíme vypočítat součin součtu čísla 1 a součinu čísel 3 a 3 a součtu čísel 1 a součinu čísel 3 a 3. Popis jsem zkrátil, ale opět uvedu celý výraz v přehlednějším formátu:
vrať(součin(součet(1,součin(3,3)),součet(1,součin(3,3))))
Subrutina je zakončena příkazem AAAA A AAA!.
Když si spočítáme výslednou hodnotu, kterou naše subrutina spočítá, zjišťujeme, že jde o číslo 100. Nyní se vrátíme a vzpomeneme si, co dělal druhý řádek - vypisoval znak odpovídající hodnotě součtu čísla 1 a výsledku subrutiny. Tedy vypíše znak ASCII #101 - "e".
Že to nebylo vůbec složité? Troufnete si program rozšířit na výpis celého "Hello, world!"?
Závěr
Dnešní obludárium je za námi, ale na další díl se můžete těšit brzy a opět si rozšíříme naši výstavku o dva esoterické programovací jazyky.
Nakonec ještě vyhlašuji menší soutěž - kdo první zveřejní v komentářích k tomuto článku korektní zdrojový kód v jazyce AAAAAAAAAAAAAA!!!!, který vypisuje text "Hello, world!", bude uveden i se svým výtvorem hned v úvodu příštího dílu obludária!