昨天是Google Code Jam的Qualification Round,我也参加了,可能是最近代码写的比较少,出了一些小错误,再加上觉得最后一题比较麻烦就放弃了,最后的了45分,貌似得分有20分就可以进入下一轮了。下面就来分享一下我的代码。
Problem A的题目叫Speaking in Tongues,题目大意是说Google有一种叫做Googlerese的语言,这种语言可以和英语相互转换,每种字母都有唯一的映射,可能是字母本身,也可能是其他字母。需要输入Googlerese语,然后转换成英语输出。
输入时在第一行输入一个数字,代表测试的次数,然后每一行是一句Googlerese语,可能由一个或多个'a'-'z'组成的单词组成,用空格分隔。输出时要采用“Case #n: english”这样的模板,n从1开始。为了防止题目过于简单,Google并没有提供所有字母之间的映射,而是提供了一个hint和一组sample。先根据hint和sample获取其中一部分映射:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
sample_g = (
'ejp mysljylc kd kxveddknmc re jsicpdrysi',
'rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd',
'de kr kd eoya kw aej tysr re ujdr lkgc jv'
)
sample_e = (
'our language is impossible to understand',
'there are twenty six factorial possibilities',
'so it is okay if you want to just give up'
)
dic = {'a': 'y', 'o': 'e', 'z': 'q'}
for i in xrange(3):
for j in xrange(len(sample_g[i])):
if sample_g[i][j] not in dic:
dic[sample_g[i][j]] = sample_e[i][j]
from pprint import pprint
pprint(dic)
这样就会得到:
{' ': ' ', 'a': 'y', 'b': 'h', 'c': 'e', 'd': 's', 'e': 'o', 'f': 'c', 'g': 'v', 'h': 'x', 'i': 'd', 'j': 'u', 'k': 'i', 'l': 'g', 'm': 'l', 'n': 'b', 'o': 'e', 'p': 'r', 'r': 't', 's': 'n', 't': 'w', 'u': 'j', 'v': 'p', 'w': 'f', 'x': 'm', 'y': 'a', 'z': 'q'}
然后你可以发现在key中没有'q',在value中没有z,根据题目,将这一对键/值对加入dictionary中