International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor



Relevanta dokument
Problem: FIL File Paths

Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB

HI1024 Programmering, grundkurs TEN

Uppgift 1 ( Betyg 3 uppgift )

HI1024 Programmering, grundkurs TEN

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

Uppgift 1 ( Betyg 3 uppgift )

Programmeringsolympiaden 2008 Kvalificering

Föreläsning 3-4 Innehåll

Programmeringsolympiaden 2014

F5: Högnivåprogrammering

F5: Högnivåprogrammering

HI1024 Programmering, grundkurs TEN

Uppgift 1 ( Betyg 3 uppgift )

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

TDDI16: Datastrukturer och algoritmer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

HI1024 Programmering, grundkurs TEN

Tentamen TEN1 HI

Programmeringsteknik med C och Matlab

HI1024 Programmering, grundkurs TEN

Inlämningsuppgift 4 NUM131

C++ Slumptalsfunktioner + switch-satsen

Datalogi, grundkurs 1

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Planering av ett större program, del 2 - for och listor. Linda Mannila

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

UPPGIFT 1 V75 FIGUR 1.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Tentamen TEN1 HI

HI1024 Programmering, grundkurs TEN

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

2D1342 Programkonstruktion för F1, ht 2006

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

DAT043 - föreläsning 8

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen OOP

DUGGA Tentaupplägg

UPPGIFT 1 LAMELLER. Minsta antalet hål: 1. Första lamellen? Andra lamellen? Minsta antalet hål: 3

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Tentamen, EDAA10 Programmering i Java

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tillämpad Programmering (ID1218) :00-13:00

Teoretisk del. Facit Tentamen TDDC (6)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Tentaupplägg denna gång

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Uppgift 1 (grundläggande konstruktioner)

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Uppgift 1 ( Betyg 3 uppgift )

Chapter 3: Using Classes and Objects

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Värmedistribution i plåt

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Variabler och konstanter

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Objektorienterad programmering, Java, 5p TDBA63

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

kl Tentaupplägg

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Tentamen Datastrukturer D DAT 036/INN960

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

kl Tentaupplägg

Några svar till TDDC70/91 Datastrukturer och algoritmer

kl Tentaupplägg

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

kl Tentaupplägg

TDDC74 Programmering, abstraktion och modellering. Tentamen

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Classes och Interfaces, Objects och References, Initialization

UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

TUTORIAL: SAMLING & KONSOLL

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

kl Tentaupplägg

Föreläsning 2: Avlusning och antilustekniker

kl Tentaupplägg

Transkript:

Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm är att använda fåglarna för att skicka ett meddelande M till ett land långt bort. Hennes meddelande M är en följd av N (inte nödvändigtvis olika) heltal, alla från 0 till 255. Yanee har K tränade papegojor. Alla papegojor ser likadana ut, Yanee kan inte skilja på dem. Varje fågel kan komma ihåg ett heltal från 0 till R. Inledningsvis provade Yanee en väldigt enkel metod för att skicka ett meddelande. Hon släppte ut fåglarna en i taget. Innan fågeln flög iväg tilldelade hon den nästa tal i följden. Olyckligtvis fungerade inte det, eftersom fåglarna inte kom fram i samma ordning som de skickades iväg. Yanee kunde således skicka över alla talen i följden, men inte i rätt ordning. Yanee behöver en bättre metod, och det är där du kommer in. Hon vill att du skriver ett program som utför två operationer: Ditt program ska kunna läsa ett meddelande M och transformera det till en följd av K heltal mellan 0 och R som hon kommer att tilldela fåglarna, som tidigare. Ditt program ska också kunna läsa en lista med heltal mellan 0 och R och transformera det tillbaka till det ursprungliga meddelandet M. Du kan anta att papegojorna alltid kommer fram, och att de kommer ihåg det tal de blev tilldelade. De kan dock komma fram i godtycklig ordning. Observera att Yanee bara har K papegojor, så följden av heltal mellan 0 och R som du ska producera kan innehålla högst K heltal. Din uppgift Implementera två funktioner. En används av avsändaren (encode) och den andra av mottagaren (decode). Processen visas nedan. De två funktioner du ska skriva är: Funktionen encode(n,m) som tar följande parametrar: N meddelandets längd. M en en-dimensionell lista med N heltal, d.v.s. meddelandet. Du kan anta att 0 M[i] 255 för 0 i < N. Funktionen måste koda meddelandet M till en följd av heltal mellan 0 och R, som ska skickas ut med papegojorna. För att ange vilken följd som ska användas ska funktionen anropa send(a) för varje heltal a som du vill ge till en papegoja. Sida 1 av 5

Funktionen decode(n,l,x) som tar följande parametrar: N längden på det ursprungliga meddelandet. L längden på det mottagna meddelandet (antalet fåglar). X en en-dimensionell lista med L de mottagna talen. Talen X[i] (för 0 i < L) är precis de tal som din funktion encode producerade, men i annan ordning. Funktionen måste återskapa det ursprungliga meddelandet. För att returnera svaret måste din funktion anropa output(b) för varje tal b i det avkodade (ursprungliga) meddelandet, i rätt ordning. För att korrekt lösa en given deluppgift måste din funktion uppfylla följande villkor: Alla heltal skickade från din procedur måste ligga i intervallet angiven i deluppgiften. Antalet anrop funktionen encode anropar funktionen send får inte överstiga K angiven i deluppgiften. Var vänlig att observera att K beror på längden på meddelandet. Funktionen decode måste korrekt återskapa originalmeddelandet M och anropa funktionen output(b) exakt N gånger, med b lika med M[0], M[1],..., M[N-1], respektive. I sista deluppgiften varierar din poäng beroende på kvoten mellan längderna på det kodade meddelandet och originalmeddelandet. Exempel Betrakta fallet där N = 3, och 10 M= 30 20 Funktionen encode(n,m), som använder någon skum metod, kodar meddelandet till en sekvens av heltal (7, 3, 2, 70, 15, 20, 3). För att rapportera sekvensen, anropas funktionen send enligt följande: send(7) send(3) send(2) send(70) send(15) send(20) send(3) När alla papegojor anlänt till destinationen, anta att vi får följande lista heltal: (3, 20, 70, 15, 2, 3, 7). Funktionen decode kommer bli anropad med N=3, L=7, och X= 3 20 70 15 2 3 Sida 2 av 5

Funktionen decode ska återskapa originalmeddelandet (10, 30, 20). Den rapporterar sitt result genom anrop till funktionen output enligt följande: output(10) output(30) output(20) Deluppgifter Deluppgift 1 (17 poäng) N = 8, och varje heltal i vektorn M är antingen 0 eller 1. Varje kodat heltal måste ligga i intervallet från 0 till R=65535, inklusive. Deluppgift 2 (17 poäng) 1 N 16. Varje kodat heltal måste ligga i intervallet från 0 till R=65535, inklusive. Deluppgift 3 (18 poäng) 1 N 16. Deluppgift 4 (29 poäng) 1 N 32. Sida 3 av 5

Deluppgift 5 (up to 19 poäng) 16 N 64. Antalet tillåtna anrop till funktionen send är max K=15 N. Viktigt: poängen för den här deluppgiften beror på kvoten mellan längden på det kodade meddelandet och originalmeddelandet. För ett givet testfall t i den här deluppgiften, låt Pt=Lt/Nt vara kvoten mellan längden Lt av det kodade meddelandet och längden Nt av originalmeddelandet. Låt P vara maximum of alla Pt. Din poäng för denna deluppgift bestäms enligt följande regler: Om P 5, får du alla 19 poäng. Om 5 < P 6, får du 18 poäng. Om 6 < P 7, får du 17 poäng. Om 7 < P 15, blir din poäng 1 + 2 (15 - P), avrundat neråt till närmaste heltal. Om P > 15 eller om någon av dina outputs är felaktiga får du 0 poäng. Implementationsdetaljer Gränser Rättarmiljön: I den riktiga rättarmiljön kommer din inskickning bli kompilerad till två program e och d som körs separat. Både encoder- och decoder modulen kommer bli länkade till varje program, men e anropar enbart encode och d anropar enbart decode. CPU-tidsgräns: Program e kommer göra 50 anrop till funktionen encode och ska köra under 2 sekunder. Program d kommer göra 50 anrop till funktionen decode och ska köra under 2 sekunder. Minnesgräns: 256 MB Observera: Det finns ingen explicit gräns för stackstorleken. Stacken räknas in i det totala minnesanvändandet. Gränssnitt (API) Implementationskatalog: parrots/ Att implementeras av den tävlande: encoder.c eller encoder.cpp eller encoder.pas decoder.c eller decoder.cpp eller decoder.pas Observera för C/C++ programmerare: både i exempelrättaren och i den riktiga rättaren länkas encoder.c[pp] och decoder.c[pp] tillsammans med rättaren. Därför ska du deklarera alla globala variabler inuti varje fil som static för att förhindra dem från att krocka med variabler från andra filer. Gränssnitt för tävlande: encoder.h eller encoder.pas decoder.h eller decoder.pas Sida 4 av 5

Rättargränssnitt: encoderlib.h eller encoderlib.pas decoderlib.h eller decoderlib.pas Exempelrättaren: grader.c eller grader.cpp eller grader.pas Exempelrättaren exekverar två separata omgångar. I varje omgång anropas först encode med den givna datan, och sedan anropas decode med utdatan som funktionen encode producerade. I första omgången ändras inte ordningen på heltalen i det kodade meddelandet. I andra omgången byter exempelrättaren plats på heltalen på udda och jämna positioner. Den riktiga rättaren kommer göra en mängd olika permutationer på det kodade meddelandet. Du kan ändra hur exempelrättaren blandar datan genom att modifiera funktionen shuffle (i C/C++) eller Shuffle (i Pascal). Exempelrättaren kontrollerar dessutom både storleken och längden på den kodade datan. Som default kontrollerar den att den kodade datan ligger i intervallet 0 till 65535, inklusive, och att längden är max 10 N. Du kan ändra detta genom att justera konstanterna channel_range (från 65535 till 255, t.ex.) och max_expansion (från 10 till 15 eller 7, t.ex.). Indata till exempelrättaren: grader.in.1, grader.in.2,... Observera: Exempelrättaren läser indata i följande format: Linje 1: N Linje 2: en lista med N heltal: M[0], M[1],..., M[N-1] Förväntad utdata från exempelrättaren: grader.expect.1, grader.expect.2,... För den här uppgiften ska alla filer bestå av texten Correct. Sida 5 av 5