Posts: 6681
Threads: 82
Joined: May 31, 2014
Reputation:
56
RE: Project Euler
July 3, 2016 at 8:58 am
(July 3, 2016 at 8:16 am)SteelCurtain Wrote: Ahh, I see what you mean.
You want to just initialize variables.
I think Python only allows you to do that with lists and tuples.
No, you can initialize variables with Python. What you did inside the procedure/function in Python code (a = 5) was an example of initializing, right?
Anyway, I can't remember why I wished variables in Python could just be declared/defined without initial assignment, but I did just learn something new in Python. Apparently, you can test for whether or not a variable has been defined using globals() or locals().
For example:
Code: v = 0
if 'v' not in globals():
print 'v not defined'
else:
print 'v defined'
It won't throw an error at you for not defining v if you didn't. But note that you have to wrap quotes around the 'v' for this to run without errors.
Posts: 15352
Threads: 119
Joined: January 13, 2014
Reputation:
116
RE: Project Euler
July 3, 2016 at 10:24 pm
Well, after my code for #12 ran for about 3 hours on my monster machine, I got the right answer...
Not exactly efficient, but it worked... :S
Posts: 6681
Threads: 82
Joined: May 31, 2014
Reputation:
56
RE: Project Euler
July 4, 2016 at 2:05 am
(July 3, 2016 at 10:24 pm)SteelCurtain Wrote: Well, after my code for #12 ran for about 3 hours on my monster machine, I got the right answer... 
Not exactly efficient, but it worked... :S
If this is still on an online IDE, this must be a good one. 3 hours is very impressive.
Since you solved the triangle number problem, did you just count all the factors less than sqrt(n), where n represents each triangle number checked? And multipled by two for non-perfect squares, and additionally added a 1 for perfect squares?
Posts: 15352
Threads: 119
Joined: January 13, 2014
Reputation:
116
RE: Project Euler
July 4, 2016 at 2:15 am
(This post was last modified: July 4, 2016 at 2:16 am by SteelCurtain.)
I'm now using IDLE, the Python IDE that comes packaged with Python. My code was rather simple, I just checked the number of divisors for each triangle number until one had more than 500 divisors. I think it was like 8 lines of code w/o the function def.
The next few were easy, I'm up to number 17. This one isn't hard, but writing the code is time consuming.
Posts: 15352
Threads: 119
Joined: January 13, 2014
Reputation:
116
RE: Project Euler
July 4, 2016 at 4:47 am
Problem #17 was easy in theory, required a lot of debugging...
Code: def main():
tot = 0
for i in range(1, 1001):
n = str(i)
if len(n) == 1: #one digit
tot += ones('0', n[0])
elif len(n) == 2: #two digits
tot += tens(n[0], n[1]) + ones(n[0], n[1])
elif len(str(i)) == 3: #three digits
tot += hundreds(n[0], n[1], n[2]) + tens(n[1], n[2]) + ones(n[1], n[2])
else: #add letters for 'one thousand'
tot += 11
print(tot)
def ones(tens, ones):
if tens == '1':
return 0
else:
if any(ones == x for x in ['1', '2', '6']):
return 3
elif any(ones == x for x in ['4', '5', '9']):
return 4
elif any(ones == x for x in ['3', '7', '8']):
return 5
else:
return 0
def tens(tens, ones):
if tens == '1':
if any(ones == x for x in ['1', '2']):
return 6
elif any(ones == x for x in ['5', '6']):
return 7
elif any(ones == x for x in ['3', '4', '8', '9']):
return 8
elif ones == '7':
return 9
elif ones == '0':
return 3
elif any(tens == x for x in ['2', '3', '8', '9']):
return 6
elif any(tens == x for x in ['4', '5', '6']):
return 5
elif tens == '7':
return 7
else:
return 0
def hundreds(hunds, tns, ons):
if (tns == '0' and ons == '0'):
return 7 + ones('0', hunds)
else:
return 10 + ones('0', hunds)
Posts: 6681
Threads: 82
Joined: May 31, 2014
Reputation:
56
RE: Project Euler
July 4, 2016 at 5:24 am
(July 4, 2016 at 4:47 am)SteelCurtain Wrote: Problem #17 was easy in theory, required a lot of debugging...
Code: def main():
tot = 0
for i in range(1, 1001):
n = str(i)
if len(n) == 1: #one digit
tot += ones('0', n[0])
elif len(n) == 2: #two digits
tot += tens(n[0], n[1]) + ones(n[0], n[1])
elif len(str(i)) == 3: #three digits
tot += hundreds(n[0], n[1], n[2]) + tens(n[1], n[2]) + ones(n[1], n[2])
else: #add letters for 'one thousand'
tot += 11
print(tot)
def ones(tens, ones):
if tens == '1':
return 0
else:
if any(ones == x for x in ['1', '2', '6']):
return 3
elif any(ones == x for x in ['4', '5', '9']):
return 4
elif any(ones == x for x in ['3', '7', '8']):
return 5
else:
return 0
def tens(tens, ones):
if tens == '1':
if any(ones == x for x in ['1', '2']):
return 6
elif any(ones == x for x in ['5', '6']):
return 7
elif any(ones == x for x in ['3', '4', '8', '9']):
return 8
elif ones == '7':
return 9
elif ones == '0':
return 3
elif any(tens == x for x in ['2', '3', '8', '9']):
return 6
elif any(tens == x for x in ['4', '5', '6']):
return 5
elif tens == '7':
return 7
else:
return 0
def hundreds(hunds, tns, ons):
if (tns == '0' and ons == '0'):
return 7 + ones('0', hunds)
else:
return 10 + ones('0', hunds)
If you want to see my code, go to Page 8 in the corresponding thread and it should be the 15th post. Country is Australia, I'm right after the Chinese dude.
Posts: 15352
Threads: 119
Joined: January 13, 2014
Reputation:
116
RE: Project Euler
July 4, 2016 at 5:31 am
Nice. It looks like you built a string for each number, then counted the letters? I like that approach.
Posts: 6681
Threads: 82
Joined: May 31, 2014
Reputation:
56
RE: Project Euler
July 4, 2016 at 5:36 am
(This post was last modified: July 4, 2016 at 5:37 am by GrandizerII.)
(July 4, 2016 at 5:31 am)SteelCurtain Wrote: Nice. It looks like you built a string for each number, then counted the letters? I like that approach.
Yep, and two lists for digits, teen numbers, and multiples of ten.
A bit long, but I never cared about longevity, just as long as the code runs well and doesn't crash.
Posts: 6681
Threads: 82
Joined: May 31, 2014
Reputation:
56
RE: Project Euler
July 5, 2016 at 5:36 pm
This nerd has just reached problem 41.
|