module Music.Instrument.Coordinate where

multiLineTextExample  = unlines $ replicate 10 (replicate 10 'x')
multiLineTextExample'  = unlines $ replicate 3 (replicate 3 'x')

textCooridinateToUnary text (x,y) = gridCoordinateToUnary (map (undefined:) $ lines text) (x,y)
gridCoordinateToUnary grid (x,y) = coordinateToUnary (length (head grid)) (x,y)
coordinateToUnary width (x,y) = (width * y) + x


unaryTextToCoordinate text x = unaryGridToCoordinate (map (undefined:) $ lines text) x
unaryGridToCoordinate grid x = unaryToCoordinate (length (head grid)) x
unaryToCoordinate width x = (m,d)
  where (d,m) = divMod x width

replaceAt i v xs = map (\(x,i') -> if i==i' then v else x) $  zip xs [0..]

replaceAtText (x,y) v text = replaceAt (textCooridinateToUnary text (x,y)) v text