Merge pull request #1 from fnichol/april-2016

Freshing the codebase
This commit is contained in:
Fletcher Nichol 2016-04-29 19:47:41 -06:00
commit db08943e6d
10 changed files with 2190 additions and 2180 deletions

View File

@ -13,6 +13,7 @@ A library to generate random name strings suitable for use in container
instances, project names, application instances, etc.
"""
exclude = ["cli"]
build = "build.rs"
[lib]
name = "names"

24
build.rs Normal file
View File

@ -0,0 +1,24 @@
use std::env;
use std::fs::File;
use std::io::{BufReader, BufWriter};
use std::io::prelude::*;
use std::path::Path;
fn main() {
generate(Path::new("data").join("adjectives.txt").as_path(),
Path::new(&env::var("OUT_DIR").unwrap()).join("adjectives.rs").as_path());
generate(Path::new("data").join("nouns.txt").as_path(),
Path::new(&env::var("OUT_DIR").unwrap()).join("nouns.rs").as_path());
}
fn generate(src_path: &Path, dst_path: &Path) {
let src = File::open(src_path).unwrap();
let src = BufReader::new(src);
let dst = File::create(dst_path).unwrap();
let mut dst = BufWriter::new(dst);
write!(dst, "[\n").unwrap();
for word in src.lines() {
write!(dst, "\"{}\",\n", &word.unwrap()).unwrap();
}
write!(dst, "];\n").unwrap();
}

46
cli/Cargo.lock generated
View File

@ -2,73 +2,65 @@
name = "names-cli"
version = "0.10.0"
dependencies = [
"clap 1.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"names 0.10.0",
]
[[package]]
name = "advapi32-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ansi_term"
version = "0.6.3"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bitflags"
version = "0.3.2"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "clap"
version = "1.4.6"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ansi_term 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"vec_map 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libc"
version = "0.1.12"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "names"
version = "0.10.0"
dependencies = [
"rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand"
version = "0.3.11"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"advapi32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "strsim"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi"
version = "0.2.4"
name = "unicode-width"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-build"
version = "0.1.1"
name = "vec_map"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

View File

@ -12,6 +12,9 @@ A program to generate random names that look like 'used-jellyfish'.
[[bin]]
name = "names"
[dependencies]
clap = "~1.4"
names = { path = ".." }
[dependencies.clap]
version = "~2.3"
features = [ "suggestions", "color", "unstable" ]
[dependencies.names]
path = ".."

View File

@ -1,31 +1,28 @@
#[macro_use] extern crate clap;
#[macro_use]
extern crate clap;
extern crate names;
use clap::{App, Arg};
use names::{Generator, Name};
fn main() {
let matches = App::new("names")
.version(&crate_version!()[..])
.author("\nAuthor: Fletcher Nichol <fnichol@nichol.ca>\n")
.about("A random name generator with results like `delirious-pail'.")
.arg(Arg::with_name("amount")
.help("Number of names to generate (default: 1)")
.index(1)
)
.arg(Arg::with_name("number")
.short("n")
.long("number")
.help("Adds a random number to the name(s)")
)
.get_matches();
let (naming, amount) = {
let app = clap_app!(names =>
(version: &crate_version!()[..])
(author: "\nAuthor: Fletcher Nichol <fnichol@nichol.ca>\n")
(about: "A random name generator with results like `delirious-pail'.")
(@setting ColoredHelp)
(@arg amount: "Number of names to generate (default: 1)")
(@arg number: -n --number "Adds a random number to the name(s)")
);
let matches = app.get_matches();
let amount = value_t!(matches.value_of("amount"), usize).unwrap_or(1);
let naming: Name = if matches.is_present("number") {
Name::Numbered
} else {
Default::default()
};
(naming, amount)
};
let mut generator = Generator::with_naming(naming);
for _ in 0..amount {

1124
data/adjectives.txt Normal file

File diff suppressed because it is too large Load Diff

981
data/nouns.txt Normal file
View File

@ -0,0 +1,981 @@
able
account
achieve
achiever
acoustics
act
action
activity
actor
addition
adjustment
advertisement
advice
aftermath
afternoon
afterthought
agreement
air
airplane
airport
alarm
alley
amount
amusement
anger
angle
animal
answer
ant
ants
apparatus
apparel
apple
apples
appliance
approval
arch
argument
arithmetic
arm
army
art
attack
attempt
attention
attraction
aunt
authority
babies
baby
back
badge
bag
bait
balance
ball
balloon
balls
banana
band
base
baseball
basin
basket
basketball
bat
bath
battle
bead
beam
bean
bear
bears
beast
bed
bedroom
beds
bee
beef
beetle
beggar
beginner
behavior
belief
believe
bell
bells
berry
bike
bikes
bird
birds
birth
birthday
bit
bite
blade
blood
blow
board
boat
boats
body
bomb
bone
book
books
boot
border
bottle
boundary
box
boy
boys
brain
brake
branch
brass
bread
breakfast
breath
brick
bridge
brother
brothers
brush
bubble
bucket
building
bulb
bun
burn
burst
bushes
business
butter
button
cabbage
cable
cactus
cake
cakes
calculator
calendar
camera
camp
can
cannon
canvas
cap
caption
car
card
care
carpenter
carriage
cars
cart
cast
cat
cats
cattle
cause
cave
celery
cellar
cemetery
cent
chain
chair
chairs
chalk
chance
change
channel
cheese
cherries
cherry
chess
chicken
chickens
children
chin
church
circle
clam
class
clock
clocks
cloth
cloud
clouds
clover
club
coach
coal
coast
coat
cobweb
coil
collar
color
comb
comfort
committee
company
comparison
competition
condition
connection
control
cook
copper
copy
cord
cork
corn
cough
country
cover
cow
cows
crack
cracker
crate
crayon
cream
creator
creature
credit
crib
crime
crook
crow
crowd
crown
crush
cry
cub
cup
current
curtain
curve
cushion
dad
daughter
day
death
debt
decision
deer
degree
design
desire
desk
destruction
detail
development
digestion
dime
dinner
dinosaurs
direction
dirt
discovery
discussion
disease
disgust
distance
distribution
division
dock
doctor
dog
dogs
doll
dolls
donkey
door
downtown
drain
drawer
dress
drink
driving
drop
drug
drum
duck
ducks
dust
ear
earth
earthquake
edge
education
effect
egg
eggnog
eggs
elbow
end
engine
error
event
example
exchange
existence
expansion
experience
expert
eye
eyes
face
fact
fairies
fall
family
fan
fang
farm
farmer
father
faucet
fear
feast
feather
feeling
feet
fiction
field
fifth
fight
finger
fire
fireman
fish
flag
flame
flavor
flesh
flight
flock
floor
flower
flowers
fly
fog
fold
food
foot
force
fork
form
fowl
frame
friction
friend
friends
frog
frogs
front
fruit
fuel
furniture
galley
game
garden
gate
geese
ghost
giants
giraffe
girl
girls
glass
glove
glue
goat
gold
goldfish
good-bye
goose
government
governor
grade
grain
grandfather
grandmother
grape
grass
grip
ground
group
growth
guide
guitar
gun
hair
haircut
hall
hammer
hand
hands
harbor
harmony
hat
hate
head
health
hearing
heart
heat
help
hen
hill
history
hobbies
hole
holiday
home
honey
hook
hope
horn
horse
horses
hose
hospital
hot
hour
house
houses
humor
hydrant
ice
icicle
idea
impulse
income
increase
industry
ink
insect
instrument
insurance
interest
invention
iron
island
jail
jam
jar
jeans
jelly
jellyfish
jewel
join
joke
journey
judge
juice
jump
kettle
key
kick
kiss
kite
kitten
kittens
kitty
knee
knife
knot
knowledge
laborer
lace
ladybug
lake
lamp
land
language
laugh
lawyer
lead
leaf
learning
leather
leg
legs
letter
letters
lettuce
level
library
lift
light
limit
line
linen
lip
liquid
list
lizards
loaf
lock
locket
look
loss
love
low
lumber
lunch
lunchroom
machine
magic
maid
mailbox
man
manager
map
marble
mark
market
mask
mass
match
meal
measure
meat
meeting
memory
men
metal
mice
middle
milk
mind
mine
minister
mint
minute
mist
mitten
mom
money
monkey
month
moon
morning
mother
motion
mountain
mouth
move
muscle
music
nail
name
nation
neck
need
needle
nerve
nest
net
news
night
noise
north
nose
note
notebook
number
nut
oatmeal
observation
ocean
offer
office
oil
operation
opinion
orange
oranges
order
organization
ornament
oven
owl
owner
page
pail
pain
paint
pan
pancake
paper
parcel
parent
park
part
partner
party
passenger
paste
patch
payment
peace
pear
pen
pencil
person
pest
pet
pets
pickle
picture
pie
pies
pig
pigs
pin
pipe
pizzas
place
plane
planes
plant
plantation
plants
plastic
plate
play
playground
pleasure
plot
plough
pocket
point
poison
police
polish
pollution
popcorn
porter
position
pot
potato
powder
power
price
print
prison
process
produce
profit
property
prose
protest
pull
pump
punishment
purpose
push
quarter
quartz
queen
question
quicksand
quiet
quill
quilt
quince
quiver
rabbit
rabbits
rail
railway
rain
rainstorm
rake
range
rat
rate
ray
reaction
reading
reason
receipt
recess
record
regret
relation
religion
representative
request
respect
rest
reward
rhythm
rice
riddle
rifle
ring
rings
river
road
robin
rock
rod
roll
roof
room
root
rose
route
rub
rule
run
sack
sail
salt
sand
scale
scarecrow
scarf
scene
scent
school
science
scissors
screw
sea
seashore
seat
secretary
seed
selection
self
sense
servant
shade
shake
shame
shape
sheep
sheet
shelf
ship
shirt
shock
shoe
shoes
shop
show
side
sidewalk
sign
silk
silver
sink
sister
sisters
size
skate
skin
skirt
sky
slave
sleep
sleet
slip
slope
smash
smell
smile
smoke
snail
snails
snake
snakes
sneeze
snow
soap
society
sock
soda
sofa
son
song
songs
sort
sound
soup
space
spade
spark
spiders
sponge
spoon
spot
spring
spy
square
squirrel
stage
stamp
star
start
statement
station
steam
steel
stem
step
stew
stick
sticks
stitch
stocking
stomach
stone
stop
store
story
stove
stranger
straw
stream
street
stretch
string
structure
substance
sugar
suggestion
suit
summer
sun
support
surprise
sweater
swim
swing
system
table
tail
talk
tank
taste
tax
teaching
team
teeth
temper
tendency
tent
territory
test
texture
theory
thing
things
thought
thread
thrill
throat
throne
thumb
thunder
ticket
tiger
time
tin
title
toad
toe
toes
tomatoes
tongue
tooth
toothbrush
toothpaste
top
touch
town
toy
toys
trade
trail
train
trains
tramp
transport
tray
treatment
tree
trees
trick
trip
trouble
trousers
truck
trucks
tub
turkey
turn
twig
twist
umbrella
uncle
underwear
unit
use
vacation
value
van
vase
vegetable
veil
vein
verse
vessel
vest
view
visitor
voice
volcano
volleyball
voyage
walk
wall
war
wash
waste
watch
water
wave
waves
wax
way
wealth
weather
week
weight
wheel
whip
whistle
wilderness
wind
window
wine
wing
winter
wire
wish
woman
women
wood
wool
word
work
worm
wound
wren
wrench
wrist
writer
writing
yak
yam
yard
yarn
year
yoke
zebra
zephyr
zinc
zipper
zoo

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,7 @@
//! ```
//! use names::Generator;
//!
//! let mut generator: Generator = Default::default();
//! let mut generator = Generator::default();
//! println!("Your project is: {}", generator.next().unwrap());
//! // #=> "Your project is: rusty-nail"
//! ```
@ -52,11 +52,11 @@
//! this returns only one result:
//!
//! ```
//! use names::Generator;
//! use names::{Generator, Name};
//!
//! let adjectives = &["imaginary"];
//! let nouns = &["roll"];
//! let mut generator = Generator::new(adjectives, nouns, Default::default());
//! let mut generator = Generator::new(adjectives, nouns, Name::default());
//!
//! assert_eq!("imaginary-roll", generator.next().unwrap());
//! ```
@ -65,8 +65,10 @@ extern crate rand;
use rand::Rng;
mod adjectives;
mod nouns;
pub const ADJECTIVES: &'static [&'static str] = &include!(concat!(env!("OUT_DIR"),
"/adjectives.rs"));
pub const NOUNS: &'static [&'static str] = &include!(concat!(env!("OUT_DIR"), "/nouns.rs"));
/// A naming strategy for the `Generator`
pub enum Name {
@ -74,11 +76,13 @@ pub enum Name {
Plain,
/// This represents a naming strategy with a random number appended to the
/// end, of the form `"ADJECTIVE-NOUN-NUMBER"`
Numbered
Numbered,
}
impl Default for Name {
fn default() -> Name { Name::Plain }
fn default() -> Self {
Name::Plain
}
}
/// A random name generator which combines an adjective, a noun, and an
@ -108,11 +112,7 @@ impl<'a> Generator<'a> {
///
/// assert_eq!("sassy-clocks", generator.next().unwrap());
/// ```
pub fn new(
adjectives: &'a [&'a str],
nouns: &'a [&'a str],
naming: Name
) -> Generator<'a> {
pub fn new(adjectives: &'a [&'a str], nouns: &'a [&'a str], naming: Name) -> Self {
Generator {
adjectives: adjectives,
nouns: nouns,
@ -130,11 +130,8 @@ impl<'a> Generator<'a> {
///
/// println!("My new name is: {}", generator.next().unwrap());
/// ```
pub fn with_naming(naming: Name) -> Generator<'a> {
Generator::new(
adjectives::LIST,
nouns::LIST,
naming)
pub fn with_naming(naming: Name) -> Self {
Generator::new(ADJECTIVES, NOUNS, naming)
}
fn rand_adj(&self) -> &str {
@ -151,8 +148,8 @@ impl<'a> Generator<'a> {
}
impl<'a> Default for Generator<'a> {
fn default() -> Generator<'a> {
Generator::new(adjectives::LIST, nouns::LIST, Default::default())
fn default() -> Self {
Generator::new(ADJECTIVES, NOUNS, Name::default())
}
}

View File

@ -1,983 +0,0 @@
pub const LIST: &'static [&'static str] = &[
"able",
"account",
"achieve",
"achiever",
"acoustics",
"act",
"action",
"activity",
"actor",
"addition",
"adjustment",
"advertisement",
"advice",
"aftermath",
"afternoon",
"afterthought",
"agreement",
"air",
"airplane",
"airport",
"alarm",
"alley",
"amount",
"amusement",
"anger",
"angle",
"animal",
"answer",
"ant",
"ants",
"apparatus",
"apparel",
"apple",
"apples",
"appliance",
"approval",
"arch",
"argument",
"arithmetic",
"arm",
"army",
"art",
"attack",
"attempt",
"attention",
"attraction",
"aunt",
"authority",
"babies",
"baby",
"back",
"badge",
"bag",
"bait",
"balance",
"ball",
"balloon",
"balls",
"banana",
"band",
"base",
"baseball",
"basin",
"basket",
"basketball",
"bat",
"bath",
"battle",
"bead",
"beam",
"bean",
"bear",
"bears",
"beast",
"bed",
"bedroom",
"beds",
"bee",
"beef",
"beetle",
"beggar",
"beginner",
"behavior",
"belief",
"believe",
"bell",
"bells",
"berry",
"bike",
"bikes",
"bird",
"birds",
"birth",
"birthday",
"bit",
"bite",
"blade",
"blood",
"blow",
"board",
"boat",
"boats",
"body",
"bomb",
"bone",
"book",
"books",
"boot",
"border",
"bottle",
"boundary",
"box",
"boy",
"boys",
"brain",
"brake",
"branch",
"brass",
"bread",
"breakfast",
"breath",
"brick",
"bridge",
"brother",
"brothers",
"brush",
"bubble",
"bucket",
"building",
"bulb",
"bun",
"burn",
"burst",
"bushes",
"business",
"butter",
"button",
"cabbage",
"cable",
"cactus",
"cake",
"cakes",
"calculator",
"calendar",
"camera",
"camp",
"can",
"cannon",
"canvas",
"cap",
"caption",
"car",
"card",
"care",
"carpenter",
"carriage",
"cars",
"cart",
"cast",
"cat",
"cats",
"cattle",
"cause",
"cave",
"celery",
"cellar",
"cemetery",
"cent",
"chain",
"chair",
"chairs",
"chalk",
"chance",
"change",
"channel",
"cheese",
"cherries",
"cherry",
"chess",
"chicken",
"chickens",
"children",
"chin",
"church",
"circle",
"clam",
"class",
"clock",
"clocks",
"cloth",
"cloud",
"clouds",
"clover",
"club",
"coach",
"coal",
"coast",
"coat",
"cobweb",
"coil",
"collar",
"color",
"comb",
"comfort",
"committee",
"company",
"comparison",
"competition",
"condition",
"connection",
"control",
"cook",
"copper",
"copy",
"cord",
"cork",
"corn",
"cough",
"country",
"cover",
"cow",
"cows",
"crack",
"cracker",
"crate",
"crayon",
"cream",
"creator",
"creature",
"credit",
"crib",
"crime",
"crook",
"crow",
"crowd",
"crown",
"crush",
"cry",
"cub",
"cup",
"current",
"curtain",
"curve",
"cushion",
"dad",
"daughter",
"day",
"death",
"debt",
"decision",
"deer",
"degree",
"design",
"desire",
"desk",
"destruction",
"detail",
"development",
"digestion",
"dime",
"dinner",
"dinosaurs",
"direction",
"dirt",
"discovery",
"discussion",
"disease",
"disgust",
"distance",
"distribution",
"division",
"dock",
"doctor",
"dog",
"dogs",
"doll",
"dolls",
"donkey",
"door",
"downtown",
"drain",
"drawer",
"dress",
"drink",
"driving",
"drop",
"drug",
"drum",
"duck",
"ducks",
"dust",
"ear",
"earth",
"earthquake",
"edge",
"education",
"effect",
"egg",
"eggnog",
"eggs",
"elbow",
"end",
"engine",
"error",
"event",
"example",
"exchange",
"existence",
"expansion",
"experience",
"expert",
"eye",
"eyes",
"face",
"fact",
"fairies",
"fall",
"family",
"fan",
"fang",
"farm",
"farmer",
"father",
"faucet",
"fear",
"feast",
"feather",
"feeling",
"feet",
"fiction",
"field",
"fifth",
"fight",
"finger",
"fire",
"fireman",
"fish",
"flag",
"flame",
"flavor",
"flesh",
"flight",
"flock",
"floor",
"flower",
"flowers",
"fly",
"fog",
"fold",
"food",
"foot",
"force",
"fork",
"form",
"fowl",
"frame",
"friction",
"friend",
"friends",
"frog",
"frogs",
"front",
"fruit",
"fuel",
"furniture",
"galley",
"game",
"garden",
"gate",
"geese",
"ghost",
"giants",
"giraffe",
"girl",
"girls",
"glass",
"glove",
"glue",
"goat",
"gold",
"goldfish",
"good-bye",
"goose",
"government",
"governor",
"grade",
"grain",
"grandfather",
"grandmother",
"grape",
"grass",
"grip",
"ground",
"group",
"growth",
"guide",
"guitar",
"gun",
"hair",
"haircut",
"hall",
"hammer",
"hand",
"hands",
"harbor",
"harmony",
"hat",
"hate",
"head",
"health",
"hearing",
"heart",
"heat",
"help",
"hen",
"hill",
"history",
"hobbies",
"hole",
"holiday",
"home",
"honey",
"hook",
"hope",
"horn",
"horse",
"horses",
"hose",
"hospital",
"hot",
"hour",
"house",
"houses",
"humor",
"hydrant",
"ice",
"icicle",
"idea",
"impulse",
"income",
"increase",
"industry",
"ink",
"insect",
"instrument",
"insurance",
"interest",
"invention",
"iron",
"island",
"jail",
"jam",
"jar",
"jeans",
"jelly",
"jellyfish",
"jewel",
"join",
"joke",
"journey",
"judge",
"juice",
"jump",
"kettle",
"key",
"kick",
"kiss",
"kite",
"kitten",
"kittens",
"kitty",
"knee",
"knife",
"knot",
"knowledge",
"laborer",
"lace",
"ladybug",
"lake",
"lamp",
"land",
"language",
"laugh",
"lawyer",
"lead",
"leaf",
"learning",
"leather",
"leg",
"legs",
"letter",
"letters",
"lettuce",
"level",
"library",
"lift",
"light",
"limit",
"line",
"linen",
"lip",
"liquid",
"list",
"lizards",
"loaf",
"lock",
"locket",
"look",
"loss",
"love",
"low",
"lumber",
"lunch",
"lunchroom",
"machine",
"magic",
"maid",
"mailbox",
"man",
"manager",
"map",
"marble",
"mark",
"market",
"mask",
"mass",
"match",
"meal",
"measure",
"meat",
"meeting",
"memory",
"men",
"metal",
"mice",
"middle",
"milk",
"mind",
"mine",
"minister",
"mint",
"minute",
"mist",
"mitten",
"mom",
"money",
"monkey",
"month",
"moon",
"morning",
"mother",
"motion",
"mountain",
"mouth",
"move",
"muscle",
"music",
"nail",
"name",
"nation",
"neck",
"need",
"needle",
"nerve",
"nest",
"net",
"news",
"night",
"noise",
"north",
"nose",
"note",
"notebook",
"number",
"nut",
"oatmeal",
"observation",
"ocean",
"offer",
"office",
"oil",
"operation",
"opinion",
"orange",
"oranges",
"order",
"organization",
"ornament",
"oven",
"owl",
"owner",
"page",
"pail",
"pain",
"paint",
"pan",
"pancake",
"paper",
"parcel",
"parent",
"park",
"part",
"partner",
"party",
"passenger",
"paste",
"patch",
"payment",
"peace",
"pear",
"pen",
"pencil",
"person",
"pest",
"pet",
"pets",
"pickle",
"picture",
"pie",
"pies",
"pig",
"pigs",
"pin",
"pipe",
"pizzas",
"place",
"plane",
"planes",
"plant",
"plantation",
"plants",
"plastic",
"plate",
"play",
"playground",
"pleasure",
"plot",
"plough",
"pocket",
"point",
"poison",
"police",
"polish",
"pollution",
"popcorn",
"porter",
"position",
"pot",
"potato",
"powder",
"power",
"price",
"print",
"prison",
"process",
"produce",
"profit",
"property",
"prose",
"protest",
"pull",
"pump",
"punishment",
"purpose",
"push",
"quarter",
"quartz",
"queen",
"question",
"quicksand",
"quiet",
"quill",
"quilt",
"quince",
"quiver",
"rabbit",
"rabbits",
"rail",
"railway",
"rain",
"rainstorm",
"rake",
"range",
"rat",
"rate",
"ray",
"reaction",
"reading",
"reason",
"receipt",
"recess",
"record",
"regret",
"relation",
"religion",
"representative",
"request",
"respect",
"rest",
"reward",
"rhythm",
"rice",
"riddle",
"rifle",
"ring",
"rings",
"river",
"road",
"robin",
"rock",
"rod",
"roll",
"roof",
"room",
"root",
"rose",
"route",
"rub",
"rule",
"run",
"sack",
"sail",
"salt",
"sand",
"scale",
"scarecrow",
"scarf",
"scene",
"scent",
"school",
"science",
"scissors",
"screw",
"sea",
"seashore",
"seat",
"secretary",
"seed",
"selection",
"self",
"sense",
"servant",
"shade",
"shake",
"shame",
"shape",
"sheep",
"sheet",
"shelf",
"ship",
"shirt",
"shock",
"shoe",
"shoes",
"shop",
"show",
"side",
"sidewalk",
"sign",
"silk",
"silver",
"sink",
"sister",
"sisters",
"size",
"skate",
"skin",
"skirt",
"sky",
"slave",
"sleep",
"sleet",
"slip",
"slope",
"smash",
"smell",
"smile",
"smoke",
"snail",
"snails",
"snake",
"snakes",
"sneeze",
"snow",
"soap",
"society",
"sock",
"soda",
"sofa",
"son",
"song",
"songs",
"sort",
"sound",
"soup",
"space",
"spade",
"spark",
"spiders",
"sponge",
"spoon",
"spot",
"spring",
"spy",
"square",
"squirrel",
"stage",
"stamp",
"star",
"start",
"statement",
"station",
"steam",
"steel",
"stem",
"step",
"stew",
"stick",
"sticks",
"stitch",
"stocking",
"stomach",
"stone",
"stop",
"store",
"story",
"stove",
"stranger",
"straw",
"stream",
"street",
"stretch",
"string",
"structure",
"substance",
"sugar",
"suggestion",
"suit",
"summer",
"sun",
"support",
"surprise",
"sweater",
"swim",
"swing",
"system",
"table",
"tail",
"talk",
"tank",
"taste",
"tax",
"teaching",
"team",
"teeth",
"temper",
"tendency",
"tent",
"territory",
"test",
"texture",
"theory",
"thing",
"things",
"thought",
"thread",
"thrill",
"throat",
"throne",
"thumb",
"thunder",
"ticket",
"tiger",
"time",
"tin",
"title",
"toad",
"toe",
"toes",
"tomatoes",
"tongue",
"tooth",
"toothbrush",
"toothpaste",
"top",
"touch",
"town",
"toy",
"toys",
"trade",
"trail",
"train",
"trains",
"tramp",
"transport",
"tray",
"treatment",
"tree",
"trees",
"trick",
"trip",
"trouble",
"trousers",
"truck",
"trucks",
"tub",
"turkey",
"turn",
"twig",
"twist",
"umbrella",
"uncle",
"underwear",
"unit",
"use",
"vacation",
"value",
"van",
"vase",
"vegetable",
"veil",
"vein",
"verse",
"vessel",
"vest",
"view",
"visitor",
"voice",
"volcano",
"volleyball",
"voyage",
"walk",
"wall",
"war",
"wash",
"waste",
"watch",
"water",
"wave",
"waves",
"wax",
"way",
"wealth",
"weather",
"week",
"weight",
"wheel",
"whip",
"whistle",
"wilderness",
"wind",
"window",
"wine",
"wing",
"winter",
"wire",
"wish",
"woman",
"women",
"wood",
"wool",
"word",
"work",
"worm",
"wound",
"wren",
"wrench",
"wrist",
"writer",
"writing",
"yak",
"yam",
"yard",
"yarn",
"year",
"yoke",
"zebra",
"zephyr",
"zinc",
"zipper",
"zoo",
];