Skip to content

Instantly share code, notes, and snippets.

@seabre
Created November 18, 2013 01:43
Show Gist options
  • Save seabre/7521076 to your computer and use it in GitHub Desktop.
Save seabre/7521076 to your computer and use it in GitHub Desktop.
It had to be done.
Palindromes:
a
aba
ababa
abba
ada
adda
adinida
aeaea
aenea
aia
ajaja
aka
akka
ala
alala
alla
ama
amma
ana
anana
anna
anona
ara
arara
ardra
asa
ata
atta
ava
aviva
axa
aziza
b
bab
bcb
beeb
bib
bob
bub
c
capac
cc
d
ded
dud
e
ede
ele
eleele
elle
enone
eve
ewe
exe
f
g
gag
gcg
gog
h
hamah
hannah
harrah
i
igigi
iri
issi
j
k
kanak
kassak
kazak
kerek
keyek
kodok
l
lal
lasal
laval
lil
m
mgm
madam
malayalam
mam
mbm
mdm
n
naman
nan
nauruan
nefen
nitin
noxon
noyon
nun
o
odo
ofo
ono
oruro
oto
otto
oyo
p
pip
poop
pop
q
qq
r
redder
reger
remer
remmer
renner
rexer
rotavator
s
s's
salas
samas
semmes
senones
seres
shahs
sinis
sis
sotos
stets
sulus
sus
susus
t
tat
tebet
tet
tevet
tit
torot
tut
u
ulu
uru
uttu
utu
v
viv
w
x
y
z
zz
zzz
aaa
acca
affa
aga
aha
alula
apa
awa
bb
boob
cbc
cfc
civic
crc
csc
cyc
dad
deed
deedeed
degged
deified
deked
deled
denned
dered
dewed
did
divid
dmd
dod
dtd
ecce
eke
eme
ene
ere
ese
esse
eye
gig
goog
hagigah
hah
halalah
hallah
heh
hoh
huh
ihi
ii
iii
imi
immi
kaiak
kakkak
kayak
keek
kelek
kinnikinnik
kkk
kook
ldl
lemel
level
mm
ma'am
maam
malam
mallam
marram
mesem
mim
minim
mmmm
mom
mum
murdrum
mym
naan
neven
non
noon
obo
oho
oo
oooo
oppo
ottetto
oxo
pap
pcp
peep
peeweep
pep
prp
ptp
pullup
pup
racecar
radar
refer
reifier
repaper
retter
rever
reviver
rotator
rotor
sagas
sds
sedes
sees
seities
seles
selles
sememes
semes
serres
sesses
sexes
simis
siris
solos
sooloos
sos
sps
ss
stats
stots
succus
tallat
tdt
tebbet
teet
tenet
terret
tgt
tibbit
tipit
tirrit
tnt
toot
tot
trt
tst
tt
txt
tyt
ululu
umu
vav
waw
wnw
wow
wsw
www
xanax
xix
xx
xxx
yaray
yay
yoy
ziz
zuz
Symmetrical Lowercase Palindromes:
i
l
lil
m
n
nitin
noxon
nun
o
ono
oto
otto
t
tit
tut
u
ulu
uttu
utu
v
viv
w
x
ii
iii
imi
immi
mm
mim
minim
mmmm
mom
mum
non
noon
oo
oooo
oxo
tnt
toot
tot
tt
txt
ululu
umu
wnw
wow
www
xix
xx
xxx
Symmetrical Uppercase Palindromes:
a
aia
ama
amma
ana
anana
anna
anona
ata
atta
ava
aviva
axa
h
hamah
hannah
i
m
mam
n
naman
nan
nitin
noxon
noyon
nun
o
ono
oto
otto
oyo
t
tat
tit
tut
u
uttu
utu
v
viv
w
x
y
aaa
aha
awa
hah
hoh
huh
ihi
ii
iii
imi
immi
mm
maam
mim
minim
mmmm
mom
mum
mym
naan
non
noon
oho
oo
oooo
oxo
tnt
toot
tot
tt
txt
tyt
umu
vav
waw
wnw
wow
www
xanax
xix
xx
xxx
yay
yoy
Perfect Symmetrical Palindromes:
i
m
n
nitin
noxon
nun
o
ono
oto
otto
t
tit
tut
u
uttu
utu
v
viv
w
x
ii
iii
imi
immi
mm
mim
minim
mmmm
mom
mum
non
noon
oo
oooo
oxo
tnt
toot
tot
tt
txt
umu
wnw
wow
www
xix
xx
xxx
require 'set'
LOWERCASE_SYMMETRICAL = ['i', 'l', 'm', 'n', 'o', 't', 'u', 'v', 'w', 'x'].to_set
UPPERCASE_SYMMETRICAL = ['a', 'h', 'i', 'm', 'n', 'o', 't', 'u', 'v', 'w', 'x', 'y'].to_set
def word_as_charset(w)
w.split(//).to_set
end
def palindrome?(w)
w == w.reverse
end
def symmetrical_lowercase?(w)
palindrome?(w) && word_as_charset(w).subset?(LOWERCASE_SYMMETRICAL)
end
def symmetrical_uppercase?(w)
palindrome?(w) && word_as_charset(w).subset?(UPPERCASE_SYMMETRICAL)
end
def perfect_symmetrical?(w)
symmetrical_lowercase?(w) && symmetrical_uppercase?(w)
end
# Wordlist is american-english-insane. 6MB word list.
# Made available in Ubuntu by running: sudo apt-get install wamerican-insane
words = IO.readlines("/usr/share/dict/american-english-insane").map{|x| x.strip.downcase}.uniq
puts "Palindromes:"
puts words.find_all{|x| palindrome?(x)}
puts "Symmetrical Lowercase Palindromes:"
puts words.find_all{|x| symmetrical_lowercase?(x)}
puts "Symmetrical Uppercase Palindromes:"
puts words.find_all{|x| symmetrical_uppercase?(x)}
puts "Perfect Symmetrical Palindromes:"
puts words.find_all{|x| perfect_symmetrical?(x)}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment