Ris och schack, programmering

September 21, 2017

Idag har jag för första gången på ganska länge programmerat något bara för att det kändes kul. Jag vikarierade på en mattelektion här om veckan och mötte en elev som försökte programmera i Scratch. Eleven försökte bygga ett program för att lösa frågan om hur många riskorn som ligger på ett schackbräde om man lägger ett korn på första rutan och sen dubblar antalet för varje efterföljande ruta upp till den sista sextiofjärde rutan. Jag har aldrig använt Scratch, och gjorde det inte nu heller, men jag fick ganska snabbt till ett program som visade antalet riskorn för en given ruta. Det kändes lite för enkelt, men jag lyckades göra det ganska snabbt och det friskade upp minnet lite för syntaxen i bash om inte annat.

Att programmera handlar för mig väldigt mycket om problemlösning. Det är också en av de aktiviteter där jag skulle kunna lägga timmar utan att märka att tiden går. Jag tror det är bra att ha en hobby där man kan tappa bort sig alldeles. Tyvärr har det knappt hunnits med vid sidan av plugg och annat, men ikväll hittade jag en stund.

#!/bin/bash

##########
# Vi börjar med att skapa lite variabler
# fyra borde räcka, kanske till och med tre
##########
TotalRice=0        # Vi börjar räkna från noll riskorn
CalcRice=1         # Detta är vad vi lägger till på första rutan
StopSquare=64      # Om användaren inte sätter något stopp räknar vi till såhär många rutor
Square=1           # Vi börjar räkna på ruta ett

if [ $1 ]; then    # Om användaren ger någon variabel på CLI
    StopSquare=$1  # så blir den variabeln antalet rutor att räkna istället för $StopSquare
fi

##########
# Ris ska dubblas varje ruta utom första.
##########
while [ $Square -le $StopSquare ]; do # Så länge rutan vi är på är lägre än rutan vi ska till, ger felmeddelande om användaren ger något som inte är en siffra.
    let "TotalRice = $TotalRice + $CalcRice" #Så är det totala riset det tidigare totala riset plus det som kommer på den aktuella rutan
    echo -e "Square  = $Square\nSqrRice = $CalcRice\nRice    = $TotalRice\n" # Skriv på CLI vilken ruta vi är på, hur mkt ris som finns där och totalt
    let "CalcRice *= 2" # Riset på nästa ruta ska vara dubbelt så mkt som rutan vi är på nu
    let "Square += 1" # Eftersom vi dubblat riset får vi öka till nästa ruta
done

Det är också lite av ett experiment att lägga upp kod på nya bloggen. Även det är något som borde vara enklare och bli snyggare än på gamla bloggen.