PST sin CTF-kalender ble annonsert av twitt3rhai(anbefaler å følge denne da det plutselig dukker opp en CTF i blandt) og kan finnes her https://npst.no/
Jeg synes man bør frastå fra å diskutere aktive(dagens) oppgaver for både knowit og NPST siden disse har hatt premier/ansettelser(?) tidligere. AoC har så vidt jeg vet ikke noe premie, så der ødlegger det ikke for andre deltakere at løsninger/hint diskuteres.
Enig der! Kan poste dagen etterpå evt. Advent of code er bare en toppliste med de som er raskest, så der rekker du ikke poste noe her før du er ute av lista
Når jeg så at n var såpass stor gikk jeg rett for en prime sieve, men med det nice svaret tror jeg det hadde vært like greit å finne primtallene direkte. Kort og grei kode med en sieve heldigvis.
Først prøvde jeg å telle antall presanger som ble kastet, men fant ut at det var mye lettere å telle de som ikke ble kastet, for da slapp man å trekke fra eventuell overflow utover n.
const n = 5433000
const sieve = Array(n).fill(true)
sieve[0] = false
sieve[1] = false
for(let i = 2; i < n; i++){
for(let j = i*2; j < n; j += i){
sieve[j] = false
}
}
const findNearestPrimeLte = x => {
for(let i = x; i >= 0; i--){
if(sieve[i]) return i
}
}
let presentsKept = 0
let i = 0
while(i < n){
if(i.toString().includes('7')){
i += findNearestPrimeLte(i) + 1
continue
}
presentsKept++
i++
}
console.log(presentsKept)
Liten sjekk av regex kunnskaper i dag Fikk brukt named capture groups, som er en relativt ny feature i javascript:
const m = val.match(/^(?<height>\d+)(?<unit>cm|in)$/)
Irriterer meg litt over å måtte legge en ekstra sjekk for om m er null eller ikke. Hadde vært sweet å wrappe regex resultat i en maybe monad egentlig, så kunne man gjort en map på resultatet. Feks skulle jeg likt å skrevet:
val.match(/.../).map(({ groups }) => /* do stuff with groups */).value
Cluet i denne var å unngå å måtte lage 8 ulike funksjoner for å traversere i ulike retninger. Så det var noen som gikk for diverse transponeringer av matrisen og den slags, men det var ganske enkelt uten også.
const matrix = fs.readFileSync('./dag3.txt', 'utf-8').split('\n').map(line => line.split(''))
const n = matrix.length
const checkWord = (chars, x, y, incX, incY) => {
for(let i = 0; i < chars.length; i++){
if(y >= n || y < 0) return false
if(x >= n || x < 0) return false
if(chars[i] !== matrix[y][x]){
return false
}
x += incX
y += incY
}
return true
}
const isWordHidden = (word) => {
const chars = word.split('')
for(let y = 0; y < n; y++){
for(let x = 0; x < n; x++){
if(checkWord(chars, x, y, 0, 1)) return true
if(checkWord(chars, x, y, 0, -1)) return true
if(checkWord(chars, x, y, 1, 0)) return true
if(checkWord(chars, x, y, -1, 0)) return true
if(checkWord(chars, x, y, 1, 1)) return true
if(checkWord(chars, x, y, 1, -1)) return true
if(checkWord(chars, x, y, -1, 1)) return true
if(checkWord(chars, x, y, -1, -1)) return true
}
}
return false
}
const solution = possibleWords.filter(word => !isWordHidden(word)).sort().join(',')
console.log(solution)
Styra noe j**** med denne fordi jeg leste oppgaven feil. Trodde den musa kunne løpe langs med samme veggen flere ganger, og dermed omkretse et areal som ikke var del av huset (aka en bakhage). Men det var jo mye lettere enn det, et eneste stort polygon. Kunne løst det med en formell, men siden jeg allerede var dypt inne i en annen tankerekke gikk jeg for å fargelegge utsida av huset, og telle opp ruter som ikke var fargelagt.
Dagens knowit var det forresten en feil i oppgaveteksten som gjorde den umulig, så hvis noen andre har prøvd og gitt opp anbefaler jeg å prøve igjen nå.
Gjorde lista om til en trestruktur (var ingen sirkulære avhengigheter), la til både children og parents for å gjøre live litt lettere. Oppgave 1 var bare å traversere oppover i treet, mens oppgave 2 var nedover i treet. La til memoisering i oppg 2, men det var egentlig ikke nødvendig.
Største utfordringa her var egentlig å skille trærne fra hverandre. Så kjapt at det var 2 spaces mellom hvert tre, og maks en space mellom greiner. Så gikk bare opp stammen på hvert tre og sjekket symmetri på hver linje.
Det var en annen kar jeg så som inverterte hvert tre og sjekket at den inverterte versjonen var lik den vanlige. Den synes jeg var ganske fin.
Denne begynte jeg på kl 23 i går kveld, så veldig fort og gæli med andre ord. Cluet var å iterere over alle byene, ikke alle punktene. Det var få byer og mange punkter.
Woaæææ, måten du bruker reduce på er jo helt konge @mrloba . Viste ikke det var mulig! Skjønner ikke helt hvordan den funksjonen fungerer innser jeg nå, her må det læres. Jeg har til og med skrevet om ting en del ganger for å gjøre det litt mer clean, men regner med at min bruk av Object.keys kanskje er et tegn på at noe kan gjøre anderledes!
Merker at javascript har dårlig med standard bibliotek når jeg løser disse oppgavene. Neste år skal jeg installere lodash eller ramda fra dag 1. Litt misunnelig på python sitt stb lib egentlig, noen burde lage en kopi av det til js (hvis ikke det finnes allerede?)