Programmeringsolympiaden 2018

Relevanta dokument
Programmeringsolympiaden 2017

Programmeringsolympiaden 2015

Programmeringsolympiaden 2016

Programmeringsolympiaden 2010 Kvalificering

Programmeringsolympiaden 2014

Programmeringsolympiaden 2011 Kvalificering

Programmeringsolympiaden 2009 Kvalificering

Programmeringsolympiaden 2012 Kvalificering

Programmeringsolympiaden 2013

Programmeringsolympiaden 2008 Kvalificering

kl Tentaupplägg

Programmeringsolympiadens final 2012 TÄVLINGSREGLER

kl Tentaupplägg

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

Problem: FIL File Paths

UPPGIFT 1 V75 FIGUR 1.

Lutande torn och kluriga konster!

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

UPPGIFT 1 WILL ROGERS FENOMEN

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på layout, ett GUI-baserat program Frågor

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Programmeringsolympiadens final 2011 TÄVLINGSREGLER

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

Projektdokumentation för Othello

TENTAMEN: Design och konstruktion av grafiska gränssnitt DAT215/TIG091

Resurscentrums matematikleksaker

Tentaupplägg. Betygsgränser: 1 uppg 19:00 Betyg 3 2 uppg 18:00 Betyg 4 2 uppg 16:30 Betyg 5 3 uppg 18:00 Betyg 5

Finaltävling i Lund den 19 november 2016

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Tisdagen 26 april Tentamen består av 8 sidor

kl Tentaupplägg

Programmeringsolympiaden Kvalificering mars 2005 FIGUR 1.

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

UPPGIFT 1 TVETYDIGA DATUM

Programmeringsolympiadens final 2009

Tentaupplägg denna gång

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

Programmeringsolympiadens final 2010

Känguru Benjamin (6. och 7. klass) sida 1 / 5

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentaupplägg denna gång

! "# # # $ # " % & # # '(") " " )## (")"#*+*(, ( - " ' # (") #. % % /

kl Tentaupplägg

Programmering Grundkurs Laboration 1

kl Tentaupplägg

Handbok Svarta lådan. Nicolas Roffet Robert Cimrman Philip Rodrigues Lauri Watts Översättare: Stefan Asserhäll

Inlämningsuppgift-VT lösningar

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

kl Tentaupplägg

kl Tentaupplägg

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

TDDI16: Datastrukturer och algoritmer

Programmeringsolympiaden Final 6 maj 2004

Installera Anaconda Python

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

UPPGIFT 1 KANINER. Håkan Strömberg 1 Pär Söderhjelm

Tentamen TEN1 HI

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

DUGGA Tentaupplägg

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

kl Tentaupplägg

Bildkälla: Pixabay. 1) Timer: konstruktion av en maskin som skall välta en aluminiumburk vid en given tidpunkt.

SKYDD 800 är ett kopieringsskydd för flexskivor till ABC 800, ABC 802 och ABC 806.

kl Tentaupplägg

Värmedistribution i plåt

SKOLFS. beslutade den XXX 2017.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

kl Tentaupplägg

kl Tentaupplägg

TDP Regler

PM Banläggning i OCAD 12 CS

Uppgift 1 ( Betyg 3 uppgift )

Tentamen: Datordel Programmeringsteknik

HI1024 Programmering, grundkurs TEN

Regression med Genetiska Algoritmer

TDP Regler

UPPGIFT 1 VÄNSKAPLIGA REKTANGLAR

Lathund för att ta skärmdumpar för supportärenden samt dölja personuppgifter

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

Produktionsstöd har erhållits från Specialpedagogiska skolmyndigheten

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Du startar Jag Vill genom öppna mappen och klicka på programfilen Jag_Vill

Regler för Robotfemkamp under Robot-SM 2011

Pangea Matematiktävling FRÅGEKATALOG. Första omgång 2016 Årskurs 9

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

kl Tentaupplägg

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Tentaupplägg denna gång

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

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

Transkript:

Programmeringsolympiaden 2018 TÄVLINGSREGLER FÖR SKOLKVALET Tävlingen äger rum på av skolan bestämt datum under fyra timmar. Ingen förlängning ges för lunch eller raster. Eleven ska i förväg komma överens med läraren om att använda egen dator eller en som skolan tillhandahåller. I vilket fall som helst måste eleven befinna sig i avtalad lokal på skolan. Tävlingen består av fem uppgifter som vardera ska lösas genom ett datorprogram i valfritt programmeringsspråk. Indata kan läsas in i programmet på valfritt sätt, t.ex. genom att programmet för en dialog med användaren (som i körningsexemplena i uppgifterna), att de skrivs in i ett grafiskt gränssnitt eller att datafiler skickas till standard input. Kom bara överens med din lärare om hur programmet ska testas. Dina lösningar kommer att testköras med förpreparerade indata. Varje uppgift testas normalt med 5 testfall, som vardera ger 1 poäng om ditt program skriver ut korrekt svar inom en exekveringstidsgräns av 3 sekunder. Det är ofta olika begränsningar på de olika testfallen, t.ex. storleken på indata eller andra inskränkningar. Detta anges i uppgiften. Observera att det kan vara helt olika svårighetsgrad på en uppgift beroende på dessa skillnader. Det kan därför vara lättare att få delpoäng på en uppgift som verkar svår än att få full poäng på en uppgift som verkar lättare. Informationen om delpoäng är därför extremt viktig för att planera sin tävling. Ingen test av indata behöver göras, den följer specifikationerna i uppgiften. Rättningen utförs på samma eller likvärdig dator. Ändringar i källkoden tillåts ej efter tävlingen. Om programmet inte kan kompileras ges 0 p. på uppgiften. Om något av följande inträffar ger det testfallet 0 poäng, men programmet fortsätter testas med övriga testfall. Exekveringstiden överstiger 3 sekunder Exekveringsfel (run time error) Fel svar Deltagandet är individuellt vilket bland annat innebär att inget utbyte av idéer eller filer får ske under tävlingen. Hjälpmedel: Valfritt skriftligt material, material som finns installerat på datorn samt material som finns tillgängligt på internet. Det är inte tillåtet att aktivt kommunicera på internet (t.ex. chatta eller ställa frågor till ett forum) utan endast att söka efter information. Räknedosa är tillåten. Tävlingsbidraget ska lämnas in i form av källkodsfiler som läggs på utdelat minne eller i en av läraren angiven hårddiskkatalog. Filerna ska döpas till uppg1...uppg5 med passande filtillägg. Ingen hänsyn tas till andra filer. Var noga med att lämna in den korrekta versionen av ditt program. Lycka till! 1

UPPGIFT 1 TUNNELBANAN Baltic Olympiad in Informatics programmeringstävlingen för länderna i östersjöregionen kommer till våren att anordnas i Stockholm, och deltagarna kommer åka tunnelbana mellan vandrarhemmet och tävlingsarenan. På tunnelbanetågen finns det sätesgrupper med fyra säten vardera. Nu kommer ett antal grupper av deltagare och vill sätta sig. Varje grupp har storlek 1, 2, 3 eller 4. Helst skulle alla personerna i en grupp vilja sitta i samma fyrsätesgrupp, alltså slippa dela på sig. Hur många fyrsätesgrupper krävs för att detta ska vara möjligt? Skriv ett program som läser in fyra heltal a 1,a 2,a 3,a 4 antalet grupper av varje storlek (alla tal är mellan 0 och 100) och skriver ut det minsta antalet fyrsätesgrupper som behövs. Antal 1-grupper? 1 Antal 2-grupper? 1 Antal 3-grupper? 1 Antal 4-grupper? 1 Behövs: 3 En optimal placering i exempel 1 (streckade linjer avgränsar grupper av personer) Antal 1-grupper? 1 Antal 2-grupper? 2 Antal 3-grupper? 1 Antal 4-grupper? 0 Behövs: 2 En optimal placering i exempel 2. Körningsexempel 3 Antal 1-grupper? 0 Antal 2-grupper? 1 Antal 3-grupper? 2 Antal 4-grupper? 0 Behövs: 3 En optimal placering i exempel 3. För testfall värda 1 poäng finns inga grupper av storlek 1. För testfall värda 1 poäng finns inga grupper av storlek 2. För testfall värda 1 poäng finns inga grupper av storlek 3. För testfall värda 2 poäng gäller inga speciella begränsningar. 2

UPPGIFT 2 KÖPA MATTA Under IOI i Teheran i somras märktes en ökad efterfrågan på persiska mattor, i synnerhet sådana vars mönster utgörs av ett rutmönster med L B rutor (se bild ovan), eftersom dessa är mycket lämpliga för att i hemlighet prova ut algoritmer på. En mattas pris brukar avgöras av antalet rutor, så en typisk kund vill ha en matta med minst M rutor och högst N rutor. Om det finns flera möjliga mattor vill kunden ha en så kvadratisk matta som möjligt, d.v.s. den vill att L B är så litet som möjligt. Skriv ett program som läser in talen M och N och skriver ut det bästa valet av B och L (den minsta sidlängden först). Det kommer alltid finnas ett unikt bästaval. Minimalt antal rutor? 13 Maximalt antal rutor? 13 Bästa mått: 1 13 Minimalt antal rutor? 60 Maximalt antal rutor? 70 Bästa mått: 8 8 Körningsexempel 3 Minimalt antal rutor? 750 Maximalt antal rutor? 755 Bästa mått: 26 29 För testfall värda 2 poäng gäller att 1 M N 1000 För testfall värda 1 poäng gäller att M = N, och 10 11 M 10 12 För testfall värda 2 poäng gäller att 10 8 M N 10 12 3

UPPGIFT 3 FLYTTKARTONGER Du har just hjälpt en kompis att flytta, men tyvärr har du fastnat i fel ände av en smal korridor full med flyttkartonger. Korridoren består av N staplar av flyttkartonger, där stapel nummer i innehåller a i kartonger. Alla kartonger är lika stora. Det enda sättet att ta sig ut är att gå ovanpå staplarna från stapel 1 till stapel N. Om man befinner sig på en stapel kan man gå till en närliggande stapel, men bara om den inte är högre än den man står på. Om stapeln man står är minst två kartonger högre än en närliggande stapel kan man dessutom knuffa ner den översta kartongen från stapeln man står på till den närliggande stapeln. Detta kan upprepas hur många gånger som helst. Du befinner dig just nu på stapel 1. Tyvärr kanske det är omöjligt för dig att komma till stapel N. Men som tur är får du lägga till valfritt antal extra kartonger till stapel 1 innan du börjar gå. Skriv ett program som beräknar hur många extra kartonger du behöver lägga till för att kunna ta dig till stapel N. Programmet ska läsa in antalet staplarn, och sedan höjdena i på varje stapel. Programmet ska skriva ut det minsta antalet extra kartonger som behöver läggas till. Antal staplar? 4 Stapel 1? 1 Stapel 2? 2 Stapel 3? 3 Stapel 4? 2 Extra kartonger: 3 Antal staplar? 3 Stapel 1? 5 Stapel 2? 2 Stapel 3? 3 Extra kartonger: 0 Körningsexempel 3 Bilden visar exempel 1. De mörkgrå kartongerna är extrakartonger. Strategin är att knuffa ner den översta extrakartongen till stapel 2. Därefter kan man gå raka vägen till stapel 4. Det inte hade fungerat med färre än 3 extrakartonger. Antal staplar? 6 Stapel 1? 30 Stapel 2? 5 Stapel 3? 10 Stapel 4? 15 Stapel 5? 13 Stapel 6? 30 Extra kartonger: 261 För testfall värda 1 poäng gäller att N = 3, 1 a i 20. 1 poäng 3 N 5, 1 a i 100. 1 poäng 5 N 10, 1 a i 1000. 2 poäng 10 N 20, 1 a i 3000. 4

UPPGIFT 4 BRICKOR Karin har hittat på ett ensamspel som spelas med Othello-brickor, vilka är svarta på ena sidan och vita på andra sidan. Hon lägger ut en rad med brickor, som var och en kan vara svart eller vit. Målet är att få alla brickor att ha den vita sidan uppåt. Ett drag är att plocka ut ett intilliggande par av brickor någonstans ur sekvensen, vända på dem (vit blir svart, svart blir vit), och lägga tillbaka dem antingen i början av raden eller i slutet av raden, utan att ändra parets inbördes ordning. Skriv ett program som, givet den ursprungliga raden av brickor (en sträng med enbart bokstäverna S och V och längd mellan 3 och 15 tecken), skriver ut det minsta antalet drag som behövs för att göra alla brickor vita. För givna testdata kommer det alltid vara möjligt att nå målet. Drag 1 Drag 2 Drag 3 Drag 4 Klart En möjlig dragsekvens i exempel 2 Brickor? SVVSVVV Minst antal drag: 2 Brickor? VSVSSSVVVV Minst antal drag: 4 För testfall värda 3 poäng är strängens längd högst 10, och svaret högst 6. För testfall värda 2 poäng gäller inga speciella begränsningar. 5

UPPGIFT 5 DUTUB Du vet att du borde lägga dig vid det här laget! Men du ska bara kolla lite mer på DuTub innan du lägger dig. Det finns ett antal kategorier du är intresserad av. Varje video på DuTub kan tillhöra en eller flera kategorier. Innan du lägger dig måste du ha sett minst en video i varje kategori. Men du vill förstås inte vara uppe längre än nödvändigt. Skriv ett program som, givet en lista på videor, beräknar den minsta möjliga tid du måste titta för att ha sett minst en video från varje kategori. Programmet ska läsa in antalet videorn och sedan, för var och en av den videorna, dess längd i sekunder (ett heltal mellan 1 och 900) samt en sträng som anger de kategorier som videon tillhör. Varje bokstav (som är mellan a och j) betecknar en kategori. Varje video tillhör minst en kategori, och inga kategorier upprepas i en videos beskrivning. Det kan sammanlagt finnas högst 10 olika kategorier. Programmet ska skriva ut det minsta antalet sekunder du behöver spendera på DuTub innan du sett videor ur alla kategorier. Antal videor? 5 Video 1, längd? 200 Video 1, kategorier? ei Video 2, längd? 150 Video 2, kategorier? e Video 3, längd? 10 Video 3, kategorier? g Video 4, längd? 50 Video 4, kategorier? gb Video 5, längd? 60 Video 5, kategorier? i Antal videor? 6 Video 1, längd? 268 Video 1, kategorier? abe Video 2, längd? 271 Video 2, kategorier? ca Video 3, längd? 262 Video 3, kategorier? da Video 4, längd? 145 Video 4, kategorier? cd Video 5, längd? 150 Video 5, kategorier? ebc Video 6, längd? 143 Video 6, kategorier? deb Svar: 250 Svar: 412 Förklaring av körningsexempel 1: Här finns det totalt 4 kategorier: e, i, g, b, som står för ekorrar, igelkottar, getter och bumbibjörnar. Den tredje videon (g) ger ingenting, för vi måste ändå se den fjärde videon (gb), då den är den enda som innehåller bumbibjörnar. Vi föredrar video 1 framför video 2+5, eftersom dess totala tid är kortare och täcker in båda kategorierna igelkottar och ekorrar. Svaret är alltså 250 sekunder, genom att titta på den första och fjärde videon. För testfall värda 1 poäng gäller 1 N 10, och varje video tillhör bara en kategori. För testfall värda 2 poäng gäller 1 N 10. För testfall värda 2 poäng gäller N = 30. 6