Stránka 1 z 2

Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 19:13
od jirislav
Zdravím lidi,

dneska jsem se rozhodl začít s programováním a jak jsem četl již dřív doporučené programy pro začátečníky, zvolil jsem si Karla. Chápu všechny jeho schopnosti a jak je použít. Ale nejde mi pořád do hlavy, jak napsat umělou inteligenci, aby dělal určité příkazy, dokud se nedostane domů. Vytvořil jsem takové bludiště, abych se pak mohl kochat svým výtvorem, ale pořád ne a ne na to přijít :( ..

Zjednodušil jsem to příkazem Domů :D :

Kód: Vybrat vše

DOMŮ
  DOKUD NENÍ DOMOV
    HLEDEJ
  KONEC
KONEC

, ale stále netuším, jak vytvořit příkaz HLEDEJ, aby došel domů :(

Už jsem došel k tomu, aby dokázal obcházet zdi:

Kód: Vybrat vše

HLEDEJ
  KDYŽ JE ZEĎ
    VLEVO-VBOK
  KONEC, JINAK
      VPRAVO-VBOK
    KDYŽ NENÍ ZEĎ
      KROK
    KONEC, JINAK
      RYCHLE
        VLEVO-VBOK
        KROK
      KONEC
    KONEC
  KONEC
KONEC


Za předpokladu

Kód: Vybrat vše

VPRAVO-VBOK
  RYCHLE
    VLEVO-VBOK
    VLEVO-VBOK
    VLEVO-VBOK
  KONEC
KONEC

Jak jsem ho viděl obcházet zdi, tak jsem si ze začátu řekl:"A mám to!!" .. ale před koncem se dotal do smyčky :-( :evil:

Přikládám odkaz na město, které jsem mu vytvořil, tady

Dík za nápady programátoři, možná to je taky podle možností Karla neeřešitelný problém co? .. a co kdyby nebyl domov u zdi? :D

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 21:13
od faraon
Karel umí poznat jestli na daném poli už byl nebo ne, prostě si na něj polož značku příkazem POLOŽ.
Pro procházení bludiště je nejvhodnější rekurze, tak že příkaz HLEDEJ otestuje všechny směry z pole kde Karel stojí, a pokud tam není zeď, zavolá sám sebe, aby z dalšího pole udělal totéž.
Jenže než se začne rozhlížet a zkoušet další směry z druhého pole, musí otestovat jestli už tam byl, a to pozná podle značky! V takovém případě zase fofrem vycouvá a pokračuje z původního pole jiným směrem...

Začínat rovnou bludištěm je dost odvážné, nejdřív zkus vymyslet jak se Karel dostane do levého dolního rohu a výchozí pozice (čelem k východu) v prázdném městě bez překážek, z kteréhokoliv pole i směru do kterého je otočený ;-)

VPRAVO-VBOK se dá udělat i jinými způsoby, třeba takhle:

Kód: Vybrat vše

VPRAVO-VBOK
  ČELEM-VZAD
  VLEVO-VBOK
KONEC


nebo

Kód: Vybrat vše

VPRAVO-VBOK
  OPAKUJ 3
    VLEVO-VBOK
  KONEC
KONEC

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 21:28
od X
Jó Karel ... toho učí ve školce, ne? :D

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 21:41
od faraon
Ve školce učí Baltíka, Karla vyučují na Stanfordské univerzitě :-D

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 21:52
od jirislav
faraon píše:Začínat rovnou bludištěm je dost odvážné...

Já jsem odvážný v mnoha všcech, nejenom v Karlovi :D
faraon píše:...VPRAVO-VBOK se dá udělat i jinými způsoby

Ano, to jsem si přečetl v helpu :) .. díky

BTW dík, žes mi připomněl ty značky jeho, nenapadlo mě, že by šly tato využít :) .. už jdu na to, až to budu mít hotové, tak se pochlubím kódem :-P

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 21:59
od alenka_v_říši_divů
Chtěl jsem se zeptat... k čemu ti ten "Karlo kurz" je? Baví tě to?

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 22:13
od jirislav
K rozšíření logického přemýšlení. Jde vidět, že jsem na tom zatím hodně bledě. :blush:

A je to dobrý pocit, když vytvoříš něco, co funguje podle tvých představ :)

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 22:18
od memphisto
[OT]To víš, chlap má jenom 4,5 litru krve a hold to je málo na prokrvení obou orgánů[/OT]

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 22:46
od alenka_v_říši_divů
jirislav: jasně, chápu tě... :) Tak až něco v Karlovi vytvoříš, tak dej vědět... :)

Re: Nevím si rady s Karlem :((

Napsal: 14 kvě 2011 23:38
od Andrew98
memphisto píše:[OT]To víš, chlap má jenom 4,5 litru krve a hold to je málo na prokrvení obou orgánů[/OT]

konečně dobrá hláška na co se vymluvit ve škole :D

Re: Nevím si rady s Karlem :((

Napsal: 15 kvě 2011 02:02
od jirislav
Dostal jsem ho domů, ale nevím, co mám špatně, že neví že je doma, poradí mi nějaký expert na Karla prosím? :D

tady je slovník:

Kód: Vybrat vše

Karel1.2%0AP%0A24%0AL%0910%2C1%0AP%096%2C4%203%2C13%2C1%2C1%2C1%0AVZAD%096%2C13%2C13%2C1%2C1%0AJDI%099%2C1%0AB%u011A%u017D%093%20-1%2C16%2C1%2C1%0AHLEDEJ1%092%201%2C13%2C0%2C14%2C2%20-1%2C6%2C9%2C1%2C0%2C6%2C13%2C9%2C1%2C1%2C1%2C1%0ADOM%u016E%0920%2C3%20-3%2C24%2C1%2C1%0AV%DDCHOD%096%2C3%20-4%2C13%2C1%2C1%2C1%0AFAKE%0920%2C4%208%2C16%2C1%2C14%2C17%2C14%2C17%2C14%2C17%2C13%2C17%2C13%2C17%2C14%2C17%2C13%2C17%2C1%0ATAK%092%20-2%2C13%2C0%2C22%2C19%2C1%2C1%0AHLEDEJ2%092%201%2C14%2C0%2C13%2C2%20-1%2C6%2C9%2C1%2C0%2C6%2C14%2C9%2C1%2C1%2C1%2C1%0AHLEDEJ%094%2024%2C18%2C1%2C4%202%2C23%2C1%2C1%0AKONEC


A tady mapka:

Kód: Vybrat vše

Karel1.0%0AM%0A0%201%0A2%0A0%209%0A..X.......%0A...X....XX%0A....X..X..%0A...X..X...%0A..X.......%0A..X..XXX..%0A...X...XX.%0A....X.....%0A.......XXX%0A..........%0AKONEC

Dík moc, dostane se domů tlačítkem domů :)

Byl bych moc vděčný za návrh, jak to opravit :)

Re: Nevím si rady s Karlem :((

Napsal: 15 kvě 2011 10:43
od faraon
alenka_v_říši_divů píše:... k čemu ti ten "Karlo kurz" je?


Karel rozvine tvoje logické myšlení směrem k počítačovému, a naučí tě základy strukturovaného programování, dělení programů do bloků a správné použití rekurze. Přitom se nemusíš zabývat nějakými typy proměnných, syntaktickými obezličkami (stačí mu jen KONEC) ani záhadnými slovy v cizím jazyce... A k tomu přidej pár dalších věcí, například je to docela zábavná hra ;-)
Hodně zajímavé je porovnávat svoje řešení a postupy s jinými programátory, protože "je víc způsobů jak stáhnout kočku z kůže", neboli "tisíc programátorů napíše stejný program tisíci různými způsoby".
Příklad - Karel dojde ke zdi, klasicky iterací:

Kód: Vybrat vše

KE-ZDI-I
  DOKUD NENÍ ZEĎ
    KROK
  KONEC
KONEC


a stejná činnost rekurzivně:

Kód: Vybrat vše

KE-ZDI-R
  KDYŽ NENÍ ZEĎ
    KROK
    KE-ZDI-R
  KONEC
KONEC


Jak bys naučil Karla namalovat přesně takovýhle domeček, a pak přidáním jednoho nového příkazu program změnil na ten panelák vedle něj? V ideálním případě využij toho že se oba domy skládají z pater a na každém patře jsou dva pokoje :bigups:

Kód: Vybrat vše

╔══════════╗          ╔══════════╗
║          ║          ║          ║
║          ║          ║ ███████  ║
║    █     ║          ║ █ █ █ █  ║
║   █ █    ║          ║ ███████  ║
║  █   █   ║          ║ █ █ █ █  ║
║ ███████  ║          ║ ███████  ║
║ █ █ █ █  ║          ║ █ █ █ █  ║
║ ███████  ║          ║ ███████  ║
║ █ █ █ █  ║          ║ █ █ █ █  ║
║ ███_███  ║          ║ ███_███  ║
╚══════════╝          ╚══════════╝

Jako perličku můžeš po skončení práce Karla nechat dojít do dveří (počítej s tím že u každého domu skončí někde jinde a jinak postavený ale proveď to stejným příkazem) a otočit se směrem k člověku, podívat se ti do očí.
Tohle je zrovna můj oblíbený úkol, používám ho když někomu Karla (aneb jak se vlastně ty počítače programují) předvádím. A abych pravdu řekl, pokaždé jsem to naprogramoval trochu jinak :lol:

memphisto píše:[OT]To víš, chlap má jenom 4,5 litru krve a hold to je málo na prokrvení obou orgánů[/OT]


A proto programátor musí používání obou velmi důkladně oddělit, nejlépe když si napíše program co mu bude hlídat časový rozvrh :-D Jako je to v tom starém vtipu:

Proč má programátor vedle manželky ještě milenku?
Manželka si myslí, že je u milenky a milenka si myslí, že je u manželky... a on si zatím může v klidu programovat.





jirislav: Musíš otestovat DOMOV nejen na začátku, ale pokaždé než se Karel z daného pole někam pohne. Pěkně sis usnadnil práci příkazy P a L, ale zase si jí třeba komplikuješ zbytečnostmi, jako je RYCHLE, na to se klidně vykašli (navíc čím méně řádků, tím je program přehlednější a pochopitelnější), nastav si posuvníkem vpravo dole rychlost kterou stihneš sledovat a pozoruj jak Karel tančí. Přitom se snaž odhadnout ve které části programu se zrovna nachází.
Pro srovnání ta moje verze se značkami:

Kód: Vybrat vše

NAJDI-DOMOV
  KDYŽ NENÍ DOMOV
    POLOŽ
    OPAKUJ 4-KRÁT
      KDYŽ NENÍ DOMOV
        KDYŽ NENÍ ZEĎ
          KROK
          KDYŽ NENÍ ZNAČKA
            NAJDI-DOMOV
          KONEC
          KDYŽ NENÍ DOMOV
            COUVNI
          KONEC
        KONEC
        VLEVO-VBOK
      KONEC
    KONEC
  KONEC
KONEC


Kód: Vybrat vše

COUVNI
  ČELEM-VZAD
  KROK
  ČELEM-VZAD
KONEC


Kód: Vybrat vše

ČELEM-VZAD
  VLEVO-VBOK
  VLEVO-VBOK
KONEC


Podívej se kde všude testuji jestli už Karel není doma, to vrtění na konci nevadí, tam se jen dokončují cykly a vrací se z jednotlivých vnoření.
Je to psané trochu narychlo, takže by to šlo ještě dost optimalizovat, například aby Karel nezkoušel směr ze kterého přišel, nebo přeskočil zbývající část cyklů OPAKUJ, to couvání by se dalo rozdělit, aby neprováděl celou otočku navíc...