分班算法实现过程中的效果以及性能优化

之前在这篇文章:基于班级条件权重表的试探性学生分班算法(详解篇)中介绍过分班算法的理论步骤。

分班算法设计仅仅是给出了一个大致的思路。

其实算法中的很多步骤在实现过程中是可以进一步优化的。

本篇文章记录一下我在实现分班算法的过程中,进行的一些优化,主要包括以下几方面:

1. 单一条件分班时采用循环算法得到最优解
2. 可配置的权重系数计算规则
3. 增加redis锁防止重复分班
4. 引入线程池将分班过程多线程化

单一条件分班时的特殊处理

单一条件分班其实是一种特殊的分班情况,这种情况下的分班结果是有最优解的,达成最优解的分班方式就是将所有学生按照分班条件排序,然后循环分班。……

阅读更多

sprite框架之由来(一)

机缘巧合之下,我写出来了人生中的第一个框架。作为一个后端的研发写出来一个前端的框架,这是一次奇妙的体验,值得我记录下来。

17年年底我开发了人生中的第一个框架,是一个移动端单页web应用框架。为了纪念“这一伟大的壮举”,我家的大宝贝“雪碧”(我养的猫)表示愿意用她的英文名来为框架冠名。同时我家的小宝贝“咖啡”(也是我养的猫)叮嘱我再接再厉,以后要是再开发出新的框架,他可以考虑屈尊也为我冠冠名,对此我表示深感荣幸(鞠躬)。

好了,说正事:

sprite框架的由来

去年11月份的时候,组里的人一起开了个会,部门经理告诉我们到18年的3月底之前,需要产出接近30个移动web应用。……

阅读更多

sprite框架之源码(零)

sprite框架介绍

sprite框架是我自己编写的第一个框架,一个移动端单页web应用轻量级框架。

目前是面向我们公司的后端研发人员的,编写初衷想替代配置繁多,并且强烈依赖node进行调试打包和发布的webpack移动应用框架。

sprite框架的特点在于完全使用es5语法,不依赖于任何服务器,可以放在任意服务器上进行开发和调试,配置很少只需修改一个文件,并且不用打包,开发完成可以直接发布。

技术栈:
require全家桶+vue+vue-router+mint-ui(饿了么移动端组件)+axios+jquery+自己实现的vue路由递归解析器

require全家桶 负责全应用模块……

阅读更多

python 将图片转换成ascii字符画

这是一个有趣的python小程序,可以图片转换成有ascii字符组成的图画。

效果

原图:

转换后:

原图:

转换后:

原图:

转换后:

原理:

使用了python的图片处理库pillow(PIL),使用PIL读取图片的每个像素点,然后采用计算公式将R,G,B三原色的色值计算为灰度值,之后用hash算法将灰度值映射到ascii的字符上去,然后将每个像素对应的字符输出即可生成图片对应的字符图画。

代码:

ascii.py

[code lang=python]
from PIL import Image
import argparse

#命令行输入参数处理
p……

阅读更多

python github上的关于跳一跳python作弊脚本的源码分析

最近跳一跳很火,我自己也玩的不亦乐乎,但是玩了三周了都没能上过400分。

之前就听说有人在github上用python写了辅助脚本来玩跳一跳,我趁着一天在公司吃完饭回来,闲着没事就去下了一份代码,在办公室把python环境搭起来,把依赖的库下好,跑起脚本体验了一把作弊的感觉~

( github项目地址:GitHub 跳一跳python脚本 )

第一把跳了1800多分,成绩也上传了,但是发现在同事那边看不到我的成绩,过了一会再看我这边,成绩也还原了。

难道脚本已经被微信ban掉了?

上网查了跳一跳封外挂的消息以后,看到了张小龙的原话:

“对于外挂来说,其实这种对抗是无止境的,你……

阅读更多

JavaScript 如何获取一个月份的天数

本文介绍一个通过javascript提供的Date对象来获取某一个月的具体天数。

要获取某一个月的具体天数这个问题看似简单,其实是隐含着一些坑的,比如有的月份是31天,有的则是30天,二月份的天数则还需要根据所属年份是不是闰年来判断是28天还是29天。

不过幸好javascript的Date对象可以帮助我们比较轻松的解决这个问题:

Date对象具有一个构造函数,一般我们都是这样使用的:

var date = new Date();
//Sun Jan 07 2018 10:41:00 GMT+0800 (中国标准时间)

当无参调用Date的构造函数时,会获得一个值为当前系统时间的D……

阅读更多

python 一个简单的猜数字小游戏

先介绍下游戏规则:

系统随机生成一个四位数字符串,每一位都由数字(0~9)组成,如 0123 5678 4679等(数字不会重复)
玩家有5次机会,每次输入长度为4的数字,系统给出匹配信息
如:
系统生成的字符串为 1234
(A代表这一位数猜对了,B代表这一位没猜对,但这个数字存在于答案中,X代表这个数字不存在于答案中)
玩家输入 1389 则匹配信息为 ABXX
玩家输入 1436 则匹配信息为 ABAX
玩家输入 1432 则匹配信息为 ABAB
玩家输入 1234 则匹配信息为 AAAA 则此时游戏成功
如果当输入次数达到指定的次数上限(可自行配置,一般取10次)后仍然匹配失败,则……

阅读更多