Skip to content
HN On Hacker News ↗

Red Blob Games: English: a vs an

▲ 365 points • 529 comments • by azhenley • 3w ago • HN discussion ↗

Pangram verdict · v3.3

We believe that this entire text is human-written.

0 %

AI likelihood · overall

Human
100% human-written 0% AI-generated
SEGMENTS · HUMAN 1 of 1
SEGMENTS · AI 0 of 1
WORD COUNT 259
PEAK AI % 0% · §1
Analyzed
Sep 19
backend: pangram/v3.3
Segments scanned
1 windows
avg 259 words each
Distribution
100 / 0%
human / AI fraction
Verdict
Human
Pangram v3.3

Article text · 259 words · 1 segments analyzed

Human AI-generated
§1 Human · 0%

Blog post: 16 Sep 2026 In English, there is an “indefinite” article a that can go before a word. For example, a raccoon. But for some words, we use an. For example, an apple. When procedurally generating text, I want a function a_or_an("apple") that tells me which article to use. That seems like it’d be easy. We can check the first letter to see if it’s a vowel. But that would mean we output an unicorn, not a unicorn. The actual rule is not whether the written word starts with a vowel letter, but whether the spoken word starts with a vowel sound. The word unicorn starts with vowel letter (u) but a consonant sound (Y). The word hour starts with a consonant letter (h) but a vowel sound (OW). Visualization showing whether the first two letters of a word are enough to determine whether it should have “a” or “an” I was curious how often these exceptions occurred, and whether they can be grouped together, so I spent a day looking at the data and building some visualizations and wrote up the results. I was surprised that only 129 of the 32,455 words in my list needed exceptions. [LLM note: I did not use LLMs to write any of this code, but in hindsight, I should have. This is one-off code to answer a question. It doesn’t need to be clean or maintainable. It only needs to be correct. I would’ve spent more time on the trie simplification algorithm and less time on parsing cmudict and re-learning d3.js.]