I think I've located the cause of the issue.
The constants
const WALL : string = twHat
const PATH : string = twPeriod
const EAST : string = twLAngle
const WEST : string = twRAngle
const NORTH : string = twHat
const SOUTH : string = "v"
Run
are used in a single location to convert strings to set of x,y coordinates.
the problem test data set is
#E######
#>>.<^<#
#.<..<<#
#>v.><>#
#<^v^^>#
######.#
Run
myData is a seq of strings representing the above dataset this dataset is
converted to sets of x,y coordinates using
s.FinalXY = (myData.first.find(twHash),myData.low)
s.Current = (myData.last.find(twHash),myData.high)
for myRow in s.MinRow..s.MaxRow:
for myCol in s.MinCol..s.MaxCol:
**** let myChar: char = $mydata[myRow][myCol] *****
case myChar
of WALL:
s.Wall.add((myCol, myRow))
of NORTH:
s.NorthB.add((myCol, myRow))
of SOUTH:
s.SouthB.add((myCol, myRow))
of WEST:
s.WestB.add((myCol, myRow))
of EAST:
s.EastB.add((myCol, myRow))
else:
discard
Run
the line highlighted with **** had been giving me an error at the [mycol] when
myChar was defined as string, so I'd changeed it to char which leads to a
mismatch between the constant declarations and the case variable. type.
changing
let myChar: char = mydata[myRow][myCol]
Run
to
let myChar: string = $mydata[myRow][myCol]
Run
resolves the problem with twHash but now leaves me with an error of '
C:\Users\xxxxx\source\repos\AdventOfCode\Nim\AoCLib\src\chars.nim(20, 45)
Error: duplicate case label
Run
which is the line
const twHat : string = "^"
Run
If I rewrite the case statement using the tw strings directly
for myRow in s.MinRow..s.MaxRow:
for myCol in s.MinCol..s.MaxCol:
let myChar: string = $mydata[myRow][myCol]
case myChar
of twHash:
s.Wall.add((myCol, myRow))
of twHat:
s.NorthB.add((myCol, myRow))
of "v":
s.SouthB.add((myCol, myRow))
of twLAngle:
s.WestB.add((myCol, myRow))
of twRAngle:
s.EastB.add((myCol, myRow))
else:
discard
Run
All errors go away and I get a successful compile.