I Sell Shoe Oil
by Soleless Hobo
I don't actually sell shoe oil.
In fact, I've never personally oiled a shoe. But this is an article about typing words on calculators and, if you look very closely, you will notice that the title of this article can be spelled on a 12-digit calculator by entering the number 710304577351 and then viewing it upside down:
"Wow, neat!" you exclaim. "The only word I know how to spell on a calculator is 07734, and I struggle even to do that! How did you manage to construct such a complex masterpiece of the English language with only upside down numbers?"
Well, dear reader, I didn't just sit here stewing until it popped into my head. The secret is that I used a reference list of calculator-friendly words that was produced by a custom computer script.
I recently purchased an old RadioShack EC-3015 10-key printing calculator, just because it had a vacuum fluorescent display, it looked cool, and it was priced very enticingly at $5.
While fiddling around with it, I realized that the only things I knew how to spell on a calculator were SLEIGH BELLS, HELLO, and a few very short words like BOO and HELL.
I thought that I could surely do better than this and, upon deciding that this was a highly worthwhile endeavor, I set out to advance my skills.
I sat pondering for a moment, and decided that I would write a Python script for filtering through a list of English words to find everything that would work on a calculator.
In about half an hour, I had a functioning script that worked pretty well (spoiler: I don't type very fast). All it did was check each word in the dictionary to see if it was constructed from only the letters: L, B, H, S, G, I, E, or O
If the word fit the bill, it was added to a list, which was then printed to the console at the end of the script. Words that were shorter than three letters long weren't counted. Like I said, it worked pretty well and, in a very long word list that I found somewhere on the Internet, it found 666 calculator-compatible words.
Next, I tried running the SOWPODS list (which is used to check the legality of words in online Scrabble tournaments) through the program, but since the words in my copy of SOWPODS are all uppercase, I needed to modify the program to be case insensitive.
It found 758 compatible words in SOWPODS, which is odd, because I thought that my other word list was longer (it includes brand names and abbreviations and stuff).
Then it hit me: my longer list has some capitalized words, which would have been passed over by the previous iteration of the program. Dumb. After running the longer list through again, it found 1219 compatible words. Much better.
Now when it prints out the list of calculator-compatible words on the console, with one word on each line, it is a little inconvenient to read.
In order to turn the SOWPODS-derived list into a much more viewable two-page document, I used LibreOffice to create an empty document with eight columns, and then pasted the word list into it. When using SOWPODS as the program input, all of the output is in uppercase, so it also helps to convert it all into lowercase.
The window for changing column settings can be found by clicking on Columns... under the Format drop-down menu in the top bar, while the button for making selected text lowercase is located at Text -> lowercase in the same drop-down menu. And that's it! You now have an easily readable reference list of all Scrabble-legal English words that can be displayed on a calculator. Pretty nifty, huh?
It is fun to browse through, and there's a lot of words in there that I wouldn't have thought of, like HILLBILLIES, GEOLOGIES, and LIEGELESS.
As for further research that the interested reader can conduct, well, some people may be of the opinion that the number 2 works as a "Z," and a lot of great words might be found if that principle were incorporated into the program.
In addition, it may be interesting to run different word lists through the program, like lists of given names or words from languages other than English.
I conclude this article by leaving the reader with a copy of the Python script:
# Script for finding calculator compatible words. # Requires the presence of SOWPODS.txt in the working directory. with open("sowpods.txt", "r") as dictfile: dicti = dictfile.read() dicti = dicti.split("\n") calcletters = "lbhsgieo" calcfriendlylist = [] for word in dicti: if len(word) > 2: good = True for letter in word.lower(): if not letter in calcletters: good = False break if good: calcfriendlylist.append(word) for word in calcfriendlylist: print(word) print(len(calcfriendlylist))
$ python ./shoe-oil.py BEE BEEBEE BEEBEES BEES BEG BEGO BEGOES BEGS BEIGE BEIGEL BEIGELS BEIGES BEL BELEE BELEES BELIE BELIES BELL BELLE BELLES BELLIES BELLS BELS BES BESEE BESEES BESES BESIEGE BESIEGES BESIGH BESIGHS BHEL BHELS BIB BIBB BIBBLE BIBBLES BIBBS BIBLE BIBLES BIBLESS BIBLIOLOGIES BIBS BIG BIGG BIGGIE BIGGIES BIGGISH BIGGS BIGOS BIGOSES BIGS BILBIES BILBO BILBOES BILBOS BILE BILES BILGE BILGES BILL BILLIE BILLIES BILLS BIO BIOG BIOGS BIOLOGIES BIOS BIS BISE BISES BISH BISHES BLEB BLEBS BLEE BLEES BLESS BLESSES BLISS BLISSES BLISSLESS BLOB BLOBS BLOG BLOGS BLOOIE BOB BOBBIES BOBBISH BOBBLE BOBBLES BOBOL BOBOLS BOBS BOBSLEIGH BOBSLEIGHS BOG BOGGISH BOGGLE BOGGLES BOGIE BOGIES BOGLE BOGLES BOGS BOH BOHO BOHOS BOHS BOI BOIL BOILS BOIS BOLE BOLES BOLL BOLLS BOLO BOLOS BOLSHIE BOLSHIES BOO BOOB BOOBIE BOOBIES BOOBISH BOOBOISIE BOOBOISIES BOOBOO BOOBOOS BOOBS BOOGIE BOOGIES BOOH BOOHOO BOOHOOS BOOHS BOOL BOOLS BOOS BOOSE BOOSES BOS BOSH BOSHES BOSS BOSSES BOSSIES EBB EBBLESS EBBS EEL EELS EGG EGGLESS EGGS EGGSHELL EGGSHELLS EGIS EGISES EGO EGOLESS EGOS EHS EISEGESES EISEGESIS EISEL EISELL EISELLS EISELS EISH ELEGIES ELEGISE ELEGISES ELHI ELIGIBLE ELIGIBLES ELL ELLS ELOGE ELOGES ELOGIES ELS ELSE ESES ESILE ESILES ESS ESSE ESSES GEE GEES GEESE GEGGIE GEGGIES GEL GELEE GELEES GELLIES GELOSIES GELS GEO GEOLOGIES GEOLOGISE GEOLOGISES GEOS GESSE GESSES GESSO GESSOES GHEE GHEES GHESSE GHESSES GHI GHIBLI GHIBLIS GHILLIE GHILLIES GHIS GIB GIBBOSE GIBE GIBEL GIBELS GIBES GIBLI GIBLIS GIBS GIE GIES GIG GIGGLE GIGGLES GIGHE GIGOLO GIGOLOS GIGS GILGIE GILGIES GILL GILLIE GILLIES GILLS GIO GIOS GIS GLEBE GLEBELESS GLEBES GLEE GLEES GLEG GLEI GLEIS GLIB GLIBS GLIOSES GLIOSIS GLOB GLOBE GLOBES GLOBI GLOBOSE GLOBOSES GLOBS GLOGG GLOGGS GLOSS GLOSSES GLOSSIES GLOSSLESS GLOSSOLOGIES GOB GOBBI GOBBLE GOBBLES GOBBO GOBIES GOBO GOBOES GOBOS GOBS GOE GOEL GOELS GOES GOGGLE GOGGLES GOGO GOGOS GOLE GOLES GOLLIES GOLOSH GOLOSHE GOLOSHES GOLOSHOES GOO GOOBIES GOOG GOOGLE GOOGLES GOOGLIES GOOGOL GOOGOLS GOOGS GOOL GOOLIE GOOLIES GOOLS GOOS GOOSE GOOSEGOB GOOSEGOBS GOOSEGOG GOOSEGOGS GOOSES GOOSIES GOS GOSH GOSS GOSSE GOSSES GOSSIB GOSSIBS HEBE HEBES HEEL HEELLESS HEELS HEH HEHS HEIGH HEIL HEILS HEISHI HELE HELES HELIO HELIOLOGIES HELIOS HELIOSES HELIOSIS HELL HELLHOLE HELLHOLES HELLISH HELLO HELLOES HELLOS HELLS HELO HELOS HES HIE HIES HIGGLE HIGGLES HIGH HIGHISH HIGHS HILI HILL HILLBILLIES HILLO HILLOES HILLOS HILLS HIOI HIOIS HIS HISH HISHES HISS HISSES HISSIES HOB HOBBIES HOBBISH HOBBLE HOBBLES HOBO HOBOES HOBOS HOBS HOE HOES HOG HOGG HOGGISH HOGGS HOGH HOGHS HOGS HOH HOHS HOI HOISE HOISES HOLE HOLELESS HOLES HOLIES HOLLIES HOLLO HOLLOES HOLLOO HOLLOOS HOLLOS HOLS HOO HOOLIE HOOLIES HOOSH HOOSHES HOS HOSE HOSEL HOSELS HOSES HOSS HOSSES IBIS IBISES IGG IGGS IGLOO IGLOOS ILL ILLEGIBLE ILLS IOS ISH ISHES ISLE ISLELESS ISLES ISO ISOGLOSS ISOGLOSSES ISOHEL ISOHELS ISOLOG ISOLOGS ISOS ISSEI ISSEIS LEE LEES LEESE LEESES LEG LEGES LEGGE LEGGES LEGIBLE LEGLESS LEGS LEI LEIS LEISH LES LESBO LESBOS LESES LESS LESSEE LESSEES LESSES LIB LIBEL LIBELEE LIBELEES LIBELLEE LIBELLEES LIBELS LIBS LIE LIEGE LIEGELESS LIEGES LIES LIG LIGGE LIGGES LIGS LILIES LILL LILLS LILO LILOS LIS LISLE LISLES LISSES LOB LOBBIES LOBE LOBES LOBI LOBLOLLIES LOBO LOBOLO LOBOLOS LOBOS LOBOSE LOBS LOESS LOESSES LOG LOGE LOGES LOGGIE LOGGISH LOGIE LOGIES LOGLOG LOGLOGS LOGO LOGOI LOGOS LOGS LOLIGO LOLIGOS LOLL LOLLIES LOLLS LOLOG LOLOGS LOO LOOBIES LOOIE LOOIES LOOS LOOSE LOOSES LOOSIE LOOSIES LOS LOSE LOSEL LOSELS LOSES LOSH LOSS LOSSES LOSSLESS OBE OBELI OBELISE OBELISES OBES OBESE OBI OBIS OBLIGE OBLIGEE OBLIGEES OBLIGES OBO OBOE OBOES OBOL OBOLE OBOLES OBOLI OBOLS OBOS OBS OBSESS OBSESSES OES OGEE OGEES OGLE OGLES OHO OHOS OHS OIL OILHOLE OILHOLES OILS OLE OLEO OLEOS OLES OLIO OLIOS OLLIE OLLIES OLOGIES OOH OOHS OOLOGIES OOS OOSE OOSES OSE OSES SEE SEEL SEELIE SEELS SEES SEG SEGHOL SEGHOLS SEGO SEGOL SEGOLS SEGOS SEGS SEI SEIL SEILS SEIS SEISE SEISES SEL SELE SELES SELL SELLE SELLES SELLS SELS SESE SESELI SESELIS SESH SESHES SESS SESSES SESSILE SHE SHEEL SHEELS SHEESH SHELL SHELLS SHEOL SHEOLS SHES SHH SHIEL SHIELS SHIES SHIGELLOSES SHIGELLOSIS SHILL SHILLS SHISH SHISO SHISOS SHOE SHOEBILL SHOEBILLS SHOELESS SHOES SHOG SHOGGLE SHOGGLES SHOGI SHOGIS SHOGS SHOO SHOOGIE SHOOGIES SHOOGLE SHOOGLES SHOOL SHOOLE SHOOLES SHOOLS SHOOS SIB SIBB SIBBS SIBS SIEGE SIEGES SIES SIGH SIGHLESS SIGHS SIGIL SIGILS SIGISBEI SIGISBEO SIGLOI SIGLOS SILE SILES SILL SILLIES SILLS SILO SILOS SIS SISES SISS SISSES SISSIES SISSOO SISSOOS SLEE SLEIGH SLEIGHS SLISH SLISHES SLOB SLOBBISH SLOBS SLOE SLOES SLOG SLOGS SLOOSH SLOOSHES SLOSH SLOSHES SOB SOBOLE SOBOLES SOBS SOG SOGS SOH SOHO SOHS SOIL SOILLESS SOILS SOL SOLE SOLEI SOLELESS SOLES SOLGEL SOLI SOLO SOLOS SOLS SOOGEE SOOGEES SOOGIE SOOGIES SOOL SOOLE SOOLES SOOLS SOS SOSS SOSSESCode: shoe-oil.py
Code: sowpods.txt