Quantcast
Channel: 知乎日报
Viewing all articles
Browse latest Browse all 20608

你有哪些用计算机技能解决生活问题的经历?

$
0
0

日报标题:用了一点计算机技能,整个生活都不一样了

薛易清,喜爱艺术的程序员

最近沉迷于和一个汉子聊天(都懂的)。然而汉子太忙,我又实在把持不住自己每次都秒回消息,实在是太不高冷.

于是昨晚花了一小时写了个 Chrome 插件来控制自己不要秒回……

因为是 messenger 插件所以是英文的。翻译如下:

我可以回复了吗?_(:з」∠)_
Ծ‸Ծ

...等 2 分钟再回更好哦 ( ´・_・` )

简单的说就是统计两边回复消息的速度,并给出应该再假装高冷多久的实用建议

。。

。。

机智如我( • ̀ω•́ )✧

。。

然而汉子依然经常好几个小时才回复

请不要告诉我真相……

第一次写 chrome 插件特别 hacky 然而不要脸如我依然放 github 上了……各位姑娘汉子欢迎拿去提升逼格 GitHub - hanax/should-i-reply: A chrome extension for you to decide when to reply to fb messages

 

well turns out that 小哥号称没女朋友然而其实他“忙”的时候在和女朋友吃饭……

感觉是不是该写个 machine learning 来根据回消息时间判断对方是否有劈腿?像这种几小时回一下消息的汉子就应该直接建议“请拉黑”?

……让我先哭一会

叶飞影,专业画圈圈

前几天,从朋友那里顺来一套玩具:超市购物收银机。我家宝宝看到了非常喜欢。可是玩了一会宝宝就不高兴了,因为物品中少了一个香蕉。当提示要刷香蕉时,宝宝找不到就不能愉快地玩耍了。趴在地上哇哇大哭起来:“香蕉呢?香蕉被谁吃了?香蕉去哪了?为什么没有香蕉?怎么就没有香蕉?”

为了能让宝宝继续愉快地玩耍,我就分析这个玩具。收银机的扫描器有四个传感口,可以接受 4 个二进制的信号。

每个货物的都有四个黑白的格子,用于表示 4 个二进制码。由于可以左右镜像,所以有的货物有两组数码表示,如苹果二进制码是 1000 和 0001(下图右下角红色的,很像屁股的那个东西就是苹果)。

有着对计算机多年研究底蕴的我,很快就发现缺失香蕉的二进制码是 1011 和 1101。于是我做了个如下卡片:

用它来表示香蕉,有了它之后,我家宝宝又能愉快地玩耍了。

王迪

某天,家父加班晚归,在饭桌上感叹工作之不易。我随口一问,问题来源于水果手机出新品的时候,需要将手里的货分配给若干个代理商。每个代理商都提出了需求(某种机型需要多少台),然而因为资源有限,公司给每个代理商设置了一个分配上限(分配给这家代理商的手机总数不能超过上限)。代理商大概有几百家,水果手机按颜色、内存、尺寸也能分出十几种,总库存上千。家父与其伙伴每次都手动分配、调整,有时甚至需要数个小时,十分无奈。

-- Version 0 --

我一看,这不妥妥的最大流吗,建立一个二部图,一侧表示手机机型,另一侧表示代理商。手机存货量通过源点到手机机型的边控制,代理商上限通过代理商到汇点的边控制,代理商需求用手机机型和代理商间的连边控制,不就可以了吗?

-- Version 1 --

家父便给了我一个以前的任务来测试。当然不到一秒就跑出结果来了。但是,家父指出一个问题,就是不同代理商的优先级是不一样的,配额高的代理商,应该优先分配。

再一看,哟,妥妥的最小费用最大流啊,给每个流赋一个权重,流向不同的代理商有不同的权重,完美。

-- Version 2 --

家父表示这次的结果能看了许多,但仍然有一个问题:这样分配出来,一个代理商往往会得到特别多的某种机型,而其余机型则一台都得不到,这个在现实中也不太合理。

唔,这次要求流向统一代理商的不同机型尽量均匀啊。这个我没想到特别优雅的解决方案,我只是稍微改了一下算法的实现:在上面的算法中,每一轮计算都会尽可能分配一堆某种手机给同一代理商,于是我改成了每次计算只分配一台,而且在有多种方案时随机选择一种。

这样跑出来的结果就合理多啦!不过效率低了不少,大概得跑半分钟吧。

-- Version 3 --

算法上的改进就没有啦,不过毕竟不能让家父在终端跑程序,所以拿 C#撸了个界面,读入某种格式的 csv 文件,算出结果填到 csv 里再输出出去(讲道理在 Excel 里写 vba 估计也行,不过我之前算法拿 C++ 写的,改 C#容易些)。最后从网上抄了个进度条,用户体验 max!

从此以后,家父与其伙伴可以在半个小时内解决问题(毕竟还要微调一下,数据录入之类的)。

-- 分割线 --

这个故事告诉我们,学算法还是有用的!

-- 再次分割 --

13 年我回高中夏令营演讲的时候,我将编程这一技能比喻为信息时代的驾驶,每个人能可以并且应该去学习、掌握。有趣的是,当时收到一份反馈,说驾驶不仅仅是技能,它还可以给人以愉悦之享受。今天回过头来看这个反馈,突然明白了,这种愉悦某种程度上源自于你获得的操控感。可巧的是,编程也可以带来极强的操控感。在信息时代,对手中数据的操控能力是极为重要的。

知乎用户,高三。精进中。

高中生,第一次看到了一个可以回答的问题。

浙江的,从今年开始,教育厅不把成绩打包发给学校了……可是,学校需要知道所有学生的学考选考成绩才能做决策啊!!

怎么办呐?

我的学校是这样解决的:自己周末查好自己的成绩,记住。

返校后,填在一张表格上。

每个班拎一个人出来录入本班的成绩。

我是录入的人之一啊……过于痛苦,因为每个人的学考选考考试都是不一样的。找对应的格子眼睛都酸了。

当时(一个月前),正好激情澎湃想学一点爬虫。然后直接干上了。

因为学校有所有学生的身份证,又会有所有的准考证,那么理论上,是可以用程序一下子查完全校所有学生的成绩的。

于是开始写程序。

开始什么都不懂,python 都没碰过,连爬虫是什么都不知道。

然后用少的可怜的课余时间上网自学。

开始弄清 HTTP、HTML、python 语法。

程序是这么设定的:

给它一个有对应身份证和准考证号码的 excel 文件,自动输出查询结果。

现在已经 100%完成了,学校领导表示很高兴,说今年高考的时候让我试试。

写代码时的插曲:

1、发现验证码是在 HTTP response 里面明文写着的。当时激动跪了。估计只有政府网站才会这样吧。用 chrome 看 request 和 response 的 header 和表单数据,发现出奇的简单。于是没有引入处理 cookie 的库,直接在程序里用 python 强大的文本操作能力解决了。

2、浙江省教育考试院的服务器有一定的反爬机制,所以只能两秒钟获取一个数据才不会被拒掉。

3、自己一个人潜下心来干的时候,效率是最高的。

用批处理运行 pip install 自动安装库,自动运行主程序。

贴代码图一张:

成果:

(已经隐藏第一列的准考证号,删除了第一行对应的科目。这些数据不是我们学校的,它们范围更广。)

运行的时候:

傻傻的批处理:

主要功能:

1、支持断点,每一次打开都会检测上一次下载到哪里。

2、容错。有关文件的、有关网络的错误都会给出提示,不会爆掉

这便是人生中第一个有使用价值的程序。

现在高二。想进 ZJU 计算机系。


Viewing all articles
Browse latest Browse all 20608

Trending Articles