Skip to Content

This cache has been archived.

dandra: procedure SleepTight
{
SleepTight (†)
}

More
<

Karel

A cache by dandra Send Message to Owner Message this owner
Hidden : 01/01/2008
Difficulty:
3 out of 5
Terrain:
1 out of 5

Size: Size: small (small)

Join now to view geocache location details. It's free!

Watch

How Geocaching Works

Please note Use of geocaching.com services is subject to the terms and conditions in our disclaimer.

Geocache Description:

Karel je v prušvihu. Tak dlouho kódoval a kryptoval, až nakonec sám zapomnel, kam dal mou krabicku. Na souradnicích v záhlavi nic nenašel a ani vy nebudete úspešní. Mužete programovat, ale cache najdete i s obycejnou tužkou a ctvereckovým papírem

[EN] Karel is a robot as well as a programming language for absolute beginners. Using just a few elementary keywords of the Karel language, users can create their own procedures allowing the robot to fulfill more complex tasks. Find more information about Karel at wikipedia. The coordinates of this cache are coded in xKarel. Feel free to download a suitable interpreter for you and learn more of Karel. The program in the blue box at the end of this listing contains the clues. The code contains a bug. You have to find it and repair it. In exchange for your effort, Karel will tell you the coordinates


[CZ] Karel je robot. Karel je zároven i programovací jazyk urcený pro výuku programování naprostých zacátecníku. Jednoduché príkazy i vytvorené procedury umožnují ovládat robota pohybujícího se po ctvercové síti. Jméno "Karel" dal robotovi jeho duchovní tvurce Richard E. Pattis na oplátku po Karlu Capkovi, který kdysi románem R.U.R. dal celému svetu slovo "robot".

Profesor Pattis používal nový programovací jazyk v 80. letech Na Stanfordské univerzite pri výuce studentu. Odtud se také Karel rozšíril do celého sveta a v nekterých štastnejších školách neminul ani ceské ucebny.

Karel toho sám od sebe moc neumí. Robot rozumí jen základním príkazum jako Krok, VlevoBok, Polož (cihlu, v anglické verzi bzucák), Zvedni (cihlu) a dokáže testovat, zda stojí u zdi, zda je otocen k severu, zda stojí na cihle (bzucáku) a ješte umí jednoduchou smycku typu Dokud (while). Všechny složitejší príkazy se musí nejprve naucit formou procedur. Takže napr. CelemVzad se naprogramuje jako VlevoBok VlevoBok. Už vás napadá, jak byste Karla naucili KoukejNaJih nebo BežKeZdi ?

Programovací jazyk i vývojové prostredí Karla se dockaly mnoha mutací. Karel dnes žije v DOS, Windows, Linux, Java, nebo i japonském Fanuc. Zmenila se i syntaxe jazyka. Karel se programuje procedurami podobnými Basicu, Pascalu nebo C+. V roce 1996 R. E. Pattis a spol. publikovali knihu "Lehký úvod do umení objektového programování" a Karlovi vytvorili nové prostredí Karel++.

Jediné, co zustalo stejné je, že Karel sám toho moc neumí a cokoli složitejšího po nem chcete, musíte si naprogramovat sami. V našem "Jemném úvodu do sveta robotu" používáme syntaxi prostredí
xKarel. Nemusíte, ale mužete si ho stáhnout zdarma pro všechny bežné operacní systémy. Vetšine  z nás zrejme postací  2D verze pro Windows.



Prostredí xKarel
Základní povely
Krok
Move
Karel provede krok. Posune se tedy o jedno pole ve smeru, ve kterém byl otocen, a svuj smer nezmení. Stál-li Karel pred provedením povelu Krok pred zdí, natluce si (dojde k chybe a program se zastaví).
VlevoBok
TurnLeft
Karel se otocí doleva. Zustane stát na poli, na nemž stál pred provedením povelu. Nevezme, ani nepoloží žádnou cihlu.
Polož
Put
Karel položí cihlu na pole, na kterém stojí. Dojde-li k provedením príkazu k prekrocení maximálního povoleného poctu cihel na poli, dojde k chybe. Karluv batoh s cihlami je nekonecný.

Zvedni
Take

Karel zvedne jednu cihlu z pole, na kterém práve stojí. Jestliže tam žádná cihla není, dojde k chybe a Karel si bude stežovat, že nemá co sebrat.
Podminky / Vetveni
JeSever
IsNorth
Podmínka je platná v prípade, že Karel je otocen k severu (nahoru). Karel v tom prípade vykoná príkazy uvedené v závorce za podmínkou.
JeZed
IsWall
Podmínka je pravdivá v prípade, že Karel stojí na posledním polícku pred zdí a celem k ní. Kdyby udelal Krok (Move), narazil by do zdi.

JeCihla
IsBrick

Podmínka je platná v prípade, že Karel stojí na poli, na kterém je položená alespon jedna cihla.

Jinak
Else

Karel vykoná posloupnost príkazu v následujících závorkách, pokud predchozí podmínka neplatí.
Cykly
Dokud
While
Karel vykonává posloupnost povelu uvedených v závorkách níže, dokud podmínka uvedená za klícovým slovem Dokud (While) platí.
Dokud NE
While NOT
Karel vykonává posloupnost povelu uvedených v následujících závorkách, dokud podmínka uvedená za klícovým slovem neplatí.

Další informace

Prostredí xKarel umožnuje rekurzivní volání procedur (procedury mohou volat samy sebe), což dobre využijete pri vytvárení cyklu. Poznámky v kódu zacínají znakem #. Cokoli je na rádku napsáno za tímto znakem, je pri behu programu ignorováno. Pro prehlednost kódu je dobré psát jednotlivé príkazy na samostatné rádky, nicméne není to nutné. Celá procedura s výjimkou prvního definicního rádku (procedure XYZ) muže být zapsána ve složených závorkách v jediném rádku. Nesmí se však zapomínat na správné otevírání a zavírání složených závorek. Prostredí xKarel je treba nastavit podle toho, zda se používají základní povely v anglictine nebo v ceštine.

Príklady

V príkladu níže se Karel v poslední procedure naucil posbírat všechny cihly ve sloupci (procedura Vyprázdni Sloupec ). Aby to však dokázal z kteréhokoli místa v poli, musel se nejprve naucit nekolik jiných povelu.
procedure CelemVzad
{
#Otocí Karla o 180°
VlevoBok
VlevoBok

}


procedure  VyprázdniPole
{
# Odstraní z polícka všechny cihly,
# jsou-li tam nejaké

Dokud JeCihla
    {
      
 Zvedni
    }
}

procedure NaSever
{
# Otocí Karla na sever. Je jedno, kterým # smerem je Karel natocen nyní.
Dokud Ne JeSever
   { 
      VlevoBok
   }
 }

procedure NaJih
{
# Otocí Karla na jih s využitím uživatel-
# ských procedur NaSever a CelemVzad

NaSever
CelemVzad
}

procedure JdiKeZdi
{
 JeZed {} Jinak Krok 
} }


procedure VyprázdniSloupec
{
# Karel sebere všechny cihly ve sloupci
NaSever
CelemVzad
JdiKeZdi
CelemVzad
Dokud NE JeZed
   {
      VyprázdniPole
      Krok
   }
VyprázdniPole
}
Modre jsou klícová slova jazyku Karel, zelene poznámky, fialove uživatelské procedury. Další príklady najdete v xKarel.

No a ted kde je ta cache. Jo, to bych taky rád vedel . Zeptejte se Karla. Karel ji totiž nekam zašil a nerekl mi o tom ani popel. Nechal jsem ho chvíli bez dozoru, on zvlcil a zacal se programovat sám. Jenže ted se zacyklil a, jak vidno, není schopen to rozchodit. Že by tam mel chybku? Já se v tech jeho procedurách bez poznámek ani trochu nevyznám. Možná bude lepší vzít tužku a ctvereckový papír, abyste pochopili, co a jak to vlastne kódoval. Nebo si stáhnete xKarla a problém naleznete tam? Prizvete na pomoc deti? Anebo si nekomu reknete o sou...No fuj!


 

procedure WriteCoords
# Jen by me zajímalo, co jen se tomu Karlovi honilo hlavou...
# Just wondering what the heck Karel had on his mind while coding...
{
Vivian Emily Natasha Leyla Sarah Agniezka Sarah Madeleine Natasha Barbara Natasha Nicol Natasha Sylvia Sarah Petra Natasha Nora Natasha Nicol Natasha Madeleine Natasha Agniezka Natasha Stefanie Natasha Madeleine Natasha Barbara Natasha Monica Natasha Dana Natasha Nicol Natasha Petra Natasha
}

procedure Agniezka {Christine Maria2 TurnLeft Move TurnLeft Maria2}
procedure Andrea {Vivian TurnLeft Maria3 TurnRight Maria5}
procedure Barbara {Christine TurnLeft Move4 Put1Brick}
procedure Christine {Vivian TurnLeft Move2 TurnBack}
procedure Cathy {Monica TurnBack Move TurnLeft Move Take }
procedure Clara {While IsBrick {Take Clara}}
procedure Clara5 {Clara Move Clara Move Clara Move Clara Move Clara}
procedure Dana {Monica TurnRight TurnBack Move TurnRight Move Take}
procedure Emily {Vivian Move4 TurnBack Maria5 TurnRight Maria3 TurnRight Maria5}
procedure GoToWall {While NOT IsWall {Move GoToWall} Move} #Ouch!}
procedure Janette {Vivian Maria5 TurnLeft Maria3 TurnLeft Maria5 TurnLeft Maria3}
procedure Leyla {Christine Maria3 TurnLeft Maria3 TurnLeft Maria3 TurnRight Maria3 TurnRight Maria3}
procedure Madeleine {Vivian Maria3 TurnLeft Maria3 TurnLeft Move2 TurnBack Maria5}
procedure Marathon {Naomi GotoWall TurnLeft GotoWall TurnLeft GotoWall TurnLeft GotoWall TurnLeft}
procedure Maria2 {Put1Brick Move Put1Brick}
procedure Maria3 {Maria2 Move Put1Brick}
procedure Maria5 {Maria2 Move Maria3}
procedure Monica {Janette TurnLeft Move2 TurnLeft Move Put1Brick}
procedure Move2 {Move Move}
procedure Move4 {Move2 Move2}
procedure Naomi {While NOT IsNorth {TurnLeft} TurnBack}
procedure Natasha {Marathon Clara5 TurnLeft Move2 TurnLeft Clara5 TurnLeft Move TurnLeft Clara5 Vivian}
procedure Nicol {Christine Move TurnLeft Move Put1Brick TurnLeft Move TurnLeft Move TurnBack Maria5}
procedure Nora {Christine Maria3 TurnLeft Maria5 TurnLeft Maria3 TurnLeft Move2 TurnLeft Maria3}
procedure Petra {Christine TurnLeft Maria2}
procedure Put1Brick {While IsBrick {Take} Put}
procedure Sarah {Natasha Janette Natasha}
procedure Stefanie {Vivian TurnLeft Maria3 TurnRight Maria3 TurnRight Maria3 TurnLeft Maria3 TurnLeft Maria3}
procedure Sylvia {Vivian TurnLeft Maria3 TurnRight Maria5 TurnRight Maria3 TurnRight Move2 TurnRight Maria3}
procedure TurnBack {TurnLeft TurnLeft }
procedure TurnRight {TurnLeft TurnBack}
procedure Vivian {While NOT IsNorth {TurnLeft } GoToWall TurnLeft GotoWall TurnLeft}


No, každopádne mi dejte vedet, zda jste tu krabicku našli a jak jste se s Karlem skamarádili. A prosím obezretnost k mudlum a logy bez spoileru. At nám ta krabicka chvilku vydrží, at už je kde je. Díky 

Additional Hints (Decrypt)

[CZ] pnpur 8k8k4 pz mrfcbqn / [EN] pnpur 8k8k4 pz sebz orybj

Decryption Key

A|B|C|D|E|F|G|H|I|J|K|L|M
-------------------------
N|O|P|Q|R|S|T|U|V|W|X|Y|Z

(letter above equals below, and vice versa)



Return to the Top of the Page

Reviewer notes

Use this space to describe your geocache location, container, and how it's hidden to your reviewer. If you've made changes, tell the reviewer what changes you made. The more they know, the easier it is for them to publish your geocache. This note will not be visible to the public when your geocache is published.