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!
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()
An enthusiastic technologist, passionate software engineer, writing for himself and rest of the world, welcoming anyone, living in Singapore, working for IBM, trying to make life easier...