Deltag

Hvis I har grundlæggende færdigheder i programmering og har lyst til at løse problemer i samarbejde med andre, så er I målgruppen for at deltage i D-Pop.

Det er sjovest, når man er tre personer. Papir og blyant er gode at have ved hånden. I skal have adgang til én computer som man kan programmere på.

Hvad skal man kunne?

Mindst én af jer skal kunne programmere – variable, selektion (if), gentagelse (for, while), strenghåndtering, grundlæggende matematiske operationer (addition, multiplikation, osv.), indlæsning, udskrift.

I skal desuden kunne snakke sammen om hinandens gode og dårlige ideer. Det kræver gode samarbejdsrutiner og behagelige omgangsformer.

Hvilke sprog?

Problemerne til D-Pop formuleres på dansk.

Løsningerne skrives i et af de gængse, tekstbaserede programmeringssprog, som fx Python, Java, forskellige C-dialekter, Javascript, Kotlin, osv.

Se listen af programmeringssprog på Kattis.

Hvor er det henne?

Problemerne fra sidste år kan findes på dpop23.kattis.com. Problemerne kan findes på dommeren dpop24.kattis.com fredag d. 19. april 2024 kl. 16.

IT-Universitetet i København afholder et åbent D-Pop-arrangement

Forberedelse

Hvis I har lyst til at forberede jer, mest for at sikre at de tekniske detaljer er på plads til arrangemtet, kan I gøre det på dpopopvarmning.kattis.com. Begynd med »Hej verden!«, »Skru up!«, »Forskel« og »Gæt et tal«. Fortsæt med »Chokoladeæsken«. Der er masser af andre problemer – mange af dem så svære, at I garanteret ikke kan løse dem.

Kattis-platformen har gode hjælpesider for de relevante programmeringssprog, som blandt andet indeholder en mønsterløsning for »Forskel«.

Første skridt på Åben Kattis

Hvis I har lyst, kan I også følge skridt-for-skridt-vejledningen forneden, som taler jeg igennem platformen Open Kattis og bruger Python eller Javascript. Hvis I har klaret de første to-tre problemer forneden, er I mere end parate til D-Pop.

Brugerprofil på Kattis

Første problem: Hello, World!

Python:

print("Hello World!")

JavaScript (Node.js)

console.log("Hello World!")

Husk at angive det rigtige programmeringssprog i venstre hjørne, tryk på Submit.

Du burde nu have fået dommen Accepted. (Ellers: ret dine fejl, prøv igen.)

Gå til din brugerprofil (højre øvre hjørne) og se alle dine indsendelser. Du kan altid gå tilbage til gamle indsendelser, ændre og sende forbedrede udgaver.

Andet problem: Echo Echo Echo

Pythonløsning:

skrig = input()
print(skrig)
print(skrig)
print(skrig)

Javascriptløsningen er betydelig mere omstændig, fordi Javascript håndterer standardindlæsning ved brug af såkaldt hændelsesstyret programmering, hvilket fører til tre kryptiske første linjer. Detaljerne er uvæsentlige for os, men variablen skrig indeholder efter => { værdien af inlæsningen, ganske som tildelingen skrig = input() gør i Python.

const lytter = require("readline").createInterface({input: process.stdin});

lytter.on('line', (skrig) => {
	console.log(skrig);
	console.log(skrig);
	console.log(skrig);
});

Tredje problem: Stuck In A Time Loop

Et godt næste problem er nu timeloop. Her er to skeletter, hvor der mangler kode ved [...]. Først i Python:

N = int(input())
i = 1
while i <= N:
    # [...]
    i = i + 1

Og i Javascript:

const rl = require('readline').createInterface({input: process.stdin});

rl.on('line', linje => {
  const N = parseInt(linje);
  let i = 1;
  while (i <= N) {
    // [...]
    i = i + 1;
  }
});

Fjerde problem: Odd Echo

Løsningen for testgruppe 2 kræver typekonvertering (indlæsningen er altid strenge), evnen at læse et variabelt antal linjer, og en smule problemløsning (hvordan skelner vi lige linjer fra ulige?). Det kan gøres på mange måder.

N = int(input())
ulige = True
for _ in range(N):
    linje = input()
    if ulige:
        print(linje)
    ulige = not ulige

Javascriptløsningen er endnu mere omstændigt. Løsningens logik havner i kodestumpen for løs_problemet.

const rl = require('readline').createInterface({input: process.stdin});

var indlæsning = [];
rl.on('line', linje => { indlæsning.push(linje) });
rl.on('close', () => { løs_problemet() });

function løs_problemet() {
	const N = parseInt(indlæsning[0]);
	let ulige = true;
	let i = 1;
	while (i <= N) {
		if (ulige)
			console.log(indlæsning[i]);
		ulige = !(ulige);
		i = i + 1;
	}
}

Kildekode.

Licens: CC BY-NC-SA.