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:

 

16 november, 2021

Median

 I dette prosjektet tenkte eg å vise korleis ein kan bruke Scratch til å lage ein slags animert forklaringsvideo. Kombinasjonen av lav inngangsterskel og mange muligheter gjør at Scratch er godt eigna til slike ting, og med større fleksibilitet enn til dømes PowerPoint eller tilsvarende. 

Her er det ingen interaksjon med brukeren, det er berre Scratcy som teiknar og forklarer korleis einn finn median i eit datasett. Datasettet har forskjellig storleik og forskjellige dataelement kvar gong prosjektet køyrast.

09 november, 2021

3D puslespel del 2

 Nevnte på ein tidlegare post at ein kan lage det fantastiske (ja, for det er det nemlig!) tredimensjonale puslespelet ved hjelp av origami. Ein kan sjølvsagt ta det vidare og lage ei massiv utgåve i plast, no når ein har 3d skrivarar tilgjengelege i mange skular. Mange har vel og kjøpt slike privat. 

Slik ser mitt puslespel ut i 3D-printa versjon:


Her har eg printa ein open kube, fire pyramider og eit regulært tetraeder. No kan ein vel kalle pyramidene tetraedere og, men dei er ikkje regulære i dette høvet. 



Det ein kan tenkje på når ein skal printe desse formene er at sjølv om matematikken er eksakt så må ein bruke avrunda verdier i printinga. I tillegg er nok ikkje printarane nøyaktige nok (iallfall ikkje min) til at det blir heilt perfekt uansett. Så eg måtte slipe til litt ekstra etter printing, og i tillegg akseptere at det stakk ein millimeter opp av kuben når alt var plassert inni. 

28 oktober, 2021

3D-puslespill del 1

Eg har alltid hatt sansen for papirbretting (origami) og fått mykje matematisk å tenkje på i arbeid med origami-figurar. Til dømes har eg ofte brukt fugletetraederet i første økt med lærarstudentar da denne figuren har gitt oss mykje matematikk å prate om. Den er fin til å få nye studentar til å snakke saman og til å tenkje matematisk, kanskje på litt uvant måte og. Du kan lese om denne i (Gjøvik, 2005) eller (Gjøvik, 2012). Medan eg satt og laga teikningar av korleis ein skulle gå fram for å brette fugletetraederet kom eg over ei liknande origami-oppskrift. Fugletetraederet er bygd opp av to pyramider, og om ein lagar fire slike pyramidar, og eit regulært tetraeder så klakker dette saman heilt nøyaktig til ein kube. Dette høyres kanskje korkje logisk eller imponerandes ut, men om ein ser for seg dei fem formene, så kan det vera vanskeleg å tru på at dette får plass oppi kuben. Prøv sjølv, brett eska, tetraederet og dei fire pyramidane og sett saman! Du kan finne bruksanvisninga her i pdf (den er litt endra frå det formatet den opprinneleg fantes i på nettet):


Du treng fire pyramidar som dette:

Så treng du eit tetraeder som du lager av to ark på denne måten:
Og så treng du til slutt ei eske å stappe dei fem andre figurane oppi. 


Gjøvik, Ø. (2005). Fugletetraederet. Tangenten, 2005(2), 40–45.
Gjøvik, Ø. (2012). Flying Higher with the Bird Tetrahedron. Mathematics Teacher, 106(1), 16–21.