Skip to content

Commit

Permalink
Merge pull request #1 from alexabm/main
Browse files Browse the repository at this point in the history
Uke 46: eksamensøving
  • Loading branch information
mathiajs authored Nov 9, 2025
2 parents db3877b + 3580c75 commit 94cea75
Show file tree
Hide file tree
Showing 2 changed files with 729 additions and 0 deletions.
296 changes: 296 additions & 0 deletions pensum/uke46/eksamensoving.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,296 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "7b5c67f9",
"metadata": {},
"source": [
"\n",
"# TDT4109 øvingsøkt: Eksamenslignende kodeoppgaver (ca. 45 min). \n",
"\n",
"Dette er et eksempelsett på de oppgavene på eksamen dere skriver og som ikke kan kjøres. Det anbefales derfor at dere prøver dere på alle oppgavene ordentlig, før dere eventuelt kjører koden. Hvis du ikke får til en oppgave kan du fortsatt bruke løsningen av den i videre oppgaver.\n",
"\n",
"\n",
"Oppgavene er basert på at det for tiden er festivalfeber i Trondheim, men de frivillige har svært dårlig programmeringskompetanse og trenger derfor din hjelp til å fikse opp i noen uregelmessigheter. \n",
"\n",
"# 🧩 Oppgave 1 – hent_konsertnavn(...)\n",
"\n",
"Navn på konsertene har blitt tuklet med, og kan komme på formatet \"Cez3i.n2and0!\", mens vi her helst skulle hatt \"Cezinando\" her. Du må altså fjerne alle tegn som ikke er bokstaver fra konsertnavnet. \n",
"\n",
"Skriv funksjonen hent_festivalnavn(string) som returnerer konsertnavnet som streng med alle elementer som bokstaver, i samme rekkefølge slik de var i input (store/små bokstaver skal også beholdes). Eksempel på kjøring:\n",
"```python\n",
">>> hent_konsertnavn(\"Cez3i.n2and0o!\")\n",
"\"Cezinando\"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bbd1c706",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "ae03ff51",
"metadata": {},
"source": [
"# 🎤 Oppgave 2 – lag_konsert(...)\n",
"\n",
"Hver konsert skal representeres som en dictionary med informasjon. Lag funksjonen lag_konsert(navn, scene, starttid, varighet) som returnerer et dictionary på formatet:\n",
"```python\n",
"{'navn': 'Cezinando', 'scene': 'Hovedscenen', 'start': 18.0, 'slutt': 19.5}\n",
"```\n",
"Her er altså varighet = 1.5. Navnet på artisten kan fortsatt være tuklet med... Disse hersens festivalfolka assa. Eksempel på kjøring:\n",
"```python\n",
">>> lag_konsert(\"Cez3i.n2and0!0\", \"Byscenen\", 22.5, 4)\n",
"{'navn': 'Cezinando', 'scene': 'Bycenen', 'start': 22.5, 'slutt': 2.5}\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8f24e36d",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "fe0fe983",
"metadata": {},
"source": [
"# 🎬 Oppgave 3 – film_info(...)\n",
"\n",
"Festivalen har også filmoppvisninger. Hver film har tilhørende informasjon om regissør og årstall lagret som et dictionary:\n",
"```python\n",
"film = {\"tittel\": \"Barbie\", \"regissør\": \"Greta Gerwig\", \"år\": 2023}\n",
"```\n",
"Skriv funksjonen film_info(film) som returnerer en streng på formatet: \n",
"```python\n",
"\"Barbie (2023) - regissert av Greta Gerwig\"\n",
"```\n",
"Du kan anta at feltene har gyldige data i input."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "85b646cb",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "44dca63e",
"metadata": {},
"source": [
"# 🎟️ Oppgave 4 - CSV til liste\n",
"\n",
"Du har fått tekstfilen \"konserter.csv\" i et CSV-liknende filformat (CSV-fil = Comma-Separated Values) som vist her:\n",
"```\n",
"Dag,Artist 1,Artist 2,Artist 3, ...\n",
"1,Cezinando,Flo Rida,Pikekyss\n",
"2,Undergunn,Børge Haugset\n",
"3,Dagny,Ka2,Erna,Arif&Stig\n",
"```\n",
"Her er separatoren komma. Vi kan ha vilkårlig mange artister per linje.\n",
"\n",
"Lag koden som laster den inn som en Python-tabell (2D-liste, eller liste-med-lister).\n",
"CSV-filen har headers/overskrifter (Dag:Artist 1,Artist 2,Artist 3, ...). De skal vi ikke inkludere her.\n",
"```python\n",
">>> hent_tabell('data.csv')\n",
"[[\"Cezinando\", \"Flo Rida\", \"Pikekyss\"], [\"Undergrunn\", \"Børge Haugset\"], [\"Dagny\", \"Ka2\", \"Erna\", \"Arif&Stig\"]]\n",
"```\n",
"Lag funksjonen `hent_tabell` som tar inn `filnavn`, laster inn filen og returnerer den som en Python-tabell som vist i eksempelet over. \n",
"\n",
"OBS! Hvis filen ikke finnes skal funksjonen returnere strengen `\"File not found\"`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "89c5c75d",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "c7fc7d1b",
"metadata": {},
"source": [
"# ⚠️ Oppgave 5 - lenge siden sist Cez?\n",
"\n",
"Lag funksjonen `sist_dato` som tar i mot:\n",
"- 2 datoer formatert som tuple: (år, måned, dag)\n",
"\n",
"Du skal finne avstanden mellom datoene, og sist_dato skal returnere ny dato.\n",
" \n",
"Gå ut i fra at:\n",
"- Skuddår ikke finnes\n",
"- Alle måneder har 31 dager\n",
" \n",
"Eksempler:\n",
"```python\n",
">>> sist_dato((2024, 11, 28), (2024, 11, 29))\n",
"(0, 0, 1)\n",
" \n",
">>> sist_dato((2024, 11, 28), (2025, 11, 28))\n",
"(1, 0, 0)\n",
" \n",
">>> sist_dato((2024, 1, 1), (2025, 3, 4))\n",
"(1, 2, 3)\n",
" \n",
">>> sist_dato((2024, 11, 1), (2028, 1, 2))\n",
"(3, 2, 1)\n",
" \n",
">>> sist_dato((2024, 10, 31), (2026, 1, 3))\n",
"(1, 2, 3)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c0a8dcf8",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "52d5c71b",
"metadata": {},
"source": [
"# 🎸 Oppgave 6 - summer_heiarop(...)\n",
"\n",
"Ulike artister er ulikt populære, så vi ønsker å avgjøre hvem som heies mest på.\n",
"\n",
"Lag funksjonen `summer_heiarop` som tar i mot:\n",
"\n",
" En liste l\n",
"\n",
" Et dictionary d\n",
"\n",
"Oppførsel og krav:\n",
"Funksjonen SKAL være rekursiv, og resultatet av kallet til funksjonen skal være:\n",
"En dictionary med artistene i lista l som nøkler, og antallet ganger de opptrer som verdier.\n",
"Du får ikke lov til å iterere over lista.\n",
"\n",
"Ja, denne er enkel å løse uten rekursjon. Poenget med oppgaven er å se om du klarer å løse oppgaven med de verktøyene du er gitt.\n",
" \n",
"Eksempler:\n",
"```python\n",
">>> summer_heiarop([\"Cezinando\", \"Aurora\", \"Aurora\", \"Aurora\", \"Børge\"], {})\n",
"{'Cezinando': 1, 'Aurora': 3, 'Børge': 1}\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f69b57be",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "d158476f",
"metadata": {},
"source": [
"# 📂 Oppgave 7 - lagre til fil\n",
"\n",
"Artistenes heiarop skal nå lagres til en fil.\n",
"\n",
"Lag funksjonen save_scores(heiarop)\n",
"Funksjonen skal ha dictionarien *heiarop* fra forrige oppgave som parameter, og lagre til fil slik:\n",
"- Artistenes navn og deres totale heiarop i filen *heiarop.txt*. \n",
"- Artistene skal sorteres etter hvor mange heiarop de har fått, der høyeste antall kommer først og laveste antall kommer sist. \n",
"- Hvis flere artister har fått like mange heiarop så skal de skrives på den samme linjen, disse artistenes navn skal i så fall sorteres etter navn (A før B) separert med komma og mellomrom.\n",
"```\n",
">>> save_scores(heiarop)\n",
"```\n",
"Filen skal da ende opp med følgende innhold:\n",
"```\n",
"3: Aurora\n",
"1: Børge, Cezinando\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ab86d14b",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "80022db7",
"metadata": {},
"source": [
"# 🧮 Oppgave 8 - avg_heiarop(heiarop)\n",
"\n",
"Vi ønsker å finne ut hva gjennomsnittlig antall heiarop på festivalen er. Slår vi fjorårets?\n",
"\n",
"Lag funksjonen avg_heiarop(heiarop) som tar inn dictionarien heiarop som parameter. Funksjonen SKAL bruke numpy til å beregne gjennomsnittlig antall heiarop og returnere dette som et avrundet tall med to desimaler.\n",
"```python\n",
">>> import numpy as np\n",
">>> print(avg_heiarop(heiarop))\n",
"1.67\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1aa2372d",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading

0 comments on commit 94cea75

Please sign in to comment.