2010-04-06.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Skriv den funktion, draw_figure, som ritar ut en liksidig figur enligt exemplen nedan med så många hörn som anges som parameter till funktionen (den ritar alltså ut en N-hörning om parametern är talet N). Funktionen skall inte rita ut något alls om man anger färre sidor än 3. Det är självklart så att man skall kunna ange godtyckligt många sidor. > draw_figure(3) Körexempel 2: > draw_figure(4) Körexempel 3: > draw_figure(5) Körexempel 4: > draw_figure(7) Körexempel 5: > draw_figure(20) Körexempel 6 (HELT utanför tentan :-): > draw_figure(1) Tips 1: Det är inte nödvändigt att klara exempel 6 (enhörningen) för godkänt på uppgiften. Tips 2: Ni behöver heller inte klara av strängar som indata (som t.ex. nos :-).
2010-04-06.kl.14-19 Uppgift 2 Som alla vet är Kesselloppet ett mycket känt rymdlopp som går ut på att ta sig mellan ett antal avsläppspunkter på kortast sträcka. Alltså är det den rymdkapten som är bäst på astronavigation (även kallat astrogation) som kommer att åka kortaste sträckan. Det sägs att rymdkaptenen Hans Olofsson klarade Kesselloppet med skeppet Årtusendefalken på under 12 parsec. Det finns många olika astrogationsalgoritmer för att beräkna den totala längden av loppet men alla kräver samma indata: en karta över rymden samt en startposition (se körexemplet). För enkelhetens skull håller vi oss här till det tvådimensionella planet. Megadatorn Xanté500 använder en funktion calc_total_length som fungerar på följande (icke så) brillianta sätt: 1. Sätt startpunkten till aktuell position. 2. Beräkna avståndet från startpunkten till alla avsläppspunkter, ta den kortaste av dem och lägg till detta till totallängden. 3. Markera denna avsläppspunkt som besökt. 4. Om det inte finns några fler avsläppspunkter: Avsluta. 5. Sätt startpunkten till den senast markerade avsläppspunkten och gå till 1. >> map = [ 1 0 0 1 1 ; 0 0 0 0 0 ; 0 0 0 0 0 ; 0 1 0 1 0 ; 0 0 0 0 1 ]; >> x = 1; >> y = 1; >> calc_total_length(map, x, y) 11.7388 Körexempel 2: >> map = [ 1 0 0 0 0 ; 1 0 0 0 0 ; 1 0 0 0 0 ; 1 1 0 0 1 ]; >> calc_total_length(map, 3, 4) 10.0000 OBS! Avståndet mellan två intilliggande punkter (horisontellt och vertikalt) är 1 parsec. Hmmmm. Man kan ju lätt fixa en resa som är kortare än 10 parsec i det sista exemplet om man hittar på en annan algoritm, men det hade de som programmerade Xanté500 inte lyckats komma på och därför var det den kortaste vägen just då. Ni skall inte offra tid på bättre algoritmer i denna tenta. Ni SKALL implementera algoritmen som är given i denna uppgift.
2010-04-06.kl.14-19 Uppgift 3 I algebra tycker många om inversberäkningar på matriser. Detta finns förstås inbyggt i MatLab, men er uppgift är att skapa en egen sådan. Ni får inte använda er av den inbyggda för att lösa problemet. Dock får ni använda denna för att kontrollera ert resultat när ni provkör er funktion. Er funktion skall heta my_inverse och den skall ta emot en kvadratisk matris. Vi antar för enkelhets skull att vi inte kommer att råka ut för att behöva byta rader i ursprungsmatrisen eller att vi får nollelement i diagonalen under beräkningsgången. Här följer ett exempel på hur beräkningarna skall gå till. Vi antar att vi har följande matris (i MatLab-notation): [ 2 4 6 ; 1 4 5 ; 2 6 7] Lösningsgången börjar med att vi sätter upp matrisen bredvid en enhetsmatris: 2 4 6 1 0 0 1 4 5 0 1 0 2 6 7 0 0 1 Det gäller nu att få till en enhetsmatris av den vänstra sidan genom att utföra följande operationer ett antal gånger. 1. Sätt N = 1 2. Normalisera rad nummer N, d.v.s. se till att det element som ligger på diagonalen blir en 1:a. Detta görs i exemplet genom att dividera alla element på raden med talet som står på diagonalpositionen, d.v.s. position (N, N). 3. Därefter skall de övriga raderna nollställas i kolumn N. Detta görs genom att subtrahera eller addera den N:te raden (eventuellt multiplicerad med en faktor). 4. Öka N med 1 och börja om från punkt 2 tills alla rader är genomförda. Vi utför punkterna 2 och 3 för N = 1 givet exemplet ovan. Efter punkt 2 blir raderna: 1 2 3 0.5000 0.0000 0.0000 1 4 5 0.0000 1.0000 0.0000 2 6 7 0.0000 0.0000 1.0000 Efter punkt 3 ser det ut som följer (subtrahera rad 1 (med faktor 1 resp. 2) från rad 2 resp. 3): 1 2 3 0.5000 0.0000 0.0000 0 2 2-0.5000 1.0000 0.0000 0 2 1-1.0000 0.0000 1.0000 Vi fortsätter med N = 2 och får då efter punkt 2 (division med 2 gjord): 1 2 3 0.5000 0.0000 0.0000 0 1 1-0.2500 0.5000 0.0000 0 2 1-1.0000 0.0000 1.0000 Efter punkt 3 ser det ut som följer (vi har subtraherat (med faktorn 2) på rad 1 och 3): 1 0 1 1.0000-1.0000 0.0000 0 1 1-0.2500 0.5000 0.0000 0 0-1 -0.5000-1.0000 1.0000 Vi fortsätter med N = 3 och får då efter punkt 2 och 3 (division med -1 och subtraktion med faktor 1): 1 0 0 0.5000-2.0000 1.0000 0 1 0-0.7500-0.5000 1.0000 0 0 1 0.5000 1.0000-1.0000
2010-04-06.kl.14-19 Uppgift 4 Det finns något som heter stambråksuppdelning som innebär att man delar upp ett vanligt bråk (a / b), där täljaren är mindre än nämnaren, i såkallade stambråk (1 / N, där N är heltal). För att lösa detta upprepar man ett antal enkla operationer ett antal gånger. Det man måste tänka på är att man skall dra bort det största stambråket från urspungsbråket och sen utför man detta tills man inte har något kvar av det ursprungliga bråket. OBS! Alla nämnare i stambråken skall vara heltal hela tiden. Din uppgift är att skriva funktionen my_calc, som tar emot a och b som parametrar, som skriver ut de stambråk vars summa är densamma som talet a / b. Blir det fler än 10 stambråk skall funktionen avbryta letandet (men skriva ut de som är funna). KRAV 1: Det skall vara de största stambråken man får fram som skrivs ut. Inte vilka stambråk som helst. Ett exempel på korrekt uppdelning är: 3 1 1 1 -- = -- + ----- + -------- 7 3 11 231 Det är dock ej ok att dela upp bråket enligt 3 1 1 1 -- = -- + -- + -- 7 7 7 7 Detta beroende på att 1/3 > 1/7 och då skall 1/3 vara med i resultatet. KRAV 2: Din lösning skall vara rekursiv. > my_calc(3, 7) 1/3 1/11 1/231 Körexempel 2: > my_calc(56, 98) 1/2 1/14 Körexempel 3: > my_calc(29, 151) 1/6 1/40 1/2589 1/15637560 Körexempel 4: > my_calc(153, 156) 1/2 1/3 1/7 1/219 1/79716 TIPS: Man kan får fram det första stambråkets nämnare genom att vända på bråket och avrunda svaret uppåt. 3 7 Exempel där bråket = -- => Nämnaren i största stambråket = -- = 2 = 3 7 3
2010-08-25.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Att blanda en kortlek ger mycket slitage på kortens kanter om man använder fel metod eller är oskicklig. Jonas har just uppfunnit en enkel metod att blanda som inte sliter på korten. Du startar med att ta ett kort från oblandade högen. Detta kort är början till den blandade högen. Sedan lägger du nästa kort överst i blandade högen, nästa underst och fortsätter alternera mellan överst och underst till oblandade högen är tom. Torbjörn hävdar nu att denna metod så småningom kommer att komma tillbaka till startläget när man blandar på detta sätt upprepade gånger. Skriv en funktion shuffle_count som beräknar hur många gånger man behöver blanda en given vektor (parameter) för att komma tillbaka till den ursprungliga vektorn. Resultatet skall returneras från funktionen. Exempel 1 >> shuffle_count(1:6) 5 Exempel 2 >> shuffle_count(1:10) 9 Exempel 3 >> shuffle_count(1:11) 11 Exempel 4 >> shuffle_count(1:100) 99 Exempel 5 >> shuffle_count(1:101) 84 Exempel 6 >> shuffle_count(1:103) 66
2010-08-25.kl.08-13 Uppgift 2 Din lokala bygghandel säljer material och verktyg för att bygga ett trägolv till uteplatsen. De flesta kunderna är oerfarna gör-det-självare. För att hjälpa dem avgöra hur mycket material de behöver ber chefen på bygghandeln dig att skriva ett program för att beräkna hur många brädor de behöver för att täcka en given yta enligt en metod som bygghandeln rekomenderar. X cm 60 cm... 60 cm 60 cm längd bredd Ritningen (sedd från ovan) visar den bärande strukturen. Avstånden mellan de bärande balkarna är 60 cm. X motsvarar den överblivna bredden, som är mindre än 60 cm. Ritningen visar hur den första brädan är placerad. Alla brädor måste börja och sluta på en bärande balk för att golvet ska vara stabilt. Detta innebär att man måste kapa varje bräda till en längd som är en jämn multipel av 60, förutom den sista brädan, som måste bli anpassad till den kortare längden X. En metod, vanligtvis använd av snickare för att placera brädor med minimalt spill, följer två regler. 1. Börja varje rad med spill från föregående rad om detta är möjligt. 2. Annars, använd en ny bräda, som är så lång som möjligt. Skriv ett program som ber användaren mata in golvets bredd och djup och brädornas längd och bredd, och sedan skriver ut antalet brädor som behövs när man följer de givna reglerna. Alla brädor som används till ett golv har samma dimension. Exempel 1 Uteplatsens bredd: 50 Uteplatsens längd: 50 Plankornas bredd : 10 Plankornas längd : 100 Du behöver köpa 3 plankor. Exempel 2 Uteplatsens bredd: 190 Uteplatsens längd: 40 Plankornas bredd : 9 Plankornas längd : 140 Du behöver köpa 8 plankor. Exempel 3 Uteplatsens bredd: 90 Uteplatsens längd: 70 Plankornas bredd : 15 Plankornas längd : 60 Du behöver köpa 10 plankor.
2010-08-25.kl.08-13 Uppgift 3 Minutspelet är ett spel för barn och går ut på att slå med tärningar och sedan placera ut dem så att enkla matematiska uttryck matchar. Nedan visas ett bräde för fyra tärningar (man får välja om man vill använda plus eller minus). + - = * Skriv en funktion solve_dice_game som givet en uppsättning med fyra tärningsslag undersöker om ovan bräde är lösligt. Funktionen skall ta en parameter som är en vektor med talen från tärningsslagen. Funktionen skall returnera true om problemet är lösligt, false annars. Om en lösning finns skall funktionen även skriva ut lösningen enligt nedan. Krav: Du måste lösa ett delproblem med hjälp av (ytterligare) en (under) funktion. Exempel 1 >> solve_dice_game([12 11 1 1]) 1 +- 11 = 1 * 12 1 Exempel 2 >> solve_dice_game([15 6 3 3]) 3 +- 15 = 6 * 3 1 Exempel 3 >> solve_dice_game([12 7 3 8]) 0 Exempel 4 >> solve_dice_game([2 7 13 3]) 13 +- 7 = 3 * 2 1 Tips: Du får använda den inbyggda funktionen perms.
2010-08-25.kl.08-13 Uppgift 4 För att testa funktionen i föregående uppgift på riktigt behövs en uppsättning tärningar att kasta. Skriv en funktion som tar emot en beskrivning av ett antal sexsidiga tärningar som en matris och kastar dem en gång. Varje rad i matrisen utgör en tärning och innehåller siffrorna som står på tärningens olika sidor. Filen dices.m innehåller tärnings-uppsättningen four_dices nedan och mer därtill. Krav: Sannolikheten att få ett av numren på en tärning skall vara exakt 1/6. Exempel: >> four_dices = [[ 15 12 10 7 4 2 ] [ 14 11 7 6 5 2 ] [ 13 10 8 4 3 1 ] [ 12 9 8 7 3 1 ]]; >> roll_dices(four_dices) 15 6 4 1 >> roll_dices(four_dices) 4 7 1 8 >> roll_dices(four_dices) 15 7 13 9 >> roll_dices([1 2 3 4 5 6]) 3 >> roll_dices([1 2 3 4 5 6; 23 45 52 76 12 38]) 1 52
2010-09-25.kl.10-12 Uppgift 1 ( Betyg 3 uppgift ) När man blandar en kortlek kan man göra på olika sätt. Vi antar att man har en kortlek där vi antar att det översta kallas det första, det näst översta det andra, etc. Vi antar att vi har N stycken kort i kortleken (1 < N < 53). En metod för blandning är: Tag det första kortet och placera detta i en ny lek. Tag det andra och lägg det överst i den nya leken. Tag det tredje och lägg det underst i den nya leken. Det fjärde läggs överst, femte underst, sjätte överst,... Ovanstående metod ger som resultat att det första kortet hamnar i mitten av den nya kortleken. Kort nummer två och tre hamnar på vardera sidan om det första, etc. Man kan nästan se kortplaceringen likt en prispall vid en tävling. Vilka kort som hamnar var i den blandade leken beror på hur korten var sorterade från början. Om vi numrerar korten från 1 till N och sätter in kortets värde på de olika platserna i den blandade leken kan resultatet se ut som följer (antag att vi har N=5). 1 4 3 5 2 Viktningen på respektive plats i den blandade korleken bygger på blandningsmetoden. Vikten på respektive plats i kortleken kommer att bli (för några olika N-värden): N=2: 1 2 N=3: 3 1 2 N=4: 3 1 2 4 N=5: 5 3 1 2 4 N=6: 5 3 1 2 4 6 N=7: 7 5 3 1 2 4 6 Metoden ger dessutom en möjlighet att skapa ett så kallat blandningsindex, B, som anger hur kortens relativa inbördes ordning relaterar till vikten (värdet) på kortet. Detta blandningsindex beräknas enligt följande (där P anger positionen i kortleken). N B = ( weight P cardvalue P ) P = 1 Din uppgift är att beräkna blandningsindex givet en redan färdiblandad kortlek som representeras av en vektor innehållande talen 1 till N. Mata in antal kort: 5 Mata in kortens ordning: [ 1 4 3 5 2 ] Blandningsindex = 38 Körexempel 2: Mata in antal kort: 7 Mata in kortens ordning: [ 7 6 1 4 3 5 2 ] Blandningsindex = 124
2010-12-16.kl.09-13 Uppgift 1 ( Betyg 3 uppgift ) När man blandar en kortlek kan man göra på olika sätt. Vi antar att man har en kortlek där vi antar att det översta kallas det första, det näst översta det andra, etc. Vi antar att vi har N stycken kort i kortleken (1 < N < 53). En metod för blandning är: Tag det första kortet och placera detta i en ny lek. Tag det andra och lägg det överst i den nya leken. Tag det tredje och lägg det underst i den nya leken. Det fjärde läggs överst, femte underst, sjätte överst,... Ovanstående metod ger som resultat att det första kortet hamnar i mitten av den nya kortleken. Kort nummer två och tre hamnar på vardera sidan om det första, etc. Man kan nästan se kortplaceringen likt en prispall vid en tävling. Vilka kort som hamnar var i den blandade leken beror på hur korten var sorterade från början. Om vi numrerar korten från 1 till N och sätter in kortets värde på de olika platserna i den blandade leken kan resultatet se ut som följer (antag att vi har N=5). 1 4 3 5 2 Viktningen på respektive plats i den blandade korleken bygger på blandningsmetoden. Vikten på respektive plats i kortleken kommer att bli (för några olika N-värden): N=2: 1 2 N=3: 3 1 2 N=4: 3 1 2 4 N=5: 5 3 1 2 4 N=6: 5 3 1 2 4 6 N=7: 7 5 3 1 2 4 6 Metoden ger dessutom en möjlighet att skapa ett så kallat blandningsindex, B, som anger hur kortens relativa inbördes ordning relaterar till vikten (värdet) på kortet. Detta blandningsindex beräknas enligt följande (där P anger positionen i kortleken). N B = ( weight P cardvalue P ) P = 1 Din uppgift är att beräkna blandningsindex givet en redan färdiblandad kortlek som representeras av en vektor innehållande talen 1 till N. Mata in antal kort: 5 Mata in kortens ordning: [ 1 4 3 5 2 ] Blandningsindex = 38 Körexempel 2: Mata in antal kort: 7 Mata in kortens ordning: [ 7 6 1 4 3 5 2 ] Blandningsindex = 124
2010-12-16.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Skapa funktionen create_matrix som tar emot ett heltal som indata och sen returnerar en matris som ser ut enligt exemplen nedan. Det väsentliga i uppgiften är att den minsta kvadraten (i det nedre vänstra hörnet) skall ha dimensionen 3x3. Diagonalen hör till den högra halvan. När man går upp en storlek skall diagonalen i den nya kvadraten INTE gå igenom hörnet på den lilla kvadraten utan bara intill. OBS! I exemplen nedan har vi ritat in små gröna kvadrater som visar var gränserna går för de olika delarna. Dessa är endast till för att visualisera. Inget annat. Du skall inte visa dessa! >> M = create_matrix(1) M = 0 0 0 1 0 0 1 1 0 Körexempel 2: >> create_matrix(2) 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 2 2 2 0 0 0 3 2 2 1 0 0 3 3 2 1 1 0 Körexempel 3: >> create_matrix(3) 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 2 2 2 2 2 2 0 0 0 0 0 0 3 2 2 2 2 2 1 0 0 0 0 0 3 3 2 2 2 2 1 1 0 0 0 0 4 4 4 2 2 2 1 1 1 0 0 0 5 4 4 3 2 2 1 1 1 1 0 0 5 5 4 3 3 2 1 1 1 1 1 0 TIPS: Gör en underfunktion som skapar en kvadratisk matris och fyller de två halvorna (till höger resp. vänster om diagonalen) med varsitt tal. OBS! Denna underfunktion behöver inte agera på hela resultatmatrisen. Krav: Funktionen skall självklart klara större indata än 3. Endast minnesbegränsingar finns.
2010-12-16.kl.14-19 Uppgift 2 Skriv en funktion, christmas_tree, som ritar ut en julgran (surprise :-) ) i 3D. Som indata till funktionen skall man skicka ett heltal som anger hur hög granen skall vara. Till din hjälp har du följande funktioner i MatLab: clf; % Rensa gammal figur. hold on; % Rita i samma figur. grid on; % Sätter på ett rutnät i figuren. view(80, 10); % Visar figuren i 3D. % Rita ut en kvadrat i 3D. OBS! De tre vektorerna som % skickas in till plot3 är x-, y- resp. z-koordinaterna % för de punkter som skall sammanbindas i rymden. Dessa % tre vektorer måste vara lika långa. I övrigt fungerar % plot3 i 3D på motsvarande sätt som plot gör i 2D. plot3([0 0 1 1 0], [0 1 1 0 0], [0 0 0 0 0],... -ok, LineWidth, 4); Körexempel 2: >> christmas_tree(2) >> christmas_tree(5) KRAV: Givetvis skall man kunna mata in godtycklig höjd på granen. Vi accepterar INTE uppräkning av olika fall i en massa if eller switch. TIPS: Det är inte en spiral utan ett antal cirklar som ritas ut i figurerna ovan. Dessutom kan det vara bra att inte rita ut cirklarna med punkter utan med ringar så blir figuren lite fylligare.
2010-12-16.kl.14-19 Uppgift 3 Professor Aiswasb har uppfunnit en heltalsserie med ett underligt beteende (eng. an integer serie with a strange behaviour ). Din uppgift är att skriva funktionen aiswasb som returerar den vektor som innehåller talserien upp till ett givet tal. Det givna talet skall skickas in som parameter till funktionen. Hur talen i serien är definierade anges med denna formel: FN ( i ) Definitionen av talen i serien är lite bakvänd. Man kan inte utifrån ett tidigare tal få fram det efter i serien utan det man kan få fram är talet innan det man för tillfället står på. Formeln ovan ger som resultat N i-1, d.v.s. talet innan N i i serien. Funktionen S(N) skall ge som resultat siffersumman i talet N. Siffersumman i ett tal definieras som summan av alla de ingående siffrorna i talet. Har man t.ex. talet 12547456 blir siffersumman 1+2+5+4+7+4+5+6 = 34. Antag att vi har talet N i =1205. Vi får fram talet före i serien genom följande beräkning: N i-1 = 1205 - S(1205) = 1205 - (1 + 2 + 0 + 5) = 1205-8 = 1197 Utgår vi från detta nya tal får vi föregående tal i serien som: 1197 - S(1197) = 1197 - (1 + 1 + 9 + 7) = 1197-18 = 1179 Forsätter vi på liknande sätt kommer vi förr eller senare till talet 0 och där avslutar vi beräkningarna. Serien blir i detta fall ganska lång, men vi visar lite av början och lite av slutet för att visa vilken serie som efterfrågas givet talet 1205. 0 9 18... 1152 1161 1179 1197 1205 KRAV: Du skall implementera funktionen S(N) rekursivt. Detta innebär att du måste använda rekursion för att lösa just detta delproblem. KRAV: Din funktion aiswasb skall även klara av tal upp till 123456. Större tal kan ta lång tid. >> aiswasb(98) 0 9 18 27 36 45 54 63 72 81 98 Körexempel 2: >> serie = aiswasb(34) serie = 0 9 18 27 34 Körexempel 3: >> length(aiswasb(123456)) 6127 odefinierat = odef inierat N i SN ( i ) N i < 0 N i = 0 N i > 0 TIPS: Det ser ut som att serien alltid kommer att ge en serie där man adderar 9 till föregående tal, men detta är inte sant. Se i exemplet med talet 1197 ovan. Det finns fler exempel.
2010-12-16.kl.14-19 Uppgift 4 En mobiltelefon kan ha ett tangentbord som ser ut enligt följande: 1 _ab 4 ijk 7 rst 2 cde 5 lmn 8 uvw 0 åäö 3 fgh 6 opq 9 xyz För att skriva meddelanden på detta tangentbord måste du trycka på tangenten med det tecken du önskar en, två eller tre gånger beroende på vilket tecken du vill komma åt. Om du vill skriva meddelandet hej då får du trycka 3 tre gånger (ger h ), 2 tre gånger (ger e ), 4 två gånger (ger j ), 1 en gång (ger ), 2 två gånger (ger d ), 0 en gång (ger å ). Observera att blanktecken är det första tecknet på 1. För att separera de olika tecken väntar man en liten stund mellan teckeninmatningarna (detta representeras senare med -1 ). De tangenter man behöver trycka på för att skapa meddelandet hej då resulterar följdaktilgen i MatLab-vektorn [ 3, 3, 3, -1, 2, 2, 2, -1, 4, 4, -1, 1, -1, 2, 2, -1, 0, -1 ]. Din uppgift är att skriva funktionen mob2str som tar emot en sådan vektor som inparameter och returnerar den teckenvektor som innehåller meddelandet. Exemplet ovan skulle ge vektorn [ h, e, j,, d, å ] som resultat. En utskrift av denna vektor, i MatLab, kommer att ge det resultat man som människa vill se, d.v.s. hej då. Vi har som hjälp skapat en 10x3-matris i filen keyboard_script.m som innehåller alfabetet så att keyboard_matrix(4, 3) ger resultatet k. OBS! Den tionde raden motsvarar tangenten 0. KRAV: Lösningar där ni försöker använda switch eller en massa if för att få frarm rätt tecken är inte acceptabel. >> mob2str([3, 3, 3,-1, 2, 2, 2,-1, 4, 4,-1, 2, 2,-1, 0,-1]) hejdå Körexempel 2: (i filen given_files/mobile_strings.m finns ett par testvektorer till er) >> x=mob2str([ 7, 7, 7,-1, 6,-1, 5, 5,-1, 7, 7, 7,-1,... 2, 2, 2,-1, 5, 5, 5,-1, 1,-1, 0, 0, 0,... -1, 5, 5, 5,-1, 7, 7,-1, 4, 4, 4,-1, 1,... 1,-1, 7,-1, 1,-1, 3, 3,-1, 6,-1, 2, 2,... -1, 1,-1, 4, 4,-1, 8,-1, 5,-1 ]) x = tomten önskar god jul