TDT4110 IT Grunnkurs Høst 2014

Like dokumenter
TDT4105 IT Grunnkurs Høst 2014

Hvor i All Verden? Del 2 Erfaren Scratch PDF


Øvingsforelesning 1 Python (TDT4110)

NIO 1. runde eksempeloppgaver

Algoritmer og Datastrukturer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

København 20 Stockholm

N-dronningproblemet Obligatorisk oppgave 1 I120, H-2000

UNIVERSITETET I OSLO

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4105 IT Grunnkurs Høst 2012

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4100 Objektorientert programmering

Brukerveiledning for SMS fra Outlook

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

Norsk informatikkolympiade runde

TDT4105 IT Grunnkurs Høst 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Norsk informatikkolympiade runde

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

ALGORITMER OG DATASTRUKTURER

TDT4110 IT Grunnkurs Høst 2016

Hjemmeeksamen 1 i INF3110/4110

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2015

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

Informasjon Eksamen i IN1000 høsten 2017

TDT4110 IT Grunnkurs Høst 2012

Algoritmer og Datastrukturer

TDT4110 IT Grunnkurs Høst 2014

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4110 IT Grunnkurs Høst 2014

Tegneprogram Journeyman Scratch PDF

TDT4110 IT Grunnkurs Høst 2012

Hannametoden en finfin nybegynnermetode for å løse Rubik's kube, en såkalt "layer-by-layer" metode og deretter en metode for viderekommende.

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Grunnleggende Grafteori

SIF8010 ALGORITMER OG DATASTRUKTURER

INF1000 HashMap. Marit Nybakken 2. november 2003

IN1000 Obligatorisk innlevering 7

TDT4110 IT Grunnkurs Høst 2016

Løpende strekmann Erfaren Videregående Python PDF

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Øvingsforelesning 9 i Python (TDT4110)

Steg 1: Regneoperasjoner på en klokke

Steg 1: Rest etter divisjon

Norsk informatikkolympiade runde

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Informasjon Prøveeksamen i IN1000 høsten 2018

Steg 1: Hvordan styre figurer med piltastene

Brukermanual for kommuneansvarlig og testleder

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

INF2220: Forelesning 2

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Lars Vidar Magnusson

TDT4110 IT Grunnkurs Høst 2012

EKSAMEN med løsningsforslag

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

TDT4110 IT Grunnkurs Høst 2017

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Sprettball Erfaren ComputerCraft PDF

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

UNIVERSITETET I OSLO

TDT4105 IT Grunnkurs Høst 2014

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Start et nytt Scratch-prosjekt. Slett kattefiguren, for eksempel ved å høyreklikke på den og velge slett.

UNIVERSITETET I OSLO


Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Disjunkte mengder ADT

Hvor i All Verden? Del 2. Introduksjon. Steg 0: Forrige gang. Skrevet av: Geir Arne Hjelle

TDT4110 IT Grunnkurs Høst 2016

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Norsk informatikkolympiade runde

Repetisjon Novice Videregående Python PDF

Robotinvasjon Introduksjon ComputerCraft PDF

UNIVERSITETET I OSLO

Backtracking som løsningsmetode

Halloweenimasjon Introduksjon Scratch PDF

TDT Datateknologi, programmeringsprosjekt

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

Enarmet banditt Nybegynner Scratch Lærerveiledning

INF120: Oblig 3. Yngve Mardal Moe

Bruk av oppgaver og grupper i

Oppsummering fra sist

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

Løsningsforslag for Eksamensoppgave i TDT4190 Distribuerte systemer

Algoritmer og Datastrukturer

ITF20006 Algoritmer og datastrukturer Oppgavesett 7

Transkript:

TDT4110 IT Grunnkurs Høst 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Øving 10 Denne øvingen er en to-ukers øving (prosjekt) og inneholder én stor oppgave. Les oppgaveteksten nøye, og ta deg god tid. 1 Skumleskogen Som del av din ferd til Dragvoll idrettssenter TM for å avlegge eksamen i ITGK er du nødt til å traversere Skumleskogen. Skumleskogen er, som alle skumle skoger, formet som en labyrint (figur 1). Å komme inn i skogen er ikke noe problem, men siden utgangen av skogen er låst, er det er ikke mulig å forlate uten å finne de forskjellige nøklene gjemt i de aller skumleste hjørnene av skogen. Som om ikke det var nok så huser skogen noen skikkelig skumle skapninger, nærmere bestemt søte menneskespisende kaniner. Hvis du skulle være så uheldig å møte på en kanin så ville jo det bety en garantert død, men heldigvis gir menneskespisende kaniner fra seg en ekkel stank som kan kjennes noen meter unna. Hvordan kan du løse dette problemet og komme deg til eksamen før kl 08:50? 1 Oppgavebeskrivelse I denne oppgaven skal du skrive et program som løser et labyrintspill representert som et tre. Målet med spillet er å komme seg fra inngangsnoden til utgangsnoden, men på veien til utgangsnoden befinner det seg noder som du ikke kan traversere uten å låse opp først (låsnoder). For å låse opp låsnoder må du først samle nøkler ved besøke nøkkelnoder i treet og plukke opp nøkkelen. Noen ganger så betyr dette at du må snu og utforske en annen retning i jakt på en nøkkel. I tillegg til låsnoder finnes det såkalte superlåsnoder som krever to nøkler for å bli låst opp. Til slutt inneholder treet kanin-noder, som er dødelige (dvs. at du taper spillet hvis du besøker de), og stank-noder, som har den funksjon at de alltid befinner seg ved siden av kanin-noder. Figurene 1, 2, og 3 illustrerer tre forskjellige representasjoner av den samme instansen (dvs. brettet) av spillet. Den siste figuren, figur 3 er en mye enklere representasjon enn det grafiske bildet i figur 1. I stedet for å skrive kode som traverserer dette treet, skal du bruke et rammeverk, dvs. en samling med ferdige funksjoner, for å løse denne oppgaven. Rammeverket er implementert i fila skumleskogen.py som er lagt ved øvingen, og består av en rekke funksjoner som utfører forskjellige handlinger eller gir informasjon om noden man er i. Rammeverket holder styr på hvor man er i treet og sjekker alltid hvorvidt en handling du prøver å utføre er lovlig. Rammeverket er beskrevet i detalj i tabell 2. Husk å inkludér rammeverket ved å skrive from skumleskogen import * i starten av svarfilen din. Den interne representasjonen som rammeverket jobber med er det binære treet i figur 3 som består av noder av forskjellige typer 2. De forskjellige nodene og deres funksjon er beskrevet i tabell 1. 1 Retorisk spørsmål. 2 Alternativt kan du se på det som at nodene inneholder forskjellig informasjon/data. Side 1 av 7

Løsningshint Før du begynner å skrive programkode er det anbefalt å først løse problemet med penn og papir. Etterpå kan du transformere penn-og-papir-algoritmen din til programkode. Det finnes flere måter å løse dette problemet på, men en rett-fram måte er å holde styr på hvilke barn (høyre/venstre) man har besøkt for hver node man møter på, og gå tilbake og prøve en annen retning hvis man har besøkt begge barna uten å komme i mål (dvs. at noden er en blindvei eller at utgangene er stengt). Vi kaller denne samlingen av besøkt-informasjon for hver node for hukommelsen til algoritmen. (Node)hukommelse kan du implementere ved hjelp av en Python-dictionary som mapper nodenummer med en annen dictionary (eller liste) med en boolsk verdi for hvert barn. Eksempel 1: Representasjon av hukommelse Definer denne en eller annen plass, f.eks på toppen av fila: hukommelse = {} For hver ny node som ikke er i hukommelsen: n = nummer () if n not in hukommelse : hukommelse [n] = { " venstre ": False, " hoyre ": False } Oppdater nøklene venstre og høyre etter hvert som du besøker de retningene: hukommelse [n][" venstre "] = True # f. eks For å nullstille hukommelsen: hukommelse = {} NB: Hvis du plukker opp en nøkkel er det enklest å glemme all informasjon om nodene (nullstille hukommelsen) siden denne representasjonen kan ha markert stien til en låsnode som en blindvei (fordi du ikke hadde en nøkkel når du fant låsnoden). Nå som du har en nøkkel, er du nødt til å besøke låsnoden igjen. Alternativt kan du oppdatere hukommelsen på en slik måte at stien til låsnoden blir satt som ubesøkt, eller så kan du bruke en helt annen representasjon/algoritme enn den som er anbefalt her. a) Skriv et program som importerer skumleskogen.py og løser dette problemet (kommer seg ut av skumleskogen) ved hjelp av grensesnittet/rammeverket beskrevet i tabell 2. skumleskogen.py inneholder dens samme skogen som er vist i figur 1. b) skumleskogen2.py inneholder et alternativt tre som ikke er vist grafisk i denne oppgaven. Importer skumleskogen2.py isteden for skumleskogen.py og kjør algoritmen din på det nye treet som en test på at algoritmen din fungerer generelt for alle skumle skoger (dvs. at den ikke hardkoder løsningen for treet i figur 1). Side 2 av 7

Figur 1: Skumleskogen Side 3 av 7

Figur 2: Hvis vi representer alle blindveier og vendepunkt (kryss) i labyrinten som en node og kobler alle nodene sammen, vil vi ha en representasjon av labyrinten som kan brukes til å løse problemet programatisk. Side 4 av 7

Figur 3: Ved å omrokere litt på disse nodene ser man at de faktisk former et binært tre. Dette er på grunn av at labyrinten er hva som kalles en klassisk labyrint. Side 5 av 7

Bilde Node Nodetype Beskrivelse Vanlig Dette er helt vanlige noder. Du kan gå til høyre, venstre, eller tilbake fra en slik node. Nøkkel Denne noden inneholder én nøkkel, men er ellers som en vanlig node. Noden blir til en vanlig node om du plukker opp nøkkelen. Lås Denne noden er en låsnode. Du må låse opp låsnoden med én nøkkel for å kunne gå videre (men du kan gå tilbake). Superlås Denne noden er en superlåsnode. Disse fungerer som vanlige låsnoder, men du må bruke to nøkler for å låse den opp. Kanin Denne noden inneholder en kanin. Hvis du havner på denne taper du spillet, og algoritmen din er ganske sikkert feil. Stank Denne noden stinker, noe som betyr at en eller flere noder ved siden av inneholder en kanin. Inngang Denne noden representerer inngangen til skogen. Utgang Denne noden representerer utgangen av skogen. Hvis du havner på denne noden så kan du gå ut og vinne spillet. Tabell 1: Beskrivelse av nodetypene Side 6 av 7

Handling Type Beskrivelse nummer() Alle Returnerer det (unike) nummeret til noden. Dette kan du bruke for å holde styr på om du har besøkt en node før. er_vanlig() Alle Returnerer True om noden er en vanlig node; False ellers. er_nokkel() Alle Returnerer True om noden er en nøkkelnode; False ellers. er_laas() Alle Returnerer True om noden er en låsnode eller superlåsnode; False ellers. er_superlaas() Alle Returnerer True om noden er en eller superlåsnode; False ellers. er_inngang() Alle Returnerer True om noden er inngangsnoden; False ellers. er_utgang() Alle Returnerer True om noden er utgangsnoden; False ellers. er_stank() Alle Returnerer True om noden er en stanknode; False ellers. gaa_hoyre() Alle Gå til den høyre noden. Hvis det ikke er en (åpen) vei til høyre så returnerer denne funksjonen False; ellers returnerer den True. gaa_venstre() Alle Gå til den venstre noden. Hvis det ikke er en (åpen) vei til venstre så returnerer denne funksjonen False; ellers returnerer den True. gaa_tilbake() Alle Gå tilbake til foreldrenoden. Hvis du er på inngangsnoden så returnerer denne funksjonen False; ellers returnerer den True. gaa_ut() Utgang Flykt fra skumleskogen. Hvis du utfører denne handlingen så vinner du spillet. plukk_opp() Nøkkel Plukk opp en nøkkel. Nøkkelnoden blir til en vanlig node etter at du kaller denne funksjonen. laas_opp() Lås, Superlås Lås opp en låsnode eller superlåsnode. Vanlige låsnoder krever én nøkkel mens superlåsnoder krever to nøkler for å bli låst opp. Ved suksess blir noden til en vanlig node. Ellers returnerer funksjonen False. Tabell 2: Rammeverk for denne oppgaven Side 7 av 7