From f3429083025c3c9765e4e82107c96b66186f378f Mon Sep 17 00:00:00 2001 From: Jesse McDonald Date: Sun, 9 Aug 2015 18:49:57 -0500 Subject: [PATCH] Add solutions for problems 33-42. --- Euler.hs | 25 ++++++++++++++++++++++--- Problem033.hs | 30 ++++++++++++++++++++++++++++++ Problem034.hs | 10 ++++++++++ Problem035.hs | 23 +++++++++++++++++++++++ Problem036.hs | 7 +++++++ Problem037.hs | 12 ++++++++++++ Problem038.hs | 26 ++++++++++++++++++++++++++ Problem039.hs | 18 ++++++++++++++++++ Problem040.hs | 21 +++++++++++++++++++++ Problem041.hs | 15 +++++++++++++++ Problem042.hs | 27 +++++++++++++++++++++++++++ p042_words.txt | 1 + 12 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 Problem033.hs create mode 100644 Problem034.hs create mode 100644 Problem035.hs create mode 100644 Problem036.hs create mode 100644 Problem037.hs create mode 100644 Problem038.hs create mode 100644 Problem039.hs create mode 100644 Problem040.hs create mode 100644 Problem041.hs create mode 100644 Problem042.hs create mode 100644 p042_words.txt diff --git a/Euler.hs b/Euler.hs index 8d9f97e..4d9f0bb 100644 --- a/Euler.hs +++ b/Euler.hs @@ -9,6 +9,7 @@ module Euler , whenM , unlessM , primesTo + , isPrimeArray , primes , zipArraysWith , RangeIx(..) @@ -17,7 +18,10 @@ module Euler , toDecimal , fromDecimal , toDigits + , toDigitsBase , fromDigits + , fromDigitsBase + , isPalindrome , module Control.Applicative , module Control.Arrow , module Control.Monad @@ -62,6 +66,12 @@ primesTo n = LST.runST $ do (m:) <$> primesFrom (m+1) primesFrom 2 +isPrimeArray n = runSTUArray $ do + isPrime <- newArray (2, n) 1 :: ST s (STUArray s Integer Word8) + forM_ [2..n] $ \m -> whenM ((/= 0) <$> readArray isPrime m) $ do + forM_ [2*m,3*m..n] $ \i -> writeArray isPrime i 0 + return isPrime + primes :: [Integer] primes = let go (!p:xs) = p : go [ x | x <- xs, x `mod` p /= 0 ] in go [2..] @@ -117,8 +127,17 @@ instance Show Decimal where ++ "(" ++ concat (map show rs) ++ ")" toDigits :: (Integral a, Integral b) => a -> [b] -toDigits = reverse . unfoldr (\x -> - if x == 0 then Nothing else Just (first fromIntegral $ swap (x `divMod` 10))) +toDigits = toDigitsBase 10 + +toDigitsBase :: (Integral a, Integral b) => a -> a -> [b] +toDigitsBase n = reverse . unfoldr (\x -> + if x == 0 then Nothing else Just (first fromIntegral $ swap (x `divMod` n))) fromDigits :: (Integral a, Integral b) => [a] -> b -fromDigits = foldl' (\a b -> 10 * a + fromIntegral b) 0 +fromDigits = fromDigitsBase 10 + +fromDigitsBase :: (Integral a, Integral b) => b -> [a] -> b +fromDigitsBase n = foldl' (\a b -> n * a + fromIntegral b) 0 + +isPalindrome :: Eq a => [a] -> Bool +isPalindrome xs = xs == reverse xs diff --git a/Problem033.hs b/Problem033.hs new file mode 100644 index 0000000..516ea98 --- /dev/null +++ b/Problem033.hs @@ -0,0 +1,30 @@ +-- The fraction 49/98 is a curious fraction, as an inexperienced mathematician +-- in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which +-- is correct, is obtained by cancelling the 9s. +-- +-- We shall consider fractions like, 30/50 = 3/5, to be trivial examples. +-- +-- There are exactly four non-trivial examples of this type of fraction, less +-- than one in value, and containing two digits in the numerator and +-- denominator. +-- +-- If the product of these four fractions is given in its lowest common terms, +-- find the value of the denominator. + +import Euler + +main = print $ denominator $ product $ + [ n + | a <- [1..9] + , b <- [1..9] + , c <- [1..9] + , d <- [1..9] + , let x = 10 * a + b + , let y = 10 * c + d + , let n = x % y + , n < 1 + , (a == c && b % d == n) || + (a == d && b % c == n) || + (b == c && a % d == n) || + (b == d && a % c == n) + ] diff --git a/Problem034.hs b/Problem034.hs new file mode 100644 index 0000000..499b6d3 --- /dev/null +++ b/Problem034.hs @@ -0,0 +1,10 @@ +-- Find the sum of all numbers which are equal to the sum of the factorial of their digits. +-- +-- Note: as 1! = 1 and 2! = 2 are not sums they are not included. + +import Euler + +factorial n = product [1..n] +factSum n = sum $ map factorial $ toDigits n + +main = print $ sum $ filter (\n -> n == factSum n) [10..2540160] diff --git a/Problem035.hs b/Problem035.hs new file mode 100644 index 0000000..189b7d0 --- /dev/null +++ b/Problem035.hs @@ -0,0 +1,23 @@ +-- The number, 197, is called a circular prime because all rotations of the +-- digits: 197, 971, and 719, are themselves prime. +-- +-- There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, +-- 71, 73, 79, and 97. +-- +-- How many circular primes are there below one million? + +import Euler +import Data.Array.Unboxed +import Data.Array.ST + +rotations n = map (fromDigits . take (length digits)) + $ take (length digits) + $ tails (cycle digits) + where digits = toDigits n + +main = do + let limit = 1000000 - 1 + let isPrimeArr = isPrimeArray limit + let isPrime n = (isPrimeArr!n) /= 0 + let circular n = all isPrime $ rotations n + print $ length $ filter circular [2..limit] diff --git a/Problem036.hs b/Problem036.hs new file mode 100644 index 0000000..5be6356 --- /dev/null +++ b/Problem036.hs @@ -0,0 +1,7 @@ +-- Find the sum of all numbers, less than one million, which are palindromic in +-- base 10 and base 2. + +import Euler + +main = print $ sum $ [ n | n <- [1..999999], isPalindrome (toDigits n), + isPalindrome (toDigitsBase 2 n) ] diff --git a/Problem037.hs b/Problem037.hs new file mode 100644 index 0000000..8a26f30 --- /dev/null +++ b/Problem037.hs @@ -0,0 +1,12 @@ +-- Find the sum of the only eleven primes that are both truncatable from left +-- to right and right to left. + +import Euler +import Data.Array.Unboxed + +truncations n = map fromDigits $ filter (not . null) $ inits (toDigits n) ++ tails (toDigits n) + +isPrimeArr = isPrimeArray 1000000 +isPrime n = n >= 2 && isPrimeArr!n /= 0 + +main = print $ sum $ take 11 $ filter (all isPrime . truncations) [11..] diff --git a/Problem038.hs b/Problem038.hs new file mode 100644 index 0000000..97a5aed --- /dev/null +++ b/Problem038.hs @@ -0,0 +1,26 @@ +-- Take the number 192 and multiply it by each of 1, 2, and 3: +-- +-- 192 × 1 = 192 +-- 192 × 2 = 384 +-- 192 × 3 = 576 +-- +-- By concatenating each product we get the 1 to 9 pandigital, 192384576. We +-- will call 192384576 the concatenated product of 192 and (1,2,3). +-- +-- What is the largest 1 to 9 pandigital 9-digit number that can be formed as +-- the concatenated product of an integer with (1,2, ... , n) where n > 1? + +import Euler + +pandigital n = sort (toDigits n) == [1..9] + +concatProduct n = fromDigits $ concat $ zipWith const products upTo9 + where + products = map (toDigits . (n*)) [1..] + lengths = map length products + totals = scanl1 (+) lengths + upTo9 = takeWhile (<= 9) totals + +main = print $ maximum $ [ n | n <- map concatProduct [1..9999] + , n >= 100000000 + , pandigital n ] diff --git a/Problem039.hs b/Problem039.hs new file mode 100644 index 0000000..b6f21f3 --- /dev/null +++ b/Problem039.hs @@ -0,0 +1,18 @@ +-- If p is the perimeter of a right angle triangle with integral length sides, +-- {a,b,c}, there are exactly three solutions for p = 120. +-- +-- {20,48,52}, {24,45,51}, {30,40,50} +-- +-- For which value of p ≤ 1000, is the number of solutions maximised? + +import Euler + +solutions :: Int -> [(Int, Int, Int)] +solutions p = do + a <- [1 .. p `div` 2] + b <- [a .. p - 2 * a] + let c = p - (a + b) + guard $ a^2 + b^2 == c^2 + return (a, b, c) + +main = print $ maximumBy (compare `on` snd) $ map (id &&& length . solutions) [3..1000] diff --git a/Problem040.hs b/Problem040.hs new file mode 100644 index 0000000..ffca18b --- /dev/null +++ b/Problem040.hs @@ -0,0 +1,21 @@ +-- An irrational decimal fraction is created by concatenating the positive +-- integers: +-- +-- 0.123456789101112131415161718192021... +-- +-- It can be seen that the 12th digit of the fractional part is 1. +-- +-- If d[n] represents the nth digit of the fractional part, find the value of +-- the following expression. +-- +-- d[1] × d[10] × d[100] × d[1000] × d[10000] × d[100000] × d[1000000] + +import Euler + +nthDigit = go 1 + where + go m n = if n < m*10^m + then toDigits (n `div` m) !! (n `mod` m) + else go (m + 1) (n + 10^m) + +main = print $ product $ map (nthDigit . (10^)) [0..6] diff --git a/Problem041.hs b/Problem041.hs new file mode 100644 index 0000000..8893999 --- /dev/null +++ b/Problem041.hs @@ -0,0 +1,15 @@ +-- We shall say that an n-digit number is pandigital if it makes use of all the +-- digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is +-- also prime. +-- +-- What is the largest n-digit pandigital prime that exists? + +import Euler + +pandigitals = map fromDigits $ go 9 + where go 0 = []; go n = reverse (sort (permutations [1..n])) ++ go (n-1) + +isPrime n = not $ any (\p -> n `mod` p == 0) $ + takeWhile (<= floor (sqrt (fromIntegral n))) primes + +main = print $ head $ filter isPrime pandigitals diff --git a/Problem042.hs b/Problem042.hs new file mode 100644 index 0000000..1cfd316 --- /dev/null +++ b/Problem042.hs @@ -0,0 +1,27 @@ +-- The nth term of the sequence of triangle numbers is given by, t[n] = ½n(n+1); +-- so the first ten triangle numbers are: +-- +-- 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... +-- +-- By converting each letter in a word to a number corresponding to its +-- alphabetical position and adding these values we form a word value. For +-- example, the word value for SKY is 19 + 11 + 25 = 55 = t[10]. If the word +-- value is a triangle number then we shall call the word a triangle word. +-- +-- Using words.txt, a 16K text file containing nearly two-thousand common +-- English words, how many are triangle words? + +import Euler +import System.IO + +uncomma :: String -> [String] +uncomma = filter ((/= ',') . head) . groupBy (\a b -> (a == ',') == (b == ',')) + +wordValue :: [Char] -> Int +wordValue = sum . map (\c -> 1 + (fromEnum c - fromEnum 'A')) + +isTriangle n = let m = floor (sqrt $ fromIntegral $ 2 * n) in m * (m + 1) == 2 * n + +main = do + words <- sort . uncomma . filter (not . (`elem` "\"\r\n")) <$> readFile "p042_words.txt" + print $ length $ filter isTriangle $ map wordValue words diff --git a/p042_words.txt b/p042_words.txt new file mode 100644 index 0000000..7177624 --- /dev/null +++ b/p042_words.txt @@ -0,0 +1 @@ +"A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY","ACCORDING","ACCOUNT","ACHIEVE","ACHIEVEMENT","ACID","ACQUIRE","ACROSS","ACT","ACTION","ACTIVE","ACTIVITY","ACTUAL","ACTUALLY","ADD","ADDITION","ADDITIONAL","ADDRESS","ADMINISTRATION","ADMIT","ADOPT","ADULT","ADVANCE","ADVANTAGE","ADVICE","ADVISE","AFFAIR","AFFECT","AFFORD","AFRAID","AFTER","AFTERNOON","AFTERWARDS","AGAIN","AGAINST","AGE","AGENCY","AGENT","AGO","AGREE","AGREEMENT","AHEAD","AID","AIM","AIR","AIRCRAFT","ALL","ALLOW","ALMOST","ALONE","ALONG","ALREADY","ALRIGHT","ALSO","ALTERNATIVE","ALTHOUGH","ALWAYS","AMONG","AMONGST","AMOUNT","AN","ANALYSIS","ANCIENT","AND","ANIMAL","ANNOUNCE","ANNUAL","ANOTHER","ANSWER","ANY","ANYBODY","ANYONE","ANYTHING","ANYWAY","APART","APPARENT","APPARENTLY","APPEAL","APPEAR","APPEARANCE","APPLICATION","APPLY","APPOINT","APPOINTMENT","APPROACH","APPROPRIATE","APPROVE","AREA","ARGUE","ARGUMENT","ARISE","ARM","ARMY","AROUND","ARRANGE","ARRANGEMENT","ARRIVE","ART","ARTICLE","ARTIST","AS","ASK","ASPECT","ASSEMBLY","ASSESS","ASSESSMENT","ASSET","ASSOCIATE","ASSOCIATION","ASSUME","ASSUMPTION","AT","ATMOSPHERE","ATTACH","ATTACK","ATTEMPT","ATTEND","ATTENTION","ATTITUDE","ATTRACT","ATTRACTIVE","AUDIENCE","AUTHOR","AUTHORITY","AVAILABLE","AVERAGE","AVOID","AWARD","AWARE","AWAY","AYE","BABY","BACK","BACKGROUND","BAD","BAG","BALANCE","BALL","BAND","BANK","BAR","BASE","BASIC","BASIS","BATTLE","BE","BEAR","BEAT","BEAUTIFUL","BECAUSE","BECOME","BED","BEDROOM","BEFORE","BEGIN","BEGINNING","BEHAVIOUR","BEHIND","BELIEF","BELIEVE","BELONG","BELOW","BENEATH","BENEFIT","BESIDE","BEST","BETTER","BETWEEN","BEYOND","BIG","BILL","BIND","BIRD","BIRTH","BIT","BLACK","BLOCK","BLOOD","BLOODY","BLOW","BLUE","BOARD","BOAT","BODY","BONE","BOOK","BORDER","BOTH","BOTTLE","BOTTOM","BOX","BOY","BRAIN","BRANCH","BREAK","BREATH","BRIDGE","BRIEF","BRIGHT","BRING","BROAD","BROTHER","BUDGET","BUILD","BUILDING","BURN","BUS","BUSINESS","BUSY","BUT","BUY","BY","CABINET","CALL","CAMPAIGN","CAN","CANDIDATE","CAPABLE","CAPACITY","CAPITAL","CAR","CARD","CARE","CAREER","CAREFUL","CAREFULLY","CARRY","CASE","CASH","CAT","CATCH","CATEGORY","CAUSE","CELL","CENTRAL","CENTRE","CENTURY","CERTAIN","CERTAINLY","CHAIN","CHAIR","CHAIRMAN","CHALLENGE","CHANCE","CHANGE","CHANNEL","CHAPTER","CHARACTER","CHARACTERISTIC","CHARGE","CHEAP","CHECK","CHEMICAL","CHIEF","CHILD","CHOICE","CHOOSE","CHURCH","CIRCLE","CIRCUMSTANCE","CITIZEN","CITY","CIVIL","CLAIM","CLASS","CLEAN","CLEAR","CLEARLY","CLIENT","CLIMB","CLOSE","CLOSELY","CLOTHES","CLUB","COAL","CODE","COFFEE","COLD","COLLEAGUE","COLLECT","COLLECTION","COLLEGE","COLOUR","COMBINATION","COMBINE","COME","COMMENT","COMMERCIAL","COMMISSION","COMMIT","COMMITMENT","COMMITTEE","COMMON","COMMUNICATION","COMMUNITY","COMPANY","COMPARE","COMPARISON","COMPETITION","COMPLETE","COMPLETELY","COMPLEX","COMPONENT","COMPUTER","CONCENTRATE","CONCENTRATION","CONCEPT","CONCERN","CONCERNED","CONCLUDE","CONCLUSION","CONDITION","CONDUCT","CONFERENCE","CONFIDENCE","CONFIRM","CONFLICT","CONGRESS","CONNECT","CONNECTION","CONSEQUENCE","CONSERVATIVE","CONSIDER","CONSIDERABLE","CONSIDERATION","CONSIST","CONSTANT","CONSTRUCTION","CONSUMER","CONTACT","CONTAIN","CONTENT","CONTEXT","CONTINUE","CONTRACT","CONTRAST","CONTRIBUTE","CONTRIBUTION","CONTROL","CONVENTION","CONVERSATION","COPY","CORNER","CORPORATE","CORRECT","COS","COST","COULD","COUNCIL","COUNT","COUNTRY","COUNTY","COUPLE","COURSE","COURT","COVER","CREATE","CREATION","CREDIT","CRIME","CRIMINAL","CRISIS","CRITERION","CRITICAL","CRITICISM","CROSS","CROWD","CRY","CULTURAL","CULTURE","CUP","CURRENT","CURRENTLY","CURRICULUM","CUSTOMER","CUT","DAMAGE","DANGER","DANGEROUS","DARK","DATA","DATE","DAUGHTER","DAY","DEAD","DEAL","DEATH","DEBATE","DEBT","DECADE","DECIDE","DECISION","DECLARE","DEEP","DEFENCE","DEFENDANT","DEFINE","DEFINITION","DEGREE","DELIVER","DEMAND","DEMOCRATIC","DEMONSTRATE","DENY","DEPARTMENT","DEPEND","DEPUTY","DERIVE","DESCRIBE","DESCRIPTION","DESIGN","DESIRE","DESK","DESPITE","DESTROY","DETAIL","DETAILED","DETERMINE","DEVELOP","DEVELOPMENT","DEVICE","DIE","DIFFERENCE","DIFFERENT","DIFFICULT","DIFFICULTY","DINNER","DIRECT","DIRECTION","DIRECTLY","DIRECTOR","DISAPPEAR","DISCIPLINE","DISCOVER","DISCUSS","DISCUSSION","DISEASE","DISPLAY","DISTANCE","DISTINCTION","DISTRIBUTION","DISTRICT","DIVIDE","DIVISION","DO","DOCTOR","DOCUMENT","DOG","DOMESTIC","DOOR","DOUBLE","DOUBT","DOWN","DRAW","DRAWING","DREAM","DRESS","DRINK","DRIVE","DRIVER","DROP","DRUG","DRY","DUE","DURING","DUTY","EACH","EAR","EARLY","EARN","EARTH","EASILY","EAST","EASY","EAT","ECONOMIC","ECONOMY","EDGE","EDITOR","EDUCATION","EDUCATIONAL","EFFECT","EFFECTIVE","EFFECTIVELY","EFFORT","EGG","EITHER","ELDERLY","ELECTION","ELEMENT","ELSE","ELSEWHERE","EMERGE","EMPHASIS","EMPLOY","EMPLOYEE","EMPLOYER","EMPLOYMENT","EMPTY","ENABLE","ENCOURAGE","END","ENEMY","ENERGY","ENGINE","ENGINEERING","ENJOY","ENOUGH","ENSURE","ENTER","ENTERPRISE","ENTIRE","ENTIRELY","ENTITLE","ENTRY","ENVIRONMENT","ENVIRONMENTAL","EQUAL","EQUALLY","EQUIPMENT","ERROR","ESCAPE","ESPECIALLY","ESSENTIAL","ESTABLISH","ESTABLISHMENT","ESTATE","ESTIMATE","EVEN","EVENING","EVENT","EVENTUALLY","EVER","EVERY","EVERYBODY","EVERYONE","EVERYTHING","EVIDENCE","EXACTLY","EXAMINATION","EXAMINE","EXAMPLE","EXCELLENT","EXCEPT","EXCHANGE","EXECUTIVE","EXERCISE","EXHIBITION","EXIST","EXISTENCE","EXISTING","EXPECT","EXPECTATION","EXPENDITURE","EXPENSE","EXPENSIVE","EXPERIENCE","EXPERIMENT","EXPERT","EXPLAIN","EXPLANATION","EXPLORE","EXPRESS","EXPRESSION","EXTEND","EXTENT","EXTERNAL","EXTRA","EXTREMELY","EYE","FACE","FACILITY","FACT","FACTOR","FACTORY","FAIL","FAILURE","FAIR","FAIRLY","FAITH","FALL","FAMILIAR","FAMILY","FAMOUS","FAR","FARM","FARMER","FASHION","FAST","FATHER","FAVOUR","FEAR","FEATURE","FEE","FEEL","FEELING","FEMALE","FEW","FIELD","FIGHT","FIGURE","FILE","FILL","FILM","FINAL","FINALLY","FINANCE","FINANCIAL","FIND","FINDING","FINE","FINGER","FINISH","FIRE","FIRM","FIRST","FISH","FIT","FIX","FLAT","FLIGHT","FLOOR","FLOW","FLOWER","FLY","FOCUS","FOLLOW","FOLLOWING","FOOD","FOOT","FOOTBALL","FOR","FORCE","FOREIGN","FOREST","FORGET","FORM","FORMAL","FORMER","FORWARD","FOUNDATION","FREE","FREEDOM","FREQUENTLY","FRESH","FRIEND","FROM","FRONT","FRUIT","FUEL","FULL","FULLY","FUNCTION","FUND","FUNNY","FURTHER","FUTURE","GAIN","GAME","GARDEN","GAS","GATE","GATHER","GENERAL","GENERALLY","GENERATE","GENERATION","GENTLEMAN","GET","GIRL","GIVE","GLASS","GO","GOAL","GOD","GOLD","GOOD","GOVERNMENT","GRANT","GREAT","GREEN","GREY","GROUND","GROUP","GROW","GROWING","GROWTH","GUEST","GUIDE","GUN","HAIR","HALF","HALL","HAND","HANDLE","HANG","HAPPEN","HAPPY","HARD","HARDLY","HATE","HAVE","HE","HEAD","HEALTH","HEAR","HEART","HEAT","HEAVY","HELL","HELP","HENCE","HER","HERE","HERSELF","HIDE","HIGH","HIGHLY","HILL","HIM","HIMSELF","HIS","HISTORICAL","HISTORY","HIT","HOLD","HOLE","HOLIDAY","HOME","HOPE","HORSE","HOSPITAL","HOT","HOTEL","HOUR","HOUSE","HOUSEHOLD","HOUSING","HOW","HOWEVER","HUGE","HUMAN","HURT","HUSBAND","I","IDEA","IDENTIFY","IF","IGNORE","ILLUSTRATE","IMAGE","IMAGINE","IMMEDIATE","IMMEDIATELY","IMPACT","IMPLICATION","IMPLY","IMPORTANCE","IMPORTANT","IMPOSE","IMPOSSIBLE","IMPRESSION","IMPROVE","IMPROVEMENT","IN","INCIDENT","INCLUDE","INCLUDING","INCOME","INCREASE","INCREASED","INCREASINGLY","INDEED","INDEPENDENT","INDEX","INDICATE","INDIVIDUAL","INDUSTRIAL","INDUSTRY","INFLUENCE","INFORM","INFORMATION","INITIAL","INITIATIVE","INJURY","INSIDE","INSIST","INSTANCE","INSTEAD","INSTITUTE","INSTITUTION","INSTRUCTION","INSTRUMENT","INSURANCE","INTEND","INTENTION","INTEREST","INTERESTED","INTERESTING","INTERNAL","INTERNATIONAL","INTERPRETATION","INTERVIEW","INTO","INTRODUCE","INTRODUCTION","INVESTIGATE","INVESTIGATION","INVESTMENT","INVITE","INVOLVE","IRON","IS","ISLAND","ISSUE","IT","ITEM","ITS","ITSELF","JOB","JOIN","JOINT","JOURNEY","JUDGE","JUMP","JUST","JUSTICE","KEEP","KEY","KID","KILL","KIND","KING","KITCHEN","KNEE","KNOW","KNOWLEDGE","LABOUR","LACK","LADY","LAND","LANGUAGE","LARGE","LARGELY","LAST","LATE","LATER","LATTER","LAUGH","LAUNCH","LAW","LAWYER","LAY","LEAD","LEADER","LEADERSHIP","LEADING","LEAF","LEAGUE","LEAN","LEARN","LEAST","LEAVE","LEFT","LEG","LEGAL","LEGISLATION","LENGTH","LESS","LET","LETTER","LEVEL","LIABILITY","LIBERAL","LIBRARY","LIE","LIFE","LIFT","LIGHT","LIKE","LIKELY","LIMIT","LIMITED","LINE","LINK","LIP","LIST","LISTEN","LITERATURE","LITTLE","LIVE","LIVING","LOAN","LOCAL","LOCATION","LONG","LOOK","LORD","LOSE","LOSS","LOT","LOVE","LOVELY","LOW","LUNCH","MACHINE","MAGAZINE","MAIN","MAINLY","MAINTAIN","MAJOR","MAJORITY","MAKE","MALE","MAN","MANAGE","MANAGEMENT","MANAGER","MANNER","MANY","MAP","MARK","MARKET","MARRIAGE","MARRIED","MARRY","MASS","MASTER","MATCH","MATERIAL","MATTER","MAY","MAYBE","ME","MEAL","MEAN","MEANING","MEANS","MEANWHILE","MEASURE","MECHANISM","MEDIA","MEDICAL","MEET","MEETING","MEMBER","MEMBERSHIP","MEMORY","MENTAL","MENTION","MERELY","MESSAGE","METAL","METHOD","MIDDLE","MIGHT","MILE","MILITARY","MILK","MIND","MINE","MINISTER","MINISTRY","MINUTE","MISS","MISTAKE","MODEL","MODERN","MODULE","MOMENT","MONEY","MONTH","MORE","MORNING","MOST","MOTHER","MOTION","MOTOR","MOUNTAIN","MOUTH","MOVE","MOVEMENT","MUCH","MURDER","MUSEUM","MUSIC","MUST","MY","MYSELF","NAME","NARROW","NATION","NATIONAL","NATURAL","NATURE","NEAR","NEARLY","NECESSARILY","NECESSARY","NECK","NEED","NEGOTIATION","NEIGHBOUR","NEITHER","NETWORK","NEVER","NEVERTHELESS","NEW","NEWS","NEWSPAPER","NEXT","NICE","NIGHT","NO","NOBODY","NOD","NOISE","NONE","NOR","NORMAL","NORMALLY","NORTH","NORTHERN","NOSE","NOT","NOTE","NOTHING","NOTICE","NOTION","NOW","NUCLEAR","NUMBER","NURSE","OBJECT","OBJECTIVE","OBSERVATION","OBSERVE","OBTAIN","OBVIOUS","OBVIOUSLY","OCCASION","OCCUR","ODD","OF","OFF","OFFENCE","OFFER","OFFICE","OFFICER","OFFICIAL","OFTEN","OIL","OKAY","OLD","ON","ONCE","ONE","ONLY","ONTO","OPEN","OPERATE","OPERATION","OPINION","OPPORTUNITY","OPPOSITION","OPTION","OR","ORDER","ORDINARY","ORGANISATION","ORGANISE","ORGANIZATION","ORIGIN","ORIGINAL","OTHER","OTHERWISE","OUGHT","OUR","OURSELVES","OUT","OUTCOME","OUTPUT","OUTSIDE","OVER","OVERALL","OWN","OWNER","PACKAGE","PAGE","PAIN","PAINT","PAINTING","PAIR","PANEL","PAPER","PARENT","PARK","PARLIAMENT","PART","PARTICULAR","PARTICULARLY","PARTLY","PARTNER","PARTY","PASS","PASSAGE","PAST","PATH","PATIENT","PATTERN","PAY","PAYMENT","PEACE","PENSION","PEOPLE","PER","PERCENT","PERFECT","PERFORM","PERFORMANCE","PERHAPS","PERIOD","PERMANENT","PERSON","PERSONAL","PERSUADE","PHASE","PHONE","PHOTOGRAPH","PHYSICAL","PICK","PICTURE","PIECE","PLACE","PLAN","PLANNING","PLANT","PLASTIC","PLATE","PLAY","PLAYER","PLEASE","PLEASURE","PLENTY","PLUS","POCKET","POINT","POLICE","POLICY","POLITICAL","POLITICS","POOL","POOR","POPULAR","POPULATION","POSITION","POSITIVE","POSSIBILITY","POSSIBLE","POSSIBLY","POST","POTENTIAL","POUND","POWER","POWERFUL","PRACTICAL","PRACTICE","PREFER","PREPARE","PRESENCE","PRESENT","PRESIDENT","PRESS","PRESSURE","PRETTY","PREVENT","PREVIOUS","PREVIOUSLY","PRICE","PRIMARY","PRIME","PRINCIPLE","PRIORITY","PRISON","PRISONER","PRIVATE","PROBABLY","PROBLEM","PROCEDURE","PROCESS","PRODUCE","PRODUCT","PRODUCTION","PROFESSIONAL","PROFIT","PROGRAM","PROGRAMME","PROGRESS","PROJECT","PROMISE","PROMOTE","PROPER","PROPERLY","PROPERTY","PROPORTION","PROPOSE","PROPOSAL","PROSPECT","PROTECT","PROTECTION","PROVE","PROVIDE","PROVIDED","PROVISION","PUB","PUBLIC","PUBLICATION","PUBLISH","PULL","PUPIL","PURPOSE","PUSH","PUT","QUALITY","QUARTER","QUESTION","QUICK","QUICKLY","QUIET","QUITE","RACE","RADIO","RAILWAY","RAIN","RAISE","RANGE","RAPIDLY","RARE","RATE","RATHER","REACH","REACTION","READ","READER","READING","READY","REAL","REALISE","REALITY","REALIZE","REALLY","REASON","REASONABLE","RECALL","RECEIVE","RECENT","RECENTLY","RECOGNISE","RECOGNITION","RECOGNIZE","RECOMMEND","RECORD","RECOVER","RED","REDUCE","REDUCTION","REFER","REFERENCE","REFLECT","REFORM","REFUSE","REGARD","REGION","REGIONAL","REGULAR","REGULATION","REJECT","RELATE","RELATION","RELATIONSHIP","RELATIVE","RELATIVELY","RELEASE","RELEVANT","RELIEF","RELIGION","RELIGIOUS","RELY","REMAIN","REMEMBER","REMIND","REMOVE","REPEAT","REPLACE","REPLY","REPORT","REPRESENT","REPRESENTATION","REPRESENTATIVE","REQUEST","REQUIRE","REQUIREMENT","RESEARCH","RESOURCE","RESPECT","RESPOND","RESPONSE","RESPONSIBILITY","RESPONSIBLE","REST","RESTAURANT","RESULT","RETAIN","RETURN","REVEAL","REVENUE","REVIEW","REVOLUTION","RICH","RIDE","RIGHT","RING","RISE","RISK","RIVER","ROAD","ROCK","ROLE","ROLL","ROOF","ROOM","ROUND","ROUTE","ROW","ROYAL","RULE","RUN","RURAL","SAFE","SAFETY","SALE","SAME","SAMPLE","SATISFY","SAVE","SAY","SCALE","SCENE","SCHEME","SCHOOL","SCIENCE","SCIENTIFIC","SCIENTIST","SCORE","SCREEN","SEA","SEARCH","SEASON","SEAT","SECOND","SECONDARY","SECRETARY","SECTION","SECTOR","SECURE","SECURITY","SEE","SEEK","SEEM","SELECT","SELECTION","SELL","SEND","SENIOR","SENSE","SENTENCE","SEPARATE","SEQUENCE","SERIES","SERIOUS","SERIOUSLY","SERVANT","SERVE","SERVICE","SESSION","SET","SETTLE","SETTLEMENT","SEVERAL","SEVERE","SEX","SEXUAL","SHAKE","SHALL","SHAPE","SHARE","SHE","SHEET","SHIP","SHOE","SHOOT","SHOP","SHORT","SHOT","SHOULD","SHOULDER","SHOUT","SHOW","SHUT","SIDE","SIGHT","SIGN","SIGNAL","SIGNIFICANCE","SIGNIFICANT","SILENCE","SIMILAR","SIMPLE","SIMPLY","SINCE","SING","SINGLE","SIR","SISTER","SIT","SITE","SITUATION","SIZE","SKILL","SKIN","SKY","SLEEP","SLIGHTLY","SLIP","SLOW","SLOWLY","SMALL","SMILE","SO","SOCIAL","SOCIETY","SOFT","SOFTWARE","SOIL","SOLDIER","SOLICITOR","SOLUTION","SOME","SOMEBODY","SOMEONE","SOMETHING","SOMETIMES","SOMEWHAT","SOMEWHERE","SON","SONG","SOON","SORRY","SORT","SOUND","SOURCE","SOUTH","SOUTHERN","SPACE","SPEAK","SPEAKER","SPECIAL","SPECIES","SPECIFIC","SPEECH","SPEED","SPEND","SPIRIT","SPORT","SPOT","SPREAD","SPRING","STAFF","STAGE","STAND","STANDARD","STAR","START","STATE","STATEMENT","STATION","STATUS","STAY","STEAL","STEP","STICK","STILL","STOCK","STONE","STOP","STORE","STORY","STRAIGHT","STRANGE","STRATEGY","STREET","STRENGTH","STRIKE","STRONG","STRONGLY","STRUCTURE","STUDENT","STUDIO","STUDY","STUFF","STYLE","SUBJECT","SUBSTANTIAL","SUCCEED","SUCCESS","SUCCESSFUL","SUCH","SUDDENLY","SUFFER","SUFFICIENT","SUGGEST","SUGGESTION","SUITABLE","SUM","SUMMER","SUN","SUPPLY","SUPPORT","SUPPOSE","SURE","SURELY","SURFACE","SURPRISE","SURROUND","SURVEY","SURVIVE","SWITCH","SYSTEM","TABLE","TAKE","TALK","TALL","TAPE","TARGET","TASK","TAX","TEA","TEACH","TEACHER","TEACHING","TEAM","TEAR","TECHNICAL","TECHNIQUE","TECHNOLOGY","TELEPHONE","TELEVISION","TELL","TEMPERATURE","TEND","TERM","TERMS","TERRIBLE","TEST","TEXT","THAN","THANK","THANKS","THAT","THE","THEATRE","THEIR","THEM","THEME","THEMSELVES","THEN","THEORY","THERE","THEREFORE","THESE","THEY","THIN","THING","THINK","THIS","THOSE","THOUGH","THOUGHT","THREAT","THREATEN","THROUGH","THROUGHOUT","THROW","THUS","TICKET","TIME","TINY","TITLE","TO","TODAY","TOGETHER","TOMORROW","TONE","TONIGHT","TOO","TOOL","TOOTH","TOP","TOTAL","TOTALLY","TOUCH","TOUR","TOWARDS","TOWN","TRACK","TRADE","TRADITION","TRADITIONAL","TRAFFIC","TRAIN","TRAINING","TRANSFER","TRANSPORT","TRAVEL","TREAT","TREATMENT","TREATY","TREE","TREND","TRIAL","TRIP","TROOP","TROUBLE","TRUE","TRUST","TRUTH","TRY","TURN","TWICE","TYPE","TYPICAL","UNABLE","UNDER","UNDERSTAND","UNDERSTANDING","UNDERTAKE","UNEMPLOYMENT","UNFORTUNATELY","UNION","UNIT","UNITED","UNIVERSITY","UNLESS","UNLIKELY","UNTIL","UP","UPON","UPPER","URBAN","US","USE","USED","USEFUL","USER","USUAL","USUALLY","VALUE","VARIATION","VARIETY","VARIOUS","VARY","VAST","VEHICLE","VERSION","VERY","VIA","VICTIM","VICTORY","VIDEO","VIEW","VILLAGE","VIOLENCE","VISION","VISIT","VISITOR","VITAL","VOICE","VOLUME","VOTE","WAGE","WAIT","WALK","WALL","WANT","WAR","WARM","WARN","WASH","WATCH","WATER","WAVE","WAY","WE","WEAK","WEAPON","WEAR","WEATHER","WEEK","WEEKEND","WEIGHT","WELCOME","WELFARE","WELL","WEST","WESTERN","WHAT","WHATEVER","WHEN","WHERE","WHEREAS","WHETHER","WHICH","WHILE","WHILST","WHITE","WHO","WHOLE","WHOM","WHOSE","WHY","WIDE","WIDELY","WIFE","WILD","WILL","WIN","WIND","WINDOW","WINE","WING","WINNER","WINTER","WISH","WITH","WITHDRAW","WITHIN","WITHOUT","WOMAN","WONDER","WONDERFUL","WOOD","WORD","WORK","WORKER","WORKING","WORKS","WORLD","WORRY","WORTH","WOULD","WRITE","WRITER","WRITING","WRONG","YARD","YEAH","YEAR","YES","YESTERDAY","YET","YOU","YOUNG","YOUR","YOURSELF","YOUTH" \ No newline at end of file