Programmeringsolympiaden 2010 Kvalificering

Relevanta dokument
Programmeringsolympiaden 2009 Kvalificering

Programmeringsolympiaden 2011 Kvalificering

Programmeringsolympiaden 2013

Programmeringsolympiaden 2018

Programmeringsolympiaden 2015

Programmeringsolympiaden 2014

Programmeringsolympiaden 2012 Kvalificering

Programmeringsolympiaden 2017

Programmeringsolympiaden 2008 Kvalificering

Programmeringsolympiaden 2016

UPPGIFT 1 WILL ROGERS FENOMEN

Programmeringsolympiaden Final 6 maj 2004

Programmeringsolympiadens final 2010

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

Programmeringsolympiadens final 2009

UPPGIFT 1 FORTSÄTT TALFÖLJDEN

Programmeringsolympiadens final 2012 TÄVLINGSREGLER

UPPGIFT 1 TVETYDIGA DATUM

Programmeringsolympiadens final 2011 TÄVLINGSREGLER

UPPGIFT 2 KVADRATVANDRING

UPPGIFT 1 V75 FIGUR 1.

Programmering Grundkurs Laboration 1

kl Tentaupplägg

Tentamen TEN1 HI

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

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

UPPGIFT 1 VÄNSKAPLIGA REKTANGLAR

Programmeringsolympiaden Kvalificering mars 2005 FIGUR 1.

Tentaupplägg denna gång

kl Tentaupplägg

kl Tentaupplägg

Programmeringsolympiadens final 2008

DEN RUNDA TUNNELN EN UNDERSKATTAD FIENDE

kl Tentaupplägg

Introduktion till Matlab

Tentaupplägg denna gång

UPPGIFT 1 PRESIDENTVALET

TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter

TDIU Regler

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

Tentamen, EDAA10 Programmering i Java

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Några satser ur talteorin

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tentaupplägg denna gång

Kinnekulle Ring Under bron

LEKTION PÅ GRÖNA LUND, GRUPP 1

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

Lutande torn och kluriga konster!

Känguru 2019 Student gymnasiet

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

REGIONSEMIFINAL 2019 LAGEN

Övning 6 - Tillämpad datalogi 2012

MMA132: Laboration 2 Matriser i MATLAB

TATM79: Föreläsning 2 Absolutbelopp, summor och binomialkoefficienter

Ekvationen.

Uttryck, satser och strömhantering

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

kl Tentaupplägg

BaraTrav Prenumeration och Installation Version 1.3.4

kl Tentaupplägg

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

Kortspel. Ett spel - tusen upplevelser

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

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

BRIDGE MASTER 2000 SCANDINAVIA av Fred Gitelman

GRUPP 1 JETLINE. Åk, känn efter och undersök: a) Hur låter det när tåget dras uppför första backen? Vad beror det på? (Tips finns vid teknikbordet)

UPPGIFT 1 ÖVERSÄTTNING

kl Tentaupplägg

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

STÄNG AV FÖNSTER. Regler FLAGGSPECTRUM I FLAGGSPECTRUM II FLAGGSPECTRUM III FLAGGSPECTRUM STJÄRNSPEL

kl Tentaupplägg

Tentamen TEN1 HI

Inlämningsuppgifter, EDAF30, 2015

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

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Symmetri är ett begrepp, som kan berika matematikstudierna i alla åldrar.

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

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

TALTEORI FÖR ALLA 1 Juliusz Brzezinski

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

i LabVIEW. Några programmeringstekniska grundbegrepp

Laboration: Whitebox- och blackboxtesting

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

Tentaupplägg denna gång

FÖR ALLA MEDLEMMAR I GAMLEBY BK KLUBBMÄSTERSKAP-2017

2. 1 L ä n g d, o m k r e t s o c h a r e a

kl Tentaupplägg

a = a a a a a a ± ± ± ±500

6 Derivata och grafer

Introduktion till Matlab

HI1024 Programmering, grundkurs TEN

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

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

Uppgift 1 ( Betyg 3 uppgift )

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

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

Transkript:

Programmeringsolympiaden 2010 Kvalificering TÄVLINGSREGLER Tävlingen äger rum på ett av skolan bestämt datum under sex timmar effektiv tid. Tävlingen består av sex uppgifter som samtliga ska lösas genom ett datorprogram. Uppgifterna ska lösas i valfritt programmeringsspråk. Du får till och med byta språk mellan olika uppgifter. Dina lösningar kommer att testköras med förpreparerade indata. Klarar ditt program alla testerna får du 2 poäng för uppgiften. Delpoäng (1 poäng) kan komma att utdelas då programmet inte klarar alla testerna. Ingen närmare bedömning av programkoden görs. Samtliga uppgifter leder fram till program vars exekveringstid normalt bör understiga 1 sekund. Skulle en lösning leda fram till ett program vars exekveringstid överstiger 10 sekunder bedöms programmet för det testexemplet som felaktigt. Rättningen utförs på samma eller likvärdig dator. Om, vid rättningen, fel uppstår vid kompilering bedöms programmet direkt som felaktigt och lösningen ger 0 poäng. Ingen test av indata behöver göras. Alla testdata följer de specifikationer som givits i uppgiften. Om det trots detta, vid rättningen, uppstår exekveringsfel vid körning av programmet bedöms programmet som felaktigt för det testexemplet. Deltagandet är individuellt vilket bland annat innebär att inget utbyte av idéer eller filer får ske under tävlingen. Internet får inte användas under tävlingen. Hjälpmedel: Programspråkens manualer, minst ett exemplar tillgängligt i datorsalen. Formelsamling och räknedosa för varje deltagare. Tävlingsbidraget ska lämnas in i form av källkodsfiler som läggs i roten på utdelad diskett eller i en av läraren angiven hårddiskkatalog. Filerna ska döpas till uppg1...uppg6 med passande filtillägg. Ingen hänsyn tas till andra filer. Var noga med att lämna in den korrekta versionen av ditt program. Årets International Olympiad in Informatics (IOI) anordnas i Kanada i augusti. Kanske blir du en av dem som representerar Sverige där. Lycka till! Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 1

UPPGIFT 1 BUSSKORTET Du ska köpa ett busskort. Det är ett påtankningskort som du laddar med pengar, därefter kan du åka på kortet tills pengarna tagit slut. Du vet att du ska åka för K kronor, där K 10000. Att ladda kortet tar sin tid eftersom du endast kan ladda kortet med 500, 200 eller 100 kr i taget. Du har för tillfället bråttom och vill därför utföra så litet antal transaktioner som möjligt, men aldrig tanka på mer pengar än nödvändigt. Om du ska åka för 800 kronor ska du alltså först ladda med 500, sen med 200, därefter med 100 kr. Om du däremot ska åka för 850 kronor ska du först ladda med 500 och därefter ladda med 200 två gånger. Visserligen går 50 kronor till spillo, men det är ändå det bästa alternativet. Skriv ett program som beräknar det minsta antalet transaktioner du behöver göra. Åka för? 850 Antal transaktioner: 3 Åka för? 1800 Antal transaktioner: 5 Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 2

UPPGIFT 2 SLÄKTTRÄFFEN Det är släktträff för ättlingar till Ida-Ottilia Isaksson. För enkelhets skull har man upprättat ett släktträd och numrerat alla ättlingarna från 1 till N, samt givit Ida-Ottilia själv numret 0. Bland de M personerna vid ditt bord uppkommer en diskussion om vem som är er närmaste gemensamma släkting. Skriv ett program som räknar ut detta. 0 0 5 3 2 3 2 8 6 4 4 1 7 1 FIGUR 1. Släktträden för de två körningsexemplen. Programmet ska fråga efter antalet ättlingar, N, (2 N 20) och därefter fråga efter numret på varje persons förälder, vilket naturligtvis alltid är mellan 0 och N. Därefter ska programmet fråga efter antalet personer vid bordet, M (2 M N), och läsa in numret på var och en av dem. Programmet ska skriva ut numret på den person som är närmast gemensam släkting (uppåt i trädet) till alla vid bordet. Observera att detta ibland kan vara någon vid bordet. Antal ättlingar? 8 Förälder till nr 1? 6 Förälder till nr 2? 0 Förälder till nr 3? 0 Förälder till nr 4? 2 Förälder till nr 5? 0 Förälder till nr 6? 5 Förälder till nr 7? 6 Förälder till nr 8? 5 Antal vid bordet? 3 Person 1 vid bordet? 1 Person 2 vid bordet? 5 Person 3 vid bordet? 8 Antal ättlingar? 4 Förälder till nr 1? 2 Förälder till nr 2? 0 Förälder till nr 3? 0 Förälder till nr 4? 3 Antal vid bordet? 2 Person 1 vid bordet? 4 Person 2 vid bordet? 1 Närmaste släkting: 0 Närmaste släkting: 5 Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 3

UPPGIFT 3 KRYPTERING A B Z V C Y W X Krypterad bokstav D Z E A F B G C Ursprunglig bokstav H D I E J Y U F G K X T L H W S M I V R Q T P U S O R N P L M Q N J O K FIGUR 2. Bokstavssnurran. De 26 bokstäverna (A-Z) är placerade i ordning (medurs) på båda skivorna. Bilden visar utgångsläget för krypteringen i första exemplet, sedan snurras skivan 9, 12, 15, 18,... steg för varje kodad bokstav. En måttligt framgångsrik bataljon använder sig av en variant av Vignère-krypto för att kryptera sina meddelanden. Man använder sig av en bokstavssnurra (se figur ovan) som består av två ringar med bokstäverna i alfabetet (A-Z) där den inre kan förskjutas i förhållande till den yttre. När man krypterar sitt meddelande så letar man rätt på bokstaven på den inre skivan men i den krypterade texten skriver man istället motsvarande bokstav på den yttre skivan. För att förvilla fienden så snurrar man den inre skivan ett antal steg (medurs) mellan kodningen av varje bokstav. Och för att göra det extra svårt så snurrar man inte lika många steg varje gång utan man ökar antalet steg med ett konstant värde varje gång. Dessutom kan snurran ha vilket läge som helst när man börjar koda. Du har kommit på ett sätt att knäcka koden: du har nämligen upptäckt att alla meddelanden börjar med HEJ. Skriv ett datorprogram som, givet den krypterade texten skriver ut det ursprungliga meddelandet. Meddelandet innehåller endast versalerna A-Z (alltså t.ex. inga blanksteg) och är mellan 3 och 20 bokstäver långt. Krypterad text? LRIJOUZRIYAQIRAG Meddelande: HEJVITARENFIKANU Krypterad text? GCGDJJI Meddelande: HEJHOPP Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 4

UPPGIFT 4 FERMATS LEK 3 3 3 3 A = B + C + D +... Skriv ett program, som givet ett heltal A, där 2 A 100, hittar det minsta antalet heltal B, C, D,..., där 1 B, C, D,... < A, så att ekvationen ovan uppfylls. Enligt Fermats stora sats 1 finns det aldrig någon lösning med enbart två termer. Om det finns flera lika korta lösningar ska programmet skriva ut vilken som helst av dem och ordningen på talen spelar ingen roll. A? 6 Tal: 3 4 5 A? 8 Tal: 2 2 4 6 6 1 Satsen gäller alla exponenter större än 2 och bevisades av Andrew Wiles så sent som 1995. Specialfallet med exponent 3 bevisades dock av Euler redan 1770. Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 5

UPPGIFT 5 UPPSTÄLLNING N personer, numrerade från 1 till N, står uppställda huller om buller på en rad. Du ska få personerna att stå i nummerordning (1, 2, 3,..., N) genom att ge ett antal kommandon. Med varje kommando omvänder du ordningen på ett valfritt antal intill varandra stående personer. Skriv ett program som beräknar det minsta antalet kommandon du behöver ge. 4 1 3 2 1 4 3 2 1 2 3 4 FIGUR 3. Den översta raden visar utgångsställningen i det första körningsexemplet, den mellersta raden ställningen efter ett kommando och den nedersta raden slutställningen. Programmet ska fråga efter antalet personer N, där 2 N 8, och sedan efter utgångsställningen. Du kan förutsätta att de inmatade talen är mellan 1 och N och att varje tal förekommer exakt en gång. Programmet ska skriva ut det minsta antalet kommandon som krävs för att ställa personerna i nummerordning. Antal personer? 4 Person på position 1? 4 Person på position 2? 1 Person på position 3? 3 Person på position 4? 2 Minsta antal kommandon: 2 Antal personer? 2 Person på position 1? 1 Person på position 2? 2 Körningsexempel 3: Antal personer? 5 Person på position 1? 3 Person på position 2? 5 Person på position 3? 1 Person på position 4? 4 Person på position 5? 2 Minsta antal kommandon: 3 Minsta antal kommandon: 0 Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 6

UPPGIFT 6 TRÄJÄRNVÄGEN Träjärnväg är en klassisk leksak. I denna uppgift används en enkel variant där det finns två sorters bitar: Raka bitar med längden R Kurvbitar som motsvarar exakt en fjärdedel av en cirkel med radien R. Dessa är vändbara så att de kan svänga såväl åt höger som åt vänster. Nora är tre år och har tröttnat på att dra sitt tåg fram och tillbaka. Det hon funderar över är hur många olika sätt man kan bygga ihop en given uppsättning bitar till en tågbana. Hjälp henne genom att skriva ett datorprogram som räknar ut svaret. En tågbana måste innehålla alla bitarna och den måste sitta ihop så att tåget kan köra runt. Den får inte korsa sig själv eller ens ha någon punkt eller sträcka gemensam. Två tågbanor räknas som identiska om man kan starta ett tåg på vardera banan (valfri plats och riktning) och tågen då upplever precis samma serie av kurvor och raksträckor då de kör ett varv. Sådana tågbanor ska alltså inte räknas dubbelt. Det totala antalet bitar överstiger aldrig 18. Körningsexempel 1 (figuren ovan): Antal raka bitar? 8 Antal kurvbitar? 6 Antal tågbanor: 10 Körningsexempel 2 (figuren nedan): Antal raka bitar? 0 Antal kurvbitar? 12 Antal tågbanor: 3 Fler exempel på nästa sida... Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 7

Körningsexempel 3: Antal raka bitar? 2 Antal kurvbitar? 6 Antal tågbanor: 0 Körningsexempel 4: Antal raka bitar? 4 Antal kurvbitar? 6 Antal tågbanor: 1 Körningsexempel 5: Antal raka bitar? 2 Antal kurvbitar? 8 Antal tågbanor: 6 Pär Söderhjelm, Arash Rouhani, Rikard Lundmark, Erik Sandberg och Jimmy Mårdell 8