[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