Who wants a Google Wave account?

Posted: November 19th, 2009 | Author: | Filed under: Interesting | 24 Comments »

I recently get my invitation from Google, and I have been playing with Google Wave for a while…
As you can read from rest of the web it still needs bug fixes and performance improvement but these are not reasons not to experiment it.
Just leave a comment with your email to this post for me to invite you to surf on Wave!

Wave Invitation

Wave Invitation


This week’s talk!

Posted: November 17th, 2009 | Author: | Filed under: Programming, This week's talk! | Tags: , , , | No Comments »

This week’s talk is from Joshua Bloch
Efficetive API Design


Google Code Jam – Episode #1 – Alien Language – with Python

Posted: October 15th, 2009 | Author: | Filed under: Programming | Tags: , , , , | 3 Comments »

Here is my solution to Alien Language;
maybe the most readable solution to this question in python, plus using recursion ;)
in some lines code might seem that it is not handling some boundary cases but it is because problem statement promising such cases won’t occur
http://code.google.com/codejam/contest/dashboard?c=32003#

enjoy it, comment it…

import math

def convert(alien_number, source_language, target_language):
    source_base = len(source_language.strip())
    target_base = len(target_language.strip())
    source_number_decimal = getNumberInDecimal(source_base, alien_number.strip(), source_language, target_language)
    target_number_as_list = getNumberInGivenBase(source_number_decimal, target_base)

    target_number = ''
    for d in target_number_as_list:
        target_number += target_language[int(d)]

    return target_number

def getNumberInDecimal(base, alien_number, source_language, target_language):
    i = 0
    source_number_decimal = 0
    reversed_alien_number = alien_number[::-1]
    for d in reversed_alien_number:
        source_number_decimal += weightOfDigit(d, source_language, base, i)
        i = i + 1

    return source_number_decimal

def getNumberInGivenBase(number, base):
    s = list()

    def numInGivenBase(number, base):
        if number < base:
            s.append(number)
            return
        remainder = number % base
        s.append(remainder)
        division = (number - remainder) / base
        numInGivenBase(division, base)

    numInGivenBase(number, base)

    s.reverse()
    return s

def weightOfDigit(digit, source_language, base, digitIndexInNumber):
    return orderOfDigit(digit, source_language) * math.pow(base, digitIndexInNumber)

def orderOfDigit(digit, source_language):
    return source_language.find(digit)

def main():
    f = open('A-large-practice.in', 'r')
    r = open('A-large-practice.in-result', 'w')

    while True:
        line = f.readline()
        if not line:
            break
        caseNum = int(line)
        for i in range(caseNum):
            line = f.readline()
            alien_number = line.split(' ')[0]
            source_language = line.split(' ')[1]
            target_language = line.split(' ')[2]
            result_line = 'Case #' + str(i + 1) + ': ' + str(convert(alien_number, source_language, target_language))
            r.write(result_line + '\n')
            print result_line 

    f.close()
    r.close()

if __name__ == '__main__':
    main()