Hi all,
It's the time of the year when I use Vimscript to do what it was not designed for: AdventOfCode.
For today's problem, I notice that `:h sort()`, with a Funcref, breaks for large numbers — "breaks" here means that it does not keep to contract in the docs, not that it throws an exception. Since it's not really an exception, I don't think I can file it as a bug… so I'm bringing it here. Maybe someone can help me catch what I'm doing wrong.
In Vimscript…
:echo [(229539777187355, 229539777187355), (487766135067138, 491977135306566), (188325333471071, 188931909913550), (264028451845520, 265514296554744), (245727634348687, 249469249579525), (375117820166731, 378942174241518), (535474757750378, 535849288071548)]->sort({a, b -> a[0] - b[0]})
yields
[(229539777187355, 229539777187355), (487766135067138, 491977135306566), (188325333471071, 188931909913550), (264028451845520, 265514296554744), (245727634348687, 249469249579525), (375117820166731, 378942174241518), (535474757750378, 535849288071548)]
This is the same list because I got it from runtime working on the larger list.
Looking closely, I noticed that the third range is smaller than the first range. This got me thinking about things like overflow. But I checked and `v:numbermax == 9223372036854775807` which is bigger than all the numbers here.
This same operation in Python and Ruby yield the same results different from Vimscript's
In Python
sorted([(229539777187355, 229539777187355), (487766135067138, 491977135306566), (188325333471071, 188931909913550), (264028451845520, 265514296554744), (245727634348687, 249469249579525), (375117820166731, 378942174241518), (535474757750378, 535849288071548)])
In Ruby
[[229539777187355, 229539777187355], [487766135067138, 491977135306566], [188325333471071, 188931909913550], [264028451845520, 265514296554744], [245727634348687, 249469249579525], [375117820166731, 378942174241518], [535474757750378, 535849288071548]].sort { |a, b| a[0] - b[0] }
…both yield
[(188325333471071, 188931909913550), (229539777187355, 229539777187355), (245727634348687, 249469249579525), (264028451845520, 265514296554744), (375117820166731, 378942174241518), (487766135067138, 491977135306566), (535474757750378, 535849288071548)]
Is there some way to use sort that I'm missing here?