最近遇到了好多网页闯关游戏。

比如有名的 pythonchallenge

再比如 http://riddle.arthurluk.net/

 

今晚做了  http://monyer.com/game/game1/

虽然只有15关,但感觉非常好,强烈推荐

它让我学到了javascript的一些知识,还有基本的cookies、session、sql注入等知识,很有趣!

我花了几个小时,在参考答案的帮助下通关啦!

下面是我的通关攻略,不过我觉得首页上那个官方的攻略写的非常详细,比我的要好很多

继续阅读→


比赛时暴露出现好多问题,赛后要好好总结:

 

148A - Insomnia cure

暴力:

k = [input() for i in xrange(4)]
d = input()
print len(set([j for i in k for j in range(1,d+1) if j%i==0]))
 

148B - Escape

简单计算题,比赛时没考虑龙的初始速度要比公主快,赛后挂了

继续阅读→


146A - Lucky Ticket

题意:长度为n的数字,如果全部是4或7,并且前一半的和等于后一半的和,则输出“YES”,否则“NO”

我的代码:

n=input()/2
p=raw_input()
for c in p:	#找不是47的数字
    if c not in ["4","7"]:
        print "NO"
        exit()
#读入的字符串转成int并变成list之后求和
if sum([int(c) for c in p[:n]])==sum([int(c) for c in p[n:]]):
    print "YES"
else:
    print "NO"
 
看到另一个人的代码
n = int(raw_input())
s = raw_input()
a = [ord(c)-ord('0') for c in s]	#string转成数字list,方便后面处理
ans = 1
for i in a:
        if i not in [4, 7]:
                ans = 0
                break
else:
        if sum(a[:n/2]) != sum(a[n/2:]):
                ans = 0

print ['NO', 'YES'][ans] #用list索引简化输出  

还看到几个特别漂亮的代码:
if set("47").issuperset(set(S)) and sum(map(int,S[:len(S)/2])) == sum(map(int,S[len(S)/2:])):
    print "YES"
else: print "NO"
 
通过组成的集合是不是"47"的子集来判定有没有超过47的数字
用map(int,S)把字符串转换成int list ,方便求和

最精彩的是这个代码:

s=sorted	#变成自动排序的list
n=input()
z=raw_input()
print"NYOE S"[set(z)<=set("47")and s(2*s(z[:n//2]))==s(z)::2]

#set(z)<=set("47") 直接比较子集
#s(2*s(z[:n//2]))==s(z)::2 前一半的和乘以二  


//获得8个数的全排列,然后判断是否满足前四个正方形,后四个矩形,判断使用边长相等+一个直角即可

int px[10], py[10];

double dis(int a, int b) {
return (px[a] - px[b])*(px[a] - px[b])+(py[a] - py[b])*(py[a] - py[b]);
}

bool isRt(int a, int b, int c) {
return ((px[b] - px[a])*(px[c] - px[b])+(py[b] - py[a])*(py[c] - py[b]) == 0);
}

bool isSq(int a, int b, int c, int d) {
int l1 = dis(a, b);
int l2 = dis(b, c);
int l3 = dis(c, d);
int l4 = dis(a, d);
if (l1 == l2 && l2 == l3 && l3 == l4 && isRt(a, b, c))
return 1;
return 0;
}

bool isJu(int a, int b, int c, int d) {
int l1 = dis(a, b);
int l2 = dis(b, c);
int l3 = dis(c, d);
int l4 = dis(a, d);
if (l1 == l3 && l2 == l4 && isRt(a, b, c))
return 1;
return 0;
}

int main() {
for (int i = 1; i <= 8; ++i) {
scanf("%d%d", &px[i], &py[i]);
}
int sq[8] = {1, 2, 3, 4, 5, 6, 7, 8};
int flag = 0;

do {
if (isSq(sq[0], sq[1], sq[2], sq[3]) && isJu(sq[4], sq[5], sq[6], sq[7])) {
flag = 1;
printf("YES\n%d %d %d %d\n%d %d %d %d\n", sq[0], sq[1], sq[2], sq[3], sq[4], sq[5], sq[6], sq[7]);
break;
}

} while (next_permutation(sq, sq + 8));
if (!flag) {
puts("NO");
}
return 0;
}  


最近在学习python,知道了关于python代码风格PEB8,转载一篇中文介绍吧,写得蛮好的:

官方文档:http://www.python.org/dev/peps/pep-0008/

 

转载来源:http://www.blogjava.net/lincode/archive/2011/02/02/343859.html

1 变量 常量 : 大写加下划线

USER_CONSTANT
对于不会发生改变的全局变量,使用大写加下划线。 私有变量 : 小写和一个前导下划线
_private_value
Python 中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。

继续阅读→