
实践记录
文章平均质量分 73
nan
Hellsegamosken
I want to put a ding in the universe.
展开
-
银行排队大作业实验报告
首先,附加题的目标和普通版的目标不能保证在特殊数据下被同时满足(如果按照普通版要求,一个窗口,两个普通客户,后面密集的来 VIP 客户,那么第二个普通客户需要等待很久很久)。因此我们必须要牺牲 VIP 的部分权益(不能无限插队)来提升普通用户体验,通过计算,每个顾客的期望等待时间可能是递增的,即越后面来的客户会等越久(比如如果期望服务时间大于顾客到来的期望间隔时间,那么可以证明顾客的期望等待时间不小于某个等差数列,证明略)。因此直接计算等待时间的方差或者平均值是不合理且没有意义的,不能作为评判程序好坏的原创 2021-02-18 20:10:13 · 1130 阅读 · 1 评论 -
分支预测器实验简述
本来没打算写的,一是因为最近太忙了,二是因为这个东西太玄学了,很多地方都在吊打我的常识。开始做的时候已经是提交当天下午了(当时还没有延期的通知),所以前面没做好数据记录。拿到代码以后我首先试了很多种平凡的改法,比如 PC xor ghr 改为 (PC << 2) xor ghr 之类的,改进不大,大多数情况下都要比基本的 gshare 劣。然后实现了一个仅用局部历史的预测器,测量几组数据发现比 gshare 优秀。嗯,很好。然后我又写了个预测器来选择是采纳局部信息的预测器还是全局信息的预测器原创 2022-03-29 16:13:54 · 1152 阅读 · 8 评论 -
保姆级缓冲区炸弹破解教程
四个关卡本身不算难,而且有提示,在已经有二进制炸弹基础的情况下这绝对是保姆级教程了。但是有个非常鬼畜的第 0 关。我刚上手的时候就开始做第 0 关,结果做了一个多小时还是不能再不劫持控制的情况下过关,没想到后面的关卡反而简单了。建议通关顺序:1-2-3-0-4。先不管第几关第几关,先把程序的栈结构理一下:嗯,还是比较清楚的。我们开始写入的地方就是 buf。注意用 _alloca 在栈中申请空间字节数量是 4 的倍数(当然在动调下这些都不是问题):第一个木马最后是调用了 exit(0),因此无需维原创 2022-03-14 20:23:35 · 1961 阅读 · 6 评论 -
非保姆级二进制炸弹破解分析
本文采用静态分析的方法,即通过阅读反汇编代码理清程序运行逻辑,通过写脚本得到密码。与之相对地也可以采用动态调试,即在 ida 里面设断点,通过修改寄存器信息等绕过一些爆炸点,类似直接在内存里看答案。我不会把整个破解过程分析一遍,只重点分析一些宏观的思路以及容易卡住的点,最后分析了下彩蛋的不同解法。保姆级教程见 [Blu3m00n's Blog](https://blu3m00n.top/2022/02/22/%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%82%B8%E5%BC%B9%E5%8原创 2022-03-07 16:58:06 · 1243 阅读 · 1 评论 -
一个wordle小挂
前段时间看到了 wordle 这个游戏,觉得挺有意思。我刚开始的策略是前几个词尽可能把 26 个字母覆盖改一遍,然后最后一次机会就是一个排列组合的问题了。这样做一是因为我想要猜中的把握大一点(非酋实惨);二是因为我没有对可猜测单词集合的整体认识,不知道猜哪个词能筛选掉更多的不合法答案。今晚趁着背不进近代史,刚好思考了一下,顺便写了写。初步想法首先可以从源码里找到合法的长度为 5 的单词(记为 validWords)以及可能出现的答案(记为restWords)。一个自然的想法是先建一棵至多六层的决策树,原创 2022-02-28 09:04:44 · 3594 阅读 · 0 评论 -
[SystemVerilog] MIPS架构下的五级流水线CPU设计
众所周知,MIPS体系的五级流水线CPU分为五个阶段:取指(IF)、译码(ID)、执行(EX)、存储器(MEM)、写回(WB)。可以发现节点数比较多,为了减少出错(对自己静态调试能力较为自信.jpg),那么程序的框架就显得比较重要了。我采用了按阶段划分的方式,每个阶段一个模块,然后ALU、内存、寄存器文件又单列出来,最后在顶层处理模块间的连线,同时完成冲突模块的设计。原创 2022-01-26 20:25:12 · 4249 阅读 · 0 评论 -
[SystemVerilog] 基于 FPGA 的数字钟设计
本文使用 SystemVerilog 语言在 Basys3 开发板上实现了带时钟、倒计时、闹钟、秒表、日期、日期/时间设定功能的数字钟。整体思路上,为避免除法器的使用,每个数位设置一个寄存器。有五套并行的(类)计时系统,分别存放时钟、倒计时、闹钟、秒表、日期的信息。- **控制模块** 接受分频后的时钟信号,把输入引脚的信息译码。- **主逻辑** 接受原始时钟信号。 - 处理时钟自增、倒计时自减、秒表自增、日期自增 - 处理时钟、倒计时、日期的设定原创 2022-01-06 11:18:16 · 2571 阅读 · 2 评论 -
一种解决药店卖药问题的新思路
解决这道药店卖药问题最普遍也是最容易想到的做法是贪心求解,然而本题多限制之间相互作用,关系复杂,因此简单的贪心难以找到十分优秀的解。本文提供了一种不同的思路,从新的角度对这个问题进行思考,设计了新的算法,并且详述了算法主要思路产生过程及其合理性。实际运行结果优秀,随机数据下(也许大概率)能找到全局最优解。报告注重思路的分析和证明,实现部分稍简略,具体可见代码。原创 2022-01-05 09:28:24 · 3762 阅读 · 7 评论 -
selenium实现优快云自动评论
写在前面鄙人不才,博客访问数寥寥,仅有的几个评论还几乎都是来捞经验的。于是乎我便写了一个给别人博客评论的脚本,讲究个礼尚往来。主要的步骤分为:获取博客链接 - 登录 - 评论。前置操作需要用到 selenium 和 Beautifulsoup 两个库,通过以下命令安装:pip install seleniumpip install beautifulsoup4另外还需要安装 Chromedriver,网上已经说得很详细了,解压后把 .exe 放在 python 目录下即可。selenium原创 2021-02-19 18:44:04 · 1152 阅读 · 14 评论 -
能邀请你来看烟花吗
先看效果flag 不倒的 flag 终于没倒!这个我是在一个现成的网站的基础上优化而成的。那个三百多行代码没有一个注释,还有很多逻辑十分奇怪,看得我好辛苦。但还是非常感谢它,我的很多参数是基于这个网站设定的,如果让我自己猜还不知道要多久。这个玩意的 3D 效果是完全通过手写写出来的,就是每个粒子都有三维坐标,绘制的时候再投影到某个平面上。应该还有更高级的工具来制作 3D 效果。HTML 部分网页的结构非常简单,只需要布置一个 <canvas> 元素,其余的操作都在 JS 里面实现:&原创 2021-02-09 21:30:00 · 349 阅读 · 2 评论 -
用opencv把小照片合成大照片
这效果实在是不知道该怎么描述…放一张著名的海报(楚门的世界),大概就这意思。放大看细节:正好大计课上提到了 opencv,顺便搞一下。假设,我们已经通过一顿操作获得了相同尺寸的背景图(bg)和前景图(fg),那么一个自然的想法就是把图片加权合并起来,也就是:,其中 alpha,beta 分别代表权重,gamma 代表合成图片的偏移量(也就是明暗)。# 合并图片cv2.addWeighted(fg, alpha, bg, beta, gamma)# alpha,beta 分别代表权重,gam原创 2021-01-09 15:29:43 · 1358 阅读 · 0 评论 -
还算不错的五子棋伪AI
所以我为什么要用 python 写这个鬼玩意,导致现在搜三层有余搜四层搜不出来的尴尬境地。核心就是简单的 min-max 搜索。那么每次我们需要评估每次落子后局面的价值。对于五子棋来说,这个价值和有多少活二、活三之类棋型的数量有关,对于一个局部的某一方向上的棋型,我大概分成了十种情况,用 `number, potential, sides` 三个参数来进行描述,分别表示极大相连棋子数,是否有连成五子的潜力,以及自由端(没被地方堵死或者碰到边界)的数量。对于不同的三元组,给予不同的价值,那么整个局面的价值原创 2020-12-27 18:43:59 · 1701 阅读 · 0 评论 -
利用python爬虫下载小说
回想当初自学Python很大一部分原因是想要自己爬数据,今天终于学会了怎么下载小说。于是搞了一波《球状闪电》。需要用到两个库:requests 和 BeautifulSoup,用 pip 安装即可。主要的步骤是:利用 requests.get(url) 获取网页信息。注意如果中文出现乱码,就加上 edcoding = '*',其中星号代表 html 解码方式,通常在 head 里面的 charset 可以找到。通过审查元素找到想要抓取内容的路径(右击正文部分打开检查即可)利用 find_all(原创 2020-10-20 23:45:38 · 1059 阅读 · 1 评论 -
第一次简单实现神经网络
好久不见!推荐知乎上的三篇回答:一 二 三关于反向传播:https://my.oschina.net/90888/blog/1584009搞了一下午终于搞懂了神经网络的基本基本基本原理。上面说的 45 分钟搞懂真的是太搞了。于是临摹了某位大神的代码(一模一样)并做了些解释。这个两层的网络主要任务是根据读入的身高体重来判断男女。我们都知道,神经网络的每个节点的输出是前一层的每个节点的输出的加权和,加上某个偏置,再经过激活函数得到的。经过激活函数的目的是使运算变得不再线性,否则无论多少层的神经网络都可以原创 2020-10-15 10:16:04 · 738 阅读 · 1 评论