První série dvacátého pátého ročníku KSP

Termín odeslání Vašich řešení této série jest určen na 22. října 2012 8:00. Termín odevzdání CodExové úlohy je pak 23. října 2012 8:00. Řešení můžete odevzdávat jak elektronicky, tak klasickou poštou na známou adresu.

Dotazy ohledně zadání můžete posílat na adresu ksp@mff.cuni.cz, nebo se ptát přímo na diskusním fóru KSP.

Zadání úloh

(volně přeloženo z japonského originálu)

Vážený strýčku,

jsem Vám velice vděčen za Vaši pomoc při přípravách naší cesty do České republiky. Je to velice zajímavá země s mnoha prazvláštními obyčeji, které se Vám pokusím aspoň trochu přiblížit.

Nafotil jsem spoustu fotografií, ukázat Vám je však nemohu – jak píši dále, o všechny jsem přišel.

Už náš příjezd byl takový zvláštní – čekal jsem, že nás na letišti vyzvedne průvodce, pojedeme autobusem do centra, vysedneme na nějaké rušné ulici plné turistů a vydáme se obdivovat památky.

Místo toho jsme však nasedli do dodávky, která trčela v dopravní zácpě snad hodinu. Pak jsme se dlouho proplétali uzounkými uličkami, až jsme se zastavili v jedné velice zapadlé, nikde nikdo a skoro nebylo vidět na slunce.

Chvíli to trvalo, než jsme se vymotali z uliček a dostali do míst, kde byli i jiní lidé. Vydali jsme se s rodiči přes takový starý most do centra. Cestou jsme samozřejmě všichni fotili.


25-1-1 Fotografování (12 bodů)


Máme N japonských turistů, kteří se mezi sebou navzájem fotí. Typicky, když jeden Japonec vyfotí druhého, ten druhý mu to musí ze slušnosti oplatit.

Japonci mají v oblibě jednu hru: v určitou chvíli někdo oznámí přirozené číslo K, načež si všichni spočítají, kolik ostatních mají nafoceno (což je zjevně počet lidí, kteří fotili je samotné). Každý, kdo má nafoceno méně než K kamarádů, vypadává ze hry.

V druhém kole se počítají pouze ti, kteří nevypadli. Opět ti, kteří mají nafoceno méně než K nevypadnuvších, vypadnou ze hry.

Takto hra pokračuje, dokud se stav mezi dvěma koly mění. Všichni zbylí hru vyhrají.

Víte, které dvojice Japonců se navzájem vyfotily. Určete pro každého z nich, pro jaké maximální K hru vyhraje.

7 bodů dostanete, pokud najdete vyhrávající skupinku pro K=3.

Příklad: Uvažujme situaci pro N=7, přičemž se vyfotily dvojice: 1–2, 2–4, 4–5, 3–1, 3–6, 6–1, 6–2, 6–7, 7–1, 7–2 a 7–4. Pro K>3 nevyhraje nikdo. Pro K=3 vyhrají hráči 1,2,6,7, pro K=2 vyhrají všichni až na hráče 5 a pro K<2 vyhrají všichni.

Příklad k 25-1-1

Řešení

Úzkými uličkami jsme se dostali na náměstí. Měli zde moc pěkné hodiny s figurkami. Také jsme se podívali do místní tržnice. Nevěřil byste, jak jsou místní trhovci hádaví.


25-1-2 Stánky na náměstí (12 bodů)


Obtížná úlohaMáme T trhovců. Každý trhovec má vlastní stánek. Při jeho stavbě zkušeným okem určil oblast, odkud na něj turisté nejlépe uvidí, tato oblast má tvar konvexního mnohoúhelníka.

Problém nastává, pokud se dvě takovéto oblasti protínají – potom se trhovci neustále hádají a přetahují si navzájem turisty.

Radní o tomto problému ví a snaží se mu zabránit. Oblasti vám zadají jako T seznamů bodů, kde body jsou vždy zadané podél obvodu. Každý seznam bodů tvoří konvexní mnohoúhelník. Chtěli by vědět, jestli se nějaké dvě oblasti překrývají.

Příklad: Pro T=2 a oblasti určené {[1,1], [2,1], [2,2], [1,2]}{[2,2], [4,2], [2,3]} se tyto dvě neprotínají (vlevo), ale pro T=3 a oblasti zadané pomocí bodů {[1,1], [2,1], [2,2]}, {[3,1], [4,1], [4,2]}{[1,3], [2,1], [3,3]} se první a třetí oblast protínají (vpravo).

1. příklad k 25-1-2 2. příklad k 25-1-2

Řešení

Pak jsme se vrátili po stejném mostě, prý se podíváme na místo, kde žije český prezident. Těšil jsem se hlavně na pražskou hradní stráž, slyšel jsem totiž, že její řazení při výměně je pověstné.


25-1-3 Řazení hradní stráže (7 bodů)


Jednoduchá úlohaPři výměně dvou gard stráže ta odchozí nastoupí na nádvoří do řady. Příchozí stráž nastoupí vedle ní.

Obě gardy jsou přirozeně stejně velké – každá má právě N vojáků. Vojáci mají dopředu určeno, na kterém místě hlídají, každý z gardy hlídá na jiném místě.

Pro kontrolu, že jsou všichni a že žádné z míst nezůstane nehlídáno, se příchozí garda musí seřadit stejně jako ta odchozí.

Řazení podle protokolu probíhá tak, že se vždy odpojí poslední v řadě příchozí gardy a zařadí se na libovolné místo. Kolik takovýchto přesunů je nejméně potřeba, aby příchozí garda byla seřazena stejně jako odchozí?

Příklad: Když si vojáky očíslujeme 1… N dle místa, kde budou hlídat, tak pro odchozí řadu 4, 2, 1, 3, 5 a příchozí řadu 1, 3, 5, 2, 4 jsou potřeba dva přesuny.

Řešení

To jsem bohužel už neviděl. Na tom mostě jsem se snažil vyfotit hlavu ve zdi, než se mi to však podařilo, všichni byli dávno pryč. Snažil jsem se je dohnat, ale nějak jsem se ztratil.

Dostal jsem se do krásného parku, jsou tady i nějaká obrovská mimina.

„Dobrý den, pane, promiňte, že obtěžuji, ale neviděl jste tu skupinku turistů z Japonska?“

Pán vypadal velmi vyjeveně. Pak jen zadrmolil „Sorry, don't speak english,“ a zmizel. Copak já na něj mluvím anglicky? Vždyť to ani neumím… Zkusil jsem se ptát ještě pár dalších, vždy s podobným výsledkem. Koukali na mě, jako bych spadl z Marsu. Jeden z nich mi zdviženým prostředníčkem naznačil, že jsem jednička, ale stejně mi nepomohl.

Nikdo mi nerozumí. Sedl jsem si na lavičku, sklopil hlavu a přemýšlel, jak se dostanu zpátky. Taková ostuda! Takhle zahanbit své rodiče!

„Ahoj, co tu děláš tak sám?“

Zvedl jsem hlavu. Tak přece někdo! Stála nade mnou menší hnědovlasá slečna, na sobě měla hranaté kovové brýle a přes rameno brašnu.

„Kde máš rodiče?“

„Já nevím. Byli jsme támhle na mostě, fotil jsem, ostatní najednou zmizeli.“

Když už jsem měl v ruce foťák, tak jsem si slečnu vyfotil.

„A kam šli?“

„Říkali něco o hradu, ale těžko říct.“

„A víš aspoň, kde se máte sejít?“

„Tady za rohem máme dodávku, nejspíš tam.“

„Tak pojď.“

Chvíli jsme se proplétali uličkami, než jsme našli tu jednu liduprázdnou, kde jsme parkovali. Teď už moc liduprázdná nebyla. Bylo tam asi dvacet mužů, všichni stáli kolem naší dodávky. Někteří se jen dívali okolo, někteří vykládali z naší dodávky nějaké zboží. Asi čtyři z nich stáli opodál a živě spolu diskutovali.

Samozřejmě jsem začal fotit, tohle se jen tak nevidí. Při páté fotce fotoaparát usoudil, že scéna je moc tmavá, a zapnul blesk. V tu chvíli se všichni zarazili a podívali se na mě. Spoušť jsem zmáčknul ještě jednou.

V tu chvíli mě ona slečna chňapla za ruku a táhla pryč. Rozběhli jsme se a utíkali, co nám síly stačily. Proč, proboha? Na otázky však nebyl čas. Pochopil jsem, že z nějakého důvodu nás nesmí chytit. Nejspíš tu slečnu znají a hrají nějakou společenskou hru.

Běželi za námi dva. Když se rozdělíme, budou nás hledat mnohem hůře. Vytrhl jsem slečně svoji ruku a rychle zahnul doprava. Nejspíš pochopila můj záměr a zahnula doleva.

V úzkých uličkách je snadno ztratíme.


25-1-4 Útěk (12 bodů)


Praktická CodExová úlohaÚzké uličky tvoří bludiště. V tomto bludišti jsou osoby, které nesmíte potkat. Tyto osoby neběhají chaoticky, mají jistý okruh, po kterém chodí stále dokola.

Bludiště je zadáno jako čtvercová síť o rozměrech W×H, kde 1≤ W, H ≤ 70. V bludišti jsou čtyři typy polí: zeď #, volno ., start S a cíl C. Start je v bludišti právě jeden.

V bludišti je N osob, kterým utíkáte, přičemž 0≤ N ≤ 2. Pohyb každé z osob je dán seznamem souřadnic délky D, jehož konec navazuje na začátek. Osoba se po nich cyklicky pohybuje. Seznam je dlouhý 1 ≤ D ≤ 50 a je vždy platný (osoby neprocházejí zdmi, místa na sebe navazují). Je-li N=2, pak mohou obě osoby stát na stejném místě.

Pohyb v bludišti probíhá po tazích, v tahu se vždy můžete posunout o jedno políčko vodorovně nebo svisle, nebo stát na místě. Nejprve se pohnete vy, poté chytající osoby.

Najděte nejrychlejší cestu ven z bludiště, aniž byste potkali libovolnou z osob.

6 bodů získáte za řešení fungující pro N=0, 3 body pro N=1 a 3 body pro N=2.

Tato úloha je praktická a řeší se ve vyhodnocovacím systému CodEx. Přesný formát vstupu a výstupu, povolené jazyky a další technické informace jsou uvedeny v CodExu přímo u úlohy.

Řešení

Už mně dýchal na krk. Najednou se však zastavil a nešel dále. Došel jsem na větší obdélníkové náměstí, uprostřed vedly tramvajové koleje.

Uf. To bylo o fous.

Najednou jsem na chodníku uviděl peněženku. Jak mě to mí ctění rodiče vždy učili, sebral jsem ji, neotevíral a začal se poohlížet po policistech, kterým bych ji mohl odevzdat.

Jeden šel kousek ode mě. Vydal jsem se mu naproti a natáhl ruku s peněženkou. Policista došel ke mně, pořádně se na mě ani nepodíval, ignoroval peněženku a sebral mi foťák.

Stál jsem jako opařený, stále s nataženou rukou. Najednou byla prázdná. Nějak se tam objevila ta slečna, která se mnou předtím utíkala.

S peněženkou v ruce se o něčem s policistou dohadovala. Po chvíli však bez jediného slova zmizela.

Policista se na mě podíval a snažil se mi něco říct, já mu však nerozuměl. Pak mě odvedl s sebou na služebnu. Ach, strýčku! Připadal jsem si jako nějaký sprostý zloděj!

Policista mě posadil naproti svému stolu, chvíli na mě koukal, pak zmizel. Koukal jsem na práci jejich sekretářky. Pořád vytahovala z kartotéky nějaké papíry, občas na ně něco načmárala a pak je zase vložila zpátky. Vypadalo to však velmi neefektivně.


25-1-5 Algoritmus sekretářky (7 bodů)


Jednoduchá úlohaKuchařková úlohaPředstavte si, že sekretářka je naprogramovaná a provádí následující kód:

for i in range (0, N):
  for j in range (0, M):
    if (a[i]==c[j]):
      print b[i]+" "+d[j]+"\n";

Zkuste si rozmyslet, co kód (sekretářka) dělá a s jakou časovou složitostí. Potom zkuste vymyslet vlastní program, který dělá totéž efektivněji, nebo dokažte, že (asymptoticky) to už efektivněji nejde.

Řešení

Vzpomněl jsem si, že mám v kapse kartičku, kterou mi rodiče napsali pro podobné případy. Vyndal jsem ji a podal policistovi, když se vrátil.

Ten si ji přečetl a zvedl telefon. Těm slovům jsem nerozuměl, přesto se mi vryla do paměti.

„Dobrý den, máme tu jedno ztracené dítě, má s sebou kartičku s vaším číslem. Jmenuje se Tanaka Mashiro, má krátké černé vlasy, velké kulaté sluneční brýle, na sobě černé tričko a modré rifle, nosí s sebou černý fotobatoh… Vážně? Výborně, dovedu ho k vám.“

Pak se zvedl, něco si zamumlal a naznačil, že mám jít s ním. Chvíli jsme se proplétali uličkami, než jsem uviděl naši krásnou vlajku.

Vešli jsme do budovy, nad kterou visela. Policista se chvíli bavil s vrátným, pak odešel a zmizel.

Vrátný se na mě usmál a ukázal na stůl vedle.

„Posaď se a chvíli počkej. Máš hlad? Donesu ti něco k jídlu.“

Teprve teď jsem se trošku uklidnil.

Při čekání jsem se díval z okna na zahradu. Je na ní krátký zelený trávník a spousta nádherných květin. Zajímalo by mě, jak ji sekají.


25-1-6 Sekání trávy (10 bodů)


Představte si trávník N×M, který chceme posekat. Máme sekačku, kterou se můžeme pohybovat pouze vodorovně nebo svisle.

Začínáme v levém horním rohu a chceme každé políčko projet právě jednou (start je výjimka) a vrátit se na začátek. Na trávníku rostou květiny, které nechceme posekat.

Pro jaké N, M a umístění květin umíme trávník posekat? Pro zjednodušení předpokládejte, že na trávníku rostou květiny jen na jednom políčku.

4 body dostanete, pokud vyřešíte sekání trávníku bez květin.

Řešení

Seděl jsem tam asi půl hodiny, než přišel pán v obleku.

„Vítej na japonské ambasádě. Už jsem volal tvým rodičům, vyzvednou si tě tady. Máš velké štěstí, že ses sem dostal. Ztrácí se tady spousta dětí. Mohl bys mi říct, co se vlastně stalo?“

Všechno jsem pánovi vyložil, celou dobu pozorně poslouchal. Zmínil jsem se mimo jiné i o zmizelém fotoaparátu.

Lehce se uklonil a natáhl ruce s fotoaparátem. Též jsem se uklonil a převzal jej.

„Datovou kartu bohužel nemáme, je mi líto.“

„Přesto vám co nejsrdečněji děkuji.“

„Teď mě omluv. Musím zmizet na schůzi.“

Přemýšlel jsem, jak se budou rodiče tvářit, až mě uvidí. Nejspíš na mě budou naštvaní, že jsem jim takhle zkazil dovolenou. Ani fotky nemám…

Nakonec ale měli spíš radost, že mě našli. Došli jsme zpátky k dodávce (tentokrát už kolem ní nikdo nestál), nasedli a jeli zpátky na letiště. Mezitím jsem od rodičů dostal aspoň GPS s logem, abych se mohl podívat, kam došli.

Při procházení logu jsem si všímal hlavně nadmořských výšek. Cestou po Praze dosti kolísaly. Zajímavý byl zejména počet kopečků a jeho změny s přiblížením mapy.

Po chvíli jsem si všimnul, že při vhodném přiblížení to vypadá tak, že se nejprve hodně dlouho stoupá, pak se dosáhne vrcholu a za ním se už jen klesá. Dal by se podobný výběr udělat i „ručně“?


25-1-7 GPS log (7 bodů)


Máte zadanou posloupnost nadmořských výšek tak, jak je turisté postupně procházeli. Zvládnete z nich vyškrtat co nejméně výšek tak, aby zbylá posloupnost obsahovala maximum, výšky před maximem pouze stoupaly a ty za ním klesaly?

Příklad: Pro posloupnost výšek 1, 3, 2, 2, 3, 4, 6, 7, 7, 5, 6 je jedním ze správných řešení posloupnost 1, 2, 3, 4, 6, 7, 5 (poslední prvek lze nahradit šestkou).

Řešení

Jistě uznáte, že tato cesta byla velice zvláštní. Doteď pořádně nechápu, co se vlastně stalo. Možná mi to někdo někdy vysvětlí.

Tanaka Mashiro

Z japonštiny přeložil:

Radim „Rumcajz“ Cajzl


25-1-8 Sázíme v TeXu (13 bodů)


SeriálUpozornění: Přesný vzhled vysázených konstrukcí je v PDF verzi! Ve webové verzi mohou být různé nepřesnosti, zvláště u vzhledu vysázených vzorců. Pokud si tedy chcete být jisti tím, jak něco vypadá, sáhněte prosím po verzi v PDF.

Bylo nebylo, 30. března 1977 obdržel Donald Ervin Knuth testovací výtisk jedné ze svých knih (druhé edice druhého dílu série The Art of Computer Programming). Prohlásil: „Strávil jsem 15 let psaním knih, ale pokud budou vypadat takhle nechutně, tak už žádnou nenapíšu.“ Pak stáhnul knihu z tisku a napsal TeX – sázecí systém a programovací jazyk.

První a zároveň poslední stabilní verzi TeXu vydal v roce 1989. Od té doby se již celý systém prakticky nezměnil. Název se čte „tech“ nebo „tek“, neboť ono X je ve skutečnosti velké řecké písmeno chí. Pokud byste náhodou nezvládli napsat název TeX se sníženým E, tak můžete napsat TeX. Nikdy ne však TEX.

Pojďme si tedy představit program a jazyk, díky kterým letáky KSP skvěle vypadají a dobře se čtou. Naučíme se používat TeX od úplných základů, začneme obyčejnými texty, probereme se matematickými vzorci a nakonec si ukážeme i zběsilé triky. Stanete se TeXniky, jaxepatří.

Instalace

Jak začít? Máte-li Linux, je to jednoduché. Nainstalujte si „TeXovou distribuci“ TeXlive (stačí minimalistická verze) plus československá rozšíření. V Debianu a Ubuntu se jedná o balíky texlive-base a texlive-lang-czechslovak.

Ve Windows je to o něco složitější. Stáhněte si instalační balík z CTANu a rozbalte jej. Máte-li dost místa na disku, můžete spustit install-tl.bat, odklikáte Next a nainstaluje se prakticky všechno, co byste kdy mohli i nemohli potřebovat. Zabere to přes 3GB.

Pokud nechcete ucpat tolik místa na disku, případně nechcete stahovat tolik dat (to, co teď máte, je jen instalátor), spusťte install-tl-advanced.bat a v otevřeném okně si naklikejte menší instalaci. Pokud nevíte, případně se vám nad tím nechce přemýšlet, použijte tento návod:

  1. Jako „Selected scheme“ vyberte „basic scheme“.
  2. Z „Language collections“ vyberte československý balík.
  3. TEXDIR upravte, pokud chcete změnit místo, kam bude TeX nainstalován.
  4. Ujistěte se, že „Default page size“ je A4.
  5. „Install TeXworks front end“ přepněte na Yes (poslední bod).
  6. Klikněte na „Install TeX Live“. Instalátor stáhne z internetu všechno, co je potřeba, a nainstaluje. Celkem zabere okolo 250MB.

Ahoj, světe!

Vyzkoušíme si, jak se TeX spouští. Použijeme k tomu testovací vstup:

Ahoj světe
\bye

Na Linuxu si prostě otevřete nějaký textový editor (autor má rád Vim, ale klidně použijte třeba GEdit), vyrobíte soubor ahoj.tex, otevřete si terminál, dokráčíte do příslušné složky příkazem cd a spustíte pdfcsplain ahoj.tex, což vyrobí soubor ahoj.pdf, který si prohlédnete.

Pod Windows bych doporučil použít TeXworks, které jste si před chvílí nainstalovali. Nejdříve trocha nastavování:

  1. V menu Edit vyberte Preferences.
  2. Na kartě Editor vyberte Encoding: ISO-8859-2.
  3. Na kartě Typesetting v rámečku Processing tools klikněte na tlačítko +.
  4. Vyplňte pdfCSplain jako Name a pdfcsplain.exe jako Program.
  5. Do pole Arguments přidejte $synctexoption a $fullname.
  6. Klikněte na OK, nastavte pdfCSplain jako Default a zavřete Preferences klikem na OK.
  7. Zavřete TeXworks a otevřete je znovu.

Nyní můžete vepsat testovací vstup. Stiskem zeleného tlačítka se šipkou vlevo nahoře jej přeložíte a zobrazíte.

Poznámky:

  • TeXworks existují i pro Linux, ale já mám radši Vim. Ovšem vyberte si dle chuti sami. De gustibus non est disputandum.
  • TeX se dá spustit z příkazové řádky pod Windows, ale TeXworks jsou asi o něco příjemnější.
  • S případnými problémy s instalací můžeme pomoct, pokud se nám svěříte na fóru.
  • Znak \ najdete na české klávesnici na klávese Q při stisknutém pravém Altu.

Sázíme texty do odstavců

Napíšete-li do vstupního souboru libovolný text, TeX jej vysází. Vyzkoušejte si to dle libosti. Chcete-li přejít na nový odstavec, vynechejte prázdný řádek. TeX považuje libovolné nenulové množství mezer a tabulátorů za jednu mezeru.

Taktéž se polykají konce řádků, nejedná-li se tedy o dva konce řádků za sebou (ty značí konec odstavce). TeX také spolyká veškeré mezery a tabulátory na začátku a na konci odstavce.

Některé znaky není možné zadat přímo do vstupního textu, neboť je TeX interpretuje jako speciální. Jsou to znaky #$\%&^_{}~. Pokud chcete napsat #, %, $, &, a _, stačí předřadit zpětné lomítko: \#, \%, \$, \&, a \_. Stříška je považována za diakritické znaménko, takže je potřeba ji nakreslit samostatně: \^\relax (\relax je prázdný příkaz) se vykreslí jako ^.

TeX používá znak \ pro tzv. řídící sekvence. Ty můžou být jednoznakové jako v minulém odstavci, nebo víceznakové složené z písmen. Za písmennými se polykají mezery; kdybyste za nimi potřebovali mezeru vynutit, použijte \␣.

Ostatní (\, {, } a ~) jsou znaky, které se používají prakticky výhradně v matematickém zápise, ten nás čeká za chvíli.

Česká písmena s háčky a čárkami, stejně jako slovenská ľ, ŕ, ĺ, ä, ô apod. je možno napsat přímo do textu. TeX ale umí i ne-úplně-běžná písmena, třeba můžete napsat x̌iltovka nebo gűrű. Existují totiž příkazy, které přidají vhodné diakritické znaménko nad/pod následující písmeno.

VstupVýstup
\`očárka dozadu
\'očárka dopředu
\^ostříška
\"opřehláska
\~ovlnka
\=očára nad
\.otečka nad
\u opůlkolečko nad
\v oháček nad
\c ocedilla
\d otečka pod
\b očára pod
\accent23 okroužek nad
\H odlouhá přehláska (v maďarštině)
\t ooo͡ooblouček spojující 2 písmena

TeX automaticky dělí slova, která se nevejdou na konec řádku. Používá k tomu slovník, který je specifický pro každý jazyk. Základní je angličtina; pokud chcete nastavit češtinu nebo slovenčinu, použijte \language\czech, resp. \language\slovak.

Úkol 1 [2b]

Vysázejte tento text:

Poznatky získané cílevědomě v preadolescentním věku jsou adekvátní poznatkům pořízeným náhodně ve věku seniorském. (Co se v mládí naučíš, ve stáří jako když najdeš.)

Pokud se TeXu nepovedlo vysázet text tak, aby se vešel na řádek, objeví se za ním černý obdélník (slimák). Pak je potřeba řádek zlomit ručně, buď poradit TeXu, kde může lámat slovo, značkou \- (slo\-víč\-ko), nebo třeba přeformulovat text.

Chcete-li vysázet něco tučně nebo kurzívou, použijete \bf nebo \it ve skupině. Skupina je kus vstupu uzavřený mezi složené závorky { a }. Všechno, co se nastaví ve skupině, platí jen v ní, a po ukončení skupiny zase platí původní nastavení.

Takto tedy sázíme tučně a kurzívou:

Takto tedy sázíme {\bf tučně} a {\it kurzívou}:

Úkol 2 [2b]

Vymyslete (vyzkoušejte), co dělá \rm, a dodejte ukázkový kód.

Za zmínku stojí ještě několik českých typografických pravidel. V češtině nesmí zůstat na konci řádku jednopísmenná předložka. Pokud by ji tam TeX nechal, je potřeba mu naznačit, že následující mezera je nedělitelná. K tomu slouží vlnka: K~tomu, u~lesa.

Když píšete české „uvozovky“, použijte řídící sekvenci \uv: \uv{uvozovky}. Pozor, není možné přesahovat uvozovkami přes hranici odstavce. V takovém případě je ale obvykle lepší vyznačit dlouhou přímou řeč třeba jiným řezem písma nebo třeba zúžením okrajů.

Také stojí za zmínku pomlčky a podobné znaky. Spojujeme-li dvě slova, například „česko-slovenský“ nebo „byl-li“, napíšeme to TeXu jako jednu pomlčku.

Pokud používáme pomlčku jako interpunkční znaménko – třeba zde, zapíšeme ji jako dvě pomlčky vedle sebe a oddělíme ji na obou stranách mezerou. Totéž platí pro rozsah, například „pondělí – středa“: pondělí -- středa.

Pro úplnost ještě zmíníme dlouhou pomlčku ---, která se používá zřídka – obvykle na vyznačení náhle ukončené přímé řeči.

„Prosím pozor —“    Nádražní rozhlas zmlknul, světlo zhaslo, notebook se přepnul na baterii. Vypadla elektřina.

Matematický mód

Velké přednosti TeXu jsou v sazbě matematiky. Vyzkoušejme si základní věci. Matematika se v TeXu obaluje mezi dolary ($), neboť v dřevních dobách typografie byla její sazba velmi drahá.

Ty doby byly ve skutečnosti nejen dřevní/dřevěné, ale i olověné. Kdysi se totiž sázelo ručně, uchycovala se olověná písmenka do dřevěných rámů. Vysázet tehdy kvalitně matematiku uměl málokdo a obvykle si za to nechal mastně zaplatit. Kvalita ovšem odpovídala ceně. Tehdejšímu umění ručních sazečů se dnešní počítačová sazba ani zdaleka nevyrovná, natož pak třeba Word nebo LibreOffice.

Jednoduchou matematiku stačí psát. Mezery se v matematickém módu ignorují zcela, TeX je počítá podle poměrně složitého algoritmu a v drtivé většině případů vypadají vysázené vzorce hezky.

$a+b$a+b
$a+b^2$a+b2
$a(b + c)$a(b + c)
$abc + def$abc + def
$a_1+a_2$a1+a2
$a+b^{2c}$a+b2c
$a+b^2c$a+b2c

Povšimněte si rozdílu mezi posledními dvěma řádky. Je zde využita skupina, která slouží k označení, co všechno má být horním indexem. Stejně se chová dolní index.

Horní a dolní index se vejde pod sebe, jsou-li uvedeny oba. Na našem webu bohužel zatím ne, ale pracuje se na tom.

$a_1^2 = a^2_1$a
2
1
= a
2
1
$P_x^y \ne P{}_x^y$P
y
x
≠ P
y
x
$2^{2^{2^x}}$222x
$x_{y^a_b}^{z_c^d}$x
z
d
c
y
a
b
$a', a'', a''', \dots$a', a'', a''', …

Zde se objevila sekvence \dots, která vykreslí trojtečku se správnými rozestupy teček. Je možno ji používat i mimo matematický mód … Prohlédněte si rozdíl oproti třem samostatným tečkám ...

$\sqrt{2}$2
$\sqrt{x^3-1}$x3-1
$\overline{x+y}$
x+y
$\overline{\overline{x}+y}$
x
+y
$\root 3 \of 2$32
$\root n^2+n+1 \of {n^2-n+1}$n2+n+1n2-n+1

TeX umí v matematickém módu mnoho různých značek a symbolů. V prvé řadě umí řeckou abecedu, některá písmena dokonce ve více variantách. Vyzkoušejte:

\alpha, \beta, \gamma, \delta, \epsilon/\varepsilon,
\zeta, \eta, \theta/\vartheta, \iota, \kappa,
\lambda, \mu, \nu, \xi, o, \pi/\varpi,
\rho/\varrho, \sigma/\varsigma, \tau, \upsilon,
\phi/\varphi, \chi, \psi, \omega.

Další zajímavé značky jsou například různé relace nebo operace: =, >, <, (\ne), (\le), (\ge), ~ (\sim), (\in), (\subseteq), × (\times), \ (\setminus),  (\cap), (\cup),  ⋁  (\vee, \lor),  ⋀  (\wedge, \land), …

Závorky se píšou svými standardními znaky s výjimkou složených závorek, zapisovaných \{ a \}. Se závorkami jde dělat spousta zajímavých věcí, ale to necháme na nějakou příští sérii, pokud bude místo.

Taktéž některé zajímavé funkce mají své řídící sekvence, například sin, cos, log , min nebo max: \sin, \cos,… Porovnejte: sinx ≠ sin x ($\sin x \ne sin x$).

Poslední, co se dnes naučíme, budou zlomky. Práce se zlomky je jednoduchá, slouží k tomu sekvence \over, kterou zapíšeme mezi čitatele a jmenovatele. Všechno, co je vlevo, je čitatel; napravo je jmenovatel.

$a + b \over c + d$
a + b
c + d
$a + {b \over c} + d$a +
b
c
+ d
${a \over b} + {c \over d} \over {e \over f + g}$
a
b
+
c
d
e
f + g

Pokud potřebujete vysázet vzorec na samostatnou řádku, obalte jej mezi dvojité dolary: $$a + b + c$$ se vysází takto:

a+b+c

V tomto módu se některé konstrukce sází jinak, protože mají víc místa. Vyzkoušejte si například odmocniny, zlomky nebo (\sum) a (\prod).

Poznámky:

  • V matematickém módu píšeme i samostatně stojící proměnné apod. Například „proměnná x je nezávislá na funkci f při libovolné volbě parametrů a, b, c“.
  • Vlnovky využijeme i zde: proměnná~$x$ nebo funkce~$f$, případně $y$~je. Jednopísmenné vzorce, čísla apod., to všechno by mělo být přivlnovkované k nejtěsněji souvisejícímu slovu.
  • Obsáhlý seznam všech značek naleznete v TeXbooku (Donald Ervin Knuth: The TeXbook (Reading, Massachusetts: Addison-Wesley, 1984), ISBN 978-0-201-13448-9) na stranách 434 až 439.
  • Název programu (TeX) se vysází jako \TeX.

Úkol 3 [5b]

Vymyslete, jak vysázet tento vzorec, a dodejte zdrojový kód:

Vzorec k vysázení

Pokud se vám nebude dařit jej zkonstruovat celý, vymyslete aspoň část, budou za to také nějaké body.

Úkol 4 [4b]

Vysázejte TeXem řešení jiné úlohy v této sérii a dodejte zdrojový kód. Měli byste znát dost na to, aby z TeXu vypadnul rozumně hezký výstup. Pokud si nebudete vědět s něčím rady, zeptejte se na fóru a orgové vám rádi poradí.

Řešení