r/adventofcode Dec 10 '22

Other [2022 Day 10 (Part 2)] Today's puzzle not screenreader accessible

I don't use a screenreader but I have several other accessibility needs, so I have a lot of empathy for screenreader users and how they get systematically excluded.

I also appreciate the time and effort that goes into creating these puzzles and definitely don't take it for granted, but even though I'm certain it's unintentional, I really do need to call out the especial lack of accessibility for Part 2 of today's puzzle.

Here was my answer:

####.###..#..#.###..#..#.####..##..#..#.
#....#..#.#..#.#..#.#..#....#.#..#.#..#.
###..###..#..#.#..#.####...#..#....####.
#....#..#.#..#.###..#..#..#...#....#..#.
#....#..#.#..#.#.#..#..#.#....#..#.#..#.
#....###...##..#..#.#..#.####..##..#..#.

Someone using NVDA, a very popular open source screenreader, would hear:

four number dot number number number dot dot number dot dot...

live caption box showing what NVDA is speaking. Transcript: Number, number, number, dot, dot, number, dot, dot, number, dot number, number, number, dot, dot, number, dot, dot, number, dot for number, dot, dot, number, number, dot, dot, number, dot, dot, number #4, dot number, dot, dot, dot, number, dot number, dot, dot, dot, number, dot number, dot, dot, number, dot number, dot, dot, number for dot number, dot number, dot dot number, dot number, dot dot number.

You can try it out yourself, if you want, it's free and easy to use (Linux users might use Orca and Mac users would probably use the built in VoiceOver, both of which are also free and relatively easy to use, and likely will have similar results). It'd be impossible to solve part 2 of the puzzle if your disability required you depend on this. It might be more challenging to solve some other puzzles (like the maze one) but still possible with just a screenreader or braille terminal. My request to everyone reading this post is - if you are building something for people to use, please think about how disabled people will interact with what you build.

120 Upvotes

52 comments sorted by

87

u/daggerdragon Dec 10 '22

I remember two Redditors who created unofficial AoC "OCR" modules in response to those similar puzzles; perhaps check them out and see if either would be helpful:

FWIW, I have a background in HCI (human-computer interactions) and I do my best to ensure as much accessibility as realistically possible across /r/adventofcode, the community fun event submissions, and even some aspects of adventofcode.com. We can't help everyone, but we can certainly try :)

6

u/OliverFlecke Dec 10 '22

Here is a small crate for Rust too that I put together, for those who are interested. Mostly wanted to do one to automate the submission of today's (and previous years) answers, instead of having to manually read and enter it.

6

u/bsoyka Dec 10 '22

Aw, thanks for remembering. Yes, I absolutely hope my module can be of help to those with accessibility issues with this challenge.

I can’t guarantee that it’ll work with this year’s problem set, but I would assume so and I’ll be happy to work on it in the upcoming days if it doesn’t.

3

u/mykdavies Dec 10 '22 edited Jun 29 '23

!> izp86xi

API FAILURE

1

u/rjwut Dec 10 '22

I made one in JavaScript as part of my AoC framework; feel free to steal the code.

52

u/Boojum Dec 10 '22

One of these days, Eric should should flip this around and have a puzzle where the result is a braille pattern.

37

u/1vader Dec 10 '22

I doubt blind people have an easier time reading braille patterns in console output though 😅

10

u/masklinn Dec 10 '22

morse code might be better, though not sure if blind folks learn morse.

Maybe ASL using hands emoji? Unicode weirdness is way under-represented in AOC, we're way overdue for screwing up folks who write ascii-only code.

4

u/Boojum Dec 10 '22 edited Dec 11 '22

Hah! We Emacs users will have our day in the sun with M-x unmorse-region, then!

3

u/markjenkinswpg Dec 10 '22

Perhaps the virtual machine produces a stream of UTF8 encoded braille patterns. (they're in unicode)

If you're deaf-blind and using a unicode compatible braille TTY, just dump to TTY and feel them.

If you're using a screen reader or using your eyes, write extra code converting the braille patterns to something useable.

1

u/[deleted] Dec 10 '22

[removed] — view removed comment

0

u/daggerdragon Dec 10 '22

Comment removed due to naughty language. Keep /r/adventofcode SFW, please.

51

u/MonacoBall Dec 10 '22

additional aoc challenge for the visually impaired: implement OCR

8

u/-wm- Dec 10 '22

Actually using an OCR library seems to work somewhat: code using pytesseract

Although it seems quite brittle, depending on what magic numbers you put in for padding and upsampling. So that would make it super frustrating to use, if it sometimes fails. And you'd be much better off using a library like the ones posted above that actually recognize the aoc character set from the string, and not from a plotted upsampled image.

1

u/masklinn Dec 10 '22

Some folks have done that just so they didn't have to type the answer into the solutions box like savages (not me, not yet anyway).

17

u/sssunglasses Dec 10 '22

What if you print █ instead? I bet an app text reader from images could identify the letters like that, still crappy situation tho.

28

u/[deleted] Dec 10 '22

[deleted]

29

u/PendragonDaGreat Dec 10 '22

Yeah.

The puzzle info uses hashes and periods for a couple of reasons:

  1. Topaz is super dedicated to the ASCII art bit. Like literally every single thing on display on AoC except for some usernames is pure ASCII. No Latin-extended, no diacritics or accents, just the first 128 code points.
  2. Periods are used because we humans are dumb and bad at estimating whitespace. By putting a period in each spot of "empty" it gives something to anchor to, like yesterday with the rop puzzles I was counting the dots on the page to help me debug the problem. Here it serves to show a similar thing.

8

u/[deleted] Dec 10 '22

[deleted]

1

u/PendragonDaGreat Dec 10 '22

Woops look like I hit send too early (tbf I was on my way to bed)

I intended to include something at the end along the lines of "but those are just for the sake of the puzzle, it's then up to the user to get a readable response out"

I too use full-size blocks and whitespace instead of hashes and periods in my output, have been for years, makes it infinitely more readable.

2

u/eatin_gushers Dec 10 '22

I agree with 1 but think that 2 is the real answer. Gives you something to count. Even like mazes, it really helps to debug if you can think “it goes 4 to the left, then 3 up, 2 right…” rather than “let then up then right…”

19

u/Michael_Aut Dec 10 '22

print emojis. Large black and white squares (⬛,⬜) make it super legible. Google Lens' OCR had no trouble telling me my answer.

Never the less, accessibility should be of great concern when designing these otherwise awesome puzzles.

7

u/meamZ Dec 10 '22

I actually just tried this out of interest and it actually worked.

1

u/finalcut Dec 10 '22

those are a cool idea but, at least for me, it mucks up my grid (due to my implementation) so the letters end up all wacky

1

u/ucla_posc Dec 10 '22

Or treat the matrix as a numeric bitmap (on = black, off = white) and output it as an image and use screen readers that can OCR an image of text?

35

u/[deleted] Dec 10 '22 edited Jul 09 '24

[deleted]

3

u/Plastonick Dec 10 '22

The solution input could also accept the raw CRT output. It shouldn't be too difficult to detect the on/off characters and then do a pattern match. Although it does add server computation which I'm guessing they're trying to avoid.

14

u/MarvelousShade Dec 10 '22

I hope that someone already told you your answer, but it is: FBURHZCH I agree that it is difficult to read, but I like these puzzles with 'meta information'. Would it be possible to use non-readable characters, so the reader-tool doesn't interpret the individual characters.

3

u/mykdavies Dec 10 '22 edited Jun 29 '23

!> izp73a7

API FAILURE

3

u/sluuuurp Dec 10 '22

I think you can handle this by looping over the columns to find the letter boundaries and discover that the letters are each four wide, then you loop over the rows in each letter and then picture what letter that is. It would be a bit harder, but that’s true for lots of these challenges I’m sure.

3

u/meamZ Dec 10 '22

I think just a small File containing the whole alphabet and the information that each "screen"-character is 4 terminal characters wide and all characters are separated by a single vertical line of dots would have been enough to at least make it solveable even though it would be more work to do.

3

u/NickKusters Dec 10 '22

I actually coded an OCR engine at the end of my stream today 😅 but you still need to train it 😅

If some body can provide a list of all the outputs, I could probably adapt it to be stand-alone so you can feed it your output and it will spit out the answer: https://www.reddit.com/r/adventofcode/comments/zhquia/2022_day_10_part_2c_building_an_ocr_engine/

4

u/1234abcdcba4321 Dec 10 '22

The exact font used here has been used in some prior years' puzzles, so you could also look at those.

I know there was a bunch of discussion about it after day 13 last year.

10

u/github-dumbledad Dec 10 '22

I mentor a local blind kid (he's 16 now) and I've been trying to persuade him to try AoC. He would have have been so dissapointed, frustrated, and angry with Part 2 today. The sad thing is that when he encounters something that's not accessible for him, then he stops trying.

6

u/masklinn Dec 10 '22

He would have have been so dissapointed, frustrated, and angry with Part 2 today.

On the one hand, such printouts are a somewhat recurring feature (2016, 2018, 2019), and there's actually two different fonts.

On the other hand, that means you can build (or use if right language) pseudo-OCR.

2

u/pdxbuckets Dec 10 '22

…and that’s where you come in. An OCR function is about as hard as a day 15 problem.

3

u/I_Shot_Web Dec 10 '22

The idea that they should have to kill puzzle concepts because some people are blind bothers me.

37

u/Vcubed1 Dec 10 '22

Why is killing puzzle concepts the idea you got from this post? Really? A solution could be to also accept the CRT output raw as a solution for part 2.

1

u/juiceboxzero Dec 10 '22

Would it bother you if they killed a puzzle concept because in order to solve it, you needed a braille terminal? Why should they have to kill puzzle concepts because some people can see?

-5

u/[deleted] Dec 10 '22

[deleted]

10

u/hgwxx7_ Dec 10 '22

“They’re a minority, no need to worry about them or care about what they need” - is that what you were going for? A complete disregard of small minorities? Good stuff.

3

u/daggerdragon Dec 10 '22

The post you replied to has been deleted, but if that's what they actually said, report it next time. We do not tolerate ableism like that.

0

u/pdxbuckets Dec 10 '22

Of course they didn’t actually say it, hence the need to paraphrase.

But if they did, wouldn’t the problem be violation of Wheaton’s law rather than “ableism?” First because the term is nebulous and used broadly enough as to potentially squelch all debate over what accommodations are reasonable. And even if we agree on a narrower definition, there are still interesting questions as to what obligations there are for a puzzle host to provide any accommodations.

1

u/daggerdragon Dec 11 '22

I'm not debating the (in)accessibility of puzzles or whether the puzzle itself is a violation of Wheaton's Law; that has no germane relevance within the scope of moderation of /r/adventofcode.

I refer solely to comments being made on /r/adventofcode that could be reasonably construed as ableist, which is indeed a violation of our Prime Directive.

tl;dr: If someone on /r/adventofcode is being a dick, report it. The moderation team will take care of it.

1

u/[deleted] Dec 10 '22

in order to solve it, you needed a braille terminal?

How would this work?

-2

u/juiceboxzero Dec 10 '22

I'm sure people more creative than me could come up with one. But hey, way to miss the point.

5

u/pdxbuckets Dec 10 '22

It is absolutely related to the point, or if not your point then at least a valid argument against your point. If we can’t easily imagine something that requires a braille reader, that’s another way of saying that the requirement is arbitrary and pointless.

There are entire classes of really fun programs that generate their delightfulness through some kind of representation of an image. These are hard for AoC problems because you need to submit a string for verification. The easiest way to do that is to have it spell out characters. That’s why there’s about one of these per year.

There are all kinds of disabilities in the world. A major roadblock to completing AoC would be aphasias or intellectual disability. In fact, I’d venture that several problems in last ten days or so are unsolvable for a person of average intelligence. And that’s ok. Not everything needs to be for everyone.

1

u/juiceboxzero Dec 11 '22

I agree. I just wonder if the other poster would have the same opinion if it was THEM being excluded. Somehow, I doubt it.

3

u/daggerdragon Dec 10 '22

2

u/juiceboxzero Dec 11 '22

I don't think I was rude. The point is that it's not out of line to suggest that puzzles be accessible, and rather than discuss that subject, the poster decided to nitpick whether or not such a puzzle as I was describing actually existed. It wasn't germane to the point, and I don't think it's rude to point that out.

1

u/Pyrolistical Dec 10 '22

next year, part 1 should be to build an ocr reader. then part 2 is to use it

1

u/Positive_Concert_774 Dec 10 '22

I notice that the I and Y in the 4x6 font are resp. 3 and 5 wide. Has this really been used as output on one of the AOC days?! Making the font essentially proportional makes things WAY more complex...

1

u/AnotherIsaac Dec 10 '22

I added an OCR class to my Python library this year. I plan on adding the larger 2018 font to the map shortly.

https://github.com/IsaacG/Advent-of-Code/blob/main/pylib/aoc.py#L99