Kategoriarkiv: Vecktraklet

Den icke-trivialaste trivian du inte vill missa!

Parentesfrågan

Läsaren har högst antagligen en uppfattning om vad parenteser är och vad deras roll är i en mening. Parenteser (trots namnet) är alltså inte teser, utan de ”… förtydligar, kommenterar, förklarar eller innebär ett sidospår från den övriga texten” (copy paste från Wikipedia). Med ”parenteser” menar jag förstås rundparenteser och inte hak-, klammer-, vinkel- eller piggparenteser, fastän samma grundprincip gäller också för dem.

Inom matematikens teoretiska drömvärld, till skillnad från naturliga språk, används parenteser för att ”ange grupper av termer […] för ordningen av räkneoperationer” (Wikipedia). Vi kan därmed säga att i matematiken har parenteserna olik semantik, vilket leder oss till en fråga: Vilken roll borde parenteser ha inom programmering?

Programmering är till stor del matematik. De första programmeringsstrukturerna härstammade från rena matematiska modeller som förverkligades med hjälp av elektronrör och senare mikroelektronik. Vi tar två konkreta exempel för att illustrera hur parenteser vanligtvis används inom programmering.

(defn kvadrat-summa [n]; summerar n första kvadraterna
(loop [i 0 resultat 0]; sätter variablerna 'i' och 'resultat' som 0
(if (<= i n)
(recur (inc i) (+ resultat (* i i)))
resultat
)))

(print (kvadrat-summa 5))

Ovan är Clojure kod som spottar ut summan på de fem första kvadrattalen. Clojure tillhör LISP familjen av programmeringsspråk där parenteser strukturerar programmet. Notera att all kod är omringad av parenteser som skapar en hierarki av funktioner och värden. Förklarningar och kommentarer placeras inte inom parenteser, utan inleds med semikolon. Koden kan köras här för de intresserade.

!gfortran, gcc version 5.4.0 20160609
!Summerar n första kvadraterna
integer function kvadrat_summa(n) result(summa)
real :: lista(n)

lista = (/(i, i=1,n, 1)/)
lista = lista*lista
summa = sum(lista)
end function kvadrat_summa

program P
print *, kvadrat_summa(5)
end program P

Som ett mindre extremt exempel på parenteser inom programmering kan vi betrakta ett bekant språk för fysiker, Fortran! Du kan köra koden här. Se hur parenteser används för att:

  • generera listor,
  • definiera funktionens resultat samt listans storlek, och
  • för att gruppera parametrar givna till funktioner.

Vi ser att parenteser behandlas liknande som inom matematiken, men varför så? Borde inte kod sträva efter att vara så naturligt läsbart som möjligt?

Svaret på första frågan är simpel; programmeringsspråk skapas av datanördar och inte lingvister. Men för att exemplifiera att naturliga parenteser är möjliga (och kanske även vettiga) inom programmering skrev jag nedan ett exempel på ett påhittat Python-liknande språk. Parenteserna fungerar som kommentarer eller tillägger extra detaljer.

(heltals) funktion kvadrat_summan på n (ett heltal):
(summerar n första kvadraterna)
i = 0
resultat = 0
medan i <= n:
resultat += i * i
i += 1
resultat

visa kvadrat_summan på 5

Mycket snyggare och klarare kod, inte sant? Bara om nån skulle hitta på ett liknande språk som också är körbart…

Fortsättning följer!

Minne: Kapitel 5

”Sov du gott” frågade Albert.

Runtom sig hör Robben fniss. Han blinkade till. Albert satt med ett leende och blicken emot sina hemuppgifter. Robben lade märkte till att han satt insjunken i soffan med en varm Battery i handen. Panik inträdde honom och han hoppade till.

”Vänta va? Var e Linda? Vem e jag?”

Fnisset utvecklades till ett hjärtligt skratt. Battery rinner ner för Robbens hand och lår, vilket han hastigt torkar upp.

Bland rösterna hördes Felix. ”Haha Robben, jumalauta du e legenda! Sku du int undvika krapulan me att lähte himaa tidigt?”

Albert lade sitt häfte åt sidan och vände sig mot Robben. ”När kom du hit? Du lagg på soffan redan klockan nio.”

Robben kunde inte svara på frågorna, så han ställde en själv. ”Talade vi int redan, Felix? Under föreläsningen?”

Felix skrattade. ”Aj den du just missa? E du helt seko? Du yrar värre än Olle på KJYRen”, svarade Felix.

”Ja håller med”, tillade Olle glatt.

Efter ett djupt andetag återhämtade Robben sig. ”Va e klockan?”

”Snart 12, närmare tio före… Är du hungrig? Eller får du inget ner alls? Bhahaha!” Det var sällan som någon annan var i värre skick än Olle på morgonen efter, så han njöt av denna sälsynta stund. Alla fyra tog sig emot Chemicum och den ökända MekUMak.

* * *

Felix kommentar spelades fortfarande om i Robbens huvud. ”Jag for tidigt hem igår? Men det är ju int vettigt, jag måste ha dragit pünschen!” Robben grubblade för sig själv och märkte inte att han stod stilla främst i kassakön. Han betalade för maten och bad om ursäkt.

”När for jag hem igår?” frågade han.

”Sale jämt ett”, svarade Felix.

Detta påminnde Robben att han hade skickat flera WhatsApp meddelanden åt Linda. Han drar fram telefonen och söker upp meddelandet. Ingen kontakt hittas på namnet Linda.

”Så jag drog alltså int pünschen?”

”Vadå? Nä, du hajpa om de vitusti men sen seli du någo bullshit och så pussy du out.” Felix ögade först misstänksamt på Robben, men hans min förvandlades till en väldigt oskyldig smil.

”På tal om pussy, vem e Linda? Nån pimu du bonga inatt eller?”

Felix, alltid en charmare. I samma ögonblick som Robben skulle förklara sig började han känna sig yr. Världen blir allt suddigare framför honom och kulminerar till en bekant kläpp på kinden.

* * *

Robben var inte i matsalen mera utan låg på golvet av ett mörkt rum.

”Okej, bra att du lever. Eller ja…” Rösten som Robben hörde lät främmande men bekant. Han tittar upp och ser sigsjälv.

Fortsätter om n veckor…

Introduktion till darts

Inledning

Då jag lär mig nya sporter vill jag ofta betrakta dem ur ett matematiskt perspektiv. Darts är en gren som får mig att fundera på allt från algebra till spelteori, och därför vill jag ge en introduktion till hur man kan se på olika sporter och spel. Detta är främst en introduktion till spelformen 501, som är den absolut vanligaste spelformen när det gäller olika dartgrenar. I 501 startar man på 501 poäng varefter man ”kastar bort” poäng tills man når exakt 0. I artikeln kommer ”enheten” p att lämnas bort då man syftar på poäng.

Källa: https://en.wikipedia.org/wiki/Darts

Tavlan

Vi börjar med att gå genom några grundläggande saker då det gäller tavlan och poängräkning. Tavlan placeras så att bullen (mitten av tavlan) ligger på höjden 173 cm. På golvet markeras ett avstånd på 237 cm bakom vilket man måste kasta sina pilar. Tavlan är indelad i 20 lika stora numrerade sektorer (se bilden) som bestämmer hur många poäng sektorn är värd. Den yttersta ringen (dubbelringen) dubblar sektorns poäng och den inre ringen (trippelringen) ger tre gånger sektorns poäng. Exempelvis ett kast i trippelringen på sektor 8 ger 24. I mitten av tavlan finns bullen. Den består av den enkla bullen (gröna ringen) som ger 25 och den dubbla bullen (röda bollen) som ger 50.

501

501-matcher spelas en mot en. Man börjar alltså på 501 och spelar turer tills man når exakt 0. Dessutom måste man ”dubbla ut”, dvs. man måste nå 0 genom att kasta i dubbelringen. En tur går ut på att spelaren kastar tre pilar. Den spelare som först når 0, oberoende vem som börjar, vinner ett så kallat leg. Då man vunnit ett visst antal leg vinner man ett set, och efter ett visst antal vunna set vinner man matchen. Dessa antal beror på turneringen.

Beteckningar

Nästa steg i att börja studera 501 mera matematiskt är att definiera några olika beteckningar. Om vi betecknar en tur som t kan vi exempelvis skriva
t_2=(7,19,T7),
vilket skulle betyda att spelaren under sin andra tur kastade enkel 7, enkel 19 och trippel 7. Ett kast i dubbelringen betecknas med D.
Eftersom vi främst är intresserade av hur ett helt leg framskrider har vi orsak att nu ännu beteckna spelarens samtliga turer som
L = [t_1,t_2,\dots ,t_n].
Vi kan ännu beteckna spelarens totala poäng under ett leg som p(L). Om p(L)=501 så vann spelaren alltså ett leg.

Sats: Det krävs åtminstone 9 pilar för att avsluta ett leg.
Bevis: Vi gör ett motantagande, dvs. vi antar att det är möjligt att kasta 501 med 8 pilar eller färre, och samtidigt dubbla ut. För medelvärdet M av kasten gäller alltså nu att
M = \frac{501}{n} \geq \frac{500}{8} = 62,5 > 60 = T20.
Eftersom M>T20 vilket är det maximala poängantalet för ett kast, så har vi en motsägelse.

Följdsats: Det minsta antal pilar som krävs för att avsluta ett leg är 9.
Bevis: Låt L = [(T20,T20,T20), (T20,T20,T20), (T20,T19,D12)]. Då är p(L) = 501. Av detta exempel och på basen av föregående sats så är påståendet bevisat.
Ett leg som avslutats efter 9 pilar har fått namnet 9-darter eftersom de är rätt sällsynta. Exemplet ovan är den mest typiska 9-darter eftersom de professionella spelarna vanligtvis siktar på T20.S