RapidTyping
使用工具
PyCharm
解题思路
打开题目给出的网页内容,要求在2.5s内输入图中给出的字符串,显然手动输入是不可能的,除非你开启炫舞100倍速模式依然风生水起,不然的话这道题还是需要写个脚本跑一跑。
查看一下页面的源代码,发现图片是svg格式,那什么是svg呢?SVG就是可缩放矢量图形,基于可扩展标记语言,用于描述二维矢量图形的一种图形格式。与传统的图像格式不同的是,SVG采用文本来描述矢量化的图形,这使得SVG图像文件可以像HTML网页一样有着很好的可读性。当用户用图像工具输出SVG后,可以用任何文字处理工具打开SVG图像,并可看到用来描述图像的文本代码。掌握了SVG语法的人甚至可以只用一个记事本便可以读出图像中的内容来。
继续点进去,得到xml文档,是这个图形的数据,由许多text标签组成,每个标签的内容就是我们需要输入的字符。同时从text的属性可以得出,每个字符的位置信息xy坐标值,颜色信息rgb值。那就按照x坐标值的大小顺序进行排序。
接下来明确一下代码的思路,使用session机制,在服务器端保持状态。请求网页,获取img标签的src属性内容,分割出base64编码的数据信息,并解码。将解码的结果返回得到text标签内容,按照x属性值的大小排序,将结果传送,得到页面返回信息,GET。
1 | import base64 |
总结
这道题和calculator都使用了session机制,目的是让服务器将图片和答案对应上。在用户发起会话时,存在两种机制:一个是Cookie机制,通过在客户端记录信息确定用户身份;另一种是Session机制,通过在服务器端记录信息确定用户身份。
本题中给的是一个矢量图形,它是不需要图像识别技术就可以读取数据的,在这里要说明一点,就是图形和图像的区别:图形是指由外部轮廓线条构成的矢量图。即由计算机绘制的直线、圆、矩形、曲线、图表等;而图像是由扫描仪、摄像机等输入设备捕捉实际的画面产生的数字图像,是由像素点阵构成的位图。最直接的区别方法就是放大处理,放大后图形还是图形,而图像就会变成一堆马赛克,也就是像素点,这也就是为什么分辨率越高图像越清晰了。如果题目给的图像的话,可能就需要一些图像识别技术了。
最后就是关于python的,我也是刚接触python,不好说太深入,不过这个语言确实用起来很方便,符合它的定位“优雅”、“明确”、“简单”,以后还要多加学习使用。