Hacker News new | past | comments | ask | show | jobs | submit login
A Real Life Off-by-One Error (leejo.github.io)
318 points by leejo 12 days ago | hide | past | favorite | 118 comments





Not an off-by-one error—at least not in spirit. Interesting nonetheless.

I expected the article to eventually answer this puzzle:

> The competition started and got through a number of rounds. There were some comments about how the climber on the left always won.

Near the end:

> The kicker is that the out of place hold hasn’t been used in a long time. The climbers have optimised their route such that it is skipped. The same happens to the fourth hold from the bottom. So either being in the wrong place is immaterial to the climbers’ technique as long as they don’t get in the way.

So it seems like the error discovered by the article author should not have conferred any advantage to the climber on the left.

Anyone who can shine light on this matter?


People are misunderstanding the meaning of an off-by-one error. Suppose the plan states that hold A and hold B need to be 11 holes apart. In the true spirit of the off-by-one error, this can be interpreted in 3 ways:

- either as 11 empty holes between the holds; - as 11 holes, start counting 1 just above hold A; - or as 11 holes, start counting with hold A as number 1.

Another real-life example, is a plumber who tells the construction worker that the distance between the holes for hot and cold water needs to be 15 cm. This was meant to be measured center to center, but the constructor worker interpreted it as the distance from the right side of the first hole to the left side of the second. The result can still be admired in our house, 10 years later.


I might be splitting hairs now. Is not ambiguity the problem in your examples, and not any off-by-one error? If the respective ambiguities were resolved then there should be no off-by-one errors.

Of course use of expressions may vary. My in-spirit-meaning of ‘off-bye-one error’ may differ from yours, and that is fine. (Had it really mattered in a discussion then we would simply agree to find a suitable definition of the expression.)


The climbers had complained about an issue with the belay ropes on the right side that they also fixed.

> A few of the climbers had said that the automatic belay ropes on the right hand lane did not feel right, so the cherry picker was replacing those and not the hold that I had noticed being out of place. The climbers had noticed something wasn’t quite right, but hadn’t said anything about the out of place hold.

It was probably just two separate problems.


>Not an off-by-one error—at least not in spirit. Interesting nonetheless.

Literally it was an off-by-one error. Literally, literal meaning.


I think the poster meant off-by-one doesn’t simply mean a plus or minus one error, like mispricing a $5.99 as $6.99, but instead must be born out of confusion as to whether an origin point is marked as a 1 or as a 0.

Off-by-one is not born from the base of the index. It is a general problem a lot of people run into in a lot of different contexts.

It’s for example called “the fencepost problem”: https://betterexplained.com/articles/learning-how-to-count-a...

I agree subtracting or adding one to any number is not the problem. It has to do with counting.


>I agree subtracting or adding one to any number is not the problem. It has to do with counting.

if you are sprint climbing and you put your hand out to grab and you add or subtract the number 1 from where your hand needs to be, it is a problem or contributes to a speed difference.


> must be born

There are other reasons as well. I think the more common causes are inclusive vs exclusive comparison errors and fencepost.


> must be born

The spelling is off by one. It's "borne"


>The spelling is off by one. It's [not "born" it's] "borne"

the spelling was actually off by e , so you're stilll off by 1.71828...


Perhaps the pieces are placed by counting a number of holes from piece A to piece B? That's a perfect recipe for an off-by-one: at which point relative to piece A do you start counting.

> So it seems like the error discovered by the article author should not have conferred any advantage to the climber on the left.

They might not use the hold by physically touching it, but they might still use it as a visual indicator of where the other holds are in relation. These competitors are used to the same layout for many years. If there is a slight misrepresentation it can surely put them off.


It's true that modern competitive speed climbers don't use that hold. The collective optimization of the route is hilariously serious (it's an olympic sport after all) and the different optimizations have names, like 'The Tomoa Skip'.

But I think it's possible that 'extra' holds are potentially like 'junk' DNA. People fall into the trap of thinking that DNA is useless if it's never transcribed, but we know that's not actually the case. Non-expressed DNA can do things like alter binding affinity for neighboring sequences, affecting how often those neighboring sequences are expressed. I think it's possible that climbers are taking in a lot of information subconsciously as they sprint through this route in order to mike very small adjustments. The position of surrounding holds, even ones they never touch, could very well be a part of that information stream. They're fighting over hundredths of a second, so even a very small effect could be meaningful.


It may not be a fencepost error, but I think it's still off by one.

Even if the out of place hold were used, would you then conclude it to be causal? I still wouldn't rule out coincidence. Many discoveries happen as a result of investigating spurious patterns.

Also the author rules out psychology, but I wouldn't, especially since there were multiple confirmed errors in the route preparation, which I expect could reduce one's trust in the fairness of the competition. In the moment, I might start to wonder, "If one hold was out of place, why not more? Is anyone even checking this?" even if untrue / unlikely.


I’ve never been a competitive speed climber, but I do understand that part of the process of precision is having cues for e.g. body position. So the fact that it’s never actually touched is not necessarily the red herring it seems to be. Racecar drivers cue off of trackside landmarks to get their brake timing right, for instance.

Certainly, the rope feel is a much more significant factor, since the feel of the rope tugging on your harness is a non visual part of your body position feedback (maybe “I know that I’m going fast enough/pulling hard enough if I’m outracing the rope retraction rate”).


They run the whole 15 meter up in about 5-10 seconds (quite amazing to watch: https://m.youtube.com/watch?v=8O4g8JmWn9E ). At that speed, a small disturbance from the path they internalized means that they need to switch back to thinking which will take them out of their flow.

In terms of real-life off-by-one errors, it's hard to beat the town of Wemding in Bavaria (Germany).

Here a pyramid of 120 blocks is planned, with one placed every ten years. It started on the 1200th anniversary of the town, and is planned to be complete 1200 years later... and I'm sure you've spotted the problem.

Matt Parker, the 'stand-up Mathematician' has a video on it: https://youtu.be/FAdmpAZTH_M?si=_u8fM-fprUWiEqZ9


If you cross your eyes and look at the routes as if it were a single stereoscopic image overlaying one route on top of each other, the misplaced hold jumps out at you immediately.

It works. It is actually my secret technique when solving "find five differences".

Sometimes I also use this as a code diff tool. But it's most fun for those image puzzles.

Speaking of trivializing a challenge:

There's a challenge where you see words like "RED BLUE YELLOW GREEN PURPLE", but they are written in color different to their name. You are challenged to say the color of the text and not read the word out loud.

Intentionally defocusing your eyes makes that challenge trivial.


Now I’m one of the happy 10000!

For people who may not understand your comment: https://xkcd.com/1053/

I'm also one of them... actually not, I'm not "in US" :)


I don't understand how this works. If I cross my eyes, the images become extremely blurry. I can't even tell if they are precisely overlapping or not, let alone see if one of the holds is out of place.

Am I the only one?


That needs training, took me quite some time to learn this in the early 90s when the Magic Eye books [1] came out and autostereograms could be found in many newspapers. I personally also never learned to cross my eyes, I instead make them look parallel, see the diagram in [2]. Once you have learned it, it is hard to unlearn, to the point that once in a while my eyes and brain will snap onto repetitive patterns like grid paper or just text without any intention to do so.

[1] https://en.wikipedia.org/wiki/Magic_Eye

[2] https://en.wikipedia.org/wiki/Autostereogram


>once in a while my eyes and brain will snap onto repetitive patterns like grid paper or just text without any intention to do so.

When autostereograms were all the rage in the late 80's I had a program on my Mac Plus that let me make/edit them and I used to edit for hours WHILE looking at them in 3D. Then one time I was walking down a hallway with a repetitive wallpaper pattern, my eyes did the thing, the entire hallway appeared to shift in front of me, and I stumbled and fell.


> Once you have learned it, it is hard to unlearn, to the point that once in a while my eyes and brain will snap onto repetitive patterns like grid paper or just text without any intention to do so.

Rare that I meet someone else that does this. I learned how to do magic eye puzzles as a young child, I think my first was in a magazine and I ‘solved’ it the standard way of placing it close to your nose then slowly pulling back. Before long I could just do it on command and as an adult I find myself doing it all the time, often unconsciously. Makes spot the difference puzzles trivial, that’s for sure


Good idea. I just tried that on the first image of the whole route (after zooming in a bit) and the misplaced hold looks like it's floating in space away from the wall.

Yeah with each being slightly offset from the other, it introduces a fake parallax while the others should align perfectly and remain flat.

I tried this, and while I didn't have any difficulty establishing a stereoscopic view it didn't jump out for me at all. I perceived the blue line floating on top of the problem handhold, but the handhold seemed to be on the same plane as all the others. Knowing it was the problem one, I could use the stereoscopic view to see it, but without already knowing I don't think it would be apparent.

This is odd to me since I've successfully used stereoscopy in the past to find small differences. For some reason, with this image, rather than causing a change in perceived z-level, my eyes fight for dominance and my left ends up winning.


It took me a little while, because that blue line is definitely a distraction. But once the other holds all settled down to being properly in the plane and sharply focused, and I ignored the blue line, the misplaced one was clearly above the plane.

>This is odd to me since I've successfully used stereoscopy in the past to find small differences.

Same, I think there are too many other things around it to make it work for me though.


I just did it and it didn't jump out for me at all. Odd

I usually find it easier to relax my eyes (focus too far rather than too close), and so the opposite occurred - most of the holds appeared to float in a single plane (slightly wavy perhaps due to lighting differences), while the incorrect hold was sunk further back.

It's so weird ! The badly placed hold just disappears once all the rests aligns. My brain seems to dismiss it as an error on its part

Same, after some practice I could close one eye at a time and see the movement but it was hard to maintain the eye crossing with one eye closed

Took me a bit to realize the last photo has it correctly, and to stop trying to find the discrepancy there. Looking at only the first image it pops out to me because the wrong one is floating closer to my eyes than the rest.

Same! I couldn’t get it to work because that sailboat was in the way.

Great find!

One comment on what the article says:

> If this were actual code review the correct comment would be something like “this [piece] hasn’t been used for years, it should be deleted”. But this is something in physical space, and there would be arguments that removing it (them) means the route has changed, thus times are no longer comparable.

Hmm, I think the correct analogy is rather a benchmark. Like code in a benchmarking tool or test, the whole climbing course does not serve any purpose, any actual goal, except to be completed as fast as possible.

You wouldn't say "these instructions should be deleted because branch prediction and speculative execution in recent years have made it so that total cycle count is the same without them", for the reason stated ultimately after in the article already: That may not have been true in the past, and may change again in the future.


> "these instructions should be deleted because branch prediction and speculative execution in recent years have made it so that total cycle count is the same without them"

Then a new CPU architecture becomes popular, and spiders start winning every speed climbing event


My analogy is that "The bug is in the error-handling portion of the common fast-path speed traversal of the climb."

The fast path that the speed climbers commonly use doesn't involve the slower path involving the buggy portion.

But if the climber can't get up/further using the fast path then the climber may be forced to take the slower path.

Since the slower path is standardized, the climber knows how much effort/time is needed on the slower path.

Except on the righthand side, the climber's typical effort along the slower "buggy" path is different from the typical slower path and will result in an even slower time aka the execution time in the error-handling path is larger than usual...


> You wouldn't say "these instructions should be deleted because branch prediction and speculative execution in recent years have made it so that total cycle count is the same without them"

This is a very different statement than the original, and furthermore the original might actually trigger performance issues e.g. while the operation might not be used anymore it can have side effects (like triggering a prefetch) which end up affecting downstream code.


Yep, and even if the hold is not used anymore it can have side effects (like being in the way) which can end up affecting the climbing movements ;)

In the benchmark analogy, that piece would be a line of code that can be optimized away by the compiler. It could still matter if the code (course) is recompiled (rerouted) for a different architecture (climber).

That's funny.

I discovered an off-by-one error in college as I was graduating. Apparently the "class plan" I had put together with an advisor during my second year was missing a class, and I discovered it as I petitioned it for graduation. "You're one class short."

(It was for my second major, not the primary one, and the head of the physics department was nice enough to credit a nonlinear optimization course from engineering toward the major, so I earned it.)


I had a similar experience in getting a Math BS after finishing an Econ BA (which, for my school, was notoriously short and was not seen as sufficient to prepare you for economics graduate work).

The deal with my Math dept head was I had to make it my primary major (no true doubles at my weird undergrad, had to have an "additional"). It was a deal I was happy to make if it meant skipping an intro-to-proofs course after having taken the masters level series in most the of the fields they offered!


This week in 1945, an off-by-one error disrupts the surrender ceremony ending World War II: https://www.theglobeandmail.com/news/world/how-a-canadians-m...

> When the Japanese delegation protested – could they accept a botched surrender document?

For some reason I find this a bit humorous. My dudes, you do not have much leverage.


That's a fantastic find. I imagine some standard CV tool can spot this since the holds are grid-aligned. We should probably have something like that. It's crazy how good human pattern-recognition can get when trained on things. What a spot by you.

Also, by the way, where is the photo on your about page: https://images.squarespace-cdn.com/content/v1/60f40aa1942bba...

I feel like it's Crater Lake, Oregon, but considering where you live it's probably somewhere in Switzerland. Looks lovely.


You could also simply take two photos and overlay them. The difference would be obvious immediately to the human eye.

It is Crater Lake, from a second visit this summer.

> Maybe when the record is unbeaten for more than a couple of years they should throw it all away and start with a brand new route?

There's been some discussion of having new speed routes every few years. I think this would make the event a thousand times more interesting. That said, I'm still not sure I'd be interested.


How about a route pool like an esports map pool?

There's a misconception that a quadrennial sports festival. Actually, they're a quadrennial festival for people who never cared about the sport before to explain how it should be fixed.

QGM

It would be terrible from an athlete perspective

How about birthdays? When you turn "1" it's your second birthday. Or counting three seconds. Start counting zero..one..two..three.

The number on your yearly "birthday" is not the number of birthdays you had (you only have one birthday) but the number of years you survived since your birth.

So the day of your fifth birthday is the first day of your sixth year alive.


Birthday vs birth day but yeah. It works if you say it

I've generally seen “birthday” (within a year; recurs) versus “birthdate” (happens once).

array.length

Jewish law sometimes counts from 1 instead of 0 for birthdays, so a newborn is not 0 years old, they are in their 1st year. (But it's written as "when they are 1", so you have to know which counting method is being used.)

Chinese traditional age counting does the same. My mother had to constantly explain to our relatives when I tell them my age -- I use Western conventions.

Korea has a system similar to this. You start at age 1 and get one year older each New Year's Day. https://www.90daykorean.com/korean-age-all-about-age-in-kore...

They changed the system last year after using it for many years (+/-1).

https://www.aljazeera.com/amp/news/2023/6/28/why-are-south-k...


Seems bizarre to keep the same wall config for all of time. The sport becomes about muscle memory more than anything else. The competitors can literally turn off their conscious brain. It would seem to me, it would be more exciting as a spectator and competitor if they had to problem solve on their way up there. Records could be less about best times and more about how many rounds did someone win in a row or something.

They could even still incorporate the one standardized wall config as a speed round once in a while or integrate it into the competition in some other way.


> Seems bizarre to keep the same wall config for all of time. The sport becomes about muscle memory more than anything else.

Plenty of other sport are pretty much the same each time, particularly track and field.


Exactly, I don't understand people who watch any of the tracl and field disciplines and complain about this wall being the same everytime. Like there's about 10 different disciplines of people running on a plain track and that's fine but people climbing the same wall isn't. I totally get that you might find lead or bouldering more interesting but that's not the point.

This is a whataboutism.

The same wall config is only for the speed competition. There has been debate about changing it though, cause like you said they become muscle memory and hyper-optimized.

There are other forms of competition:

- bouldering: how many of 4 short boulder problems can you finish

- lead: how high can you get on a longer, higher route (pictured on the right of the image in the article)

In these ones the problems are switched up every competition.


This is also why every climber complained about speed climbing being a part of the climbing competition in the previous Olympics.

It's an entirely different discipline. Seeing lead climbers compete in speed climbing is like seeing Eliud Kipchoge matched up with Usain Bolt for sprinting.

Boulder and lead are at least somewhat related, although I still think it would be nice to see separate competitions here, too.


I hope they do split up bouldering and lead next olympics. At least for Ai Mori's sake!

Indeed they will separate them at the 2028 LA Olympics. There will be 3 separate medals for boulder, lead and speed.

> This is also why every climber complained about speed climbing

not every climber. Its clearly a different discipline. Thats why boldering/lead is separate from speed climbing.

But then lead is different to top rope and sport different to trad. And indoor is very different to outdoor.


> not every climber. Its clearly a different discipline. Thats why boldering/lead is separate from speed climbing.

It wasn't separate in the previous Olympics, that's my point.

>But then lead is different to top rope and sport different to trad. And indoor is very different to outdoor.

Except for trad most climbers I know do a mix of all of these.

Speed climbing is just so different from everything else that I don't even know one climber out of the hundred or so that I know that does it regularly.


I do think it'd be amazing to see a "decathlon-like" competition where runners were measured in the 100, 1500, and 10k cross country, though. Figuring out how to even it out would be a chore, though.

I don't watch this event but, coming from other sports, I think there's more to this than sheer muscle memory. Humans are not machines. Sometimes you compete with ongoing or lingering injuries. Conditioning changes even for the most disciplined of athletes. All of these mean that a different approach might be warranted for each event depending on your "set-up".

Not to mention other variables outside of the human body. Perhaps the type of rope could matter in your performance. The age of the holds could matter too; even when the governing body standardizes on a replacement period for holds, I'm sure competitors would have strong opinions about the difference between a hold at the start of its service life versus one about to be replaced.

Also, the one thing I love seeing in physical contests is how competitors eke out the last bit of performance advantage with sheer willpower. Muscle memory takes care of the actions but performance and willpower is a conscious effort.

In short, no, I don't think competitors can literally turn off their conscious brain and just let muscle memory take over. If a field has jargon, there's a hell lot to geek over it.


And in further support of what you are saying, when I'm in the flow state, either for programming or for workout or for other hobbies, I am not conscious. That's kind-of the definition of flow.

or people who describe an expert as someone who is unconsciously competent, they no longer have to think about what they are doing they just "know".

And as yallpendantools is saying, operating at that level of expertise is much much more than sheer muscle memory, though the muscle memory is critical. My typing skill certainly helps me find flow in my programming work, I don't have to think about how to type each letter, when I'm in flow the ideas "just appear" on the screen.

So rather than saying the competitors turn off their conscious brain, maybe it is better to say that they transcend it?


Once an activity has become a “competitive sport” it has a way of prioritising “measurable” over meaningful or enjoyable. When you develop a critical eye for this aspect of sport, the Olympics stop being enjoyable and become an utter horror of human maladjustment, a horrid parody of what it alleges to stand for.

>as a ... competitor

Are you?


> Also, maybe in future someone will optimise the route using that currently unused hold four down from the top?

This reminds me a lot of how Brood War meta changes as new 'bugs' are discovered, since the fandom loves the game without it ever being touched so when edge cases are discovered they become part of the game rather than something to be fixed.


Little known trivia: the code that won the RSA rc5 56bit challange had an off by 1 error.

https://archive.nytimes.com/www.nytimes.com/library/cyber/we...


Where was the off by one error? I read the article and didn't find any mention of it.

I haven't seen it reported anywhere. It was my machine that found the key. To commemorate the event a plaque was made and permanently attached to the case. If it is still in the archives somewhere, the plaque lists the key reported as found by the client, which you would see is one off from the actual key that was the solution.

I never asked the distributed.net team, but I always suspected this was intentional to maybe thwart people from front-running a submission, so not truly a bug. If Adam, Jeff or David read this, maybe they could chime in.


My favorite off by one error is that the index of a count down is always one less than the amount that you subtracted. This means if you count up and down at the same time, you won’t count the middle number twice.

1: 1, 10 :0

2: 2, 9 :-1

3: 3, 8 :-2

4: 4, 7 :-3

5: 5, 6 :-4

Since the sum on each line is 11, the sum of all the numbers from one to ten is 55.

The cool thing is that this generalizes

1: 1, N : 0

2: 2, N - 1 :-1

3: 3, N - 2 :-2 <-sum is N+1

N/2: N/2, N -(N/2)+1 => N/2+1

So the sum of N numbers is N/2 * (N/2+N/2+1) => N/2 * (N+1) if N is even.

It appears to be broken for odd numbers

1: 1, 9 :0

2: 2, 8 :-1

3: 3, 7 :-2

4: 4, 6 :-3

5: 5, 0 :-4 <- can’t reuse 5

But for odds, setting the odd number K equal to N+1, N is an even number so the total sum is sum(N) + N+1. We showed that sum(N) = N/2 *(N+1). So we have N/2 * (N+1) + (N+1).

But that means N/2+1 * (N+1) equals sum(K)

=> (N+2)/2 * (N+1)

=> (K+1)/2 * K

So the formula N/2 * (N+1) computes the sum of N numbers if N is odd too! It works for all numbers. Wow!

[Edit: Formatting]



If you're curious about those, they're all photos of the various sporting events that happen in the village here. All the effects you see are captured in camera through movements or otherwise.

You wouldn't want to remove unused holds, because in the future, someone may find a more efficient path the makes use of that hold, but ignores other ones.

Sometimes climber, but not a speed climber: it would be vanishingly unlikely for a hold that far left of the button to end up on a more efficient route. Closer to the middle of the route, maybe, but it'd be a sharp jog to the right to hit the button from having any appendage on that hold.

This is indeed what is argued in the article.

>The kicker is that the out of place hold hasn’t been used in a long time.

I’m guessing the belay rope issue was real and the actual cause of the other lane always winning then.


An AI image prompt could easily detect the misplace grip, but there's probably no other sport that needs to detect exact placements of things is there?


good example.

A few seconds in an image editor could do it too

Right. AI however could take into account skew angles and perspective tho, so you could probably photograph something from any angle at all and as long as all the pixels are there the AI can tell you of something's out of place.

Which can also be trivially done in any halfway-decent image editor. Algorithm-wise, it'd probably look a lot like QR code detection - which of course doesn't need any kind of fancy AI.

What I mean is you can probably get this to work with pure prompt engineering, and English language just by saying stuff like "Here's an image with correct hold positions", and then submit another image that says "Are the positions in this image correct." I just meant basic image understanding of AI, like what OpenAI has.

I realize there's an infinite number of ways to accomplish this that would be more complex. What I was stating is the simplest possible way being pure prompt engineering. You could even try with OpenAI right now, I didn't try.


How is this an off BY ONE error? (Pretty sure it's not.)

> The fourth hold from the top in the right hand lane was off by one with respect to its counterpart in the left hand lane.

The grips are placed on a grid. It was supposed to be at, say, (43,55) but actually placed at (42,55).

While that's indeed literally off by one, typically in programming an off by one error is a fence post error: if you have 4 fence posts, there are 3 sections in-between the fence posts, and off by one errors are about mistaking those two things. That's not really what happened in this climbing grip coordinates scenario here.

I realise that by arguing the semantics, and am making this worse.

However

Off by one is the error, not the cause. sure, a lot of off by one errors are caused by index starting confusion, but not all. The hold is clearly off by one. thus its a "real life" off by one error.


They’re all in real life.

People use "real life" and "not in a computer" interchangeably

Those people are wrong.

There is no right or wrong, there is only "what people mean when they say words".

No, it’s definitely possible to use words incorrectly.

Colloquialisms like "in real life" are correct usage. Just because it's not literal doesn't mean it's wrong because the information contained in verbal and written communication is affected by its context, including the society and culture it arose within.

And who is the arbiter of which use is correct? Language is always evolving and changing, the definitions of words you grew up with were just the definitions at that time. The meaning of a word is only defined by how people use and understand it.

It is possible to use words incorrectly, but if 90% of people use a word in a certain way, that becomes the definition.


I think the simpler way to think about this is that it's definitely possible (and common) to use words confusingly.

That is, you can use words in such a way that many people misunderstand what you mean. You could then call that usage "incorrect" if you want, and I wouldn't quibble too much with that, but the more important reason not to use those words in that way is that people don't understand you.

But in this case, this usage of "in real life" is not confusing anyone. Even those who pedantically quibble with it being "wrong" actually understood what was meant.


That's not in conflict with what the parent said.

People can mean something else than you when using the same words, and they might not be wrong as those word definitions might be acceptable too (and they might change over time too).


Some can be imaginary no? Or do you think everything is real life? In which case what’s the meaning of “real life”?

Real life v.s. IEEE-754 life

Unless we live in a simulation.

Remember all those time you've bitten your own tongue while chewing? Those are all off-by-one errors in the simulation. :)



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: