[Tutor] How to speed up input/string parsing ...
Aditya Lal
aditya.n.lal at gmail.com
Thu Sep 27 21:40:20 CEST 2007
Hello Kent,
I tried finding solution with using only strings but unfortunately reversing
a number has some interesting issues - For example: take following two
numbers -
002000 002000
though the final answer is 4 - arriving at it using string is stripping '0'
from both left and right of both numbers. I thought it was far easier to
convert it into an integer and reverse. Anyway I wasn't aware of string
reversal shortcut - [::-1] ... thanx :)
Following code performs in 0.50 seconds :
import sys
def rev(n) :
m = 0
while n > 0 :
r = n%10
m = m*10 + r
n = n/10
return m
def solve(line) :
nums = line.split(' ')
a = int(nums[0].strip('0')[::-1])
b = int(nums[1].strip('0')[::-1])
return rev( a + b )
if __name__ == '__main__' :
N = int(sys.stdin.readline())
lines = sys.stdin.readlines()
for i in xrange(N) :
print solve(lines[i])
I will start working on psyco ... though not sure what is it ?
Thanks again Kent.
Cheers
Aditya
On 9/27/07, Kent Johnson <kent37 at tds.net> wrote:
>
> Aditya Lal wrote:
>
> > def rev(n) :
> > m = 0
> > while n > 0 :
> > m = m*10 + n%10
> > n = n/10
> > return m
>
> I would try reversing the numbers as strings. s[::-1] will reverse a
> string s.
>
> > How do I improve the input reading or string parsing ? I know there
> > should be a better way because the best program (at cost of memory)
> > performs > 50% faster than mine. So he must have done something to
> > improve input processing.
>
> The programs that use a lot of memory are using psyco.
>
> Kent
>
--
Aditya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20070928/4d89ca42/attachment-0001.htm
More information about the Tutor
mailing list