28 januar, 2022

På leiting etter kort

I podcasten Abels tårn kom eg over spørsmålet om kor lenge ein måtte leite etter kort før ein har ein komplett kortstokk (https://radio.nrk.no/podkast/abels_taarn/sesong/202107/l_fcf052d9-977d-400a-b052-d9977df00af5). Dette er jo som skapt for eit miniprosjekt i skjæringsfeltet mellom modellering og programmering. Det kom fleire forslag til løysing i podcasten og fleire hadde og brukt simuleringar for å koma fram til sine svar. Her har eg modellert situasjonen i eit lite Scratch-prosjekt. Idèen er lett, ein ser for seg at ein skal lage ei liste med 52 forskjellige tal ved å tilfeldig velge blant 52 tal. Oversett til kulespråk kan ein sjå for seg at det ligg 52 nummererte kuler framom seg. Så plukker ein ei kule, skriv ned talet i liste og legg den tilbake. Prosessen gjentakast og ein skriv heile tida inn tal i lista, så framt talet på kula ein trekkjer ikkje er der frå før. Så held ein tellar styr på kor mange gonger ein har plukka kuler. Det kan vera morosamt å la elevane gjette først. Intuisjonen vår kan ofte vera vanskeleg å stole på. Eg såg til dømes for meg at eg måtte trekkje nokre tusen gonger før eg hadde alle dei 52 tala i lista (som tilsvarar at ein har ein heil kortstokk). Du kan jo prøva sjølv i prosjektet nedanfor.

25 januar, 2022

Spørreundersøking

 I forskingsgruppa eg leiar jobbar vi med innføringa av programmering i matematikkfaget. Vi hadde sett stor pris på alle som hjelper oss ved å svare på denne undersøkinga! 

(Du kan opne den i eige vindu her: https://nettskjema.no/a/230548 )

24 januar, 2022

Katt og mus og bille og...hai?

 Her har eg sett fire dyr i kvart hjørne av eit kvadrat. Kva om no alle desse begynner å jage etter den dei ser framom seg? Klarar du på førehand å sjå for deg kva mønster trasèen til dyra vil følgje?

Start prosjektet ved å trykke på flagget, og trykk på mellomrom for å starte jakten...

20 desember, 2021

Fleire Scratch-nøtter

Her har eg laga eit matematikk-problem (på engelsk denne gong) som du kan bruke Scratch til å eksperimentere litt med. Eg klarar ikkje finne ut kor eg har dette problemet frå, men det er ikkje utenkjeleg at det kom via Polymath på eit eller anna tidspunkt. (Vonar ingen av studentane eg har hatt er like slurvete med referansane!)



Du skriv altså inn eit binært tal (ikkje meir enn femten siffer). Så blir eit nytt tal laga etter følgjande regel: To like siffer blir bytta ut med 0, to ulike blir bytta ut med 1. Kan du forutsjå det eine sifferet som blir ståande igjen til slutt?

I dette prosjektet har eg laga ein eigen funksjon som skriv ut tal, ettersom det ikkje er ein måte å skrive ut ting på i Scratch. I utgangspunktet må ein plassere tekst i snakkebobler eller som bilete på bakgrunnen, så her har eg laga ein eigen funksjon for å skrive ut tekst. (I dette prosjektet er det kun sifra 0 og 1 ein har mulegheit for å skrive ut, men i prinsippet kan ein sjølvsagt skriva ut kva som helst). 


07 desember, 2021

"Pro tip": Lagre tekst på Scratch sine servere

Når ein registrerer seg på Scratch kan ein laga prosjekt der ein brukar variabler som høyrer til ein bestemt figur, eller til alle figurane. Omtrent som lokale og globale variable, altså. Men når ein har bidratt litt i Scratch-miljøet (litt uklårt nøyaktig kor mykje ein må bidra) så blir ein ganske raskt oppgradert til "Scratcher", som da får tilgang til ein ny type variablar,  nemlig skyvariablar. Desse blir lagra på servarane til Scratch slik at dei typisk kan brukast til dømes for å lagre highscore i eit spel ein har laga. Ein kan kun lagra tal, ikkje bokstavar eller lister. Men for ei datamaskin er det jo egentlig ikkje så stor skilnad på korleis ein bokstav eller eit tal er lagra - via ein ASCII-tabell kan ein jo omsete alle teikn til tal og tilbake. 

Hugsar ein tilbake til dei gamle arkadespela (Pac-man, Space Invaders og alt det der) så var det alltid slik at ein berre kunne lagre tre bokstavar som namnet sitt når ein fekk highscore. Dette kan vi få til i Scratch med eit lite omsetingsskript.  

For å kunne omsete att og fram brukar vi ei liste med bokstavane A-Z og ei liste med samsvarande ASCII-kodar. Slike tabellar med ASCII-kodar finn ein lett ved eit google søk, til dømes her: https://www.asciitable.com/ . Vi lagar to slike lister i Scratch, som på biletet:


I prosjektet blir brukaren spurd om tre bokstavar, og taktikken er at desse skal lagras i eitt og same tal. For å få alle tre ASCII-kodane inn i eitt tal finn vi først koden for den første bokstaven og gangar den med 1000000 (ein million). Så legg vi til koden for den neste bokstaven ganget med 1000 og så den siste koden. Da vil vi få eit nisifra tal, der dei første tre gir den første bokstaven, dei neste tre den andre bokstaven og dei siste tre den tredje bokstaven.





Dette talet lagrar vi så i ein skyvariabel. På biletet ser du at variabelen inneheld talet 216 072 076.



Dette talet er altså ei omseting av tre bokstavar, men som no kan lagrast i ein skyvariabel. Du kan jo sjølv slå opp i ASCII-tabellen for å sjå kva det står der. For å få tilbake det opprinnelige namnet (altså dei tre bokstavane) må vi plukke frå kvarandre dette talet og slå opp i lista over ASCII-verdiar igjen. 



For å få den første bokstaven må vi første kvitte oss med dei seks siste desimalane for å kunne få talet 216. Da deler vi først på 100000 og tek heiltalet (modulo) av det. Trekker vi dette frå det opprinnelege talet står vi igjen med 216 000 000. Da kan vi dele dette på ein million for å få 216. Så slår skriptet opp posisjonen av 216 i ASCII-lista, og ser at der står det 28. Til slutt finn vi det 28. elementet i den alfabetiske lista, som gir oss Ø. Tilsvarande gjer vi for dei neste to siffergruppene og sett saman resultatet for å få dei tre initialene. Skulle ikkje forundre meg om det er ein kar ved namn Øyvind som har fuska seg til highscore her.

Det er nok fleire måtar å forbedre dette skriptet på, slik eg gjorde det her er kun henta frå hukommelsen frå eit snart tredve år gammelt programmeringskurs. Mulege forbedringar av dette highscore-konseptet er at ein kan bruke tre nettvariabler for dei tre bokstavane for å gjere det litt mindre matematisk komplisert å omsete mellom tal og bokstavar. Treng ein forresten å halde seg til ASCII-kodar? Ein kan jo like gjerne dikte opp sine eigne kodar for dette. Ein kan sjølvsagt lagre lengre ord, men det blir fort ganske omstendelege scratch-kodar om ein skal skrive det ut i ei snakkeboble. Derfor vil det nok trenges eit lurare triks om ein skal skrive lengre ord. Det er vel og ei grense på kor mange skyvariablar ein kan bruke i eit prosjekt. 

Sjå inni prosjektet under for å sjå korleis dette fungerer: