Velkommen til Datastrukturer og Algoritmer - sat i spil.

I kommer til 4.semester ad mange forskellige ruter, der var mindst fire 1.semestershold, og tre 3.semestershold, alle med forskellige tilgange til både hvad I skulle lære, og hvordan. Samtidig har I sikkert allesammen varierende erfaring udover undervisningen, og det er jo dejligt med forskellighed og variation.

For at det ikke bliver alt for svært at komme i gang, vil jeg bede jer om at løse denne opgave - faktisk er koden allerede skrevet, du skal bare forstå hvordan den er opbygget, og selv være i stand til at kode noget lignende når vi starter undervisningen.

Allerede første dag skal vi skrive et lille spil, og tiden er jo knap, så jo bedre vi allesammen er forberedt, jo, ja, bedre 😎

Programmet

Opgaven er et lille program der spørger brugeren om navn og alder, prøver at udregne fødselsåret, og spørger om det er korrekt. Et supersimpelt program, der i Java ville se nogenlunde sådan ud:

public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	System.out.println("Hvad hedder du?");
  String firstname = input.nextLine();

  System.out.printf("Hej %s, hvor gammel er du?\\n", firstname);
  int age = input.nextInt();
  input.nextLine(); // fix for "scanner bug"
  
  int birthyear = 2024 - 1 - age;
	System.out.printf("Okay, %s, så må du være født i %d, er det korrekt? (j/n)\\n", firstname, birthyear);
  String answer = input.nextLine();
	if(answer == "j") {
		System.out.println("Tænkte det nok, en computer kan trods alt regne!");
  } else {
		System.out.println("Nå da, så har du nok allerede haft fødselsdag i år - til lykke!");
	}
}

I JavaScript kunne man kode præcis det samme - men vi vil gerne have noget visuelt i stedet for bare tekst i en terminal, så vores program skal i stedet manipulere HTML, både når det kommer til input og output.

Derudover er JavaScript event-baseret - altså vi kan ikke få programmet til at stå og vente på at brugeren svarer, i stedet skal vi skrive det så bestemte funktioner bliver kaldt når visse “events” indtræffer, som for eksempel at brugeren trykker på en knap.

Og endelig er HTML kædet tæt sammen med CSS - i stedet for at vise og skjule HTML-elementer direkte, så giver vi dem klasser, som sætter CSS properties til at opnå de ønskede visuelle resultater.

Formålet

Der er mange måder at skrive sådan et program på - og selv om JavaScript har ændret sig markant i de sidste syv-otte år, betyder det ikke nødvendigvis at alle programmører har ændret sig tilsvarende. Og der er mange gamle vaner, dårlige vaner, der desværre stadig hænger fast rundt omkring.

Det er dog ikke supervigtigt at vi alle skriver kode på den samme måde - det vigtige er at alle vi på valgfaget forstår de samme ting. Så vi hurtigt kan skrive programmer i fællesskab.

Derfor har jeg skrevet en udgave af programmet, der implementerer de fleste af de ting vi skal kunne fra start. Nogle af dem har I sikkert ikke lært, nogle har I sikkert lært at gøre på en anden måde, nogle af dem kan I sikkert genkende. Når I er færdige med denne opgave, kender I dem alle.

Opgaven

Du skal forke dette repository: https://github.com/petlatkea/dsa-intro og i din egen udgave skrive kommentarer til koden, så du er sikker på at du forstår hver eneste linje. Se sidste afsnit i dette dokument for en udførlig liste over de emner du helst skal forstå - med links til gode læringsressourcer.