一个简单的靓号判断及等级评判算法

发布于:2025-08-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

规则

3(顶级)

  • 重复序列:5A、6A、7A(如:88888、666666、1111111)、特殊 4A (仅 6666、8888)
  • 连续序列:5顺、6顺、7顺(如:12345、345678、7654321)
  • 特殊模式:AABBCC、AAABBB(如:112233、444555)

2(精品)

  • 重复序列:普通 4A(如:1111、0000,不包含 6666、8888)
  • 连续序列:4顺(如:1234、5432)
  • 特殊模式:ABCABC(如:123123、789789)

1(优质)

  • 重复序列:3A(如:333、777)
  • 连续序列:3顺(如:123、765)
  • 特殊模式:AABB、ABAB(如:2266、3535)
  • 爱情数字:1314、520、521

号码判断函数,输入一个 5-7 位数字。输出结构:

  • 等级:(1-3 数字为靓号等级,0 为非靓号)
  • 是否包含 4: boolean
  • 需要高亮的的数字区域: number
  • 满足的靓号规则: 5A、5 顺等

其他

普通号码

代码实现

举例说明

  • 重复序列:3A、4A、5A 等(如果是特殊数字 6或 8 的重复序列则为 3AA、4AA 格式)
  • 连续序列:4S、5S、6S 等,如果是倒顺数字则使用 T,例如:5ST、6ST 等
  • 特殊模式:AABB、ABCABC、AABBCC 等
  • 爱情数字:L

定义结果

interface JudgeResult {
   
   
  // 等级
  grade: number;
  // 是否包含4
  has4: boolean;
  // 需要高亮的的数字区域下标
  highlight: [number, number] | null;
  // 满足的靓号规则
  rule: string;
}

实现代码

interface JudgeResult {
   
   
  // 等级
  grade: number;
  // 是否包含4
  has4: boolean;
  // 需要高亮的的数字区域下标
  highlight: [number, number] | null;
  // 满足的靓号规则
  rule: string;
}

/*
  举例说明:
  重复序列:3A、4A、5A 等(如果是特殊数字 6或 8 的重复序列则为 3AA、4AA 格式)
  连续序列:4S、5S、6S 等,如果是倒顺数字则使用 T,例如:5ST、6ST 等
  特殊模式:AABB、ABCABC、AABBCC 等
  爱情数字:L
 */

// 定义规则接口
interface Rule {
   
   
  name: string;
  grade: number | ((s: string) => number);
  match: (numberStr: string) => RegExpExecArray | null;
  getRuleName?: (match: RegExpExecArray, numberStr: string) => string;
  getHighlight?: (match: RegExpExecArray) => [number, number];
  priority: number; // 优先级,数字越小优先级越高
}

/**
 * 生成重复序列的正则表达式
 * @param length 重复长度
 * @param isSpecial 是否为特殊数字(6或8)
 */
function generateRepeatRegex(length: number, isSpecial = false): RegExp {
   
   
  if (isSpecial) {
   
   
    // 特殊数字重复序列 (6或8重复)
    return new RegExp(`([68])\\1{
    
    ${
     
     length - 1}}`, 'g');
  }
  // 普通数字重复序列
  return new RegExp(`(\\d)\\1{
    
    ${
     
     length - 1}}`, 'g');
}

/**
 * 检查是否为连续序列
 * @param numberStr 数字字符串
 * @param isAscending 是否为升序
 */
function isConsecutiveSequ

网站公告

今日签到

点亮在社区的每一天
去签到