aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerlMonk Athanasius <PerlMonk.Athanasius@gmail.com>2019-06-30 00:51:56 -0700
committerPerlMonk Athanasius <PerlMonk.Athanasius@gmail.com>2019-06-30 00:51:56 -0700
commit072d2dd87866a643be808e1e8e1869f478d7ddf4 (patch)
treeb11434d88c1ab93b63208b21331c61a755f0f9d3
parent9bdae8b343ea215edd5cb46f7f972c0d146c5fe3 (diff)
downloadperlweeklychallenge-club-072d2dd87866a643be808e1e8e1869f478d7ddf4.tar.gz
perlweeklychallenge-club-072d2dd87866a643be808e1e8e1869f478d7ddf4.tar.bz2
perlweeklychallenge-club-072d2dd87866a643be808e1e8e1869f478d7ddf4.zip
Solutions to challenges 1 and 2
Changes to be committed: new file: challenge-014/athanasius/blog.txt new file: challenge-014/athanasius/perl5/ch-1.pl new file: challenge-014/athanasius/perl5/ch-2.pl new file: challenge-014/athanasius/perl6/ch-1.p6 new file: challenge-014/athanasius/perl6/ch-2.p6 new file: challenge-014/athanasius/words_alpha.txt
-rw-r--r--challenge-014/athanasius/blog.txt1
-rw-r--r--challenge-014/athanasius/perl5/ch-1.pl65
-rw-r--r--challenge-014/athanasius/perl5/ch-2.pl147
-rw-r--r--challenge-014/athanasius/perl6/ch-1.p648
-rw-r--r--challenge-014/athanasius/perl6/ch-2.p6133
-rw-r--r--challenge-014/athanasius/words_alpha.txt370099
6 files changed, 370493 insertions, 0 deletions
diff --git a/challenge-014/athanasius/blog.txt b/challenge-014/athanasius/blog.txt
new file mode 100644
index 0000000000..d4e3ec5bdc
--- /dev/null
+++ b/challenge-014/athanasius/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/athanasius/2019/06/perl-weekly-challenge-014.html
diff --git a/challenge-014/athanasius/perl5/ch-1.pl b/challenge-014/athanasius/perl5/ch-1.pl
new file mode 100644
index 0000000000..6f5b2b73e4
--- /dev/null
+++ b/challenge-014/athanasius/perl5/ch-1.pl
@@ -0,0 +1,65 @@
+#!perl
+
+################################################################################
+=comment
+
+Perl Weekly Challenge 014
+=========================
+
+Challenge #1
+------------
+
+Write a script to generate Van Eck's sequence starts with 0. For more
+information, please check out wikipedia
+[ https://en.wikipedia.org/wiki/Van_Eck%27s_sequence |page]. This challenge was
+proposed by team member *Andrezgz*.
+
+=cut
+################################################################################
+
+#--------------------------------------#
+# Copyright © 2019 PerlMonk Athanasius #
+#--------------------------------------#
+
+use strict;
+use warnings;
+use Const::Fast;
+use Regexp::Common;
+
+const my $LENGTH => 27;
+const my $USAGE => "USAGE: perl $0 [<length>]";
+
+$| = 1;
+
+MAIN:
+{
+ scalar @ARGV <= 1
+ or die "\n$USAGE\n";
+
+ my $length = $ARGV[0] // $LENGTH;
+
+ $length =~ /^$RE{num}{int}$/ && $length > 0
+ or die "\nInvalid length '$length': must be an integer > 0\n";
+
+ print "\nThe first $length terms in Van Eck's sequence are:\n",
+ join( ', ', van_eck($length)->@* ), "\n";
+}
+
+sub van_eck
+{
+ my ($len) = @_;
+ my @seq = (undef, 0);
+ my %indices;
+
+ for my $n (1 .. $len - 1)
+ {
+ my $old_term = $seq[$n];
+ push @seq, exists $indices{$old_term} ? $n - $indices{$old_term} : 0;
+ $indices{$old_term} = $n;
+ }
+
+ shift @seq;
+ return \@seq;
+}
+
+################################################################################
diff --git a/challenge-014/athanasius/perl5/ch-2.pl b/challenge-014/athanasius/perl5/ch-2.pl
new file mode 100644
index 0000000000..cee1b11946
--- /dev/null
+++ b/challenge-014/athanasius/perl5/ch-2.pl
@@ -0,0 +1,147 @@
+#!perl
+
+################################################################################
+=comment
+
+Perl Weekly Challenge 014
+=========================
+
+Challenge #2
+------------
+
+Using only the official postal (2-letter) abbreviations for the 50 U.S. states,
+write a script to find the longest English word you can spell? Here is the list
+of U.S. states abbreviations as per wikipedia
+[ https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations |page]. This
+challenge was proposed by team member *Neil Bowers*.
+
+ For example,
+ Pennsylvania + Connecticut = PACT
+ Wisconsin + North Dakota = WIND
+ Maine + Alabama = MEAL
+ California + Louisiana + Massachusetts + Rhode Island = Calamari
+
+=cut
+################################################################################
+
+#--------------------------------------#
+# Copyright © 2019 PerlMonk Athanasius #
+#--------------------------------------#
+
+use strict;
+use utf8;
+use warnings;
+use Const::Fast;
+use constant TIMER => 1;
+
+# Abbreviations according to the "USPS" (United States Postal Service) column of
+# the Table in https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations
+
+const my %STATES_POSTAL =>
+ (
+ AL => 'Alabama', AK => 'Alaska', AZ => 'Arizona',
+ AR => 'Arkansas', CA => 'California', CO => 'Colorado',
+ CT => 'Connecticut', DE => 'Delaware', FL => 'Florida',
+ GA => 'Georgia', HI => 'Hawaii', ID => 'Idaho',
+ IL => 'Illinois', IN => 'Indiana', IA => 'Iowa',
+ KS => 'Kansas', KY => 'Kentucky', LA => 'Louisiana',
+ ME => 'Maine', MD => 'Maryland', MA => 'Massachusetts',
+ MI => 'Michigan', MN => 'Minnesota', MS => 'Mississippi',
+ MO => 'Missouri', MT => 'Montana', NE => 'Nebraska',
+ NV => 'Nevada', NH => 'New Hampshire', NJ => 'New Jersey',
+ NM => 'New Mexico', NY => 'New York', NC => 'North Carolina',
+ ND => 'North Dakota', OH => 'Ohio', OK => 'Oklahoma',
+ OR => 'Oregon', PA => 'Pennsylvania', RI => 'Rhode Island',
+ SC => 'South Carolina', SD => 'South Dakota', TN => 'Tennessee',
+ TX => 'Texas', UT => 'Utah', VT => 'Vermont',
+ VA => 'Virginia', WA => 'Washington', WV => 'West Virginia',
+ WI => 'Wisconsin', WY => 'Wyoming',
+ );
+
+# Regular expression to match (case-insensitively, but otherwise exactly) any
+# one of the 50 state postal abbreviations
+
+const my $STATES_REGEX =>
+ eval 'qr/^(?:' . join('|', keys %STATES_POSTAL) . ')$/i';
+
+# Dictionary file downloaded from https://github.com/dwyl/english-words
+
+const my $WORDS_FILE => '../words_alpha.txt';
+
+$| = 1;
+
+MAIN:
+{
+ use if TIMER, 'Time::HiRes' => qw( gettimeofday tv_interval );
+ my $t0 = [gettimeofday] if TIMER;
+ my ($total, $words) = get_words();
+
+ printf "\n%d words read from file '$WORDS_FILE', of which\n" .
+ "%6d can be formed from US state abbreviations\n",
+ $total, scalar @$words;
+
+ if (scalar @$words == 0)
+ {
+ print "\nNo solutions found\n";
+ }
+ else
+ {
+ my $solutions = get_solutions($words);
+
+ printf "\nThe longest of these ha%s %d letters:\n",
+ (scalar @$solutions == 1) ? 's' : 've', length $solutions->[0];
+
+ for my $solution (@$solutions)
+ {
+ my @states = map { $STATES_POSTAL{uc $_} } $solution =~ /../g;
+
+ printf "%s = %s\n", $solution, join(' + ', @states);
+ }
+ }
+
+ my $t = tv_interval($t0) if TIMER;
+ print "\n", $t, " seconds\n" if TIMER;
+}
+
+sub get_words
+{
+ my $total = 0;
+ my @words;
+
+ open my $fh, '<', $WORDS_FILE
+ or die "Cannot open file '$WORDS_FILE' for reading, stopped";
+
+ WORD:
+ while (my $word = <$fh>)
+ {
+ ++$total;
+ chomp $word;
+ next unless length($word) % 2 == 0;
+
+ for my $pair ($word =~ /../g)
+ {
+ next WORD unless $pair =~ $STATES_REGEX;
+ }
+
+ push @words, $word;
+ }
+
+ close $fh
+ or die "Cannot close file '$WORDS_FILE', stopped";
+
+ return ($total, \@words);
+}
+
+sub get_solutions
+{
+ my ($words) = @_;
+ @$words = sort { length $b <=> length $a } @$words; # Descending
+ my $index = 0;
+ my $max_len = length $words->[$index];
+
+ 1 while length $words->[++$index] == $max_len;
+
+ return [ @$words[0 .. --$index] ]; # Alternative syntax: $words->@[...]
+}
+
+################################################################################
diff --git a/challenge-014/athanasius/perl6/ch-1.p6 b/challenge-014/athanasius/perl6/ch-1.p6
new file mode 100644
index 0000000000..c2792a390e
--- /dev/null
+++ b/challenge-014/athanasius/perl6/ch-1.p6
@@ -0,0 +1,48 @@
+use v6;
+
+################################################################################
+=begin comment
+
+Perl Weekly Challenge 014
+=========================
+
+Challenge #1
+------------
+
+Write a script to generate Van Eck's sequence starts with 0. For more
+information, please check out wikipedia
+[ https://en.wikipedia.org/wiki/Van_Eck%27s_sequence |page]. This challenge was
+proposed by team member *Andrezgz*.
+
+=end comment
+################################################################################
+
+#--------------------------------------#
+# Copyright © 2019 PerlMonk Athanasius #
+#--------------------------------------#
+
+my Int constant $LENGTH = 27;
+
+sub MAIN(Int:D $length = $LENGTH)
+{
+ say "\nThe first $length terms in Van Eck's sequence are:\n",
+ van-eck($length).join(', ');
+}
+
+sub van-eck(Int:D $length --> Array)
+{
+ my @seq = (Nil, 0);
+ my %indices;
+
+ for 1 .. $length - 1 -> Int $n
+ {
+ my $old_term = @seq[$n];
+ push @seq, %indices{$old_term}:exists ?? $n - %indices{$old_term} !! 0;
+ %indices{$old_term} = $n;
+ }
+
+ shift @seq;
+ return @seq;
+}
+
+################################################################################
diff --git a/challenge-014/athanasius/perl6/ch-2.p6 b/challenge-014/athanasius/perl6/ch-2.p6
new file mode 100644
index 0000000000..ae2bed43e6
--- /dev/null
+++ b/challenge-014/athanasius/perl6/ch-2.p6
@@ -0,0 +1,133 @@
+use v6;
+
+################################################################################
+=begin comment
+
+Perl Weekly Challenge 014
+=========================
+
+Challenge #2
+------------
+
+Using only the official postal (2-letter) abbreviations for the 50 U.S. states,
+write a script to find the longest English word you can spell? Here is the list
+of U.S. states abbreviations as per wikipedia
+[ https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations |page]. This
+challenge was proposed by team member *Neil Bowers*.
+
+ For example,
+ Pennsylvania + Connecticut = PACT
+ Wisconsin + North Dakota = WIND
+ Maine + Alabama = MEAL
+ California + Louisiana + Massachusetts + Rhode Island = Calamari
+
+=end comment
+################################################################################
+
+#--------------------------------------#
+# Copyright © 2019 PerlMonk Athanasius #
+#--------------------------------------#
+
+my constant $TIMER = 1;
+
+# Abbreviations according to the "USPS" (United States Postal Service) column of
+# the Table in https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations
+
+my constant %STATES_POSTAL =
+(
+ :AL('Alabama'), :AK('Alaska'), :AZ('Arizona'),
+ :AR('Arkansas'), :CA('California'), :CO('Colorado'),
+ :CT('Connecticut'), :DE('Delaware'), :FL('Florida'),
+ :GA('Georgia'), :HI('Hawaii'), :ID('Idaho'),
+ :IL('Illinois'), :IN('Indiana'), :IA('Iowa'),
+ :KS('Kansas'), :KY('Kentucky'), :LA('Louisiana'),
+ :ME('Maine'), :MD('Maryland'), :MA('Massachusetts'),
+ :MI('Michigan'), :MN('Minnesota'), :MS('Mississippi'),
+ :MO('Missouri'), :MT('Montana'), :NE('Nebraska'),
+ :NV('Nevada'), :NH('New Hampshire'), :NJ('New Jersey'),
+ :NM('New Mexico'), :NY('New York'), :NC('North Carolina'),
+ :ND('North Dakota'), :OH('Ohio'), :OK('Oklahoma'),
+ :OR('Oregon'), :PA('Pennsylvania'), :RI('Rhode Island'),
+ :SC('South Carolina'), :SD('South Dakota'), :TN('Tennessee'),
+ :TX('Texas'), :UT('Utah'), :VT('Vermont'),
+ :VA('Virginia'), :WA('Washington'), :WV('West Virginia'),
+ :WI('Wisconsin'), :WY('Wyoming'),
+);
+
+my constant $STATES = Set[Str].new( %STATES_POSTAL.keys );
+
+# Dictionary file downloaded from https://github.com/dwyl/english-words
+
+my Str constant $WORDS_FILE = '../words_alpha.txt';
+
+sub MAIN()
+{
+ my DateTime $t0 = DateTime.now if $TIMER;
+
+ my (Int:D $total, Array:D $words) = get-words();
+
+ say "\n$total words read from file '$WORDS_FILE', of which\n",
+ sprintf('%*d', $total.chars, $words.elems),
+ ' can be formed from US state abbreviations';
+
+ if ($words.elems == 0)
+ {
+ say "\nNo solutions found";
+ }
+ else
+ {
+ my (Int:D $max-len, List:D $solutions) = get-solutions($words);
+
+ say "\nThe longest of these ",
+ "ha{ $solutions.elems == 1 ?? 's' !! 've' } $max-len letters:";
+
+ for @$solutions -> Str:D $solution
+ {
+ my @states = ($solution ~~ m:g/../).map: { %STATES_POSTAL{.uc} };
+
+ say $solution, ' = ', @states.join(' + ');
+ }
+ }
+
+ if ($TIMER)
+ {
+ my DateTime $t = DateTime.now;
+ say "\nTime elapsed: { $t - $t0 } seconds";
+ }
+}
+
+sub get-words(--> List:D)
+{
+ my Int $total = 0;
+ my @words;
+
+ WORD:
+ for $WORDS_FILE.IO.lines -> Str $word
+ {
+ ++$total;
+
+ next unless $word.chars % 2 == 0;
+
+ for $word ~~ m:g/../ -> Match $pair
+ {
+ next WORD unless $pair.uc ∈ $STATES;
+ }
+
+ @words.push: $word;
+ }
+
+ return $total, @words;
+}
+
+sub get-solutions(Array:D $words --> List:D)
+{
+ my @words = $words.sort: { .chars };
+ my Int $index = @words.end;
+ my Int $max-len = @words[ $index ].chars;
+
+ Nil while @words[ --$index ].chars == $max-len;
+
+ return $max-len, @words[ ++$index .. * ];
+}
+
+################################################################################
diff --git a/challenge-014/athanasius/words_alpha.txt b/challenge-014/athanasius/words_alpha.txt
new file mode 100644
index 0000000000..413bbb8055
--- /dev/null
+++ b/challenge-014/athanasius/words_alpha.txt
@@ -0,0 +1,370099 @@
+a
+aa
+aaa
+aah
+aahed
+aahing
+aahs
+aal
+aalii
+aaliis
+aals
+aam
+aani
+aardvark
+aardvarks
+aardwolf
+aardwolves
+aargh
+aaron
+aaronic
+aaronical
+aaronite
+aaronitic
+aarrgh
+aarrghh
+aaru
+aas
+aasvogel
+aasvogels
+ab
+aba
+ababdeh
+ababua
+abac
+abaca
+abacay
+abacas
+abacate
+abacaxi
+abaci
+abacinate
+abacination
+abacisci
+abaciscus
+abacist
+aback
+abacli
+abacot
+abacterial
+abactinal
+abactinally
+abaction
+abactor
+abaculi
+abaculus
+abacus
+abacuses
+abada
+abaddon
+abadejo
+abadengo
+abadia
+abadite
+abaff
+abaft
+abay
+abayah
+abaisance
+abaised
+abaiser
+abaisse
+abaissed
+abaka
+abakas
+abalation
+abalienate
+abalienated
+abalienating
+abalienation
+abalone
+abalones
+abama
+abamp
+abampere
+abamperes
+abamps
+aband
+abandon
+abandonable
+abandoned
+abandonedly
+abandonee
+abandoner
+abandoners
+abandoning
+abandonment
+abandonments
+abandons
+abandum
+abanet
+abanga
+abanic
+abannition
+abantes
+abapical
+abaptiston
+abaptistum
+abarambo
+abaris
+abarthrosis
+abarticular
+abarticulation
+abas
+abase
+abased
+abasedly
+abasedness
+abasement
+abasements
+abaser
+abasers
+abases
+abasgi
+abash
+abashed
+abashedly
+abashedness
+abashes
+abashing
+abashless
+abashlessly
+abashment
+abashments
+abasia
+abasias
+abasic
+abasing
+abasio
+abask
+abassi
+abassin
+abastard
+abastardize
+abastral
+abatable
+abatage
+abate
+abated
+abatement
+abatements
+abater
+abaters
+abates
+abatic
+abating
+abatis
+abatised
+abatises
+abatjour
+abatjours
+abaton
+abator
+abators
+abattage
+abattis
+abattised
+abattises
+abattoir
+abattoirs
+abattu
+abattue
+abatua
+abature
+abaue
+abave
+abaxial
+abaxile
+abaze
+abb
+abba
+abbacy
+abbacies
+abbacomes
+abbadide
+abbaye
+abbandono
+abbas
+abbasi
+abbasid
+abbassi
+abbasside
+abbate
+abbatial
+abbatical
+abbatie
+abbe
+abbey
+abbeys
+abbeystead
+abbeystede
+abbes
+abbess
+abbesses
+abbest
+abbevillian
+abby
+abbie
+abboccato
+abbogada
+abbot
+abbotcy
+abbotcies
+abbotnullius
+abbotric
+abbots
+abbotship
+abbotships
+abbott
+abbozzo
+abbr
+abbrev
+abbreviatable
+abbreviate
+abbreviated
+abbreviately
+abbreviates
+abbreviating
+abbreviation
+abbreviations
+abbreviator
+abbreviatory
+abbreviators
+abbreviature
+abbroachment
+abc
+abcess
+abcissa
+abcoulomb
+abd
+abdal
+abdali
+abdaria
+abdat
+abderian
+abderite
+abdest
+abdicable
+abdicant
+abdicate
+abdicated
+abdicates
+abdicating
+abdication
+abdications
+abdicative
+abdicator
+abdiel
+abditive
+abditory
+abdom
+abdomen
+abdomens
+abdomina
+abdominal
+abdominales
+abdominalia
+abdominalian
+abdominally
+abdominals
+abdominoanterior
+abdominocardiac
+abdominocentesis
+abdominocystic
+abdominogenital
+abdominohysterectomy
+abdominohysterotomy
+abdominoposterior
+abdominoscope
+abdominoscopy
+abdominothoracic
+abdominous
+abdominovaginal
+abdominovesical
+abduce
+abduced
+abducens
+abducent
+abducentes
+abduces
+abducing
+abduct
+abducted
+abducting
+abduction
+abductions
+abductor
+abductores
+abductors
+abducts
+abe
+abeam
+abear
+abearance
+abecedaire
+abecedary
+abecedaria
+abecedarian
+abecedarians
+abecedaries
+abecedarium
+abecedarius
+abed
+abede
+abedge
+abegge
+abey
+abeyance
+abeyances
+abeyancy
+abeyancies
+abeyant
+abeigh
+abel
+abele
+abeles
+abelia
+abelian
+abelicea
+abelite
+abelmoschus
+abelmosk
+abelmosks
+abelmusk
+abelonian
+abeltree
+abencerrages
+abend
+abends
+abenteric
+abepithymia
+aberdavine
+aberdeen
+aberdevine
+aberdonian
+aberduvine
+aberia
+abernethy
+aberr
+aberrance
+aberrancy
+aberrancies
+aberrant
+aberrantly
+aberrants
+aberrate
+aberrated
+aberrating
+aberration
+aberrational
+aberrations
+aberrative
+aberrator
+aberrometer
+aberroscope
+aberuncate
+aberuncator
+abesse
+abessive
+abet
+abetment
+abetments
+abets
+abettal
+abettals
+abetted
+abetter
+abetters
+abetting
+abettor
+abettors
+abevacuation
+abfarad
+abfarads
+abhenry
+abhenries
+abhenrys
+abhinaya
+abhiseka
+abhominable
+abhor
+abhorred
+abhorrence
+abhorrences
+abhorrency
+abhorrent
+abhorrently
+abhorrer
+abhorrers
+abhorrible
+abhorring
+abhors
+abhorson
+aby
+abib
+abichite
+abidal
+abidance
+abidances
+abidden
+abide
+abided
+abider
+abiders
+abides
+abidi
+abiding
+abidingly
+abidingness
+abie
+abye
+abiegh
+abience
+abient
+abies
+abyes
+abietate
+abietene
+abietic
+abietin
+abietineae
+abietineous
+abietinic
+abietite
+abiezer
+abigail
+abigails
+abigailship
+abigeat
+abigei
+abigeus
+abying
+abilao
+abilene
+abiliment
+abilitable
+ability
+abilities
+abilla
+abilo
+abime
+abintestate
+abiogeneses
+abiogenesis
+abiogenesist
+abiogenetic
+abiogenetical
+abiogenetically
+abiogeny
+abiogenist
+abiogenous
+abiology
+abiological
+abiologically
+abioses
+abiosis
+abiotic
+abiotical
+abiotically
+abiotrophy
+abiotrophic
+abipon
+abir
+abirritant
+abirritate
+abirritated
+abirritating
+abirritation
+abirritative
+abys
+abysm
+abysmal
+abysmally
+abysms
+abyss
+abyssa
+abyssal
+abysses
+abyssinia
+abyssinian
+abyssinians
+abyssobenthonic
+abyssolith
+abyssopelagic
+abyssus
+abiston
+abit
+abitibi
+abiuret
+abject
+abjectedness
+abjection
+abjections
+abjective
+abjectly
+abjectness
+abjoint
+abjudge
+abjudged
+abjudging
+abjudicate
+abjudicated
+abjudicating
+abjudication
+abjudicator
+abjugate
+abjunct
+abjunction
+abjunctive
+abjuration
+abjurations
+abjuratory
+abjure
+abjured
+abjurement
+abjurer
+abjurers
+abjures
+abjuring
+abkar
+abkari
+abkary
+abkhas
+abkhasian
+abl
+ablach
+ablactate
+ablactated
+ablactating
+ablactation
+ablaqueate
+ablare
+ablastemic
+ablastin
+ablastous
+ablate
+ablated
+ablates
+ablating
+ablation
+ablations
+ablatitious
+ablatival
+ablative
+ablatively
+ablatives
+ablator
+ablaut
+ablauts
+ablaze
+able
+ableeze
+ablegate
+ablegates
+ablegation
+ablend
+ableness
+ablepharia
+ablepharon
+ablepharous
+ablepharus
+ablepsy
+ablepsia
+ableptical
+ableptically
+abler
+ables
+ablesse
+ablest
+ablet
+ablewhackets
+ably
+ablings
+ablins
+ablock
+abloom
+ablow
+ablude
+abluent
+abluents
+ablush
+ablute
+abluted
+ablution
+ablutionary
+ablutions
+abluvion
+abmho
+abmhos
+abmodality
+abmodalities
+abn
+abnaki
+abnegate
+abnegated
+abnegates
+abnegating
+abnegation
+abnegations
+abnegative
+abnegator
+abnegators
+abner
+abnerval
+abnet
+abneural
+abnormal
+abnormalcy
+abnormalcies
+abnormalise
+abnormalised
+abnormalising
+abnormalism
+abnormalist
+abnormality
+abnormalities
+abnormalize
+abnormalized
+abnormalizing
+abnormally
+abnormalness
+abnormals
+abnormity
+abnormities
+abnormous
+abnumerable
+abo
+aboard
+aboardage
+abobra
+abococket
+abodah
+abode
+aboded
+abodement
+abodes
+abody
+aboding
+abogado
+abogados
+abohm
+abohms
+aboideau
+aboideaus
+aboideaux
+aboil
+aboiteau
+aboiteaus
+aboiteaux
+abolete
+abolish
+abolishable
+abolished
+abolisher
+abolishers
+abolishes
+abolishing
+abolishment
+abolishments
+abolition
+abolitionary
+abolitionise
+abolitionised
+abolitionising
+abolitionism
+abolitionist
+abolitionists
+abolitionize
+abolitionized
+abolitionizing
+abolla
+abollae
+aboma
+abomas
+abomasa
+abomasal
+abomasi
+abomasum
+abomasus
+abomasusi
+abominability
+abominable
+abominableness
+abominably
+abominate
+abominated
+abominates
+abominating
+abomination
+abominations
+abominator
+abominators
+abomine
+abondance
+abongo
+abonne
+abonnement
+aboon
+aborad
+aboral
+aborally
+abord
+aboriginal
+aboriginality
+aboriginally
+aboriginals
+aboriginary
+aborigine
+aborigines
+aborning
+aborsement
+aborsive
+abort
+aborted
+aborter
+aborters
+aborticide
+abortient
+abortifacient
+abortin
+aborting
+abortion
+abortional
+abortionist
+abortionists
+abortions
+abortive
+abortively
+abortiveness
+abortogenic
+aborts
+abortus
+abortuses
+abos
+abote
+abouchement
+aboudikro
+abought
+aboulia
+aboulias
+aboulic
+abound
+abounded
+abounder
+abounding
+aboundingly
+abounds
+about
+abouts
+above
+aboveboard
+abovedeck
+aboveground
+abovementioned
+aboveproof
+aboves
+abovesaid
+abovestairs
+abow
+abox
+abp
+abr
+abracadabra
+abrachia
+abrachias
+abradable
+abradant
+abradants
+abrade
+abraded
+abrader
+abraders
+abrades
+abrading
+abraham
+abrahamic
+abrahamidae
+abrahamite
+abrahamitic
+abray
+abraid
+abram
+abramis
+abranchial
+abranchialism
+abranchian
+abranchiata
+abranchiate
+abranchious
+abrasax
+abrase
+abrased
+abraser
+abrash
+abrasing
+abrasiometer
+abrasion
+abrasions
+abrasive
+abrasively
+abrasiveness
+abrasives
+abrastol
+abraum
+abraxas
+abrazite
+abrazitic
+abrazo
+abrazos
+abreact
+abreacted
+abreacting
+abreaction
+abreactions
+abreacts
+abreast
+abreed
+abrege
+abreid
+abrenounce
+abrenunciate
+abrenunciation
+abreption
+abret
+abreuvoir
+abri
+abrico
+abricock
+abricot
+abridgable
+abridge
+abridgeable
+abridged
+abridgedly
+abridgement
+abridgements
+abridger
+abridgers
+abridges
+abridging
+abridgment
+abridgments
+abrim
+abrin
+abrine
+abris
+abristle
+abroach
+abroad
+abrocoma
+abrocome
+abrogable
+abrogate
+abrogated
+abrogates
+abrogating
+abrogation
+abrogations
+abrogative
+abrogator
+abrogators
+abroma
+abronia
+abrood
+abrook
+abrosia
+abrosias
+abrotanum
+abrotin
+abrotine
+abrupt
+abruptedly
+abrupter
+abruptest
+abruptio
+abruption
+abruptiones
+abruptly
+abruptness
+abrus
+abs
+absalom
+absampere
+absaroka
+absarokite
+abscam
+abscess
+abscessed
+abscesses
+abscessing
+abscession
+abscessroot
+abscind
+abscise
+abscised
+abscises
+abscising
+abscisins
+abscision
+absciss
+abscissa
+abscissae
+abscissas
+abscisse
+abscissin
+abscission
+abscissions
+absconce
+abscond
+absconded
+abscondedly
+abscondence
+absconder
+absconders
+absconding
+absconds
+absconsa
+abscoulomb
+abscound
+absee
+absey
+abseil
+abseiled
+abseiling
+abseils
+absence
+absences
+absent
+absentation
+absented
+absentee
+absenteeism
+absentees
+absenteeship
+absenter
+absenters
+absentia
+absenting
+absently
+absentment
+absentminded
+absentmindedly
+absentmindedness
+absentness
+absents
+absfarad
+abshenry
+absi
+absinth
+absinthe
+absinthes
+absinthial
+absinthian
+absinthiate
+absinthiated
+absinthiating
+absinthic
+absinthiin
+absinthin
+absinthine
+absinthism
+absinthismic
+absinthium
+absinthol
+absinthole
+absinths
+absyrtus
+absis
+absist
+absistos
+absit
+absmho
+absohm
+absoil
+absolent
+absolute
+absolutely
+absoluteness
+absoluter
+absolutes
+absolutest
+absolution
+absolutions
+absolutism
+absolutist
+absolutista
+absolutistic
+absolutistically
+absolutists
+absolutive
+absolutization
+absolutize
+absolutory
+absolvable
+absolvatory
+absolve
+absolved
+absolvent
+absolver
+absolvers
+absolves
+absolving
+absolvitor
+absolvitory
+absonant
+abs