[滴滴一面凉经]为什么啊啊啊啊啊******赛码网?!?!
一开始非常正常,
1.自我介绍,我相比之前百度的面试的时候顺溜很多了,因为我背了很多遍自我介绍
2.介绍项目,也很正常
3.拷打算法,寄! 1min超快感谢信,还象征性地反问了一下,问了面评什么的,问了感谢信发不发,结果就是到目前为止没有任何面试官跟我谈过面评,都避而不谈
详细说一下手撕代码怎么挂的:题目是《小虎跳格子》,居然是ACM模式,而且还是在赛码网,题目相比一般面试题,老长老长了:
一天,巧虎和小朋友们一起玩跳格子的游戏。游戏的规则是按照小朋友的指令执行,在格子里面移动。因为都是小朋友,所以小朋友的指令都比较简单,只有是三种:左转,右转,向前。为了方便表示,把小朋友的指令用如下的指令格式来表示:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。例如15L10R5LRR10R20 :则表示:巧虎先直行15厘米,左转,再走10厘米,再右转,... 现在请编写一个程序,编写程序,输入行走指令,程序输出每条指令执行后巧虎位置与指令执行前巧虎位置的直线距离。 样例输入:L100R50R10 样例输出:102.96
然后呢,看到这个题目,其实一开始我想错思路了,我:axis和hori一个横、一个纵坐标记录他的位置,然后我以为L就是横坐标减,R就是加(这当然不对)。然后我开始调试这个错误的代码,最大的bug来了:EOF不通过?! 捏嘛嘛p的我再错也不至于while循环都不会写啊,我写了很多牛客的ACM题,已经准确了解了ACM模式的输入输出怎么写,结果还是在这里寄,我之前看到赛码网的上面提示说“建议用input不要用sys.stdin”,我很听话用了input,结果捏嘛给我报EOF的错,我半天想不出来为什么,也不敢切本地IDE去调,于是就跟面试官说我写不出来了,然后就没了。
您猜猜第一次EOF我怎么解决的?没错,就是换成for line in sys.stdin:,无了个大语,*
后面自己复盘把代码写出来了,比我在面试的时候写的精简了很多:
import numpy as np while(1): line = input('').strip() if len(line)<=0:break axis = 0 hori = 0 idx,i = 0,0 directions = [(1,0),(0,1),(-1,0),(0,-1)] while(i<len(line)): #字符处理 if line[i]=='L': idx = (idx-1+4)%4 i+=1 elif line[i]=='R': idx = (idx+1)%4 i+=1 #数字处理 else: tmp = '' while(i<len(line) and '0'<=line[i]<='9'): tmp+=line[i] i+=1 if int(tmp)>100: i-=1 break hori,axis = hori+directions[idx][0]*int(tmp),axis+directions[idx][1]*int(tmp) res = np.sqrt(axis**2+hori**2) print("%.2f"%res)
这个时候其实面试界面还没关,我就打算把这个题目写完,然而我在本地IDE调出来正确答案的时候,重大bug又来了:“alueError: invalid literal for int() with base 10”,后来花了15分钟找到居然是int(字符串)这个操作报的错,我惊为天人,百思不得其解,本地pythonIDE从来不这样,后来去网上换了个别的方法eval,终于可以了:
import numpy as np import sys while(1): line = input('').strip() if len(line)<=0:break axis = 0 hori = 0 idx,i = 0,0 directions = [(1,0),(0,1),(-1,0),(0,-1)] while(i<len(line)): if line[i]=='L': idx = (idx-1+4)%4 i+=1 elif line[i]=='R': idx = (idx+1)%4 i+=1 else: tmp = '' while(i<len(line) and '0'<=line[i]<='9'): tmp+=line[i] i+=1 if int(tmp)>100: i-=1 break hori = hori+directions[idx][0]*eval(tmp) axis = axis+directions[idx][1]*eval(tmp) res = np.sqrt(axis**2+hori**2) print("%.2f"%res)
思路就是跟螺旋打印矩阵差不多,但是比那个麻烦,需要自己处理字符串,为字符、为数字怎么处理这样的。然后一提交,您猜怎么着? EOF又来辣!
我又陷入了沉思,然后试着换了一下sys,换成input,又好了???,所以到底在赛码网input和sys哪个是能用的?
终于是***过了,我真的不知道赛码网这个B存在的意义,就是为了告我的心态是吧
恭喜,编译成功并运行通过(Accepted) 说明: 所有测试数据均已输出正确结果! ^_^
ε=(´ο`*)))唉,真的不知道什么时候才能找到工作,这种本来稳稳的东西非要出问题,太搞心态了。