From 939811371e64aae0a6584118c882853e64054c31 Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Wed, 8 Feb 2012 14:31:47 +0100 Subject: [PATCH] Solves 4 problems. Eclipse integration for simpler use with Windows. Still have to perform some good work on prime numbers! Signed-off-by: Julien Lengrand-Lambert --- README.markdown | 5 +++ e_29.py | 38 ++++++++++++++++++ e_30.py | 29 ++++++++++++++ e_35.py | 53 ++++++++++++++++++++++--- e_42.data | 1 + e_42.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ e_45.py | 75 ++++++++++++++++++++++++++++++++++++ e_52.py | 64 +++++++++++++++++++++++++++++++ 8 files changed, 360 insertions(+), 5 deletions(-) create mode 100644 e_29.py create mode 100644 e_30.py create mode 100644 e_42.data create mode 100644 e_42.py create mode 100644 e_45.py create mode 100644 e_52.py diff --git a/README.markdown b/README.markdown index 0abb3b2..5800b8a 100644 --- a/README.markdown +++ b/README.markdown @@ -39,13 +39,18 @@ Should be used in order to help future reuse of code :) 24 - What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9? - too long
25 - What is the first term in the Fibonacci sequence to contain 1000 digits? - 0.741
27 - Find a quadratic formula that produces the maximum number of primes for consecutive values of n. - too long
+29 - How many distinct terms are in the sequence generated by ab for 2 a 100 and 2 b 100? - < 1 sec
36 - Find the sum of all numbers less than one million, which are palindromic in base 10 and base 2. - 0.933
+42 - Using words.txt, a 16K text file containing nearly two-thousand common English words, how many are triangle words? - < 1 sec
+45 - Find the next triangle number that is also pentagonal and hexagonal. - < 1 sec
48 - Find the last ten digits of 1^1 + 2^2 + ... + 1000^1000. - 0.053
+52 - Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits. - 2min
67 - Using an efficient algorithm find the maximal sum in the triangle? - 0.027
**In progress: ** 26 - Find the value of d < 1000 for which 1/d contains the longest recurring cycle.
+30 - Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
35 - How many circular primes are there below one million?
**WARNING : Spoil inside for those who want to solve problems by themselves :)** diff --git a/e_29.py b/e_29.py new file mode 100644 index 0000000..0115999 --- /dev/null +++ b/e_29.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +''' +Created on 7 feb. 2012 + +@author: Julien Lengrand-Lambert + +DESCRIPTION: Solves problem 29 of Project Euler +Consider all integer combinations of a^b for 2<=a<=5 and 2<=b<=5: + +2^2=4, 2^3=8,2^4=16, 2^5=32 +3^2=9, 3^3=27, 3^4=81,3^5=243 +4^2=16, 4^3=64, 4^4=256, 4^5=1024 +5^2=25, 5^3=125, 5^4=625, 5^5=3125 +If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms: + +4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125 + +How many distinct terms are in the sequence generated by a^b for 2<=a<=100 and 2<=b<=100? +''' +def integer_combinations(a_max, b_max): + """ + Returns a list of all integer combinations of a^b for 2<=a<=5 and 2<=b<=5 + """ + olist = [] + for a in range(2, a_max + 1): + for b in range(2, b_max + 1): + olist.append(a**b) + + return olist + +def sort_n_short(olist): + """ + Sort elements of olist and remove all duplicates. + """ + return sorted(set(olist)) + +if __name__ == '__main__': + print "Answer : %d " % (len(sort_n_short(integer_combinations(100, 100)))) \ No newline at end of file diff --git a/e_30.py b/e_30.py new file mode 100644 index 0000000..e1c46c3 --- /dev/null +++ b/e_30.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +''' +Created on 7 feb. 2012 + +@author: Julien Lengrand-Lambert + +DESCRIPTION: Solves problem 30 of Project Euler +Surprisingly there are only three numbers that can be written as the sum of fourth powers of their digits: + +1634 = 1^4 + 6^4 + 3^4 + 4^4 +8208 = 8^4 + 24 + 0^4 + 8^4 +9474 = 9^4 + 4^4 + 7^4 + 4^4 +As 1 = 1^4 is not a sum it is not included. + +The sum of these numbers is 1634 + 8208 + 9474 = 19316. + +Find the sum of all the numbers that can be written as the sum of fifth powers of their digits. +''' + + +def largest(): + """ + Returns + """ + + return 1 + +if __name__ == '__main__': + print "Answer : %d " % (largest()) diff --git a/e_35.py b/e_35.py index 5148c4a..8287388 100644 --- a/e_35.py +++ b/e_35.py @@ -11,7 +11,8 @@ How many circular primes are there below one million? ##--- """ - +import pickle + def all_permutations(seq): """permutate a sequence and return a list of the permutations""" if not seq: @@ -52,20 +53,23 @@ def prime_list(max_val): return plist -def perm_primes(max_val): +def perm_primes_old(max_val): """ Returns the number of circular primes below max_val """ circulars = 0 circl = [] + # to avoid calculating primes + # plist = pickle.load(open("primes_list.dup", "rb")) + # print plist plist = prime_list(max_val) print "###" # stuff here cpt = 0 for prime in plist: cpt += 1 - print "%d/%d" % ( cpt, len(list)) + print "%d/%d" % ( cpt, len(plist)) print circulars, circl perms = all_permutations(str(prime)) # finds all permutations @@ -82,8 +86,47 @@ def perm_primes(max_val): return circulars, circl +def perm_primes(max_val): + """ + Returns the number of circular primes below max_val + """ + circulars = 0 + circl = [] + + # to avoid calculating primes + plist = pickle.load(open("primes_list.dup", "rb")) + #plist = prime_list(max_val) + checks_list = [1] * len(plist) # all primes to be tested + + for ii in range(len(plist)): + if (ii % 99 == 0): + print "%d/%d" % ( ii + 1, len(plist)) + + if checks_list[ii]: # if prime still to be checked + prime = plist[ii] + perms = all_permutations(str(prime)) # finds all permutations + + # counts how many permutations are in prime list given one prime + p_cpt = 0 + for perm in perms: + if int(perm) in plist: + p_cpt += 1 + + # if prime is circular + if p_cpt == len(perms): + # updating checks_list + for perm in perms: + if not(int(perm) in circl): # avoiding duplicates + circulars += 1 + circl.append(int(perm)) + checks_list[plist.index(int(perm))] = 0 + + else: + checks_list[ii] = 0 + + return circulars, circl + if __name__ == '__main__' : answer, plist = perm_primes(1000000) print "Answer is : %d" % (answer) - print plist - raw_input() \ No newline at end of file + print plist \ No newline at end of file diff --git a/e_42.data b/e_42.data new file mode 100644 index 0000000..7177624 --- /dev/null +++ b/e_42.data @@ -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 diff --git a/e_42.py b/e_42.py new file mode 100644 index 0000000..ff148f4 --- /dev/null +++ b/e_42.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +''' +Created on 7 feb. 2012 + +@author: Julien Lengrand-Lambert + +DESCRIPTION: Solves problem 42 of Project Euler +The nth term of the sequence of triangle numbers is given by, t_n = 1/2 * 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 e_42.data (right click and 'Save Link/Target As...'), +a 16K text file containing nearly two-thousand common English words, +how many are triangle words? +''' +import string + +def load_data(filename): + """ + Loads the data from a name file into a table + """ + my_file = open(filename, "r") + line = my_file.readline() + data = [el for el in line.split("\"")][1::2] + my_file.close() + return data + +def dict_alphabet(): + """ + Returns a dict of the alphabet, with value for each letter. + """ + alpb= dict() + letters = string.ascii_uppercase + inc = 1 + for j in range(len(letters)): + alpb[letters[j]] = inc + inc += 1 + + return alpb + +def names2scores(data): + """ + Returns a list of scores given a list of names. + Scores are calculated with word values, (A = 1, B = 2, ...) + """ + scores = [] + alpb = dict_alphabet() + for name in data: + score = 0 + for jj in range(len(name)): + score += (alpb[name[jj]]) + + scores.append(score) + + return scores + +def triangle_list(max_val): + """ + Returns a list of triangle numbers up to max_val. + triangle_numbers is an increasing function. + """ + trilist = [] + ptr = 1 + val = 1 + while val < max_val: + val = trinum(ptr) + trilist.append(val) + ptr += 1 + + return trilist + +def trinum(val): + """ + Returns the triangle number for a given value + """ + return val * (val + 1) / 2 + +def triangle_words(filename): + """ + Returns the number of triangle words in filename + """ + data = load_data(filename) + scores = names2scores(data) + trilist = triangle_list(max(scores)) + + # checking if words are triangle + cpt = 0 + for score in scores: + if score in trilist: + cpt += 1 + + return cpt + +if __name__ == '__main__': + print "Answer : %d " % (triangle_words("e_42.data")) \ No newline at end of file diff --git a/e_45.py b/e_45.py new file mode 100644 index 0000000..ec51298 --- /dev/null +++ b/e_45.py @@ -0,0 +1,75 @@ +''' +Created on 7 feb. 2012 + +@author: Julien Lengrand-Lambert +DESCRIPTION : Solves problem 45 of Project Euler +Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: + +Triangle Tn=n(n+1)/2 1, 3, 6, 10, 15, ... +Pentagonal Pn=n(3(n-1))/2 1, 5, 12, 22, 35, ... +Hexagonal Hn=n(2(n-1)) 1, 6, 15, 28, 45, ... +It can be verified that T285 = P165 = H143 = 40755. + +Find the next triangle number that is also pentagonal and hexagonal. +''' + +def tn(value): + """ + Returns the triangle number of the given value + """ + return value * (value + 1) / 2 + +def pn(value): + """ + Returns the Pentagonal number of the given value + """ + return value * ((3 * value) - 1) / 2 + +def hn(value): + """ + Returns the Hexagonal number of the given value + """ + return value * ((2 * value) - 1) + +def tripenhex(value): + """ + Returns True of the triangle, pentagonal and hexagonal number of value are the same + """ + return (tn(value) == pn(value) == hn(value)) + +def big_while(): + """ + Returns the value for which tm = pn = ho + """ + cpt_t = 2 + cpt_p = 2 + cpt_h = 2 + val_t = tn(cpt_t) + val_p = pn(cpt_p) + val_h = hn(cpt_h) + + res = [] + while len(res) < 2: # to get the two first values + while not (val_t == val_p == val_h): + + cpt_t += 1 + val_t = tn(cpt_t) + + # updating val_p + while val_p < val_t: + cpt_p += 1 + val_p = pn(cpt_p) + + # updating val_h + while val_h < val_t: + cpt_h += 1 + val_h = hn(cpt_h) + res.append(val_t) + cpt_t += 1 + val_t = tn(cpt_t) + + return res[1] # outputs the second value + +if __name__ == '__main__': + + print "Answer : %d " % (big_while()) \ No newline at end of file diff --git a/e_52.py b/e_52.py new file mode 100644 index 0000000..5de483d --- /dev/null +++ b/e_52.py @@ -0,0 +1,64 @@ +''' +Created on 7 feb. 2012 + +@author: Julien Lengrand-Lambert +DESCRIPTION : Solves problem 52 of Project Euler +It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order. + +Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits. +''' +def smallest_match(max_mul): + """ + Find the smallest positive integer, x, such that ..., till max_mul*x contain the same digits. + """ + cpt = 2 + nlist = [(i + 1) * cpt for i in range(max_mul)] + + while(1): + if cpt % 10000 == 0: + print cpt + if same_size(nlist): + if same_digits(nlist): + print cpt, nlist + return cpt + + cpt += 1 + nlist = [(i + 1) * cpt for i in range(max_mul)] + +def all_permutations(seq): + """permutate a sequence and return a list of the permutations""" + if not seq: + return [seq] # is an empty sequence + else: + temp = [] + for k in range(len(seq)): + part = seq[:k] + seq[k+1:] + for m in all_permutations(part): + temp.append(seq[k:k+1] + m) + return temp + + +def same_digits(nlist): + """ + Returns True if all numbers in nlist contain the same digits. + Which means they are all permutations of the first value + """ + perms = all_permutations(str(nlist[0])) # finds all permutations + for el in nlist: + if not(str(el) in perms): + return False + + return True + +def same_size(nlist): + """ + Returns True if all numbers in nlist have the same number of digits + """ + nlen = len(str(nlist[0])) + for el in nlist : + if len(str(el)) != nlen: + return False + return True + +if __name__ == '__main__': + print "Answer : %d " % (smallest_match(6)) \ No newline at end of file