# Programmeringsutmaningar Dessa programmeringsutmaningar är till för dig som känner dig klar med de andra uppgifterna vi gör i klassrummet, och vill ha något mer utmanande. Utmaningarna är lite klurigare, kräver mer tid och problemlösning, och ibland även verktyg som vi eventuellt inte har gått igenom än. Du får göra utmaningarna i vilken ordning du vill. ## Matematiska utmaningar ### Utmaning 1 Skriv ett program som kan avgöra om ett givet tal är ett primtal eller inte. Testa ditt program med större och större tal, och se om du kan hitta olika metoder som förbättra tiden det tar att köra programmet. ### Utmaning 2 Skriv ett program som frågar efter ett tal och genererar så många [fibonacci tal](https://sv.wikipedia.org/wiki/Fibonaccital). Fibonacci talen bestäms så att varje tal är summan av de två tidigare talen. ### Utmaning 3 Skriv ett program som undersöker [Collatz problem](https://sv.wikipedia.org/wiki/Collatz_problem). Problemet är följande: * Utifrån ett positivt heltal gör följande: * Om talet är jämnt, dela det på två * Om talet är udda, multiplicera det med 3 och addera 1 * Upprepa proceduren med det nya talet du får, tills talet är 1, då proceduren avbryts * Finns det något tal som inte leder till att du får talet 1? Undersök problemet genom att genomför proceduren för olika tal. Skriv ut hur många upprepningar av proceduren varje tal leder till. Testa sedan för större och större tal. ## Större projekt ### Utmaning 1 Bygg ett [*wordle*-spel](https://www.nytimes.com/games/wordle/index.html) som går att spela i konsolen. Spelet går ut på att man ska gissa sig fram till ett 5 bokstäver långt ord med ett begränsat antal försök. Efter varje försök ska man få reda på hur vilka bokstäver som är på rätt plats och vilka som finns i ordet men är på fel plats. ### Utmaning 2 Bygg ett tre i rad spel som går att spela i konsolen. Representera brädet med en array av strings med nio platser, där varje plats antingen är X, O eller tom. Låt spelaren välja vilken plats den vill spela på genom att skriva in en siffra 0-8, och växla sedan spelare. När du har en fungerande version av spelet kan du utveckla det gneom att: * Låta spelaren istället skriva in koordinater, till exempel `1,3` för att välja rutan på första raden, tredje kolumnen * Låta spelare spela mot datorn, som slumpvis (eller ännu mer avancerat: med hjälp av en strategi) placerar ut pjäser på spelplanen ### Utmaning 3 Skapa ett program där användaren ska skriva in maträtter. För varje maträtt kan man ange namn och taggar för vilken slags maträtt det är. Användaren kan sedan be om en vecko-meny med slumpade maträtter. Utveckla programmet med: * Användaren ska kunna redigera befintliga maträtter * Vecko-menyn ska vara så varierad som möjligt, utifrån taggarna. * Användaren ska kunna se en lista på maträtter utifrån en kategori som användaren skriver in. *Tips:* Använd klasser för att representera maträtterna. ## Fler utmaningar Fler utmaningar hittar du på [advent of code](https://adventofcode.com/). Här finns en utmaning för varje dag i december fram till julafton, som blir svårare för varje dag. På hemsidan hittar du utmaningar från gamla år också. **Obs**: dessa är på engelska och kräver ofta att man kan läsa in information från en fil (det går vi igenom i programmering 2). Vill du ha hjälp att komma igång så säg till!