Nov
8
Longest Word With Just Half a Keyboard?
Filed Under 42 (Life the Universe & Everything), Computers & Tech on November 8, 2010 at 4:31 pm
As some of you may know, I’ve been ill for the past few weeks now, and hence not working or podcasting. I spend a lot of my time doing nothing because I have no energy and often a headache, but when my head is clear I have a lot of thinking time since doing physical things is not possible. I even need to be careful not to type too much or my arms get very sore!
Anyhow – yesterday Bren Finan was chatting with me when he noticed that ‘yesterday’ uses only keys from one half of the keyboard. Which got him, and hence me, wondering if there was a longer word that can be written with just half a keyboard. (The quick-witted among you will probably spot that ‘Yesterday’ doesn’t actually count because the ‘y’ is on the wrong side of the divide on ergonomic keyboards.)
As I say, the conversation got me thinking, and I mentioned it to Connor P when I was chatting to him later, and during that conversation the idea came to write a program to get the answer! The problem then was that I’d need a dictionary file. Connor soon found the answer on Google, the Mac has a built-in word list in /usr/share/dict/words
! So, all it took was a few lines of Perl:
#!/usr/bin/perl use strict; my $longestLeft, my $longestRight; while(<>){ my $validLeft = $_ unless m/[yuiophjklnm]/i; my $validRight = $_ unless m/[qwertasdfgzxcvb]/i; $longestLeft = $validLeft if length($validLeft) > length($longestLeft); $longestRight = $validRight if length($validRight) > length($longestRight); } print "Longest left-only: $longestLeft\nLongest right-only: $longestRight\n";
The answer, the longest left-only word is ‘aftercataract’, and the longest right-only word is ‘phyllophyllin’!
Of coruse, once I started thinking about this I also wanted a list of long words, so I did a few teaks to the code, and produced this delux version:
#!/usr/bin/perl use strict; # declare the needed variables my $longestLeft, my $longestRight, my $minLength=10; my @longLeftWords, my @longRightWords; # loop through the dictionary (file name to be passed as only argument) while(<>){ chomp; unless(m/[yuiophjklnm]/i){ # valid left-only word push(@longLeftWords, $_) if length($_) >= $minLength; $longestLeft = $_ if length($_) > length($longestLeft); } unless(m/[qwertasdfgzxcvb]/i){ # valid right-only word push(@longRightWords, $_) if length($_) >= $minLength; $longestRight = $_ if length($_) > length($longestRight); } } # print the results print "\nLong words (at least $minLength letters) with the left-side of the KB only:\n"; foreach my $word (@longLeftWords){ print "\t$word\n"; } print "\t\t(total: ".scalar(@longLeftWords).")\n"; print "\nLong words (at least $minLength letters) with the rightside of the KB only:\n"; foreach my $word (@longRightWords){ print "\t$word\n"; } print "\t\t(total: ".scalar(@longRightWords).")\n"; print "\nLongest left-only word: $longestLeft (".length($longestLeft)." letters)\n"; print "Longest right-only word: $longestRight (".length($longestLeft)." letters)\n\n";
This gives the following results:
bartmbp:Temp bart$ ./dict.pl /usr/share/dict/words Long words (at least 10 letters) with the left-side of the KB only: abracadabra abstracted abstracter Actaeaceae afterbreast aftercareer aftercataract aftereffect aftergrass aftergrave afterstate aftertaste afterwards Aggregatae asarabacca assertress asseverate Asteraceae badgerweed beaverette bedaggered begartered beggarweed besweatered betattered bettergates breastweed cataracted decerebrate defervesce desecrater desertress desertward detractress devertebrated ebracteate effervesce estafetted everbearer Evertebrata evertebrate exacerbate exaggerate exaggerated extrastate extravagate extravasate freetrader Gastraeadae gazetteerage grasswards gravestead gravewards reaggravate reaggregate reasseverate redecrease redefecate refederate regratress Resedaceae retraverse revegetate reverberate reverbrate settergrass stagecraft staggerweed starveacre statecraft stavesacre stewardess streetward sweetbread sweetwater tartarated terracette terracewards tessaradecad tesseradecade tesserated tradecraft Trastevere versecraft Vertebrata vertebrate vertebrated waterstead waterwards westerwards (total: 90) Long words (at least 10 letters) with the rightside of the KB only: hypolimnion hypophyllium hypophyllum miminypiminy phyllophyllin Plynlymmon polyphonium polyphylly (total: 8) Longest left-only word: aftercataract (13 letters) Longest right-only word: phyllophyllin (13 letters) bartmbp:Temp bart$
This tells me two things, firstly, that Perl is really good at analysing text, because on my 5 year old Macbook Pro that took about a second to run, and second, that there are FAR more words for the left side than the right side.
Brilliant! I can just see these cropping up on QI sometime in the future. You have advanced society with this analysis.
[…] Longest Word With Just Half a Keyboard? […]