Av: Didrik Pemmer Aalen
Birte befinner seg på en seilbåt helt innerst i den lange julefjorden. Hun har et ønske om å komme seg ut, slik at hun kommer seg hjem til jul, men vindforholdene gjør det vanskelig. For å komme seg ut av fjorden må hun følge disse reglene:
- Hun kan kun krysse nordøst (x+1, y+1) og sørøst (x+1, y-1).
- Hun må snu når hun er 20 meter fra land (i retning nord/sør).
Gitt følgende fjord, hvor mange ganger ender Birte opp med å krysse for å komme seg ut av fjorden når hun begynner å krysse mot nordøst?
OBS! Antall kryssinger er definert som antall strekninger hun seiler, ikke antall ganger hun snur.
Her er følgende definert:
B = Birte
# = Land
Tomme ruter er vann
/ og \ viser ruten til Birte i svaret
Hver rute er 10 meter lang.
Gitt følgende fjord:
####################
# ###
#
#
#
#
#
#
#B
### #### #
####################
Blir kryssingene slik:
####################
# ###
#
# /\
# /\ / \ /
# / \ / \ /
# / \/ \/
# /
#B
### #### #
####################
Og Birte ender med 5 kryssinger.
Får off-by-one av en eller annen grunn. Mulig det er ren flaks at denne koden nesten funker, da Birte er helt inntil land noen steder. Den gir rett svar på eksempelet.
EDIT: Kilden til off-by-one er funnet. Koden under teller antall ganger hun snur, mens spørsmålet egentlig var hvor mange strekninger hun kjørte. Fikses ved å bytte initiell verdi på
crossings
fra0
til1
. Problemet er at da får jeg off-by-one på eksempelet...Jeg transponerte fjorden for å kunne håndtere den rad for rad istedet for kolonne for kolonne. Den var også vesentlig lettere å printe vertikalt enn horisontalt. Her er JS-kode med visualisering av ruten. En smal sak å porte denne koden til Haskell. Jeg gjør det senere i dag.