Python Challenge 第十四关
14关页面上是两张图,一张是一个卷面包,一张类似条形码的东西。没任何提示,就看源代码,果然,有一行注释:
<!-- remember: 100*100 = (100+99+99+98) + (... -->
然后把那两张图都下了下来。面包那张没看出什么端倪, 反倒是条形码那张,下下来居然是个 10000*1的奇葩图片。然后这个注释里的列表,刚好100*100也等于10000,看来应该处理的就是这张图了。
现在应该先把这个注释中的列表给求出来。每个组合四个数,数字抵减,加起来为10000,可以猜想两组相加,相对应数的和为100,这样就需要 10000 / 100 / 4 * 2 = 50 组。可以用个列表解析:
l = [[i, i-1, i-1, i-2] for i in xrange(100, 0, -2)]
为了测验一下对不对,可以把元素都加一下:
a = [sum(i) for i in l]
print sum(a)
刚好10000。
得到了这个列表,联想到刚才那个面包圈,想着先横着100,再竖着99,再向左横着99,向上竖98,刚好就是一圈,这样一圈一圈下去就能把这个 10000*1 的图给围成 100*100的了:
img_old = Image.open(r'C:\Users\Leo\Desktop\wire.png')
img_old_value = img_old.load()
img_new = Image.new(img_old.mode, (100, 100))
img_new_value = img_new.load() l = [[i, i-1, i-1, i-2] for i in xrange(100, 0, -2)]
idx = 0
x = y = 0
for indices in l:
for j in xrange(indices[0]):
img_new_value[x, y] = img_old_value[idx, 0]
x += 1
idx += 1
x -= 1
for j in xrange(indices[1]):
img_new_value[x, y] = img_old_value[idx, 0]
y += 1
idx += 1
y -= 1
for j in xrange(indices[2]):
img_new_value[x, y] = img_old_value[idx, 0]
x -= 1
idx += 1
x += 1
for j in xrange(indices[3]):
img_new_value[x, y] = img_old_value[idx, 0]
y -= 1
idx += 1
y += 1
img_new.show()
这里 idx 是原图的 x 坐标,在大循环里,分别有四个小循环,分别是在新图中向右、向下、向左、向上赋值。这里我开始写的时候每个小循环后面没有那些 +=1 或 -=1,结果总是报错 index out of range。后来仔细一分析,比如第一行的像素,赋值得循环100次,这样 x 的值就被累加到了 100,但是 x 的最大值为 99,这样就超了,下面的每次小循环都一样,这样就需要在循环完再减/加一次。
得到的图像是一只猫。然后改了一下 url 为 cat,进入一个新页面,有那只猫的原图。上书一句:and its name is uzi. you'll hear from him later. 试了下把 cat 改成 uzi,进入了下一关:http://www.pythonchallenge.com/pc/return/uzi.html
之后去看网站上其他人的解法,发现我的代码太复杂。这里有个例子:
def spiral(source):
target = Image.new(source.mode, (100, 100))
left, top, right, bottom = (0, 0, 99, 99)
x, y = 0, 0
dirx, diry = 1, 0
for i in xrange(10000):
target.putpixel((x, y), source.getpixel((i, 0)))
if dirx == 1 and x == right:
dirx, diry = 0, 1
top += 1
elif dirx == -1 and x == left:
dirx, diry = 0, -1
bottom -= 1
elif diry == 1 and y == bottom:
dirx, diry = -1, 0
right -= 1
elif diry == -1 and y == top:
dirx, diry = 1, 0
left += 1
x += dirx
y += diry
return target
这里只有一个循环,根据边界条件来改变坐标,逻辑更加清楚,值得借鉴。
Python Challenge 第十四关的更多相关文章
- Python Challenge 第十五关
第15关,题目是 whom? 有一张图片,是个日历.日历的年份是 1XX6,中间是被挖去的洞.然后图中1月26日被画了个圈,当天是星期一.右下角的二月小图中有29号,可以得知这是闰年.然后查看源代码. ...
- Python Challenge 第十二关
这一关依旧只有一张图,右键源代码也没有任何注释,也用PIL处理过那张图但没任何头绪,没办法只有上网搜答案. 别人的博客里说,源代码里面图片的名字是 evil1.jpg,那肯定会有 evil2.jpg. ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
- SQL注入之Sqli-labs系列第二十四关(二阶注入)
开始挑战第二十四关(Second Degree Injections) 0x1 前言 SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 .二次注入不是注入两次的意思,请不要混淆 ...
- SQL注入之Sqli-labs系列第十四关(基于双引号POST报错注入)
开始挑战第十四关(Double Injection- Double quotes- String) 访问地址,输入报错语句 ' '' ') ") - 等使其报错 分析报错信息 很明显是 ...
- 孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块
孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块 (完整学习过程屏幕记录视频地址在文末) 由于本身tesseract模块针对普通的验证码图片的识别率并不高 ...
- 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4
孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
- 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3
孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...
随机推荐
- 科学计算库Numpy——排序
矩阵按维度排序 使用np.sort()进行排序. 排序索引值 使用np.argsort()排序,返回排序后的索引值. 备注:array1[1,2]=1.2,array1[1,0]=5.6,array1 ...
- stm32串口——标志位学习
/* 在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送 ...
- Codeforces Round #464 (Div. 2) A Determined Cleanup
A. Love Triangle time limit per test1 second memory limit per test256 megabytes Problem Description ...
- JVM——Java类加载机制总结
)解析:解析阶段是把虚拟机中常量池的符号引用替换为直接引用的过程. 2.3 初始化 类初始化时类加载的最后一步,前面除了加载阶段用户可以通过自定义类加载器参与以外,其余都是虚拟机主导和控制.到了初始化 ...
- Python虚拟机类机制之自定义class(四)
用户自定义class 在本章中,我们将研究对用户自定义class的剖析,在demo1.py中,我们将研究单个class的实现,所以在这里并没有关于继承及多态的讨论.然而在demo1.py中,我们看到了 ...
- navicat常用快捷键及注意事项
常用快捷键: 1. ctrl + q: 打开新查询窗口 2. ctrl + r: 运行当前窗口内的所有语句 3. ctrl + w: 关闭当前窗口 4. F6: 打开一个mysql命令行窗口 ---- ...
- 数据库——MySQL进阶
1.索引 2.触发器 3.存储过程 4.函数 5.事务 6.视图 1.索引 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位 ...
- java环境变量配置(Windows & Linux)
前言: java 编程中 java 环境变量设置是开发最基础的要求,今天我们一起来学习相关要点和配置. 做些不太恰当但通俗易懂的比喻(个人理解): java 程序就好比汽车. jre(java 运行环 ...
- hnust 心电图
问题 A: 心电图 时间限制: 1 Sec 内存限制: 128 MB提交: 621 解决: 250[提交][状态][讨论版] 题目描述 众所周知,ACM/ICPC实验室聚集了一堆学霸Orz 有学霸 ...
- LeetCode——Problem3:Longest Substring Without Repeating Characters
哎哟我天啊.这道题快折磨死我了.刚开始连题都没看明白,就是不知道substring是什么意思.研究了好长时间才看出来的. 光辉历史呀...菜死了 1.题目 Given a string, find t ...