Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RawData := FileOpen(A_ScriptDir "\aoc8.txt", "r").Read(), RawData.Close()
- temp := StrSplit(RawData, "`n", "`r"), Data := []
- for k, v in temp
- Data[k] := StrSplit(v)
- maxRow := Data.MaxIndex()
- maxCol := Data[maxRow].MaxIndex()
- trace := []
- Loop % maxRow
- {
- ; max left, max right, max top, max bot, current row
- l := r := t := b := 0, k := A_Index
- Loop % maxCol
- {
- ; reversed index for bot & right side approach
- i := MaxCol - A_Index + 1
- ; left
- if ((d := Data[k, A_Index]) > l)
- trace[k, A_Index] := l := d
- ; right
- if ((d := Data[k, i]) > r)
- trace[k, i] := r := d
- if ((d := Data[A_Index][k]) > t)
- trace[A_Index, k] := t := d
- if ((d := Data[i][k]) > b)
- trace[i, k] := b := d
- }
- }
- ; delete bordering trees
- trace.Delete(1), trace.Delete(maxRow)
- for k, v in trace
- trace[k].delete(1), trace[k].delete(MaxCol)
- for k, v in trace
- for i in v
- inside += 1
- msgbox % total := (2 * maxCol + 2 * maxRow) - 4 + inside
- score := 0
- for k, v in Data
- for i, j in v
- score := (score < (s := Score(k, i, j))) ? s : score
- msgbox % score
- ; func
- ; Row, Col, Treesize
- Score(k, i, size)
- {
- global Data
- left := right := top := bot := 0
- Loop
- {
- if !Data.HasKey(i - A_index)
- break
- left += 1
- if (Data[k][i - A_Index] >= size)
- break
- }
- Loop
- {
- if !Data[k].HasKey(i + A_index)
- break
- right += 1
- if (Data[k][i + A_Index] >= size)
- break
- }
- Loop
- {
- if !Data.HasKey(k - A_index)
- break
- top += 1
- if (Data[k - A_Index][i] >= size)
- break
- }
- Loop
- {
- if !Data.HasKey(k + A_index)
- break
- bot += 1
- if (Data[k + A_Index][i] >= size)
- break
- }
- score := left * right * top * bot
- return score
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement