Matrix--打乱选择题

本文介绍如何利用伪随机种子生成不同学生看到的不重复选择题打乱顺序。针对同一学生保持唯一打乱方式,通过学号和题目ID的运算确保哈希一致性。并提供了JS实现代码。
摘要由CSDN通过智能技术生成

伪随机种子,生成n个数的随机不重复序列。

需求分析:

做选择题的时候有这样的需求,对于不同的学生,他们要能够看到不一样的打乱方式。但是对于同一个学生,他应该只能有一种打乱方式。

因此,我们需要构造一个函数,它的参数列表类似于这样

@param max 指输入的要打乱的最大数值
@return 0max-1的随机不重复序列。
function (studentId, problemId, max)

用哈希来实现伪随机性。将学号和题目ID做一个运算(这里选择平方和)再取余。
每次选择一个数并将它放到队尾。

js实现代码如下:

/**
 *根据studentid和problemid生成的一个
 *[0 - max-1]的随机不重复序列
 *@author 王镇佳 wzjfloor@163.com
 */
function getRandomArr(studentId, problemId, max) {

  var arr = [];
  var target = [];
  for (let i = 0; i < max; i++) arr.push(i);

  for (let i = 0; i < max; i++) {

    let seed = (studentId * studentId + problemId * problemId) % arr.length;
    // swap
    let temp = arr[seed];
    arr[seed] = arr[arr.length - 1];
    arr[arr.length - 1] = temp;

    target.push(arr.pop());
  }

  return target;

}


console.log(getRandomArr(123, 234, 4));
console.log(getRandomArr(123, 234, 6));
console.log(getRandomArr(123, 234, 10));

console.log(getRandomArr(123, 235, 4));
console.log(getRandomArr(123, 235, 6));
console.log(getRandomArr(123, 235, 10));

console.log(getRandomArr(124, 234, 4));
console.log(getRandomArr(124, 234, 6));
console.log(getRandomArr(124, 234, 10));

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值