diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..a007fea --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +build/* diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..991aab5 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,80 @@ +module.exports = { + 'env': { + 'browser': true, + 'es2020': true, + 'node': true + }, + 'extends': [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended' + ], + 'parser': '@typescript-eslint/parser', + 'parserOptions': { + 'ecmaVersion': 6, + 'sourceType': 'module' + // 'project': './tsconfig.json', + }, + 'plugins': [ + '@typescript-eslint' + ], + + /** + * 规则写法 + * 1、'quotes': 0; -- 0关闭,1警告,2错误 + * 2、'quotes': 'off'; -- off关闭,warn警告,error错误 + * 3、'quotes': ['error', 'single']; 'error'是提示类型,'single'是参数。参数不止一个的时候写成{} + */ + 'rules': { + // 是否检查变量已申明但未使用:警告。 + '@typescript-eslint/no-unused-vars': ['warn'], + // 强制单引号:开启,自动修正 + 'quotes': 0, + // 强制分号:js 关闭,ts 强制分号。 + 'semi': ['off'], + // 'semi': ['off'], + // 定义变量时自动类型推断:关闭 + '@typescript-eslint/no-inferrable-types': ['off'], + // 强制const:关闭 + 'prefer-const': ['off'], + // 不允许空函数:关闭 + '@typescript-eslint/no-empty-function': ['off'], + // 禁止特定类型:关闭。 PS:如果打开 Function 类型会报错 + '@typescript-eslint/ban-types': ['off'], + // 禁止多余的分号:关闭。 PS:打开后,某些大括号结束加分号会报错 + '@typescript-eslint/no-extra-semi': ['off'], + // 检查函数是否有返回值:警告。 PS:有些老代码没有返回值,历史包袱重,暂时不强制报错 + '@typescript-eslint/explicit-module-boundary-types': ['warn'], + // 禁止给变量赋值为 this:关闭。 + '@typescript-eslint/no-this-alias': ['off'], + // 禁止使用 requires:关闭。 + '@typescript-eslint/no-var-requires': ['off'], + // 检测无法访问的代码:关闭。 PS:有时候需要用 return 注释掉后面的代码 + 'no-unreachable': ['off'], + /** + * 是否可以直接调用对象方法:关闭。 + * PS:暂时关闭。目前写法:myObject.hasOwnProperty('name') ,推荐写法:Object.prototype.hasOwnProperty.call(foo, "bar") + */ + 'no-prototype-builtins': ['off'], + // 是否允许函数内定义函数:关闭。 + 'no-inner-declarations': ['off'], + // 不允许判断条件写死:关闭。 PS:打开后,if(false){} 这种判断语句会报错 + 'no-constant-condition': ['off'], + // get 和 set 是否必须放在一起:关闭。 + '@typescript-eslint/adjacent-overload-signatures': ['off'], + "no-async-promise-executor": ['off'] + }, + // 如果有 js 和 ts 需要分开指定的规则,就 js 写 rules 里,ts 写 overrides 里 + 'overrides': [{ + // enable the rule specifically for TypeScript files + 'files': ['*.ts', '*.tsx'], + 'rules': { + // 强制分号:开启,自动修正 + 'semi': ['error', 'always'], + // '@typescript-eslint/explicit-module-boundary-types': ['error'] + } + }], + // 定义全局变量 + 'globals': { + 'Global': true + } +}; diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c32e99..51cfd50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## version 2.0.0 +- 重构 +- 现在会从[zerotrac.github.io](https://zerotrac.github.io/leetcode_problem_rating/data.json)获取数据进行缓存 +- 登录选择优化 ## version 1.1.10 - 更新数据 diff --git a/LICENSE b/LICENSE index 9bde961..50e6cda 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020-present ccagml +Copyright (c) 2022-present ccagml Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 1c56567..c97ebb1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - 增加剑指Offer、面试金典相关内容 - 增加一键提交全部题目测试用例功能 - 尝试不需要额外安装node环境,使用vscode自带的node版本 +- 从[zerotrac.github.io](https://zerotrac.github.io/leetcode_problem_rating/data.json)获取数据进行缓存,数据更新时,可以尝试使用deleteAllCache,重新获取数据 # 关于本项目 - [项目地址:https://github.com/ccagml/vscode-leetcode-problem-rating/](https://github.com/ccagml/vscode-leetcode-problem-rating/) @@ -26,8 +27,6 @@ - [疑难解答](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94) - [常见问题](https://github.com/LeetCode-OpenSource/vscode-leetcode/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) - 趁着现在只有提交一个PR就能成为项目元老了 -- 每周当[zerotrac](https://github.com/zerotrac/leetcode_problem_rating/)项目更新数据data.json,可以将新数据放到本项目的resources/data.json即可提交PR -- 为什么不改成自动获取data.json,因为上一点 ## 快速开始 ![quickstart](https://www.ccagml.com/wp-content/uploads/2022/10/quickstart.gif) @@ -37,6 +36,17 @@ ![search](https://www.ccagml.com/wp-content/uploads/2022/10/search.gif) + + ## ❗️ 注意 ❗️- 无法登录 LeetCode 节点的临时解决办法 > 注意:如果使用的是 `leetcode.cn` 账户,可以跳过此段落。 diff --git a/_config.yml b/_config.yml index c419263..277f1f2 100644 --- a/_config.yml +++ b/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-cayman \ No newline at end of file +theme: jekyll-theme-cayman diff --git a/delete.sh b/delete.sh index dd25334..d434e23 100755 --- a/delete.sh +++ b/delete.sh @@ -1,2 +1,2 @@ -rm -rf ~/.lc +rm -rf ~/.lcpr rm -rf ~/.vscode-server/extensions/ccagml* diff --git a/package-lock.json b/package-lock.json index 888f16e..6cdb985 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-leetcode-problem-rating", - "version": "1.1.8", + "version": "1.1.9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-leetcode-problem-rating", - "version": "1.1.8", + "version": "1.1.9", "license": "MIT", "dependencies": { "ansi-styles": "3.2.1", @@ -22,7 +22,6 @@ "ora": "3.0.0", "prompt": "^1.2.0", "request": "2.88.0", - "require-from-string": "^2.0.2", "underscore": "1.12.1", "unescape-js": "^1.1.4", "wordwrap": "1.0.0" @@ -32,11 +31,13 @@ "@types/lodash": "^4.14.170", "@types/markdown-it": "0.0.7", "@types/node": "^14.14.33", - "@types/require-from-string": "^1.2.0", "@types/vscode": "1.57.0", + "@typescript-eslint/eslint-plugin": "^5.42.1", + "@typescript-eslint/parser": "^5.42.1", "chai": "4.2.0", + "eslint": "^8.27.0", "tslint": "^5.20.1", - "typescript": "^4.3.2" + "typescript": "^4.8.4" }, "engines": { "vscode": "^1.57.0" @@ -85,6 +86,109 @@ "node": ">=0.1.90" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -94,6 +198,12 @@ "@types/node": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "node_modules/@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -121,10 +231,10 @@ "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", "dev": true }, - "node_modules/@types/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-mIDK7lTHc0uW67SxPIqkwCrxmdKBV5aAET560hyZnT8c6Ekp9Aah3GPqe8Pl1Yzn/i2NMYmYv+HiMLwjGDCIAQ==", + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "node_modules/@types/vscode": { @@ -133,6 +243,304 @@ "integrity": "sha512-FeznBFtIDCWRluojTsi9c3LLcCHOXP5etQfBK42+ixo1CoEAchkw39tuui9zomjZuKfUVL33KZUDIwHZ/xvOkQ==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.42.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -172,6 +580,15 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -249,6 +666,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -258,6 +687,15 @@ "node": ">=0.10.0" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -443,6 +881,20 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -488,6 +940,23 @@ "node": ">=0.10" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -500,6 +969,12 @@ "node": ">=0.12" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -528,6 +1003,30 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -620,19 +1119,338 @@ "node": ">=0.8.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -659,11 +1477,113 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -755,11 +1675,64 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -845,8 +1818,42 @@ "sshpk": "^1.7.0" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" } }, "node_modules/inflight": { @@ -885,6 +1892,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -893,16 +1909,58 @@ "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -946,6 +2004,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -976,6 +2040,19 @@ "node": ">=0.6.0" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", @@ -984,11 +2061,32 @@ "uc.micro": "^1.0.1" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -1000,6 +2098,18 @@ "node": ">=4" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -1028,6 +2138,28 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1095,11 +2227,29 @@ "node": "*" } }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/nconf": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.4.tgz", @@ -1153,6 +2303,23 @@ "node": ">=4" } }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ora": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", @@ -1169,6 +2336,48 @@ "node": ">=6" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse5": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", @@ -1192,6 +2401,15 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1201,12 +2419,30 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -1221,6 +2457,27 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prompt": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", @@ -1259,6 +2516,26 @@ "node": ">=0.6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -1270,6 +2547,18 @@ "node": ">=0.8" } }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -1309,14 +2598,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -1334,6 +2615,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -1346,6 +2636,16 @@ "node": ">=4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/revalidator": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", @@ -1354,6 +2654,44 @@ "node": ">= 0.4.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1392,11 +2730,41 @@ "semver": "bin/semver" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1483,6 +2851,18 @@ "node": ">=4" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1499,11 +2879,29 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "engines": { - "node": ">= 0.4" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0" } }, "node_modules/tough-cookie": { @@ -1594,6 +2992,18 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -1603,6 +3013,18 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", @@ -1688,6 +3110,21 @@ "defaults": "^1.0.3" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/winston": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", @@ -1709,6 +3146,15 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -1793,6 +3239,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -1817,6 +3269,18 @@ "engines": { "node": ">=10" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -1851,6 +3315,83 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -1860,6 +3401,12 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -1887,10 +3434,10 @@ "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", "dev": true }, - "@types/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-mIDK7lTHc0uW67SxPIqkwCrxmdKBV5aAET560hyZnT8c6Ekp9Aah3GPqe8Pl1Yzn/i2NMYmYv+HiMLwjGDCIAQ==", + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "@types/vscode": { @@ -1899,6 +3446,179 @@ "integrity": "sha512-FeznBFtIDCWRluojTsi9c3LLcCHOXP5etQfBK42+ixo1CoEAchkw39tuui9zomjZuKfUVL33KZUDIwHZ/xvOkQ==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.42.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1928,6 +3648,12 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -1996,12 +3722,27 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2150,6 +3891,17 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -2180,6 +3932,15 @@ "assert-plus": "^1.0.0" } }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -2189,6 +3950,12 @@ "type-detect": "^4.0.0" } }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -2208,6 +3975,24 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -2250,25 +4035,213 @@ "safer-buffer": "^2.1.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "eslint": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } }, "esprima": { "version": "4.0.1", @@ -2276,6 +4249,52 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2296,11 +4315,94 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2371,11 +4473,49 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -2435,6 +4575,28 @@ "sshpk": "^1.7.0" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2465,21 +4627,60 @@ "has": "^1.0.3" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2522,6 +4723,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2547,6 +4754,16 @@ "verror": "1.10.0" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", @@ -2555,11 +4772,26 @@ "uc.micro": "^1.0.1" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -2568,6 +4800,15 @@ "chalk": "^2.0.1" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -2592,6 +4833,22 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2635,11 +4892,29 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "nconf": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.11.4.tgz", @@ -2681,6 +4956,20 @@ "mimic-fn": "^1.0.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "ora": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", @@ -2694,6 +4983,33 @@ "wcwidth": "^1.0.1" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse5": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", @@ -2711,18 +5027,36 @@ "parse5": "^7.0.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -2734,6 +5068,18 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "prompt": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", @@ -2768,6 +5114,12 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -2776,6 +5128,12 @@ "mute-stream": "~0.0.4" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -2808,11 +5166,6 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -2824,6 +5177,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -2833,11 +5192,35 @@ "signal-exit": "^3.0.2" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "revalidator": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==" }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -2859,11 +5242,32 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2929,6 +5333,12 @@ "ansi-regex": "^3.0.0" } }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2943,6 +5353,21 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -3012,12 +5437,27 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", @@ -3085,6 +5525,15 @@ "defaults": "^1.0.3" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "winston": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", @@ -3105,6 +5554,12 @@ } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -3167,6 +5622,12 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -3185,6 +5646,12 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 5b3fd70..ceb8cdb 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-leetcode-problem-rating", "displayName": "LeetCode problem rating", "description": "为LeetCode题目难度进行打分。避免只有简单、中等、困难三种难度", - "version": "1.1.10", + "version": "2.0.0", "author": "ccagml", "publisher": "ccagml", "license": "MIT", @@ -29,7 +29,6 @@ "onCommand:leetcode.toggleLeetCodeCn", "onCommand:leetcode.signin", "onCommand:leetcode.signout", - "onCommand:leetcode.manageSessions", "onCommand:leetcode.refreshExplorer", "onCommand:leetcode.pickOne", "onCommand:leetcode.deleteAllCache", @@ -67,11 +66,6 @@ "title": "Sign Out", "category": "LeetCode" }, - { - "command": "leetcode.manageSessions", - "title": "Manage Sessions", - "category": "LeetCode" - }, { "command": "leetcode.refreshExplorer", "title": "Refresh", @@ -773,22 +767,22 @@ "@types/lodash": "^4.14.170", "@types/markdown-it": "0.0.7", "@types/node": "^14.14.33", - "@types/require-from-string": "^1.2.0", "@types/vscode": "1.57.0", + "@typescript-eslint/eslint-plugin": "^5.42.1", + "@typescript-eslint/parser": "^5.42.1", + "chai": "4.2.0", + "eslint": "^8.27.0", "tslint": "^5.20.1", - "typescript": "^4.3.2", - "chai": "4.2.0" + "typescript": "^4.8.4" }, "dependencies": { + "ansi-styles": "3.2.1", + "cheerio": "1.0.0-rc.12", "fs-extra": "^10.0.0", + "he": "1.2.0", "highlight.js": "^10.7.2", "lodash": "^4.17.21", "markdown-it": "12.3.2", - "require-from-string": "^2.0.2", - "unescape-js": "^1.1.4", - "ansi-styles": "3.2.1", - "cheerio": "1.0.0-rc.12", - "he": "1.2.0", "mkdirp": "^1.0.4", "moment": "^2.29.1", "nconf": "^0.11.2", @@ -796,6 +790,7 @@ "prompt": "^1.2.0", "request": "2.88.0", "underscore": "1.12.1", + "unescape-js": "^1.1.4", "wordwrap": "1.0.0" } } diff --git a/resources/bin/leetcode b/resources/bin/leetcode index 719ac70..eab3991 100755 --- a/resources/bin/leetcode +++ b/resources/bin/leetcode @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../../out/src/vsc-leetcode-cli/new_lib/cli'); +require('../../out/src/childProcessCall/cli'); diff --git a/resources/data.json b/resources/data.json index 8bf382d..0703c47 100644 --- a/resources/data.json +++ b/resources/data.json @@ -3,661 +3,672 @@ "Rating": 3018.4940165727, "ID": 1719, "Title": "Number Of Ways To Reconstruct A Tree", - "TitleZH": "\u91cd\u6784\u4e00\u68f5\u6811\u7684\u65b9\u6848\u6570", + "TitleZH": "重构一棵树的方案数", "TitleSlug": "number-of-ways-to-reconstruct-a-tree", "ContestSlug": "biweekly-contest-43", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 43", - "ContestID_zh": "\u7b2c 43 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 43 场双周赛" }, { "Rating": 2872.0290327119, "ID": 1982, "Title": "Find Array Given Subset Sums", - "TitleZH": "\u4ece\u5b50\u96c6\u7684\u548c\u8fd8\u539f\u6570\u7ec4", + "TitleZH": "从子集的和还原数组", "TitleSlug": "find-array-given-subset-sums", "ContestSlug": "weekly-contest-255", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 255", - "ContestID_zh": "\u7b2c 255 \u573a\u5468\u8d5b" + "ContestID_zh": "第 255 场周赛" }, { "Rating": 2863.1378294349, "ID": 770, "Title": "Basic Calculator IV", - "TitleZH": "\u57fa\u672c\u8ba1\u7b97\u5668 IV", + "TitleZH": "基本计算器 IV", "TitleSlug": "basic-calculator-iv", "ContestSlug": "weekly-contest-68", "ProblemIndex": "Q5", "ContestID_en": "Weekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u5468\u8d5b" + "ContestID_zh": "第 68 场周赛" }, { "Rating": 2849.4841858619, "ID": 1728, "Title": "Cat and Mouse II", - "TitleZH": "\u732b\u548c\u8001\u9f20 II", + "TitleZH": "猫和老鼠 II", "TitleSlug": "cat-and-mouse-ii", "ContestSlug": "weekly-contest-224", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 224", - "ContestID_zh": "\u7b2c 224 \u573a\u5468\u8d5b" + "ContestID_zh": "第 224 场周赛" }, { "Rating": 2817.267212602, "ID": 1977, "Title": "Number of Ways to Separate Numbers", - "TitleZH": "\u5212\u5206\u6570\u5b57\u7684\u65b9\u6848\u6570", + "TitleZH": "划分数字的方案数", "TitleSlug": "number-of-ways-to-separate-numbers", "ContestSlug": "biweekly-contest-59", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 59", - "ContestID_zh": "\u7b2c 59 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 59 场双周赛" }, { "Rating": 2803.7652028979, "ID": 2060, "Title": "Check if an Original String Exists Given Two Encoded Strings", - "TitleZH": "\u540c\u6e90\u5b57\u7b26\u4e32\u68c0\u6d4b", + "TitleZH": "同源字符串检测", "TitleSlug": "check-if-an-original-string-exists-given-two-encoded-strings", "ContestSlug": "weekly-contest-265", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 265", - "ContestID_zh": "\u7b2c 265 \u573a\u5468\u8d5b" + "ContestID_zh": "第 265 场周赛" }, { "Rating": 2765.2533837781, "ID": 803, "Title": "Bricks Falling When Hit", - "TitleZH": "\u6253\u7816\u5757", + "TitleZH": "打砖块", "TitleSlug": "bricks-falling-when-hit", "ContestSlug": "weekly-contest-76", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u5468\u8d5b" + "ContestID_zh": "第 76 场周赛" }, { "Rating": 2690.5859406179, "ID": 1960, "Title": "Maximum Product of the Length of Two Palindromic Substrings", - "TitleZH": "\u4e24\u4e2a\u56de\u6587\u5b50\u5b57\u7b26\u4e32\u957f\u5ea6\u7684\u6700\u5927\u4e58\u79ef", + "TitleZH": "两个回文子字符串长度的最大乘积", "TitleSlug": "maximum-product-of-the-length-of-two-palindromic-substrings", "ContestSlug": "biweekly-contest-58", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 58", - "ContestID_zh": "\u7b2c 58 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 58 场双周赛" }, { "Rating": 2666.668150845, "ID": 1397, "Title": "Find All Good Strings", - "TitleZH": "\u627e\u5230\u6240\u6709\u597d\u5b57\u7b26\u4e32", + "TitleZH": "找到所有好字符串", "TitleSlug": "find-all-good-strings", "ContestSlug": "weekly-contest-182", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 182", - "ContestID_zh": "\u7b2c 182 \u573a\u5468\u8d5b" + "ContestID_zh": "第 182 场周赛" }, { "Rating": 2661.0670044656, "ID": 1923, "Title": "Longest Common Subpath", - "TitleZH": "\u6700\u957f\u516c\u5171\u5b50\u8def\u5f84", + "TitleZH": "最长公共子路径", "TitleSlug": "longest-common-subpath", "ContestSlug": "weekly-contest-248", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 248", - "ContestID_zh": "\u7b2c 248 \u573a\u5468\u8d5b" + "ContestID_zh": "第 248 场周赛" }, { "Rating": 2655.2178711909, "ID": 1659, "Title": "Maximize Grid Happiness", - "TitleZH": "\u6700\u5927\u5316\u7f51\u683c\u5e78\u798f\u611f", + "TitleZH": "最大化网格幸福感", "TitleSlug": "maximize-grid-happiness", "ContestSlug": "weekly-contest-215", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 215", - "ContestID_zh": "\u7b2c 215 \u573a\u5468\u8d5b" + "ContestID_zh": "第 215 场周赛" }, { "Rating": 2650.8996457642, "ID": 2097, "Title": "Valid Arrangement of Pairs", - "TitleZH": "\u5408\u6cd5\u91cd\u65b0\u6392\u5217\u6570\u5bf9", + "TitleZH": "合法重新排列数对", "TitleSlug": "valid-arrangement-of-pairs", "ContestSlug": "weekly-contest-270", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 270", - "ContestID_zh": "\u7b2c 270 \u573a\u5468\u8d5b" + "ContestID_zh": "第 270 场周赛" }, { "Rating": 2648.1748409542, "ID": 2071, "Title": "Maximum Number of Tasks You Can Assign", - "TitleZH": "\u4f60\u53ef\u4ee5\u5b89\u6392\u7684\u6700\u591a\u4efb\u52a1\u6570\u76ee", + "TitleZH": "你可以安排的最多任务数目", "TitleSlug": "maximum-number-of-tasks-you-can-assign", "ContestSlug": "biweekly-contest-65", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 65 场双周赛" }, { "Rating": 2647.8258771458, "ID": 2386, "Title": "Find the K-Sum of an Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u7684\u7b2c K \u5927\u548c", + "TitleZH": "找出数组的第 K 大和", "TitleSlug": "find-the-k-sum-of-an-array", "ContestSlug": "weekly-contest-307", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 307", - "ContestID_zh": "\u7b2c 307 \u573a\u5468\u8d5b" + "ContestID_zh": "第 307 场周赛" }, { "Rating": 2640.3824813624, "ID": 1787, "Title": "Make the XOR of All Segments Equal to Zero", - "TitleZH": "\u4f7f\u6240\u6709\u533a\u95f4\u7684\u5f02\u6216\u7ed3\u679c\u4e3a\u96f6", + "TitleZH": "使所有区间的异或结果为零", "TitleSlug": "make-the-xor-of-all-segments-equal-to-zero", "ContestSlug": "weekly-contest-231", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 231", - "ContestID_zh": "\u7b2c 231 \u573a\u5468\u8d5b" + "ContestID_zh": "第 231 场周赛" }, { "Rating": 2628.7957821141, "ID": 2213, "Title": "Longest Substring of One Repeating Character", - "TitleZH": "\u7531\u5355\u4e2a\u5b57\u7b26\u91cd\u590d\u7684\u6700\u957f\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "由单个字符重复的最长子字符串", "TitleSlug": "longest-substring-of-one-repeating-character", "ContestSlug": "weekly-contest-285", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 285", - "ContestID_zh": "\u7b2c 285 \u573a\u5468\u8d5b" + "ContestID_zh": "第 285 场周赛" }, { "Rating": 2621.1208072273, "ID": 2281, "Title": "Sum of Total Strength of Wizards", - "TitleZH": "\u5deb\u5e08\u7684\u603b\u529b\u91cf\u548c", + "TitleZH": "巫师的总力量和", "TitleSlug": "sum-of-total-strength-of-wizards", "ContestSlug": "weekly-contest-294", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 294", - "ContestID_zh": "\u7b2c 294 \u573a\u5468\u8d5b" + "ContestID_zh": "第 294 场周赛" }, { "Rating": 2620.4181842249, "ID": 1830, "Title": "Minimum Number of Operations to Make String Sorted", - "TitleZH": "\u4f7f\u5b57\u7b26\u4e32\u6709\u5e8f\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使字符串有序的最少操作次数", "TitleSlug": "minimum-number-of-operations-to-make-string-sorted", "ContestSlug": "biweekly-contest-50", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 50", - "ContestID_zh": "\u7b2c 50 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 50 场双周赛" }, { "Rating": 2615.1468269481, "ID": 2338, "Title": "Count the Number of Ideal Arrays", - "TitleZH": "\u7edf\u8ba1\u7406\u60f3\u6570\u7ec4\u7684\u6570\u76ee", + "TitleZH": "统计理想数组的数目", "TitleSlug": "count-the-number-of-ideal-arrays", "ContestSlug": "weekly-contest-301", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 301", - "ContestID_zh": "\u7b2c 301 \u573a\u5468\u8d5b" + "ContestID_zh": "第 301 场周赛" }, { "Rating": 2610.9906730644, "ID": 2056, "Title": "Number of Valid Move Combinations On Chessboard", - "TitleZH": "\u68cb\u76d8\u4e0a\u6709\u6548\u79fb\u52a8\u7ec4\u5408\u7684\u6570\u76ee", + "TitleZH": "棋盘上有效移动组合的数目", "TitleSlug": "number-of-valid-move-combinations-on-chessboard", "ContestSlug": "biweekly-contest-64", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 64 场双周赛" }, { "Rating": 2610.0826855063, "ID": 1687, "Title": "Delivering Boxes from Storage to Ports", - "TitleZH": "\u4ece\u4ed3\u5e93\u5230\u7801\u5934\u8fd0\u8f93\u7bb1\u5b50", + "TitleZH": "从仓库到码头运输箱子", "TitleSlug": "delivering-boxes-from-storage-to-ports", "ContestSlug": "biweekly-contest-41", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 41", - "ContestID_zh": "\u7b2c 41 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 41 场双周赛" }, { "Rating": 2594.135673452, "ID": 964, "Title": "Least Operators to Express Number", - "TitleZH": "\u8868\u793a\u6570\u5b57\u7684\u6700\u5c11\u8fd0\u7b97\u7b26", + "TitleZH": "表示数字的最少运算符", "TitleSlug": "least-operators-to-express-number", "ContestSlug": "weekly-contest-116", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 116", - "ContestID_zh": "\u7b2c 116 \u573a\u5468\u8d5b" + "ContestID_zh": "第 116 场周赛" }, { "Rating": 2587.8725248485, "ID": 1883, "Title": "Minimum Skips to Arrive at Meeting On Time", - "TitleZH": "\u51c6\u65f6\u62b5\u8fbe\u4f1a\u8bae\u73b0\u573a\u7684\u6700\u5c0f\u8df3\u8fc7\u4f11\u606f\u6b21\u6570", + "TitleZH": "准时抵达会议现场的最小跳过休息次数", "TitleSlug": "minimum-skips-to-arrive-at-meeting-on-time", "ContestSlug": "weekly-contest-243", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 243", - "ContestID_zh": "\u7b2c 243 \u573a\u5468\u8d5b" + "ContestID_zh": "第 243 场周赛" }, { "Rating": 2583.9006314254, "ID": 2019, "Title": "The Score of Students Solving Math Expression", - "TitleZH": "\u89e3\u51fa\u6570\u5b66\u8868\u8fbe\u5f0f\u7684\u5b66\u751f\u5206\u6570", + "TitleZH": "解出数学表达式的学生分数", "TitleSlug": "the-score-of-students-solving-math-expression", "ContestSlug": "weekly-contest-260", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 260", - "ContestID_zh": "\u7b2c 260 \u573a\u5468\u8d5b" + "ContestID_zh": "第 260 场周赛" }, { "Rating": 2583.406911951, "ID": 936, "Title": "Stamping The Sequence", - "TitleZH": "\u6233\u5370\u5e8f\u5217", + "TitleZH": "戳印序列", "TitleSlug": "stamping-the-sequence", "ContestSlug": "weekly-contest-109", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 109", - "ContestID_zh": "\u7b2c 109 \u573a\u5468\u8d5b" + "ContestID_zh": "第 109 场周赛" }, { "Rating": 2575.9570281316, "ID": 1531, "Title": "String Compression II", - "TitleZH": "\u538b\u7f29\u5b57\u7b26\u4e32 II", + "TitleZH": "压缩字符串 II", "TitleSlug": "string-compression-ii", "ContestSlug": "weekly-contest-199", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 199", - "ContestID_zh": "\u7b2c 199 \u573a\u5468\u8d5b" + "ContestID_zh": "第 199 场周赛" }, { "Rating": 2571.552028121, "ID": 1489, "Title": "Find Critical and Pseudo-Critical Edges in Minimum Spanning Tree", - "TitleZH": "\u627e\u5230\u6700\u5c0f\u751f\u6210\u6811\u91cc\u7684\u5173\u952e\u8fb9\u548c\u4f2a\u5173\u952e\u8fb9", + "TitleZH": "找到最小生成树里的关键边和伪关键边", "TitleSlug": "find-critical-and-pseudo-critical-edges-in-minimum-spanning-tree", "ContestSlug": "weekly-contest-194", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 194", - "ContestID_zh": "\u7b2c 194 \u573a\u5468\u8d5b" + "ContestID_zh": "第 194 场周赛" }, { "Rating": 2566.5910742837, "ID": 913, "Title": "Cat and Mouse", - "TitleZH": "\u732b\u548c\u8001\u9f20", + "TitleZH": "猫和老鼠", "TitleSlug": "cat-and-mouse", "ContestSlug": "weekly-contest-104", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 104", - "ContestID_zh": "\u7b2c 104 \u573a\u5468\u8d5b" + "ContestID_zh": "第 104 场周赛" }, { "Rating": 2561.7794931859, "ID": 2030, "Title": "Smallest K-Length Subsequence With Occurrences of a Letter", - "TitleZH": "\u542b\u7279\u5b9a\u5b57\u6bcd\u7684\u6700\u5c0f\u5b50\u5e8f\u5217", + "TitleZH": "含特定字母的最小子序列", "TitleSlug": "smallest-k-length-subsequence-with-occurrences-of-a-letter", "ContestSlug": "weekly-contest-261", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 261", - "ContestID_zh": "\u7b2c 261 \u573a\u5468\u8d5b" + "ContestID_zh": "第 261 场周赛" }, { "Rating": 2561.508149216, "ID": 2234, "Title": "Maximum Total Beauty of the Gardens", - "TitleZH": "\u82b1\u56ed\u7684\u6700\u5927\u603b\u7f8e\u4e3d\u503c", + "TitleZH": "花园的最大总美丽值", "TitleSlug": "maximum-total-beauty-of-the-gardens", "ContestSlug": "weekly-contest-288", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 288", - "ContestID_zh": "\u7b2c 288 \u573a\u5468\u8d5b" + "ContestID_zh": "第 288 场周赛" }, { "Rating": 2559.4351004238, "ID": 1815, "Title": "Maximum Number of Groups Getting Fresh Donuts", - "TitleZH": "\u5f97\u5230\u65b0\u9c9c\u751c\u751c\u5708\u7684\u6700\u591a\u7ec4\u6570", + "TitleZH": "得到新鲜甜甜圈的最多组数", "TitleSlug": "maximum-number-of-groups-getting-fresh-donuts", "ContestSlug": "biweekly-contest-49", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 49", - "ContestID_zh": "\u7b2c 49 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 49 场双周赛" }, { "Rating": 2558.3297484354, "ID": 2014, "Title": "Longest Subsequence Repeated k Times", - "TitleZH": "\u91cd\u590d K \u6b21\u7684\u6700\u957f\u5b50\u5e8f\u5217", + "TitleZH": "重复 K 次的最长子序列", "TitleSlug": "longest-subsequence-repeated-k-times", "ContestSlug": "weekly-contest-259", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 259", - "ContestID_zh": "\u7b2c 259 \u573a\u5468\u8d5b" + "ContestID_zh": "第 259 场周赛" }, { "Rating": 2539.863726397, "ID": 1819, "Title": "Number of Different Subsequences GCDs", - "TitleZH": "\u5e8f\u5217\u4e2d\u4e0d\u540c\u6700\u5927\u516c\u7ea6\u6570\u7684\u6570\u76ee", + "TitleZH": "序列中不同最大公约数的数目", "TitleSlug": "number-of-different-subsequences-gcds", "ContestSlug": "weekly-contest-235", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 235", - "ContestID_zh": "\u7b2c 235 \u573a\u5468\u8d5b" + "ContestID_zh": "第 235 场周赛" }, { "Rating": 2537.7965575726, "ID": 1595, "Title": "Minimum Cost to Connect Two Groups of Points", - "TitleZH": "\u8fde\u901a\u4e24\u7ec4\u70b9\u7684\u6700\u5c0f\u6210\u672c", + "TitleZH": "连通两组点的最小成本", "TitleSlug": "minimum-cost-to-connect-two-groups-of-points", "ContestSlug": "weekly-contest-207", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 207", - "ContestID_zh": "\u7b2c 207 \u573a\u5468\u8d5b" + "ContestID_zh": "第 207 场周赛" }, { "Rating": 2533.7796160302, "ID": 1948, "Title": "Delete Duplicate Folders in System", - "TitleZH": "\u5220\u9664\u7cfb\u7edf\u4e2d\u7684\u91cd\u590d\u6587\u4ef6\u5939", + "TitleZH": "删除系统中的重复文件夹", "TitleSlug": "delete-duplicate-folders-in-system", "ContestSlug": "weekly-contest-251", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 251", - "ContestID_zh": "\u7b2c 251 \u573a\u5468\u8d5b" + "ContestID_zh": "第 251 场周赛" }, { "Rating": 2533.3027905062, "ID": 1675, "Title": "Minimize Deviation in Array", - "TitleZH": "\u6570\u7ec4\u7684\u6700\u5c0f\u504f\u79fb\u91cf", + "TitleZH": "数组的最小偏移量", "TitleSlug": "minimize-deviation-in-array", "ContestSlug": "weekly-contest-217", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 217", - "ContestID_zh": "\u7b2c 217 \u573a\u5468\u8d5b" + "ContestID_zh": "第 217 场周赛" }, { "Rating": 2531.6452775023, "ID": 1896, "Title": "Minimum Cost to Change the Final Value of Expression", - "TitleZH": "\u53cd\u8f6c\u8868\u8fbe\u5f0f\u503c\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "反转表达式值的最少操作次数", "TitleSlug": "minimum-cost-to-change-the-final-value-of-expression", "ContestSlug": "biweekly-contest-54", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 54", - "ContestID_zh": "\u7b2c 54 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 54 场双周赛" }, { "Rating": 2530.6905139914, "ID": 1776, "Title": "Car Fleet II", - "TitleZH": "\u8f66\u961f II", + "TitleZH": "车队 II", "TitleSlug": "car-fleet-ii", "ContestSlug": "weekly-contest-230", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 230", - "ContestID_zh": "\u7b2c 230 \u573a\u5468\u8d5b" + "ContestID_zh": "第 230 场周赛" }, { "Rating": 2529.5251086936, "ID": 1632, "Title": "Rank Transform of a Matrix", - "TitleZH": "\u77e9\u9635\u8f6c\u6362\u540e\u7684\u79e9", + "TitleZH": "矩阵转换后的秩", "TitleSlug": "rank-transform-of-a-matrix", "ContestSlug": "weekly-contest-212", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 212", - "ContestID_zh": "\u7b2c 212 \u573a\u5468\u8d5b" + "ContestID_zh": "第 212 场周赛" }, { "Rating": 2517.6829964848, "ID": 2040, "Title": "Kth Smallest Product of Two Sorted Arrays", - "TitleZH": "\u4e24\u4e2a\u6709\u5e8f\u6570\u7ec4\u7684\u7b2c K \u5c0f\u4e58\u79ef", + "TitleZH": "两个有序数组的第 K 小乘积", "TitleSlug": "kth-smallest-product-of-two-sorted-arrays", "ContestSlug": "biweekly-contest-63", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 63 场双周赛" }, { "Rating": 2515.7520586008, "ID": 2272, "Title": "Substring With Largest Variance", - "TitleZH": "\u6700\u5927\u6ce2\u52a8\u7684\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "最大波动的子字符串", "TitleSlug": "substring-with-largest-variance", "ContestSlug": "biweekly-contest-78", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 78 场双周赛" }, { "Rating": 2502.5176603922, "ID": 1938, "Title": "Maximum Genetic Difference Query", - "TitleZH": "\u67e5\u8be2\u6700\u5927\u57fa\u56e0\u5dee", + "TitleZH": "查询最大基因差", "TitleSlug": "maximum-genetic-difference-query", "ContestSlug": "weekly-contest-250", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 250", - "ContestID_zh": "\u7b2c 250 \u573a\u5468\u8d5b" + "ContestID_zh": "第 250 场周赛" }, { "Rating": 2499.5640490579, "ID": 1735, "Title": "Count Ways to Make Array With Product", - "TitleZH": "\u751f\u6210\u4e58\u79ef\u6570\u7ec4\u7684\u65b9\u6848\u6570", + "TitleZH": "生成乘积数组的方案数", "TitleSlug": "count-ways-to-make-array-with-product", "ContestSlug": "biweekly-contest-44", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 44", - "ContestID_zh": "\u7b2c 44 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 44 场双周赛" }, { "Rating": 2499.3282271507, "ID": 2157, "Title": "Groups of Strings", - "TitleZH": "\u5b57\u7b26\u4e32\u5206\u7ec4", + "TitleZH": "字符串分组", "TitleSlug": "groups-of-strings", "ContestSlug": "weekly-contest-278", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 278", - "ContestID_zh": "\u7b2c 278 \u573a\u5468\u8d5b" + "ContestID_zh": "第 278 场周赛" }, { "Rating": 2489.6652421066, "ID": 2035, "Title": "Partition Array Into Two Arrays to Minimize Sum Difference", - "TitleZH": "\u5c06\u6570\u7ec4\u5206\u6210\u4e24\u4e2a\u6570\u7ec4\u5e76\u6700\u5c0f\u5316\u6570\u7ec4\u548c\u7684\u5dee", + "TitleZH": "将数组分成两个数组并最小化数组和的差", "TitleSlug": "partition-array-into-two-arrays-to-minimize-sum-difference", "ContestSlug": "weekly-contest-262", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 262", - "ContestID_zh": "\u7b2c 262 \u573a\u5468\u8d5b" + "ContestID_zh": "第 262 场周赛" }, { "Rating": 2486.2339675701, "ID": 1916, "Title": "Count Ways to Build Rooms in an Ant Colony", - "TitleZH": "\u7edf\u8ba1\u4e3a\u8681\u7fa4\u6784\u7b51\u623f\u95f4\u7684\u4e0d\u540c\u987a\u5e8f", + "TitleZH": "统计为蚁群构筑房间的不同顺序", "TitleSlug": "count-ways-to-build-rooms-in-an-ant-colony", "ContestSlug": "weekly-contest-247", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 247", - "ContestID_zh": "\u7b2c 247 \u573a\u5468\u8d5b" + "ContestID_zh": "第 247 场周赛" }, { "Rating": 2483.9435767299, "ID": 1932, "Title": "Merge BSTs to Create Single BST", - "TitleZH": "\u5408\u5e76\u591a\u68f5\u4e8c\u53c9\u641c\u7d22\u6811", + "TitleZH": "合并多棵二叉搜索树", "TitleSlug": "merge-bsts-to-create-single-bst", "ContestSlug": "weekly-contest-249", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 249", - "ContestID_zh": "\u7b2c 249 \u573a\u5468\u8d5b" + "ContestID_zh": "第 249 场周赛" }, { "Rating": 2481.8722909195, "ID": 2289, "Title": "Steps to Make Array Non-decreasing", - "TitleZH": "\u4f7f\u6570\u7ec4\u6309\u975e\u9012\u51cf\u987a\u5e8f\u6392\u5217", + "TitleZH": "使数组按非递减顺序排列", "TitleSlug": "steps-to-make-array-non-decreasing", "ContestSlug": "weekly-contest-295", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 295", - "ContestID_zh": "\u7b2c 295 \u573a\u5468\u8d5b" + "ContestID_zh": "第 295 场周赛" }, { "Rating": 2481.7175364169, "ID": 1330, "Title": "Reverse Subarray To Maximize Array Value", - "TitleZH": "\u7ffb\u8f6c\u5b50\u6570\u7ec4\u5f97\u5230\u6700\u5927\u7684\u6570\u7ec4\u503c", + "TitleZH": "翻转子数组得到最大的数组值", "TitleSlug": "reverse-subarray-to-maximize-array-value", "ContestSlug": "biweekly-contest-18", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 18", - "ContestID_zh": "\u7b2c 18 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 18 场双周赛" }, { "Rating": 2479.3282985529, "ID": 1803, "Title": "Count Pairs With XOR in a Range", - "TitleZH": "\u7edf\u8ba1\u5f02\u6216\u503c\u5728\u8303\u56f4\u5185\u7684\u6570\u5bf9\u6709\u591a\u5c11", + "TitleZH": "统计异或值在范围内的数对有多少", "TitleSlug": "count-pairs-with-xor-in-a-range", "ContestSlug": "weekly-contest-233", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 233", - "ContestID_zh": "\u7b2c 233 \u573a\u5468\u8d5b" + "ContestID_zh": "第 233 场周赛" }, { "Rating": 2476.7727985927, "ID": 2117, "Title": "Abbreviating the Product of a Range", - "TitleZH": "\u4e00\u4e2a\u533a\u95f4\u5185\u6240\u6709\u6570\u4e58\u79ef\u7684\u7f29\u5199", + "TitleZH": "一个区间内所有数乘积的缩写", "TitleSlug": "abbreviating-the-product-of-a-range", "ContestSlug": "biweekly-contest-68", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 68 场双周赛" }, { "Rating": 2476.451764287, "ID": 1622, "Title": "Fancy Sequence", - "TitleZH": "\u5947\u5999\u5e8f\u5217", + "TitleZH": "奇妙序列", "TitleSlug": "fancy-sequence", "ContestSlug": "biweekly-contest-37", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 37", - "ContestID_zh": "\u7b2c 37 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 37 场双周赛" }, { "Rating": 2470.2118194809, "ID": 2286, "Title": "Booking Concert Tickets in Groups", - "TitleZH": "\u4ee5\u7ec4\u4e3a\u5355\u4f4d\u8ba2\u97f3\u4e50\u4f1a\u7684\u95e8\u7968", + "TitleZH": "以组为单位订音乐会的门票", "TitleSlug": "booking-concert-tickets-in-groups", "ContestSlug": "biweekly-contest-79", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 79 场双周赛" }, { "Rating": 2466.8891773908, "ID": 1703, "Title": "Minimum Adjacent Swaps for K Consecutive Ones", - "TitleZH": "\u5f97\u5230\u8fde\u7eed K \u4e2a 1 \u7684\u6700\u5c11\u76f8\u90bb\u4ea4\u6362\u6b21\u6570", + "TitleZH": "得到连续 K 个 1 的最少相邻交换次数", "TitleSlug": "minimum-adjacent-swaps-for-k-consecutive-ones", "ContestSlug": "biweekly-contest-42", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 42", - "ContestID_zh": "\u7b2c 42 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 42 场双周赛" }, { "Rating": 2464.5077611012, "ID": 1994, "Title": "The Number of Good Subsets", - "TitleZH": "\u597d\u5b50\u96c6\u7684\u6570\u76ee", + "TitleZH": "好子集的数目", "TitleSlug": "the-number-of-good-subsets", "ContestSlug": "biweekly-contest-60", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 60", - "ContestID_zh": "\u7b2c 60 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 60 场双周赛" }, { "Rating": 2460.3152437576, "ID": 2440, "Title": "Create Components With Same Value", - "TitleZH": "\u521b\u5efa\u4ef7\u503c\u76f8\u540c\u7684\u8fde\u901a\u5757", + "TitleZH": "创建价值相同的连通块", "TitleSlug": "create-components-with-same-value", "ContestSlug": "biweekly-contest-89", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 89 场双周赛" }, { "Rating": 2457.115574186, "ID": 1782, "Title": "Count Pairs Of Nodes", - "TitleZH": "\u7edf\u8ba1\u70b9\u5bf9\u7684\u6570\u76ee", + "TitleZH": "统计点对的数目", "TitleSlug": "count-pairs-of-nodes", "ContestSlug": "biweekly-contest-47", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 47", - "ContestID_zh": "\u7b2c 47 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 47 场双周赛" }, { "Rating": 2456.3900212097, "ID": 1499, "Title": "Max Value of Equation", - "TitleZH": "\u6ee1\u8db3\u4e0d\u7b49\u5f0f\u7684\u6700\u5927\u503c", + "TitleZH": "满足不等式的最大值", "TitleSlug": "max-value-of-equation", "ContestSlug": "weekly-contest-195", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 195", - "ContestID_zh": "\u7b2c 195 \u573a\u5468\u8d5b" + "ContestID_zh": "第 195 场周赛" }, { "Rating": 2455.8244137907, "ID": 1040, "Title": "Moving Stones Until Consecutive II", - "TitleZH": "\u79fb\u52a8\u77f3\u5b50\u76f4\u5230\u8fde\u7eed II", + "TitleZH": "移动石子直到连续 II", "TitleSlug": "moving-stones-until-consecutive-ii", "ContestSlug": "weekly-contest-135", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 135", - "ContestID_zh": "\u7b2c 135 \u573a\u5468\u8d5b" + "ContestID_zh": "第 135 场周赛" }, { "Rating": 2454.7653333657, "ID": 1900, "Title": "The Earliest and Latest Rounds Where Players Compete", - "TitleZH": "\u6700\u4f73\u8fd0\u52a8\u5458\u7684\u6bd4\u62fc\u56de\u5408", + "TitleZH": "最佳运动员的比拼回合", "TitleSlug": "the-earliest-and-latest-rounds-where-players-compete", "ContestSlug": "weekly-contest-245", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 245", - "ContestID_zh": "\u7b2c 245 \u573a\u5468\u8d5b" + "ContestID_zh": "第 245 场周赛" + }, + { + "Rating": 2453.9054896968, + "ID": 2463, + "Title": "Minimum Total Distance Traveled", + "TitleZH": "最小移动总距离", + "TitleSlug": "minimum-total-distance-traveled", + "ContestSlug": "weekly-contest-318", + "ProblemIndex": "Q4", + "ContestID_en": "Weekly Contest 318", + "ContestID_zh": "第 318 场周赛" }, { "Rating": 2453.9054896968, @@ -674,5270 +685,5281 @@ "Rating": 2449.1323757838, "ID": 2127, "Title": "Maximum Employees to Be Invited to a Meeting", - "TitleZH": "\u53c2\u52a0\u4f1a\u8bae\u7684\u6700\u591a\u5458\u5de5\u6570", + "TitleZH": "参加会议的最多员工数", "TitleSlug": "maximum-employees-to-be-invited-to-a-meeting", "ContestSlug": "weekly-contest-274", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 274", - "ContestID_zh": "\u7b2c 274 \u573a\u5468\u8d5b" + "ContestID_zh": "第 274 场周赛" }, { "Rating": 2444.6660756903, "ID": 2421, "Title": "Number of Good Paths", - "TitleZH": "\u597d\u8def\u5f84\u7684\u6570\u76ee", + "TitleZH": "好路径的数目", "TitleSlug": "number-of-good-paths", "ContestSlug": "weekly-contest-312", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 312", - "ContestID_zh": "\u7b2c 312 \u573a\u5468\u8d5b" + "ContestID_zh": "第 312 场周赛" }, { "Rating": 2439.7337408636, "ID": 1872, "Title": "Stone Game VIII", - "TitleZH": "\u77f3\u5b50\u6e38\u620f VIII", + "TitleZH": "石子游戏 VIII", "TitleSlug": "stone-game-viii", "ContestSlug": "weekly-contest-242", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 242", - "ContestID_zh": "\u7b2c 242 \u573a\u5468\u8d5b" + "ContestID_zh": "第 242 场周赛" }, { "Rating": 2433.3767704629, "ID": 903, "Title": "Valid Permutations for DI Sequence", - "TitleZH": "DI \u5e8f\u5217\u7684\u6709\u6548\u6392\u5217", + "TitleZH": "DI 序列的有效排列", "TitleSlug": "valid-permutations-for-di-sequence", "ContestSlug": "weekly-contest-101", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 101", - "ContestID_zh": "\u7b2c 101 \u573a\u5468\u8d5b" + "ContestID_zh": "第 101 场周赛" }, { "Rating": 2429.6705422448, "ID": 782, "Title": "Transform to Chessboard", - "TitleZH": "\u53d8\u4e3a\u68cb\u76d8", + "TitleZH": "变为棋盘", "TitleSlug": "transform-to-chessboard", "ContestSlug": "weekly-contest-71", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u5468\u8d5b" + "ContestID_zh": "第 71 场周赛" }, { "Rating": 2429.0940568399, "ID": 1998, "Title": "GCD Sort of an Array", - "TitleZH": "\u6570\u7ec4\u7684\u6700\u5927\u516c\u56e0\u6570\u6392\u5e8f", + "TitleZH": "数组的最大公因数排序", "TitleSlug": "gcd-sort-of-an-array", "ContestSlug": "weekly-contest-257", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 257", - "ContestID_zh": "\u7b2c 257 \u573a\u5468\u8d5b" + "ContestID_zh": "第 257 场周赛" }, { "Rating": 2428.7985254341, "ID": 1044, "Title": "Longest Duplicate Substring", - "TitleZH": "\u6700\u957f\u91cd\u590d\u5b50\u4e32", + "TitleZH": "最长重复子串", "TitleSlug": "longest-duplicate-substring", "ContestSlug": "weekly-contest-136", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 136", - "ContestID_zh": "\u7b2c 136 \u573a\u5468\u8d5b" + "ContestID_zh": "第 136 场周赛" }, { "Rating": 2422.5309771173, "ID": 1000, "Title": "Minimum Cost to Merge Stones", - "TitleZH": "\u5408\u5e76\u77f3\u5934\u7684\u6700\u4f4e\u6210\u672c", + "TitleZH": "合并石头的最低成本", "TitleSlug": "minimum-cost-to-merge-stones", "ContestSlug": "weekly-contest-126", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 126", - "ContestID_zh": "\u7b2c 126 \u573a\u5468\u8d5b" + "ContestID_zh": "第 126 场周赛" }, { "Rating": 2422.3128048015, "ID": 1987, "Title": "Number of Unique Good Subsequences", - "TitleZH": "\u4e0d\u540c\u7684\u597d\u5b50\u5e8f\u5217\u6570\u76ee", + "TitleZH": "不同的好子序列数目", "TitleSlug": "number-of-unique-good-subsequences", "ContestSlug": "weekly-contest-256", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 256", - "ContestID_zh": "\u7b2c 256 \u573a\u5468\u8d5b" + "ContestID_zh": "第 256 场周赛" }, { "Rating": 2418.5742747632, "ID": 1203, "Title": "Sort Items by Groups Respecting Dependencies", - "TitleZH": "\u9879\u76ee\u7ba1\u7406", + "TitleZH": "项目管理", "TitleSlug": "sort-items-by-groups-respecting-dependencies", "ContestSlug": "weekly-contest-155", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 155", - "ContestID_zh": "\u7b2c 155 \u573a\u5468\u8d5b" + "ContestID_zh": "第 155 场周赛" }, { "Rating": 2415.0089731911, "ID": 2003, "Title": "Smallest Missing Genetic Value in Each Subtree", - "TitleZH": "\u6bcf\u68f5\u5b50\u6811\u5185\u7f3a\u5931\u7684\u6700\u5c0f\u57fa\u56e0\u503c", + "TitleZH": "每棵子树内缺失的最小基因值", "TitleSlug": "smallest-missing-genetic-value-in-each-subtree", "ContestSlug": "weekly-contest-258", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 258", - "ContestID_zh": "\u7b2c 258 \u573a\u5468\u8d5b" + "ContestID_zh": "第 258 场周赛" }, { "Rating": 2413.3969129689, "ID": 1928, "Title": "Minimum Cost to Reach Destination in Time", - "TitleZH": "\u89c4\u5b9a\u65f6\u95f4\u5185\u5230\u8fbe\u7ec8\u70b9\u7684\u6700\u5c0f\u82b1\u8d39", + "TitleZH": "规定时间内到达终点的最小花费", "TitleSlug": "minimum-cost-to-reach-destination-in-time", "ContestSlug": "biweekly-contest-56", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 56", - "ContestID_zh": "\u7b2c 56 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 56 场双周赛" }, { "Rating": 2409.7580728676, "ID": 1388, "Title": "Pizza With 3n Slices", - "TitleZH": "3n \u5757\u62ab\u8428", + "TitleZH": "3n 块披萨", "TitleSlug": "pizza-with-3n-slices", "ContestSlug": "biweekly-contest-22", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 22", - "ContestID_zh": "\u7b2c 22 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 22 场双周赛" }, { "Rating": 2399.5729141925, "ID": 920, "Title": "Number of Music Playlists", - "TitleZH": "\u64ad\u653e\u5217\u8868\u7684\u6570\u91cf", + "TitleZH": "播放列表的数量", "TitleSlug": "number-of-music-playlists", "ContestSlug": "weekly-contest-105", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 105", - "ContestID_zh": "\u7b2c 105 \u573a\u5468\u8d5b" + "ContestID_zh": "第 105 场周赛" }, { "Rating": 2396.6267778669, "ID": 808, "Title": "Soup Servings", - "TitleZH": "\u5206\u6c64", + "TitleZH": "分汤", "TitleSlug": "soup-servings", "ContestSlug": "weekly-contest-78", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u5468\u8d5b" + "ContestID_zh": "第 78 场周赛" }, { "Rating": 2395.8765531206, "ID": 1825, "Title": "Finding MK Average", - "TitleZH": "\u6c42\u51fa MK \u5e73\u5747\u503c", + "TitleZH": "求出 MK 平均值", "TitleSlug": "finding-mk-average", "ContestSlug": "weekly-contest-236", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 236", - "ContestID_zh": "\u7b2c 236 \u573a\u5468\u8d5b" + "ContestID_zh": "第 236 场周赛" }, { "Rating": 2392.0799451298, "ID": 2172, "Title": "Maximum AND Sum of Array", - "TitleZH": "\u6570\u7ec4\u7684\u6700\u5927\u4e0e\u548c", + "TitleZH": "数组的最大与和", "TitleSlug": "maximum-and-sum-of-array", "ContestSlug": "weekly-contest-280", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 280", - "ContestID_zh": "\u7b2c 280 \u573a\u5468\u8d5b" + "ContestID_zh": "第 280 场周赛" }, { "Rating": 2391.8086687918, "ID": 818, "Title": "Race Car", - "TitleZH": "\u8d5b\u8f66", + "TitleZH": "赛车", "TitleSlug": "race-car", "ContestSlug": "weekly-contest-80", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u5468\u8d5b" + "ContestID_zh": "第 80 场周赛" }, { "Rating": 2391.657270733, "ID": 2322, "Title": "Minimum Score After Removals on a Tree", - "TitleZH": "\u4ece\u6811\u4e2d\u5220\u9664\u8fb9\u7684\u6700\u5c0f\u5206\u6570", + "TitleZH": "从树中删除边的最小分数", "TitleSlug": "minimum-score-after-removals-on-a-tree", "ContestSlug": "weekly-contest-299", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 299", - "ContestID_zh": "\u7b2c 299 \u573a\u5468\u8d5b" + "ContestID_zh": "第 299 场周赛" }, { "Rating": 2389.9634276167, "ID": 1681, "Title": "Minimum Incompatibility", - "TitleZH": "\u6700\u5c0f\u4e0d\u517c\u5bb9\u6027", + "TitleZH": "最小不兼容性", "TitleSlug": "minimum-incompatibility", "ContestSlug": "weekly-contest-218", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 218", - "ContestID_zh": "\u7b2c 218 \u573a\u5468\u8d5b" + "ContestID_zh": "第 218 场周赛" }, { "Rating": 2385.8072128533, "ID": 1349, "Title": "Maximum Students Taking Exam", - "TitleZH": "\u53c2\u52a0\u8003\u8bd5\u7684\u6700\u5927\u5b66\u751f\u6570", + "TitleZH": "参加考试的最大学生数", "TitleSlug": "maximum-students-taking-exam", "ContestSlug": "weekly-contest-175", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 175", - "ContestID_zh": "\u7b2c 175 \u573a\u5468\u8d5b" + "ContestID_zh": "第 175 场周赛" }, { "Rating": 2383.7724811656, "ID": 1521, "Title": "Find a Value of a Mysterious Function Closest to Target", - "TitleZH": "\u627e\u5230\u6700\u63a5\u8fd1\u76ee\u6807\u503c\u7684\u51fd\u6570\u503c", + "TitleZH": "找到最接近目标值的函数值", "TitleSlug": "find-a-value-of-a-mysterious-function-closest-to-target", "ContestSlug": "weekly-contest-198", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 198", - "ContestID_zh": "\u7b2c 198 \u573a\u5468\u8d5b" + "ContestID_zh": "第 198 场周赛" }, { "Rating": 2381.479024858, "ID": 956, "Title": "Tallest Billboard", - "TitleZH": "\u6700\u9ad8\u7684\u5e7f\u544a\u724c", + "TitleZH": "最高的广告牌", "TitleSlug": "tallest-billboard", "ContestSlug": "weekly-contest-114", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 114", - "ContestID_zh": "\u7b2c 114 \u573a\u5468\u8d5b" + "ContestID_zh": "第 114 场周赛" }, { "Rating": 2381.2160234811, "ID": 2334, "Title": "Subarray With Elements Greater Than Varying Threshold", - "TitleZH": "\u5143\u7d20\u503c\u5927\u4e8e\u53d8\u5316\u9608\u503c\u7684\u5b50\u6570\u7ec4", + "TitleZH": "元素值大于变化阈值的子数组", "TitleSlug": "subarray-with-elements-greater-than-varying-threshold", "ContestSlug": "biweekly-contest-82", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 82 场双周赛" }, { "Rating": 2378.6234112504, "ID": 757, "Title": "Set Intersection Size At Least Two", - "TitleZH": "\u8bbe\u7f6e\u4ea4\u96c6\u5927\u5c0f\u81f3\u5c11\u4e3a2", + "TitleZH": "设置交集大小至少为2", "TitleSlug": "set-intersection-size-at-least-two", "ContestSlug": "weekly-contest-65", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u5468\u8d5b" + "ContestID_zh": "第 65 场周赛" }, { "Rating": 2377.3895801187, "ID": 854, "Title": "K-Similar Strings", - "TitleZH": "\u76f8\u4f3c\u5ea6\u4e3a K \u7684\u5b57\u7b26\u4e32", + "TitleZH": "相似度为 K 的字符串", "TitleSlug": "k-similar-strings", "ContestSlug": "weekly-contest-89", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u5468\u8d5b" + "ContestID_zh": "第 89 场周赛" }, { "Rating": 2376.8658923518, "ID": 887, "Title": "Super Egg Drop", - "TitleZH": "\u9e21\u86cb\u6389\u843d", + "TitleZH": "鸡蛋掉落", "TitleSlug": "super-egg-drop", "ContestSlug": "weekly-contest-97", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 97", - "ContestID_zh": "\u7b2c 97 \u573a\u5468\u8d5b" + "ContestID_zh": "第 97 场周赛" }, { "Rating": 2374.1850487395, "ID": 1840, "Title": "Maximum Building Height", - "TitleZH": "\u6700\u9ad8\u5efa\u7b51\u9ad8\u5ea6", + "TitleZH": "最高建筑高度", "TitleSlug": "maximum-building-height", "ContestSlug": "weekly-contest-238", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 238", - "ContestID_zh": "\u7b2c 238 \u573a\u5468\u8d5b" + "ContestID_zh": "第 238 场周赛" }, { "Rating": 2366.7099607655, "ID": 1183, "Title": "Maximum Number of Ones", - "TitleZH": "\u77e9\u9635\u4e2d 1 \u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "矩阵中 1 的最大数量", "TitleSlug": "maximum-number-of-ones", "ContestSlug": "biweekly-contest-8", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 8", - "ContestID_zh": "\u7b2c 8 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 8 场双周赛" }, { "Rating": 2364.3930657709, "ID": 2132, "Title": "Stamping the Grid", - "TitleZH": "\u7528\u90ae\u7968\u8d34\u6ee1\u7f51\u683c\u56fe", + "TitleZH": "用邮票贴满网格图", "TitleSlug": "stamping-the-grid", "ContestSlug": "biweekly-contest-69", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 69 场双周赛" }, { "Rating": 2364.3455634374, "ID": 2203, "Title": "Minimum Weighted Subgraph With the Required Paths", - "TitleZH": "\u5f97\u5230\u8981\u6c42\u8def\u5f84\u7684\u6700\u5c0f\u5e26\u6743\u5b50\u56fe", + "TitleZH": "得到要求路径的最小带权子图", "TitleSlug": "minimum-weighted-subgraph-with-the-required-paths", "ContestSlug": "weekly-contest-284", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 284", - "ContestID_zh": "\u7b2c 284 \u573a\u5468\u8d5b" + "ContestID_zh": "第 284 场周赛" }, { "Rating": 2363.5096568214, "ID": 1755, "Title": "Closest Subsequence Sum", - "TitleZH": "\u6700\u63a5\u8fd1\u76ee\u6807\u503c\u7684\u5b50\u5e8f\u5217\u548c", + "TitleZH": "最接近目标值的子序列和", "TitleSlug": "closest-subsequence-sum", "ContestSlug": "weekly-contest-227", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 227", - "ContestID_zh": "\u7b2c 227 \u573a\u5468\u8d5b" + "ContestID_zh": "第 227 场周赛" }, { "Rating": 2363.0240184484, "ID": 2312, "Title": "Selling Pieces of Wood", - "TitleZH": "\u5356\u6728\u5934\u5757", + "TitleZH": "卖木头块", "TitleSlug": "selling-pieces-of-wood", "ContestSlug": "weekly-contest-298", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 298", - "ContestID_zh": "\u7b2c 298 \u573a\u5468\u8d5b" + "ContestID_zh": "第 298 场周赛" }, { "Rating": 2362.6480880348, "ID": 1520, "Title": "Maximum Number of Non-Overlapping Substrings", - "TitleZH": "\u6700\u591a\u7684\u4e0d\u91cd\u53e0\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "最多的不重叠子字符串", "TitleSlug": "maximum-number-of-non-overlapping-substrings", "ContestSlug": "weekly-contest-198", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 198", - "ContestID_zh": "\u7b2c 198 \u573a\u5468\u8d5b" + "ContestID_zh": "第 198 场周赛" }, { "Rating": 2358.9669560824, "ID": 1707, "Title": "Maximum XOR With an Element From Array", - "TitleZH": "\u4e0e\u6570\u7ec4\u4e2d\u5143\u7d20\u7684\u6700\u5927\u5f02\u6216\u503c", + "TitleZH": "与数组中元素的最大异或值", "TitleSlug": "maximum-xor-with-an-element-from-array", "ContestSlug": "weekly-contest-221", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 221", - "ContestID_zh": "\u7b2c 221 \u573a\u5468\u8d5b" + "ContestID_zh": "第 221 场周赛" }, { "Rating": 2356.5811122453, "ID": 1467, "Title": "Probability of a Two Boxes Having The Same Number of Distinct Balls", - "TitleZH": "\u4e24\u4e2a\u76d2\u5b50\u4e2d\u7403\u7684\u989c\u8272\u6570\u76f8\u540c\u7684\u6982\u7387", + "TitleZH": "两个盒子中球的颜色数相同的概率", "TitleSlug": "probability-of-a-two-boxes-having-the-same-number-of-distinct-balls", "ContestSlug": "weekly-contest-191", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 191", - "ContestID_zh": "\u7b2c 191 \u573a\u5468\u8d5b" + "ContestID_zh": "第 191 场周赛" }, { "Rating": 2350.9694374861, "ID": 1713, "Title": "Minimum Operations to Make a Subsequence", - "TitleZH": "\u5f97\u5230\u5b50\u5e8f\u5217\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "得到子序列的最少操作次数", "TitleSlug": "minimum-operations-to-make-a-subsequence", "ContestSlug": "weekly-contest-222", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 222", - "ContestID_zh": "\u7b2c 222 \u573a\u5468\u8d5b" + "ContestID_zh": "第 222 场周赛" }, { "Rating": 2350.0380300939, "ID": 837, "Title": "New 21 Game", - "TitleZH": "\u65b021\u70b9", + "TitleZH": "新21点", "TitleSlug": "new-21-game", "ContestSlug": "weekly-contest-85", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u5468\u8d5b" + "ContestID_zh": "第 85 场周赛" }, { "Rating": 2348.5159376523, "ID": 1096, "Title": "Brace Expansion II", - "TitleZH": "\u82b1\u62ec\u53f7\u5c55\u5f00 II", + "TitleZH": "花括号展开 II", "TitleSlug": "brace-expansion-ii", "ContestSlug": "weekly-contest-142", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 142", - "ContestID_zh": "\u7b2c 142 \u573a\u5468\u8d5b" + "ContestID_zh": "第 142 场周赛" }, { "Rating": 2346.5717839654, "ID": 2258, "Title": "Escape the Spreading Fire", - "TitleZH": "\u9003\u79bb\u706b\u707e", + "TitleZH": "逃离火灾", "TitleSlug": "escape-the-spreading-fire", "ContestSlug": "biweekly-contest-77", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 77 场双周赛" }, { "Rating": 2345.3418191684, "ID": 1611, "Title": "Minimum One Bit Operations to Make Integers Zero", - "TitleZH": "\u4f7f\u6574\u6570\u53d8\u4e3a 0 \u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使整数变为 0 的最少操作次数", "TitleSlug": "minimum-one-bit-operations-to-make-integers-zero", "ContestSlug": "weekly-contest-209", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 209", - "ContestID_zh": "\u7b2c 209 \u573a\u5468\u8d5b" + "ContestID_zh": "第 209 场周赛" }, { "Rating": 2341.4506355884, "ID": 810, "Title": "Chalkboard XOR Game", - "TitleZH": "\u9ed1\u677f\u5f02\u6216\u6e38\u620f", + "TitleZH": "黑板异或游戏", "TitleSlug": "chalkboard-xor-game", "ContestSlug": "weekly-contest-78", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u5468\u8d5b" + "ContestID_zh": "第 78 场周赛" }, { "Rating": 2336.5210003185, "ID": 1505, "Title": "Minimum Possible Integer After at Most K Adjacent Swaps On Digits", - "TitleZH": "\u6700\u591a K \u6b21\u4ea4\u6362\u76f8\u90bb\u6570\u4f4d\u540e\u5f97\u5230\u7684\u6700\u5c0f\u6574\u6570", + "TitleZH": "最多 K 次交换相邻数位后得到的最小整数", "TitleSlug": "minimum-possible-integer-after-at-most-k-adjacent-swaps-on-digits", "ContestSlug": "weekly-contest-196", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 196", - "ContestID_zh": "\u7b2c 196 \u573a\u5468\u8d5b" + "ContestID_zh": "第 196 场周赛" }, { "Rating": 2333.2401505813, "ID": 1674, "Title": "Minimum Moves to Make Array Complementary", - "TitleZH": "\u4f7f\u6570\u7ec4\u4e92\u8865\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使数组互补的最少操作次数", "TitleSlug": "minimum-moves-to-make-array-complementary", "ContestSlug": "weekly-contest-217", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 217", - "ContestID_zh": "\u7b2c 217 \u573a\u5468\u8d5b" + "ContestID_zh": "第 217 场周赛" }, { "Rating": 2333.0621537307, "ID": 1866, "Title": "Number of Ways to Rearrange Sticks With K Sticks Visible", - "TitleZH": "\u6070\u6709 K \u6839\u6728\u68cd\u53ef\u4ee5\u770b\u5230\u7684\u6392\u5217\u6570\u76ee", + "TitleZH": "恰有 K 根木棍可以看到的排列数目", "TitleSlug": "number-of-ways-to-rearrange-sticks-with-k-sticks-visible", "ContestSlug": "weekly-contest-241", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 241", - "ContestID_zh": "\u7b2c 241 \u573a\u5468\u8d5b" + "ContestID_zh": "第 241 场周赛" }, { "Rating": 2333.0078041754, "ID": 1585, "Title": "Check If String Is Transformable With Substring Sort Operations", - "TitleZH": "\u68c0\u67e5\u5b57\u7b26\u4e32\u662f\u5426\u53ef\u4ee5\u901a\u8fc7\u6392\u5e8f\u5b50\u5b57\u7b26\u4e32\u5f97\u5230\u53e6\u4e00\u4e2a\u5b57\u7b26\u4e32", + "TitleZH": "检查字符串是否可以通过排序子字符串得到另一个字符串", "TitleSlug": "check-if-string-is-transformable-with-substring-sort-operations", "ContestSlug": "weekly-contest-206", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 206", - "ContestID_zh": "\u7b2c 206 \u573a\u5468\u8d5b" + "ContestID_zh": "第 206 场周赛" }, { "Rating": 2328.4294689238, "ID": 882, "Title": "Reachable Nodes In Subdivided Graph", - "TitleZH": "\u7ec6\u5206\u56fe\u4e2d\u7684\u53ef\u5230\u8fbe\u7ed3\u70b9", + "TitleZH": "细分图中的可到达结点", "TitleSlug": "reachable-nodes-in-subdivided-graph", "ContestSlug": "weekly-contest-96", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 96", - "ContestID_zh": "\u7b2c 96 \u573a\u5468\u8d5b" + "ContestID_zh": "第 96 场周赛" }, { "Rating": 2315.6037017989, "ID": 1187, "Title": "Make Array Strictly Increasing", - "TitleZH": "\u4f7f\u6570\u7ec4\u4e25\u683c\u9012\u589e", + "TitleZH": "使数组严格递增", "TitleSlug": "make-array-strictly-increasing", "ContestSlug": "weekly-contest-153", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 153", - "ContestID_zh": "\u7b2c 153 \u573a\u5468\u8d5b" + "ContestID_zh": "第 153 场周赛" }, { "Rating": 2315.0547336936, "ID": 2188, "Title": "Minimum Time to Finish the Race", - "TitleZH": "\u5b8c\u6210\u6bd4\u8d5b\u7684\u6700\u5c11\u65f6\u95f4", + "TitleZH": "完成比赛的最少时间", "TitleSlug": "minimum-time-to-finish-the-race", "ContestSlug": "weekly-contest-282", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 282", - "ContestID_zh": "\u7b2c 282 \u573a\u5468\u8d5b" + "ContestID_zh": "第 282 场周赛" }, { "Rating": 2312.9919953644, "ID": 1857, "Title": "Largest Color Value in a Directed Graph", - "TitleZH": "\u6709\u5411\u56fe\u4e2d\u6700\u5927\u989c\u8272\u503c", + "TitleZH": "有向图中最大颜色值", "TitleSlug": "largest-color-value-in-a-directed-graph", "ContestSlug": "weekly-contest-240", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 240", - "ContestID_zh": "\u7b2c 240 \u573a\u5468\u8d5b" + "ContestID_zh": "第 240 场周赛" }, { "Rating": 2310.3824631335, "ID": 1959, "Title": "Minimum Total Space Wasted With K Resizing Operations", - "TitleZH": "K \u6b21\u8c03\u6574\u6570\u7ec4\u5927\u5c0f\u6d6a\u8d39\u7684\u6700\u5c0f\u603b\u7a7a\u95f4", + "TitleZH": "K 次调整数组大小浪费的最小总空间", "TitleSlug": "minimum-total-space-wasted-with-k-resizing-operations", "ContestSlug": "biweekly-contest-58", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 58", - "ContestID_zh": "\u7b2c 58 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 58 场双周赛" }, { "Rating": 2308.6545905335, "ID": 1617, "Title": "Count Subtrees With Max Distance Between Cities", - "TitleZH": "\u7edf\u8ba1\u5b50\u6811\u4e2d\u57ce\u5e02\u4e4b\u95f4\u6700\u5927\u8ddd\u79bb", + "TitleZH": "统计子树中城市之间最大距离", "TitleSlug": "count-subtrees-with-max-distance-between-cities", "ContestSlug": "weekly-contest-210", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 210", - "ContestID_zh": "\u7b2c 210 \u573a\u5468\u8d5b" + "ContestID_zh": "第 210 场周赛" }, { "Rating": 2307.0161713185, "ID": 1655, "Title": "Distribute Repeating Integers", - "TitleZH": "\u5206\u914d\u91cd\u590d\u6574\u6570", + "TitleZH": "分配重复整数", "TitleSlug": "distribute-repeating-integers", "ContestSlug": "biweekly-contest-39", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 39", - "ContestID_zh": "\u7b2c 39 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 39 场双周赛" }, { "Rating": 2306.8472649456, "ID": 862, "Title": "Shortest Subarray with Sum at Least K", - "TitleZH": "\u548c\u81f3\u5c11\u4e3a K \u7684\u6700\u77ed\u5b50\u6570\u7ec4", + "TitleZH": "和至少为 K 的最短子数组", "TitleSlug": "shortest-subarray-with-sum-at-least-k", "ContestSlug": "weekly-contest-91", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 91", - "ContestID_zh": "\u7b2c 91 \u573a\u5468\u8d5b" + "ContestID_zh": "第 91 场周赛" }, { "Rating": 2305.4498281454, "ID": 2306, "Title": "Naming a Company", - "TitleZH": "\u516c\u53f8\u547d\u540d", + "TitleZH": "公司命名", "TitleSlug": "naming-a-company", "ContestSlug": "weekly-contest-297", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 297", - "ContestID_zh": "\u7b2c 297 \u573a\u5468\u8d5b" + "ContestID_zh": "第 297 场周赛" }, { "Rating": 2304.3094138939, "ID": 2242, "Title": "Maximum Score of a Node Sequence", - "TitleZH": "\u8282\u70b9\u5e8f\u5217\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "节点序列的最大得分", "TitleSlug": "maximum-score-of-a-node-sequence", "ContestSlug": "biweekly-contest-76", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 76 场双周赛" }, { "Rating": 2300.1557840589, "ID": 1697, "Title": "Checking Existence of Edge Length Limited Paths", - "TitleZH": "\u68c0\u67e5\u8fb9\u957f\u5ea6\u9650\u5236\u7684\u8def\u5f84\u662f\u5426\u5b58\u5728", + "TitleZH": "检查边长度限制的路径是否存在", "TitleSlug": "checking-existence-of-edge-length-limited-paths", "ContestSlug": "weekly-contest-220", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 220", - "ContestID_zh": "\u7b2c 220 \u573a\u5468\u8d5b" + "ContestID_zh": "第 220 场周赛" }, { "Rating": 2298.6242048519, "ID": 2458, "Title": "Height of Binary Tree After Subtree Removal Queries", - "TitleZH": "\u79fb\u9664\u5b50\u6811\u540e\u7684\u4e8c\u53c9\u6811\u9ad8\u5ea6", + "TitleZH": "移除子树后的二叉树高度", "TitleSlug": "height-of-binary-tree-after-subtree-removal-queries", "ContestSlug": "weekly-contest-317", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 317", - "ContestID_zh": "\u7b2c 317 \u573a\u5468\u8d5b" + "ContestID_zh": "第 317 场周赛" }, { "Rating": 2297.105362516, "ID": 1263, "Title": "Minimum Moves to Move a Box to Their Target Location", - "TitleZH": "\u63a8\u7bb1\u5b50", + "TitleZH": "推箱子", "TitleSlug": "minimum-moves-to-move-a-box-to-their-target-location", "ContestSlug": "weekly-contest-163", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 163", - "ContestID_zh": "\u7b2c 163 \u573a\u5468\u8d5b" + "ContestID_zh": "第 163 场周赛" }, { "Rating": 2294.0981174197, "ID": 932, "Title": "Beautiful Array", - "TitleZH": "\u6f02\u4eae\u6570\u7ec4", + "TitleZH": "漂亮数组", "TitleSlug": "beautiful-array", "ContestSlug": "weekly-contest-108", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 108", - "ContestID_zh": "\u7b2c 108 \u573a\u5468\u8d5b" + "ContestID_zh": "第 108 场周赛" }, { "Rating": 2292.1434666805, "ID": 761, "Title": "Special Binary String", - "TitleZH": "\u7279\u6b8a\u7684\u4e8c\u8fdb\u5236\u5e8f\u5217", + "TitleZH": "特殊的二进制序列", "TitleSlug": "special-binary-string", "ContestSlug": "weekly-contest-66", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u5468\u8d5b" + "ContestID_zh": "第 66 场周赛" }, { "Rating": 2290.9040038639, "ID": 1591, "Title": "Strange Printer II", - "TitleZH": "\u5947\u602a\u7684\u6253\u5370\u673a II", + "TitleZH": "奇怪的打印机 II", "TitleSlug": "strange-printer-ii", "ContestSlug": "biweekly-contest-35", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 35", - "ContestID_zh": "\u7b2c 35 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 35 场双周赛" }, { "Rating": 2288.2117442123, "ID": 1569, "Title": "Number of Ways to Reorder Array to Get Same BST", - "TitleZH": "\u5c06\u5b50\u6570\u7ec4\u91cd\u65b0\u6392\u5e8f\u5f97\u5230\u540c\u4e00\u4e2a\u4e8c\u53c9\u67e5\u627e\u6811\u7684\u65b9\u6848\u6570", + "TitleZH": "将子数组重新排序得到同一个二叉查找树的方案数", "TitleSlug": "number-of-ways-to-reorder-array-to-get-same-bst", "ContestSlug": "weekly-contest-204", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 204", - "ContestID_zh": "\u7b2c 204 \u573a\u5468\u8d5b" + "ContestID_zh": "第 204 场周赛" }, { "Rating": 2286.1378742318, "ID": 1851, "Title": "Minimum Interval to Include Each Query", - "TitleZH": "\u5305\u542b\u6bcf\u4e2a\u67e5\u8be2\u7684\u6700\u5c0f\u533a\u95f4", + "TitleZH": "包含每个查询的最小区间", "TitleSlug": "minimum-interval-to-include-each-query", "ContestSlug": "weekly-contest-239", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 239", - "ContestID_zh": "\u7b2c 239 \u573a\u5468\u8d5b" + "ContestID_zh": "第 239 场周赛" }, { "Rating": 2284.4463940346, "ID": 1723, "Title": "Find Minimum Time to Finish All Jobs", - "TitleZH": "\u5b8c\u6210\u6240\u6709\u5de5\u4f5c\u7684\u6700\u77ed\u65f6\u95f4", + "TitleZH": "完成所有工作的最短时间", "TitleSlug": "find-minimum-time-to-finish-all-jobs", "ContestSlug": "weekly-contest-223", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 223", - "ContestID_zh": "\u7b2c 223 \u573a\u5468\u8d5b" + "ContestID_zh": "第 223 场周赛" }, { "Rating": 2280.3143643878, "ID": 2407, "Title": "Longest Increasing Subsequence II", - "TitleZH": "\u6700\u957f\u9012\u589e\u5b50\u5e8f\u5217 II", + "TitleZH": "最长递增子序列 II", "TitleSlug": "longest-increasing-subsequence-ii", "ContestSlug": "weekly-contest-310", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 310", - "ContestID_zh": "\u7b2c 310 \u573a\u5468\u8d5b" + "ContestID_zh": "第 310 场周赛" }, { "Rating": 2277.3595662538, "ID": 2029, "Title": "Stone Game IX", - "TitleZH": "\u77f3\u5b50\u6e38\u620f IX", + "TitleZH": "石子游戏 IX", "TitleSlug": "stone-game-ix", "ContestSlug": "weekly-contest-261", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 261", - "ContestID_zh": "\u7b2c 261 \u573a\u5468\u8d5b" + "ContestID_zh": "第 261 场周赛" }, { "Rating": 2277.0238076464, "ID": 749, "Title": "Contain Virus", - "TitleZH": "\u9694\u79bb\u75c5\u6bd2", + "TitleZH": "隔离病毒", "TitleSlug": "contain-virus", "ContestSlug": "weekly-contest-63", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u5468\u8d5b" + "ContestID_zh": "第 63 场周赛" }, { "Rating": 2276.4233585631, "ID": 1498, "Title": "Number of Subsequences That Satisfy the Given Sum Condition", - "TitleZH": "\u6ee1\u8db3\u6761\u4ef6\u7684\u5b50\u5e8f\u5217\u6570\u76ee", + "TitleZH": "满足条件的子序列数目", "TitleSlug": "number-of-subsequences-that-satisfy-the-given-sum-condition", "ContestSlug": "weekly-contest-195", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 195", - "ContestID_zh": "\u7b2c 195 \u573a\u5468\u8d5b" + "ContestID_zh": "第 195 场周赛" }, { "Rating": 2275.7337818748, "ID": 1606, "Title": "Find Servers That Handled Most Number of Requests", - "TitleZH": "\u627e\u5230\u5904\u7406\u6700\u591a\u8bf7\u6c42\u7684\u670d\u52a1\u5668", + "TitleZH": "找到处理最多请求的服务器", "TitleSlug": "find-servers-that-handled-most-number-of-requests", "ContestSlug": "biweekly-contest-36", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 36", - "ContestID_zh": "\u7b2c 36 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 36 场双周赛" }, { "Rating": 2273.7910625337, "ID": 753, "Title": "Cracking the Safe", - "TitleZH": "\u7834\u89e3\u4fdd\u9669\u7bb1", + "TitleZH": "破解保险箱", "TitleSlug": "cracking-the-safe", "ContestSlug": "weekly-contest-64", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u5468\u8d5b" + "ContestID_zh": "第 64 场周赛" }, { "Rating": 2273.2215764545, "ID": 1434, "Title": "Number of Ways to Wear Different Hats to Each Other", - "TitleZH": "\u6bcf\u4e2a\u4eba\u6234\u4e0d\u540c\u5e3d\u5b50\u7684\u65b9\u6848\u6570", + "TitleZH": "每个人戴不同帽子的方案数", "TitleSlug": "number-of-ways-to-wear-different-hats-to-each-other", "ContestSlug": "biweekly-contest-25", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 25", - "ContestID_zh": "\u7b2c 25 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 25 场双周赛" }, { "Rating": 2272.4412003208, "ID": 2179, "Title": "Count Good Triplets in an Array", - "TitleZH": "\u7edf\u8ba1\u6570\u7ec4\u4e2d\u597d\u4e09\u5143\u7ec4\u6570\u76ee", + "TitleZH": "统计数组中好三元组数目", "TitleSlug": "count-good-triplets-in-an-array", "ContestSlug": "biweekly-contest-72", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 72 场双周赛" }, { "Rating": 2272.1122260637, "ID": 952, "Title": "Largest Component Size by Common Factor", - "TitleZH": "\u6309\u516c\u56e0\u6570\u8ba1\u7b97\u6700\u5927\u7ec4\u4ef6\u5927\u5c0f", + "TitleZH": "按公因数计算最大组件大小", "TitleSlug": "largest-component-size-by-common-factor", "ContestSlug": "weekly-contest-113", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 113", - "ContestID_zh": "\u7b2c 113 \u573a\u5468\u8d5b" + "ContestID_zh": "第 113 场周赛" }, { "Rating": 2265.2118886972, "ID": 2141, "Title": "Maximum Running Time of N Computers", - "TitleZH": "\u540c\u65f6\u8fd0\u884c N \u53f0\u7535\u8111\u7684\u6700\u957f\u65f6\u95f4", + "TitleZH": "同时运行 N 台电脑的最长时间", "TitleSlug": "maximum-running-time-of-n-computers", "ContestSlug": "weekly-contest-276", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 276", - "ContestID_zh": "\u7b2c 276 \u573a\u5468\u8d5b" + "ContestID_zh": "第 276 场周赛" }, { "Rating": 2260.2799775623, "ID": 1997, "Title": "First Day Where You Have Been in All the Rooms", - "TitleZH": "\u8bbf\u95ee\u5b8c\u6240\u6709\u623f\u95f4\u7684\u7b2c\u4e00\u5929", + "TitleZH": "访问完所有房间的第一天", "TitleSlug": "first-day-where-you-have-been-in-all-the-rooms", "ContestSlug": "weekly-contest-257", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 257", - "ContestID_zh": "\u7b2c 257 \u573a\u5468\u8d5b" + "ContestID_zh": "第 257 场周赛" }, { "Rating": 2259.6572191969, "ID": 857, "Title": "Minimum Cost to Hire K Workers", - "TitleZH": "\u96c7\u4f63 K \u540d\u5de5\u4eba\u7684\u6700\u4f4e\u6210\u672c", + "TitleZH": "雇佣 K 名工人的最低成本", "TitleSlug": "minimum-cost-to-hire-k-workers", "ContestSlug": "weekly-contest-90", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u5468\u8d5b" + "ContestID_zh": "第 90 场周赛" }, { "Rating": 2258.6371797452, "ID": 864, "Title": "Shortest Path to Get All Keys", - "TitleZH": "\u83b7\u53d6\u6240\u6709\u94a5\u5319\u7684\u6700\u77ed\u8def\u5f84", + "TitleZH": "获取所有钥匙的最短路径", "TitleSlug": "shortest-path-to-get-all-keys", "ContestSlug": "weekly-contest-92", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 92", - "ContestID_zh": "\u7b2c 92 \u573a\u5468\u8d5b" + "ContestID_zh": "第 92 场周赛" }, { "Rating": 2250.9318291559, "ID": 1125, "Title": "Smallest Sufficient Team", - "TitleZH": "\u6700\u5c0f\u7684\u5fc5\u8981\u56e2\u961f", + "TitleZH": "最小的必要团队", "TitleSlug": "smallest-sufficient-team", "ContestSlug": "weekly-contest-145", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 145", - "ContestID_zh": "\u7b2c 145 \u573a\u5468\u8d5b" + "ContestID_zh": "第 145 场周赛" }, { "Rating": 2250.2578740769, "ID": 1199, "Title": "Minimum Time to Build Blocks", - "TitleZH": "\u5efa\u9020\u8857\u533a\u7684\u6700\u77ed\u65f6\u95f4", + "TitleZH": "建造街区的最短时间", "TitleSlug": "minimum-time-to-build-blocks", "ContestSlug": "biweekly-contest-9", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 9", - "ContestID_zh": "\u7b2c 9 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 9 场双周赛" }, { "Rating": 2250.0454791316, "ID": 1307, "Title": "Verbal Arithmetic Puzzle", - "TitleZH": "\u53e3\u7b97\u96be\u9898", + "TitleZH": "口算难题", "TitleSlug": "verbal-arithmetic-puzzle", "ContestSlug": "weekly-contest-169", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 169", - "ContestID_zh": "\u7b2c 169 \u573a\u5468\u8d5b" + "ContestID_zh": "第 169 场周赛" }, { "Rating": 2246.8671174565, "ID": 960, "Title": "Delete Columns to Make Sorted III", - "TitleZH": "\u5220\u5217\u9020\u5e8f III", + "TitleZH": "删列造序 III", "TitleSlug": "delete-columns-to-make-sorted-iii", "ContestSlug": "weekly-contest-115", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 115", - "ContestID_zh": "\u7b2c 115 \u573a\u5468\u8d5b" + "ContestID_zh": "第 115 场周赛" }, { "Rating": 2246.0452639352, "ID": 2183, "Title": "Count Array Pairs Divisible by K", - "TitleZH": "\u7edf\u8ba1\u53ef\u4ee5\u88ab K \u6574\u9664\u7684\u4e0b\u6807\u5bf9\u6570\u76ee", + "TitleZH": "统计可以被 K 整除的下标对数目", "TitleSlug": "count-array-pairs-divisible-by-k", "ContestSlug": "weekly-contest-281", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 281", - "ContestID_zh": "\u7b2c 281 \u573a\u5468\u8d5b" + "ContestID_zh": "第 281 场周赛" }, { "Rating": 2241.5199974312, "ID": 1240, "Title": "Tiling a Rectangle with the Fewest Squares", - "TitleZH": "\u94fa\u74f7\u7816", + "TitleZH": "铺瓷砖", "TitleSlug": "tiling-a-rectangle-with-the-fewest-squares", "ContestSlug": "weekly-contest-160", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 160", - "ContestID_zh": "\u7b2c 160 \u573a\u5468\u8d5b" + "ContestID_zh": "第 160 场周赛" }, { "Rating": 2235.9672341699, "ID": 850, "Title": "Rectangle Area II", - "TitleZH": "\u77e9\u5f62\u9762\u79ef II", + "TitleZH": "矩形面积 II", "TitleSlug": "rectangle-area-ii", "ContestSlug": "weekly-contest-88", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u5468\u8d5b" + "ContestID_zh": "第 88 场周赛" }, { "Rating": 2234.9191877602, "ID": 1915, "Title": "Number of Wonderful Substrings", - "TitleZH": "\u6700\u7f8e\u5b50\u5b57\u7b26\u4e32\u7684\u6570\u76ee", + "TitleZH": "最美子字符串的数目", "TitleSlug": "number-of-wonderful-substrings", "ContestSlug": "weekly-contest-247", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 247", - "ContestID_zh": "\u7b2c 247 \u573a\u5468\u8d5b" + "ContestID_zh": "第 247 场周赛" }, { "Rating": 2233.963903408, "ID": 1178, "Title": "Number of Valid Words for Each Puzzle", - "TitleZH": "\u731c\u5b57\u8c1c", + "TitleZH": "猜字谜", "TitleSlug": "number-of-valid-words-for-each-puzzle", "ContestSlug": "weekly-contest-152", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 152", - "ContestID_zh": "\u7b2c 152 \u573a\u5468\u8d5b" + "ContestID_zh": "第 152 场周赛" }, { "Rating": 2231.8099102949, "ID": 1766, "Title": "Tree of Coprimes", - "TitleZH": "\u4e92\u8d28\u6811", + "TitleZH": "互质树", "TitleSlug": "tree-of-coprimes", "ContestSlug": "biweekly-contest-46", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 46", - "ContestID_zh": "\u7b2c 46 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 46 场双周赛" }, { "Rating": 2230.1673059455, "ID": 1012, "Title": "Numbers With Repeated Digits", - "TitleZH": "\u81f3\u5c11\u6709 1 \u4f4d\u91cd\u590d\u7684\u6570\u5b57", + "TitleZH": "至少有 1 位重复的数字", "TitleSlug": "numbers-with-repeated-digits", "ContestSlug": "weekly-contest-128", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 128", - "ContestID_zh": "\u7b2c 128 \u573a\u5468\u8d5b" + "ContestID_zh": "第 128 场周赛" }, { "Rating": 2225.3877535768, "ID": 2163, "Title": "Minimum Difference in Sums After Removal of Elements", - "TitleZH": "\u5220\u9664\u5143\u7d20\u540e\u548c\u7684\u6700\u5c0f\u5dee\u503c", + "TitleZH": "删除元素后和的最小差值", "TitleSlug": "minimum-difference-in-sums-after-removal-of-elements", "ContestSlug": "biweekly-contest-71", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 71 场双周赛" }, { "Rating": 2222.4805422748, "ID": 2276, "Title": "Count Integers in Intervals", - "TitleZH": "\u7edf\u8ba1\u533a\u95f4\u4e2d\u7684\u6574\u6570\u6570\u76ee", + "TitleZH": "统计区间中的整数数目", "TitleSlug": "count-integers-in-intervals", "ContestSlug": "weekly-contest-293", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 293", - "ContestID_zh": "\u7b2c 293 \u573a\u5468\u8d5b" + "ContestID_zh": "第 293 场周赛" }, { "Rating": 2221.7336557442, "ID": 1542, "Title": "Find Longest Awesome Substring", - "TitleZH": "\u627e\u51fa\u6700\u957f\u7684\u8d85\u8d5e\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "找出最长的超赞子字符串", "TitleSlug": "find-longest-awesome-substring", "ContestSlug": "biweekly-contest-32", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 32", - "ContestID_zh": "\u7b2c 32 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 32 场双周赛" }, { "Rating": 2221.3538766773, "ID": 1627, "Title": "Graph Connectivity With Threshold", - "TitleZH": "\u5e26\u9608\u503c\u7684\u56fe\u8fde\u901a\u6027", + "TitleZH": "带阈值的图连通性", "TitleSlug": "graph-connectivity-with-threshold", "ContestSlug": "weekly-contest-211", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 211", - "ContestID_zh": "\u7b2c 211 \u573a\u5468\u8d5b" + "ContestID_zh": "第 211 场周赛" }, { "Rating": 2220.0903365738, "ID": 2223, "Title": "Sum of Scores of Built Strings", - "TitleZH": "\u6784\u9020\u5b57\u7b26\u4e32\u7684\u603b\u5f97\u5206\u548c", + "TitleZH": "构造字符串的总得分和", "TitleSlug": "sum-of-scores-of-built-strings", "ContestSlug": "biweekly-contest-75", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 75 场双周赛" }, { "Rating": 2219.3465296423, "ID": 2167, "Title": "Minimum Time to Remove All Cars Containing Illegal Goods", - "TitleZH": "\u79fb\u9664\u6240\u6709\u8f7d\u6709\u8fdd\u7981\u8d27\u7269\u8f66\u53a2\u6240\u9700\u7684\u6700\u5c11\u65f6\u95f4", + "TitleZH": "移除所有载有违禁货物车厢所需的最少时间", "TitleSlug": "minimum-time-to-remove-all-cars-containing-illegal-goods", "ContestSlug": "weekly-contest-279", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 279", - "ContestID_zh": "\u7b2c 279 \u573a\u5468\u8d5b" + "ContestID_zh": "第 279 场周赛" }, { "Rating": 2217.8090802563, "ID": 2025, "Title": "Maximum Number of Ways to Partition an Array", - "TitleZH": "\u5206\u5272\u6570\u7ec4\u7684\u6700\u591a\u65b9\u6848\u6570", + "TitleZH": "分割数组的最多方案数", "TitleSlug": "maximum-number-of-ways-to-partition-an-array", "ContestSlug": "biweekly-contest-62", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 62", - "ContestID_zh": "\u7b2c 62 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 62 场双周赛" }, { "Rating": 2214.4798747386, "ID": 1889, "Title": "Minimum Space Wasted From Packaging", - "TitleZH": "\u88c5\u5305\u88f9\u7684\u6700\u5c0f\u6d6a\u8d39\u7a7a\u95f4", + "TitleZH": "装包裹的最小浪费空间", "TitleSlug": "minimum-space-wasted-from-packaging", "ContestSlug": "weekly-contest-244", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 244", - "ContestID_zh": "\u7b2c 244 \u573a\u5468\u8d5b" + "ContestID_zh": "第 244 场周赛" }, { "Rating": 2210.3503183571, "ID": 992, "Title": "Subarrays with K Different Integers", - "TitleZH": "K \u4e2a\u4e0d\u540c\u6574\u6570\u7684\u5b50\u6570\u7ec4", + "TitleZH": "K 个不同整数的子数组", "TitleSlug": "subarrays-with-k-different-integers", "ContestSlug": "weekly-contest-123", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 123", - "ContestID_zh": "\u7b2c 123 \u573a\u5468\u8d5b" + "ContestID_zh": "第 123 场周赛" }, { "Rating": 2209.8815936961, "ID": 2081, "Title": "Sum of k-Mirror Numbers", - "TitleZH": "k \u955c\u50cf\u6570\u5b57\u7684\u548c", + "TitleZH": "k 镜像数字的和", "TitleSlug": "sum-of-k-mirror-numbers", "ContestSlug": "weekly-contest-268", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 268", - "ContestID_zh": "\u7b2c 268 \u573a\u5468\u8d5b" + "ContestID_zh": "第 268 场周赛" }, { "Rating": 2208.5532172086, "ID": 1568, "Title": "Minimum Number of Days to Disconnect Island", - "TitleZH": "\u4f7f\u9646\u5730\u5206\u79bb\u7684\u6700\u5c11\u5929\u6570", + "TitleZH": "使陆地分离的最少天数", "TitleSlug": "minimum-number-of-days-to-disconnect-island", "ContestSlug": "weekly-contest-204", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 204", - "ContestID_zh": "\u7b2c 204 \u573a\u5468\u8d5b" + "ContestID_zh": "第 204 场周赛" }, { "Rating": 2207.8565809952, "ID": 1649, "Title": "Create Sorted Array through Instructions", - "TitleZH": "\u901a\u8fc7\u6307\u4ee4\u521b\u5efa\u6709\u5e8f\u6570\u7ec4", + "TitleZH": "通过指令创建有序数组", "TitleSlug": "create-sorted-array-through-instructions", "ContestSlug": "weekly-contest-214", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 214", - "ContestID_zh": "\u7b2c 214 \u573a\u5468\u8d5b" + "ContestID_zh": "第 214 场周赛" }, { "Rating": 2205.4304373587, "ID": 1157, "Title": "Online Majority Element In Subarray", - "TitleZH": "\u5b50\u6570\u7ec4\u4e2d\u5360\u7edd\u5927\u591a\u6570\u7684\u5143\u7d20", + "TitleZH": "子数组中占绝大多数的元素", "TitleSlug": "online-majority-element-in-subarray", "ContestSlug": "weekly-contest-149", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 149", - "ContestID_zh": "\u7b2c 149 \u573a\u5468\u8d5b" + "ContestID_zh": "第 149 场周赛" }, { "Rating": 2204.3524370174, "ID": 879, "Title": "Profitable Schemes", - "TitleZH": "\u76c8\u5229\u8ba1\u5212", + "TitleZH": "盈利计划", "TitleSlug": "profitable-schemes", "ContestSlug": "weekly-contest-95", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 95", - "ContestID_zh": "\u7b2c 95 \u573a\u5468\u8d5b" + "ContestID_zh": "第 95 场周赛" }, { "Rating": 2203.1738850937, "ID": 1246, "Title": "Palindrome Removal", - "TitleZH": "\u5220\u9664\u56de\u6587\u5b50\u6570\u7ec4", + "TitleZH": "删除回文子数组", "TitleSlug": "palindrome-removal", "ContestSlug": "biweekly-contest-12", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 12", - "ContestID_zh": "\u7b2c 12 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 12 场双周赛" }, { "Rating": 2201.8209584221, "ID": 1453, "Title": "Maximum Number of Darts Inside of a Circular Dartboard", - "TitleZH": "\u5706\u5f62\u9776\u5185\u7684\u6700\u5927\u98de\u9556\u6570\u91cf", + "TitleZH": "圆形靶内的最大飞镖数量", "TitleSlug": "maximum-number-of-darts-inside-of-a-circular-dartboard", "ContestSlug": "weekly-contest-189", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 189", - "ContestID_zh": "\u7b2c 189 \u573a\u5468\u8d5b" + "ContestID_zh": "第 189 场周赛" }, { "Rating": 2201.6219336792, "ID": 2045, "Title": "Second Minimum Time to Reach Destination", - "TitleZH": "\u5230\u8fbe\u76ee\u7684\u5730\u7684\u7b2c\u4e8c\u77ed\u65f6\u95f4", + "TitleZH": "到达目的地的第二短时间", "TitleSlug": "second-minimum-time-to-reach-destination", "ContestSlug": "weekly-contest-263", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 263", - "ContestID_zh": "\u7b2c 263 \u573a\u5468\u8d5b" + "ContestID_zh": "第 263 场周赛" }, { "Rating": 2200.6623666057, "ID": 847, "Title": "Shortest Path Visiting All Nodes", - "TitleZH": "\u8bbf\u95ee\u6240\u6709\u8282\u70b9\u7684\u6700\u77ed\u8def\u5f84", + "TitleZH": "访问所有节点的最短路径", "TitleSlug": "shortest-path-visiting-all-nodes", "ContestSlug": "weekly-contest-87", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u5468\u8d5b" + "ContestID_zh": "第 87 场周赛" }, { "Rating": 2198.4642973466, "ID": 1739, "Title": "Building Boxes", - "TitleZH": "\u653e\u7f6e\u76d2\u5b50", + "TitleZH": "放置盒子", "TitleSlug": "building-boxes", "ContestSlug": "weekly-contest-225", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 225", - "ContestID_zh": "\u7b2c 225 \u573a\u5468\u8d5b" + "ContestID_zh": "第 225 场周赛" }, { "Rating": 2198.3290662783, "ID": 1621, "Title": "Number of Sets of K Non-Overlapping Line Segments", - "TitleZH": "\u5927\u5c0f\u4e3a K \u7684\u4e0d\u91cd\u53e0\u7ebf\u6bb5\u7684\u6570\u76ee", + "TitleZH": "大小为 K 的不重叠线段的数目", "TitleSlug": "number-of-sets-of-k-non-overlapping-line-segments", "ContestSlug": "biweekly-contest-37", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 37", - "ContestID_zh": "\u7b2c 37 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 37 场双周赛" }, { "Rating": 2197.0951445919, "ID": 834, "Title": "Sum of Distances in Tree", - "TitleZH": "\u6811\u4e2d\u8ddd\u79bb\u4e4b\u548c", + "TitleZH": "树中距离之和", "TitleSlug": "sum-of-distances-in-tree", "ContestSlug": "weekly-contest-84", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u5468\u8d5b" + "ContestID_zh": "第 84 场周赛" }, { "Rating": 2190.1757477854, "ID": 1478, "Title": "Allocate Mailboxes", - "TitleZH": "\u5b89\u6392\u90ae\u7b52", + "TitleZH": "安排邮筒", "TitleSlug": "allocate-mailboxes", "ContestSlug": "biweekly-contest-28", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 28", - "ContestID_zh": "\u7b2c 28 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 28 场双周赛" }, { "Rating": 2189.3802630548, "ID": 1074, "Title": "Number of Submatrices That Sum to Target", - "TitleZH": "\u5143\u7d20\u548c\u4e3a\u76ee\u6807\u503c\u7684\u5b50\u77e9\u9635\u6570\u91cf", + "TitleZH": "元素和为目标值的子矩阵数量", "TitleSlug": "number-of-submatrices-that-sum-to-target", "ContestSlug": "weekly-contest-139", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 139", - "ContestID_zh": "\u7b2c 139 \u573a\u5468\u8d5b" + "ContestID_zh": "第 139 场周赛" }, { "Rating": 2185.5444704515, "ID": 943, "Title": "Find the Shortest Superstring", - "TitleZH": "\u6700\u77ed\u8d85\u7ea7\u4e32", + "TitleZH": "最短超级串", "TitleSlug": "find-the-shortest-superstring", "ContestSlug": "weekly-contest-111", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 111", - "ContestID_zh": "\u7b2c 111 \u573a\u5468\u8d5b" + "ContestID_zh": "第 111 场周赛" }, { "Rating": 2184.5241011615, "ID": 1081, "Title": "Smallest Subsequence of Distinct Characters", - "TitleZH": "\u4e0d\u540c\u5b57\u7b26\u7684\u6700\u5c0f\u5b50\u5e8f\u5217", + "TitleZH": "不同字符的最小子序列", "TitleSlug": "smallest-subsequence-of-distinct-characters", "ContestSlug": "weekly-contest-140", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 140", - "ContestID_zh": "\u7b2c 140 \u573a\u5468\u8d5b" + "ContestID_zh": "第 140 场周赛" }, { "Rating": 2182.6180030785, "ID": 891, "Title": "Sum of Subsequence Widths", - "TitleZH": "\u5b50\u5e8f\u5217\u5bbd\u5ea6\u4e4b\u548c", + "TitleZH": "子序列宽度之和", "TitleSlug": "sum-of-subsequence-widths", "ContestSlug": "weekly-contest-98", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 98", - "ContestID_zh": "\u7b2c 98 \u573a\u5468\u8d5b" + "ContestID_zh": "第 98 场周赛" }, { "Rating": 2182.054452981, "ID": 1771, "Title": "Maximize Palindrome Length From Subsequences", - "TitleZH": "\u7531\u5b50\u5e8f\u5217\u6784\u9020\u7684\u6700\u957f\u56de\u6587\u4e32\u7684\u957f\u5ea6", + "TitleZH": "由子序列构造的最长回文串的长度", "TitleSlug": "maximize-palindrome-length-from-subsequences", "ContestSlug": "weekly-contest-229", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 229", - "ContestID_zh": "\u7b2c 229 \u573a\u5468\u8d5b" + "ContestID_zh": "第 229 场周赛" }, { "Rating": 2181.7821188042, "ID": 1912, "Title": "Design Movie Rental System", - "TitleZH": "\u8bbe\u8ba1\u7535\u5f71\u79df\u501f\u7cfb\u7edf", + "TitleZH": "设计电影租借系统", "TitleSlug": "design-movie-rental-system", "ContestSlug": "biweekly-contest-55", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 55", - "ContestID_zh": "\u7b2c 55 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 55 场双周赛" }, { "Rating": 2178.4249114144, "ID": 2065, "Title": "Maximum Path Quality of a Graph", - "TitleZH": "\u6700\u5927\u5316\u4e00\u5f20\u56fe\u4e2d\u7684\u8def\u5f84\u4ef7\u503c", + "TitleZH": "最大化一张图中的路径价值", "TitleSlug": "maximum-path-quality-of-a-graph", "ContestSlug": "weekly-contest-266", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 266", - "ContestID_zh": "\u7b2c 266 \u573a\u5468\u8d5b" + "ContestID_zh": "第 266 场周赛" }, { "Rating": 2175.6850426027, "ID": 1420, "Title": "Build Array Where You Can Find The Maximum Exactly K Comparisons", - "TitleZH": "\u751f\u6210\u6570\u7ec4", + "TitleZH": "生成数组", "TitleSlug": "build-array-where-you-can-find-the-maximum-exactly-k-comparisons", "ContestSlug": "weekly-contest-185", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 185", - "ContestID_zh": "\u7b2c 185 \u573a\u5468\u8d5b" + "ContestID_zh": "第 185 场周赛" }, { "Rating": 2175.1190473433, "ID": 2454, "Title": "Next Greater Element IV", - "TitleZH": "\u4e0b\u4e00\u4e2a\u66f4\u5927\u5143\u7d20 IV", + "TitleZH": "下一个更大元素 IV", "TitleSlug": "next-greater-element-iv", "ContestSlug": "biweekly-contest-90", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 90 场双周赛" }, { "Rating": 2171.716066664, "ID": 1691, "Title": "Maximum Height by Stacking Cuboids ", - "TitleZH": "\u5806\u53e0\u957f\u65b9\u4f53\u7684\u6700\u5927\u9ad8\u5ea6", + "TitleZH": "堆叠长方体的最大高度", "TitleSlug": "maximum-height-by-stacking-cuboids", "ContestSlug": "weekly-contest-219", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 219", - "ContestID_zh": "\u7b2c 219 \u573a\u5468\u8d5b" + "ContestID_zh": "第 219 场周赛" }, { "Rating": 2170.1079846744, "ID": 1862, "Title": "Sum of Floored Pairs", - "TitleZH": "\u5411\u4e0b\u53d6\u6574\u6570\u5bf9\u548c", + "TitleZH": "向下取整数对和", "TitleSlug": "sum-of-floored-pairs", "ContestSlug": "biweekly-contest-52", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 52", - "ContestID_zh": "\u7b2c 52 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 52 场双周赛" }, { "Rating": 2170.0439693714, "ID": 1931, "Title": "Painting a Grid With Three Different Colors", - "TitleZH": "\u7528\u4e09\u79cd\u4e0d\u540c\u989c\u8272\u4e3a\u7f51\u683c\u6d82\u8272", + "TitleZH": "用三种不同颜色为网格涂色", "TitleSlug": "painting-a-grid-with-three-different-colors", "ContestSlug": "weekly-contest-249", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 249", - "ContestID_zh": "\u7b2c 249 \u573a\u5468\u8d5b" + "ContestID_zh": "第 249 场周赛" }, { "Rating": 2168.7531235448, "ID": 786, "Title": "K-th Smallest Prime Fraction", - "TitleZH": "\u7b2c K \u4e2a\u6700\u5c0f\u7684\u7d20\u6570\u5206\u6570", + "TitleZH": "第 K 个最小的素数分数", "TitleSlug": "k-th-smallest-prime-fraction", "ContestSlug": "weekly-contest-72", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u5468\u8d5b" + "ContestID_zh": "第 72 场周赛" }, { "Rating": 2164.8287157213, "ID": 1036, "Title": "Escape a Large Maze", - "TitleZH": "\u9003\u79bb\u5927\u8ff7\u5bab", + "TitleZH": "逃离大迷宫", "TitleSlug": "escape-a-large-maze", "ContestSlug": "weekly-contest-134", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 134", - "ContestID_zh": "\u7b2c 134 \u573a\u5468\u8d5b" + "ContestID_zh": "第 134 场周赛" }, { "Rating": 2158.8988728254, "ID": 2122, "Title": "Recover the Original Array", - "TitleZH": "\u8fd8\u539f\u539f\u6570\u7ec4", + "TitleZH": "还原原数组", "TitleSlug": "recover-the-original-array", "ContestSlug": "weekly-contest-273", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 273", - "ContestID_zh": "\u7b2c 273 \u573a\u5468\u8d5b" + "ContestID_zh": "第 273 场周赛" }, { "Rating": 2158.7683843245, "ID": 2102, "Title": "Sequentially Ordinal Rank Tracker", - "TitleZH": "\u5e8f\u5217\u987a\u5e8f\u67e5\u8be2", + "TitleZH": "序列顺序查询", "TitleSlug": "sequentially-ordinal-rank-tracker", "ContestSlug": "biweekly-contest-67", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 67 场双周赛" }, { "Rating": 2157.5814371481, "ID": 2218, "Title": "Maximum Value of K Coins From Piles", - "TitleZH": "\u4ece\u6808\u4e2d\u53d6\u51fa K \u4e2a\u786c\u5e01\u7684\u6700\u5927\u9762\u503c\u548c", + "TitleZH": "从栈中取出 K 个硬币的最大面值和", "TitleSlug": "maximum-value-of-k-coins-from-piles", "ContestSlug": "weekly-contest-286", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 286", - "ContestID_zh": "\u7b2c 286 \u573a\u5468\u8d5b" + "ContestID_zh": "第 286 场周赛" }, { "Rating": 2156.9515428364, "ID": 1515, "Title": "Best Position for a Service Centre", - "TitleZH": "\u670d\u52a1\u4e2d\u5fc3\u7684\u6700\u4f73\u4f4d\u7f6e", + "TitleZH": "服务中心的最佳位置", "TitleSlug": "best-position-for-a-service-centre", "ContestSlug": "weekly-contest-197", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 197", - "ContestID_zh": "\u7b2c 197 \u573a\u5468\u8d5b" + "ContestID_zh": "第 197 场周赛" }, { "Rating": 2147.1828941776, "ID": 1610, "Title": "Maximum Number of Visible Points", - "TitleZH": "\u53ef\u89c1\u70b9\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "可见点的最大数目", "TitleSlug": "maximum-number-of-visible-points", "ContestSlug": "weekly-contest-209", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 209", - "ContestID_zh": "\u7b2c 209 \u573a\u5468\u8d5b" + "ContestID_zh": "第 209 场周赛" }, { "Rating": 2146.639581998, "ID": 1906, "Title": "Minimum Absolute Difference Queries", - "TitleZH": "\u67e5\u8be2\u5dee\u7edd\u5bf9\u503c\u7684\u6700\u5c0f\u503c", + "TitleZH": "查询差绝对值的最小值", "TitleSlug": "minimum-absolute-difference-queries", "ContestSlug": "weekly-contest-246", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 246", - "ContestID_zh": "\u7b2c 246 \u573a\u5468\u8d5b" + "ContestID_zh": "第 246 场周赛" }, { "Rating": 2145.183995267, "ID": 1879, "Title": "Minimum XOR Sum of Two Arrays", - "TitleZH": "\u4e24\u4e2a\u6570\u7ec4\u6700\u5c0f\u7684\u5f02\u6216\u503c\u4e4b\u548c", + "TitleZH": "两个数组最小的异或值之和", "TitleSlug": "minimum-xor-sum-of-two-arrays", "ContestSlug": "biweekly-contest-53", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 53", - "ContestID_zh": "\u7b2c 53 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 53 场双周赛" }, { "Rating": 2140.0220703954, "ID": 906, "Title": "Super Palindromes", - "TitleZH": "\u8d85\u7ea7\u56de\u6587\u6570", + "TitleZH": "超级回文数", "TitleSlug": "super-palindromes", "ContestSlug": "weekly-contest-102", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 102", - "ContestID_zh": "\u7b2c 102 \u573a\u5468\u8d5b" + "ContestID_zh": "第 102 场周赛" }, { "Rating": 2137.5633267453, "ID": 2290, "Title": "Minimum Obstacle Removal to Reach Corner", - "TitleZH": "\u5230\u8fbe\u89d2\u843d\u9700\u8981\u79fb\u9664\u969c\u788d\u7269\u7684\u6700\u5c0f\u6570\u76ee", + "TitleZH": "到达角落需要移除障碍物的最小数目", "TitleSlug": "minimum-obstacle-removal-to-reach-corner", "ContestSlug": "weekly-contest-295", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 295", - "ContestID_zh": "\u7b2c 295 \u573a\u5468\u8d5b" + "ContestID_zh": "第 295 场周赛" }, { "Rating": 2136.3013259524, "ID": 2382, "Title": "Maximum Segment Sum After Removals", - "TitleZH": "\u5220\u9664\u64cd\u4f5c\u540e\u7684\u6700\u5927\u5b50\u6bb5\u548c", + "TitleZH": "删除操作后的最大子段和", "TitleSlug": "maximum-segment-sum-after-removals", "ContestSlug": "biweekly-contest-85", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 85 场双周赛" }, { "Rating": 2135.5738659086, "ID": 959, "Title": "Regions Cut By Slashes", - "TitleZH": "\u7531\u659c\u6760\u5212\u5206\u533a\u57df", + "TitleZH": "由斜杠划分区域", "TitleSlug": "regions-cut-by-slashes", "ContestSlug": "weekly-contest-115", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 115", - "ContestID_zh": "\u7b2c 115 \u573a\u5468\u8d5b" + "ContestID_zh": "第 115 场周赛" }, { "Rating": 2134.5448970405, "ID": 910, "Title": "Smallest Range II", - "TitleZH": "\u6700\u5c0f\u5dee\u503c II", + "TitleZH": "最小差值 II", "TitleSlug": "smallest-range-ii", "ContestSlug": "weekly-contest-103", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 103", - "ContestID_zh": "\u7b2c 103 \u573a\u5468\u8d5b" + "ContestID_zh": "第 103 场周赛" }, { "Rating": 2133.9592509012, "ID": 1439, "Title": "Find the Kth Smallest Sum of a Matrix With Sorted Rows", - "TitleZH": "\u6709\u5e8f\u77e9\u9635\u4e2d\u7684\u7b2c k \u4e2a\u6700\u5c0f\u6570\u7ec4\u548c", + "TitleZH": "有序矩阵中的第 k 个最小数组和", "TitleSlug": "find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows", "ContestSlug": "weekly-contest-187", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 187", - "ContestID_zh": "\u7b2c 187 \u573a\u5468\u8d5b" + "ContestID_zh": "第 187 场周赛" }, { "Rating": 2133.1003195919, "ID": 898, "Title": "Bitwise ORs of Subarrays", - "TitleZH": "\u5b50\u6570\u7ec4\u6309\u4f4d\u6216\u64cd\u4f5c", + "TitleZH": "子数组按位或操作", "TitleSlug": "bitwise-ors-of-subarrays", "ContestSlug": "weekly-contest-100", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 100", - "ContestID_zh": "\u7b2c 100 \u573a\u5468\u8d5b" + "ContestID_zh": "第 100 场周赛" }, { "Rating": 2131.7917160422, "ID": 1579, "Title": "Remove Max Number of Edges to Keep Graph Fully Traversable", - "TitleZH": "\u4fdd\u8bc1\u56fe\u53ef\u5b8c\u5168\u904d\u5386", + "TitleZH": "保证图可完全遍历", "TitleSlug": "remove-max-number-of-edges-to-keep-graph-fully-traversable", "ContestSlug": "weekly-contest-205", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 205", - "ContestID_zh": "\u7b2c 205 \u573a\u5468\u8d5b" + "ContestID_zh": "第 205 场周赛" }, { "Rating": 2130.9348604091, "ID": 2076, "Title": "Process Restricted Friend Requests", - "TitleZH": "\u5904\u7406\u542b\u9650\u5236\u6761\u4ef6\u7684\u597d\u53cb\u8bf7\u6c42", + "TitleZH": "处理含限制条件的好友请求", "TitleSlug": "process-restricted-friend-requests", "ContestSlug": "weekly-contest-267", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 267", - "ContestID_zh": "\u7b2c 267 \u573a\u5468\u8d5b" + "ContestID_zh": "第 267 场周赛" }, { "Rating": 2130.1135718486, "ID": 1039, "Title": "Minimum Score Triangulation of Polygon", - "TitleZH": "\u591a\u8fb9\u5f62\u4e09\u89d2\u5256\u5206\u7684\u6700\u4f4e\u5f97\u5206", + "TitleZH": "多边形三角剖分的最低得分", "TitleSlug": "minimum-score-triangulation-of-polygon", "ContestSlug": "weekly-contest-135", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 135", - "ContestID_zh": "\u7b2c 135 \u573a\u5468\u8d5b" + "ContestID_zh": "第 135 场周赛" }, { "Rating": 2129.7051442916, "ID": 798, "Title": "Smallest Rotation with Highest Score", - "TitleZH": "\u5f97\u5206\u6700\u9ad8\u7684\u6700\u5c0f\u8f6e\u8c03", + "TitleZH": "得分最高的最小轮调", "TitleSlug": "smallest-rotation-with-highest-score", "ContestSlug": "weekly-contest-75", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u5468\u8d5b" + "ContestID_zh": "第 75 场周赛" }, { "Rating": 2126.6864346508, "ID": 1444, "Title": "Number of Ways of Cutting a Pizza", - "TitleZH": "\u5207\u62ab\u8428\u7684\u65b9\u6848\u6570", + "TitleZH": "切披萨的方案数", "TitleSlug": "number-of-ways-of-cutting-a-pizza", "ContestSlug": "weekly-contest-188", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 188", - "ContestID_zh": "\u7b2c 188 \u573a\u5468\u8d5b" + "ContestID_zh": "第 188 场周赛" }, { "Rating": 2126.3922279277, "ID": 2246, "Title": "Longest Path With Different Adjacent Characters", - "TitleZH": "\u76f8\u90bb\u5b57\u7b26\u4e0d\u540c\u7684\u6700\u957f\u8def\u5f84", + "TitleZH": "相邻字符不同的最长路径", "TitleSlug": "longest-path-with-different-adjacent-characters", "ContestSlug": "weekly-contest-289", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 289", - "ContestID_zh": "\u7b2c 289 \u573a\u5468\u8d5b" + "ContestID_zh": "第 289 场周赛" }, { "Rating": 2125.3125624762, "ID": 1955, "Title": "Count Number of Special Subsequences", - "TitleZH": "\u7edf\u8ba1\u7279\u6b8a\u5b50\u5e8f\u5217\u7684\u6570\u76ee", + "TitleZH": "统计特殊子序列的数目", "TitleSlug": "count-number-of-special-subsequences", "ContestSlug": "weekly-contest-252", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 252", - "ContestID_zh": "\u7b2c 252 \u573a\u5468\u8d5b" + "ContestID_zh": "第 252 场周赛" }, { "Rating": 2124.1329592058, "ID": 968, "Title": "Binary Tree Cameras", - "TitleZH": "\u76d1\u63a7\u4e8c\u53c9\u6811", + "TitleZH": "监控二叉树", "TitleSlug": "binary-tree-cameras", "ContestSlug": "weekly-contest-117", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 117", - "ContestID_zh": "\u7b2c 117 \u573a\u5468\u8d5b" + "ContestID_zh": "第 117 场周赛" }, { "Rating": 2124.0317207867, "ID": 1654, "Title": "Minimum Jumps to Reach Home", - "TitleZH": "\u5230\u5bb6\u7684\u6700\u5c11\u8df3\u8dc3\u6b21\u6570", + "TitleZH": "到家的最少跳跃次数", "TitleSlug": "minimum-jumps-to-reach-home", "ContestSlug": "biweekly-contest-39", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 39", - "ContestID_zh": "\u7b2c 39 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 39 场双周赛" }, { "Rating": 2123.5708982185, "ID": 1970, "Title": "Last Day Where You Can Still Cross", - "TitleZH": "\u4f60\u80fd\u7a7f\u8fc7\u77e9\u9635\u7684\u6700\u540e\u4e00\u5929", + "TitleZH": "你能穿过矩阵的最后一天", "TitleSlug": "last-day-where-you-can-still-cross", "ContestSlug": "weekly-contest-254", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 254", - "ContestID_zh": "\u7b2c 254 \u573a\u5468\u8d5b" + "ContestID_zh": "第 254 场周赛" }, { "Rating": 2121.3147151648, "ID": 972, "Title": "Equal Rational Numbers", - "TitleZH": "\u76f8\u7b49\u7684\u6709\u7406\u6570", + "TitleZH": "相等的有理数", "TitleSlug": "equal-rational-numbers", "ContestSlug": "weekly-contest-118", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 118", - "ContestID_zh": "\u7b2c 118 \u573a\u5468\u8d5b" + "ContestID_zh": "第 118 场周赛" }, { "Rating": 2120.4466386371, "ID": 2376, "Title": "Count Special Integers", - "TitleZH": "\u7edf\u8ba1\u7279\u6b8a\u6574\u6570", + "TitleZH": "统计特殊整数", "TitleSlug": "count-special-integers", "ContestSlug": "weekly-contest-306", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 306", - "ContestID_zh": "\u7b2c 306 \u573a\u5468\u8d5b" + "ContestID_zh": "第 306 场周赛" }, { "Rating": 2118.7923652824, "ID": 1601, "Title": "Maximum Number of Achievable Transfer Requests", - "TitleZH": "\u6700\u591a\u53ef\u8fbe\u6210\u7684\u6362\u697c\u8bf7\u6c42\u6570\u76ee", + "TitleZH": "最多可达成的换楼请求数目", "TitleSlug": "maximum-number-of-achievable-transfer-requests", "ContestSlug": "weekly-contest-208", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 208", - "ContestID_zh": "\u7b2c 208 \u573a\u5468\u8d5b" + "ContestID_zh": "第 208 场周赛" }, { "Rating": 2116.493528295, "ID": 1547, "Title": "Minimum Cost to Cut a Stick", - "TitleZH": "\u5207\u68cd\u5b50\u7684\u6700\u5c0f\u6210\u672c", + "TitleZH": "切棍子的最小成本", "TitleSlug": "minimum-cost-to-cut-a-stick", "ContestSlug": "weekly-contest-201", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 201", - "ContestID_zh": "\u7b2c 201 \u573a\u5468\u8d5b" + "ContestID_zh": "第 201 场周赛" }, { "Rating": 2115.0911494487, "ID": 1483, "Title": "Kth Ancestor of a Tree Node", - "TitleZH": "\u6811\u8282\u70b9\u7684\u7b2c K \u4e2a\u7956\u5148", + "TitleZH": "树节点的第 K 个祖先", "TitleSlug": "kth-ancestor-of-a-tree-node", "ContestSlug": "weekly-contest-193", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 193", - "ContestID_zh": "\u7b2c 193 \u573a\u5468\u8d5b" + "ContestID_zh": "第 193 场周赛" }, { "Rating": 2109.9830154953, "ID": 1172, "Title": "Dinner Plate Stacks", - "TitleZH": "\u9910\u76d8\u6808", + "TitleZH": "餐盘栈", "TitleSlug": "dinner-plate-stacks", "ContestSlug": "weekly-contest-151", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 151", - "ContestID_zh": "\u7b2c 151 \u573a\u5468\u8d5b" + "ContestID_zh": "第 151 场周赛" }, { "Rating": 2105.8582288624, "ID": 2209, "Title": "Minimum White Tiles After Covering With Carpets", - "TitleZH": "\u7528\u5730\u6bef\u8986\u76d6\u540e\u7684\u6700\u5c11\u767d\u8272\u7816\u5757", + "TitleZH": "用地毯覆盖后的最少白色砖块", "TitleSlug": "minimum-white-tiles-after-covering-with-carpets", "ContestSlug": "biweekly-contest-74", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 74 场双周赛" }, { "Rating": 2105.7761215397, "ID": 1937, "Title": "Maximum Number of Points with Cost", - "TitleZH": "\u6263\u5206\u540e\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "扣分后的最大得分", "TitleSlug": "maximum-number-of-points-with-cost", "ContestSlug": "weekly-contest-250", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 250", - "ContestID_zh": "\u7b2c 250 \u573a\u5468\u8d5b" + "ContestID_zh": "第 250 场周赛" }, { "Rating": 2104.9526046945, "ID": 1944, "Title": "Number of Visible People in a Queue", - "TitleZH": "\u961f\u5217\u4e2d\u53ef\u4ee5\u770b\u5230\u7684\u4eba\u6570", + "TitleZH": "队列中可以看到的人数", "TitleSlug": "number-of-visible-people-in-a-queue", "ContestSlug": "biweekly-contest-57", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 57", - "ContestID_zh": "\u7b2c 57 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 57 场双周赛" }, { "Rating": 2104.7441214305, "ID": 2088, "Title": "Count Fertile Pyramids in a Land", - "TitleZH": "\u7edf\u8ba1\u519c\u573a\u4e2d\u80a5\u6c83\u91d1\u5b57\u5854\u7684\u6570\u76ee", + "TitleZH": "统计农场中肥沃金字塔的数目", "TitleSlug": "count-fertile-pyramids-in-a-land", "ContestSlug": "biweekly-contest-66", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 66 场双周赛" }, { "Rating": 2101.867342004, "ID": 2430, "Title": "Maximum Deletions on a String", - "TitleZH": "\u5bf9\u5b57\u6bcd\u4e32\u53ef\u6267\u884c\u7684\u6700\u5927\u5220\u9664\u6570", + "TitleZH": "对字母串可执行的最大删除数", "TitleSlug": "maximum-deletions-on-a-string", "ContestSlug": "weekly-contest-313", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 313", - "ContestID_zh": "\u7b2c 313 \u573a\u5468\u8d5b" + "ContestID_zh": "第 313 场周赛" }, { "Rating": 2100.3248877105, "ID": 793, "Title": "Preimage Size of Factorial Zeroes Function", - "TitleZH": "\u9636\u4e58\u51fd\u6570\u540e K \u4e2a\u96f6", + "TitleZH": "阶乘函数后 K 个零", "TitleSlug": "preimage-size-of-factorial-zeroes-function", "ContestSlug": "weekly-contest-74", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u5468\u8d5b" + "ContestID_zh": "第 74 场周赛" }, { "Rating": 2096.6201393558, "ID": 778, "Title": "Swim in Rising Water", - "TitleZH": "\u6c34\u4f4d\u4e0a\u5347\u7684\u6cf3\u6c60\u4e2d\u6e38\u6cf3", + "TitleZH": "水位上升的泳池中游泳", "TitleSlug": "swim-in-rising-water", "ContestSlug": "weekly-contest-70", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u5468\u8d5b" + "ContestID_zh": "第 70 场周赛" }, { "Rating": 2096.6098086765, "ID": 899, "Title": "Orderly Queue", - "TitleZH": "\u6709\u5e8f\u961f\u5217", + "TitleZH": "有序队列", "TitleSlug": "orderly-queue", "ContestSlug": "weekly-contest-100", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 100", - "ContestID_zh": "\u7b2c 100 \u573a\u5468\u8d5b" + "ContestID_zh": "第 100 场周赛" }, { "Rating": 2094.592426537, "ID": 1976, "Title": "Number of Ways to Arrive at Destination", - "TitleZH": "\u5230\u8fbe\u76ee\u7684\u5730\u7684\u65b9\u6848\u6570", + "TitleZH": "到达目的地的方案数", "TitleSlug": "number-of-ways-to-arrive-at-destination", "ContestSlug": "biweekly-contest-59", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 59", - "ContestID_zh": "\u7b2c 59 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 59 场双周赛" }, { "Rating": 2092.8943149547, "ID": 2402, "Title": "Meeting Rooms III", - "TitleZH": "\u4f1a\u8bae\u5ba4 III", + "TitleZH": "会议室 III", "TitleSlug": "meeting-rooms-iii", "ContestSlug": "weekly-contest-309", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 309", - "ContestID_zh": "\u7b2c 309 \u573a\u5468\u8d5b" + "ContestID_zh": "第 309 场周赛" }, { "Rating": 2092.5366031561, "ID": 2444, "Title": "Count Subarrays With Fixed Bounds", - "TitleZH": "\u7edf\u8ba1\u5b9a\u754c\u5b50\u6570\u7ec4\u7684\u6570\u76ee", + "TitleZH": "统计定界子数组的数目", "TitleSlug": "count-subarrays-with-fixed-bounds", "ContestSlug": "weekly-contest-315", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 315", - "ContestID_zh": "\u7b2c 315 \u573a\u5468\u8d5b" + "ContestID_zh": "第 315 场周赛" }, { "Rating": 2092.4861692502, "ID": 1049, "Title": "Last Stone Weight II", - "TitleZH": "\u6700\u540e\u4e00\u5757\u77f3\u5934\u7684\u91cd\u91cf II", + "TitleZH": "最后一块石头的重量 II", "TitleSlug": "last-stone-weight-ii", "ContestSlug": "weekly-contest-137", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 137", - "ContestID_zh": "\u7b2c 137 \u573a\u5468\u8d5b" + "ContestID_zh": "第 137 场周赛" }, { "Rating": 2092.0222850837, "ID": 2412, "Title": "Minimum Money Required Before Transactions", - "TitleZH": "\u5b8c\u6210\u6240\u6709\u4ea4\u6613\u7684\u521d\u59cb\u6700\u5c11\u94b1\u6570", + "TitleZH": "完成所有交易的初始最少钱数", "TitleSlug": "minimum-money-required-before-transactions", "ContestSlug": "biweekly-contest-87", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 87 场双周赛" }, { "Rating": 2091.3820373571, "ID": 1383, "Title": "Maximum Performance of a Team", - "TitleZH": "\u6700\u5927\u7684\u56e2\u961f\u8868\u73b0\u503c", + "TitleZH": "最大的团队表现值", "TitleSlug": "maximum-performance-of-a-team", "ContestSlug": "weekly-contest-180", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 180", - "ContestID_zh": "\u7b2c 180 \u573a\u5468\u8d5b" + "ContestID_zh": "第 180 场周赛" }, { "Rating": 2090.6800569319, "ID": 2193, "Title": "Minimum Number of Moves to Make Palindrome", - "TitleZH": "\u5f97\u5230\u56de\u6587\u4e32\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "得到回文串的最少操作次数", "TitleSlug": "minimum-number-of-moves-to-make-palindrome", "ContestSlug": "biweekly-contest-73", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 73 场双周赛" }, { "Rating": 2090.4183788498, "ID": 2318, "Title": "Number of Distinct Roll Sequences", - "TitleZH": "\u4e0d\u540c\u9ab0\u5b50\u5e8f\u5217\u7684\u6570\u76ee", + "TitleZH": "不同骰子序列的数目", "TitleSlug": "number-of-distinct-roll-sequences", "ContestSlug": "biweekly-contest-81", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 81 场双周赛" }, { "Rating": 2087.2049275667, "ID": 1563, "Title": "Stone Game V", - "TitleZH": "\u77f3\u5b50\u6e38\u620f V", + "TitleZH": "石子游戏 V", "TitleSlug": "stone-game-v", "ContestSlug": "weekly-contest-203", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 203", - "ContestID_zh": "\u7b2c 203 \u573a\u5468\u8d5b" + "ContestID_zh": "第 203 场周赛" }, { "Rating": 2084.9697035674, "ID": 982, "Title": "Triples with Bitwise AND Equal To Zero", - "TitleZH": "\u6309\u4f4d\u4e0e\u4e3a\u96f6\u7684\u4e09\u5143\u7ec4", + "TitleZH": "按位与为零的三元组", "TitleSlug": "triples-with-bitwise-and-equal-to-zero", "ContestSlug": "weekly-contest-121", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 121", - "ContestID_zh": "\u7b2c 121 \u573a\u5468\u8d5b" + "ContestID_zh": "第 121 场周赛" }, { "Rating": 2084.6866916045, "ID": 1192, "Title": "Critical Connections in a Network", - "TitleZH": "\u67e5\u627e\u96c6\u7fa4\u5185\u7684\u300c\u5173\u952e\u8fde\u63a5\u300d", + "TitleZH": "查找集群内的「关键连接」", "TitleSlug": "critical-connections-in-a-network", "ContestSlug": "weekly-contest-154", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 154", - "ContestID_zh": "\u7b2c 154 \u573a\u5468\u8d5b" + "ContestID_zh": "第 154 场周赛" }, { "Rating": 2084.5752686737, "ID": 2267, "Title": "Check if There Is a Valid Parentheses String Path", - "TitleZH": "\u68c0\u67e5\u662f\u5426\u6709\u5408\u6cd5\u62ec\u53f7\u5b57\u7b26\u4e32\u8def\u5f84", + "TitleZH": "检查是否有合法括号字符串路径", "TitleSlug": "check-if-there-is-a-valid-parentheses-string-path", "ContestSlug": "weekly-contest-292", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 292", - "ContestID_zh": "\u7b2c 292 \u573a\u5468\u8d5b" + "ContestID_zh": "第 292 场周赛" }, { "Rating": 2084.4980206639, "ID": 2009, "Title": "Minimum Number of Operations to Make Array Continuous", - "TitleZH": "\u4f7f\u6570\u7ec4\u8fde\u7eed\u7684\u6700\u5c11\u64cd\u4f5c\u6570", + "TitleZH": "使数组连续的最少操作数", "TitleSlug": "minimum-number-of-operations-to-make-array-continuous", "ContestSlug": "biweekly-contest-61", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 61", - "ContestID_zh": "\u7b2c 61 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 61 场双周赛" }, { "Rating": 2084.2010769193, "ID": 774, "Title": "Minimize Max Distance to Gas Station", - "TitleZH": "\u6700\u5c0f\u5316\u53bb\u52a0\u6cb9\u7ad9\u7684\u6700\u5927\u8ddd\u79bb", + "TitleZH": "最小化去加油站的最大距离", "TitleSlug": "minimize-max-distance-to-gas-station", "ContestSlug": "weekly-contest-69", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u5468\u8d5b" + "ContestID_zh": "第 69 场周赛" }, { "Rating": 2084.1404698713, "ID": 2050, "Title": "Parallel Courses III", - "TitleZH": "\u5e76\u884c\u8bfe\u7a0b III", + "TitleZH": "并行课程 III", "TitleSlug": "parallel-courses-iii", "ContestSlug": "weekly-contest-264", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 264", - "ContestID_zh": "\u7b2c 264 \u573a\u5468\u8d5b" + "ContestID_zh": "第 264 场周赛" }, { "Rating": 2081.8087755451, "ID": 1494, "Title": "Parallel Courses II", - "TitleZH": "\u5e76\u884c\u8bfe\u7a0b II", + "TitleZH": "并行课程 II", "TitleSlug": "parallel-courses-ii", "ContestSlug": "biweekly-contest-29", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 29", - "ContestID_zh": "\u7b2c 29 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 29 场双周赛" }, { "Rating": 2081.7518764643, "ID": 1847, "Title": "Closest Room", - "TitleZH": "\u6700\u8fd1\u7684\u623f\u95f4", + "TitleZH": "最近的房间", "TitleSlug": "closest-room", "ContestSlug": "biweekly-contest-51", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 51", - "ContestID_zh": "\u7b2c 51 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 51 场双周赛" }, { "Rating": 2081.6909344021, "ID": 1639, "Title": "Number of Ways to Form a Target String Given a Dictionary", - "TitleZH": "\u901a\u8fc7\u7ed9\u5b9a\u8bcd\u5178\u6784\u9020\u76ee\u6807\u5b57\u7b26\u4e32\u7684\u65b9\u6848\u6570", + "TitleZH": "通过给定词典构造目标字符串的方案数", "TitleSlug": "number-of-ways-to-form-a-target-string-given-a-dictionary", "ContestSlug": "biweekly-contest-38", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 38", - "ContestID_zh": "\u7b2c 38 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 38 场双周赛" }, { "Rating": 2080.0425875741, "ID": 1718, "Title": "Construct the Lexicographically Largest Valid Sequence", - "TitleZH": "\u6784\u5efa\u5b57\u5178\u5e8f\u6700\u5927\u7684\u53ef\u884c\u5e8f\u5217", + "TitleZH": "构建字典序最大的可行序列", "TitleSlug": "construct-the-lexicographically-largest-valid-sequence", "ContestSlug": "biweekly-contest-43", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 43", - "ContestID_zh": "\u7b2c 43 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 43 场双周赛" }, { "Rating": 2079.9846866239, "ID": 1643, "Title": "Kth Smallest Instructions", - "TitleZH": "\u7b2c K \u6761\u6700\u5c0f\u6307\u4ee4", + "TitleZH": "第 K 条最小指令", "TitleSlug": "kth-smallest-instructions", "ContestSlug": "weekly-contest-213", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 213", - "ContestID_zh": "\u7b2c 213 \u573a\u5468\u8d5b" + "ContestID_zh": "第 213 场周赛" }, { "Rating": 2079.1911227043, "ID": 975, "Title": "Odd Even Jump", - "TitleZH": "\u5947\u5076\u8df3", + "TitleZH": "奇偶跳", "TitleSlug": "odd-even-jump", "ContestSlug": "weekly-contest-119", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 119", - "ContestID_zh": "\u7b2c 119 \u573a\u5468\u8d5b" + "ContestID_zh": "第 119 场周赛" }, { "Rating": 2078.6986769435, "ID": 1712, "Title": "Ways to Split Array Into Three Subarrays", - "TitleZH": "\u5c06\u6570\u7ec4\u5206\u6210\u4e09\u4e2a\u5b50\u6570\u7ec4\u7684\u65b9\u6848\u6570", + "TitleZH": "将数组分成三个子数组的方案数", "TitleSlug": "ways-to-split-array-into-three-subarrays", "ContestSlug": "weekly-contest-222", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 222", - "ContestID_zh": "\u7b2c 222 \u573a\u5468\u8d5b" + "ContestID_zh": "第 222 场周赛" }, { "Rating": 2078.5417326415, "ID": 1786, "Title": "Number of Restricted Paths From First to Last Node", - "TitleZH": "\u4ece\u7b2c\u4e00\u4e2a\u8282\u70b9\u51fa\u53d1\u5230\u6700\u540e\u4e00\u4e2a\u8282\u70b9\u7684\u53d7\u9650\u8def\u5f84\u6570", + "TitleZH": "从第一个节点出发到最后一个节点的受限路径数", "TitleSlug": "number-of-restricted-paths-from-first-to-last-node", "ContestSlug": "weekly-contest-231", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 231", - "ContestID_zh": "\u7b2c 231 \u573a\u5468\u8d5b" + "ContestID_zh": "第 231 场周赛" }, { "Rating": 2077.5054883516, "ID": 843, "Title": "Guess the Word", - "TitleZH": "\u731c\u731c\u8fd9\u4e2a\u5355\u8bcd", + "TitleZH": "猜猜这个单词", "TitleSlug": "guess-the-word", "ContestSlug": "weekly-contest-86", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u5468\u8d5b" + "ContestID_zh": "第 86 场周赛" }, { "Rating": 2076.8975497986, "ID": 1088, "Title": "Confusing Number II", - "TitleZH": "\u6613\u6df7\u6dc6\u6570 II", + "TitleZH": "易混淆数 II", "TitleSlug": "confusing-number-ii", "ContestSlug": "biweekly-contest-2", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 2", - "ContestID_zh": "\u7b2c 2 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 2 场双周赛" }, { "Rating": 2076.0155978787, "ID": 2449, "Title": "Minimum Number of Operations to Make Arrays Similar", - "TitleZH": "\u4f7f\u6570\u7ec4\u76f8\u4f3c\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使数组相似的最少操作次数", "TitleSlug": "minimum-number-of-operations-to-make-arrays-similar", "ContestSlug": "weekly-contest-316", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 316", - "ContestID_zh": "\u7b2c 316 \u573a\u5468\u8d5b" + "ContestID_zh": "第 316 场周赛" }, { "Rating": 2075.9046975409, "ID": 2354, "Title": "Number of Excellent Pairs", - "TitleZH": "\u4f18\u8d28\u6570\u5bf9\u7684\u6570\u76ee", + "TitleZH": "优质数对的数目", "TitleSlug": "number-of-excellent-pairs", "ContestSlug": "weekly-contest-303", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 303", - "ContestID_zh": "\u7b2c 303 \u573a\u5468\u8d5b" + "ContestID_zh": "第 303 场周赛" }, { "Rating": 2074.4120526679, "ID": 871, "Title": "Minimum Number of Refueling Stops", - "TitleZH": "\u6700\u4f4e\u52a0\u6cb9\u6b21\u6570", + "TitleZH": "最低加油次数", "TitleSlug": "minimum-number-of-refueling-stops", "ContestSlug": "weekly-contest-93", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 93", - "ContestID_zh": "\u7b2c 93 \u573a\u5468\u8d5b" + "ContestID_zh": "第 93 场周赛" }, { "Rating": 2073.0124645606, "ID": 1850, "Title": "Minimum Adjacent Swaps to Reach the Kth Smallest Number", - "TitleZH": "\u90bb\u4f4d\u4ea4\u6362\u7684\u6700\u5c0f\u6b21\u6570", + "TitleZH": "邻位交换的最小次数", "TitleSlug": "minimum-adjacent-swaps-to-reach-the-kth-smallest-number", "ContestSlug": "weekly-contest-239", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 239", - "ContestID_zh": "\u7b2c 239 \u573a\u5468\u8d5b" + "ContestID_zh": "第 239 场周赛" }, { "Rating": 2072.7264178313, "ID": 1799, "Title": "Maximize Score After N Operations", - "TitleZH": "N \u6b21\u64cd\u4f5c\u540e\u7684\u6700\u5927\u5206\u6570\u548c", + "TitleZH": "N 次操作后的最大分数和", "TitleSlug": "maximize-score-after-n-operations", "ContestSlug": "biweekly-contest-48", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 48", - "ContestID_zh": "\u7b2c 48 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 48 场双周赛" }, { "Rating": 2070.2102619334, "ID": 1808, "Title": "Maximize Number of Nice Divisors", - "TitleZH": "\u597d\u56e0\u5b50\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "好因子的最大数目", "TitleSlug": "maximize-number-of-nice-divisors", "ContestSlug": "weekly-contest-234", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 234", - "ContestID_zh": "\u7b2c 234 \u573a\u5468\u8d5b" + "ContestID_zh": "第 234 场周赛" }, { "Rating": 2069.4030284676, "ID": 1168, "Title": "Optimize Water Distribution in a Village", - "TitleZH": "\u6c34\u8d44\u6e90\u5206\u914d\u4f18\u5316", + "TitleZH": "水资源分配优化", "TitleSlug": "optimize-water-distribution-in-a-village", "ContestSlug": "biweekly-contest-7", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 7", - "ContestID_zh": "\u7b2c 7 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 7 场双周赛" }, { "Rating": 2068.806637566, "ID": 1368, "Title": "Minimum Cost to Make at Least One Valid Path in a Grid", - "TitleZH": "\u4f7f\u7f51\u683c\u56fe\u81f3\u5c11\u6709\u4e00\u6761\u6709\u6548\u8def\u5f84\u7684\u6700\u5c0f\u4ee3\u4ef7", + "TitleZH": "使网格图至少有一条有效路径的最小代价", "TitleSlug": "minimum-cost-to-make-at-least-one-valid-path-in-a-grid", "ContestSlug": "weekly-contest-178", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 178", - "ContestID_zh": "\u7b2c 178 \u573a\u5468\u8d5b" + "ContestID_zh": "第 178 场周赛" }, { "Rating": 2068.0043466118, "ID": 1770, "Title": "Maximum Score from Performing Multiplication Operations", - "TitleZH": "\u6267\u884c\u4e58\u6cd5\u8fd0\u7b97\u7684\u6700\u5927\u5206\u6570", + "TitleZH": "执行乘法运算的最大分数", "TitleSlug": "maximum-score-from-performing-multiplication-operations", "ContestSlug": "weekly-contest-229", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 229", - "ContestID_zh": "\u7b2c 229 \u573a\u5468\u8d5b" + "ContestID_zh": "第 229 场周赛" }, { "Rating": 2067.0643721733, "ID": 855, "Title": "Exam Room", - "TitleZH": "\u8003\u573a\u5c31\u5ea7", + "TitleZH": "考场就座", "TitleSlug": "exam-room", "ContestSlug": "weekly-contest-89", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u5468\u8d5b" + "ContestID_zh": "第 89 场周赛" }, { "Rating": 2066.0972575597, "ID": 801, "Title": "Minimum Swaps To Make Sequences Increasing", - "TitleZH": "\u4f7f\u5e8f\u5217\u9012\u589e\u7684\u6700\u5c0f\u4ea4\u6362\u6b21\u6570", + "TitleZH": "使序列递增的最小交换次数", "TitleSlug": "minimum-swaps-to-make-sequences-increasing", "ContestSlug": "weekly-contest-76", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u5468\u8d5b" + "ContestID_zh": "第 76 场周赛" }, { "Rating": 2062.9876807625, "ID": 2156, "Title": "Find Substring With Given Hash Value", - "TitleZH": "\u67e5\u627e\u7ed9\u5b9a\u54c8\u5e0c\u503c\u7684\u5b50\u4e32", + "TitleZH": "查找给定哈希值的子串", "TitleSlug": "find-substring-with-given-hash-value", "ContestSlug": "weekly-contest-278", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 278", - "ContestID_zh": "\u7b2c 278 \u573a\u5468\u8d5b" + "ContestID_zh": "第 278 场周赛" }, { "Rating": 2062.3601158741, "ID": 2106, "Title": "Maximum Fruits Harvested After at Most K Steps", - "TitleZH": "\u6458\u6c34\u679c", + "TitleZH": "摘水果", "TitleSlug": "maximum-fruits-harvested-after-at-most-k-steps", "ContestSlug": "weekly-contest-271", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 271", - "ContestID_zh": "\u7b2c 271 \u573a\u5468\u8d5b" + "ContestID_zh": "第 271 场周赛" }, { "Rating": 2060.379991517, "ID": 2366, "Title": "Minimum Replacements to Sort the Array", - "TitleZH": "\u5c06\u6570\u7ec4\u6392\u5e8f\u7684\u6700\u5c11\u66ff\u6362\u6b21\u6570", + "TitleZH": "将数组排序的最少替换次数", "TitleSlug": "minimum-replacements-to-sort-the-array", "ContestSlug": "biweekly-contest-84", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 84 场双周赛" }, { "Rating": 2059.4040623264, "ID": 1131, "Title": "Maximum of Absolute Value Expression", - "TitleZH": "\u7edd\u5bf9\u503c\u8868\u8fbe\u5f0f\u7684\u6700\u5927\u503c", + "TitleZH": "绝对值表达式的最大值", "TitleSlug": "maximum-of-absolute-value-expression", "ContestSlug": "weekly-contest-146", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 146", - "ContestID_zh": "\u7b2c 146 \u573a\u5468\u8d5b" + "ContestID_zh": "第 146 场周赛" }, { "Rating": 2057.4788263111, "ID": 2197, "Title": "Replace Non-Coprime Numbers in Array", - "TitleZH": "\u66ff\u6362\u6570\u7ec4\u4e2d\u7684\u975e\u4e92\u8d28\u6570", + "TitleZH": "替换数组中的非互质数", "TitleSlug": "replace-non-coprime-numbers-in-array", "ContestSlug": "weekly-contest-283", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 283", - "ContestID_zh": "\u7b2c 283 \u573a\u5468\u8d5b" + "ContestID_zh": "第 283 场周赛" }, { "Rating": 2056.335494216, "ID": 1473, "Title": "Paint House III", - "TitleZH": "\u7c89\u5237\u623f\u5b50 III", + "TitleZH": "粉刷房子 III", "TitleSlug": "paint-house-iii", "ContestSlug": "weekly-contest-192", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 192", - "ContestID_zh": "\u7b2c 192 \u573a\u5468\u8d5b" + "ContestID_zh": "第 192 场周赛" }, { "Rating": 2055.0970201875, "ID": 1575, "Title": "Count All Possible Routes", - "TitleZH": "\u7edf\u8ba1\u6240\u6709\u53ef\u884c\u8def\u5f84", + "TitleZH": "统计所有可行路径", "TitleSlug": "count-all-possible-routes", "ContestSlug": "biweekly-contest-34", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 34", - "ContestID_zh": "\u7b2c 34 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 34 场双周赛" }, { "Rating": 2053.7468090497, "ID": 839, "Title": "Similar String Groups", - "TitleZH": "\u76f8\u4f3c\u5b57\u7b26\u4e32\u7ec4", + "TitleZH": "相似字符串组", "TitleSlug": "similar-string-groups", "ContestSlug": "weekly-contest-85", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u5468\u8d5b" + "ContestID_zh": "第 85 场周赛" }, { "Rating": 2051.0879431258, "ID": 1856, "Title": "Maximum Subarray Min-Product", - "TitleZH": "\u5b50\u6570\u7ec4\u6700\u5c0f\u4e58\u79ef\u7684\u6700\u5927\u503c", + "TitleZH": "子数组最小乘积的最大值", "TitleSlug": "maximum-subarray-min-product", "ContestSlug": "weekly-contest-240", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 240", - "ContestID_zh": "\u7b2c 240 \u573a\u5468\u8d5b" + "ContestID_zh": "第 240 场周赛" }, { "Rating": 2050.715977457, "ID": 1224, "Title": "Maximum Equal Frequency", - "TitleZH": "\u6700\u5927\u76f8\u7b49\u9891\u7387", + "TitleZH": "最大相等频率", "TitleSlug": "maximum-equal-frequency", "ContestSlug": "weekly-contest-158", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 158", - "ContestID_zh": "\u7b2c 158 \u573a\u5468\u8d5b" + "ContestID_zh": "第 158 场周赛" }, { "Rating": 2050.2553211463, "ID": 1648, "Title": "Sell Diminishing-Valued Colored Balls", - "TitleZH": "\u9500\u552e\u4ef7\u503c\u51cf\u5c11\u7684\u989c\u8272\u7403", + "TitleZH": "销售价值减少的颜色球", "TitleSlug": "sell-diminishing-valued-colored-balls", "ContestSlug": "weekly-contest-214", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 214", - "ContestID_zh": "\u7b2c 214 \u573a\u5468\u8d5b" + "ContestID_zh": "第 214 场周赛" }, { "Rating": 2048.0976546787, "ID": 1553, "Title": "Minimum Number of Days to Eat N Oranges", - "TitleZH": "\u5403\u6389 N \u4e2a\u6a58\u5b50\u7684\u6700\u5c11\u5929\u6570", + "TitleZH": "吃掉 N 个橘子的最少天数", "TitleSlug": "minimum-number-of-days-to-eat-n-oranges", "ContestSlug": "weekly-contest-202", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 202", - "ContestID_zh": "\u7b2c 202 \u573a\u5468\u8d5b" + "ContestID_zh": "第 202 场周赛" }, { "Rating": 2040.5621123027, "ID": 1751, "Title": "Maximum Number of Events That Can Be Attended II", - "TitleZH": "\u6700\u591a\u53ef\u4ee5\u53c2\u52a0\u7684\u4f1a\u8bae\u6570\u76ee II", + "TitleZH": "最多可以参加的会议数目 II", "TitleSlug": "maximum-number-of-events-that-can-be-attended-ii", "ContestSlug": "biweekly-contest-45", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 45", - "ContestID_zh": "\u7b2c 45 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 45 场双周赛" }, { "Rating": 2040.539289037, "ID": 1371, "Title": "Find the Longest Substring Containing Vowels in Even Counts", - "TitleZH": "\u6bcf\u4e2a\u5143\u97f3\u5305\u542b\u5076\u6570\u6b21\u7684\u6700\u957f\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "每个元音包含偶数次的最长子字符串", "TitleSlug": "find-the-longest-substring-containing-vowels-in-even-counts", "ContestSlug": "biweekly-contest-21", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 21", - "ContestID_zh": "\u7b2c 21 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 21 场双周赛" }, { "Rating": 2039.110874689, "ID": 1201, "Title": "Ugly Number III", - "TitleZH": "\u4e11\u6570 III", + "TitleZH": "丑数 III", "TitleSlug": "ugly-number-iii", "ContestSlug": "weekly-contest-155", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 155", - "ContestID_zh": "\u7b2c 155 \u573a\u5468\u8d5b" + "ContestID_zh": "第 155 场周赛" }, { "Rating": 2038.8592725467, "ID": 1590, "Title": "Make Sum Divisible by P", - "TitleZH": "\u4f7f\u6570\u7ec4\u548c\u80fd\u88ab P \u6574\u9664", + "TitleZH": "使数组和能被 P 整除", "TitleSlug": "make-sum-divisible-by-p", "ContestSlug": "biweekly-contest-35", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 35", - "ContestID_zh": "\u7b2c 35 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 35 场双周赛" }, { "Rating": 2037.6527962599, "ID": 2116, "Title": "Check if a Parentheses String Can Be Valid", - "TitleZH": "\u5224\u65ad\u4e00\u4e2a\u62ec\u53f7\u5b57\u7b26\u4e32\u662f\u5426\u6709\u6548", + "TitleZH": "判断一个括号字符串是否有效", "TitleSlug": "check-if-a-parentheses-string-can-be-valid", "ContestSlug": "biweekly-contest-68", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 68 场双周赛" }, { "Rating": 2036.7410194704, "ID": 2245, "Title": "Maximum Trailing Zeros in a Cornered Path", - "TitleZH": "\u8f6c\u89d2\u8def\u5f84\u7684\u4e58\u79ef\u4e2d\u6700\u591a\u80fd\u6709\u51e0\u4e2a\u5c3e\u968f\u96f6", + "TitleZH": "转角路径的乘积中最多能有几个尾随零", "TitleSlug": "maximum-trailing-zeros-in-a-cornered-path", "ContestSlug": "weekly-contest-289", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 289", - "ContestID_zh": "\u7b2c 289 \u573a\u5468\u8d5b" + "ContestID_zh": "第 289 场周赛" }, { "Rating": 2036.7206020719, "ID": 1348, "Title": "Tweet Counts Per Frequency", - "TitleZH": "\u63a8\u6587\u8ba1\u6570", + "TitleZH": "推文计数", "TitleSlug": "tweet-counts-per-frequency", "ContestSlug": "weekly-contest-175", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 175", - "ContestID_zh": "\u7b2c 175 \u573a\u5468\u8d5b" + "ContestID_zh": "第 175 场周赛" }, { "Rating": 2034.9740902393, "ID": 1140, "Title": "Stone Game II", - "TitleZH": "\u77f3\u5b50\u6e38\u620f II", + "TitleZH": "石子游戏 II", "TitleSlug": "stone-game-ii", "ContestSlug": "weekly-contest-147", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 147", - "ContestID_zh": "\u7b2c 147 \u573a\u5468\u8d5b" + "ContestID_zh": "第 147 场周赛" }, { "Rating": 2034.9420578559, "ID": 1335, "Title": "Minimum Difficulty of a Job Schedule", - "TitleZH": "\u5de5\u4f5c\u8ba1\u5212\u7684\u6700\u4f4e\u96be\u5ea6", + "TitleZH": "工作计划的最低难度", "TitleSlug": "minimum-difficulty-of-a-job-schedule", "ContestSlug": "weekly-contest-173", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 173", - "ContestID_zh": "\u7b2c 173 \u573a\u5468\u8d5b" + "ContestID_zh": "第 173 场周赛" }, { "Rating": 2034.6759416871, "ID": 947, "Title": "Most Stones Removed with Same Row or Column", - "TitleZH": "\u79fb\u9664\u6700\u591a\u7684\u540c\u884c\u6216\u540c\u5217\u77f3\u5934", + "TitleZH": "移除最多的同行或同列石头", "TitleSlug": "most-stones-removed-with-same-row-or-column", "ContestSlug": "weekly-contest-112", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 112", - "ContestID_zh": "\u7b2c 112 \u573a\u5468\u8d5b" + "ContestID_zh": "第 112 场周赛" }, { "Rating": 2034.4067304341, "ID": 828, "Title": "Count Unique Characters of All Substrings of a Given String", - "TitleZH": "\u7edf\u8ba1\u5b50\u4e32\u4e2d\u7684\u552f\u4e00\u5b57\u7b26", + "TitleZH": "统计子串中的唯一字符", "TitleSlug": "count-unique-characters-of-all-substrings-of-a-given-string", "ContestSlug": "weekly-contest-83", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u5468\u8d5b" + "ContestID_zh": "第 83 场周赛" }, { "Rating": 2033.4597721985, "ID": 2136, "Title": "Earliest Possible Day of Full Bloom", - "TitleZH": "\u5168\u90e8\u5f00\u82b1\u7684\u6700\u65e9\u4e00\u5929", + "TitleZH": "全部开花的最早一天", "TitleSlug": "earliest-possible-day-of-full-bloom", "ContestSlug": "weekly-contest-275", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 275", - "ContestID_zh": "\u7b2c 275 \u573a\u5468\u8d5b" + "ContestID_zh": "第 275 场周赛" }, { "Rating": 2033.1699277531, "ID": 2262, "Title": "Total Appeal of A String", - "TitleZH": "\u5b57\u7b26\u4e32\u7684\u603b\u5f15\u529b", + "TitleZH": "字符串的总引力", "TitleSlug": "total-appeal-of-a-string", "ContestSlug": "weekly-contest-291", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 291", - "ContestID_zh": "\u7b2c 291 \u573a\u5468\u8d5b" + "ContestID_zh": "第 291 场周赛" }, { "Rating": 2032.4773038683, "ID": 1425, "Title": "Constrained Subsequence Sum", - "TitleZH": "\u5e26\u9650\u5236\u7684\u5b50\u5e8f\u5217\u548c", + "TitleZH": "带限制的子序列和", "TitleSlug": "constrained-subsequence-sum", "ContestSlug": "weekly-contest-186", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 186", - "ContestID_zh": "\u7b2c 186 \u573a\u5468\u8d5b" + "ContestID_zh": "第 186 场周赛" }, { "Rating": 2030.1021023033, "ID": 2426, "Title": "Number of Pairs Satisfying Inequality", - "TitleZH": "\u6ee1\u8db3\u4e0d\u7b49\u5f0f\u7684\u6570\u5bf9\u6570\u76ee", + "TitleZH": "满足不等式的数对数目", "TitleSlug": "number-of-pairs-satisfying-inequality", "ContestSlug": "biweekly-contest-88", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 88 场双周赛" }, { "Rating": 2029.1301557536, "ID": 1231, "Title": "Divide Chocolate", - "TitleZH": "\u5206\u4eab\u5de7\u514b\u529b", + "TitleZH": "分享巧克力", "TitleSlug": "divide-chocolate", "ContestSlug": "biweekly-contest-11", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 11", - "ContestID_zh": "\u7b2c 11 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 11 场双周赛" }, { "Rating": 2027.8772739639, "ID": 895, "Title": "Maximum Frequency Stack", - "TitleZH": "\u6700\u5927\u9891\u7387\u6808", + "TitleZH": "最大频率栈", "TitleSlug": "maximum-frequency-stack", "ContestSlug": "weekly-contest-99", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 99", - "ContestID_zh": "\u7b2c 99 \u573a\u5468\u8d5b" + "ContestID_zh": "第 99 场周赛" }, { "Rating": 2027.7304121046, "ID": 1320, "Title": "Minimum Distance to Type a Word Using Two Fingers", - "TitleZH": "\u4e8c\u6307\u8f93\u5165\u7684\u7684\u6700\u5c0f\u8ddd\u79bb", + "TitleZH": "二指输入的的最小距离", "TitleSlug": "minimum-distance-to-type-a-word-using-two-fingers", "ContestSlug": "weekly-contest-171", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 171", - "ContestID_zh": "\u7b2c 171 \u573a\u5468\u8d5b" + "ContestID_zh": "第 171 场周赛" }, { "Rating": 2027.3839266711, "ID": 1626, "Title": "Best Team With No Conflicts", - "TitleZH": "\u65e0\u77db\u76fe\u7684\u6700\u4f73\u7403\u961f", + "TitleZH": "无矛盾的最佳球队", "TitleSlug": "best-team-with-no-conflicts", "ContestSlug": "weekly-contest-211", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 211", - "ContestID_zh": "\u7b2c 211 \u573a\u5468\u8d5b" + "ContestID_zh": "第 211 场周赛" }, { "Rating": 2026.8957817007, "ID": 1406, "Title": "Stone Game III", - "TitleZH": "\u77f3\u5b50\u6e38\u620f III", + "TitleZH": "石子游戏 III", "TitleSlug": "stone-game-iii", "ContestSlug": "weekly-contest-183", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 183", - "ContestID_zh": "\u7b2c 183 \u573a\u5468\u8d5b" + "ContestID_zh": "第 183 场周赛" }, { "Rating": 2025.1529365814, "ID": 1067, "Title": "Digit Count in Range", - "TitleZH": "\u8303\u56f4\u5185\u7684\u6570\u5b57\u8ba1\u6570", + "TitleZH": "范围内的数字计数", "TitleSlug": "digit-count-in-range", "ContestSlug": "biweekly-contest-1", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 1", - "ContestID_zh": "\u7b2c 1 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 1 场双周赛" }, { "Rating": 2025.0377429311, "ID": 751, "Title": "IP to CIDR", - "TitleZH": "IP \u5230 CIDR", + "TitleZH": "IP 到 CIDR", "TitleSlug": "ip-to-cidr", "ContestSlug": "weekly-contest-64", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u5468\u8d5b" + "ContestID_zh": "第 64 场周赛" }, { "Rating": 2024.3797833173, "ID": 1734, "Title": "Decode XORed Permutation", - "TitleZH": "\u89e3\u7801\u5f02\u6216\u540e\u7684\u6392\u5217", + "TitleZH": "解码异或后的排列", "TitleSlug": "decode-xored-permutation", "ContestSlug": "biweekly-contest-44", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 44", - "ContestID_zh": "\u7b2c 44 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 44 场双周赛" }, { "Rating": 2022.8520613737, "ID": 1235, "Title": "Maximum Profit in Job Scheduling", - "TitleZH": "\u89c4\u5212\u517c\u804c\u5de5\u4f5c", + "TitleZH": "规划兼职工作", "TitleSlug": "maximum-profit-in-job-scheduling", "ContestSlug": "weekly-contest-159", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 159", - "ContestID_zh": "\u7b2c 159 \u573a\u5468\u8d5b" + "ContestID_zh": "第 159 场周赛" }, { "Rating": 2022.4752963768, "ID": 1210, "Title": "Minimum Moves to Reach Target with Rotations", - "TitleZH": "\u7a7f\u8fc7\u8ff7\u5bab\u7684\u6700\u5c11\u79fb\u52a8\u6b21\u6570", + "TitleZH": "穿过迷宫的最少移动次数", "TitleSlug": "minimum-moves-to-reach-target-with-rotations", "ContestSlug": "weekly-contest-156", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 156", - "ContestID_zh": "\u7b2c 156 \u573a\u5468\u8d5b" + "ContestID_zh": "第 156 场周赛" }, { "Rating": 2022.3137128296, "ID": 2251, "Title": "Number of Flowers in Full Bloom", - "TitleZH": "\u82b1\u671f\u5185\u82b1\u7684\u6570\u76ee", + "TitleZH": "花期内花的数目", "TitleSlug": "number-of-flowers-in-full-bloom", "ContestSlug": "weekly-contest-290", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 290", - "ContestID_zh": "\u7b2c 290 \u573a\u5468\u8d5b" + "ContestID_zh": "第 290 场周赛" }, { "Rating": 2021.7790710467, "ID": 2271, "Title": "Maximum White Tiles Covered by a Carpet", - "TitleZH": "\u6bef\u5b50\u8986\u76d6\u7684\u6700\u591a\u767d\u8272\u7816\u5757\u6570", + "TitleZH": "毯子覆盖的最多白色砖块数", "TitleSlug": "maximum-white-tiles-covered-by-a-carpet", "ContestSlug": "biweekly-contest-78", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 78 场双周赛" }, { "Rating": 2019.5399647546, "ID": 909, "Title": "Snakes and Ladders", - "TitleZH": "\u86c7\u68af\u68cb", + "TitleZH": "蛇梯棋", "TitleSlug": "snakes-and-ladders", "ContestSlug": "weekly-contest-103", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 103", - "ContestID_zh": "\u7b2c 103 \u573a\u5468\u8d5b" + "ContestID_zh": "第 103 场周赛" }, { "Rating": 2015.7291888336, "ID": 1353, "Title": "Maximum Number of Events That Can Be Attended", - "TitleZH": "\u6700\u591a\u53ef\u4ee5\u53c2\u52a0\u7684\u4f1a\u8bae\u6570\u76ee", + "TitleZH": "最多可以参加的会议数目", "TitleSlug": "maximum-number-of-events-that-can-be-attended", "ContestSlug": "weekly-contest-176", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 176", - "ContestID_zh": "\u7b2c 176 \u573a\u5468\u8d5b" + "ContestID_zh": "第 176 场周赛" }, { "Rating": 2014.7655493665, "ID": 1354, "Title": "Construct Target Array With Multiple Sums", - "TitleZH": "\u591a\u6b21\u6c42\u548c\u6784\u9020\u76ee\u6807\u6570\u7ec4", + "TitleZH": "多次求和构造目标数组", "TitleSlug": "construct-target-array-with-multiple-sums", "ContestSlug": "weekly-contest-176", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 176", - "ContestID_zh": "\u7b2c 176 \u573a\u5468\u8d5b" + "ContestID_zh": "第 176 场周赛" }, { "Rating": 2014.2979320644, "ID": 1105, "Title": "Filling Bookcase Shelves", - "TitleZH": "\u586b\u5145\u4e66\u67b6", + "TitleZH": "填充书架", "TitleSlug": "filling-bookcase-shelves", "ContestSlug": "weekly-contest-143", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 143", - "ContestID_zh": "\u7b2c 143 \u573a\u5468\u8d5b" + "ContestID_zh": "第 143 场周赛" }, { "Rating": 2011.3542735398, "ID": 1102, "Title": "Path With Maximum Minimum Value", - "TitleZH": "\u5f97\u5206\u6700\u9ad8\u7684\u8def\u5f84", + "TitleZH": "得分最高的路径", "TitleSlug": "path-with-maximum-minimum-value", "ContestSlug": "biweekly-contest-3", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 3", - "ContestID_zh": "\u7b2c 3 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 3 场双周赛" }, { "Rating": 2011.0496162515, "ID": 2333, "Title": "Minimum Sum of Squared Difference", - "TitleZH": "\u6700\u5c0f\u5dee\u503c\u5e73\u65b9\u548c", + "TitleZH": "最小差值平方和", "TitleSlug": "minimum-sum-of-squared-difference", "ContestSlug": "biweekly-contest-82", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 82 场双周赛" }, { "Rating": 2010.5524756946, "ID": 880, "Title": "Decoded String at Index", - "TitleZH": "\u7d22\u5f15\u5904\u7684\u89e3\u7801\u5b57\u7b26\u4e32", + "TitleZH": "索引处的解码字符串", "TitleSlug": "decoded-string-at-index", "ContestSlug": "weekly-contest-96", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 96", - "ContestID_zh": "\u7b2c 96 \u573a\u5468\u8d5b" + "ContestID_zh": "第 96 场周赛" }, { "Rating": 2009.7322365973, "ID": 1981, "Title": "Minimize the Difference Between Target and Chosen Elements", - "TitleZH": "\u6700\u5c0f\u5316\u76ee\u6807\u503c\u4e0e\u6240\u9009\u5143\u7d20\u7684\u5dee", + "TitleZH": "最小化目标值与所选元素的差", "TitleSlug": "minimize-the-difference-between-target-and-chosen-elements", "ContestSlug": "weekly-contest-255", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 255", - "ContestID_zh": "\u7b2c 255 \u573a\u5468\u8d5b" + "ContestID_zh": "第 255 场周赛" }, { "Rating": 2008.40650791, "ID": 1223, "Title": "Dice Roll Simulation", - "TitleZH": "\u63b7\u9ab0\u5b50\u6a21\u62df", + "TitleZH": "掷骰子模拟", "TitleSlug": "dice-roll-simulation", "ContestSlug": "weekly-contest-158", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 158", - "ContestID_zh": "\u7b2c 158 \u573a\u5468\u8d5b" + "ContestID_zh": "第 158 场周赛" }, { "Rating": 2005.5862669078, "ID": 1888, "Title": "Minimum Number of Flips to Make the Binary String Alternating", - "TitleZH": "\u4f7f\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32\u5b57\u7b26\u4ea4\u66ff\u7684\u6700\u5c11\u53cd\u8f6c\u6b21\u6570", + "TitleZH": "使二进制字符串字符交替的最少反转次数", "TitleSlug": "minimum-number-of-flips-to-make-the-binary-string-alternating", "ContestSlug": "weekly-contest-244", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 244", - "ContestID_zh": "\u7b2c 244 \u573a\u5468\u8d5b" + "ContestID_zh": "第 244 场周赛" }, { "Rating": 2005.3737929084, "ID": 2448, "Title": "Minimum Cost to Make Array Equal", - "TitleZH": "\u4f7f\u6570\u7ec4\u76f8\u7b49\u7684\u6700\u5c0f\u5f00\u9500", + "TitleZH": "使数组相等的最小开销", "TitleSlug": "minimum-cost-to-make-array-equal", "ContestSlug": "weekly-contest-316", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 316", - "ContestID_zh": "\u7b2c 316 \u573a\u5468\u8d5b" + "ContestID_zh": "第 316 场周赛" }, { "Rating": 2005.2755755378, "ID": 1761, "Title": "Minimum Degree of a Connected Trio in a Graph", - "TitleZH": "\u4e00\u4e2a\u56fe\u4e2d\u8fde\u901a\u4e09\u5143\u7ec4\u7684\u6700\u5c0f\u5ea6\u6570", + "TitleZH": "一个图中连通三元组的最小度数", "TitleSlug": "minimum-degree-of-a-connected-trio-in-a-graph", "ContestSlug": "weekly-contest-228", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 228", - "ContestID_zh": "\u7b2c 228 \u573a\u5468\u8d5b" + "ContestID_zh": "第 228 场周赛" }, { "Rating": 2004.5346526204, "ID": 1927, "Title": "Sum Game", - "TitleZH": "\u6c42\u548c\u6e38\u620f", + "TitleZH": "求和游戏", "TitleSlug": "sum-game", "ContestSlug": "biweekly-contest-56", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 56", - "ContestID_zh": "\u7b2c 56 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 56 场双周赛" }, { "Rating": 2003.5794613668, "ID": 2092, "Title": "Find All People With Secret", - "TitleZH": "\u627e\u51fa\u77e5\u6653\u79d8\u5bc6\u7684\u6240\u6709\u4e13\u5bb6", + "TitleZH": "找出知晓秘密的所有专家", "TitleSlug": "find-all-people-with-secret", "ContestSlug": "weekly-contest-269", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 269", - "ContestID_zh": "\u7b2c 269 \u573a\u5468\u8d5b" + "ContestID_zh": "第 269 场周赛" }, { "Rating": 2001.2074132383, "ID": 2328, "Title": "Number of Increasing Paths in a Grid", - "TitleZH": "\u7f51\u683c\u56fe\u4e2d\u9012\u589e\u8def\u5f84\u7684\u6570\u76ee", + "TitleZH": "网格图中递增路径的数目", "TitleSlug": "number-of-increasing-paths-in-a-grid", "ContestSlug": "weekly-contest-300", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 300", - "ContestID_zh": "\u7b2c 300 \u573a\u5468\u8d5b" + "ContestID_zh": "第 300 场周赛" }, { "Rating": 2000.8441804448, "ID": 1686, "Title": "Stone Game VI", - "TitleZH": "\u77f3\u5b50\u6e38\u620f VI", + "TitleZH": "石子游戏 VI", "TitleSlug": "stone-game-vi", "ContestSlug": "biweekly-contest-41", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 41", - "ContestID_zh": "\u7b2c 41 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 41 场双周赛" }, { "Rating": 2000.8021428612, "ID": 911, "Title": "Online Election", - "TitleZH": "\u5728\u7ebf\u9009\u4e3e", + "TitleZH": "在线选举", "TitleSlug": "online-election", "ContestSlug": "weekly-contest-103", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 103", - "ContestID_zh": "\u7b2c 103 \u573a\u5468\u8d5b" + "ContestID_zh": "第 103 场周赛" }, { "Rating": 1999.1208076854, "ID": 765, "Title": "Couples Holding Hands", - "TitleZH": "\u60c5\u4fa3\u7275\u624b", + "TitleZH": "情侣牵手", "TitleSlug": "couples-holding-hands", "ContestSlug": "weekly-contest-67", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u5468\u8d5b" + "ContestID_zh": "第 67 场周赛" }, { "Rating": 1997.7013718153, "ID": 2250, "Title": "Count Number of Rectangles Containing Each Point", - "TitleZH": "\u7edf\u8ba1\u5305\u542b\u6bcf\u4e2a\u70b9\u7684\u77e9\u5f62\u6570\u76ee", + "TitleZH": "统计包含每个点的矩形数目", "TitleSlug": "count-number-of-rectangles-containing-each-point", "ContestSlug": "weekly-contest-290", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 290", - "ContestID_zh": "\u7b2c 290 \u573a\u5468\u8d5b" + "ContestID_zh": "第 290 场周赛" }, { "Rating": 1997.1824403719, "ID": 1274, "Title": "Number of Ships in a Rectangle", - "TitleZH": "\u77e9\u5f62\u5185\u8239\u53ea\u7684\u6570\u76ee", + "TitleZH": "矩形内船只的数目", "TitleSlug": "number-of-ships-in-a-rectangle", "ContestSlug": "biweekly-contest-14", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 14", - "ContestID_zh": "\u7b2c 14 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 14 场双周赛" }, { "Rating": 1995.2937073376, "ID": 1986, "Title": "Minimum Number of Work Sessions to Finish the Tasks", - "TitleZH": "\u5b8c\u6210\u4efb\u52a1\u7684\u6700\u5c11\u5de5\u4f5c\u65f6\u95f4\u6bb5", + "TitleZH": "完成任务的最少工作时间段", "TitleSlug": "minimum-number-of-work-sessions-to-finish-the-tasks", "ContestSlug": "weekly-contest-256", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 256", - "ContestID_zh": "\u7b2c 256 \u573a\u5468\u8d5b" + "ContestID_zh": "第 256 场周赛" }, { "Rating": 1994.3618892548, "ID": 927, "Title": "Three Equal Parts", - "TitleZH": "\u4e09\u7b49\u5206", + "TitleZH": "三等分", "TitleSlug": "three-equal-parts", "ContestSlug": "weekly-contest-107", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 107", - "ContestID_zh": "\u7b2c 107 \u573a\u5468\u8d5b" + "ContestID_zh": "第 107 场周赛" }, { "Rating": 1992.0032292739, "ID": 1625, "Title": "Lexicographically Smallest String After Applying Operations", - "TitleZH": "\u6267\u884c\u64cd\u4f5c\u540e\u5b57\u5178\u5e8f\u6700\u5c0f\u7684\u5b57\u7b26\u4e32", + "TitleZH": "执行操作后字典序最小的字符串", "TitleSlug": "lexicographically-smallest-string-after-applying-operations", "ContestSlug": "weekly-contest-211", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 211", - "ContestID_zh": "\u7b2c 211 \u573a\u5468\u8d5b" + "ContestID_zh": "第 211 场周赛" }, { "Rating": 1990.7738526153, "ID": 963, "Title": "Minimum Area Rectangle II", - "TitleZH": "\u6700\u5c0f\u9762\u79ef\u77e9\u5f62 II", + "TitleZH": "最小面积矩形 II", "TitleSlug": "minimum-area-rectangle-ii", "ContestSlug": "weekly-contest-116", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 116", - "ContestID_zh": "\u7b2c 116 \u573a\u5468\u8d5b" + "ContestID_zh": "第 116 场周赛" }, { "Rating": 1990.2800994214, "ID": 756, "Title": "Pyramid Transition Matrix", - "TitleZH": "\u91d1\u5b57\u5854\u8f6c\u6362\u77e9\u9635", + "TitleZH": "金字塔转换矩阵", "TitleSlug": "pyramid-transition-matrix", "ContestSlug": "weekly-contest-65", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u5468\u8d5b" + "ContestID_zh": "第 65 场周赛" }, { "Rating": 1989.5369509422, "ID": 902, "Title": "Numbers At Most N Given Digit Set", - "TitleZH": "\u6700\u5927\u4e3a N \u7684\u6570\u5b57\u7ec4\u5408", + "TitleZH": "最大为 N 的数字组合", "TitleSlug": "numbers-at-most-n-given-digit-set", "ContestSlug": "weekly-contest-101", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 101", - "ContestID_zh": "\u7b2c 101 \u573a\u5468\u8d5b" + "ContestID_zh": "第 101 场周赛" }, { "Rating": 1985.2504512337, "ID": 928, "Title": "Minimize Malware Spread II", - "TitleZH": "\u5c3d\u91cf\u51cf\u5c11\u6076\u610f\u8f6f\u4ef6\u7684\u4f20\u64ad II", + "TitleZH": "尽量减少恶意软件的传播 II", "TitleSlug": "minimize-malware-spread-ii", "ContestSlug": "weekly-contest-107", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 107", - "ContestID_zh": "\u7b2c 107 \u573a\u5468\u8d5b" + "ContestID_zh": "第 107 场周赛" }, { "Rating": 1985.2417520906, "ID": 940, "Title": "Distinct Subsequences II", - "TitleZH": "\u4e0d\u540c\u7684\u5b50\u5e8f\u5217 II", + "TitleZH": "不同的子序列 II", "TitleSlug": "distinct-subsequences-ii", "ContestSlug": "weekly-contest-110", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 110", - "ContestID_zh": "\u7b2c 110 \u573a\u5468\u8d5b" + "ContestID_zh": "第 110 场周赛" }, { "Rating": 1983.70440706, "ID": 1733, "Title": "Minimum Number of People to Teach", - "TitleZH": "\u9700\u8981\u6559\u8bed\u8a00\u7684\u6700\u5c11\u4eba\u6570", + "TitleZH": "需要教语言的最少人数", "TitleSlug": "minimum-number-of-people-to-teach", "ContestSlug": "biweekly-contest-44", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 44", - "ContestID_zh": "\u7b2c 44 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 44 场双周赛" }, { "Rating": 1983.2319731313, "ID": 1250, "Title": "Check If It Is a Good Array", - "TitleZH": "\u68c0\u67e5\u300c\u597d\u6570\u7ec4\u300d", + "TitleZH": "检查「好数组」", "TitleSlug": "check-if-it-is-a-good-array", "ContestSlug": "weekly-contest-161", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 161", - "ContestID_zh": "\u7b2c 161 \u573a\u5468\u8d5b" + "ContestID_zh": "第 161 场周赛" }, { "Rating": 1982.5085994817, "ID": 805, "Title": "Split Array With Same Average", - "TitleZH": "\u6570\u7ec4\u7684\u5747\u503c\u5206\u5272", + "TitleZH": "数组的均值分割", "TitleSlug": "split-array-with-same-average", "ContestSlug": "weekly-contest-77", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u5468\u8d5b" + "ContestID_zh": "第 77 场周赛" }, { "Rating": 1979.9454101467, "ID": 2151, "Title": "Maximum Good People Based on Statements", - "TitleZH": "\u57fa\u4e8e\u9648\u8ff0\u7edf\u8ba1\u6700\u591a\u597d\u4eba\u6570", + "TitleZH": "基于陈述统计最多好人数", "TitleSlug": "maximum-good-people-based-on-statements", "ContestSlug": "weekly-contest-277", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 277", - "ContestID_zh": "\u7b2c 277 \u573a\u5468\u8d5b" + "ContestID_zh": "第 277 场周赛" }, { "Rating": 1979.1323403633, "ID": 1278, "Title": "Palindrome Partitioning III", - "TitleZH": "\u5206\u5272\u56de\u6587\u4e32 III", + "TitleZH": "分割回文串 III", "TitleSlug": "palindrome-partitioning-iii", "ContestSlug": "weekly-contest-165", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 165", - "ContestID_zh": "\u7b2c 165 \u573a\u5468\u8d5b" + "ContestID_zh": "第 165 场周赛" }, { "Rating": 1979.1112273597, "ID": 1882, "Title": "Process Tasks Using Servers", - "TitleZH": "\u4f7f\u7528\u670d\u52a1\u5668\u5904\u7406\u4efb\u52a1", + "TitleZH": "使用服务器处理任务", "TitleSlug": "process-tasks-using-servers", "ContestSlug": "weekly-contest-243", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 243", - "ContestID_zh": "\u7b2c 243 \u573a\u5468\u8d5b" + "ContestID_zh": "第 243 场周赛" }, { "Rating": 1976.7214151234, "ID": 1092, "Title": "Shortest Common Supersequence ", - "TitleZH": "\u6700\u77ed\u516c\u5171\u8d85\u5e8f\u5217", + "TitleZH": "最短公共超序列", "TitleSlug": "shortest-common-supersequence", "ContestSlug": "weekly-contest-141", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 141", - "ContestID_zh": "\u7b2c 141 \u573a\u5468\u8d5b" + "ContestID_zh": "第 141 场周赛" }, { "Rating": 1975.5726300727, "ID": 907, "Title": "Sum of Subarray Minimums", - "TitleZH": "\u5b50\u6570\u7ec4\u7684\u6700\u5c0f\u503c\u4e4b\u548c", + "TitleZH": "子数组的最小值之和", "TitleSlug": "sum-of-subarray-minimums", "ContestSlug": "weekly-contest-102", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 102", - "ContestID_zh": "\u7b2c 102 \u573a\u5468\u8d5b" + "ContestID_zh": "第 102 场周赛" }, { "Rating": 1973.7407637067, "ID": 1488, "Title": "Avoid Flood in The City", - "TitleZH": "\u907f\u514d\u6d2a\u6c34\u6cdb\u6ee5", + "TitleZH": "避免洪水泛滥", "TitleSlug": "avoid-flood-in-the-city", "ContestSlug": "weekly-contest-194", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 194", - "ContestID_zh": "\u7b2c 194 \u573a\u5468\u8d5b" + "ContestID_zh": "第 194 场周赛" }, { "Rating": 1970.4608098164, "ID": 1032, "Title": "Stream of Characters", - "TitleZH": "\u5b57\u7b26\u6d41", + "TitleZH": "字符流", "TitleSlug": "stream-of-characters", "ContestSlug": "weekly-contest-133", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 133", - "ContestID_zh": "\u7b2c 133 \u573a\u5468\u8d5b" + "ContestID_zh": "第 133 场周赛" }, { "Rating": 1969.9845549158, "ID": 835, "Title": "Image Overlap", - "TitleZH": "\u56fe\u50cf\u91cd\u53e0", + "TitleZH": "图像重叠", "TitleSlug": "image-overlap", "ContestSlug": "weekly-contest-84", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u5468\u8d5b" + "ContestID_zh": "第 84 场周赛" }, { "Rating": 1969.2019235672, "ID": 1943, "Title": "Describe the Painting", - "TitleZH": "\u63cf\u8ff0\u7ed8\u753b\u7ed3\u679c", + "TitleZH": "描述绘画结果", "TitleSlug": "describe-the-painting", "ContestSlug": "biweekly-contest-57", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 57", - "ContestID_zh": "\u7b2c 57 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 57 场双周赛" }, { "Rating": 1967.3284576938, "ID": 1293, "Title": "Shortest Path in a Grid with Obstacles Elimination", - "TitleZH": "\u7f51\u683c\u4e2d\u7684\u6700\u77ed\u8def\u5f84", + "TitleZH": "网格中的最短路径", "TitleSlug": "shortest-path-in-a-grid-with-obstacles-elimination", "ContestSlug": "weekly-contest-167", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 167", - "ContestID_zh": "\u7b2c 167 \u573a\u5468\u8d5b" + "ContestID_zh": "第 167 场周赛" }, { "Rating": 1966.7067914206, "ID": 1969, "Title": "Minimum Non-Zero Product of the Array Elements", - "TitleZH": "\u6570\u7ec4\u5143\u7d20\u7684\u6700\u5c0f\u975e\u96f6\u4e58\u79ef", + "TitleZH": "数组元素的最小非零乘积", "TitleSlug": "minimum-non-zero-product-of-the-array-elements", "ContestSlug": "weekly-contest-254", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 254", - "ContestID_zh": "\u7b2c 254 \u573a\u5468\u8d5b" + "ContestID_zh": "第 254 场周赛" }, { "Rating": 1965.1266122355, "ID": 2439, "Title": "Minimize Maximum of Array", - "TitleZH": "\u6700\u5c0f\u5316\u6570\u7ec4\u4e2d\u7684\u6700\u5927\u503c", + "TitleZH": "最小化数组中的最大值", "TitleSlug": "minimize-maximum-of-array", "ContestSlug": "biweekly-contest-89", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 89 场双周赛" }, { "Rating": 1964.3793590858, "ID": 815, "Title": "Bus Routes", - "TitleZH": "\u516c\u4ea4\u8def\u7ebf", + "TitleZH": "公交路线", "TitleSlug": "bus-routes", "ContestSlug": "weekly-contest-79", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u5468\u8d5b" + "ContestID_zh": "第 79 场周赛" }, { "Rating": 1962.3314335449, "ID": 802, "Title": "Find Eventual Safe States", - "TitleZH": "\u627e\u5230\u6700\u7ec8\u7684\u5b89\u5168\u72b6\u6001", + "TitleZH": "找到最终的安全状态", "TitleSlug": "find-eventual-safe-states", "ContestSlug": "weekly-contest-76", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u5468\u8d5b" + "ContestID_zh": "第 76 场周赛" }, { "Rating": 1962.2005269503, "ID": 1642, "Title": "Furthest Building You Can Reach", - "TitleZH": "\u53ef\u4ee5\u5230\u8fbe\u7684\u6700\u8fdc\u5efa\u7b51", + "TitleZH": "可以到达的最远建筑", "TitleSlug": "furthest-building-you-can-reach", "ContestSlug": "weekly-contest-213", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 213", - "ContestID_zh": "\u7b2c 213 \u573a\u5468\u8d5b" + "ContestID_zh": "第 213 场周赛" }, { "Rating": 1961.4987013156, "ID": 1537, "Title": "Get the Maximum Score", - "TitleZH": "\u6700\u5927\u5f97\u5206", + "TitleZH": "最大得分", "TitleSlug": "get-the-maximum-score", "ContestSlug": "weekly-contest-200", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 200", - "ContestID_zh": "\u7b2c 200 \u573a\u5468\u8d5b" + "ContestID_zh": "第 200 场周赛" }, { "Rating": 1960.5763266754, "ID": 2350, "Title": "Shortest Impossible Sequence of Rolls", - "TitleZH": "\u4e0d\u53ef\u80fd\u5f97\u5230\u7684\u6700\u77ed\u9ab0\u5b50\u5e8f\u5217", + "TitleZH": "不可能得到的最短骰子序列", "TitleSlug": "shortest-impossible-sequence-of-rolls", "ContestSlug": "biweekly-contest-83", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 83 场双周赛" }, { "Rating": 1960.5517123728, "ID": 2392, "Title": "Build a Matrix With Conditions", - "TitleZH": "\u7ed9\u5b9a\u6761\u4ef6\u4e0b\u6784\u9020\u77e9\u9635", + "TitleZH": "给定条件下构造矩阵", "TitleSlug": "build-a-matrix-with-conditions", "ContestSlug": "weekly-contest-308", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 308", - "ContestID_zh": "\u7b2c 308 \u573a\u5468\u8d5b" + "ContestID_zh": "第 308 场周赛" }, { "Rating": 1956.7059585934, "ID": 1463, "Title": "Cherry Pickup II", - "TitleZH": "\u6458\u6a31\u6843 II", + "TitleZH": "摘樱桃 II", "TitleSlug": "cherry-pickup-ii", "ContestSlug": "biweekly-contest-27", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 27", - "ContestID_zh": "\u7b2c 27 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 27 场双周赛" }, { "Rating": 1954.2533254344, "ID": 1696, "Title": "Jump Game VI", - "TitleZH": "\u8df3\u8dc3\u6e38\u620f VI", + "TitleZH": "跳跃游戏 VI", "TitleSlug": "jump-game-vi", "ContestSlug": "weekly-contest-220", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 220", - "ContestID_zh": "\u7b2c 220 \u573a\u5468\u8d5b" + "ContestID_zh": "第 220 场周赛" }, { "Rating": 1953.137726744, "ID": 2434, "Title": "Using a Robot to Print the Lexicographically Smallest String", - "TitleZH": "\u4f7f\u7528\u673a\u5668\u4eba\u6253\u5370\u5b57\u5178\u5e8f\u6700\u5c0f\u7684\u5b57\u7b26\u4e32", + "TitleZH": "使用机器人打印字典序最小的字符串", "TitleSlug": "using-a-robot-to-print-the-lexicographically-smallest-string", "ContestSlug": "weekly-contest-314", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 314", - "ContestID_zh": "\u7b2c 314 \u573a\u5468\u8d5b" + "ContestID_zh": "第 314 场周赛" }, { "Rating": 1952.7073399331, "ID": 1737, "Title": "Change Minimum Characters to Satisfy One of Three Conditions", - "TitleZH": "\u6ee1\u8db3\u4e09\u6761\u4ef6\u4e4b\u4e00\u9700\u6539\u53d8\u7684\u6700\u5c11\u5b57\u7b26\u6570", + "TitleZH": "满足三条件之一需改变的最少字符数", "TitleSlug": "change-minimum-characters-to-satisfy-one-of-three-conditions", "ContestSlug": "weekly-contest-225", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 225", - "ContestID_zh": "\u7b2c 225 \u573a\u5468\u8d5b" + "ContestID_zh": "第 225 场周赛" }, { "Rating": 1951.5918682146, "ID": 2435, "Title": "Paths in Matrix Whose Sum Is Divisible by K", - "TitleZH": "\u77e9\u9635\u4e2d\u548c\u80fd\u88ab K \u6574\u9664\u7684\u8def\u5f84", + "TitleZH": "矩阵中和能被 K 整除的路径", "TitleSlug": "paths-in-matrix-whose-sum-is-divisible-by-k", "ContestSlug": "weekly-contest-314", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 314", - "ContestID_zh": "\u7b2c 314 \u573a\u5468\u8d5b" + "ContestID_zh": "第 314 场周赛" }, { "Rating": 1951.3509259668, "ID": 1259, "Title": "Handshakes That Don't Cross", - "TitleZH": "\u4e0d\u76f8\u4ea4\u7684\u63e1\u624b", + "TitleZH": "不相交的握手", "TitleSlug": "handshakes-that-dont-cross", "ContestSlug": "biweekly-contest-13", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 13", - "ContestID_zh": "\u7b2c 13 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 13 场双周赛" }, { "Rating": 1951.2096212775, "ID": 1690, "Title": "Stone Game VII", - "TitleZH": "\u77f3\u5b50\u6e38\u620f VII", + "TitleZH": "石子游戏 VII", "TitleSlug": "stone-game-vii", "ContestSlug": "weekly-contest-219", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 219", - "ContestID_zh": "\u7b2c 219 \u573a\u5468\u8d5b" + "ContestID_zh": "第 219 场周赛" }, { "Rating": 1949.0920823355, "ID": 1153, "Title": "String Transforms Into Another String", - "TitleZH": "\u5b57\u7b26\u4e32\u8f6c\u5316", + "TitleZH": "字符串转化", "TitleSlug": "string-transforms-into-another-string", "ContestSlug": "biweekly-contest-6", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 6", - "ContestID_zh": "\u7b2c 6 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 6 场双周赛" }, { "Rating": 1947.5013967785, "ID": 1631, "Title": "Path With Minimum Effort", - "TitleZH": "\u6700\u5c0f\u4f53\u529b\u6d88\u8017\u8def\u5f84", + "TitleZH": "最小体力消耗路径", "TitleSlug": "path-with-minimum-effort", "ContestSlug": "weekly-contest-212", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 212", - "ContestID_zh": "\u7b2c 212 \u573a\u5468\u8d5b" + "ContestID_zh": "第 212 场周赛" }, { "Rating": 1945.7515607928, "ID": 1793, "Title": "Maximum Score of a Good Subarray", - "TitleZH": "\u597d\u5b50\u6570\u7ec4\u7684\u6700\u5927\u5206\u6570", + "TitleZH": "好子数组的最大分数", "TitleSlug": "maximum-score-of-a-good-subarray", "ContestSlug": "weekly-contest-232", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 232", - "ContestID_zh": "\u7b2c 232 \u573a\u5468\u8d5b" + "ContestID_zh": "第 232 场周赛" }, { "Rating": 1945.5095833982, "ID": 1482, "Title": "Minimum Number of Days to Make m Bouquets", - "TitleZH": "\u5236\u4f5c m \u675f\u82b1\u6240\u9700\u7684\u6700\u5c11\u5929\u6570", + "TitleZH": "制作 m 束花所需的最少天数", "TitleSlug": "minimum-number-of-days-to-make-m-bouquets", "ContestSlug": "weekly-contest-193", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 193", - "ContestID_zh": "\u7b2c 193 \u573a\u5468\u8d5b" + "ContestID_zh": "第 193 场周赛" }, { "Rating": 1944.5673996888, "ID": 2227, "Title": "Encrypt and Decrypt Strings", - "TitleZH": "\u52a0\u5bc6\u89e3\u5bc6\u5b57\u7b26\u4e32", + "TitleZH": "加密解密字符串", "TitleSlug": "encrypt-and-decrypt-strings", "ContestSlug": "weekly-contest-287", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 287", - "ContestID_zh": "\u7b2c 287 \u573a\u5468\u8d5b" + "ContestID_zh": "第 287 场周赛" }, { "Rating": 1940.6002290953, "ID": 2111, "Title": "Minimum Operations to Make the Array K-Increasing", - "TitleZH": "\u4f7f\u6570\u7ec4 K \u9012\u589e\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使数组 K 递增的最少操作次数", "TitleSlug": "minimum-operations-to-make-the-array-k-increasing", "ContestSlug": "weekly-contest-272", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 272", - "ContestID_zh": "\u7b2c 272 \u573a\u5468\u8d5b" + "ContestID_zh": "第 272 场周赛" }, { "Rating": 1939.9323330472, "ID": 1760, "Title": "Minimum Limit of Balls in a Bag", - "TitleZH": "\u888b\u5b50\u91cc\u6700\u5c11\u6570\u76ee\u7684\u7403", + "TitleZH": "袋子里最少数目的球", "TitleSlug": "minimum-limit-of-balls-in-a-bag", "ContestSlug": "weekly-contest-228", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 228", - "ContestID_zh": "\u7b2c 228 \u573a\u5468\u8d5b" + "ContestID_zh": "第 228 场周赛" }, { "Rating": 1938.6883365596, "ID": 777, "Title": "Swap Adjacent in LR String", - "TitleZH": "\u5728LR\u5b57\u7b26\u4e32\u4e2d\u4ea4\u6362\u76f8\u90bb\u5b57\u7b26", + "TitleZH": "在LR字符串中交换相邻字符", "TitleSlug": "swap-adjacent-in-lr-string", "ContestSlug": "weekly-contest-70", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u5468\u8d5b" + "ContestID_zh": "第 70 场周赛" }, { "Rating": 1938.2224916289, "ID": 866, "Title": "Prime Palindrome", - "TitleZH": "\u56de\u6587\u7d20\u6570", + "TitleZH": "回文素数", "TitleSlug": "prime-palindrome", "ContestSlug": "weekly-contest-92", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 92", - "ContestID_zh": "\u7b2c 92 \u573a\u5468\u8d5b" + "ContestID_zh": "第 92 场周赛" }, { "Rating": 1938.0586460002, "ID": 2411, "Title": "Smallest Subarrays With Maximum Bitwise OR", - "TitleZH": "\u6309\u4f4d\u6216\u6700\u5927\u7684\u6700\u5c0f\u5b50\u6570\u7ec4\u957f\u5ea6", + "TitleZH": "按位或最大的最小子数组长度", "TitleSlug": "smallest-subarrays-with-maximum-bitwise-or", "ContestSlug": "biweekly-contest-87", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 87 场双周赛" }, { "Rating": 1936.6613414859, "ID": 813, "Title": "Largest Sum of Averages", - "TitleZH": "\u6700\u5927\u5e73\u5747\u503c\u548c\u7684\u5206\u7ec4", + "TitleZH": "最大平均值和的分组", "TitleSlug": "largest-sum-of-averages", "ContestSlug": "weekly-contest-79", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u5468\u8d5b" + "ContestID_zh": "第 79 场周赛" }, { "Rating": 1934.3556201811, "ID": 1818, "Title": "Minimum Absolute Sum Difference", - "TitleZH": "\u7edd\u5bf9\u5dee\u503c\u548c", + "TitleZH": "绝对差值和", "TitleSlug": "minimum-absolute-sum-difference", "ContestSlug": "weekly-contest-235", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 235", - "ContestID_zh": "\u7b2c 235 \u573a\u5468\u8d5b" + "ContestID_zh": "第 235 场周赛" }, { "Rating": 1933.9571917853, "ID": 827, "Title": "Making A Large Island", - "TitleZH": "\u6700\u5927\u4eba\u5de5\u5c9b", + "TitleZH": "最大人工岛", "TitleSlug": "making-a-large-island", "ContestSlug": "weekly-contest-82", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u5468\u8d5b" + "ContestID_zh": "第 82 场周赛" }, { "Rating": 1933.2169470617, "ID": 1964, "Title": "Find the Longest Valid Obstacle Course at Each Position", - "TitleZH": "\u627e\u51fa\u5230\u6bcf\u4e2a\u4f4d\u7f6e\u4e3a\u6b62\u6700\u957f\u7684\u6709\u6548\u969c\u788d\u8d5b\u8dd1\u8def\u7ebf", + "TitleZH": "找出到每个位置为止最长的有效障碍赛跑路线", "TitleSlug": "find-the-longest-valid-obstacle-course-at-each-position", "ContestSlug": "weekly-contest-253", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 253", - "ContestID_zh": "\u7b2c 253 \u573a\u5468\u8d5b" + "ContestID_zh": "第 253 场周赛" }, { "Rating": 1932.3730795204, "ID": 996, "Title": "Number of Squareful Arrays", - "TitleZH": "\u6b63\u65b9\u5f62\u6570\u7ec4\u7684\u6570\u76ee", + "TitleZH": "正方形数组的数目", "TitleSlug": "number-of-squareful-arrays", "ContestSlug": "weekly-contest-124", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 124", - "ContestID_zh": "\u7b2c 124 \u573a\u5468\u8d5b" + "ContestID_zh": "第 124 场周赛" }, { "Rating": 1931.7335479582, "ID": 1574, "Title": "Shortest Subarray to be Removed to Make Array Sorted", - "TitleZH": "\u5220\u9664\u6700\u77ed\u7684\u5b50\u6570\u7ec4\u4f7f\u5269\u4f59\u6570\u7ec4\u6709\u5e8f", + "TitleZH": "删除最短的子数组使剩余数组有序", "TitleSlug": "shortest-subarray-to-be-removed-to-make-array-sorted", "ContestSlug": "biweekly-contest-34", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 34", - "ContestID_zh": "\u7b2c 34 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 34 场双周赛" }, { "Rating": 1931.0849921121, "ID": 1798, "Title": "Maximum Number of Consecutive Values You Can Make", - "TitleZH": "\u4f60\u80fd\u6784\u9020\u51fa\u8fde\u7eed\u503c\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "你能构造出连续值的最大数目", "TitleSlug": "maximum-number-of-consecutive-values-you-can-make", "ContestSlug": "biweekly-contest-48", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 48", - "ContestID_zh": "\u7b2c 48 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 48 场双周赛" }, { "Rating": 1929.9086934334, "ID": 1705, "Title": "Maximum Number of Eaten Apples", - "TitleZH": "\u5403\u82f9\u679c\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "吃苹果的最大数目", "TitleSlug": "maximum-number-of-eaten-apples", "ContestSlug": "weekly-contest-221", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 221", - "ContestID_zh": "\u7b2c 221 \u573a\u5468\u8d5b" + "ContestID_zh": "第 221 场周赛" }, { "Rating": 1929.897343316, "ID": 2018, "Title": "Check if Word Can Be Placed In Crossword", - "TitleZH": "\u5224\u65ad\u5355\u8bcd\u662f\u5426\u80fd\u653e\u5165\u586b\u5b57\u6e38\u620f\u5185", + "TitleZH": "判断单词是否能放入填字游戏内", "TitleSlug": "check-if-word-can-be-placed-in-crossword", "ContestSlug": "weekly-contest-260", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 260", - "ContestID_zh": "\u7b2c 260 \u573a\u5468\u8d5b" + "ContestID_zh": "第 260 场周赛" }, { "Rating": 1929.3184180196, "ID": 1802, "Title": "Maximum Value at a Given Index in a Bounded Array", - "TitleZH": "\u6709\u754c\u6570\u7ec4\u4e2d\u6307\u5b9a\u4e0b\u6807\u5904\u7684\u6700\u5927\u503c", + "TitleZH": "有界数组中指定下标处的最大值", "TitleSlug": "maximum-value-at-a-given-index-in-a-bounded-array", "ContestSlug": "weekly-contest-233", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 233", - "ContestID_zh": "\u7b2c 233 \u573a\u5468\u8d5b" + "ContestID_zh": "第 233 场周赛" }, { "Rating": 1928.2304187946, "ID": 1562, "Title": "Find Latest Group of Size M", - "TitleZH": "\u67e5\u627e\u5927\u5c0f\u4e3a M \u7684\u6700\u65b0\u5206\u7ec4", + "TitleZH": "查找大小为 M 的最新分组", "TitleSlug": "find-latest-group-of-size-m", "ContestSlug": "weekly-contest-203", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 203", - "ContestID_zh": "\u7b2c 203 \u573a\u5468\u8d5b" + "ContestID_zh": "第 203 场周赛" }, { "Rating": 1927.4000816649, "ID": 1449, "Title": "Form Largest Integer With Digits That Add up to Target", - "TitleZH": "\u6570\u4f4d\u6210\u672c\u548c\u4e3a\u76ee\u6807\u503c\u7684\u6700\u5927\u6570\u5b57", + "TitleZH": "数位成本和为目标值的最大数字", "TitleSlug": "form-largest-integer-with-digits-that-add-up-to-target", "ContestSlug": "biweekly-contest-26", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 26", - "ContestID_zh": "\u7b2c 26 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 26 场双周赛" }, { "Rating": 1926.7059583253, "ID": 1727, "Title": "Largest Submatrix With Rearrangements", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u540e\u7684\u6700\u5927\u5b50\u77e9\u9635", + "TitleZH": "重新排列后的最大子矩阵", "TitleSlug": "largest-submatrix-with-rearrangements", "ContestSlug": "weekly-contest-224", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 224", - "ContestID_zh": "\u7b2c 224 \u573a\u5468\u8d5b" + "ContestID_zh": "第 224 场周赛" }, { "Rating": 1924.964639491, "ID": 1745, "Title": "Palindrome Partitioning IV", - "TitleZH": "\u56de\u6587\u4e32\u5206\u5272 IV", + "TitleZH": "回文串分割 IV", "TitleSlug": "palindrome-partitioning-iv", "ContestSlug": "weekly-contest-226", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 226", - "ContestID_zh": "\u7b2c 226 \u573a\u5468\u8d5b" + "ContestID_zh": "第 226 场周赛" }, { "Rating": 1919.7433862082, "ID": 1552, "Title": "Magnetic Force Between Two Balls", - "TitleZH": "\u4e24\u7403\u4e4b\u95f4\u7684\u78c1\u529b", + "TitleZH": "两球之间的磁力", "TitleSlug": "magnetic-force-between-two-balls", "ContestSlug": "weekly-contest-202", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 202", - "ContestID_zh": "\u7b2c 202 \u573a\u5468\u8d5b" + "ContestID_zh": "第 202 场周赛" }, { "Rating": 1919.6391896894, "ID": 1416, "Title": "Restore The Array", - "TitleZH": "\u6062\u590d\u6570\u7ec4", + "TitleZH": "恢复数组", "TitleSlug": "restore-the-array", "ContestSlug": "biweekly-contest-24", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 24", - "ContestID_zh": "\u7b2c 24 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 24 场双周赛" }, { "Rating": 1919.1749818083, "ID": 1130, "Title": "Minimum Cost Tree From Leaf Values", - "TitleZH": "\u53f6\u503c\u7684\u6700\u5c0f\u4ee3\u4ef7\u751f\u6210\u6811", + "TitleZH": "叶值的最小代价生成树", "TitleSlug": "minimum-cost-tree-from-leaf-values", "ContestSlug": "weekly-contest-146", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 146", - "ContestID_zh": "\u7b2c 146 \u573a\u5468\u8d5b" + "ContestID_zh": "第 146 场周赛" }, { "Rating": 1918.9960035055, "ID": 2069, "Title": "Walking Robot Simulation II", - "TitleZH": "\u6a21\u62df\u884c\u8d70\u673a\u5668\u4eba II", + "TitleZH": "模拟行走机器人 II", "TitleSlug": "walking-robot-simulation-ii", "ContestSlug": "biweekly-contest-65", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 65 场双周赛" }, { "Rating": 1917.2145829853, "ID": 2398, "Title": "Maximum Number of Robots Within Budget", - "TitleZH": "\u9884\u7b97\u5185\u7684\u6700\u591a\u673a\u5668\u4eba\u6570\u76ee", + "TitleZH": "预算内的最多机器人数目", "TitleSlug": "maximum-number-of-robots-within-budget", "ContestSlug": "biweekly-contest-86", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 86 场双周赛" }, { "Rating": 1916.0689858272, "ID": 1043, "Title": "Partition Array for Maximum Sum", - "TitleZH": "\u5206\u9694\u6570\u7ec4\u4ee5\u5f97\u5230\u6700\u5927\u548c", + "TitleZH": "分隔数组以得到最大和", "TitleSlug": "partition-array-for-maximum-sum", "ContestSlug": "weekly-contest-136", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 136", - "ContestID_zh": "\u7b2c 136 \u573a\u5468\u8d5b" + "ContestID_zh": "第 136 场周赛" }, { "Rating": 1914.6717285348, "ID": 2147, "Title": "Number of Ways to Divide a Long Corridor", - "TitleZH": "\u5206\u9694\u957f\u5eca\u7684\u65b9\u6848\u6570", + "TitleZH": "分隔长廊的方案数", "TitleSlug": "number-of-ways-to-divide-a-long-corridor", "ContestSlug": "biweekly-contest-70", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 70 场双周赛" }, { "Rating": 1913.6704728453, "ID": 1373, "Title": "Maximum Sum BST in Binary Tree", - "TitleZH": "\u4e8c\u53c9\u641c\u7d22\u5b50\u6811\u7684\u6700\u5927\u952e\u503c\u548c", + "TitleZH": "二叉搜索子树的最大键值和", "TitleSlug": "maximum-sum-bst-in-binary-tree", "ContestSlug": "biweekly-contest-21", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 21", - "ContestID_zh": "\u7b2c 21 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 21 场双周赛" }, { "Rating": 1912.8455659711, "ID": 1671, "Title": "Minimum Number of Removals to Make Mountain Array", - "TitleZH": "\u5f97\u5230\u5c71\u5f62\u6570\u7ec4\u7684\u6700\u5c11\u5220\u9664\u6b21\u6570", + "TitleZH": "得到山形数组的最少删除次数", "TitleSlug": "minimum-number-of-removals-to-make-mountain-array", "ContestSlug": "biweekly-contest-40", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 40", - "ContestID_zh": "\u7b2c 40 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 40 场双周赛" }, { "Rating": 1912.8440554296, "ID": 1898, "Title": "Maximum Number of Removable Characters", - "TitleZH": "\u53ef\u79fb\u9664\u5b57\u7b26\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "可移除字符的最大数目", "TitleSlug": "maximum-number-of-removable-characters", "ContestSlug": "weekly-contest-245", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 245", - "ContestID_zh": "\u7b2c 245 \u573a\u5468\u8d5b" + "ContestID_zh": "第 245 场周赛" }, { "Rating": 1912.0829958001, "ID": 1147, "Title": "Longest Chunked Palindrome Decomposition", - "TitleZH": "\u6bb5\u5f0f\u56de\u6587", + "TitleZH": "段式回文", "TitleSlug": "longest-chunked-palindrome-decomposition", "ContestSlug": "weekly-contest-148", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 148", - "ContestID_zh": "\u7b2c 148 \u573a\u5468\u8d5b" + "ContestID_zh": "第 148 场周赛" }, { "Rating": 1911.8282317986, "ID": 2296, "Title": "Design a Text Editor", - "TitleZH": "\u8bbe\u8ba1\u4e00\u4e2a\u6587\u672c\u7f16\u8f91\u5668", + "TitleZH": "设计一个文本编辑器", "TitleSlug": "design-a-text-editor", "ContestSlug": "weekly-contest-296", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 296", - "ContestID_zh": "\u7b2c 296 \u573a\u5468\u8d5b" + "ContestID_zh": "第 296 场周赛" }, { "Rating": 1911.7063530593, "ID": 2049, "Title": "Count Nodes With the Highest Score", - "TitleZH": "\u7edf\u8ba1\u6700\u9ad8\u5206\u7684\u8282\u70b9\u6570\u76ee", + "TitleZH": "统计最高分的节点数目", "TitleSlug": "count-nodes-with-the-highest-score", "ContestSlug": "weekly-contest-264", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 264", - "ContestID_zh": "\u7b2c 264 \u573a\u5468\u8d5b" + "ContestID_zh": "第 264 场周赛" }, { "Rating": 1911.1959516695, "ID": 873, "Title": "Length of Longest Fibonacci Subsequence", - "TitleZH": "\u6700\u957f\u7684\u6590\u6ce2\u90a3\u5951\u5b50\u5e8f\u5217\u7684\u957f\u5ea6", + "TitleZH": "最长的斐波那契子序列的长度", "TitleSlug": "length-of-longest-fibonacci-subsequence", "ContestSlug": "weekly-contest-94", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 94", - "ContestID_zh": "\u7b2c 94 \u573a\u5468\u8d5b" + "ContestID_zh": "第 94 场周赛" }, { "Rating": 1909.4189035523, "ID": 991, "Title": "Broken Calculator", - "TitleZH": "\u574f\u4e86\u7684\u8ba1\u7b97\u5668", + "TitleZH": "坏了的计算器", "TitleSlug": "broken-calculator", "ContestSlug": "weekly-contest-123", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 123", - "ContestID_zh": "\u7b2c 123 \u573a\u5468\u8d5b" + "ContestID_zh": "第 123 场周赛" }, { "Rating": 1908.3866125757, "ID": 1124, "Title": "Longest Well-Performing Interval", - "TitleZH": "\u8868\u73b0\u826f\u597d\u7684\u6700\u957f\u65f6\u95f4\u6bb5", + "TitleZH": "表现良好的最长时间段", "TitleSlug": "longest-well-performing-interval", "ContestSlug": "weekly-contest-145", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 145", - "ContestID_zh": "\u7b2c 145 \u573a\u5468\u8d5b" + "ContestID_zh": "第 145 场周赛" }, { "Rating": 1900.8434122725, "ID": 1665, "Title": "Minimum Initial Energy to Finish Tasks", - "TitleZH": "\u5b8c\u6210\u6240\u6709\u4efb\u52a1\u7684\u6700\u5c11\u521d\u59cb\u80fd\u91cf", + "TitleZH": "完成所有任务的最少初始能量", "TitleSlug": "minimum-initial-energy-to-finish-tasks", "ContestSlug": "weekly-contest-216", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 216", - "ContestID_zh": "\u7b2c 216 \u573a\u5468\u8d5b" + "ContestID_zh": "第 216 场周赛" }, { "Rating": 1899.6213866649, "ID": 823, "Title": "Binary Trees With Factors", - "TitleZH": "\u5e26\u56e0\u5b50\u7684\u4e8c\u53c9\u6811", + "TitleZH": "带因子的二叉树", "TitleSlug": "binary-trees-with-factors", "ContestSlug": "weekly-contest-81", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u5468\u8d5b" + "ContestID_zh": "第 81 场周赛" }, { "Rating": 1897.5516652727, "ID": 1878, "Title": "Get Biggest Three Rhombus Sums in a Grid", - "TitleZH": "\u77e9\u9635\u4e2d\u6700\u5927\u7684\u4e09\u4e2a\u83f1\u5f62\u548c", + "TitleZH": "矩阵中最大的三个菱形和", "TitleSlug": "get-biggest-three-rhombus-sums-in-a-grid", "ContestSlug": "biweekly-contest-53", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 53", - "ContestID_zh": "\u7b2c 53 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 53 场双周赛" }, { "Rating": 1897.3309169423, "ID": 780, "Title": "Reaching Points", - "TitleZH": "\u5230\u8fbe\u7ec8\u70b9", + "TitleZH": "到达终点", "TitleSlug": "reaching-points", "ContestSlug": "weekly-contest-71", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u5468\u8d5b" + "ContestID_zh": "第 71 场周赛" }, { "Rating": 1897.1863301576, "ID": 2360, "Title": "Longest Cycle in a Graph", - "TitleZH": "\u56fe\u4e2d\u7684\u6700\u957f\u73af", + "TitleZH": "图中的最长环", "TitleSlug": "longest-cycle-in-a-graph", "ContestSlug": "weekly-contest-304", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 304", - "ContestID_zh": "\u7b2c 304 \u573a\u5468\u8d5b" + "ContestID_zh": "第 304 场周赛" }, { "Rating": 1896.7975214446, "ID": 878, "Title": "Nth Magical Number", - "TitleZH": "\u7b2c N \u4e2a\u795e\u5947\u6570\u5b57", + "TitleZH": "第 N 个神奇数字", "TitleSlug": "nth-magical-number", "ContestSlug": "weekly-contest-95", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 95", - "ContestID_zh": "\u7b2c 95 \u573a\u5468\u8d5b" + "ContestID_zh": "第 95 场周赛" }, { "Rating": 1896.1411567598, "ID": 1871, "Title": "Jump Game VII", - "TitleZH": "\u8df3\u8dc3\u6e38\u620f VII", + "TitleZH": "跳跃游戏 VII", "TitleSlug": "jump-game-vii", "ContestSlug": "weekly-contest-242", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 242", - "ContestID_zh": "\u7b2c 242 \u573a\u5468\u8d5b" + "ContestID_zh": "第 242 场周赛" }, { "Rating": 1893.5143805402, "ID": 2327, "Title": "Number of People Aware of a Secret", - "TitleZH": "\u77e5\u9053\u79d8\u5bc6\u7684\u4eba\u6570", + "TitleZH": "知道秘密的人数", "TitleSlug": "number-of-people-aware-of-a-secret", "ContestSlug": "weekly-contest-300", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 300", - "ContestID_zh": "\u7b2c 300 \u573a\u5468\u8d5b" + "ContestID_zh": "第 300 场周赛" }, { "Rating": 1892.1600619469, "ID": 1722, "Title": "Minimize Hamming Distance After Swap Operations", - "TitleZH": "\u6267\u884c\u4ea4\u6362\u64cd\u4f5c\u540e\u7684\u6700\u5c0f\u6c49\u660e\u8ddd\u79bb", + "TitleZH": "执行交换操作后的最小汉明距离", "TitleSlug": "minimize-hamming-distance-after-swap-operations", "ContestSlug": "weekly-contest-223", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 223", - "ContestID_zh": "\u7b2c 223 \u573a\u5468\u8d5b" + "ContestID_zh": "第 223 场周赛" }, { "Rating": 1886.7040111218, "ID": 2305, "Title": "Fair Distribution of Cookies", - "TitleZH": "\u516c\u5e73\u5206\u53d1\u997c\u5e72", + "TitleZH": "公平分发饼干", "TitleSlug": "fair-distribution-of-cookies", "ContestSlug": "weekly-contest-297", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 297", - "ContestID_zh": "\u7b2c 297 \u573a\u5468\u8d5b" + "ContestID_zh": "第 297 场周赛" }, { "Rating": 1885.9015646531, "ID": 2064, "Title": "Minimized Maximum of Products Distributed to Any Store", - "TitleZH": "\u5206\u914d\u7ed9\u5546\u5e97\u7684\u6700\u591a\u5546\u54c1\u7684\u6700\u5c0f\u503c", + "TitleZH": "分配给商店的最多商品的最小值", "TitleSlug": "minimized-maximum-of-products-distributed-to-any-store", "ContestSlug": "weekly-contest-266", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 266", - "ContestID_zh": "\u7b2c 266 \u573a\u5468\u8d5b" + "ContestID_zh": "第 266 场周赛" }, { "Rating": 1885.1051527272, "ID": 1066, "Title": "Campus Bikes II", - "TitleZH": "\u6821\u56ed\u81ea\u884c\u8f66\u5206\u914d II", + "TitleZH": "校园自行车分配 II", "TitleSlug": "campus-bikes-ii", "ContestSlug": "biweekly-contest-1", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 1", - "ContestID_zh": "\u7b2c 1 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 1 场双周赛" }, { "Rating": 1885.0178370385, "ID": 1326, "Title": "Minimum Number of Taps to Open to Water a Garden", - "TitleZH": "\u704c\u6e89\u82b1\u56ed\u7684\u6700\u5c11\u6c34\u9f99\u5934\u6570\u76ee", + "TitleZH": "灌溉花园的最少水龙头数目", "TitleSlug": "minimum-number-of-taps-to-open-to-water-a-garden", "ContestSlug": "weekly-contest-172", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 172", - "ContestID_zh": "\u7b2c 172 \u573a\u5468\u8d5b" + "ContestID_zh": "第 172 场周赛" }, { "Rating": 1883.3541964032, "ID": 2054, "Title": "Two Best Non-Overlapping Events", - "TitleZH": "\u4e24\u4e2a\u6700\u597d\u7684\u4e0d\u91cd\u53e0\u6d3b\u52a8", + "TitleZH": "两个最好的不重叠活动", "TitleSlug": "two-best-non-overlapping-events", "ContestSlug": "biweekly-contest-64", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 64 场双周赛" }, { "Rating": 1881.6810367589, "ID": 1255, "Title": "Maximum Score Words Formed by Letters", - "TitleZH": "\u5f97\u5206\u6700\u9ad8\u7684\u5355\u8bcd\u96c6\u5408", + "TitleZH": "得分最高的单词集合", "TitleSlug": "maximum-score-words-formed-by-letters", "ContestSlug": "weekly-contest-162", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 162", - "ContestID_zh": "\u7b2c 162 \u573a\u5468\u8d5b" + "ContestID_zh": "第 162 场周赛" }, { "Rating": 1880.7433591583, "ID": 858, "Title": "Mirror Reflection", - "TitleZH": "\u955c\u9762\u53cd\u5c04", + "TitleZH": "镜面反射", "TitleSlug": "mirror-reflection", "ContestSlug": "weekly-contest-90", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u5468\u8d5b" + "ContestID_zh": "第 90 场周赛" }, { "Rating": 1880.5909929633, "ID": 1536, "Title": "Minimum Swaps to Arrange a Binary Grid", - "TitleZH": "\u6392\u5e03\u4e8c\u8fdb\u5236\u7f51\u683c\u7684\u6700\u5c11\u4ea4\u6362\u6b21\u6570", + "TitleZH": "排布二进制网格的最少交换次数", "TitleSlug": "minimum-swaps-to-arrange-a-binary-grid", "ContestSlug": "weekly-contest-200", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 200", - "ContestID_zh": "\u7b2c 200 \u573a\u5468\u8d5b" + "ContestID_zh": "第 200 场周赛" }, { "Rating": 1880.4226853663, "ID": 1106, "Title": "Parsing A Boolean Expression", - "TitleZH": "\u89e3\u6790\u5e03\u5c14\u8868\u8fbe\u5f0f", + "TitleZH": "解析布尔表达式", "TitleSlug": "parsing-a-boolean-expression", "ContestSlug": "weekly-contest-143", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 143", - "ContestID_zh": "\u7b2c 143 \u573a\u5468\u8d5b" + "ContestID_zh": "第 143 场周赛" }, { "Rating": 1880.3261182293, "ID": 754, "Title": "Reach a Number", - "TitleZH": "\u5230\u8fbe\u7ec8\u70b9\u6570\u5b57", + "TitleZH": "到达终点数字", "TitleSlug": "reach-a-number", "ContestSlug": "weekly-contest-65", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u5468\u8d5b" + "ContestID_zh": "第 65 场周赛" }, { "Rating": 1880.0511044074, "ID": 2101, "Title": "Detonate the Maximum Bombs", - "TitleZH": "\u5f15\u7206\u6700\u591a\u7684\u70b8\u5f39", + "TitleZH": "引爆最多的炸弹", "TitleSlug": "detonate-the-maximum-bombs", "ContestSlug": "biweekly-contest-67", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 67 场双周赛" }, { "Rating": 1877.8983358307, "ID": 1234, "Title": "Replace the Substring for Balanced String", - "TitleZH": "\u66ff\u6362\u5b50\u4e32\u5f97\u5230\u5e73\u8861\u5b57\u7b26\u4e32", + "TitleZH": "替换子串得到平衡字符串", "TitleSlug": "replace-the-substring-for-balanced-string", "ContestSlug": "weekly-contest-159", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 159", - "ContestID_zh": "\u7b2c 159 \u573a\u5468\u8d5b" + "ContestID_zh": "第 159 场周赛" }, { "Rating": 1877.5624603804, "ID": 752, "Title": "Open the Lock", - "TitleZH": "\u6253\u5f00\u8f6c\u76d8\u9501", + "TitleZH": "打开转盘锁", "TitleSlug": "open-the-lock", "ContestSlug": "weekly-contest-64", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u5468\u8d5b" + "ContestID_zh": "第 64 场周赛" }, { "Rating": 1876.3854625677, "ID": 955, "Title": "Delete Columns to Make Sorted II", - "TitleZH": "\u5220\u5217\u9020\u5e8f II", + "TitleZH": "删列造序 II", "TitleSlug": "delete-columns-to-make-sorted-ii", "ContestSlug": "weekly-contest-114", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 114", - "ContestID_zh": "\u7b2c 114 \u573a\u5468\u8d5b" + "ContestID_zh": "第 114 场周赛" }, { "Rating": 1876.3611046625, "ID": 1838, "Title": "Frequency of the Most Frequent Element", - "TitleZH": "\u6700\u9ad8\u9891\u5143\u7d20\u7684\u9891\u6570", + "TitleZH": "最高频元素的频数", "TitleSlug": "frequency-of-the-most-frequent-element", "ContestSlug": "weekly-contest-238", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 238", - "ContestID_zh": "\u7b2c 238 \u573a\u5468\u8d5b" + "ContestID_zh": "第 238 场周赛" }, { "Rating": 1876.146019008, "ID": 1392, "Title": "Longest Happy Prefix", - "TitleZH": "\u6700\u957f\u5feb\u4e50\u524d\u7f00", + "TitleZH": "最长快乐前缀", "TitleSlug": "longest-happy-prefix", "ContestSlug": "weekly-contest-181", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 181", - "ContestID_zh": "\u7b2c 181 \u573a\u5468\u8d5b" + "ContestID_zh": "第 181 场周赛" }, { "Rating": 1874.6468976233, "ID": 1015, "Title": "Smallest Integer Divisible by K", - "TitleZH": "\u53ef\u88ab K \u6574\u9664\u7684\u6700\u5c0f\u6574\u6570", + "TitleZH": "可被 K 整除的最小整数", "TitleSlug": "smallest-integer-divisible-by-k", "ContestSlug": "weekly-contest-129", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 129", - "ContestID_zh": "\u7b2c 129 \u573a\u5468\u8d5b" + "ContestID_zh": "第 129 场周赛" }, { "Rating": 1873.0367582475, "ID": 1001, "Title": "Grid Illumination", - "TitleZH": "\u7f51\u683c\u7167\u660e", + "TitleZH": "网格照明", "TitleSlug": "grid-illumination", "ContestSlug": "weekly-contest-125", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 125", - "ContestID_zh": "\u7b2c 125 \u573a\u5468\u8d5b" + "ContestID_zh": "第 125 场周赛" }, { "Rating": 1872.0350138774, "ID": 1526, "Title": "Minimum Number of Increments on Subarrays to Form a Target Array", - "TitleZH": "\u5f62\u6210\u76ee\u6807\u6570\u7ec4\u7684\u5b50\u6570\u7ec4\u6700\u5c11\u589e\u52a0\u6b21\u6570", + "TitleZH": "形成目标数组的子数组最少增加次数", "TitleSlug": "minimum-number-of-increments-on-subarrays-to-form-a-target-array", "ContestSlug": "biweekly-contest-31", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 31", - "ContestID_zh": "\u7b2c 31 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 31 场双周赛" }, { "Rating": 1871.8245218615, "ID": 2008, "Title": "Maximum Earnings From Taxi", - "TitleZH": "\u51fa\u79df\u8f66\u7684\u6700\u5927\u76c8\u5229", + "TitleZH": "出租车的最大盈利", "TitleSlug": "maximum-earnings-from-taxi", "ContestSlug": "biweekly-contest-61", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 61", - "ContestID_zh": "\u7b2c 61 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 61 场双周赛" }, { "Rating": 1871.3112059413, "ID": 1589, "Title": "Maximum Sum Obtained of Any Permutation", - "TitleZH": "\u6240\u6709\u6392\u5217\u4e2d\u7684\u6700\u5927\u548c", + "TitleZH": "所有排列中的最大和", "TitleSlug": "maximum-sum-obtained-of-any-permutation", "ContestSlug": "biweekly-contest-35", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 35", - "ContestID_zh": "\u7b2c 35 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 35 场双周赛" }, { "Rating": 1869.402439128, "ID": 2002, "Title": "Maximum Product of the Length of Two Palindromic Subsequences", - "TitleZH": "\u4e24\u4e2a\u56de\u6587\u5b50\u5e8f\u5217\u957f\u5ea6\u7684\u6700\u5927\u4e58\u79ef", + "TitleZH": "两个回文子序列长度的最大乘积", "TitleSlug": "maximum-product-of-the-length-of-two-palindromic-subsequences", "ContestSlug": "weekly-contest-258", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 258", - "ContestID_zh": "\u7b2c 258 \u573a\u5468\u8d5b" + "ContestID_zh": "第 258 场周赛" }, { "Rating": 1868.9864493463, "ID": 2212, "Title": "Maximum Points in an Archery Competition", - "TitleZH": "\u5c04\u7bad\u6bd4\u8d5b\u4e2d\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "射箭比赛中的最大得分", "TitleSlug": "maximum-points-in-an-archery-competition", "ContestSlug": "weekly-contest-285", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 285", - "ContestID_zh": "\u7b2c 285 \u573a\u5468\u8d5b" + "ContestID_zh": "第 285 场周赛" }, { "Rating": 1868.9146755896, "ID": 924, "Title": "Minimize Malware Spread", - "TitleZH": "\u5c3d\u91cf\u51cf\u5c11\u6076\u610f\u8f6f\u4ef6\u7684\u4f20\u64ad", + "TitleZH": "尽量减少恶意软件的传播", "TitleSlug": "minimize-malware-spread", "ContestSlug": "weekly-contest-106", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 106", - "ContestID_zh": "\u7b2c 106 \u573a\u5468\u8d5b" + "ContestID_zh": "第 106 场周赛" }, { "Rating": 1868.1914861381, "ID": 1616, "Title": "Split Two Strings to Make Palindrome", - "TitleZH": "\u5206\u5272\u4e24\u4e2a\u5b57\u7b26\u4e32\u5f97\u5230\u56de\u6587\u4e32", + "TitleZH": "分割两个字符串得到回文串", "TitleSlug": "split-two-strings-to-make-palindrome", "ContestSlug": "weekly-contest-210", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 210", - "ContestID_zh": "\u7b2c 210 \u573a\u5468\u8d5b" + "ContestID_zh": "第 210 场周赛" }, { "Rating": 1867.9916069568, "ID": 1717, "Title": "Maximum Score From Removing Substrings", - "TitleZH": "\u5220\u9664\u5b50\u5b57\u7b26\u4e32\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "删除子字符串的最大得分", "TitleSlug": "maximum-score-from-removing-substrings", "ContestSlug": "biweekly-contest-43", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 43", - "ContestID_zh": "\u7b2c 43 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 43 场双周赛" }, { "Rating": 1867.8619694847, "ID": 1605, "Title": "Find Valid Matrix Given Row and Column Sums", - "TitleZH": "\u7ed9\u5b9a\u884c\u548c\u5217\u7684\u548c\u6c42\u53ef\u884c\u77e9\u9635", + "TitleZH": "给定行和列的和求可行矩阵", "TitleSlug": "find-valid-matrix-given-row-and-column-sums", "ContestSlug": "biweekly-contest-36", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 36", - "ContestID_zh": "\u7b2c 36 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 36 场双周赛" }, { "Rating": 1866.3014601125, "ID": 1340, "Title": "Jump Game V", - "TitleZH": "\u8df3\u8dc3\u6e38\u620f V", + "TitleZH": "跳跃游戏 V", "TitleSlug": "jump-game-v", "ContestSlug": "weekly-contest-174", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 174", - "ContestID_zh": "\u7b2c 174 \u573a\u5468\u8d5b" + "ContestID_zh": "第 174 场周赛" }, { "Rating": 1865.3441063734, "ID": 2039, "Title": "The Time When the Network Becomes Idle", - "TitleZH": "\u7f51\u7edc\u7a7a\u95f2\u7684\u65f6\u523b", + "TitleZH": "网络空闲的时刻", "TitleSlug": "the-time-when-the-network-becomes-idle", "ContestSlug": "biweekly-contest-63", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 63 场双周赛" }, { "Rating": 1864.0948676111, "ID": 1163, "Title": "Last Substring in Lexicographical Order", - "TitleZH": "\u6309\u5b57\u5178\u5e8f\u6392\u5728\u6700\u540e\u7684\u5b50\u4e32", + "TitleZH": "按字典序排在最后的子串", "TitleSlug": "last-substring-in-lexicographical-order", "ContestSlug": "weekly-contest-150", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 150", - "ContestID_zh": "\u7b2c 150 \u573a\u5468\u8d5b" + "ContestID_zh": "第 150 场周赛" }, { "Rating": 1861.4906863586, "ID": 1993, "Title": "Operations on Tree", - "TitleZH": "\u6811\u4e0a\u7684\u64cd\u4f5c", + "TitleZH": "树上的操作", "TitleSlug": "operations-on-tree", "ContestSlug": "biweekly-contest-60", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 60", - "ContestID_zh": "\u7b2c 60 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 60 场双周赛" }, { "Rating": 1860.742934291, "ID": 1996, "Title": "The Number of Weak Characters in the Game", - "TitleZH": "\u6e38\u620f\u4e2d\u5f31\u89d2\u8272\u7684\u6570\u91cf", + "TitleZH": "游戏中弱角色的数量", "TitleSlug": "the-number-of-weak-characters-in-the-game", "ContestSlug": "weekly-contest-257", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 257", - "ContestID_zh": "\u7b2c 257 \u573a\u5468\u8d5b" + "ContestID_zh": "第 257 场周赛" }, { "Rating": 1860.5166780235, "ID": 2301, "Title": "Match Substring After Replacement", - "TitleZH": "\u66ff\u6362\u5b57\u7b26\u540e\u5339\u914d", + "TitleZH": "替换字符后匹配", "TitleSlug": "match-substring-after-replacement", "ContestSlug": "biweekly-contest-80", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 80 场双周赛" }, { "Rating": 1858.9581916885, "ID": 1744, "Title": "Can You Eat Your Favorite Candy on Your Favorite Day?", - "TitleZH": "\u4f60\u80fd\u5728\u4f60\u6700\u559c\u6b22\u7684\u90a3\u5929\u5403\u5230\u4f60\u6700\u559c\u6b22\u7684\u7cd6\u679c\u5417\uff1f", + "TitleZH": "你能在你最喜欢的那天吃到你最喜欢的糖果吗?", "TitleSlug": "can-you-eat-your-favorite-candy-on-your-favorite-day", "ContestSlug": "weekly-contest-226", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 226", - "ContestID_zh": "\u7b2c 226 \u573a\u5468\u8d5b" + "ContestID_zh": "第 226 场周赛" }, { "Rating": 1857.6431822094, "ID": 1584, "Title": "Min Cost to Connect All Points", - "TitleZH": "\u8fde\u63a5\u6240\u6709\u70b9\u7684\u6700\u5c0f\u8d39\u7528", + "TitleZH": "连接所有点的最小费用", "TitleSlug": "min-cost-to-connect-all-points", "ContestSlug": "weekly-contest-206", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 206", - "ContestID_zh": "\u7b2c 206 \u573a\u5468\u8d5b" + "ContestID_zh": "第 206 场周赛" }, { "Rating": 1856.8610192187, "ID": 2266, "Title": "Count Number of Texts", - "TitleZH": "\u7edf\u8ba1\u6253\u5b57\u65b9\u6848\u6570", + "TitleZH": "统计打字方案数", "TitleSlug": "count-number-of-texts", "ContestSlug": "weekly-contest-292", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 292", - "ContestID_zh": "\u7b2c 292 \u573a\u5468\u8d5b" + "ContestID_zh": "第 292 场周赛" }, { "Rating": 1855.5957296285, "ID": 799, "Title": "Champagne Tower", - "TitleZH": "\u9999\u69df\u5854", + "TitleZH": "香槟塔", "TitleSlug": "champagne-tower", "ContestSlug": "weekly-contest-75", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u5468\u8d5b" + "ContestID_zh": "第 75 场周赛" }, { "Rating": 1855.4479039876, "ID": 1202, "Title": "Smallest String With Swaps", - "TitleZH": "\u4ea4\u6362\u5b57\u7b26\u4e32\u4e2d\u7684\u5143\u7d20", + "TitleZH": "交换字符串中的元素", "TitleSlug": "smallest-string-with-swaps", "ContestSlug": "weekly-contest-155", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 155", - "ContestID_zh": "\u7b2c 155 \u573a\u5468\u8d5b" + "ContestID_zh": "第 155 场周赛" }, { "Rating": 1855.377046154, "ID": 1546, "Title": "Maximum Number of Non-Overlapping Subarrays With Sum Equals Target", - "TitleZH": "\u548c\u4e3a\u76ee\u6807\u503c\u7684\u6700\u5927\u6570\u76ee\u4e0d\u91cd\u53e0\u975e\u7a7a\u5b50\u6570\u7ec4\u6570\u76ee", + "TitleZH": "和为目标值的最大数目不重叠非空子数组数目", "TitleSlug": "maximum-number-of-non-overlapping-subarrays-with-sum-equals-target", "ContestSlug": "weekly-contest-201", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 201", - "ContestID_zh": "\u7b2c 201 \u573a\u5468\u8d5b" + "ContestID_zh": "第 201 场周赛" }, { "Rating": 1854.9547783559, "ID": 1334, "Title": "Find the City With the Smallest Number of Neighbors at a Threshold Distance", - "TitleZH": "\u9608\u503c\u8ddd\u79bb\u5185\u90bb\u5c45\u6700\u5c11\u7684\u57ce\u5e02", + "TitleZH": "阈值距离内邻居最少的城市", "TitleSlug": "find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance", "ContestSlug": "weekly-contest-173", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 173", - "ContestID_zh": "\u7b2c 173 \u573a\u5468\u8d5b" + "ContestID_zh": "第 173 场周赛" }, { "Rating": 1854.0126399812, "ID": 1269, "Title": "Number of Ways to Stay in the Same Place After Some Steps", - "TitleZH": "\u505c\u5728\u539f\u5730\u7684\u65b9\u6848\u6570", + "TitleZH": "停在原地的方案数", "TitleSlug": "number-of-ways-to-stay-in-the-same-place-after-some-steps", "ContestSlug": "weekly-contest-164", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 164", - "ContestID_zh": "\u7b2c 164 \u573a\u5468\u8d5b" + "ContestID_zh": "第 164 场周赛" }, { "Rating": 1853.0880092558, "ID": 1301, "Title": "Number of Paths with Max Score", - "TitleZH": "\u6700\u5927\u5f97\u5206\u7684\u8def\u5f84\u6570\u76ee", + "TitleZH": "最大得分的路径数目", "TitleSlug": "number-of-paths-with-max-score", "ContestSlug": "biweekly-contest-16", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 16", - "ContestID_zh": "\u7b2c 16 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 16 场双周赛" }, { "Rating": 1851.7255023016, "ID": 2162, "Title": "Minimum Cost to Set Cooking Time", - "TitleZH": "\u8bbe\u7f6e\u65f6\u95f4\u7684\u6700\u5c11\u4ee3\u4ef7", + "TitleZH": "设置时间的最少代价", "TitleSlug": "minimum-cost-to-set-cooking-time", "ContestSlug": "biweekly-contest-71", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 71 场双周赛" }, { "Rating": 1850.8490524791, "ID": 1152, "Title": "Analyze User Website Visit Pattern", - "TitleZH": "\u7528\u6237\u7f51\u7ad9\u8bbf\u95ee\u884c\u4e3a\u5206\u6790", + "TitleZH": "用户网站访问行为分析", "TitleSlug": "analyze-user-website-visit-pattern", "ContestSlug": "biweekly-contest-6", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 6", - "ContestID_zh": "\u7b2c 6 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 6 场双周赛" }, { "Rating": 1850.5506342426, "ID": 1477, "Title": "Find Two Non-overlapping Sub-arrays Each With Target Sum", - "TitleZH": "\u627e\u4e24\u4e2a\u548c\u4e3a\u76ee\u6807\u503c\u4e14\u4e0d\u91cd\u53e0\u7684\u5b50\u6570\u7ec4", + "TitleZH": "找两个和为目标值且不重叠的子数组", "TitleSlug": "find-two-non-overlapping-sub-arrays-each-with-target-sum", "ContestSlug": "biweekly-contest-28", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 28", - "ContestID_zh": "\u7b2c 28 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 28 场双周赛" }, { "Rating": 1850.4091449367, "ID": 1775, "Title": "Equal Sum Arrays With Minimum Number of Operations", - "TitleZH": "\u901a\u8fc7\u6700\u5c11\u64cd\u4f5c\u6b21\u6570\u4f7f\u6570\u7ec4\u7684\u548c\u76f8\u7b49", + "TitleZH": "通过最少操作次数使数组的和相等", "TitleSlug": "equal-sum-arrays-with-minimum-number-of-operations", "ContestSlug": "weekly-contest-230", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 230", - "ContestID_zh": "\u7b2c 230 \u573a\u5468\u8d5b" + "ContestID_zh": "第 230 场周赛" }, { "Rating": 1849.8122180044, "ID": 2059, "Title": "Minimum Operations to Convert Number", - "TitleZH": "\u8f6c\u5316\u6570\u5b57\u7684\u6700\u5c0f\u8fd0\u7b97\u6570", + "TitleZH": "转化数字的最小运算数", "TitleSlug": "minimum-operations-to-convert-number", "ContestSlug": "weekly-contest-265", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 265", - "ContestID_zh": "\u7b2c 265 \u573a\u5468\u8d5b" + "ContestID_zh": "第 265 场周赛" }, { "Rating": 1848.0912848518, "ID": 1177, "Title": "Can Make Palindrome from Substring", - "TitleZH": "\u6784\u5efa\u56de\u6587\u4e32\u68c0\u6d4b", + "TitleZH": "构建回文串检测", "TitleSlug": "can-make-palindrome-from-substring", "ContestSlug": "weekly-contest-152", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 152", - "ContestID_zh": "\u7b2c 152 \u573a\u5468\u8d5b" + "ContestID_zh": "第 152 场周赛" }, { "Rating": 1847.2077654978, "ID": 1258, "Title": "Synonymous Sentences", - "TitleZH": "\u8fd1\u4e49\u8bcd\u53e5\u5b50", + "TitleZH": "近义词句子", "TitleSlug": "synonymous-sentences", "ContestSlug": "biweekly-contest-13", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 13", - "ContestID_zh": "\u7b2c 13 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 13 场双周赛" }, { "Rating": 1846.4077077642, "ID": 1514, "Title": "Path with Maximum Probability", - "TitleZH": "\u6982\u7387\u6700\u5927\u7684\u8def\u5f84", + "TitleZH": "概率最大的路径", "TitleSlug": "path-with-maximum-probability", "ContestSlug": "weekly-contest-197", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 197", - "ContestID_zh": "\u7b2c 197 \u573a\u5468\u8d5b" + "ContestID_zh": "第 197 场周赛" }, { "Rating": 1846.3568350016, "ID": 874, "Title": "Walking Robot Simulation", - "TitleZH": "\u6a21\u62df\u884c\u8d70\u673a\u5668\u4eba", + "TitleZH": "模拟行走机器人", "TitleSlug": "walking-robot-simulation", "ContestSlug": "weekly-contest-94", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 94", - "ContestID_zh": "\u7b2c 94 \u573a\u5468\u8d5b" + "ContestID_zh": "第 94 场周赛" }, { "Rating": 1845.0428731248, "ID": 1504, "Title": "Count Submatrices With All Ones", - "TitleZH": "\u7edf\u8ba1\u5168 1 \u5b50\u77e9\u5f62", + "TitleZH": "统计全 1 子矩形", "TitleSlug": "count-submatrices-with-all-ones", "ContestSlug": "weekly-contest-196", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 196", - "ContestID_zh": "\u7b2c 196 \u573a\u5468\u8d5b" + "ContestID_zh": "第 196 场周赛" }, { "Rating": 1844.6289439644, "ID": 1411, - "Title": "Number of Ways to Paint N \u00d7 3 Grid", - "TitleZH": "\u7ed9 N x 3 \u7f51\u683c\u56fe\u6d82\u8272\u7684\u65b9\u6848\u6570", + "Title": "Number of Ways to Paint N × 3 Grid", + "TitleZH": "给 N x 3 网格图涂色的方案数", "TitleSlug": "number-of-ways-to-paint-n-3-grid", "ContestSlug": "weekly-contest-184", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 184", - "ContestID_zh": "\u7b2c 184 \u573a\u5468\u8d5b" + "ContestID_zh": "第 184 场周赛" }, { "Rating": 1841.4067816266, "ID": 2013, "Title": "Detect Squares", - "TitleZH": "\u68c0\u6d4b\u6b63\u65b9\u5f62", + "TitleZH": "检测正方形", "TitleSlug": "detect-squares", "ContestSlug": "weekly-contest-259", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 259", - "ContestID_zh": "\u7b2c 259 \u573a\u5468\u8d5b" + "ContestID_zh": "第 259 场周赛" }, { "Rating": 1840.9122452886, "ID": 2332, "Title": "The Latest Time to Catch a Bus", - "TitleZH": "\u5750\u4e0a\u516c\u4ea4\u7684\u6700\u665a\u65f6\u95f4", + "TitleZH": "坐上公交的最晚时间", "TitleSlug": "the-latest-time-to-catch-a-bus", "ContestSlug": "biweekly-contest-82", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 82 场双周赛" }, { "Rating": 1839.9203623221, "ID": 2311, "Title": "Longest Binary Subsequence Less Than or Equal to K", - "TitleZH": "\u5c0f\u4e8e\u7b49\u4e8e K \u7684\u6700\u957f\u4e8c\u8fdb\u5236\u5b50\u5e8f\u5217", + "TitleZH": "小于等于 K 的最长二进制子序列", "TitleSlug": "longest-binary-subsequence-less-than-or-equal-to-k", "ContestSlug": "weekly-contest-298", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 298", - "ContestID_zh": "\u7b2c 298 \u573a\u5468\u8d5b" + "ContestID_zh": "第 298 场周赛" }, { "Rating": 1837.8252904904, "ID": 1559, "Title": "Detect Cycles in 2D Grid", - "TitleZH": "\u4e8c\u7ef4\u7f51\u683c\u56fe\u4e2d\u63a2\u6d4b\u73af", + "TitleZH": "二维网格图中探测环", "TitleSlug": "detect-cycles-in-2d-grid", "ContestSlug": "biweekly-contest-33", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 33", - "ContestID_zh": "\u7b2c 33 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 33 场双周赛" }, { "Rating": 1836.536348078, "ID": 1316, "Title": "Distinct Echo Substrings", - "TitleZH": "\u4e0d\u540c\u7684\u5faa\u73af\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "不同的循环子字符串", "TitleSlug": "distinct-echo-substrings", "ContestSlug": "biweekly-contest-17", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 17", - "ContestID_zh": "\u7b2c 17 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 17 场双周赛" }, { "Rating": 1836.5345744332, "ID": 2146, "Title": "K Highest Ranked Items Within a Price Range", - "TitleZH": "\u4ef7\u683c\u8303\u56f4\u5185\u6700\u9ad8\u6392\u540d\u7684 K \u6837\u7269\u54c1", + "TitleZH": "价格范围内最高排名的 K 样物品", "TitleSlug": "k-highest-ranked-items-within-a-price-range", "ContestSlug": "biweekly-contest-70", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 70 场双周赛" }, { "Rating": 1835.4868365659, "ID": 995, "Title": "Minimum Number of K Consecutive Bit Flips", - "TitleZH": "K \u8fde\u7eed\u4f4d\u7684\u6700\u5c0f\u7ffb\u8f6c\u6b21\u6570", + "TitleZH": "K 连续位的最小翻转次数", "TitleSlug": "minimum-number-of-k-consecutive-bit-flips", "ContestSlug": "weekly-contest-124", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 124", - "ContestID_zh": "\u7b2c 124 \u573a\u5468\u8d5b" + "ContestID_zh": "第 124 场周赛" }, { "Rating": 1834.868034709, "ID": 2370, "Title": "Longest Ideal Subsequence", - "TitleZH": "\u6700\u957f\u7406\u60f3\u5b50\u5e8f\u5217", + "TitleZH": "最长理想子序列", "TitleSlug": "longest-ideal-subsequence", "ContestSlug": "weekly-contest-305", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 305", - "ContestID_zh": "\u7b2c 305 \u573a\u5468\u8d5b" + "ContestID_zh": "第 305 场周赛" }, { "Rating": 1832.2280384591, "ID": 755, "Title": "Pour Water", - "TitleZH": "\u5012\u6c34", + "TitleZH": "倒水", "TitleSlug": "pour-water", "ContestSlug": "weekly-contest-65", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u5468\u8d5b" + "ContestID_zh": "第 65 场周赛" }, { "Rating": 1831.9395911303, "ID": 2034, "Title": "Stock Price Fluctuation ", - "TitleZH": "\u80a1\u7968\u4ef7\u683c\u6ce2\u52a8", + "TitleZH": "股票价格波动", "TitleSlug": "stock-price-fluctuation", "ContestSlug": "weekly-contest-262", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 262", - "ContestID_zh": "\u7b2c 262 \u573a\u5468\u8d5b" + "ContestID_zh": "第 262 场周赛" }, { "Rating": 1830.3165569278, "ID": 980, "Title": "Unique Paths III", - "TitleZH": "\u4e0d\u540c\u8def\u5f84 III", + "TitleZH": "不同路径 III", "TitleSlug": "unique-paths-iii", "ContestSlug": "weekly-contest-120", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 120", - "ContestID_zh": "\u7b2c 120 \u573a\u5468\u8d5b" + "ContestID_zh": "第 120 场周赛" }, { "Rating": 1830.1493771696, "ID": 790, "Title": "Domino and Tromino Tiling", - "TitleZH": "\u591a\u7c73\u8bfa\u548c\u6258\u7c73\u8bfa\u5e73\u94fa", + "TitleZH": "多米诺和托米诺平铺", "TitleSlug": "domino-and-tromino-tiling", "ContestSlug": "weekly-contest-73", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u5468\u8d5b" + "ContestID_zh": "第 73 场周赛" }, { "Rating": 1828.6438563573, "ID": 1754, "Title": "Largest Merge Of Two Strings", - "TitleZH": "\u6784\u9020\u5b57\u5178\u5e8f\u6700\u5927\u7684\u5408\u5e76\u5b57\u7b26\u4e32", + "TitleZH": "构造字典序最大的合并字符串", "TitleSlug": "largest-merge-of-two-strings", "ContestSlug": "weekly-contest-227", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 227", - "ContestID_zh": "\u7b2c 227 \u573a\u5468\u8d5b" + "ContestID_zh": "第 227 场周赛" }, { "Rating": 1828.2700238306, "ID": 2135, "Title": "Count Words Obtained After Adding a Letter", - "TitleZH": "\u7edf\u8ba1\u8ffd\u52a0\u5b57\u6bcd\u53ef\u4ee5\u83b7\u5f97\u7684\u5355\u8bcd\u6570", + "TitleZH": "统计追加字母可以获得的单词数", "TitleSlug": "count-words-obtained-after-adding-a-letter", "ContestSlug": "weekly-contest-275", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 275", - "ContestID_zh": "\u7b2c 275 \u573a\u5468\u8d5b" + "ContestID_zh": "第 275 场周赛" }, { "Rating": 1827.090740222, "ID": 1095, "Title": "Find in Mountain Array", - "TitleZH": "\u5c71\u8109\u6570\u7ec4\u4e2d\u67e5\u627e\u76ee\u6807\u503c", + "TitleZH": "山脉数组中查找目标值", "TitleSlug": "find-in-mountain-array", "ContestSlug": "weekly-contest-142", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 142", - "ContestID_zh": "\u7b2c 142 \u573a\u5468\u8d5b" + "ContestID_zh": "第 142 场周赛" }, { "Rating": 1825.770486008, "ID": 934, "Title": "Shortest Bridge", - "TitleZH": "\u6700\u77ed\u7684\u6865", + "TitleZH": "最短的桥", "TitleSlug": "shortest-bridge", "ContestSlug": "weekly-contest-109", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 109", - "ContestID_zh": "\u7b2c 109 \u573a\u5468\u8d5b" + "ContestID_zh": "第 109 场周赛" }, { "Rating": 1825.4207082682, "ID": 1702, "Title": "Maximum Binary String After Change", - "TitleZH": "\u4fee\u6539\u540e\u7684\u6700\u5927\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32", + "TitleZH": "修改后的最大二进制字符串", "TitleSlug": "maximum-binary-string-after-change", "ContestSlug": "biweekly-contest-42", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 42", - "ContestID_zh": "\u7b2c 42 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 42 场双周赛" }, { "Rating": 1825.0056908946, "ID": 1835, "Title": "Find XOR Sum of All Pairs Bitwise AND", - "TitleZH": "\u6240\u6709\u6570\u5bf9\u6309\u4f4d\u4e0e\u7ed3\u679c\u7684\u5f02\u6216\u548c", + "TitleZH": "所有数对按位与结果的异或和", "TitleSlug": "find-xor-sum-of-all-pairs-bitwise-and", "ContestSlug": "weekly-contest-237", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 237", - "ContestID_zh": "\u7b2c 237 \u573a\u5468\u8d5b" + "ContestID_zh": "第 237 场周赛" }, { "Rating": 1824.829446341, "ID": 1298, "Title": "Maximum Candies You Can Get from Boxes", - "TitleZH": "\u4f60\u80fd\u4ece\u76d2\u5b50\u91cc\u83b7\u5f97\u7684\u6700\u5927\u7cd6\u679c\u6570", + "TitleZH": "你能从盒子里获得的最大糖果数", "TitleSlug": "maximum-candies-you-can-get-from-boxes", "ContestSlug": "weekly-contest-168", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 168", - "ContestID_zh": "\u7b2c 168 \u573a\u5468\u8d5b" + "ContestID_zh": "第 168 场周赛" }, { "Rating": 1823.8779711373, "ID": 1377, "Title": "Frog Position After T Seconds", - "TitleZH": "T \u79d2\u540e\u9752\u86d9\u7684\u4f4d\u7f6e", + "TitleZH": "T 秒后青蛙的位置", "TitleSlug": "frog-position-after-t-seconds", "ContestSlug": "weekly-contest-179", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 179", - "ContestID_zh": "\u7b2c 179 \u573a\u5468\u8d5b" + "ContestID_zh": "第 179 场周赛" }, { "Rating": 1823.5831437787, "ID": 1458, "Title": "Max Dot Product of Two Subsequences", - "TitleZH": "\u4e24\u4e2a\u5b50\u5e8f\u5217\u7684\u6700\u5927\u70b9\u79ef", + "TitleZH": "两个子序列的最大点积", "TitleSlug": "max-dot-product-of-two-subsequences", "ContestSlug": "weekly-contest-190", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 190", - "ContestID_zh": "\u7b2c 190 \u573a\u5468\u8d5b" + "ContestID_zh": "第 190 场周赛" }, { "Rating": 1822.9768689716, "ID": 1363, "Title": "Largest Multiple of Three", - "TitleZH": "\u5f62\u6210\u4e09\u7684\u6700\u5927\u500d\u6570", + "TitleZH": "形成三的最大倍数", "TitleSlug": "largest-multiple-of-three", "ContestSlug": "weekly-contest-177", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 177", - "ContestID_zh": "\u7b2c 177 \u573a\u5468\u8d5b" + "ContestID_zh": "第 177 场周赛" }, { "Rating": 1822.1301265412, "ID": 2217, "Title": "Find Palindrome With Fixed Length", - "TitleZH": "\u627e\u5230\u6307\u5b9a\u957f\u5ea6\u7684\u56de\u6587\u6570", + "TitleZH": "找到指定长度的回文数", "TitleSlug": "find-palindrome-with-fixed-length", "ContestSlug": "weekly-contest-286", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 286", - "ContestID_zh": "\u7b2c 286 \u573a\u5468\u8d5b" + "ContestID_zh": "第 286 场周赛" }, { "Rating": 1820.58557644, "ID": 1405, "Title": "Longest Happy String", - "TitleZH": "\u6700\u957f\u5feb\u4e50\u5b57\u7b26\u4e32", + "TitleZH": "最长快乐字符串", "TitleSlug": "longest-happy-string", "ContestSlug": "weekly-contest-183", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 183", - "ContestID_zh": "\u7b2c 183 \u573a\u5468\u8d5b" + "ContestID_zh": "第 183 场周赛" }, { "Rating": 1819.3068421506, "ID": 2055, "Title": "Plates Between Candles", - "TitleZH": "\u8721\u70db\u4e4b\u95f4\u7684\u76d8\u5b50", + "TitleZH": "蜡烛之间的盘子", "TitleSlug": "plates-between-candles", "ContestSlug": "biweekly-contest-64", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 64 场双周赛" }, { "Rating": 1818.0024504436, "ID": 861, "Title": "Score After Flipping Matrix", - "TitleZH": "\u7ffb\u8f6c\u77e9\u9635\u540e\u7684\u5f97\u5206", + "TitleZH": "翻转矩阵后的得分", "TitleSlug": "score-after-flipping-matrix", "ContestSlug": "weekly-contest-91", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 91", - "ContestID_zh": "\u7b2c 91 \u573a\u5468\u8d5b" + "ContestID_zh": "第 91 场周赛" }, { "Rating": 1817.9978644712, "ID": 1792, "Title": "Maximum Average Pass Ratio", - "TitleZH": "\u6700\u5927\u5e73\u5747\u901a\u8fc7\u7387", + "TitleZH": "最大平均通过率", "TitleSlug": "maximum-average-pass-ratio", "ContestSlug": "weekly-contest-232", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 232", - "ContestID_zh": "\u7b2c 232 \u573a\u5468\u8d5b" + "ContestID_zh": "第 232 场周赛" }, { "Rating": 1817.224026292, "ID": 1658, "Title": "Minimum Operations to Reduce X to Zero", - "TitleZH": "\u5c06 x \u51cf\u5230 0 \u7684\u6700\u5c0f\u64cd\u4f5c\u6570", + "TitleZH": "将 x 减到 0 的最小操作数", "TitleSlug": "minimum-operations-to-reduce-x-to-zero", "ContestSlug": "weekly-contest-215", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 215", - "ContestID_zh": "\u7b2c 215 \u573a\u5468\u8d5b" + "ContestID_zh": "第 215 场周赛" }, { "Rating": 1817.0597073686, "ID": 795, "Title": "Number of Subarrays with Bounded Maximum", - "TitleZH": "\u533a\u95f4\u5b50\u6570\u7ec4\u4e2a\u6570", + "TitleZH": "区间子数组个数", "TitleSlug": "number-of-subarrays-with-bounded-maximum", "ContestSlug": "weekly-contest-74", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u5468\u8d5b" + "ContestID_zh": "第 74 场周赛" }, { "Rating": 1815.1286459024, "ID": 773, "Title": "Sliding Puzzle", - "TitleZH": "\u6ed1\u52a8\u8c1c\u9898", + "TitleZH": "滑动谜题", "TitleSlug": "sliding-puzzle", "ContestSlug": "weekly-contest-69", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u5468\u8d5b" + "ContestID_zh": "第 69 场周赛" }, { "Rating": 1810.7690062079, "ID": 1284, "Title": "Minimum Number of Flips to Convert Binary Matrix to Zero Matrix", - "TitleZH": "\u8f6c\u5316\u4e3a\u5168\u96f6\u77e9\u9635\u7684\u6700\u5c11\u53cd\u8f6c\u6b21\u6570", + "TitleZH": "转化为全零矩阵的最少反转次数", "TitleSlug": "minimum-number-of-flips-to-convert-binary-matrix-to-zero-matrix", "ContestSlug": "weekly-contest-166", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 166", - "ContestID_zh": "\u7b2c 166 \u573a\u5468\u8d5b" + "ContestID_zh": "第 166 场周赛" }, { "Rating": 1809.8192888474, "ID": 1345, "Title": "Jump Game IV", - "TitleZH": "\u8df3\u8dc3\u6e38\u620f IV", + "TitleZH": "跳跃游戏 IV", "TitleSlug": "jump-game-iv", "ContestSlug": "biweekly-contest-19", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 19", - "ContestID_zh": "\u7b2c 19 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 19 场双周赛" }, { "Rating": 1809.5579156134, "ID": 776, "Title": "Split BST", - "TitleZH": "\u62c6\u5206\u4e8c\u53c9\u641c\u7d22\u6811", + "TitleZH": "拆分二叉搜索树", "TitleSlug": "split-bst", "ContestSlug": "weekly-contest-70", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u5468\u8d5b" + "ContestID_zh": "第 70 场周赛" }, { "Rating": 1808.787108831, "ID": 1519, "Title": "Number of Nodes in the Sub-Tree With the Same Label", - "TitleZH": "\u5b50\u6811\u4e2d\u6807\u7b7e\u76f8\u540c\u7684\u8282\u70b9\u6570", + "TitleZH": "子树中标签相同的节点数", "TitleSlug": "number-of-nodes-in-the-sub-tree-with-the-same-label", "ContestSlug": "weekly-contest-198", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 198", - "ContestID_zh": "\u7b2c 198 \u573a\u5468\u8d5b" + "ContestID_zh": "第 198 场周赛" }, { "Rating": 1808.5754920785, "ID": 1230, "Title": "Toss Strange Coins", - "TitleZH": "\u629b\u63b7\u786c\u5e01", + "TitleZH": "抛掷硬币", "TitleSlug": "toss-strange-coins", "ContestSlug": "biweekly-contest-11", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 11", - "ContestID_zh": "\u7b2c 11 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 11 场双周赛" }, { "Rating": 1808.3407696613, "ID": 2302, "Title": "Count Subarrays With Score Less Than K", - "TitleZH": "\u7edf\u8ba1\u5f97\u5206\u5c0f\u4e8e K \u7684\u5b50\u6570\u7ec4\u6570\u76ee", + "TitleZH": "统计得分小于 K 的子数组数目", "TitleSlug": "count-subarrays-with-score-less-than-k", "ContestSlug": "biweekly-contest-80", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 80 场双周赛" }, { "Rating": 1807.4618172386, "ID": 1594, "Title": "Maximum Non Negative Product in a Matrix", - "TitleZH": "\u77e9\u9635\u7684\u6700\u5927\u975e\u8d1f\u79ef", + "TitleZH": "矩阵的最大非负积", "TitleSlug": "maximum-non-negative-product-in-a-matrix", "ContestSlug": "weekly-contest-207", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 207", - "ContestID_zh": "\u7b2c 207 \u573a\u5468\u8d5b" + "ContestID_zh": "第 207 场周赛" }, { "Rating": 1806.5891699944, "ID": 1073, "Title": "Adding Two Negabinary Numbers", - "TitleZH": "\u8d1f\u4e8c\u8fdb\u5236\u6570\u76f8\u52a0", + "TitleZH": "负二进制数相加", "TitleSlug": "adding-two-negabinary-numbers", "ContestSlug": "weekly-contest-139", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 139", - "ContestID_zh": "\u7b2c 139 \u573a\u5468\u8d5b" + "ContestID_zh": "第 139 场周赛" }, { "Rating": 1805.5947071171, "ID": 1035, "Title": "Uncrossed Lines", - "TitleZH": "\u4e0d\u76f8\u4ea4\u7684\u7ebf", + "TitleZH": "不相交的线", "TitleSlug": "uncrossed-lines", "ContestSlug": "weekly-contest-134", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 134", - "ContestID_zh": "\u7b2c 134 \u573a\u5468\u8d5b" + "ContestID_zh": "第 134 场周赛" }, { "Rating": 1804.5783242151, "ID": 1080, "Title": "Insufficient Nodes in Root to Leaf Paths", - "TitleZH": "\u6839\u5230\u53f6\u8def\u5f84\u4e0a\u7684\u4e0d\u8db3\u8282\u70b9", + "TitleZH": "根到叶路径上的不足节点", "TitleSlug": "insufficient-nodes-in-root-to-leaf-paths", "ContestSlug": "weekly-contest-140", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 140", - "ContestID_zh": "\u7b2c 140 \u573a\u5468\u8d5b" + "ContestID_zh": "第 140 场周赛" }, { "Rating": 1804.5283324227, "ID": 2096, "Title": "Step-By-Step Directions From a Binary Tree Node to Another", - "TitleZH": "\u4ece\u4e8c\u53c9\u6811\u4e00\u4e2a\u8282\u70b9\u5230\u53e6\u4e00\u4e2a\u8282\u70b9\u6bcf\u4e00\u6b65\u7684\u65b9\u5411", + "TitleZH": "从二叉树一个节点到另一个节点每一步的方向", "TitleSlug": "step-by-step-directions-from-a-binary-tree-node-to-another", "ContestSlug": "weekly-contest-270", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 270", - "ContestID_zh": "\u7b2c 270 \u573a\u5468\u8d5b" + "ContestID_zh": "第 270 场周赛" }, { "Rating": 1803.7518552874, "ID": 1953, "Title": "Maximum Number of Weeks for Which You Can Work", - "TitleZH": "\u4f60\u53ef\u4ee5\u5de5\u4f5c\u7684\u6700\u5927\u5468\u6570", + "TitleZH": "你可以工作的最大周数", "TitleSlug": "maximum-number-of-weeks-for-which-you-can-work", "ContestSlug": "weekly-contest-252", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 252", - "ContestID_zh": "\u7b2c 252 \u573a\u5468\u8d5b" + "ContestID_zh": "第 252 场周赛" }, { "Rating": 1802.2256875356, "ID": 1673, "Title": "Find the Most Competitive Subsequence", - "TitleZH": "\u627e\u51fa\u6700\u5177\u7ade\u4e89\u529b\u7684\u5b50\u5e8f\u5217", + "TitleZH": "找出最具竞争力的子序列", "TitleSlug": "find-the-most-competitive-subsequence", "ContestSlug": "weekly-contest-217", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 217", - "ContestID_zh": "\u7b2c 217 \u573a\u5468\u8d5b" + "ContestID_zh": "第 217 场周赛" }, { "Rating": 1799.4635458535, "ID": 1186, "Title": "Maximum Subarray Sum with One Deletion", - "TitleZH": "\u5220\u9664\u4e00\u6b21\u5f97\u5230\u5b50\u6570\u7ec4\u6700\u5927\u548c", + "TitleZH": "删除一次得到子数组最大和", "TitleSlug": "maximum-subarray-sum-with-one-deletion", "ContestSlug": "weekly-contest-153", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 153", - "ContestID_zh": "\u7b2c 153 \u573a\u5468\u8d5b" + "ContestID_zh": "第 153 场周赛" }, { "Rating": 1797.8728515982, "ID": 1711, "Title": "Count Good Meals", - "TitleZH": "\u5927\u9910\u8ba1\u6570", + "TitleZH": "大餐计数", "TitleSlug": "count-good-meals", "ContestSlug": "weekly-contest-222", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 222", - "ContestID_zh": "\u7b2c 222 \u573a\u5468\u8d5b" + "ContestID_zh": "第 222 场周赛" }, { "Rating": 1797.7466000366, "ID": 1834, "Title": "Single-Threaded CPU", - "TitleZH": "\u5355\u7ebf\u7a0b CPU", + "TitleZH": "单线程 CPU", "TitleSlug": "single-threaded-cpu", "ContestSlug": "weekly-contest-237", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 237", - "ContestID_zh": "\u7b2c 237 \u573a\u5468\u8d5b" + "ContestID_zh": "第 237 场周赛" }, { "Rating": 1797.5851607225, "ID": 1072, "Title": "Flip Columns For Maximum Number of Equal Rows", - "TitleZH": "\u6309\u5217\u7ffb\u8f6c\u5f97\u5230\u6700\u5927\u503c\u7b49\u884c\u6570", + "TitleZH": "按列翻转得到最大值等行数", "TitleSlug": "flip-columns-for-maximum-number-of-equal-rows", "ContestSlug": "weekly-contest-139", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 139", - "ContestID_zh": "\u7b2c 139 \u573a\u5468\u8d5b" + "ContestID_zh": "第 139 场周赛" }, { "Rating": 1797.4917663632, "ID": 1028, "Title": "Recover a Tree From Preorder Traversal", - "TitleZH": "\u4ece\u5148\u5e8f\u904d\u5386\u8fd8\u539f\u4e8c\u53c9\u6811", + "TitleZH": "从先序遍历还原二叉树", "TitleSlug": "recover-a-tree-from-preorder-traversal", "ContestSlug": "weekly-contest-132", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 132", - "ContestID_zh": "\u7b2c 132 \u573a\u5468\u8d5b" + "ContestID_zh": "第 132 场周赛" }, { "Rating": 1795.0422250815, "ID": 966, "Title": "Vowel Spellchecker", - "TitleZH": "\u5143\u97f3\u62fc\u5199\u68c0\u67e5\u5668", + "TitleZH": "元音拼写检查器", "TitleSlug": "vowel-spellchecker", "ContestSlug": "weekly-contest-117", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 117", - "ContestID_zh": "\u7b2c 117 \u573a\u5468\u8d5b" + "ContestID_zh": "第 117 场周赛" }, { "Rating": 1794.5827898448, "ID": 886, "Title": "Possible Bipartition", - "TitleZH": "\u53ef\u80fd\u7684\u4e8c\u5206\u6cd5", + "TitleZH": "可能的二分法", "TitleSlug": "possible-bipartition", "ContestSlug": "weekly-contest-97", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 97", - "ContestID_zh": "\u7b2c 97 \u573a\u5468\u8d5b" + "ContestID_zh": "第 97 场周赛" }, { "Rating": 1793.8027487553, "ID": 1653, "Title": "Minimum Deletions to Make String Balanced", - "TitleZH": "\u4f7f\u5b57\u7b26\u4e32\u5e73\u8861\u7684\u6700\u5c11\u5220\u9664\u6b21\u6570", + "TitleZH": "使字符串平衡的最少删除次数", "TitleSlug": "minimum-deletions-to-make-string-balanced", "ContestSlug": "biweekly-contest-39", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 39", - "ContestID_zh": "\u7b2c 39 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 39 场双周赛" }, { "Rating": 1793.3037316825, "ID": 2381, "Title": "Shifting Letters II", - "TitleZH": "\u5b57\u6bcd\u79fb\u4f4d II", + "TitleZH": "字母移位 II", "TitleSlug": "shifting-letters-ii", "ContestSlug": "biweekly-contest-85", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 85 场双周赛" }, { "Rating": 1792.076794537, "ID": 1245, "Title": "Tree Diameter", - "TitleZH": "\u6811\u7684\u76f4\u5f84", + "TitleZH": "树的直径", "TitleSlug": "tree-diameter", "ContestSlug": "biweekly-contest-12", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 12", - "ContestID_zh": "\u7b2c 12 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 12 场双周赛" }, { "Rating": 1790.5747006625, "ID": 2321, "Title": "Maximum Score Of Spliced Array", - "TitleZH": "\u62fc\u63a5\u6570\u7ec4\u7684\u6700\u5927\u5206\u6570", + "TitleZH": "拼接数组的最大分数", "TitleSlug": "maximum-score-of-spliced-array", "ContestSlug": "weekly-contest-299", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 299", - "ContestID_zh": "\u7b2c 299 \u573a\u5468\u8d5b" + "ContestID_zh": "第 299 场周赛" }, { "Rating": 1787.8550568757, "ID": 2192, "Title": "All Ancestors of a Node in a Directed Acyclic Graph", - "TitleZH": "\u6709\u5411\u65e0\u73af\u56fe\u4e2d\u4e00\u4e2a\u8282\u70b9\u7684\u6240\u6709\u7956\u5148", + "TitleZH": "有向无环图中一个节点的所有祖先", "TitleSlug": "all-ancestors-of-a-node-in-a-directed-acyclic-graph", "ContestSlug": "biweekly-contest-73", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 73 场双周赛" }, { "Rating": 1787.6346864268, "ID": 768, "Title": "Max Chunks To Make Sorted II", - "TitleZH": "\u6700\u591a\u80fd\u5b8c\u6210\u6392\u5e8f\u7684\u5757 II", + "TitleZH": "最多能完成排序的块 II", "TitleSlug": "max-chunks-to-make-sorted-ii", "ContestSlug": "weekly-contest-68", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u5468\u8d5b" + "ContestID_zh": "第 68 场周赛" }, { "Rating": 1787.4514432151, "ID": 1156, "Title": "Swap For Longest Repeated Character Substring", - "TitleZH": "\u5355\u5b57\u7b26\u91cd\u590d\u5b50\u4e32\u7684\u6700\u5927\u957f\u5ea6", + "TitleZH": "单字符重复子串的最大长度", "TitleSlug": "swap-for-longest-repeated-character-substring", "ContestSlug": "weekly-contest-149", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 149", - "ContestID_zh": "\u7b2c 149 \u573a\u5468\u8d5b" + "ContestID_zh": "第 149 场周赛" }, { "Rating": 1787.2310751136, "ID": 1497, "Title": "Check If Array Pairs Are Divisible by k", - "TitleZH": "\u68c0\u67e5\u6570\u7ec4\u5bf9\u662f\u5426\u53ef\u4ee5\u88ab k \u6574\u9664", + "TitleZH": "检查数组对是否可以被 k 整除", "TitleSlug": "check-if-array-pairs-are-divisible-by-k", "ContestSlug": "weekly-contest-195", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 195", - "ContestID_zh": "\u7b2c 195 \u573a\u5468\u8d5b" + "ContestID_zh": "第 195 场周赛" }, { "Rating": 1786.9268132617, "ID": 1510, "Title": "Stone Game IV", - "TitleZH": "\u77f3\u5b50\u6e38\u620f IV", + "TitleZH": "石子游戏 IV", "TitleSlug": "stone-game-iv", "ContestSlug": "biweekly-contest-30", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 30", - "ContestID_zh": "\u7b2c 30 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 30 场双周赛" }, { "Rating": 1786.688543054, "ID": 1312, "Title": "Minimum Insertion Steps to Make a String Palindrome", - "TitleZH": "\u8ba9\u5b57\u7b26\u4e32\u6210\u4e3a\u56de\u6587\u4e32\u7684\u6700\u5c11\u63d2\u5165\u6b21\u6570", + "TitleZH": "让字符串成为回文串的最少插入次数", "TitleSlug": "minimum-insertion-steps-to-make-a-string-palindrome", "ContestSlug": "weekly-contest-170", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 170", - "ContestID_zh": "\u7b2c 170 \u573a\u5468\u8d5b" + "ContestID_zh": "第 170 场周赛" }, { "Rating": 1786.5491561897, "ID": 971, "Title": "Flip Binary Tree To Match Preorder Traversal", - "TitleZH": "\u7ffb\u8f6c\u4e8c\u53c9\u6811\u4ee5\u5339\u914d\u5148\u5e8f\u904d\u5386", + "TitleZH": "翻转二叉树以匹配先序遍历", "TitleSlug": "flip-binary-tree-to-match-preorder-traversal", "ContestSlug": "weekly-contest-118", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 118", - "ContestID_zh": "\u7b2c 118 \u573a\u5468\u8d5b" + "ContestID_zh": "第 118 场周赛" }, { "Rating": 1786.4753467293, "ID": 787, "Title": "Cheapest Flights Within K Stops", - "TitleZH": "K \u7ad9\u4e2d\u8f6c\u5185\u6700\u4fbf\u5b9c\u7684\u822a\u73ed", + "TitleZH": "K 站中转内最便宜的航班", "TitleSlug": "cheapest-flights-within-k-stops", "ContestSlug": "weekly-contest-72", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u5468\u8d5b" + "ContestID_zh": "第 72 场周赛" }, { "Rating": 1786.3121598293, "ID": 983, "Title": "Minimum Cost For Tickets", - "TitleZH": "\u6700\u4f4e\u7968\u4ef7", + "TitleZH": "最低票价", "TitleSlug": "minimum-cost-for-tickets", "ContestSlug": "weekly-contest-121", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 121", - "ContestID_zh": "\u7b2c 121 \u573a\u5468\u8d5b" + "ContestID_zh": "第 121 场周赛" }, { "Rating": 1785.6872758693, "ID": 1911, "Title": "Maximum Alternating Subsequence Sum", - "TitleZH": "\u6700\u5927\u5b50\u5e8f\u5217\u4ea4\u66ff\u548c", + "TitleZH": "最大子序列交替和", "TitleSlug": "maximum-alternating-subsequence-sum", "ContestSlug": "biweekly-contest-55", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 55", - "ContestID_zh": "\u7b2c 55 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 55 场双周赛" }, { "Rating": 1784.2539813582, "ID": 894, "Title": "All Possible Full Binary Trees", - "TitleZH": "\u6240\u6709\u53ef\u80fd\u7684\u6ee1\u4e8c\u53c9\u6811", + "TitleZH": "所有可能的满二叉树", "TitleSlug": "all-possible-full-binary-trees", "ContestSlug": "weekly-contest-99", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 99", - "ContestID_zh": "\u7b2c 99 \u573a\u5468\u8d5b" + "ContestID_zh": "第 99 场周赛" }, { "Rating": 1783.2337340478, "ID": 851, "Title": "Loud and Rich", - "TitleZH": "\u55a7\u95f9\u548c\u5bcc\u6709", + "TitleZH": "喧闹和富有", "TitleSlug": "loud-and-rich", "ContestSlug": "weekly-contest-88", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u5468\u8d5b" + "ContestID_zh": "第 88 场周赛" }, { "Rating": 1782.9801784101, "ID": 1765, "Title": "Map of Highest Peak", - "TitleZH": "\u5730\u56fe\u4e2d\u7684\u6700\u9ad8\u70b9", + "TitleZH": "地图中的最高点", "TitleSlug": "map-of-highest-peak", "ContestSlug": "biweekly-contest-46", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 46", - "ContestID_zh": "\u7b2c 46 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 46 场双周赛" }, { "Rating": 1782.3312212058, "ID": 1171, "Title": "Remove Zero Sum Consecutive Nodes from Linked List", - "TitleZH": "\u4ece\u94fe\u8868\u4e2d\u5220\u53bb\u603b\u548c\u503c\u4e3a\u96f6\u7684\u8fde\u7eed\u8282\u70b9", + "TitleZH": "从链表中删去总和值为零的连续节点", "TitleSlug": "remove-zero-sum-consecutive-nodes-from-linked-list", "ContestSlug": "weekly-contest-151", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 151", - "ContestID_zh": "\u7b2c 151 \u573a\u5468\u8d5b" + "ContestID_zh": "第 151 场周赛" }, { "Rating": 1781.8156963676, "ID": 2353, "Title": "Design a Food Rating System", - "TitleZH": "\u8bbe\u8ba1\u98df\u7269\u8bc4\u5206\u7cfb\u7edf", + "TitleZH": "设计食物评分系统", "TitleSlug": "design-a-food-rating-system", "ContestSlug": "weekly-contest-303", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 303", - "ContestID_zh": "\u7b2c 303 \u573a\u5468\u8d5b" + "ContestID_zh": "第 303 场周赛" }, { "Rating": 1781.3664141686, "ID": 1895, "Title": "Largest Magic Square", - "TitleZH": "\u6700\u5927\u7684\u5e7b\u65b9", + "TitleZH": "最大的幻方", "TitleSlug": "largest-magic-square", "ContestSlug": "biweekly-contest-54", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 54", - "ContestID_zh": "\u7b2c 54 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 54 场双周赛" }, { "Rating": 1779.9495819318, "ID": 842, "Title": "Split Array into Fibonacci Sequence", - "TitleZH": "\u5c06\u6570\u7ec4\u62c6\u5206\u6210\u6590\u6ce2\u90a3\u5951\u5e8f\u5217", + "TitleZH": "将数组拆分成斐波那契序列", "TitleSlug": "split-array-into-fibonacci-sequence", "ContestSlug": "weekly-contest-86", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u5468\u8d5b" + "ContestID_zh": "第 86 场周赛" }, { "Rating": 1779.8364613072, "ID": 1424, "Title": "Diagonal Traverse II", - "TitleZH": "\u5bf9\u89d2\u7ebf\u904d\u5386 II", + "TitleZH": "对角线遍历 II", "TitleSlug": "diagonal-traverse-ii", "ContestSlug": "weekly-contest-186", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 186", - "ContestID_zh": "\u7b2c 186 \u573a\u5468\u8d5b" + "ContestID_zh": "第 186 场周赛" }, { "Rating": 1779.7534349429, "ID": 1129, "Title": "Shortest Path with Alternating Colors", - "TitleZH": "\u989c\u8272\u4ea4\u66ff\u7684\u6700\u77ed\u8def\u5f84", + "TitleZH": "颜色交替的最短路径", "TitleSlug": "shortest-path-with-alternating-colors", "ContestSlug": "weekly-contest-146", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 146", - "ContestID_zh": "\u7b2c 146 \u573a\u5468\u8d5b" + "ContestID_zh": "第 146 场周赛" }, { "Rating": 1779.7001728541, "ID": 2369, "Title": "Check if There is a Valid Partition For The Array", - "TitleZH": "\u68c0\u67e5\u6570\u7ec4\u662f\u5426\u5b58\u5728\u6709\u6548\u5212\u5206", + "TitleZH": "检查数组是否存在有效划分", "TitleSlug": "check-if-there-is-a-valid-partition-for-the-array", "ContestSlug": "weekly-contest-305", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 305", - "ContestID_zh": "\u7b2c 305 \u573a\u5468\u8d5b" + "ContestID_zh": "第 305 场周赛" }, { "Rating": 1779.3931248179, "ID": 1016, "Title": "Binary String With Substrings Representing 1 To N", - "TitleZH": "\u5b50\u4e32\u80fd\u8868\u793a\u4ece 1 \u5230 N \u6570\u5b57\u7684\u4e8c\u8fdb\u5236\u4e32", + "TitleZH": "子串能表示从 1 到 N 数字的二进制串", "TitleSlug": "binary-string-with-substrings-representing-1-to-n", "ContestSlug": "weekly-contest-129", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 129", - "ContestID_zh": "\u7b2c 129 \u573a\u5468\u8d5b" + "ContestID_zh": "第 129 场周赛" }, { "Rating": 1778.4880620629, "ID": 1824, "Title": "Minimum Sideway Jumps", - "TitleZH": "\u6700\u5c11\u4fa7\u8df3\u6b21\u6570", + "TitleZH": "最少侧跳次数", "TitleSlug": "minimum-sideway-jumps", "ContestSlug": "weekly-contest-236", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 236", - "ContestID_zh": "\u7b2c 236 \u573a\u5468\u8d5b" + "ContestID_zh": "第 236 场周赛" }, { "Rating": 1777.3786570233, "ID": 918, "Title": "Maximum Sum Circular Subarray", - "TitleZH": "\u73af\u5f62\u5b50\u6570\u7ec4\u7684\u6700\u5927\u548c", + "TitleZH": "环形子数组的最大和", "TitleSlug": "maximum-sum-circular-subarray", "ContestSlug": "weekly-contest-105", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 105", - "ContestID_zh": "\u7b2c 105 \u573a\u5468\u8d5b" + "ContestID_zh": "第 105 场周赛" }, { "Rating": 1774.8764591297, "ID": 1238, "Title": "Circular Permutation in Binary Representation", - "TitleZH": "\u5faa\u73af\u7801\u6392\u5217", + "TitleZH": "循环码排列", "TitleSlug": "circular-permutation-in-binary-representation", "ContestSlug": "weekly-contest-160", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 160", - "ContestID_zh": "\u7b2c 160 \u573a\u5468\u8d5b" + "ContestID_zh": "第 160 场周赛" }, { "Rating": 1770.8924569497, "ID": 1146, "Title": "Snapshot Array", - "TitleZH": "\u5feb\u7167\u6570\u7ec4", + "TitleZH": "快照数组", "TitleSlug": "snapshot-array", "ContestSlug": "weekly-contest-148", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 148", - "ContestID_zh": "\u7b2c 148 \u573a\u5468\u8d5b" + "ContestID_zh": "第 148 场周赛" }, { "Rating": 1768.623896829, "ID": 1600, "Title": "Throne Inheritance", - "TitleZH": "\u7687\u4f4d\u7ee7\u627f\u987a\u5e8f", + "TitleZH": "皇位继承顺序", "TitleSlug": "throne-inheritance", "ContestSlug": "weekly-contest-208", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 208", - "ContestID_zh": "\u7b2c 208 \u573a\u5468\u8d5b" + "ContestID_zh": "第 208 场周赛" }, { "Rating": 1766.2506177612, "ID": 1914, "Title": "Cyclically Rotating a Grid", - "TitleZH": "\u5faa\u73af\u8f6e\u8f6c\u77e9\u9635", + "TitleZH": "循环轮转矩阵", "TitleSlug": "cyclically-rotating-a-grid", "ContestSlug": "weekly-contest-247", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 247", - "ContestID_zh": "\u7b2c 247 \u573a\u5468\u8d5b" + "ContestID_zh": "第 247 场周赛" }, { "Rating": 1765.5654059263, "ID": 875, "Title": "Koko Eating Bananas", - "TitleZH": "\u7231\u5403\u9999\u8549\u7684\u73c2\u73c2", + "TitleZH": "爱吃香蕉的珂珂", "TitleSlug": "koko-eating-bananas", "ContestSlug": "weekly-contest-94", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 94", - "ContestID_zh": "\u7b2c 94 \u573a\u5468\u8d5b" + "ContestID_zh": "第 94 场周赛" }, { "Rating": 1764.9170564773, "ID": 1706, "Title": "Where Will the Ball Fall", - "TitleZH": "\u7403\u4f1a\u843d\u4f55\u5904", + "TitleZH": "球会落何处", "TitleSlug": "where-will-the-ball-fall", "ContestSlug": "weekly-contest-221", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 221", - "ContestID_zh": "\u7b2c 221 \u573a\u5468\u8d5b" + "ContestID_zh": "第 221 场周赛" + }, + { + "Rating": 1763.6404758359, + "ID": 2462, + "Title": "Total Cost to Hire K Workers", + "TitleZH": "雇佣 K 位工人的总代价", + "TitleSlug": "total-cost-to-hire-k-workers", + "ContestSlug": "weekly-contest-318", + "ProblemIndex": "Q3", + "ContestID_en": "Weekly Contest 318", + "ContestID_zh": "第 318 场周赛" }, { "Rating": 1763.6404758359, @@ -5954,2597 +5976,2608 @@ "Rating": 1762.3115124143, "ID": 948, "Title": "Bag of Tokens", - "TitleZH": "\u4ee4\u724c\u653e\u7f6e", + "TitleZH": "令牌放置", "TitleSlug": "bag-of-tokens", "ContestSlug": "weekly-contest-112", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 112", - "ContestID_zh": "\u7b2c 112 \u573a\u5468\u8d5b" + "ContestID_zh": "第 112 场周赛" }, { "Rating": 1762.0307532652, "ID": 1262, "Title": "Greatest Sum Divisible by Three", - "TitleZH": "\u53ef\u88ab\u4e09\u6574\u9664\u7684\u6700\u5927\u548c", + "TitleZH": "可被三整除的最大和", "TitleSlug": "greatest-sum-divisible-by-three", "ContestSlug": "weekly-contest-163", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 163", - "ContestID_zh": "\u7b2c 163 \u573a\u5468\u8d5b" + "ContestID_zh": "第 163 场周赛" }, { "Rating": 1761.9162628125, "ID": 2453, "Title": "Destroy Sequential Targets", - "TitleZH": "\u6467\u6bc1\u4e00\u7cfb\u5217\u76ee\u6807", + "TitleZH": "摧毁一系列目标", "TitleSlug": "destroy-sequential-targets", "ContestSlug": "biweekly-contest-90", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 90 场双周赛" }, { "Rating": 1760.9131492436, "ID": 2121, "Title": "Intervals Between Identical Elements", - "TitleZH": "\u76f8\u540c\u5143\u7d20\u7684\u95f4\u9694\u4e4b\u548c", + "TitleZH": "相同元素的间隔之和", "TitleSlug": "intervals-between-identical-elements", "ContestSlug": "weekly-contest-273", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 273", - "ContestID_zh": "\u7b2c 273 \u573a\u5468\u8d5b" + "ContestID_zh": "第 273 场周赛" }, { "Rating": 1759.2287478055, "ID": 2075, "Title": "Decode the Slanted Ciphertext", - "TitleZH": "\u89e3\u7801\u659c\u5411\u6362\u4f4d\u5bc6\u7801", + "TitleZH": "解码斜向换位密码", "TitleSlug": "decode-the-slanted-ciphertext", "ContestSlug": "weekly-contest-267", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 267", - "ContestID_zh": "\u7b2c 267 \u573a\u5468\u8d5b" + "ContestID_zh": "第 267 场周赛" }, { "Rating": 1759.0197295594, "ID": 1541, "Title": "Minimum Insertions to Balance a Parentheses String", - "TitleZH": "\u5e73\u8861\u62ec\u53f7\u5b57\u7b26\u4e32\u7684\u6700\u5c11\u63d2\u5165\u6b21\u6570", + "TitleZH": "平衡括号字符串的最少插入次数", "TitleSlug": "minimum-insertions-to-balance-a-parentheses-string", "ContestSlug": "biweekly-contest-32", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 32", - "ContestID_zh": "\u7b2c 32 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 32 场双周赛" }, { "Rating": 1758.75255141, "ID": 1027, "Title": "Longest Arithmetic Subsequence", - "TitleZH": "\u6700\u957f\u7b49\u5dee\u6570\u5217", + "TitleZH": "最长等差数列", "TitleSlug": "longest-arithmetic-subsequence", "ContestSlug": "weekly-contest-132", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 132", - "ContestID_zh": "\u7b2c 132 \u573a\u5468\u8d5b" + "ContestID_zh": "第 132 场周赛" }, { "Rating": 1758.5135073787, "ID": 1954, "Title": "Minimum Garden Perimeter to Collect Enough Apples", - "TitleZH": "\u6536\u96c6\u8db3\u591f\u82f9\u679c\u7684\u6700\u5c0f\u82b1\u56ed\u5468\u957f", + "TitleZH": "收集足够苹果的最小花园周长", "TitleSlug": "minimum-garden-perimeter-to-collect-enough-apples", "ContestSlug": "weekly-contest-252", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 252", - "ContestID_zh": "\u7b2c 252 \u573a\u5468\u8d5b" + "ContestID_zh": "第 252 场周赛" }, { "Rating": 1753.9062487685, "ID": 1216, "Title": "Valid Palindrome III", - "TitleZH": "\u9a8c\u8bc1\u56de\u6587\u5b57\u7b26\u4e32 III", + "TitleZH": "验证回文字符串 III", "TitleSlug": "valid-palindrome-iii", "ContestSlug": "biweekly-contest-10", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 10", - "ContestID_zh": "\u7b2c 10 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 10 场双周赛" }, { "Rating": 1753.4775753993, "ID": 764, "Title": "Largest Plus Sign", - "TitleZH": "\u6700\u5927\u52a0\u53f7\u6807\u5fd7", + "TitleZH": "最大加号标志", "TitleSlug": "largest-plus-sign", "ContestSlug": "weekly-contest-67", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u5468\u8d5b" + "ContestID_zh": "第 67 场周赛" }, { "Rating": 1752.9555725796, "ID": 1135, "Title": "Connecting Cities With Minimum Cost", - "TitleZH": "\u6700\u4f4e\u6210\u672c\u8054\u901a\u6240\u6709\u57ce\u5e02", + "TitleZH": "最低成本联通所有城市", "TitleSlug": "connecting-cities-with-minimum-cost", "ContestSlug": "biweekly-contest-5", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 5", - "ContestID_zh": "\u7b2c 5 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 5 场双周赛" }, { "Rating": 1752.2621077596, "ID": 939, "Title": "Minimum Area Rectangle", - "TitleZH": "\u6700\u5c0f\u9762\u79ef\u77e9\u5f62", + "TitleZH": "最小面积矩形", "TitleSlug": "minimum-area-rectangle", "ContestSlug": "weekly-contest-110", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 110", - "ContestID_zh": "\u7b2c 110 \u573a\u5468\u8d5b" + "ContestID_zh": "第 110 场周赛" }, { "Rating": 1751.5101577001, "ID": 2166, "Title": "Design Bitset", - "TitleZH": "\u8bbe\u8ba1\u4f4d\u96c6", + "TitleZH": "设计位集", "TitleSlug": "design-bitset", "ContestSlug": "weekly-contest-279", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 279", - "ContestID_zh": "\u7b2c 279 \u573a\u5468\u8d5b" + "ContestID_zh": "第 279 场周赛" }, { "Rating": 1751.115625465, "ID": 2400, "Title": "Number of Ways to Reach a Position After Exactly k Steps", - "TitleZH": "\u6070\u597d\u79fb\u52a8 k \u6b65\u5230\u8fbe\u67d0\u4e00\u4f4d\u7f6e\u7684\u65b9\u6cd5\u6570\u76ee", + "TitleZH": "恰好移动 k 步到达某一位置的方法数目", "TitleSlug": "number-of-ways-to-reach-a-position-after-exactly-k-steps", "ContestSlug": "weekly-contest-309", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 309", - "ContestID_zh": "\u7b2c 309 \u573a\u5468\u8d5b" + "ContestID_zh": "第 309 场周赛" }, { "Rating": 1749.5432375672, "ID": 2401, "Title": "Longest Nice Subarray", - "TitleZH": "\u6700\u957f\u4f18\u96c5\u5b50\u6570\u7ec4", + "TitleZH": "最长优雅子数组", "TitleSlug": "longest-nice-subarray", "ContestSlug": "weekly-contest-309", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 309", - "ContestID_zh": "\u7b2c 309 \u573a\u5468\u8d5b" + "ContestID_zh": "第 309 场周赛" }, { "Rating": 1749.4981778209, "ID": 1111, "Title": "Maximum Nesting Depth of Two Valid Parentheses Strings", - "TitleZH": "\u6709\u6548\u62ec\u53f7\u7684\u5d4c\u5957\u6df1\u5ea6", + "TitleZH": "有效括号的嵌套深度", "TitleSlug": "maximum-nesting-depth-of-two-valid-parentheses-strings", "ContestSlug": "weekly-contest-144", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 144", - "ContestID_zh": "\u7b2c 144 \u573a\u5468\u8d5b" + "ContestID_zh": "第 144 场周赛" }, { "Rating": 1748.4522689101, "ID": 2134, "Title": "Minimum Swaps to Group All 1's Together II", - "TitleZH": "\u6700\u5c11\u4ea4\u6362\u6b21\u6570\u6765\u7ec4\u5408\u6240\u6709\u7684 1 II", + "TitleZH": "最少交换次数来组合所有的 1 II", "TitleSlug": "minimum-swaps-to-group-all-1s-together-ii", "ContestSlug": "weekly-contest-275", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 275", - "ContestID_zh": "\u7b2c 275 \u573a\u5468\u8d5b" + "ContestID_zh": "第 275 场周赛" }, { "Rating": 1748.1523771585, "ID": 1297, "Title": "Maximum Number of Occurrences of a Substring", - "TitleZH": "\u5b50\u4e32\u7684\u6700\u5927\u51fa\u73b0\u6b21\u6570", + "TitleZH": "子串的最大出现次数", "TitleSlug": "maximum-number-of-occurrences-of-a-substring", "ContestSlug": "weekly-contest-168", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 168", - "ContestID_zh": "\u7b2c 168 \u573a\u5468\u8d5b" + "ContestID_zh": "第 168 场周赛" }, { "Rating": 1748.1339100823, "ID": 2171, "Title": "Removing Minimum Number of Magic Beans", - "TitleZH": "\u62ff\u51fa\u6700\u5c11\u6570\u76ee\u7684\u9b54\u6cd5\u8c46", + "TitleZH": "拿出最少数目的魔法豆", "TitleSlug": "removing-minimum-number-of-magic-beans", "ContestSlug": "weekly-contest-280", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 280", - "ContestID_zh": "\u7b2c 280 \u573a\u5468\u8d5b" + "ContestID_zh": "第 280 场周赛" }, { "Rating": 1747.6755111029, "ID": 1191, "Title": "K-Concatenation Maximum Sum", - "TitleZH": "K \u6b21\u4e32\u8054\u540e\u6700\u5927\u5b50\u6570\u7ec4\u4e4b\u548c", + "TitleZH": "K 次串联后最大子数组之和", "TitleSlug": "k-concatenation-maximum-sum", "ContestSlug": "weekly-contest-154", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 154", - "ContestID_zh": "\u7b2c 154 \u573a\u5468\u8d5b" + "ContestID_zh": "第 154 场周赛" }, { "Rating": 1746.8757919578, "ID": 1849, "Title": "Splitting a String Into Descending Consecutive Values", - "TitleZH": "\u5c06\u5b57\u7b26\u4e32\u62c6\u5206\u4e3a\u9012\u51cf\u7684\u8fde\u7eed\u503c", + "TitleZH": "将字符串拆分为递减的连续值", "TitleSlug": "splitting-a-string-into-descending-consecutive-values", "ContestSlug": "weekly-contest-239", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 239", - "ContestID_zh": "\u7b2c 239 \u573a\u5468\u8d5b" + "ContestID_zh": "第 239 场周赛" }, { "Rating": 1746.135917977, "ID": 1024, "Title": "Video Stitching", - "TitleZH": "\u89c6\u9891\u62fc\u63a5", + "TitleZH": "视频拼接", "TitleSlug": "video-stitching", "ContestSlug": "weekly-contest-131", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 131", - "ContestID_zh": "\u7b2c 131 \u573a\u5468\u8d5b" + "ContestID_zh": "第 131 场周赛" }, { "Rating": 1745.6580748712, "ID": 1530, "Title": "Number of Good Leaf Nodes Pairs", - "TitleZH": "\u597d\u53f6\u5b50\u8282\u70b9\u5bf9\u7684\u6570\u91cf", + "TitleZH": "好叶子节点对的数量", "TitleSlug": "number-of-good-leaf-nodes-pairs", "ContestSlug": "weekly-contest-199", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 199", - "ContestID_zh": "\u7b2c 199 \u573a\u5468\u8d5b" + "ContestID_zh": "第 199 场周赛" }, { "Rating": 1745.6490739887, "ID": 1391, "Title": "Check if There is a Valid Path in a Grid", - "TitleZH": "\u68c0\u67e5\u7f51\u683c\u4e2d\u662f\u5426\u5b58\u5728\u6709\u6548\u8def\u5f84", + "TitleZH": "检查网格中是否存在有效路径", "TitleSlug": "check-if-there-is-a-valid-path-in-a-grid", "ContestSlug": "weekly-contest-181", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 181", - "ContestID_zh": "\u7b2c 181 \u573a\u5468\u8d5b" + "ContestID_zh": "第 181 场周赛" }, { "Rating": 1744.7611048301, "ID": 1638, "Title": "Count Substrings That Differ by One Character", - "TitleZH": "\u7edf\u8ba1\u53ea\u5dee\u4e00\u4e2a\u5b57\u7b26\u7684\u5b50\u4e32\u6570\u76ee", + "TitleZH": "统计只差一个字符的子串数目", "TitleSlug": "count-substrings-that-differ-by-one-character", "ContestSlug": "biweekly-contest-38", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 38", - "ContestID_zh": "\u7b2c 38 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 38 场双周赛" }, { "Rating": 1744.0388789755, "ID": 1139, "Title": "Largest 1-Bordered Square", - "TitleZH": "\u6700\u5927\u7684\u4ee5 1 \u4e3a\u8fb9\u754c\u7684\u6b63\u65b9\u5f62", + "TitleZH": "最大的以 1 为边界的正方形", "TitleSlug": "largest-1-bordered-square", "ContestSlug": "weekly-contest-147", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 147", - "ContestID_zh": "\u7b2c 147 \u573a\u5468\u8d5b" + "ContestID_zh": "第 147 场周赛" }, { "Rating": 1743.731976554, "ID": 2087, "Title": "Minimum Cost Homecoming of a Robot in a Grid", - "TitleZH": "\u7f51\u683c\u56fe\u4e2d\u673a\u5668\u4eba\u56de\u5bb6\u7684\u6700\u5c0f\u4ee3\u4ef7", + "TitleZH": "网格图中机器人回家的最小代价", "TitleSlug": "minimum-cost-homecoming-of-a-robot-in-a-grid", "ContestSlug": "biweekly-contest-66", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 66 场双周赛" }, { "Rating": 1741.4527995252, "ID": 1145, "Title": "Binary Tree Coloring Game", - "TitleZH": "\u4e8c\u53c9\u6811\u7740\u8272\u6e38\u620f", + "TitleZH": "二叉树着色游戏", "TitleSlug": "binary-tree-coloring-game", "ContestSlug": "weekly-contest-148", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 148", - "ContestID_zh": "\u7b2c 148 \u573a\u5468\u8d5b" + "ContestID_zh": "第 148 场周赛" }, { "Rating": 1740.5014205942, "ID": 1079, "Title": "Letter Tile Possibilities", - "TitleZH": "\u6d3b\u5b57\u5370\u5237", + "TitleZH": "活字印刷", "TitleSlug": "letter-tile-possibilities", "ContestSlug": "weekly-contest-140", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 140", - "ContestID_zh": "\u7b2c 140 \u573a\u5468\u8d5b" + "ContestID_zh": "第 140 场周赛" }, { "Rating": 1739.5831401172, "ID": 1593, "Title": "Split a String Into the Max Number of Unique Substrings", - "TitleZH": "\u62c6\u5206\u5b57\u7b26\u4e32\u4f7f\u552f\u4e00\u5b50\u5b57\u7b26\u4e32\u7684\u6570\u76ee\u6700\u5927", + "TitleZH": "拆分字符串使唯一子字符串的数目最大", "TitleSlug": "split-a-string-into-the-max-number-of-unique-substrings", "ContestSlug": "weekly-contest-207", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 207", - "ContestID_zh": "\u7b2c 207 \u573a\u5468\u8d5b" + "ContestID_zh": "第 207 场周赛" }, { "Rating": 1737.8431142688, "ID": 1814, "Title": "Count Nice Pairs in an Array", - "TitleZH": "\u7edf\u8ba1\u4e00\u4e2a\u6570\u7ec4\u4e2d\u597d\u5bf9\u5b50\u7684\u6570\u76ee", + "TitleZH": "统计一个数组中好对子的数目", "TitleSlug": "count-nice-pairs-in-an-array", "ContestSlug": "biweekly-contest-49", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 49", - "ContestID_zh": "\u7b2c 49 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 49 场双周赛" }, { "Rating": 1734.8208369949, "ID": 1292, "Title": "Maximum Side Length of a Square with Sum Less than or Equal to Threshold", - "TitleZH": "\u5143\u7d20\u548c\u5c0f\u4e8e\u7b49\u4e8e\u9608\u503c\u7684\u6b63\u65b9\u5f62\u7684\u6700\u5927\u8fb9\u957f", + "TitleZH": "元素和小于等于阈值的正方形的最大边长", "TitleSlug": "maximum-side-length-of-a-square-with-sum-less-than-or-equal-to-threshold", "ContestSlug": "weekly-contest-167", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 167", - "ContestID_zh": "\u7b2c 167 \u573a\u5468\u8d5b" + "ContestID_zh": "第 167 场周赛" }, { "Rating": 1734.0550202798, "ID": 2048, "Title": "Next Greater Numerically Balanced Number", - "TitleZH": "\u4e0b\u4e00\u4e2a\u66f4\u5927\u7684\u6570\u503c\u5e73\u8861\u6570", + "TitleZH": "下一个更大的数值平衡数", "TitleSlug": "next-greater-numerically-balanced-number", "ContestSlug": "weekly-contest-264", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 264", - "ContestID_zh": "\u7b2c 264 \u573a\u5468\u8d5b" + "ContestID_zh": "第 264 场周赛" }, { "Rating": 1732.7813534239, "ID": 1273, "Title": "Delete Tree Nodes", - "TitleZH": "\u5220\u9664\u6811\u8282\u70b9", + "TitleZH": "删除树节点", "TitleSlug": "delete-tree-nodes", "ContestSlug": "biweekly-contest-14", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 14", - "ContestID_zh": "\u7b2c 14 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 14 场双周赛" }, { "Rating": 1731.5555445321, "ID": 889, "Title": "Construct Binary Tree from Preorder and Postorder Traversal", - "TitleZH": "\u6839\u636e\u524d\u5e8f\u548c\u540e\u5e8f\u904d\u5386\u6784\u9020\u4e8c\u53c9\u6811", + "TitleZH": "根据前序和后序遍历构造二叉树", "TitleSlug": "construct-binary-tree-from-preorder-and-postorder-traversal", "ContestSlug": "weekly-contest-98", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 98", - "ContestID_zh": "\u7b2c 98 \u573a\u5468\u8d5b" + "ContestID_zh": "第 98 场周赛" }, { "Rating": 1730.3052054913, "ID": 1014, "Title": "Best Sightseeing Pair", - "TitleZH": "\u6700\u4f73\u89c2\u5149\u7ec4\u5408", + "TitleZH": "最佳观光组合", "TitleSlug": "best-sightseeing-pair", "ContestSlug": "weekly-contest-129", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 129", - "ContestID_zh": "\u7b2c 129 \u573a\u5468\u8d5b" + "ContestID_zh": "第 129 场周赛" }, { "Rating": 1729.6074000215, "ID": 1220, "Title": "Count Vowels Permutation", - "TitleZH": "\u7edf\u8ba1\u5143\u97f3\u5b57\u6bcd\u5e8f\u5217\u7684\u6570\u76ee", + "TitleZH": "统计元音字母序列的数目", "TitleSlug": "count-vowels-permutation", "ContestSlug": "weekly-contest-157", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 157", - "ContestID_zh": "\u7b2c 157 \u573a\u5468\u8d5b" + "ContestID_zh": "第 157 场周赛" }, { "Rating": 1725.4481937307, "ID": 1011, "Title": "Capacity To Ship Packages Within D Days", - "TitleZH": "\u5728 D \u5929\u5185\u9001\u8fbe\u5305\u88f9\u7684\u80fd\u529b", + "TitleZH": "在 D 天内送达包裹的能力", "TitleSlug": "capacity-to-ship-packages-within-d-days", "ContestSlug": "weekly-contest-128", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 128", - "ContestID_zh": "\u7b2c 128 \u573a\u5468\u8d5b" + "ContestID_zh": "第 128 场周赛" }, { "Rating": 1725.1995150882, "ID": 2416, "Title": "Sum of Prefix Scores of Strings", - "TitleZH": "\u5b57\u7b26\u4e32\u7684\u524d\u7f00\u5206\u6570\u548c", + "TitleZH": "字符串的前缀分数和", "TitleSlug": "sum-of-prefix-scores-of-strings", "ContestSlug": "weekly-contest-311", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 311", - "ContestID_zh": "\u7b2c 311 \u573a\u5468\u8d5b" + "ContestID_zh": "第 311 场周赛" }, { "Rating": 1724.394164934, "ID": 2261, "Title": "K Divisible Elements Subarrays", - "TitleZH": "\u542b\u6700\u591a K \u4e2a\u53ef\u6574\u9664\u5143\u7d20\u7684\u5b50\u6570\u7ec4", + "TitleZH": "含最多 K 个可整除元素的子数组", "TitleSlug": "k-divisible-elements-subarrays", "ContestSlug": "weekly-contest-291", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 291", - "ContestID_zh": "\u7b2c 291 \u573a\u5468\u8d5b" + "ContestID_zh": "第 291 场周赛" }, { "Rating": 1724.1545485476, "ID": 2070, "Title": "Most Beautiful Item for Each Query", - "TitleZH": "\u6bcf\u4e00\u4e2a\u67e5\u8be2\u7684\u6700\u5927\u7f8e\u4e3d\u503c", + "TitleZH": "每一个查询的最大美丽值", "TitleSlug": "most-beautiful-item-for-each-query", "ContestSlug": "biweekly-contest-65", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 65 场双周赛" }, { "Rating": 1722.8129701098, "ID": 1359, "Title": "Count All Valid Pickup and Delivery Options", - "TitleZH": "\u6709\u6548\u7684\u5feb\u9012\u5e8f\u5217\u6570\u76ee", + "TitleZH": "有效的快递序列数目", "TitleSlug": "count-all-valid-pickup-and-delivery-options", "ContestSlug": "biweekly-contest-20", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 20", - "ContestID_zh": "\u7b2c 20 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 20 场双周赛" }, { "Rating": 1722.3088173214, "ID": 1197, "Title": "Minimum Knight Moves", - "TitleZH": "\u8fdb\u51fb\u7684\u9a91\u58eb", + "TitleZH": "进击的骑士", "TitleSlug": "minimum-knight-moves", "ContestSlug": "biweekly-contest-9", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 9", - "ContestID_zh": "\u7b2c 9 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 9 场双周赛" }, { "Rating": 1719.945199874, "ID": 1239, "Title": "Maximum Length of a Concatenated String with Unique Characters", - "TitleZH": "\u4e32\u8054\u5b57\u7b26\u4e32\u7684\u6700\u5927\u957f\u5ea6", + "TitleZH": "串联字符串的最大长度", "TitleSlug": "maximum-length-of-a-concatenated-string-with-unique-characters", "ContestSlug": "weekly-contest-160", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 160", - "ContestID_zh": "\u7b2c 160 \u573a\u5468\u8d5b" + "ContestID_zh": "第 160 场周赛" }, { "Rating": 1718.9772466681, "ID": 2017, "Title": "Grid Game", - "TitleZH": "\u7f51\u683c\u6e38\u620f", + "TitleZH": "网格游戏", "TitleSlug": "grid-game", "ContestSlug": "weekly-contest-260", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 260", - "ContestID_zh": "\u7b2c 260 \u573a\u5468\u8d5b" + "ContestID_zh": "第 260 场周赛" }, { "Rating": 1718.8256321624, "ID": 2397, "Title": "Maximum Rows Covered by Columns", - "TitleZH": "\u88ab\u5217\u8986\u76d6\u7684\u6700\u591a\u884c\u6570", + "TitleZH": "被列覆盖的最多行数", "TitleSlug": "maximum-rows-covered-by-columns", "ContestSlug": "biweekly-contest-86", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 86 场双周赛" }, { "Rating": 1716.9721777, "ID": 2202, "Title": "Maximize the Topmost Element After K Moves", - "TitleZH": "K \u6b21\u64cd\u4f5c\u540e\u6700\u5927\u5316\u9876\u7aef\u5143\u7d20", + "TitleZH": "K 次操作后最大化顶端元素", "TitleSlug": "maximize-the-topmost-element-after-k-moves", "ContestSlug": "weekly-contest-284", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 284", - "ContestID_zh": "\u7b2c 284 \u573a\u5468\u8d5b" + "ContestID_zh": "第 284 场周赛" }, { "Rating": 1714.992763701, "ID": 2359, "Title": "Find Closest Node to Given Two Nodes", - "TitleZH": "\u627e\u5230\u79bb\u7ed9\u5b9a\u4e24\u4e2a\u8282\u70b9\u6700\u8fd1\u7684\u8282\u70b9", + "TitleZH": "找到离给定两个节点最近的节点", "TitleSlug": "find-closest-node-to-given-two-nodes", "ContestSlug": "weekly-contest-304", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 304", - "ContestID_zh": "\u7b2c 304 \u573a\u5468\u8d5b" + "ContestID_zh": "第 304 场周赛" }, { "Rating": 1714.6960124182, "ID": 1781, "Title": "Sum of Beauty of All Substrings", - "TitleZH": "\u6240\u6709\u5b50\u5b57\u7b26\u4e32\u7f8e\u4e3d\u503c\u4e4b\u548c", + "TitleZH": "所有子字符串美丽值之和", "TitleSlug": "sum-of-beauty-of-all-substrings", "ContestSlug": "biweekly-contest-47", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 47", - "ContestID_zh": "\u7b2c 47 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 47 场双周赛" }, { "Rating": 1713.3954468582, "ID": 2406, "Title": "Divide Intervals Into Minimum Number of Groups", - "TitleZH": "\u5c06\u533a\u95f4\u5206\u4e3a\u6700\u5c11\u7ec4\u6570", + "TitleZH": "将区间分为最少组数", "TitleSlug": "divide-intervals-into-minimum-number-of-groups", "ContestSlug": "weekly-contest-310", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 310", - "ContestID_zh": "\u7b2c 310 \u573a\u5468\u8d5b" + "ContestID_zh": "第 310 场周赛" }, { "Rating": 1713.2768268466, "ID": 1372, "Title": "Longest ZigZag Path in a Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u4e2d\u7684\u6700\u957f\u4ea4\u9519\u8def\u5f84", + "TitleZH": "二叉树中的最长交错路径", "TitleSlug": "longest-zigzag-path-in-a-binary-tree", "ContestSlug": "biweekly-contest-21", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 21", - "ContestID_zh": "\u7b2c 21 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 21 场双周赛" }, { "Rating": 1712.4010133221, "ID": 1042, "Title": "Flower Planting With No Adjacent", - "TitleZH": "\u4e0d\u90bb\u63a5\u690d\u82b1", + "TitleZH": "不邻接植花", "TitleSlug": "flower-planting-with-no-adjacent", "ContestSlug": "weekly-contest-136", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 136", - "ContestID_zh": "\u7b2c 136 \u573a\u5468\u8d5b" + "ContestID_zh": "第 136 场周赛" }, { "Rating": 1711.4873176824, "ID": 2385, "Title": "Amount of Time for Binary Tree to Be Infected", - "TitleZH": "\u611f\u67d3\u4e8c\u53c9\u6811\u9700\u8981\u7684\u603b\u65f6\u95f4", + "TitleZH": "感染二叉树需要的总时间", "TitleSlug": "amount-of-time-for-binary-tree-to-be-infected", "ContestSlug": "weekly-contest-307", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 307", - "ContestID_zh": "\u7b2c 307 \u573a\u5468\u8d5b" + "ContestID_zh": "第 307 场周赛" }, { "Rating": 1711.1205064321, "ID": 1801, "Title": "Number of Orders in the Backlog", - "TitleZH": "\u79ef\u538b\u8ba2\u5355\u4e2d\u7684\u8ba2\u5355\u603b\u6570", + "TitleZH": "积压订单中的订单总数", "TitleSlug": "number-of-orders-in-the-backlog", "ContestSlug": "weekly-contest-233", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 233", - "ContestID_zh": "\u7b2c 233 \u573a\u5468\u8d5b" + "ContestID_zh": "第 233 场周赛" }, { "Rating": 1710.9105378431, "ID": 923, "Title": "3Sum With Multiplicity", - "TitleZH": "\u4e09\u6570\u4e4b\u548c\u7684\u591a\u79cd\u53ef\u80fd", + "TitleZH": "三数之和的多种可能", "TitleSlug": "3sum-with-multiplicity", "ContestSlug": "weekly-contest-106", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 106", - "ContestID_zh": "\u7b2c 106 \u573a\u5468\u8d5b" + "ContestID_zh": "第 106 场周赛" }, { "Rating": 1710.3243520032, "ID": 1567, "Title": "Maximum Length of Subarray With Positive Product", - "TitleZH": "\u4e58\u79ef\u4e3a\u6b63\u6570\u7684\u6700\u957f\u5b50\u6570\u7ec4\u957f\u5ea6", + "TitleZH": "乘积为正数的最长子数组长度", "TitleSlug": "maximum-length-of-subarray-with-positive-product", "ContestSlug": "weekly-contest-204", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 204", - "ContestID_zh": "\u7b2c 204 \u573a\u5468\u8d5b" + "ContestID_zh": "第 204 场周赛" }, { "Rating": 1710.1120861153, "ID": 759, "Title": "Employee Free Time", - "TitleZH": "\u5458\u5de5\u7a7a\u95f2\u65f6\u95f4", + "TitleZH": "员工空闲时间", "TitleSlug": "employee-free-time", "ContestSlug": "weekly-contest-66", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u5468\u8d5b" + "ContestID_zh": "第 66 场周赛" }, { "Rating": 1710.0787625377, "ID": 1136, "Title": "Parallel Courses", - "TitleZH": "\u5e73\u884c\u8bfe\u7a0b", + "TitleZH": "平行课程", "TitleSlug": "parallel-courses", "ContestSlug": "biweekly-contest-5", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 5", - "ContestID_zh": "\u7b2c 5 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 5 场双周赛" }, { "Rating": 1709.1461451873, "ID": 979, "Title": "Distribute Coins in Binary Tree", - "TitleZH": "\u5728\u4e8c\u53c9\u6811\u4e2d\u5206\u914d\u786c\u5e01", + "TitleZH": "在二叉树中分配硬币", "TitleSlug": "distribute-coins-in-binary-tree", "ContestSlug": "weekly-contest-120", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 120", - "ContestID_zh": "\u7b2c 120 \u573a\u5468\u8d5b" + "ContestID_zh": "第 120 场周赛" }, { "Rating": 1709.1054732427, "ID": 2140, "Title": "Solving Questions With Brainpower", - "TitleZH": "\u89e3\u51b3\u667a\u529b\u95ee\u9898", + "TitleZH": "解决智力问题", "TitleSlug": "solving-questions-with-brainpower", "ContestSlug": "weekly-contest-276", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 276", - "ContestID_zh": "\u7b2c 276 \u573a\u5468\u8d5b" + "ContestID_zh": "第 276 场周赛" }, { "Rating": 1708.9983361411, "ID": 1401, "Title": "Circle and Rectangle Overlapping", - "TitleZH": "\u5706\u548c\u77e9\u5f62\u662f\u5426\u6709\u91cd\u53e0", + "TitleZH": "圆和矩形是否有重叠", "TitleSlug": "circle-and-rectangle-overlapping", "ContestSlug": "biweekly-contest-23", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 23", - "ContestID_zh": "\u7b2c 23 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 23 场双周赛" }, { "Rating": 1708.8735585776, "ID": 901, "Title": "Online Stock Span", - "TitleZH": "\u80a1\u7968\u4ef7\u683c\u8de8\u5ea6", + "TitleZH": "股票价格跨度", "TitleSlug": "online-stock-span", "ContestSlug": "weekly-contest-101", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 101", - "ContestID_zh": "\u7b2c 101 \u573a\u5468\u8d5b" + "ContestID_zh": "第 101 场周赛" }, { "Rating": 1708.812923679, "ID": 826, "Title": "Most Profit Assigning Work", - "TitleZH": "\u5b89\u6392\u5de5\u4f5c\u4ee5\u8fbe\u5230\u6700\u5927\u6536\u76ca", + "TitleZH": "安排工作以达到最大收益", "TitleSlug": "most-profit-assigning-work", "ContestSlug": "weekly-contest-82", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u5468\u8d5b" + "ContestID_zh": "第 82 场周赛" }, { "Rating": 1708.7056764058, "ID": 2257, "Title": "Count Unguarded Cells in the Grid", - "TitleZH": "\u7edf\u8ba1\u7f51\u683c\u56fe\u4e2d\u6ca1\u6709\u88ab\u4fdd\u536b\u7684\u683c\u5b50\u6570", + "TitleZH": "统计网格图中没有被保卫的格子数", "TitleSlug": "count-unguarded-cells-in-the-grid", "ContestSlug": "biweekly-contest-77", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 77 场双周赛" }, { "Rating": 1707.8992927609, "ID": 816, "Title": "Ambiguous Coordinates", - "TitleZH": "\u6a21\u7cca\u5750\u6807", + "TitleZH": "模糊坐标", "TitleSlug": "ambiguous-coordinates", "ContestSlug": "weekly-contest-80", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u5468\u8d5b" + "ContestID_zh": "第 80 场周赛" }, { "Rating": 1704.360891641, "ID": 1947, "Title": "Maximum Compatibility Score Sum", - "TitleZH": "\u6700\u5927\u517c\u5bb9\u6027\u8bc4\u5206\u548c", + "TitleZH": "最大兼容性评分和", "TitleSlug": "maximum-compatibility-score-sum", "ContestSlug": "weekly-contest-251", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 251", - "ContestID_zh": "\u7b2c 251 \u573a\u5468\u8d5b" + "ContestID_zh": "第 251 场周赛" }, { "Rating": 1702.8035923458, "ID": 958, "Title": "Check Completeness of a Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u7684\u5b8c\u5168\u6027\u68c0\u9a8c", + "TitleZH": "二叉树的完全性检验", "TitleSlug": "check-completeness-of-a-binary-tree", "ContestSlug": "weekly-contest-115", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 115", - "ContestID_zh": "\u7b2c 115 \u573a\u5468\u8d5b" + "ContestID_zh": "第 115 场周赛" }, { "Rating": 1702.4962514406, "ID": 2100, "Title": "Find Good Days to Rob the Bank", - "TitleZH": "\u9002\u5408\u6253\u52ab\u94f6\u884c\u7684\u65e5\u5b50", + "TitleZH": "适合打劫银行的日子", "TitleSlug": "find-good-days-to-rob-the-bank", "ContestSlug": "biweekly-contest-67", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 67 场双周赛" }, { "Rating": 1702.4387527636, "ID": 2080, "Title": "Range Frequency Queries", - "TitleZH": "\u533a\u95f4\u5185\u67e5\u8be2\u6570\u5b57\u7684\u9891\u7387", + "TitleZH": "区间内查询数字的频率", "TitleSlug": "range-frequency-queries", "ContestSlug": "weekly-contest-268", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 268", - "ContestID_zh": "\u7b2c 268 \u573a\u5468\u8d5b" + "ContestID_zh": "第 268 场周赛" }, { "Rating": 1701.7584658834, "ID": 1774, "Title": "Closest Dessert Cost", - "TitleZH": "\u6700\u63a5\u8fd1\u76ee\u6807\u4ef7\u683c\u7684\u751c\u70b9\u6210\u672c", + "TitleZH": "最接近目标价格的甜点成本", "TitleSlug": "closest-dessert-cost", "ContestSlug": "weekly-contest-230", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 230", - "ContestID_zh": "\u7b2c 230 \u573a\u5468\u8d5b" + "ContestID_zh": "第 230 场周赛" }, { "Rating": 1701.5735371897, "ID": 1054, "Title": "Distant Barcodes", - "TitleZH": "\u8ddd\u79bb\u76f8\u7b49\u7684\u6761\u5f62\u7801", + "TitleZH": "距离相等的条形码", "TitleSlug": "distant-barcodes", "ContestSlug": "weekly-contest-138", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 138", - "ContestID_zh": "\u7b2c 138 \u573a\u5468\u8d5b" + "ContestID_zh": "第 138 场周赛" }, { "Rating": 1697.8500495479, "ID": 1017, "Title": "Convert to Base -2", - "TitleZH": "\u8d1f\u4e8c\u8fdb\u5236\u8f6c\u6362", + "TitleZH": "负二进制转换", "TitleSlug": "convert-to-base-2", "ContestSlug": "weekly-contest-130", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 130", - "ContestID_zh": "\u7b2c 130 \u573a\u5468\u8d5b" + "ContestID_zh": "第 130 场周赛" }, { "Rating": 1697.2356875149, "ID": 1289, "Title": "Minimum Falling Path Sum II", - "TitleZH": "\u4e0b\u964d\u8def\u5f84\u6700\u5c0f\u548c II", + "TitleZH": "下降路径最小和 II", "TitleSlug": "minimum-falling-path-sum-ii", "ContestSlug": "biweekly-contest-15", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 15", - "ContestID_zh": "\u7b2c 15 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 15 场双周赛" }, { "Rating": 1697.0187705319, "ID": 825, "Title": "Friends Of Appropriate Ages", - "TitleZH": "\u9002\u9f84\u7684\u670b\u53cb", + "TitleZH": "适龄的朋友", "TitleSlug": "friends-of-appropriate-ages", "ContestSlug": "weekly-contest-82", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u5468\u8d5b" + "ContestID_zh": "第 82 场周赛" }, { "Rating": 1696.9920075471, "ID": 1487, "Title": "Making File Names Unique", - "TitleZH": "\u4fdd\u8bc1\u6587\u4ef6\u540d\u552f\u4e00", + "TitleZH": "保证文件名唯一", "TitleSlug": "making-file-names-unique", "ContestSlug": "weekly-contest-194", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 194", - "ContestID_zh": "\u7b2c 194 \u573a\u5468\u8d5b" + "ContestID_zh": "第 194 场周赛" }, { "Rating": 1695.3076664977, "ID": 792, "Title": "Number of Matching Subsequences", - "TitleZH": "\u5339\u914d\u5b50\u5e8f\u5217\u7684\u5355\u8bcd\u6570", + "TitleZH": "匹配子序列的单词数", "TitleSlug": "number-of-matching-subsequences", "ContestSlug": "weekly-contest-74", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u5468\u8d5b" + "ContestID_zh": "第 74 场周赛" }, { "Rating": 1695.2832486322, "ID": 1942, "Title": "The Number of the Smallest Unoccupied Chair", - "TitleZH": "\u6700\u5c0f\u672a\u88ab\u5360\u636e\u6905\u5b50\u7684\u7f16\u53f7", + "TitleZH": "最小未被占据椅子的编号", "TitleSlug": "the-number-of-the-smallest-unoccupied-chair", "ContestSlug": "biweekly-contest-57", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 57", - "ContestID_zh": "\u7b2c 57 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 57 场双周赛" }, { "Rating": 1695.0815222626, "ID": 2420, "Title": "Find All Good Indices", - "TitleZH": "\u627e\u5230\u6240\u6709\u597d\u4e0b\u6807", + "TitleZH": "找到所有好下标", "TitleSlug": "find-all-good-indices", "ContestSlug": "weekly-contest-312", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 312", - "ContestID_zh": "\u7b2c 312 \u573a\u5468\u8d5b" + "ContestID_zh": "第 312 场周赛" }, { "Rating": 1694.433951503, "ID": 829, "Title": "Consecutive Numbers Sum", - "TitleZH": "\u8fde\u7eed\u6574\u6570\u6c42\u548c", + "TitleZH": "连续整数求和", "TitleSlug": "consecutive-numbers-sum", "ContestSlug": "weekly-contest-83", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u5468\u8d5b" + "ContestID_zh": "第 83 场周赛" }, { "Rating": 1693.4495728383, "ID": 2337, "Title": "Move Pieces to Obtain a String", - "TitleZH": "\u79fb\u52a8\u7247\u6bb5\u5f97\u5230\u5b57\u7b26\u4e32", + "TitleZH": "移动片段得到字符串", "TitleSlug": "move-pieces-to-obtain-a-string", "ContestSlug": "weekly-contest-301", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 301", - "ContestID_zh": "\u7b2c 301 \u573a\u5468\u8d5b" + "ContestID_zh": "第 301 场周赛" }, { "Rating": 1692.5884631801, "ID": 1462, "Title": "Course Schedule IV", - "TitleZH": "\u8bfe\u7a0b\u8868 IV", + "TitleZH": "课程表 IV", "TitleSlug": "course-schedule-iv", "ContestSlug": "biweekly-contest-27", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 27", - "ContestID_zh": "\u7b2c 27 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 27 场双周赛" }, { "Rating": 1690.9043557462, "ID": 919, "Title": "Complete Binary Tree Inserter", - "TitleZH": "\u5b8c\u5168\u4e8c\u53c9\u6811\u63d2\u5165\u5668", + "TitleZH": "完全二叉树插入器", "TitleSlug": "complete-binary-tree-inserter", "ContestSlug": "weekly-contest-105", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 105", - "ContestID_zh": "\u7b2c 105 \u573a\u5468\u8d5b" + "ContestID_zh": "第 105 场周赛" }, { "Rating": 1690.1655236843, "ID": 935, "Title": "Knight Dialer", - "TitleZH": "\u9a91\u58eb\u62e8\u53f7\u5668", + "TitleZH": "骑士拨号器", "TitleSlug": "knight-dialer", "ContestSlug": "weekly-contest-109", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 109", - "ContestID_zh": "\u7b2c 109 \u573a\u5468\u8d5b" + "ContestID_zh": "第 109 场周赛" }, { "Rating": 1689.7569144085, "ID": 1419, "Title": "Minimum Number of Frogs Croaking", - "TitleZH": "\u6570\u9752\u86d9", + "TitleZH": "数青蛙", "TitleSlug": "minimum-number-of-frogs-croaking", "ContestSlug": "weekly-contest-185", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 185", - "ContestID_zh": "\u7b2c 185 \u573a\u5468\u8d5b" + "ContestID_zh": "第 185 场周赛" }, { "Rating": 1688.9209684568, "ID": 1963, "Title": "Minimum Number of Swaps to Make the String Balanced", - "TitleZH": "\u4f7f\u5b57\u7b26\u4e32\u5e73\u8861\u7684\u6700\u5c0f\u4ea4\u6362\u6b21\u6570", + "TitleZH": "使字符串平衡的最小交换次数", "TitleSlug": "minimum-number-of-swaps-to-make-the-string-balanced", "ContestSlug": "weekly-contest-253", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 253", - "ContestID_zh": "\u7b2c 253 \u573a\u5468\u8d5b" + "ContestID_zh": "第 253 场周赛" }, { "Rating": 1686.4493679523, "ID": 950, "Title": "Reveal Cards In Increasing Order", - "TitleZH": "\u6309\u9012\u589e\u987a\u5e8f\u663e\u793a\u5361\u724c", + "TitleZH": "按递增顺序显示卡牌", "TitleSlug": "reveal-cards-in-increasing-order", "ContestSlug": "weekly-contest-113", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 113", - "ContestID_zh": "\u7b2c 113 \u573a\u5468\u8d5b" + "ContestID_zh": "第 113 场周赛" }, { "Rating": 1685.5389350949, "ID": 2233, "Title": "Maximum Product After K Increments", - "TitleZH": "K \u6b21\u589e\u52a0\u540e\u7684\u6700\u5927\u4e58\u79ef", + "TitleZH": "K 次增加后的最大乘积", "TitleSlug": "maximum-product-after-k-increments", "ContestSlug": "weekly-contest-288", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 288", - "ContestID_zh": "\u7b2c 288 \u573a\u5468\u8d5b" + "ContestID_zh": "第 288 场周赛" }, { "Rating": 1685.3599641299, "ID": 2074, "Title": "Reverse Nodes in Even Length Groups", - "TitleZH": "\u53cd\u8f6c\u5076\u6570\u957f\u5ea6\u7ec4\u7684\u8282\u70b9", + "TitleZH": "反转偶数长度组的节点", "TitleSlug": "reverse-nodes-in-even-length-groups", "ContestSlug": "weekly-contest-267", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 267", - "ContestID_zh": "\u7b2c 267 \u573a\u5468\u8d5b" + "ContestID_zh": "第 267 场周赛" }, { "Rating": 1682.8882177724, "ID": 1443, "Title": "Minimum Time to Collect All Apples in a Tree", - "TitleZH": "\u6536\u96c6\u6811\u4e0a\u6240\u6709\u82f9\u679c\u7684\u6700\u5c11\u65f6\u95f4", + "TitleZH": "收集树上所有苹果的最少时间", "TitleSlug": "minimum-time-to-collect-all-apples-in-a-tree", "ContestSlug": "weekly-contest-188", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 188", - "ContestID_zh": "\u7b2c 188 \u573a\u5468\u8d5b" + "ContestID_zh": "第 188 场周赛" }, { "Rating": 1681.3263732456, "ID": 767, "Title": "Reorganize String", - "TitleZH": "\u91cd\u6784\u5b57\u7b26\u4e32", + "TitleZH": "重构字符串", "TitleSlug": "reorganize-string", "ContestSlug": "weekly-contest-68", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u5468\u8d5b" + "ContestID_zh": "第 68 场周赛" }, { "Rating": 1680.866917849, "ID": 2280, "Title": "Minimum Lines to Represent a Line Chart", - "TitleZH": "\u8868\u793a\u4e00\u4e2a\u6298\u7ebf\u56fe\u7684\u6700\u5c11\u7ebf\u6bb5\u6570", + "TitleZH": "表示一个折线图的最少线段数", "TitleSlug": "minimum-lines-to-represent-a-line-chart", "ContestSlug": "weekly-contest-294", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 294", - "ContestID_zh": "\u7b2c 294 \u573a\u5468\u8d5b" + "ContestID_zh": "第 294 场周赛" }, { "Rating": 1680.82425993, "ID": 1865, "Title": "Finding Pairs With a Certain Sum", - "TitleZH": "\u627e\u51fa\u548c\u4e3a\u6307\u5b9a\u503c\u7684\u4e0b\u6807\u5bf9", + "TitleZH": "找出和为指定值的下标对", "TitleSlug": "finding-pairs-with-a-certain-sum", "ContestSlug": "weekly-contest-241", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 241", - "ContestID_zh": "\u7b2c 241 \u573a\u5468\u8d5b" + "ContestID_zh": "第 241 场周赛" }, { "Rating": 1680.4852623991, "ID": 1031, "Title": "Maximum Sum of Two Non-Overlapping Subarrays", - "TitleZH": "\u4e24\u4e2a\u975e\u91cd\u53e0\u5b50\u6570\u7ec4\u7684\u6700\u5927\u548c", + "TitleZH": "两个非重叠子数组的最大和", "TitleSlug": "maximum-sum-of-two-non-overlapping-subarrays", "ContestSlug": "weekly-contest-133", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 133", - "ContestID_zh": "\u7b2c 133 \u573a\u5468\u8d5b" + "ContestID_zh": "第 133 场周赛" }, { "Rating": 1680.1353258588, "ID": 2182, "Title": "Construct String With Repeat Limit", - "TitleZH": "\u6784\u9020\u9650\u5236\u91cd\u590d\u7684\u5b57\u7b26\u4e32", + "TitleZH": "构造限制重复的字符串", "TitleSlug": "construct-string-with-repeat-limit", "ContestSlug": "weekly-contest-281", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 281", - "ContestID_zh": "\u7b2c 281 \u573a\u5468\u8d5b" + "ContestID_zh": "第 281 场周赛" }, { "Rating": 1680.0815931601, "ID": 2457, "Title": "Minimum Addition to Make Integer Beautiful", - "TitleZH": "\u7f8e\u4e3d\u6574\u6570\u7684\u6700\u5c0f\u589e\u91cf", + "TitleZH": "美丽整数的最小增量", "TitleSlug": "minimum-addition-to-make-integer-beautiful", "ContestSlug": "weekly-contest-317", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 317", - "ContestID_zh": "\u7b2c 317 \u573a\u5468\u8d5b" + "ContestID_zh": "第 317 场周赛" }, { "Rating": 1679.2607152001, "ID": 1402, "Title": "Reducing Dishes", - "TitleZH": "\u505a\u83dc\u987a\u5e8f", + "TitleZH": "做菜顺序", "TitleSlug": "reducing-dishes", "ContestSlug": "biweekly-contest-23", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 23", - "ContestID_zh": "\u7b2c 23 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 23 场双周赛" }, { "Rating": 1678.7231378948, "ID": 1905, "Title": "Count Sub Islands", - "TitleZH": "\u7edf\u8ba1\u5b50\u5c9b\u5c7f", + "TitleZH": "统计子岛屿", "TitleSlug": "count-sub-islands", "ContestSlug": "weekly-contest-246", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 246", - "ContestID_zh": "\u7b2c 246 \u573a\u5468\u8d5b" + "ContestID_zh": "第 246 场周赛" }, { "Rating": 1678.6241816708, "ID": 2317, "Title": "Maximum XOR After Operations ", - "TitleZH": "\u64cd\u4f5c\u540e\u7684\u6700\u5927\u5f02\u6216\u548c", + "TitleZH": "操作后的最大异或和", "TitleSlug": "maximum-xor-after-operations", "ContestSlug": "biweekly-contest-81", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 81 场双周赛" }, { "Rating": 1678.5871762113, "ID": 2115, "Title": "Find All Possible Recipes from Given Supplies", - "TitleZH": "\u4ece\u7ed9\u5b9a\u539f\u6750\u6599\u4e2d\u627e\u5230\u6240\u6709\u53ef\u4ee5\u505a\u51fa\u7684\u83dc", + "TitleZH": "从给定原材料中找到所有可以做出的菜", "TitleSlug": "find-all-possible-recipes-from-given-supplies", "ContestSlug": "biweekly-contest-68", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 68 场双周赛" }, { "Rating": 1678.3947690537, "ID": 885, "Title": "Spiral Matrix III", - "TitleZH": "\u87ba\u65cb\u77e9\u9635 III", + "TitleZH": "螺旋矩阵 III", "TitleSlug": "spiral-matrix-iii", "ContestSlug": "weekly-contest-97", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 97", - "ContestID_zh": "\u7b2c 97 \u573a\u5468\u8d5b" + "ContestID_zh": "第 97 场周赛" }, { "Rating": 1678.1133886034, "ID": 853, "Title": "Car Fleet", - "TitleZH": "\u8f66\u961f", + "TitleZH": "车队", "TitleSlug": "car-fleet", "ContestSlug": "weekly-contest-89", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u5468\u8d5b" + "ContestID_zh": "第 89 场周赛" }, { "Rating": 1675.989407584, "ID": 974, "Title": "Subarray Sums Divisible by K", - "TitleZH": "\u548c\u53ef\u88ab K \u6574\u9664\u7684\u5b50\u6570\u7ec4", + "TitleZH": "和可被 K 整除的子数组", "TitleSlug": "subarray-sums-divisible-by-k", "ContestSlug": "weekly-contest-119", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 119", - "ContestID_zh": "\u7b2c 119 \u573a\u5468\u8d5b" + "ContestID_zh": "第 119 场周赛" }, { "Rating": 1675.9610355975, "ID": 987, "Title": "Vertical Order Traversal of a Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u7684\u5782\u5e8f\u904d\u5386", + "TitleZH": "二叉树的垂序遍历", "TitleSlug": "vertical-order-traversal-of-a-binary-tree", "ContestSlug": "weekly-contest-122", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 122", - "ContestID_zh": "\u7b2c 122 \u573a\u5468\u8d5b" + "ContestID_zh": "第 122 场周赛" }, { "Rating": 1675.761234741, "ID": 1870, "Title": "Minimum Speed to Arrive on Time", - "TitleZH": "\u51c6\u65f6\u5230\u8fbe\u7684\u5217\u8f66\u6700\u5c0f\u65f6\u901f", + "TitleZH": "准时到达的列车最小时速", "TitleSlug": "minimum-speed-to-arrive-on-time", "ContestSlug": "weekly-contest-242", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 242", - "ContestID_zh": "\u7b2c 242 \u573a\u5468\u8d5b" + "ContestID_zh": "第 242 场周赛" }, { "Rating": 1674.9985842835, "ID": 1339, "Title": "Maximum Product of Splitted Binary Tree", - "TitleZH": "\u5206\u88c2\u4e8c\u53c9\u6811\u7684\u6700\u5927\u4e58\u79ef", + "TitleZH": "分裂二叉树的最大乘积", "TitleSlug": "maximum-product-of-splitted-binary-tree", "ContestSlug": "weekly-contest-174", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 174", - "ContestID_zh": "\u7b2c 174 \u573a\u5468\u8d5b" + "ContestID_zh": "第 174 场周赛" }, { "Rating": 1674.7986939472, "ID": 1922, "Title": "Count Good Numbers", - "TitleZH": "\u7edf\u8ba1\u597d\u6570\u5b57\u7684\u6570\u76ee", + "TitleZH": "统计好数字的数目", "TitleSlug": "count-good-numbers", "ContestSlug": "weekly-contest-248", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 248", - "ContestID_zh": "\u7b2c 248 \u573a\u5468\u8d5b" + "ContestID_zh": "第 248 场周赛" }, { "Rating": 1674.5365205597, "ID": 1215, "Title": "Stepping Numbers", - "TitleZH": "\u6b65\u8fdb\u6570", + "TitleZH": "步进数", "TitleSlug": "stepping-numbers", "ContestSlug": "biweekly-contest-10", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 10", - "ContestID_zh": "\u7b2c 10 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 10 场双周赛" }, { "Rating": 1672.1678031263, "ID": 1438, "Title": "Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit", - "TitleZH": "\u7edd\u5bf9\u5dee\u4e0d\u8d85\u8fc7\u9650\u5236\u7684\u6700\u957f\u8fde\u7eed\u5b50\u6570\u7ec4", + "TitleZH": "绝对差不超过限制的最长连续子数组", "TitleSlug": "longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit", "ContestSlug": "weekly-contest-187", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 187", - "ContestID_zh": "\u7b2c 187 \u573a\u5468\u8d5b" + "ContestID_zh": "第 187 场周赛" }, { "Rating": 1671.9261598, "ID": 2033, "Title": "Minimum Operations to Make a Uni-Value Grid", - "TitleZH": "\u83b7\u53d6\u5355\u503c\u7f51\u683c\u7684\u6700\u5c0f\u64cd\u4f5c\u6570", + "TitleZH": "获取单值网格的最小操作数", "TitleSlug": "minimum-operations-to-make-a-uni-value-grid", "ContestSlug": "weekly-contest-262", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 262", - "ContestID_zh": "\u7b2c 262 \u573a\u5468\u8d5b" + "ContestID_zh": "第 262 场周赛" }, { "Rating": 1671.4657554194, "ID": 1738, "Title": "Find Kth Largest XOR Coordinate Value", - "TitleZH": "\u627e\u51fa\u7b2c K \u5927\u7684\u5f02\u6216\u5750\u6807\u503c", + "TitleZH": "找出第 K 大的异或坐标值", "TitleSlug": "find-kth-largest-xor-coordinate-value", "ContestSlug": "weekly-contest-225", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 225", - "ContestID_zh": "\u7b2c 225 \u573a\u5468\u8d5b" + "ContestID_zh": "第 225 场周赛" }, { "Rating": 1666.346990979, "ID": 1162, "Title": "As Far from Land as Possible", - "TitleZH": "\u5730\u56fe\u5206\u6790", + "TitleZH": "地图分析", "TitleSlug": "as-far-from-land-as-possible", "ContestSlug": "weekly-contest-150", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 150", - "ContestID_zh": "\u7b2c 150 \u573a\u5468\u8d5b" + "ContestID_zh": "第 150 场周赛" }, { "Rating": 1665.24907247, "ID": 1620, "Title": "Coordinate With Maximum Network Quality", - "TitleZH": "\u7f51\u7edc\u4fe1\u53f7\u6700\u597d\u7684\u5750\u6807", + "TitleZH": "网络信号最好的坐标", "TitleSlug": "coordinate-with-maximum-network-quality", "ContestSlug": "biweekly-contest-37", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 37", - "ContestID_zh": "\u7b2c 37 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 37 场双周赛" }, { "Rating": 1664.7703749741, "ID": 1121, "Title": "Divide Array Into Increasing Sequences", - "TitleZH": "\u5c06\u6570\u7ec4\u5206\u6210\u51e0\u4e2a\u9012\u589e\u5e8f\u5217", + "TitleZH": "将数组分成几个递增序列", "TitleSlug": "divide-array-into-increasing-sequences", "ContestSlug": "biweekly-contest-4", "ProblemIndex": "Q4", "ContestID_en": "Biweekly Contest 4", - "ContestID_zh": "\u7b2c 4 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 4 场双周赛" }, { "Rating": 1663.3912882908, "ID": 2063, "Title": "Vowels of All Substrings", - "TitleZH": "\u6240\u6709\u5b50\u5b57\u7b26\u4e32\u4e2d\u7684\u5143\u97f3", + "TitleZH": "所有子字符串中的元音", "TitleSlug": "vowels-of-all-substrings", "ContestSlug": "weekly-contest-266", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 266", - "ContestID_zh": "\u7b2c 266 \u573a\u5468\u8d5b" + "ContestID_zh": "第 266 场周赛" }, { "Rating": 1663.2612318917, "ID": 1219, "Title": "Path with Maximum Gold", - "TitleZH": "\u9ec4\u91d1\u77ff\u5de5", + "TitleZH": "黄金矿工", "TitleSlug": "path-with-maximum-gold", "ContestSlug": "weekly-contest-157", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 157", - "ContestID_zh": "\u7b2c 157 \u573a\u5468\u8d5b" + "ContestID_zh": "第 157 场周赛" }, { "Rating": 1663.1853149056, "ID": 863, "Title": "All Nodes Distance K in Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u4e2d\u6240\u6709\u8ddd\u79bb\u4e3a K \u7684\u7ed3\u70b9", + "TitleZH": "二叉树中所有距离为 K 的结点", "TitleSlug": "all-nodes-distance-k-in-binary-tree", "ContestSlug": "weekly-contest-91", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 91", - "ContestID_zh": "\u7b2c 91 \u573a\u5468\u8d5b" + "ContestID_zh": "第 91 场周赛" }, { "Rating": 1662.6673692545, "ID": 2170, "Title": "Minimum Operations to Make the Array Alternating", - "TitleZH": "\u4f7f\u6570\u7ec4\u53d8\u6210\u4ea4\u66ff\u6570\u7ec4\u7684\u6700\u5c11\u64cd\u4f5c\u6570", + "TitleZH": "使数组变成交替数组的最少操作数", "TitleSlug": "minimum-operations-to-make-the-array-alternating", "ContestSlug": "weekly-contest-280", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 280", - "ContestID_zh": "\u7b2c 280 \u573a\u5468\u8d5b" + "ContestID_zh": "第 280 场周赛" }, { "Rating": 1658.921022733, "ID": 2195, "Title": "Append K Integers With Minimal Sum", - "TitleZH": "\u5411\u6570\u7ec4\u4e2d\u8ffd\u52a0 K \u4e2a\u6574\u6570", + "TitleZH": "向数组中追加 K 个整数", "TitleSlug": "append-k-integers-with-minimal-sum", "ContestSlug": "weekly-contest-283", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 283", - "ContestID_zh": "\u7b2c 283 \u573a\u5468\u8d5b" + "ContestID_zh": "第 283 场周赛" }, { "Rating": 1658.7495899767, "ID": 1254, "Title": "Number of Closed Islands", - "TitleZH": "\u7edf\u8ba1\u5c01\u95ed\u5c9b\u5c7f\u7684\u6570\u76ee", + "TitleZH": "统计封闭岛屿的数目", "TitleSlug": "number-of-closed-islands", "ContestSlug": "weekly-contest-162", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 162", - "ContestID_zh": "\u7b2c 162 \u573a\u5468\u8d5b" + "ContestID_zh": "第 162 场周赛" }, { "Rating": 1658.6836278802, "ID": 1169, "Title": "Invalid Transactions", - "TitleZH": "\u67e5\u8be2\u65e0\u6548\u4ea4\u6613", + "TitleZH": "查询无效交易", "TitleSlug": "invalid-transactions", "ContestSlug": "weekly-contest-151", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 151", - "ContestID_zh": "\u7b2c 151 \u573a\u5468\u8d5b" + "ContestID_zh": "第 151 场周赛" }, { "Rating": 1658.5967147757, "ID": 1958, "Title": "Check if Move is Legal", - "TitleZH": "\u68c0\u67e5\u64cd\u4f5c\u662f\u5426\u5408\u6cd5", + "TitleZH": "检查操作是否合法", "TitleSlug": "check-if-move-is-legal", "ContestSlug": "biweekly-contest-58", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 58", - "ContestID_zh": "\u7b2c 58 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 58 场双周赛" }, { "Rating": 1658.3530344788, "ID": 2304, "Title": "Minimum Path Cost in a Grid", - "TitleZH": "\u7f51\u683c\u4e2d\u7684\u6700\u5c0f\u8def\u5f84\u4ee3\u4ef7", + "TitleZH": "网格中的最小路径代价", "TitleSlug": "minimum-path-cost-in-a-grid", "ContestSlug": "weekly-contest-297", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 297", - "ContestID_zh": "\u7b2c 297 \u573a\u5468\u8d5b" + "ContestID_zh": "第 297 场周赛" }, { "Rating": 1658.3474650806, "ID": 1091, "Title": "Shortest Path in Binary Matrix", - "TitleZH": "\u4e8c\u8fdb\u5236\u77e9\u9635\u4e2d\u7684\u6700\u77ed\u8def\u5f84", + "TitleZH": "二进制矩阵中的最短路径", "TitleSlug": "shortest-path-in-binary-matrix", "ContestSlug": "weekly-contest-141", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 141", - "ContestID_zh": "\u7b2c 141 \u573a\u5468\u8d5b" + "ContestID_zh": "第 141 场周赛" }, { "Rating": 1658.3305547865, "ID": 1583, "Title": "Count Unhappy Friends", - "TitleZH": "\u7edf\u8ba1\u4e0d\u5f00\u5fc3\u7684\u670b\u53cb", + "TitleZH": "统计不开心的朋友", "TitleSlug": "count-unhappy-friends", "ContestSlug": "weekly-contest-206", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 206", - "ContestID_zh": "\u7b2c 206 \u573a\u5468\u8d5b" + "ContestID_zh": "第 206 场周赛" }, { "Rating": 1657.1231739081, "ID": 1249, "Title": "Minimum Remove to Make Valid Parentheses", - "TitleZH": "\u79fb\u9664\u65e0\u6548\u7684\u62ec\u53f7", + "TitleZH": "移除无效的括号", "TitleSlug": "minimum-remove-to-make-valid-parentheses", "ContestSlug": "weekly-contest-161", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 161", - "ContestID_zh": "\u7b2c 161 \u573a\u5468\u8d5b" + "ContestID_zh": "第 161 场周赛" }, { "Rating": 1656.5588918365, "ID": 2222, "Title": "Number of Ways to Select Buildings", - "TitleZH": "\u9009\u62e9\u5efa\u7b51\u7684\u65b9\u6848\u6570", + "TitleZH": "选择建筑的方案数", "TitleSlug": "number-of-ways-to-select-buildings", "ContestSlug": "biweekly-contest-75", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 75 场双周赛" }, { "Rating": 1655.6433885989, "ID": 1004, "Title": "Max Consecutive Ones III", - "TitleZH": "\u6700\u5927\u8fde\u7eed1\u7684\u4e2a\u6570 III", + "TitleZH": "最大连续1的个数 III", "TitleSlug": "max-consecutive-ones-iii", "ContestSlug": "weekly-contest-126", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 126", - "ContestID_zh": "\u7b2c 126 \u573a\u5468\u8d5b" + "ContestID_zh": "第 126 场周赛" }, { "Rating": 1654.0793660142, "ID": 1257, "Title": "Smallest Common Region", - "TitleZH": "\u6700\u5c0f\u516c\u5171\u533a\u57df", + "TitleZH": "最小公共区域", "TitleSlug": "smallest-common-region", "ContestSlug": "biweekly-contest-13", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 13", - "ContestID_zh": "\u7b2c 13 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 13 场双周赛" }, { "Rating": 1653.7337081336, "ID": 1155, "Title": "Number of Dice Rolls With Target Sum", - "TitleZH": "\u63b7\u9ab0\u5b50\u7684N\u79cd\u65b9\u6cd5", + "TitleZH": "掷骰子的N种方法", "TitleSlug": "number-of-dice-rolls-with-target-sum", "ContestSlug": "weekly-contest-149", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 149", - "ContestID_zh": "\u7b2c 149 \u573a\u5468\u8d5b" + "ContestID_zh": "第 149 场周赛" }, { "Rating": 1653.0356626499, "ID": 1509, "Title": "Minimum Difference Between Largest and Smallest Value in Three Moves", - "TitleZH": "\u4e09\u6b21\u64cd\u4f5c\u540e\u6700\u5927\u503c\u4e0e\u6700\u5c0f\u503c\u7684\u6700\u5c0f\u5dee", + "TitleZH": "三次操作后最大值与最小值的最小差", "TitleSlug": "minimum-difference-between-largest-and-smallest-value-in-three-moves", "ContestSlug": "biweekly-contest-30", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 30", - "ContestID_zh": "\u7b2c 30 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 30 场双周赛" }, { "Rating": 1652.5809810428, "ID": 1311, "Title": "Get Watched Videos by Your Friends", - "TitleZH": "\u83b7\u53d6\u4f60\u597d\u53cb\u5df2\u89c2\u770b\u7684\u89c6\u9891", + "TitleZH": "获取你好友已观看的视频", "TitleSlug": "get-watched-videos-by-your-friends", "ContestSlug": "weekly-contest-170", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 170", - "ContestID_zh": "\u7b2c 170 \u573a\u5468\u8d5b" + "ContestID_zh": "第 170 场周赛" }, { "Rating": 1651.5845871727, "ID": 750, "Title": "Number Of Corner Rectangles", - "TitleZH": "\u89d2\u77e9\u5f62\u7684\u6570\u91cf", + "TitleZH": "角矩形的数量", "TitleSlug": "number-of-corner-rectangles", "ContestSlug": "weekly-contest-63", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u5468\u8d5b" + "ContestID_zh": "第 63 场周赛" }, { "Rating": 1651.569267834, "ID": 2343, "Title": "Query Kth Smallest Trimmed Number", - "TitleZH": "\u88c1\u526a\u6570\u5b57\u540e\u67e5\u8be2\u7b2c K \u5c0f\u7684\u6570\u5b57", + "TitleZH": "裁剪数字后查询第 K 小的数字", "TitleSlug": "query-kth-smallest-trimmed-number", "ContestSlug": "weekly-contest-302", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 302", - "ContestID_zh": "\u7b2c 302 \u573a\u5468\u8d5b" + "ContestID_zh": "第 302 场周赛" }, { "Rating": 1649.9728054796, "ID": 1367, "Title": "Linked List in Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u4e2d\u7684\u5217\u8868", + "TitleZH": "二叉树中的列表", "TitleSlug": "linked-list-in-binary-tree", "ContestSlug": "weekly-contest-178", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 178", - "ContestID_zh": "\u7b2c 178 \u573a\u5468\u8d5b" + "ContestID_zh": "第 178 场周赛" }, { "Rating": 1648.3540381514, "ID": 2423, "Title": "Remove Letter To Equalize Frequency", - "TitleZH": "\u5220\u9664\u5b57\u7b26\u4f7f\u9891\u7387\u76f8\u540c", + "TitleZH": "删除字符使频率相同", "TitleSlug": "remove-letter-to-equalize-frequency", "ContestSlug": "biweekly-contest-88", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 88 场双周赛" }, { "Rating": 1648.341757882, "ID": 870, "Title": "Advantage Shuffle", - "TitleZH": "\u4f18\u52bf\u6d17\u724c", + "TitleZH": "优势洗牌", "TitleSlug": "advantage-shuffle", "ContestSlug": "weekly-contest-93", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 93", - "ContestID_zh": "\u7b2c 93 \u573a\u5468\u8d5b" + "ContestID_zh": "第 93 场周赛" }, { "Rating": 1648.0880791614, "ID": 1975, "Title": "Maximum Matrix Sum", - "TitleZH": "\u6700\u5927\u65b9\u9635\u548c", + "TitleZH": "最大方阵和", "TitleSlug": "maximum-matrix-sum", "ContestSlug": "biweekly-contest-59", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 59", - "ContestID_zh": "\u7b2c 59 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 59 场双周赛" }, { "Rating": 1646.1943237127, "ID": 1358, "Title": "Number of Substrings Containing All Three Characters", - "TitleZH": "\u5305\u542b\u6240\u6709\u4e09\u79cd\u5b57\u7b26\u7684\u5b50\u5b57\u7b26\u4e32\u6570\u76ee", + "TitleZH": "包含所有三种字符的子字符串数目", "TitleSlug": "number-of-substrings-containing-all-three-characters", "ContestSlug": "biweekly-contest-20", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 20", - "ContestID_zh": "\u7b2c 20 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 20 场双周赛" }, { "Rating": 1646.1765343383, "ID": 2226, "Title": "Maximum Candies Allocated to K Children", - "TitleZH": "\u6bcf\u4e2a\u5c0f\u5b69\u6700\u591a\u80fd\u5206\u5230\u591a\u5c11\u7cd6\u679c", + "TitleZH": "每个小孩最多能分到多少糖果", "TitleSlug": "maximum-candies-allocated-to-k-children", "ContestSlug": "weekly-contest-287", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 287", - "ContestID_zh": "\u7b2c 287 \u573a\u5468\u8d5b" + "ContestID_zh": "第 287 场周赛" }, { "Rating": 1643.5283095007, "ID": 2196, "Title": "Create Binary Tree From Descriptions", - "TitleZH": "\u6839\u636e\u63cf\u8ff0\u521b\u5efa\u4e8c\u53c9\u6811", + "TitleZH": "根据描述创建二叉树", "TitleSlug": "create-binary-tree-from-descriptions", "ContestSlug": "weekly-contest-283", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 283", - "ContestID_zh": "\u7b2c 283 \u573a\u5468\u8d5b" + "ContestID_zh": "第 283 场周赛" }, { "Rating": 1643.1325351423, "ID": 2024, "Title": "Maximize the Confusion of an Exam", - "TitleZH": "\u8003\u8bd5\u7684\u6700\u5927\u56f0\u6270\u5ea6", + "TitleZH": "考试的最大困扰度", "TitleSlug": "maximize-the-confusion-of-an-exam", "ContestSlug": "biweekly-contest-62", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 62", - "ContestID_zh": "\u7b2c 62 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 62 场双周赛" }, { "Rating": 1642.1446933109, "ID": 2275, "Title": "Largest Combination With Bitwise AND Greater Than Zero", - "TitleZH": "\u6309\u4f4d\u4e0e\u7ed3\u679c\u5927\u4e8e\u96f6\u7684\u6700\u957f\u7ec4\u5408", + "TitleZH": "按位与结果大于零的最长组合", "TitleSlug": "largest-combination-with-bitwise-and-greater-than-zero", "ContestSlug": "weekly-contest-293", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 293", - "ContestID_zh": "\u7b2c 293 \u573a\u5468\u8d5b" + "ContestID_zh": "第 293 场周赛" }, { "Rating": 1641.9424376927, "ID": 2375, "Title": "Construct Smallest Number From DI String", - "TitleZH": "\u6839\u636e\u6a21\u5f0f\u4e32\u6784\u9020\u6700\u5c0f\u6570\u5b57", + "TitleZH": "根据模式串构造最小数字", "TitleSlug": "construct-smallest-number-from-di-string", "ContestSlug": "weekly-contest-306", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 306", - "ContestID_zh": "\u7b2c 306 \u573a\u5468\u8d5b" + "ContestID_zh": "第 306 场周赛" }, { "Rating": 1640.9591585343, "ID": 2187, "Title": "Minimum Time to Complete Trips", - "TitleZH": "\u5b8c\u6210\u65c5\u9014\u7684\u6700\u5c11\u65f6\u95f4", + "TitleZH": "完成旅途的最少时间", "TitleSlug": "minimum-time-to-complete-trips", "ContestSlug": "weekly-contest-282", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 282", - "ContestID_zh": "\u7b2c 282 \u573a\u5468\u8d5b" + "ContestID_zh": "第 282 场周赛" }, { "Rating": 1640.8976042503, "ID": 2344, "Title": "Minimum Deletions to Make Array Divisible", - "TitleZH": "\u4f7f\u6570\u7ec4\u53ef\u4ee5\u88ab\u6574\u9664\u7684\u6700\u5c11\u5220\u9664\u6b21\u6570", + "TitleZH": "使数组可以被整除的最少删除次数", "TitleSlug": "minimum-deletions-to-make-array-divisible", "ContestSlug": "weekly-contest-302", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 302", - "ContestID_zh": "\u7b2c 302 \u573a\u5468\u8d5b" + "ContestID_zh": "第 302 场周赛" }, { "Rating": 1638.3134093066, "ID": 1926, "Title": "Nearest Exit from Entrance in Maze", - "TitleZH": "\u8ff7\u5bab\u4e2d\u79bb\u5165\u53e3\u6700\u8fd1\u7684\u51fa\u53e3", + "TitleZH": "迷宫中离入口最近的出口", "TitleSlug": "nearest-exit-from-entrance-in-maze", "ContestSlug": "biweekly-contest-56", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 56", - "ContestID_zh": "\u7b2c 56 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 56 场双周赛" }, { "Rating": 1638.1281256708, "ID": 838, "Title": "Push Dominoes", - "TitleZH": "\u63a8\u591a\u7c73\u8bfa", + "TitleZH": "推多米诺", "TitleSlug": "push-dominoes", "ContestSlug": "weekly-contest-85", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u5468\u8d5b" + "ContestID_zh": "第 85 场周赛" }, { "Rating": 1638.0148920643, "ID": 990, "Title": "Satisfiability of Equality Equations", - "TitleZH": "\u7b49\u5f0f\u65b9\u7a0b\u7684\u53ef\u6ee1\u8db3\u6027", + "TitleZH": "等式方程的可满足性", "TitleSlug": "satisfiability-of-equality-equations", "ContestSlug": "weekly-contest-123", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 123", - "ContestID_zh": "\u7b2c 123 \u573a\u5468\u8d5b" + "ContestID_zh": "第 123 场周赛" }, { "Rating": 1637.0082208814, "ID": 1558, "Title": "Minimum Numbers of Function Calls to Make Target Array", - "TitleZH": "\u5f97\u5230\u76ee\u6807\u6570\u7ec4\u7684\u6700\u5c11\u51fd\u6570\u8c03\u7528\u6b21\u6570", + "TitleZH": "得到目标数组的最少函数调用次数", "TitleSlug": "minimum-numbers-of-function-calls-to-make-target-array", "ContestSlug": "biweekly-contest-33", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 33", - "ContestID_zh": "\u7b2c 33 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 33 场双周赛" }, { "Rating": 1636.6877598712, "ID": 1386, "Title": "Cinema Seat Allocation", - "TitleZH": "\u5b89\u6392\u7535\u5f71\u9662\u5ea7\u4f4d", + "TitleZH": "安排电影院座位", "TitleSlug": "cinema-seat-allocation", "ContestSlug": "biweekly-contest-22", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 22", - "ContestID_zh": "\u7b2c 22 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 22 场双周赛" }, { "Rating": 1636.47322627, "ID": 2384, "Title": "Largest Palindromic Number", - "TitleZH": "\u6700\u5927\u56de\u6587\u6570\u5b57", + "TitleZH": "最大回文数字", "TitleSlug": "largest-palindromic-number", "ContestSlug": "weekly-contest-307", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 307", - "ContestID_zh": "\u7b2c 307 \u573a\u5468\u8d5b" + "ContestID_zh": "第 307 场周赛" }, { "Rating": 1635.6879273926, "ID": 1899, "Title": "Merge Triplets to Form Target Triplet", - "TitleZH": "\u5408\u5e76\u82e5\u5e72\u4e09\u5143\u7ec4\u4ee5\u5f62\u6210\u76ee\u6807\u4e09\u5143\u7ec4", + "TitleZH": "合并若干三元组以形成目标三元组", "TitleSlug": "merge-triplets-to-form-target-triplet", "ContestSlug": "weekly-contest-245", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 245", - "ContestID_zh": "\u7b2c 245 \u573a\u5468\u8d5b" + "ContestID_zh": "第 245 场周赛" }, { "Rating": 1633.6202302555, "ID": 1466, "Title": "Reorder Routes to Make All Paths Lead to the City Zero", - "TitleZH": "\u91cd\u65b0\u89c4\u5212\u8def\u7ebf", + "TitleZH": "重新规划路线", "TitleSlug": "reorder-routes-to-make-all-paths-lead-to-the-city-zero", "ContestSlug": "weekly-contest-191", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 191", - "ContestID_zh": "\u7b2c 191 \u573a\u5468\u8d5b" + "ContestID_zh": "第 191 场周赛" }, { "Rating": 1633.1789521619, "ID": 1053, "Title": "Previous Permutation With One Swap", - "TitleZH": "\u4ea4\u6362\u4e00\u6b21\u7684\u5148\u524d\u6392\u5217", + "TitleZH": "交换一次的先前排列", "TitleSlug": "previous-permutation-with-one-swap", "ContestSlug": "weekly-contest-138", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 138", - "ContestID_zh": "\u7b2c 138 \u573a\u5468\u8d5b" + "ContestID_zh": "第 138 场周赛" }, { "Rating": 1633.1372577433, "ID": 1319, "Title": "Number of Operations to Make Network Connected", - "TitleZH": "\u8fde\u901a\u7f51\u7edc\u7684\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "连通网络的操作次数", "TitleSlug": "number-of-operations-to-make-network-connected", "ContestSlug": "weekly-contest-171", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 171", - "ContestID_zh": "\u7b2c 171 \u573a\u5468\u8d5b" + "ContestID_zh": "第 171 场周赛" }, { "Rating": 1632.0191837349, "ID": 820, "Title": "Short Encoding of Words", - "TitleZH": "\u5355\u8bcd\u7684\u538b\u7f29\u7f16\u7801", + "TitleZH": "单词的压缩编码", "TitleSlug": "short-encoding-of-words", "ContestSlug": "weekly-contest-81", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u5468\u8d5b" + "ContestID_zh": "第 81 场周赛" }, { "Rating": 1631.338145683, "ID": 1540, "Title": "Can Convert String in K Moves", - "TitleZH": "K \u6b21\u64cd\u4f5c\u8f6c\u53d8\u5b57\u7b26\u4e32", + "TitleZH": "K 次操作转变字符串", "TitleSlug": "can-convert-string-in-k-moves", "ContestSlug": "biweekly-contest-32", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 32", - "ContestID_zh": "\u7b2c 32 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 32 场双周赛" }, { "Rating": 1629.5416832545, "ID": 1680, "Title": "Concatenation of Consecutive Binary Numbers", - "TitleZH": "\u8fde\u63a5\u8fde\u7eed\u4e8c\u8fdb\u5236\u6570\u5b57", + "TitleZH": "连接连续二进制数字", "TitleSlug": "concatenation-of-consecutive-binary-numbers", "ContestSlug": "weekly-contest-218", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 218", - "ContestID_zh": "\u7b2c 218 \u573a\u5468\u8d5b" + "ContestID_zh": "第 218 场周赛" }, { "Rating": 1628.5072578803, "ID": 1332, "Title": "Remove Palindromic Subsequences", - "TitleZH": "\u5220\u9664\u56de\u6587\u5b50\u5e8f\u5217", + "TitleZH": "删除回文子序列", "TitleSlug": "remove-palindromic-subsequences", "ContestSlug": "weekly-contest-173", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 173", - "ContestID_zh": "\u7b2c 173 \u573a\u5468\u8d5b" + "ContestID_zh": "第 173 场周赛" }, { "Rating": 1626.6740430119, "ID": 1182, "Title": "Shortest Distance to Target Color", - "TitleZH": "\u4e0e\u76ee\u6807\u989c\u8272\u95f4\u7684\u6700\u77ed\u8ddd\u79bb", + "TitleZH": "与目标颜色间的最短距离", "TitleSlug": "shortest-distance-to-target-color", "ContestSlug": "biweekly-contest-8", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 8", - "ContestID_zh": "\u7b2c 8 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 8 场双周赛" }, { "Rating": 1626.3266982141, "ID": 1366, "Title": "Rank Teams by Votes", - "TitleZH": "\u901a\u8fc7\u6295\u7968\u5bf9\u56e2\u961f\u6392\u540d", + "TitleZH": "通过投票对团队排名", "TitleSlug": "rank-teams-by-votes", "ContestSlug": "weekly-contest-178", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 178", - "ContestID_zh": "\u7b2c 178 \u573a\u5468\u8d5b" + "ContestID_zh": "第 178 场周赛" }, { "Rating": 1624.9775945043, "ID": 785, "Title": "Is Graph Bipartite?", - "TitleZH": "\u5224\u65ad\u4e8c\u5206\u56fe", + "TitleZH": "判断二分图", "TitleSlug": "is-graph-bipartite", "ContestSlug": "weekly-contest-72", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u5468\u8d5b" + "ContestID_zh": "第 72 场周赛" }, { "Rating": 1624.4737611923, "ID": 916, "Title": "Word Subsets", - "TitleZH": "\u5355\u8bcd\u5b50\u96c6", + "TitleZH": "单词子集", "TitleSlug": "word-subsets", "ContestSlug": "weekly-contest-104", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 104", - "ContestID_zh": "\u7b2c 104 \u573a\u5468\u8d5b" + "ContestID_zh": "第 104 场周赛" }, { "Rating": 1623.9443250479, "ID": 1248, "Title": "Count Number of Nice Subarrays", - "TitleZH": "\u7edf\u8ba1\u300c\u4f18\u7f8e\u5b50\u6570\u7ec4\u300d", + "TitleZH": "统计「优美子数组」", "TitleSlug": "count-number-of-nice-subarrays", "ContestSlug": "weekly-contest-161", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 161", - "ContestID_zh": "\u7b2c 161 \u573a\u5468\u8d5b" + "ContestID_zh": "第 161 场周赛" }, { "Rating": 1622.8414025136, "ID": 2086, "Title": "Minimum Number of Buckets Required to Collect Rainwater from Houses", - "TitleZH": "\u4ece\u623f\u5c4b\u6536\u96c6\u96e8\u6c34\u9700\u8981\u7684\u6700\u5c11\u6c34\u6876\u6570", + "TitleZH": "从房屋收集雨水需要的最少水桶数", "TitleSlug": "minimum-number-of-food-buckets-to-feed-the-hamsters", "ContestSlug": "biweekly-contest-66", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 66 场双周赛" }, { "Rating": 1622.7743864401, "ID": 2365, "Title": "Task Scheduler II", - "TitleZH": "\u4efb\u52a1\u8c03\u5ea6\u5668 II", + "TitleZH": "任务调度器 II", "TitleSlug": "task-scheduler-ii", "ContestSlug": "biweekly-contest-84", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 84 场双周赛" }, { "Rating": 1622.3970914116, "ID": 2425, "Title": "Bitwise XOR of All Pairings", - "TitleZH": "\u6240\u6709\u6570\u5bf9\u7684\u5f02\u6216\u548c", + "TitleZH": "所有数对的异或和", "TitleSlug": "bitwise-xor-of-all-pairings", "ContestSlug": "biweekly-contest-88", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 88 场双周赛" }, { "Rating": 1622.2389577197, "ID": 2364, "Title": "Count Number of Bad Pairs", - "TitleZH": "\u7edf\u8ba1\u574f\u6570\u5bf9\u7684\u6570\u76ee", + "TitleZH": "统计坏数对的数目", "TitleSlug": "count-number-of-bad-pairs", "ContestSlug": "biweekly-contest-84", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 84 场双周赛" }, { "Rating": 1618.6016480451, "ID": 1503, "Title": "Last Moment Before All Ants Fall Out of a Plank", - "TitleZH": "\u6240\u6709\u8682\u8681\u6389\u4e0b\u6765\u524d\u7684\u6700\u540e\u4e00\u523b", + "TitleZH": "所有蚂蚁掉下来前的最后一刻", "TitleSlug": "last-moment-before-all-ants-fall-out-of-a-plank", "ContestSlug": "weekly-contest-196", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 196", - "ContestID_zh": "\u7b2c 196 \u573a\u5468\u8d5b" + "ContestID_zh": "第 196 场周赛" }, { "Rating": 1616.2067360638, "ID": 2241, "Title": "Design an ATM Machine", - "TitleZH": "\u8bbe\u8ba1\u4e00\u4e2a ATM \u673a\u5668", + "TitleZH": "设计一个 ATM 机器", "TitleSlug": "design-an-atm-machine", "ContestSlug": "biweekly-contest-76", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 76 场双周赛" }, { "Rating": 1615.4767730477, "ID": 1020, "Title": "Number of Enclaves", - "TitleZH": "\u98de\u5730\u7684\u6570\u91cf", + "TitleZH": "飞地的数量", "TitleSlug": "number-of-enclaves", "ContestSlug": "weekly-contest-130", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 130", - "ContestID_zh": "\u7b2c 130 \u573a\u5468\u8d5b" + "ContestID_zh": "第 130 场周赛" }, { "Rating": 1614.4877804672, "ID": 2145, "Title": "Count the Hidden Sequences", - "TitleZH": "\u7edf\u8ba1\u9690\u85cf\u6570\u7ec4\u6570\u76ee", + "TitleZH": "统计隐藏数组数目", "TitleSlug": "count-the-hidden-sequences", "ContestSlug": "biweekly-contest-70", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 70 场双周赛" }, { "Rating": 1613.0429766636, "ID": 1277, "Title": "Count Square Submatrices with All Ones", - "TitleZH": "\u7edf\u8ba1\u5168\u4e3a 1 \u7684\u6b63\u65b9\u5f62\u5b50\u77e9\u9635", + "TitleZH": "统计全为 1 的正方形子矩阵", "TitleSlug": "count-square-submatrices-with-all-ones", "ContestSlug": "weekly-contest-165", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 165", - "ContestID_zh": "\u7b2c 165 \u573a\u5468\u8d5b" + "ContestID_zh": "第 165 场周赛" }, { "Rating": 1611.8434720083, "ID": 2232, "Title": "Minimize Result by Adding Parentheses to Expression", - "TitleZH": "\u5411\u8868\u8fbe\u5f0f\u6dfb\u52a0\u62ec\u53f7\u540e\u7684\u6700\u5c0f\u7ed3\u679c", + "TitleZH": "向表达式添加括号后的最小结果", "TitleSlug": "minimize-result-by-adding-parentheses-to-expression", "ContestSlug": "weekly-contest-288", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 288", - "ContestID_zh": "\u7b2c 288 \u573a\u5468\u8d5b" + "ContestID_zh": "第 288 场周赛" }, { "Rating": 1611.7621820686, "ID": 789, "Title": "Escape The Ghosts", - "TitleZH": "\u9003\u8131\u963b\u788d\u8005", + "TitleZH": "逃脱阻碍者", "TitleSlug": "escape-the-ghosts", "ContestSlug": "weekly-contest-73", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u5468\u8d5b" + "ContestID_zh": "第 73 场周赛" }, { "Rating": 1610.569398159, "ID": 1524, "Title": "Number of Sub-arrays With Odd Sum", - "TitleZH": "\u548c\u4e3a\u5947\u6570\u7684\u5b50\u6570\u7ec4\u6570\u76ee", + "TitleZH": "和为奇数的子数组数目", "TitleSlug": "number-of-sub-arrays-with-odd-sum", "ContestSlug": "biweekly-contest-31", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 31", - "ContestID_zh": "\u7b2c 31 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 31 场双周赛" }, { "Rating": 1610.1866391145, "ID": 1670, "Title": "Design Front Middle Back Queue", - "TitleZH": "\u8bbe\u8ba1\u524d\u4e2d\u540e\u961f\u5217", + "TitleZH": "设计前中后队列", "TitleSlug": "design-front-middle-back-queue", "ContestSlug": "biweekly-contest-40", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 40", - "ContestID_zh": "\u7b2c 40 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 40 场双周赛" }, { "Rating": 1609.7858209851, "ID": 2438, "Title": "Range Product Queries of Powers", - "TitleZH": "\u4e8c\u7684\u5e42\u6570\u7ec4\u4e2d\u67e5\u8be2\u8303\u56f4\u5185\u7684\u4e58\u79ef", + "TitleZH": "二的幂数组中查询范围内的乘积", "TitleSlug": "range-product-queries-of-powers", "ContestSlug": "biweekly-contest-89", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 89 场双周赛" }, { "Rating": 1607.80608595, "ID": 962, "Title": "Maximum Width Ramp", - "TitleZH": "\u6700\u5927\u5bbd\u5ea6\u5761", + "TitleZH": "最大宽度坡", "TitleSlug": "maximum-width-ramp", "ContestSlug": "weekly-contest-116", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 116", - "ContestID_zh": "\u7b2c 116 \u573a\u5468\u8d5b" + "ContestID_zh": "第 116 场周赛" }, { "Rating": 1607.7036437819, "ID": 2320, "Title": "Count Number of Ways to Place Houses", - "TitleZH": "\u7edf\u8ba1\u653e\u7f6e\u623f\u5b50\u7684\u65b9\u5f0f\u6570", + "TitleZH": "统计放置房子的方式数", "TitleSlug": "count-number-of-ways-to-place-houses", "ContestSlug": "weekly-contest-299", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 299", - "ContestID_zh": "\u7b2c 299 \u573a\u5468\u8d5b" + "ContestID_zh": "第 299 场周赛" }, { "Rating": 1607.0005715974, "ID": 1123, "Title": "Lowest Common Ancestor of Deepest Leaves", - "TitleZH": "\u6700\u6df1\u53f6\u8282\u70b9\u7684\u6700\u8fd1\u516c\u5171\u7956\u5148", + "TitleZH": "最深叶节点的最近公共祖先", "TitleSlug": "lowest-common-ancestor-of-deepest-leaves", "ContestSlug": "weekly-contest-145", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 145", - "ContestID_zh": "\u7b2c 145 \u573a\u5468\u8d5b" + "ContestID_zh": "第 145 场周赛" }, { "Rating": 1606.9895296459, "ID": 1300, "Title": "Sum of Mutated Array Closest to Target", - "TitleZH": "\u8f6c\u53d8\u6570\u7ec4\u540e\u6700\u63a5\u8fd1\u76ee\u6807\u503c\u7684\u6570\u7ec4\u548c", + "TitleZH": "转变数组后最接近目标值的数组和", "TitleSlug": "sum-of-mutated-array-closest-to-target", "ContestSlug": "biweekly-contest-16", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 16", - "ContestID_zh": "\u7b2c 16 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 16 场双周赛" }, { "Rating": 1606.2185826486, "ID": 1604, "Title": "Alert Using Same Key-Card Three or More Times in a One Hour Period", - "TitleZH": "\u8b66\u544a\u4e00\u5c0f\u65f6\u5185\u4f7f\u7528\u76f8\u540c\u5458\u5de5\u5361\u5927\u4e8e\u7b49\u4e8e\u4e09\u6b21\u7684\u4eba", + "TitleZH": "警告一小时内使用相同员工卡大于等于三次的人", "TitleSlug": "alert-using-same-key-card-three-or-more-times-in-a-one-hour-period", "ContestSlug": "biweekly-contest-36", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 36", - "ContestID_zh": "\u7b2c 36 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 36 场双周赛" }, { "Rating": 1604.9737380545, "ID": 809, "Title": "Expressive Words", - "TitleZH": "\u60c5\u611f\u4e30\u5bcc\u7684\u6587\u5b57", + "TitleZH": "情感丰富的文字", "TitleSlug": "expressive-words", "ContestSlug": "weekly-contest-78", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u5468\u8d5b" + "ContestID_zh": "第 78 场周赛" }, { "Rating": 1604.1602280047, "ID": 2424, "Title": "Longest Uploaded Prefix", - "TitleZH": "\u6700\u957f\u4e0a\u4f20\u524d\u7f00", + "TitleZH": "最长上传前缀", "TitleSlug": "longest-uploaded-prefix", "ContestSlug": "biweekly-contest-88", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 88 场双周赛" }, { "Rating": 1604.0695445163, "ID": 2316, "Title": "Count Unreachable Pairs of Nodes in an Undirected Graph", - "TitleZH": "\u7edf\u8ba1\u65e0\u5411\u56fe\u4e2d\u65e0\u6cd5\u4e92\u76f8\u5230\u8fbe\u70b9\u5bf9\u6570", + "TitleZH": "统计无向图中无法互相到达点对数", "TitleSlug": "count-unreachable-pairs-of-nodes-in-an-undirected-graph", "ContestSlug": "biweekly-contest-81", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 81 场双周赛" }, { "Rating": 1602.7742849665, "ID": 2447, "Title": "Number of Subarrays With GCD Equal to K", - "TitleZH": "\u6700\u5927\u516c\u56e0\u6570\u7b49\u4e8e K \u7684\u5b50\u6570\u7ec4\u6570\u76ee", + "TitleZH": "最大公因数等于 K 的子数组数目", "TitleSlug": "number-of-subarrays-with-gcd-equal-to-k", "ContestSlug": "weekly-contest-316", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 316", - "ContestID_zh": "\u7b2c 316 \u573a\u5468\u8d5b" + "ContestID_zh": "第 316 场周赛" }, { "Rating": 1602.7242171967, "ID": 2249, "Title": "Count Lattice Points Inside a Circle", - "TitleZH": "\u7edf\u8ba1\u5706\u5185\u683c\u70b9\u6570\u76ee", + "TitleZH": "统计圆内格点数目", "TitleSlug": "count-lattice-points-inside-a-circle", "ContestSlug": "weekly-contest-290", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 290", - "ContestID_zh": "\u7b2c 290 \u573a\u5468\u8d5b" + "ContestID_zh": "第 290 场周赛" }, { "Rating": 1601.511760532, "ID": 926, "Title": "Flip String to Monotone Increasing", - "TitleZH": "\u5c06\u5b57\u7b26\u4e32\u7ffb\u8f6c\u5230\u5355\u8c03\u9012\u589e", + "TitleZH": "将字符串翻转到单调递增", "TitleSlug": "flip-string-to-monotone-increasing", "ContestSlug": "weekly-contest-107", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 107", - "ContestID_zh": "\u7b2c 107 \u573a\u5468\u8d5b" + "ContestID_zh": "第 107 场周赛" }, { "Rating": 1600.5573262373, "ID": 1864, "Title": "Minimum Number of Swaps to Make the Binary String Alternating", - "TitleZH": "\u6784\u6210\u4ea4\u66ff\u5b57\u7b26\u4e32\u9700\u8981\u7684\u6700\u5c0f\u4ea4\u6362\u6b21\u6570", + "TitleZH": "构成交替字符串需要的最小交换次数", "TitleSlug": "minimum-number-of-swaps-to-make-the-binary-string-alternating", "ContestSlug": "weekly-contest-241", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 241", - "ContestID_zh": "\u7b2c 241 \u573a\u5468\u8d5b" + "ContestID_zh": "第 241 场周赛" }, { "Rating": 1599.2720584736, "ID": 1048, "Title": "Longest String Chain", - "TitleZH": "\u6700\u957f\u5b57\u7b26\u4e32\u94fe", + "TitleZH": "最长字符串链", "TitleSlug": "longest-string-chain", "ContestSlug": "weekly-contest-137", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 137", - "ContestID_zh": "\u7b2c 137 \u573a\u5468\u8d5b" + "ContestID_zh": "第 137 场周赛" }, { "Rating": 1597.1931473887, "ID": 1218, "Title": "Longest Arithmetic Subsequence of Given Difference", - "TitleZH": "\u6700\u957f\u5b9a\u5dee\u5b50\u5e8f\u5217", + "TitleZH": "最长定差子序列", "TitleSlug": "longest-arithmetic-subsequence-of-given-difference", "ContestSlug": "weekly-contest-157", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 157", - "ContestID_zh": "\u7b2c 157 \u573a\u5468\u8d5b" + "ContestID_zh": "第 157 场周赛" }, { "Rating": 1597.0215918551, "ID": 1247, "Title": "Minimum Swaps to Make Strings Equal", - "TitleZH": "\u4ea4\u6362\u5b57\u7b26\u4f7f\u5f97\u5b57\u7b26\u4e32\u76f8\u540c", + "TitleZH": "交换字符使得字符串相同", "TitleSlug": "minimum-swaps-to-make-strings-equal", "ContestSlug": "weekly-contest-161", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 161", - "ContestID_zh": "\u7b2c 161 \u573a\u5468\u8d5b" + "ContestID_zh": "第 161 场周赛" }, { "Rating": 1594.2563236049, "ID": 822, "Title": "Card Flipping Game", - "TitleZH": "\u7ffb\u8f6c\u5361\u7247\u6e38\u620f", + "TitleZH": "翻转卡片游戏", "TitleSlug": "card-flipping-game", "ContestSlug": "weekly-contest-81", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u5468\u8d5b" + "ContestID_zh": "第 81 场周赛" }, { "Rating": 1593.8926580448, "ID": 1577, "Title": "Number of Ways Where Square of Number Is Equal to Product of Two Numbers", - "TitleZH": "\u6570\u7684\u5e73\u65b9\u7b49\u4e8e\u4e24\u6570\u4e58\u79ef\u7684\u65b9\u6cd5\u6570", + "TitleZH": "数的平方等于两数乘积的方法数", "TitleSlug": "number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers", "ContestSlug": "weekly-contest-205", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 205", - "ContestID_zh": "\u7b2c 205 \u573a\u5468\u8d5b" + "ContestID_zh": "第 205 场周赛" }, { "Rating": 1591.5492530876, "ID": 930, "Title": "Binary Subarrays With Sum", - "TitleZH": "\u548c\u76f8\u540c\u7684\u4e8c\u5143\u5b50\u6570\u7ec4", + "TitleZH": "和相同的二元子数组", "TitleSlug": "binary-subarrays-with-sum", "ContestSlug": "weekly-contest-108", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 108", - "ContestID_zh": "\u7b2c 108 \u573a\u5468\u8d5b" + "ContestID_zh": "第 108 场周赛" }, { "Rating": 1591.4725328821, "ID": 1286, "Title": "Iterator for Combination", - "TitleZH": "\u5b57\u6bcd\u7ec4\u5408\u8fed\u4ee3\u5668", + "TitleZH": "字母组合迭代器", "TitleSlug": "iterator-for-combination", "ContestSlug": "biweekly-contest-15", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 15", - "ContestID_zh": "\u7b2c 15 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 15 场双周赛" }, { "Rating": 1590.5791055102, "ID": 969, "Title": "Pancake Sorting", - "TitleZH": "\u714e\u997c\u6392\u5e8f", + "TitleZH": "煎饼排序", "TitleSlug": "pancake-sorting", "ContestSlug": "weekly-contest-118", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 118", - "ContestID_zh": "\u7b2c 118 \u573a\u5468\u8d5b" + "ContestID_zh": "第 118 场周赛" }, { "Rating": 1590.547713663, "ID": 1573, "Title": "Number of Ways to Split a String", - "TitleZH": "\u5206\u5272\u5b57\u7b26\u4e32\u7684\u65b9\u6848\u6570", + "TitleZH": "分割字符串的方案数", "TitleSlug": "number-of-ways-to-split-a-string", "ContestSlug": "biweekly-contest-34", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 34", - "ContestID_zh": "\u7b2c 34 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 34 场双周赛" }, { "Rating": 1590.269030833, "ID": 1664, "Title": "Ways to Make a Fair Array", - "TitleZH": "\u751f\u6210\u5e73\u8861\u6570\u7ec4\u7684\u65b9\u6848\u6570", + "TitleZH": "生成平衡数组的方案数", "TitleSlug": "ways-to-make-a-fair-array", "ContestSlug": "weekly-contest-216", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 216", - "ContestID_zh": "\u7b2c 216 \u573a\u5468\u8d5b" + "ContestID_zh": "第 216 场周赛" }, { "Rating": 1590.0883962313, "ID": 893, "Title": "Groups of Special-Equivalent Strings", - "TitleZH": "\u7279\u6b8a\u7b49\u4ef7\u5b57\u7b26\u4e32\u7ec4", + "TitleZH": "特殊等价字符串组", "TitleSlug": "groups-of-special-equivalent-strings", "ContestSlug": "weekly-contest-99", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 99", - "ContestID_zh": "\u7b2c 99 \u573a\u5468\u8d5b" + "ContestID_zh": "第 99 场周赛" }, { "Rating": 1590.0463215721, "ID": 877, "Title": "Stone Game", - "TitleZH": "\u77f3\u5b50\u6e38\u620f", + "TitleZH": "石子游戏", "TitleSlug": "stone-game", "ContestSlug": "weekly-contest-95", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 95", - "ContestID_zh": "\u7b2c 95 \u573a\u5468\u8d5b" + "ContestID_zh": "第 95 场周赛" }, { "Rating": 1588.9690763997, "ID": 1813, "Title": "Sentence Similarity III", - "TitleZH": "\u53e5\u5b50\u76f8\u4f3c\u6027 III", + "TitleZH": "句子相似性 III", "TitleSlug": "sentence-similarity-iii", "ContestSlug": "biweekly-contest-49", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 49", - "ContestID_zh": "\u7b2c 49 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 49 场双周赛" }, { "Rating": 1588.3835994255, "ID": 1764, "Title": "Form Array by Concatenating Subarrays of Another Array", - "TitleZH": "\u901a\u8fc7\u8fde\u63a5\u53e6\u4e00\u4e2a\u6570\u7ec4\u7684\u5b50\u6570\u7ec4\u5f97\u5230\u4e00\u4e2a\u6570\u7ec4", + "TitleZH": "通过连接另一个数组的子数组得到一个数组", "TitleSlug": "form-array-by-concatenating-subarrays-of-another-array", "ContestSlug": "biweekly-contest-46", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 46", - "ContestID_zh": "\u7b2c 46 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 46 场双周赛" }, { "Rating": 1585.5793143983, "ID": 1030, "Title": "Matrix Cells in Distance Order", - "TitleZH": "\u8ddd\u79bb\u987a\u5e8f\u6392\u5217\u77e9\u9635\u5355\u5143\u683c", + "TitleZH": "距离顺序排列矩阵单元格", "TitleSlug": "matrix-cells-in-distance-order", "ContestSlug": "weekly-contest-133", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 133", - "ContestID_zh": "\u7b2c 133 \u573a\u5468\u8d5b" + "ContestID_zh": "第 133 场周赛" }, { "Rating": 1581.4963716166, "ID": 2211, "Title": "Count Collisions on a Road", - "TitleZH": "\u7edf\u8ba1\u9053\u8def\u4e0a\u7684\u78b0\u649e\u6b21\u6570", + "TitleZH": "统计道路上的碰撞次数", "TitleSlug": "count-collisions-on-a-road", "ContestSlug": "weekly-contest-285", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 285", - "ContestID_zh": "\u7b2c 285 \u573a\u5468\u8d5b" + "ContestID_zh": "第 285 场周赛" }, { "Rating": 1580.3620959714, "ID": 1839, "Title": "Longest Substring Of All Vowels in Order", - "TitleZH": "\u6240\u6709\u5143\u97f3\u6309\u987a\u5e8f\u6392\u5e03\u7684\u6700\u957f\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "所有元音按顺序排布的最长子字符串", "TitleSlug": "longest-substring-of-all-vowels-in-order", "ContestSlug": "weekly-contest-238", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 238", - "ContestID_zh": "\u7b2c 238 \u573a\u5468\u8d5b" + "ContestID_zh": "第 238 场周赛" }, { "Rating": 1579.2309881035, "ID": 1743, "Title": "Restore the Array From Adjacent Pairs", - "TitleZH": "\u4ece\u76f8\u90bb\u5143\u7d20\u5bf9\u8fd8\u539f\u6570\u7ec4", + "TitleZH": "从相邻元素对还原数组", "TitleSlug": "restore-the-array-from-adjacent-pairs", "ContestSlug": "weekly-contest-226", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 226", - "ContestID_zh": "\u7b2c 226 \u573a\u5468\u8d5b" + "ContestID_zh": "第 226 场周赛" }, { "Rating": 1578.8503818621, "ID": 1034, "Title": "Coloring A Border", - "TitleZH": "\u8fb9\u6846\u7740\u8272", + "TitleZH": "边框着色", "TitleSlug": "coloring-a-border", "ContestSlug": "weekly-contest-134", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 134", - "ContestID_zh": "\u7b2c 134 \u573a\u5468\u8d5b" + "ContestID_zh": "第 134 场周赛" }, { "Rating": 1577.1141767118, "ID": 2288, "Title": "Apply Discount to Prices", - "TitleZH": "\u4ef7\u683c\u51cf\u514d", + "TitleZH": "价格减免", "TitleSlug": "apply-discount-to-prices", "ContestSlug": "weekly-contest-295", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 295", - "ContestID_zh": "\u7b2c 295 \u573a\u5468\u8d5b" + "ContestID_zh": "第 295 场周赛" }, { "Rating": 1575.6324598387, "ID": 1415, "Title": "The k-th Lexicographical String of All Happy Strings of Length n", - "TitleZH": "\u957f\u5ea6\u4e3a n \u7684\u5f00\u5fc3\u5b57\u7b26\u4e32\u4e2d\u5b57\u5178\u5e8f\u7b2c k \u5c0f\u7684\u5b57\u7b26\u4e32", + "TitleZH": "长度为 n 的开心字符串中字典序第 k 小的字符串", "TitleSlug": "the-k-th-lexicographical-string-of-all-happy-strings-of-length-n", "ContestSlug": "biweekly-contest-24", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 24", - "ContestID_zh": "\u7b2c 24 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 24 场双周赛" }, { "Rating": 1574.7542247682, "ID": 981, "Title": "Time Based Key-Value Store", - "TitleZH": "\u57fa\u4e8e\u65f6\u95f4\u7684\u952e\u503c\u5b58\u50a8", + "TitleZH": "基于时间的键值存储", "TitleSlug": "time-based-key-value-store", "ContestSlug": "weekly-contest-121", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 121", - "ContestID_zh": "\u7b2c 121 \u573a\u5468\u8d5b" + "ContestID_zh": "第 121 场周赛" }, { "Rating": 1574.0392121288, "ID": 1578, "Title": "Minimum Deletion Cost to Avoid Repeating Letters", - "TitleZH": "\u907f\u514d\u91cd\u590d\u5b57\u6bcd\u7684\u6700\u5c0f\u5220\u9664\u6210\u672c", + "TitleZH": "避免重复字母的最小删除成本", "TitleSlug": "minimum-time-to-make-rope-colorful", "ContestSlug": "weekly-contest-205", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 205", - "ContestID_zh": "\u7b2c 205 \u573a\u5468\u8d5b" + "ContestID_zh": "第 205 场周赛" }, { "Rating": 1573.824807946, "ID": 1423, "Title": "Maximum Points You Can Obtain from Cards", - "TitleZH": "\u53ef\u83b7\u5f97\u7684\u6700\u5927\u70b9\u6570", + "TitleZH": "可获得的最大点数", "TitleSlug": "maximum-points-you-can-obtain-from-cards", "ContestSlug": "weekly-contest-186", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 186", - "ContestID_zh": "\u7b2c 186 \u573a\u5468\u8d5b" + "ContestID_zh": "第 186 场周赛" }, { "Rating": 1573.4042963622, "ID": 1268, "Title": "Search Suggestions System", - "TitleZH": "\u641c\u7d22\u63a8\u8350\u7cfb\u7edf", + "TitleZH": "搜索推荐系统", "TitleSlug": "search-suggestions-system", "ContestSlug": "weekly-contest-164", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 164", - "ContestID_zh": "\u7b2c 164 \u573a\u5468\u8d5b" + "ContestID_zh": "第 164 场周赛" }, { "Rating": 1573.2701790739, "ID": 931, "Title": "Minimum Falling Path Sum", - "TitleZH": "\u4e0b\u964d\u8def\u5f84\u6700\u5c0f\u548c", + "TitleZH": "下降路径最小和", "TitleSlug": "minimum-falling-path-sum", "ContestSlug": "weekly-contest-108", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 108", - "ContestID_zh": "\u7b2c 108 \u573a\u5468\u8d5b" + "ContestID_zh": "第 108 场周赛" }, { "Rating": 1571.1721048101, "ID": 779, "Title": "K-th Symbol in Grammar", - "TitleZH": "\u7b2cK\u4e2a\u8bed\u6cd5\u7b26\u53f7", + "TitleZH": "第K个语法符号", "TitleSlug": "k-th-symbol-in-grammar", "ContestSlug": "weekly-contest-70", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u5468\u8d5b" + "ContestID_zh": "第 70 场周赛" }, { "Rating": 1570.8347522104, "ID": 1019, "Title": "Next Greater Node In Linked List", - "TitleZH": "\u94fe\u8868\u4e2d\u7684\u4e0b\u4e00\u4e2a\u66f4\u5927\u8282\u70b9", + "TitleZH": "链表中的下一个更大节点", "TitleSlug": "next-greater-node-in-linked-list", "ContestSlug": "weekly-contest-130", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 130", - "ContestID_zh": "\u7b2c 130 \u573a\u5468\u8d5b" + "ContestID_zh": "第 130 场周赛" }, { "Rating": 1569.7528744586, "ID": 1109, "Title": "Corporate Flight Bookings", - "TitleZH": "\u822a\u73ed\u9884\u8ba2\u7edf\u8ba1", + "TitleZH": "航班预订统计", "TitleSlug": "corporate-flight-bookings", "ContestSlug": "weekly-contest-144", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 144", - "ContestID_zh": "\u7b2c 144 \u573a\u5468\u8d5b" + "ContestID_zh": "第 144 场周赛" }, { "Rating": 1567.6884942977, "ID": 2044, "Title": "Count Number of Maximum Bitwise-OR Subsets", - "TitleZH": "\u7edf\u8ba1\u6309\u4f4d\u6216\u80fd\u5f97\u5230\u6700\u5927\u503c\u7684\u5b50\u96c6\u6570\u76ee", + "TitleZH": "统计按位或能得到最大值的子集数目", "TitleSlug": "count-number-of-maximum-bitwise-or-subsets", "ContestSlug": "weekly-contest-263", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 263", - "ContestID_zh": "\u7b2c 263 \u573a\u5468\u8d5b" + "ContestID_zh": "第 263 场周赛" }, { "Rating": 1566.2526716951, "ID": 769, "Title": "Max Chunks To Make Sorted", - "TitleZH": "\u6700\u591a\u80fd\u5b8c\u6210\u6392\u5e8f\u7684\u5757", + "TitleZH": "最多能完成排序的块", "TitleSlug": "max-chunks-to-make-sorted", "ContestSlug": "weekly-contest-68", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u5468\u8d5b" + "ContestID_zh": "第 68 场周赛" }, { "Rating": 1565.2483424929, "ID": 846, "Title": "Hand of Straights", - "TitleZH": "\u4e00\u624b\u987a\u5b50", + "TitleZH": "一手顺子", "TitleSlug": "hand-of-straights", "ContestSlug": "weekly-contest-87", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u5468\u8d5b" + "ContestID_zh": "第 87 场周赛" }, { "Rating": 1563.9451046163, "ID": 800, "Title": "Similar RGB Color", - "TitleZH": "\u76f8\u4f3c RGB \u989c\u8272", + "TitleZH": "相似 RGB 颜色", "TitleSlug": "similar-rgb-color", "ContestSlug": "weekly-contest-76", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u5468\u8d5b" + "ContestID_zh": "第 76 场周赛" }, { "Rating": 1562.9802666517, "ID": 1008, "Title": "Construct Binary Search Tree from Preorder Traversal", - "TitleZH": "\u524d\u5e8f\u904d\u5386\u6784\u9020\u4e8c\u53c9\u641c\u7d22\u6811", + "TitleZH": "前序遍历构造二叉搜索树", "TitleSlug": "construct-binary-search-tree-from-preorder-traversal", "ContestSlug": "weekly-contest-127", "ProblemIndex": "Q4", "ContestID_en": "Weekly Contest 127", - "ContestID_zh": "\u7b2c 127 \u573a\u5468\u8d5b" + "ContestID_zh": "第 127 场周赛" }, { "Rating": 1562.9186033202, "ID": 1452, "Title": "People Whose List of Favorite Companies Is Not a Subset of Another List", - "TitleZH": "\u6536\u85cf\u6e05\u5355", + "TitleZH": "收藏清单", "TitleSlug": "people-whose-list-of-favorite-companies-is-not-a-subset-of-another-list", "ContestSlug": "weekly-contest-189", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 189", - "ContestID_zh": "\u7b2c 189 \u573a\u5468\u8d5b" + "ContestID_zh": "第 189 场周赛" }, { "Rating": 1562.7212466716, "ID": 856, "Title": "Score of Parentheses", - "TitleZH": "\u62ec\u53f7\u7684\u5206\u6570", + "TitleZH": "括号的分数", "TitleSlug": "score-of-parentheses", "ContestSlug": "weekly-contest-90", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u5468\u8d5b" + "ContestID_zh": "第 90 场周赛" }, { "Rating": 1562.0956544608, "ID": 2409, "Title": "Count Days Spent Together", - "TitleZH": "\u7edf\u8ba1\u5171\u540c\u5ea6\u8fc7\u7684\u65e5\u5b50\u6570", + "TitleZH": "统计共同度过的日子数", "TitleSlug": "count-days-spent-together", "ContestSlug": "biweekly-contest-87", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 87 场双周赛" }, { "Rating": 1561.2655635205, "ID": 1256, "Title": "Encode Number", - "TitleZH": "\u52a0\u5bc6\u6570\u5b57", + "TitleZH": "加密数字", "TitleSlug": "encode-number", "ContestSlug": "biweekly-contest-13", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 13", - "ContestID_zh": "\u7b2c 13 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 13 场双周赛" }, { "Rating": 1561.0553908973, "ID": 1376, "Title": "Time Needed to Inform All Employees", - "TitleZH": "\u901a\u77e5\u6240\u6709\u5458\u5de5\u6240\u9700\u7684\u65f6\u95f4", + "TitleZH": "通知所有员工所需的时间", "TitleSlug": "time-needed-to-inform-all-employees", "ContestSlug": "weekly-contest-179", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 179", - "ContestID_zh": "\u7b2c 179 \u573a\u5468\u8d5b" + "ContestID_zh": "第 179 场周赛" }, { "Rating": 1558.9522968448, "ID": 2310, "Title": "Sum of Numbers With Units Digit K", - "TitleZH": "\u4e2a\u4f4d\u6570\u5b57\u4e3a K \u7684\u6574\u6570\u4e4b\u548c", + "TitleZH": "个位数字为 K 的整数之和", "TitleSlug": "sum-of-numbers-with-units-digit-k", "ContestSlug": "weekly-contest-298", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 298", - "ContestID_zh": "\u7b2c 298 \u573a\u5468\u8d5b" + "ContestID_zh": "第 298 场周赛" }, { "Rating": 1558.7188539503, "ID": 1144, "Title": "Decrease Elements To Make Array Zigzag", - "TitleZH": "\u9012\u51cf\u5143\u7d20\u4f7f\u6570\u7ec4\u5448\u952f\u9f7f\u72b6", + "TitleZH": "递减元素使数组呈锯齿状", "TitleSlug": "decrease-elements-to-make-array-zigzag", "ContestSlug": "weekly-contest-148", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 148", - "ContestID_zh": "\u7b2c 148 \u573a\u5468\u8d5b" + "ContestID_zh": "第 148 场周赛" }, { "Rating": 1558.6880035344, "ID": 1181, "Title": "Before and After Puzzle", - "TitleZH": "\u524d\u540e\u62fc\u63a5", + "TitleZH": "前后拼接", "TitleSlug": "before-and-after-puzzle", "ContestSlug": "biweekly-contest-8", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 8", - "ContestID_zh": "\u7b2c 8 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 8 场双周赛" }, { "Rating": 1558.4971807039, "ID": 1101, "Title": "The Earliest Moment When Everyone Become Friends", - "TitleZH": "\u5f7c\u6b64\u719f\u8bc6\u7684\u6700\u65e9\u65f6\u95f4", + "TitleZH": "彼此熟识的最早时间", "TitleSlug": "the-earliest-moment-when-everyone-become-friends", "ContestSlug": "biweekly-contest-3", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 3", - "ContestID_zh": "\u7b2c 3 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 3 场双周赛" }, { "Rating": 1558.1421869292, "ID": 1243, "Title": "Array Transformation", - "TitleZH": "\u6570\u7ec4\u53d8\u6362", + "TitleZH": "数组变换", "TitleSlug": "array-transformation", "ContestSlug": "biweekly-contest-12", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 12", - "ContestID_zh": "\u7b2c 12 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 12 场双周赛" }, { "Rating": 1557.017055582, "ID": 2007, "Title": "Find Original Array From Doubled Array", - "TitleZH": "\u4ece\u53cc\u500d\u6570\u7ec4\u4e2d\u8fd8\u539f\u539f\u6570\u7ec4", + "TitleZH": "从双倍数组中还原原数组", "TitleSlug": "find-original-array-from-doubled-array", "ContestSlug": "biweekly-contest-61", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 61", - "ContestID_zh": "\u7b2c 61 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 61 场双周赛" }, { "Rating": 1556.8824239708, "ID": 2131, "Title": "Longest Palindrome by Concatenating Two Letter Words", - "TitleZH": "\u8fde\u63a5\u4e24\u5b57\u6bcd\u5355\u8bcd\u5f97\u5230\u7684\u6700\u957f\u56de\u6587\u4e32", + "TitleZH": "连接两字母单词得到的最长回文串", "TitleSlug": "longest-palindrome-by-concatenating-two-letter-words", "ContestSlug": "biweekly-contest-69", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 69 场双周赛" + }, + { + "Rating": 1552.8935571247, + "ID": 2461, + "Title": "Maximum Sum of Distinct Subarrays With Length K", + "TitleZH": "长度为 K 子数组中的最大和", + "TitleSlug": "maximum-sum-of-distinct-subarrays-with-length-k", + "ContestSlug": "weekly-contest-318", + "ProblemIndex": "Q2", + "ContestID_en": "Weekly Contest 318", + "ContestID_zh": "第 318 场周赛" }, { "Rating": 1552.8935571247, @@ -8561,5523 +8594,5534 @@ "Rating": 1550.4297615307, "ID": 2207, "Title": "Maximize Number of Subsequences in a String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u6700\u591a\u6570\u76ee\u7684\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "字符串中最多数目的子字符串", "TitleSlug": "maximize-number-of-subsequences-in-a-string", "ContestSlug": "biweekly-contest-74", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 74 场双周赛" }, { "Rating": 1550.0978082682, "ID": 2208, "Title": "Minimum Operations to Halve Array Sum", - "TitleZH": "\u5c06\u6570\u7ec4\u548c\u51cf\u534a\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "将数组和减半的最少操作次数", "TitleSlug": "minimum-operations-to-halve-array-sum", "ContestSlug": "biweekly-contest-74", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 74 场双周赛" }, { "Rating": 1548.4678056182, "ID": 1329, "Title": "Sort the Matrix Diagonally", - "TitleZH": "\u5c06\u77e9\u9635\u6309\u5bf9\u89d2\u7ebf\u6392\u5e8f", + "TitleZH": "将矩阵按对角线排序", "TitleSlug": "sort-the-matrix-diagonally", "ContestSlug": "biweekly-contest-18", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 18", - "ContestID_zh": "\u7b2c 18 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 18 场双周赛" }, { "Rating": 1548.1751146981, "ID": 2456, "Title": "Most Popular Video Creator", - "TitleZH": "\u6700\u6d41\u884c\u7684\u89c6\u9891\u521b\u4f5c\u8005", + "TitleZH": "最流行的视频创作者", "TitleSlug": "most-popular-video-creator", "ContestSlug": "weekly-contest-317", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 317", - "ContestID_zh": "\u7b2c 317 \u573a\u5468\u8d5b" + "ContestID_zh": "第 317 场周赛" }, { "Rating": 1548.0854419238, "ID": 1599, "Title": "Maximum Profit of Operating a Centennial Wheel", - "TitleZH": "\u7ecf\u8425\u6469\u5929\u8f6e\u7684\u6700\u5927\u5229\u6da6", + "TitleZH": "经营摩天轮的最大利润", "TitleSlug": "maximum-profit-of-operating-a-centennial-wheel", "ContestSlug": "weekly-contest-208", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 208", - "ContestID_zh": "\u7b2c 208 \u573a\u5468\u8d5b" + "ContestID_zh": "第 208 场周赛" }, { "Rating": 1547.5714796512, "ID": 954, "Title": "Array of Doubled Pairs", - "TitleZH": "\u4e8c\u500d\u6570\u5bf9\u6570\u7ec4", + "TitleZH": "二倍数对数组", "TitleSlug": "array-of-doubled-pairs", "ContestSlug": "weekly-contest-114", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 114", - "ContestID_zh": "\u7b2c 114 \u573a\u5468\u8d5b" + "ContestID_zh": "第 114 场周赛" }, { "Rating": 1547.0385279086, "ID": 758, "Title": "Bold Words in String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u7684\u52a0\u7c97\u5355\u8bcd", + "TitleZH": "字符串中的加粗单词", "TitleSlug": "bold-words-in-string", "ContestSlug": "weekly-contest-66", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u5468\u8d5b" + "ContestID_zh": "第 66 场周赛" }, { "Rating": 1544.8391626032, "ID": 1104, "Title": "Path In Zigzag Labelled Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u5bfb\u8def", + "TitleZH": "二叉树寻路", "TitleSlug": "path-in-zigzag-labelled-binary-tree", "ContestSlug": "weekly-contest-143", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 143", - "ContestID_zh": "\u7b2c 143 \u573a\u5468\u8d5b" + "ContestID_zh": "第 143 场周赛" }, { "Rating": 1544.8261365027, "ID": 1233, "Title": "Remove Sub-Folders from the Filesystem", - "TitleZH": "\u5220\u9664\u5b50\u6587\u4ef6\u5939", + "TitleZH": "删除子文件夹", "TitleSlug": "remove-sub-folders-from-the-filesystem", "ContestSlug": "weekly-contest-159", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 159", - "ContestID_zh": "\u7b2c 159 \u573a\u5468\u8d5b" + "ContestID_zh": "第 159 场周赛" }, { "Rating": 1544.6371526659, "ID": 794, "Title": "Valid Tic-Tac-Toe State", - "TitleZH": "\u6709\u6548\u7684\u4e95\u5b57\u6e38\u620f", + "TitleZH": "有效的井字游戏", "TitleSlug": "valid-tic-tac-toe-state", "ContestSlug": "weekly-contest-74", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u5468\u8d5b" + "ContestID_zh": "第 74 场周赛" }, { "Rating": 1542.5630367445, "ID": 812, "Title": "Largest Triangle Area", - "TitleZH": "\u6700\u5927\u4e09\u89d2\u5f62\u9762\u79ef", + "TitleZH": "最大三角形面积", "TitleSlug": "largest-triangle-area", "ContestSlug": "weekly-contest-79", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u5468\u8d5b" + "ContestID_zh": "第 79 场周赛" }, { "Rating": 1541.7840320661, "ID": 1283, "Title": "Find the Smallest Divisor Given a Threshold", - "TitleZH": "\u4f7f\u7ed3\u679c\u4e0d\u8d85\u8fc7\u9608\u503c\u7684\u6700\u5c0f\u9664\u6570", + "TitleZH": "使结果不超过阈值的最小除数", "TitleSlug": "find-the-smallest-divisor-given-a-threshold", "ContestSlug": "weekly-contest-166", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 166", - "ContestID_zh": "\u7b2c 166 \u573a\u5468\u8d5b" + "ContestID_zh": "第 166 场周赛" }, { "Rating": 1541.6944600975, "ID": 986, "Title": "Interval List Intersections", - "TitleZH": "\u533a\u95f4\u5217\u8868\u7684\u4ea4\u96c6", + "TitleZH": "区间列表的交集", "TitleSlug": "interval-list-intersections", "ContestSlug": "weekly-contest-122", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 122", - "ContestID_zh": "\u7b2c 122 \u573a\u5468\u8d5b" + "ContestID_zh": "第 122 场周赛" }, { "Rating": 1541.6176288991, "ID": 1749, "Title": "Maximum Absolute Sum of Any Subarray", - "TitleZH": "\u4efb\u610f\u5b50\u6570\u7ec4\u548c\u7684\u7edd\u5bf9\u503c\u7684\u6700\u5927\u503c", + "TitleZH": "任意子数组和的绝对值的最大值", "TitleSlug": "maximum-absolute-sum-of-any-subarray", "ContestSlug": "biweekly-contest-45", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 45", - "ContestID_zh": "\u7b2c 45 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 45 场双周赛" }, { "Rating": 1541.5405749918, "ID": 1209, "Title": "Remove All Adjacent Duplicates in String II", - "TitleZH": "\u5220\u9664\u5b57\u7b26\u4e32\u4e2d\u7684\u6240\u6709\u76f8\u90bb\u91cd\u590d\u9879 II", + "TitleZH": "删除字符串中的所有相邻重复项 II", "TitleSlug": "remove-all-adjacent-duplicates-in-string-ii", "ContestSlug": "weekly-contest-156", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 156", - "ContestID_zh": "\u7b2c 156 \u573a\u5468\u8d5b" + "ContestID_zh": "第 156 场周赛" }, { "Rating": 1541.348438509, "ID": 1007, "Title": "Minimum Domino Rotations For Equal Row", - "TitleZH": "\u884c\u76f8\u7b49\u7684\u6700\u5c11\u591a\u7c73\u8bfa\u65cb\u8f6c", + "TitleZH": "行相等的最少多米诺旋转", "TitleSlug": "minimum-domino-rotations-for-equal-row", "ContestSlug": "weekly-contest-127", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 127", - "ContestID_zh": "\u7b2c 127 \u573a\u5468\u8d5b" + "ContestID_zh": "第 127 场周赛" }, { "Rating": 1541.2260256298, "ID": 1229, "Title": "Meeting Scheduler", - "TitleZH": "\u5b89\u6392\u4f1a\u8bae\u65e5\u7a0b", + "TitleZH": "安排会议日程", "TitleSlug": "meeting-scheduler", "ContestSlug": "biweekly-contest-11", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 11", - "ContestID_zh": "\u7b2c 11 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 11 场双周赛" }, { "Rating": 1540.5750839091, "ID": 1382, "Title": "Balance a Binary Search Tree", - "TitleZH": "\u5c06\u4e8c\u53c9\u641c\u7d22\u6811\u53d8\u5e73\u8861", + "TitleZH": "将二叉搜索树变平衡", "TitleSlug": "balance-a-binary-search-tree", "ContestSlug": "weekly-contest-180", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 180", - "ContestID_zh": "\u7b2c 180 \u573a\u5468\u8d5b" + "ContestID_zh": "第 180 场周赛" }, { "Rating": 1540.2351411176, "ID": 2349, "Title": "Design a Number Container System", - "TitleZH": "\u8bbe\u8ba1\u6570\u5b57\u5bb9\u5668\u7cfb\u7edf", + "TitleZH": "设计数字容器系统", "TitleSlug": "design-a-number-container-system", "ContestSlug": "biweekly-contest-83", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 83 场双周赛" }, { "Rating": 1539.2250193318, "ID": 1992, "Title": "Find All Groups of Farmland", - "TitleZH": "\u627e\u5230\u6240\u6709\u7684\u519c\u573a\u7ec4", + "TitleZH": "找到所有的农场组", "TitleSlug": "find-all-groups-of-farmland", "ContestSlug": "biweekly-contest-60", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 60", - "ContestID_zh": "\u7b2c 60 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 60 场双周赛" }, { "Rating": 1538.233149704, "ID": 2178, "Title": "Maximum Split of Positive Even Integers", - "TitleZH": "\u62c6\u5206\u6210\u6700\u591a\u6570\u76ee\u7684\u5076\u6574\u6570\u4e4b\u548c", + "TitleZH": "拆分成最多数目的偶整数之和", "TitleSlug": "maximum-split-of-positive-even-integers", "ContestSlug": "biweekly-contest-72", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 72 场双周赛" }, { "Rating": 1537.1387686755, "ID": 1023, "Title": "Camelcase Matching", - "TitleZH": "\u9a7c\u5cf0\u5f0f\u5339\u914d", + "TitleZH": "驼峰式匹配", "TitleSlug": "camelcase-matching", "ContestSlug": "weekly-contest-131", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 131", - "ContestID_zh": "\u7b2c 131 \u573a\u5468\u8d5b" + "ContestID_zh": "第 131 场周赛" }, { "Rating": 1536.7018543075, "ID": 1861, "Title": "Rotating the Box", - "TitleZH": "\u65cb\u8f6c\u76d2\u5b50", + "TitleZH": "旋转盒子", "TitleSlug": "rotating-the-box", "ContestSlug": "biweekly-contest-52", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 52", - "ContestID_zh": "\u7b2c 52 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 52 场双周赛" }, { "Rating": 1534.325005151, "ID": 865, "Title": "Smallest Subtree with all the Deepest Nodes", - "TitleZH": "\u5177\u6709\u6240\u6709\u6700\u6df1\u8282\u70b9\u7684\u6700\u5c0f\u5b50\u6811", + "TitleZH": "具有所有最深节点的最小子树", "TitleSlug": "smallest-subtree-with-all-the-deepest-nodes", "ContestSlug": "weekly-contest-92", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 92", - "ContestID_zh": "\u7b2c 92 \u573a\u5468\u8d5b" + "ContestID_zh": "第 92 场周赛" }, { "Rating": 1534.0648719302, "ID": 1797, "Title": "Design Authentication Manager", - "TitleZH": "\u8bbe\u8ba1\u4e00\u4e2a\u9a8c\u8bc1\u7cfb\u7edf", + "TitleZH": "设计一个验证系统", "TitleSlug": "design-authentication-manager", "ContestSlug": "biweekly-contest-48", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 48", - "ContestID_zh": "\u7b2c 48 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 48 场双周赛" }, { "Rating": 1533.9285875234, "ID": 1362, "Title": "Closest Divisors", - "TitleZH": "\u6700\u63a5\u8fd1\u7684\u56e0\u6570", + "TitleZH": "最接近的因数", "TitleSlug": "closest-divisors", "ContestSlug": "weekly-contest-177", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 177", - "ContestID_zh": "\u7b2c 177 \u573a\u5468\u8d5b" + "ContestID_zh": "第 177 场周赛" }, { "Rating": 1533.3376144199, "ID": 1930, "Title": "Unique Length-3 Palindromic Subsequences", - "TitleZH": "\u957f\u5ea6\u4e3a 3 \u7684\u4e0d\u540c\u56de\u6587\u5b50\u5e8f\u5217", + "TitleZH": "长度为 3 的不同回文子序列", "TitleSlug": "unique-length-3-palindromic-subsequences", "ContestSlug": "weekly-contest-249", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 249", - "ContestID_zh": "\u7b2c 249 \u573a\u5468\u8d5b" + "ContestID_zh": "第 249 场周赛" }, { "Rating": 1532.3349133769, "ID": 2429, "Title": "Minimize XOR", - "TitleZH": "\u6700\u5c0f XOR", + "TitleZH": "最小 XOR", "TitleSlug": "minimize-xor", "ContestSlug": "weekly-contest-313", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 313", - "ContestID_zh": "\u7b2c 313 \u573a\u5468\u8d5b" + "ContestID_zh": "第 313 场周赛" }, { "Rating": 1532.2539947529, "ID": 900, "Title": "RLE Iterator", - "TitleZH": "RLE \u8fed\u4ee3\u5668", + "TitleZH": "RLE 迭代器", "TitleSlug": "rle-iterator", "ContestSlug": "weekly-contest-101", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 101", - "ContestID_zh": "\u7b2c 101 \u573a\u5468\u8d5b" + "ContestID_zh": "第 101 场周赛" }, { "Rating": 1530.495439788, "ID": 1400, "Title": "Construct K Palindrome Strings", - "TitleZH": "\u6784\u9020 K \u4e2a\u56de\u6587\u5b57\u7b26\u4e32", + "TitleZH": "构造 K 个回文字符串", "TitleSlug": "construct-k-palindrome-strings", "ContestSlug": "biweekly-contest-23", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 23", - "ContestID_zh": "\u7b2c 23 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 23 场双周赛" }, { "Rating": 1530.4652027753, "ID": 1657, "Title": "Determine if Two Strings Are Close", - "TitleZH": "\u786e\u5b9a\u4e24\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u63a5\u8fd1", + "TitleZH": "确定两个字符串是否接近", "TitleSlug": "determine-if-two-strings-are-close", "ContestSlug": "weekly-contest-215", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 215", - "ContestID_zh": "\u7b2c 215 \u573a\u5468\u8d5b" + "ContestID_zh": "第 215 场周赛" }, { "Rating": 1530.0343519239, "ID": 1726, "Title": "Tuple with Same Product", - "TitleZH": "\u540c\u79ef\u5143\u7ec4", + "TitleZH": "同积元组", "TitleSlug": "tuple-with-same-product", "ContestSlug": "weekly-contest-224", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 224", - "ContestID_zh": "\u7b2c 224 \u573a\u5468\u8d5b" + "ContestID_zh": "第 224 场周赛" }, { "Rating": 1529.7617243868, "ID": 881, "Title": "Boats to Save People", - "TitleZH": "\u6551\u751f\u8247", + "TitleZH": "救生艇", "TitleSlug": "boats-to-save-people", "ContestSlug": "weekly-contest-96", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 96", - "ContestID_zh": "\u7b2c 96 \u573a\u5468\u8d5b" + "ContestID_zh": "第 96 场周赛" }, { "Rating": 1528.7183829005, "ID": 1695, "Title": "Maximum Erasure Value", - "TitleZH": "\u5220\u9664\u5b50\u6570\u7ec4\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "删除子数组的最大得分", "TitleSlug": "maximum-erasure-value", "ContestSlug": "weekly-contest-220", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 220", - "ContestID_zh": "\u7b2c 220 \u573a\u5468\u8d5b" + "ContestID_zh": "第 220 场周赛" }, { "Rating": 1527.6868660176, "ID": 1921, "Title": "Eliminate Maximum Number of Monsters", - "TitleZH": "\u6d88\u706d\u602a\u7269\u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "消灭怪物的最大数量", "TitleSlug": "eliminate-maximum-number-of-monsters", "ContestSlug": "weekly-contest-248", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 248", - "ContestID_zh": "\u7b2c 248 \u573a\u5468\u8d5b" + "ContestID_zh": "第 248 场周赛" }, { "Rating": 1525.2146106195, "ID": 2201, "Title": "Count Artifacts That Can Be Extracted", - "TitleZH": "\u7edf\u8ba1\u53ef\u4ee5\u63d0\u53d6\u7684\u5de5\u4ef6", + "TitleZH": "统计可以提取的工件", "TitleSlug": "count-artifacts-that-can-be-extracted", "ContestSlug": "weekly-contest-284", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 284", - "ContestID_zh": "\u7b2c 284 \u573a\u5468\u8d5b" + "ContestID_zh": "第 284 场周赛" }, { "Rating": 1524.8218282113, "ID": 1272, "Title": "Remove Interval", - "TitleZH": "\u5220\u9664\u533a\u95f4", + "TitleZH": "删除区间", "TitleSlug": "remove-interval", "ContestSlug": "biweekly-contest-14", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 14", - "ContestID_zh": "\u7b2c 14 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 14 场双周赛" }, { "Rating": 1524.5693481538, "ID": 1442, "Title": "Count Triplets That Can Form Two Arrays of Equal XOR", - "TitleZH": "\u5f62\u6210\u4e24\u4e2a\u5f02\u6216\u76f8\u7b49\u6570\u7ec4\u7684\u4e09\u5143\u7ec4\u6570\u76ee", + "TitleZH": "形成两个异或相等数组的三元组数目", "TitleSlug": "count-triplets-that-can-form-two-arrays-of-equal-xor", "ContestSlug": "weekly-contest-188", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 188", - "ContestID_zh": "\u7b2c 188 \u573a\u5468\u8d5b" + "ContestID_zh": "第 188 场周赛" }, { "Rating": 1524.3227469, "ID": 1640, "Title": "Check Array Formation Through Concatenation", - "TitleZH": "\u80fd\u5426\u8fde\u63a5\u5f62\u6210\u6570\u7ec4", + "TitleZH": "能否连接形成数组", "TitleSlug": "check-array-formation-through-concatenation", "ContestSlug": "weekly-contest-213", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 213", - "ContestID_zh": "\u7b2c 213 \u573a\u5468\u8d5b" + "ContestID_zh": "第 213 场周赛" }, { "Rating": 1523.4113866454, "ID": 1829, "Title": "Maximum XOR for Each Query", - "TitleZH": "\u6bcf\u4e2a\u67e5\u8be2\u7684\u6700\u5927\u5f02\u6216\u503c", + "TitleZH": "每个查询的最大异或值", "TitleSlug": "maximum-xor-for-each-query", "ContestSlug": "biweekly-contest-50", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 50", - "ContestID_zh": "\u7b2c 50 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 50 场双周赛" }, { "Rating": 1521.9977490324, "ID": 1615, "Title": "Maximal Network Rank", - "TitleZH": "\u6700\u5927\u7f51\u7edc\u79e9", + "TitleZH": "最大网络秩", "TitleSlug": "maximal-network-rank", "ContestSlug": "weekly-contest-210", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 210", - "ContestID_zh": "\u7b2c 210 \u573a\u5468\u8d5b" + "ContestID_zh": "第 210 场周赛" }, { "Rating": 1521.7133617698, "ID": 1763, "Title": "Longest Nice Substring", - "TitleZH": "\u6700\u957f\u7684\u7f8e\u597d\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "最长的美好子字符串", "TitleSlug": "longest-nice-substring", "ContestSlug": "biweekly-contest-46", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 46", - "ContestID_zh": "\u7b2c 46 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 46 场双周赛" }, { "Rating": 1521.1768537583, "ID": 1041, "Title": "Robot Bounded In Circle", - "TitleZH": "\u56f0\u4e8e\u73af\u4e2d\u7684\u673a\u5668\u4eba", + "TitleZH": "困于环中的机器人", "TitleSlug": "robot-bounded-in-circle", "ContestSlug": "weekly-contest-136", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 136", - "ContestID_zh": "\u7b2c 136 \u573a\u5468\u8d5b" + "ContestID_zh": "第 136 场周赛" }, { "Rating": 1519.1715594347, "ID": 1641, "Title": "Count Sorted Vowel Strings", - "TitleZH": "\u7edf\u8ba1\u5b57\u5178\u5e8f\u5143\u97f3\u5b57\u7b26\u4e32\u7684\u6570\u76ee", + "TitleZH": "统计字典序元音字符串的数目", "TitleSlug": "count-sorted-vowel-strings", "ContestSlug": "weekly-contest-213", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 213", - "ContestID_zh": "\u7b2c 213 \u573a\u5468\u8d5b" + "ContestID_zh": "第 213 场周赛" }, { "Rating": 1516.8229485853, "ID": 775, "Title": "Global and Local Inversions", - "TitleZH": "\u5168\u5c40\u5012\u7f6e\u4e0e\u5c40\u90e8\u5012\u7f6e", + "TitleZH": "全局倒置与局部倒置", "TitleSlug": "global-and-local-inversions", "ContestSlug": "weekly-contest-69", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u5468\u8d5b" + "ContestID_zh": "第 69 场周赛" }, { "Rating": 1516.4104902196, "ID": 904, "Title": "Fruit Into Baskets", - "TitleZH": "\u6c34\u679c\u6210\u7bee", + "TitleZH": "水果成篮", "TitleSlug": "fruit-into-baskets", "ContestSlug": "weekly-contest-102", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 102", - "ContestID_zh": "\u7b2c 102 \u573a\u5468\u8d5b" + "ContestID_zh": "第 102 场周赛" }, { "Rating": 1514.8181710611, "ID": 1855, "Title": "Maximum Distance Between a Pair of Values", - "TitleZH": "\u4e0b\u6807\u5bf9\u4e2d\u7684\u6700\u5927\u8ddd\u79bb", + "TitleZH": "下标对中的最大距离", "TitleSlug": "maximum-distance-between-a-pair-of-values", "ContestSlug": "weekly-contest-240", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 240", - "ContestID_zh": "\u7b2c 240 \u573a\u5468\u8d5b" + "ContestID_zh": "第 240 场周赛" }, { "Rating": 1512.3323577063, "ID": 1557, "Title": "Minimum Number of Vertices to Reach All Nodes", - "TitleZH": "\u53ef\u4ee5\u5230\u8fbe\u6240\u6709\u70b9\u7684\u6700\u5c11\u70b9\u6570\u76ee", + "TitleZH": "可以到达所有点的最少点数目", "TitleSlug": "minimum-number-of-vertices-to-reach-all-nodes", "ContestSlug": "biweekly-contest-33", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 33", - "ContestID_zh": "\u7b2c 33 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 33 场双周赛" }, { "Rating": 1511.3725353467, "ID": 1110, "Title": "Delete Nodes And Return Forest", - "TitleZH": "\u5220\u70b9\u6210\u6797", + "TitleZH": "删点成林", "TitleSlug": "delete-nodes-and-return-forest", "ContestSlug": "weekly-contest-144", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 144", - "ContestID_zh": "\u7b2c 144 \u573a\u5468\u8d5b" + "ContestID_zh": "第 144 场周赛" }, { "Rating": 1509.5562928491, "ID": 2216, "Title": "Minimum Deletions to Make Array Beautiful", - "TitleZH": "\u7f8e\u5316\u6570\u7ec4\u7684\u6700\u5c11\u5220\u9664\u6570", + "TitleZH": "美化数组的最少删除数", "TitleSlug": "minimum-deletions-to-make-array-beautiful", "ContestSlug": "weekly-contest-286", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 286", - "ContestID_zh": "\u7b2c 286 \u573a\u5468\u8d5b" + "ContestID_zh": "第 286 场周赛" }, { "Rating": 1509.5432131875, "ID": 1647, "Title": "Minimum Deletions to Make Character Frequencies Unique", - "TitleZH": "\u5b57\u7b26\u9891\u6b21\u552f\u4e00\u7684\u6700\u5c0f\u5220\u9664\u6b21\u6570", + "TitleZH": "字符频次唯一的最小删除次数", "TitleSlug": "minimum-deletions-to-make-character-frequencies-unique", "ContestSlug": "weekly-contest-214", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 214", - "ContestID_zh": "\u7b2c 214 \u573a\u5468\u8d5b" + "ContestID_zh": "第 214 场周赛" }, { "Rating": 1508.1169489285, "ID": 1151, "Title": "Minimum Swaps to Group All 1's Together", - "TitleZH": "\u6700\u5c11\u4ea4\u6362\u6b21\u6570\u6765\u7ec4\u5408\u6240\u6709\u7684 1", + "TitleZH": "最少交换次数来组合所有的 1", "TitleSlug": "minimum-swaps-to-group-all-1s-together", "ContestSlug": "biweekly-contest-6", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 6", - "ContestID_zh": "\u7b2c 6 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 6 场双周赛" }, { "Rating": 1508.099765827, "ID": 1496, "Title": "Path Crossing", - "TitleZH": "\u5224\u65ad\u8def\u5f84\u662f\u5426\u76f8\u4ea4", + "TitleZH": "判断路径是否相交", "TitleSlug": "path-crossing", "ContestSlug": "weekly-contest-195", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 195", - "ContestID_zh": "\u7b2c 195 \u573a\u5468\u8d5b" + "ContestID_zh": "第 195 场周赛" }, { "Rating": 1507.8701119064, "ID": 892, "Title": "Surface Area of 3D Shapes", - "TitleZH": "\u4e09\u7ef4\u5f62\u4f53\u7684\u8868\u9762\u79ef", + "TitleZH": "三维形体的表面积", "TitleSlug": "surface-area-of-3d-shapes", "ContestSlug": "weekly-contest-99", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 99", - "ContestID_zh": "\u7b2c 99 \u573a\u5468\u8d5b" + "ContestID_zh": "第 99 场周赛" }, { "Rating": 1507.1617507911, "ID": 2105, "Title": "Watering Plants II", - "TitleZH": "\u7ed9\u690d\u7269\u6d47\u6c34 II", + "TitleZH": "给植物浇水 II", "TitleSlug": "watering-plants-ii", "ContestSlug": "weekly-contest-271", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 271", - "ContestID_zh": "\u7b2c 271 \u573a\u5468\u8d5b" + "ContestID_zh": "第 271 场周赛" }, { "Rating": 1506.8958220609, "ID": 1387, "Title": "Sort Integers by The Power Value", - "TitleZH": "\u5c06\u6574\u6570\u6309\u6743\u91cd\u6392\u5e8f", + "TitleZH": "将整数按权重排序", "TitleSlug": "sort-integers-by-the-power-value", "ContestSlug": "biweekly-contest-22", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 22", - "ContestID_zh": "\u7b2c 22 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 22 场双周赛" }, { "Rating": 1505.8669082864, "ID": 1253, "Title": "Reconstruct a 2-Row Binary Matrix", - "TitleZH": "\u91cd\u6784 2 \u884c\u4e8c\u8fdb\u5236\u77e9\u9635", + "TitleZH": "重构 2 行二进制矩阵", "TitleSlug": "reconstruct-a-2-row-binary-matrix", "ContestSlug": "weekly-contest-162", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 162", - "ContestID_zh": "\u7b2c 162 \u573a\u5468\u8d5b" + "ContestID_zh": "第 162 场周赛" }, { "Rating": 1505.82499953, "ID": 1780, "Title": "Check if Number is a Sum of Powers of Three", - "TitleZH": "\u5224\u65ad\u4e00\u4e2a\u6570\u5b57\u662f\u5426\u53ef\u4ee5\u8868\u793a\u6210\u4e09\u7684\u5e42\u7684\u548c", + "TitleZH": "判断一个数字是否可以表示成三的幂的和", "TitleSlug": "check-if-number-is-a-sum-of-powers-of-three", "ContestSlug": "biweekly-contest-47", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 47", - "ContestID_zh": "\u7b2c 47 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 47 场双周赛" }, { "Rating": 1504.8237159326, "ID": 869, "Title": "Reordered Power of 2", - "TitleZH": "\u91cd\u65b0\u6392\u5e8f\u5f97\u5230 2 \u7684\u5e42", + "TitleZH": "重新排序得到 2 的幂", "TitleSlug": "reordered-power-of-2", "ContestSlug": "weekly-contest-93", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 93", - "ContestID_zh": "\u7b2c 93 \u573a\u5468\u8d5b" + "ContestID_zh": "第 93 场周赛" }, { "Rating": 1504.2133321504, "ID": 2104, "Title": "Sum of Subarray Ranges", - "TitleZH": "\u5b50\u6570\u7ec4\u8303\u56f4\u548c", + "TitleZH": "子数组范围和", "TitleSlug": "sum-of-subarray-ranges", "ContestSlug": "weekly-contest-271", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 271", - "ContestID_zh": "\u7b2c 271 \u573a\u5468\u8d5b" + "ContestID_zh": "第 271 场周赛" }, { "Rating": 1504.0178888667, "ID": 1461, "Title": "Check If a String Contains All Binary Codes of Size K", - "TitleZH": "\u68c0\u67e5\u4e00\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u5305\u542b\u6240\u6709\u957f\u5ea6\u4e3a K \u7684\u4e8c\u8fdb\u5236\u5b50\u4e32", + "TitleZH": "检查一个字符串是否包含所有长度为 K 的二进制子串", "TitleSlug": "check-if-a-string-contains-all-binary-codes-of-size-k", "ContestSlug": "biweekly-contest-27", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 27", - "ContestID_zh": "\u7b2c 27 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 27 场双周赛" }, { "Rating": 1502.5363677723, "ID": 2358, "Title": "Maximum Number of Groups Entering a Competition", - "TitleZH": "\u5206\u7ec4\u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "分组的最大数量", "TitleSlug": "maximum-number-of-groups-entering-a-competition", "ContestSlug": "weekly-contest-304", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 304", - "ContestID_zh": "\u7b2c 304 \u573a\u5468\u8d5b" + "ContestID_zh": "第 304 场周赛" }, { "Rating": 1501.6846714598, "ID": 1750, "Title": "Minimum Length of String After Deleting Similar Ends", - "TitleZH": "\u5220\u9664\u5b57\u7b26\u4e32\u4e24\u7aef\u76f8\u540c\u5b57\u7b26\u540e\u7684\u6700\u77ed\u957f\u5ea6", + "TitleZH": "删除字符串两端相同字符后的最短长度", "TitleSlug": "minimum-length-of-string-after-deleting-similar-ends", "ContestSlug": "biweekly-contest-45", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 45", - "ContestID_zh": "\u7b2c 45 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 45 场双周赛" }, { "Rating": 1501.1152614679, "ID": 1090, "Title": "Largest Values From Labels", - "TitleZH": "\u53d7\u6807\u7b7e\u5f71\u54cd\u7684\u6700\u5927\u503c", + "TitleZH": "受标签影响的最大值", "TitleSlug": "largest-values-from-labels", "ContestSlug": "weekly-contest-141", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 141", - "ContestID_zh": "\u7b2c 141 \u573a\u5468\u8d5b" + "ContestID_zh": "第 141 场周赛" }, { "Rating": 1500.8381829812, "ID": 915, "Title": "Partition Array into Disjoint Intervals", - "TitleZH": "\u5206\u5272\u6570\u7ec4", + "TitleZH": "分割数组", "TitleSlug": "partition-array-into-disjoint-intervals", "ContestSlug": "weekly-contest-104", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 104", - "ContestID_zh": "\u7b2c 104 \u573a\u5468\u8d5b" + "ContestID_zh": "第 104 场周赛" }, { "Rating": 1499.7136257352, "ID": 1525, "Title": "Number of Good Ways to Split a String", - "TitleZH": "\u5b57\u7b26\u4e32\u7684\u597d\u5206\u5272\u6570\u76ee", + "TitleZH": "字符串的好分割数目", "TitleSlug": "number-of-good-ways-to-split-a-string", "ContestSlug": "biweekly-contest-31", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 31", - "ContestID_zh": "\u7b2c 31 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 31 场双周赛" }, { "Rating": 1499.3290269267, "ID": 1968, "Title": "Array With Elements Not Equal to Average of Neighbors", - "TitleZH": "\u6784\u9020\u5143\u7d20\u4e0d\u7b49\u4e8e\u4e24\u76f8\u90bb\u5143\u7d20\u5e73\u5747\u503c\u7684\u6570\u7ec4", + "TitleZH": "构造元素不等于两相邻元素平均值的数组", "TitleSlug": "array-with-elements-not-equal-to-average-of-neighbors", "ContestSlug": "weekly-contest-254", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 254", - "ContestID_zh": "\u7b2c 254 \u573a\u5468\u8d5b" + "ContestID_zh": "第 254 场周赛" }, { "Rating": 1498.1542511841, "ID": 1904, "Title": "The Number of Full Rounds You Have Played", - "TitleZH": "\u4f60\u5b8c\u6210\u7684\u5b8c\u6574\u5bf9\u5c40\u6570", + "TitleZH": "你完成的完整对局数", "TitleSlug": "the-number-of-full-rounds-you-have-played", "ContestSlug": "weekly-contest-246", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 246", - "ContestID_zh": "\u7b2c 246 \u573a\u5468\u8d5b" + "ContestID_zh": "第 246 场周赛" }, { "Rating": 1497.8880991093, "ID": 998, "Title": "Maximum Binary Tree II", - "TitleZH": "\u6700\u5927\u4e8c\u53c9\u6811 II", + "TitleZH": "最大二叉树 II", "TitleSlug": "maximum-binary-tree-ii", "ContestSlug": "weekly-contest-125", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 125", - "ContestID_zh": "\u7b2c 125 \u573a\u5468\u8d5b" + "ContestID_zh": "第 125 场周赛" }, { "Rating": 1496.9128643588, "ID": 1208, "Title": "Get Equal Substrings Within Budget", - "TitleZH": "\u5c3d\u53ef\u80fd\u4f7f\u5b57\u7b26\u4e32\u76f8\u7b49", + "TitleZH": "尽可能使字符串相等", "TitleSlug": "get-equal-substrings-within-budget", "ContestSlug": "weekly-contest-156", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 156", - "ContestID_zh": "\u7b2c 156 \u573a\u5468\u8d5b" + "ContestID_zh": "第 156 场周赛" }, { "Rating": 1496.2502937005, "ID": 2285, "Title": "Maximum Total Importance of Roads", - "TitleZH": "\u9053\u8def\u7684\u6700\u5927\u603b\u91cd\u8981\u6027", + "TitleZH": "道路的最大总重要性", "TitleSlug": "maximum-total-importance-of-roads", "ContestSlug": "biweekly-contest-79", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 79 场双周赛" }, { "Rating": 1496.1462748679, "ID": 2191, "Title": "Sort the Jumbled Numbers", - "TitleZH": "\u5c06\u6742\u4e71\u65e0\u7ae0\u7684\u6570\u5b57\u6392\u5e8f", + "TitleZH": "将杂乱无章的数字排序", "TitleSlug": "sort-the-jumbled-numbers", "ContestSlug": "biweekly-contest-73", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 73 场双周赛" }, { "Rating": 1495.715740828, "ID": 1685, "Title": "Sum of Absolute Differences in a Sorted Array", - "TitleZH": "\u6709\u5e8f\u6570\u7ec4\u4e2d\u5dee\u7edd\u5bf9\u503c\u4e4b\u548c", + "TitleZH": "有序数组中差绝对值之和", "TitleSlug": "sum-of-absolute-differences-in-a-sorted-array", "ContestSlug": "biweekly-contest-41", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 41", - "ContestID_zh": "\u7b2c 41 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 41 场双周赛" }, { "Rating": 1495.5180147817, "ID": 2419, "Title": "Longest Subarray With Maximum Bitwise AND", - "TitleZH": "\u6309\u4f4d\u4e0e\u6700\u5927\u7684\u6700\u957f\u5b50\u6570\u7ec4", + "TitleZH": "按位与最大的最长子数组", "TitleSlug": "longest-subarray-with-maximum-bitwise-and", "ContestSlug": "weekly-contest-312", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 312", - "ContestID_zh": "\u7b2c 312 \u573a\u5468\u8d5b" + "ContestID_zh": "第 312 场周赛" }, { "Rating": 1495.3186477678, "ID": 949, "Title": "Largest Time for Given Digits", - "TitleZH": "\u7ed9\u5b9a\u6570\u5b57\u80fd\u7ec4\u6210\u7684\u6700\u5927\u65f6\u95f4", + "TitleZH": "给定数字能组成的最大时间", "TitleSlug": "largest-time-for-given-digits", "ContestSlug": "weekly-contest-113", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 113", - "ContestID_zh": "\u7b2c 113 \u573a\u5468\u8d5b" + "ContestID_zh": "第 113 场周赛" }, { "Rating": 1491.4638194905, "ID": 1806, "Title": "Minimum Number of Operations to Reinitialize a Permutation", - "TitleZH": "\u8fd8\u539f\u6392\u5217\u7684\u6700\u5c11\u64cd\u4f5c\u6b65\u6570", + "TitleZH": "还原排列的最少操作步数", "TitleSlug": "minimum-number-of-operations-to-reinitialize-a-permutation", "ContestSlug": "weekly-contest-234", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 234", - "ContestID_zh": "\u7b2c 234 \u573a\u5468\u8d5b" + "ContestID_zh": "第 234 场周赛" }, { "Rating": 1490.8990184504, "ID": 1759, "Title": "Count Number of Homogenous Substrings", - "TitleZH": "\u7edf\u8ba1\u540c\u6784\u5b50\u5b57\u7b26\u4e32\u7684\u6570\u76ee", + "TitleZH": "统计同构子字符串的数目", "TitleSlug": "count-number-of-homogenous-substrings", "ContestSlug": "weekly-contest-228", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 228", - "ContestID_zh": "\u7b2c 228 \u573a\u5468\u8d5b" + "ContestID_zh": "第 228 场周赛" }, { "Rating": 1490.2370387981, "ID": 1296, "Title": "Divide Array in Sets of K Consecutive Numbers", - "TitleZH": "\u5212\u5206\u6570\u7ec4\u4e3a\u8fde\u7eed\u6570\u5b57\u7684\u96c6\u5408", + "TitleZH": "划分数组为连续数字的集合", "TitleSlug": "divide-array-in-sets-of-k-consecutive-numbers", "ContestSlug": "weekly-contest-168", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 168", - "ContestID_zh": "\u7b2c 168 \u573a\u5468\u8d5b" + "ContestID_zh": "第 168 场周赛" }, { "Rating": 1489.0102202162, "ID": 1175, "Title": "Prime Arrangements", - "TitleZH": "\u8d28\u6570\u6392\u5217", + "TitleZH": "质数排列", "TitleSlug": "prime-arrangements", "ContestSlug": "weekly-contest-152", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 152", - "ContestID_zh": "\u7b2c 152 \u573a\u5468\u8d5b" + "ContestID_zh": "第 152 场周赛" }, { "Rating": 1487.5826663483, "ID": 1753, "Title": "Maximum Score From Removing Stones", - "TitleZH": "\u79fb\u9664\u77f3\u5b50\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "移除石子的最大得分", "TitleSlug": "maximum-score-from-removing-stones", "ContestSlug": "weekly-contest-227", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 227", - "ContestID_zh": "\u7b2c 227 \u573a\u5468\u8d5b" + "ContestID_zh": "第 227 场周赛" }, { "Rating": 1486.764933431, "ID": 1637, "Title": "Widest Vertical Area Between Two Points Containing No Points", - "TitleZH": "\u4e24\u70b9\u4e4b\u95f4\u4e0d\u5305\u542b\u4efb\u4f55\u70b9\u7684\u6700\u5bbd\u5782\u76f4\u9762\u79ef", + "TitleZH": "两点之间不包含任何点的最宽垂直面积", "TitleSlug": "widest-vertical-area-between-two-points-containing-no-points", "ContestSlug": "biweekly-contest-38", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 38", - "ContestID_zh": "\u7b2c 38 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 38 场双周赛" }, { "Rating": 1486.4687014051, "ID": 1566, "Title": "Detect Pattern of Length M Repeated K or More Times", - "TitleZH": "\u91cd\u590d\u81f3\u5c11 K \u6b21\u4e14\u957f\u5ea6\u4e3a M \u7684\u6a21\u5f0f", + "TitleZH": "重复至少 K 次且长度为 M 的模式", "TitleSlug": "detect-pattern-of-length-m-repeated-k-or-more-times", "ContestSlug": "weekly-contest-204", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 204", - "ContestID_zh": "\u7b2c 204 \u573a\u5468\u8d5b" + "ContestID_zh": "第 204 场周赛" }, { "Rating": 1485.6550472186, "ID": 1190, "Title": "Reverse Substrings Between Each Pair of Parentheses", - "TitleZH": "\u53cd\u8f6c\u6bcf\u5bf9\u62ec\u53f7\u95f4\u7684\u5b50\u4e32", + "TitleZH": "反转每对括号间的子串", "TitleSlug": "reverse-substrings-between-each-pair-of-parentheses", "ContestSlug": "weekly-contest-154", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 154", - "ContestID_zh": "\u7b2c 154 \u573a\u5468\u8d5b" + "ContestID_zh": "第 154 场周赛" }, { "Rating": 1485.135401269, "ID": 1418, "Title": "Display Table of Food Orders in a Restaurant", - "TitleZH": "\u70b9\u83dc\u5c55\u793a\u8868", + "TitleZH": "点菜展示表", "TitleSlug": "display-table-of-food-orders-in-a-restaurant", "ContestSlug": "weekly-contest-185", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 185", - "ContestID_zh": "\u7b2c 185 \u573a\u5468\u8d5b" + "ContestID_zh": "第 185 场周赛" }, { "Rating": 1483.8137189709, "ID": 1314, "Title": "Matrix Block Sum", - "TitleZH": "\u77e9\u9635\u533a\u57df\u548c", + "TitleZH": "矩阵区域和", "TitleSlug": "matrix-block-sum", "ContestSlug": "biweekly-contest-17", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 17", - "ContestID_zh": "\u7b2c 17 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 17 场双周赛" }, { "Rating": 1481.960807786, "ID": 1807, "Title": "Evaluate the Bracket Pairs of a String", - "TitleZH": "\u66ff\u6362\u5b57\u7b26\u4e32\u4e2d\u7684\u62ec\u53f7\u5185\u5bb9", + "TitleZH": "替换字符串中的括号内容", "TitleSlug": "evaluate-the-bracket-pairs-of-a-string", "ContestSlug": "weekly-contest-234", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 234", - "ContestID_zh": "\u7b2c 234 \u573a\u5468\u8d5b" + "ContestID_zh": "第 234 场周赛" }, { "Rating": 1481.5701319876, "ID": 1167, "Title": "Minimum Cost to Connect Sticks", - "TitleZH": "\u8fde\u63a5\u68d2\u6750\u7684\u6700\u4f4e\u8d39\u7528", + "TitleZH": "连接棒材的最低费用", "TitleSlug": "minimum-cost-to-connect-sticks", "ContestSlug": "biweekly-contest-7", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 7", - "ContestID_zh": "\u7b2c 7 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 7 场双周赛" }, { "Rating": 1481.1046340847, "ID": 2380, "Title": "Time Needed to Rearrange a Binary String", - "TitleZH": "\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32\u91cd\u65b0\u5b89\u6392\u987a\u5e8f\u9700\u8981\u7684\u65f6\u95f4", + "TitleZH": "二进制字符串重新安排顺序需要的时间", "TitleSlug": "time-needed-to-rearrange-a-binary-string", "ContestSlug": "biweekly-contest-85", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 85 场双周赛" }, { "Rating": 1480.1116248664, "ID": 1087, "Title": "Brace Expansion", - "TitleZH": "\u82b1\u62ec\u53f7\u5c55\u5f00", + "TitleZH": "花括号展开", "TitleSlug": "brace-expansion", "ContestSlug": "biweekly-contest-2", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 2", - "ContestID_zh": "\u7b2c 2 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 2 场双周赛" }, { "Rating": 1479.4837595809, "ID": 1545, "Title": "Find Kth Bit in Nth Binary String", - "TitleZH": "\u627e\u51fa\u7b2c N \u4e2a\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32\u4e2d\u7684\u7b2c K \u4f4d", + "TitleZH": "找出第 N 个二进制字符串中的第 K 位", "TitleSlug": "find-kth-bit-in-nth-binary-string", "ContestSlug": "weekly-contest-201", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 201", - "ContestID_zh": "\u7b2c 201 \u573a\u5468\u8d5b" + "ContestID_zh": "第 201 场周赛" }, { "Rating": 1479.0110934646, "ID": 1166, "Title": "Design File System", - "TitleZH": "\u8bbe\u8ba1\u6587\u4ef6\u7cfb\u7edf", + "TitleZH": "设计文件系统", "TitleSlug": "design-file-system", "ContestSlug": "biweekly-contest-7", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 7", - "ContestID_zh": "\u7b2c 7 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 7 场双周赛" }, { "Rating": 1478.3848028264, "ID": 1390, "Title": "Four Divisors", - "TitleZH": "\u56db\u56e0\u6570", + "TitleZH": "四因数", "TitleSlug": "four-divisors", "ContestSlug": "weekly-contest-181", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 181", - "ContestID_zh": "\u7b2c 181 \u573a\u5468\u8d5b" + "ContestID_zh": "第 181 场周赛" }, { "Rating": 1477.4844514104, "ID": 951, "Title": "Flip Equivalent Binary Trees", - "TitleZH": "\u7ffb\u8f6c\u7b49\u4ef7\u4e8c\u53c9\u6811", + "TitleZH": "翻转等价二叉树", "TitleSlug": "flip-equivalent-binary-trees", "ContestSlug": "weekly-contest-113", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 113", - "ContestID_zh": "\u7b2c 113 \u573a\u5468\u8d5b" + "ContestID_zh": "第 113 场周赛" }, { "Rating": 1476.9118898539, "ID": 2368, "Title": "Reachable Nodes With Restrictions", - "TitleZH": "\u53d7\u9650\u6761\u4ef6\u4e0b\u53ef\u5230\u8fbe\u8282\u70b9\u7684\u6570\u76ee", + "TitleZH": "受限条件下可到达节点的数目", "TitleSlug": "reachable-nodes-with-restrictions", "ContestSlug": "weekly-contest-305", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 305", - "ContestID_zh": "\u7b2c 305 \u573a\u5468\u8d5b" + "ContestID_zh": "第 305 场周赛" }, { "Rating": 1476.9062320302, "ID": 2300, "Title": "Successful Pairs of Spells and Potions", - "TitleZH": "\u5492\u8bed\u548c\u836f\u6c34\u7684\u6210\u529f\u5bf9\u6570", + "TitleZH": "咒语和药水的成功对数", "TitleSlug": "successful-pairs-of-spells-and-potions", "ContestSlug": "biweekly-contest-80", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 80 场双周赛" }, { "Rating": 1474.0150725665, "ID": 984, "Title": "String Without AAA or BBB", - "TitleZH": "\u4e0d\u542b AAA \u6216 BBB \u7684\u5b57\u7b26\u4e32", + "TitleZH": "不含 AAA 或 BBB 的字符串", "TitleSlug": "string-without-aaa-or-bbb", "ContestSlug": "weekly-contest-121", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 121", - "ContestID_zh": "\u7b2c 121 \u573a\u5468\u8d5b" + "ContestID_zh": "第 121 场周赛" }, { "Rating": 1473.864993045, "ID": 1328, "Title": "Break a Palindrome", - "TitleZH": "\u7834\u574f\u56de\u6587\u4e32", + "TitleZH": "破坏回文串", "TitleSlug": "break-a-palindrome", "ContestSlug": "biweekly-contest-18", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 18", - "ContestID_zh": "\u7b2c 18 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 18 场双周赛" }, { "Rating": 1473.7057465272, "ID": 1352, "Title": "Product of the Last K Numbers", - "TitleZH": "\u6700\u540e K \u4e2a\u6570\u7684\u4e58\u79ef", + "TitleZH": "最后 K 个数的乘积", "TitleSlug": "product-of-the-last-k-numbers", "ContestSlug": "weekly-contest-176", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 176", - "ContestID_zh": "\u7b2c 176 \u573a\u5468\u8d5b" + "ContestID_zh": "第 176 场周赛" }, { "Rating": 1473.2523136772, "ID": 897, "Title": "Increasing Order Search Tree", - "TitleZH": "\u9012\u589e\u987a\u5e8f\u67e5\u627e\u6811", + "TitleZH": "递增顺序查找树", "TitleSlug": "increasing-order-search-tree", "ContestSlug": "weekly-contest-100", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 100", - "ContestID_zh": "\u7b2c 100 \u573a\u5468\u8d5b" + "ContestID_zh": "第 100 场周赛" }, { "Rating": 1472.7864965062, "ID": 2265, "Title": "Count Nodes Equal to Average of Subtree", - "TitleZH": "\u7edf\u8ba1\u503c\u7b49\u4e8e\u5b50\u6811\u5e73\u5747\u503c\u7684\u8282\u70b9\u6570", + "TitleZH": "统计值等于子树平均值的节点数", "TitleSlug": "count-nodes-equal-to-average-of-subtree", "ContestSlug": "weekly-contest-292", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 292", - "ContestID_zh": "\u7b2c 292 \u573a\u5468\u8d5b" + "ContestID_zh": "第 292 场周赛" }, { "Rating": 1471.8964024887, "ID": 2047, "Title": "Number of Valid Words in a Sentence", - "TitleZH": "\u53e5\u5b50\u4e2d\u7684\u6709\u6548\u5355\u8bcd\u6570", + "TitleZH": "句子中的有效单词数", "TitleSlug": "number-of-valid-words-in-a-sentence", "ContestSlug": "weekly-contest-264", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 264", - "ContestID_zh": "\u7b2c 264 \u573a\u5468\u8d5b" + "ContestID_zh": "第 264 场周赛" }, { "Rating": 1471.6221713607, "ID": 1093, "Title": "Statistics from a Large Sample", - "TitleZH": "\u5927\u6837\u672c\u7edf\u8ba1", + "TitleZH": "大样本统计", "TitleSlug": "statistics-from-a-large-sample", "ContestSlug": "weekly-contest-142", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 142", - "ContestID_zh": "\u7b2c 142 \u573a\u5468\u8d5b" + "ContestID_zh": "第 142 场周赛" }, { "Rating": 1467.9366439696, "ID": 2012, "Title": "Sum of Beauty in the Array", - "TitleZH": "\u6570\u7ec4\u7f8e\u4e3d\u503c\u6c42\u548c", + "TitleZH": "数组美丽值求和", "TitleSlug": "sum-of-beauty-in-the-array", "ContestSlug": "weekly-contest-259", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 259", - "ContestID_zh": "\u7b2c 259 \u573a\u5468\u8d5b" + "ContestID_zh": "第 259 场周赛" }, { "Rating": 1467.7383709213, "ID": 2038, "Title": "Remove Colored Pieces if Both Neighbors are the Same Color", - "TitleZH": "\u5982\u679c\u76f8\u90bb\u4e24\u4e2a\u989c\u8272\u5747\u76f8\u540c\u5219\u5220\u9664\u5f53\u524d\u989c\u8272", + "TitleZH": "如果相邻两个颜色均相同则删除当前颜色", "TitleSlug": "remove-colored-pieces-if-both-neighbors-are-the-same-color", "ContestSlug": "biweekly-contest-63", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 63 场双周赛" }, { "Rating": 1465.7023558248, "ID": 1414, "Title": "Find the Minimum Number of Fibonacci Numbers Whose Sum Is K", - "TitleZH": "\u548c\u4e3a K \u7684\u6700\u5c11\u6590\u6ce2\u90a3\u5951\u6570\u5b57\u6570\u76ee", + "TitleZH": "和为 K 的最少斐波那契数字数目", "TitleSlug": "find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k", "ContestSlug": "biweekly-contest-24", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 24", - "ContestID_zh": "\u7b2c 24 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 24 场双周赛" }, { "Rating": 1464.6895034875, "ID": 1361, "Title": "Validate Binary Tree Nodes", - "TitleZH": "\u9a8c\u8bc1\u4e8c\u53c9\u6811", + "TitleZH": "验证二叉树", "TitleSlug": "validate-binary-tree-nodes", "ContestSlug": "weekly-contest-177", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 177", - "ContestID_zh": "\u7b2c 177 \u573a\u5468\u8d5b" + "ContestID_zh": "第 177 场周赛" }, { "Rating": 1464.5254961488, "ID": 1396, "Title": "Design Underground System", - "TitleZH": "\u8bbe\u8ba1\u5730\u94c1\u7cfb\u7edf", + "TitleZH": "设计地铁系统", "TitleSlug": "design-underground-system", "ContestSlug": "weekly-contest-182", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 182", - "ContestID_zh": "\u7b2c 182 \u573a\u5468\u8d5b" + "ContestID_zh": "第 182 场周赛" }, { "Rating": 1462.4423844498, "ID": 1022, "Title": "Sum of Root To Leaf Binary Numbers", - "TitleZH": "\u4ece\u6839\u5230\u53f6\u7684\u4e8c\u8fdb\u5236\u6570\u4e4b\u548c", + "TitleZH": "从根到叶的二进制数之和", "TitleSlug": "sum-of-root-to-leaf-binary-numbers", "ContestSlug": "weekly-contest-131", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 131", - "ContestID_zh": "\u7b2c 131 \u573a\u5468\u8d5b" + "ContestID_zh": "第 131 场周赛" }, { "Rating": 1461.9157715206, "ID": 946, "Title": "Validate Stack Sequences", - "TitleZH": "\u9a8c\u8bc1\u6808\u5e8f\u5217", + "TitleZH": "验证栈序列", "TitleSlug": "validate-stack-sequences", "ContestSlug": "weekly-contest-112", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 112", - "ContestID_zh": "\u7b2c 112 \u573a\u5468\u8d5b" + "ContestID_zh": "第 112 场周赛" }, { "Rating": 1461.2892510067, "ID": 1909, "Title": "Remove One Element to Make the Array Strictly Increasing", - "TitleZH": "\u5220\u9664\u4e00\u4e2a\u5143\u7d20\u4f7f\u6570\u7ec4\u4e25\u683c\u9012\u589e", + "TitleZH": "删除一个元素使数组严格递增", "TitleSlug": "remove-one-element-to-make-the-array-strictly-increasing", "ContestSlug": "biweekly-contest-55", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 55", - "ContestID_zh": "\u7b2c 55 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 55 场双周赛" }, { "Rating": 1460.9610936441, "ID": 833, "Title": "Find And Replace in String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u7684\u67e5\u627e\u4e0e\u66ff\u6362", + "TitleZH": "字符串中的查找与替换", "TitleSlug": "find-and-replace-in-string", "ContestSlug": "weekly-contest-84", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u5468\u8d5b" + "ContestID_zh": "第 84 场周赛" }, { "Rating": 1460.9105672071, "ID": 1910, "Title": "Remove All Occurrences of a Substring", - "TitleZH": "\u5220\u9664\u4e00\u4e2a\u5b57\u7b26\u4e32\u4e2d\u6240\u6709\u51fa\u73b0\u7684\u7ed9\u5b9a\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "删除一个字符串中所有出现的给定子字符串", "TitleSlug": "remove-all-occurrences-of-a-substring", "ContestSlug": "biweekly-contest-55", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 55", - "ContestID_zh": "\u7b2c 55 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 55 场双周赛" }, { "Rating": 1460.5903088359, "ID": 1663, "Title": "Smallest String With A Given Numeric Value", - "TitleZH": "\u5177\u6709\u7ed9\u5b9a\u6570\u503c\u7684\u6700\u5c0f\u5b57\u7b26\u4e32", + "TitleZH": "具有给定数值的最小字符串", "TitleSlug": "smallest-string-with-a-given-numeric-value", "ContestSlug": "weekly-contest-216", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 216", - "ContestID_zh": "\u7b2c 216 \u573a\u5468\u8d5b" + "ContestID_zh": "第 216 场周赛" }, { "Rating": 1459.8208951847, "ID": 1310, "Title": "XOR Queries of a Subarray", - "TitleZH": "\u5b50\u6570\u7ec4\u5f02\u6216\u67e5\u8be2", + "TitleZH": "子数组异或查询", "TitleSlug": "xor-queries-of-a-subarray", "ContestSlug": "weekly-contest-170", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 170", - "ContestID_zh": "\u7b2c 170 \u573a\u5468\u8d5b" + "ContestID_zh": "第 170 场周赛" }, { "Rating": 1459.7513584849, "ID": 2452, "Title": "Words Within Two Edits of Dictionary", - "TitleZH": "\u8ddd\u79bb\u5b57\u5178\u4e24\u6b21\u7f16\u8f91\u4ee5\u5185\u7684\u5355\u8bcd", + "TitleZH": "距离字典两次编辑以内的单词", "TitleSlug": "words-within-two-edits-of-dictionary", "ContestSlug": "biweekly-contest-90", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 90 场双周赛" }, { "Rating": 1458.356493039, "ID": 2062, "Title": "Count Vowel Substrings of a String", - "TitleZH": "\u7edf\u8ba1\u5b57\u7b26\u4e32\u4e2d\u7684\u5143\u97f3\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "统计字符串中的元音子字符串", "TitleSlug": "count-vowel-substrings-of-a-string", "ContestSlug": "weekly-contest-266", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 266", - "ContestID_zh": "\u7b2c 266 \u573a\u5468\u8d5b" + "ContestID_zh": "第 266 场周赛" }, { "Rating": 1455.8516200241, "ID": 2391, "Title": "Minimum Amount of Time to Collect Garbage", - "TitleZH": "\u6536\u96c6\u5783\u573e\u7684\u6700\u5c11\u603b\u65f6\u95f4", + "TitleZH": "收集垃圾的最少总时间", "TitleSlug": "minimum-amount-of-time-to-collect-garbage", "ContestSlug": "weekly-contest-308", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 308", - "ContestID_zh": "\u7b2c 308 \u573a\u5468\u8d5b" + "ContestID_zh": "第 308 场周赛" }, { "Rating": 1454.7459647138, "ID": 2094, "Title": "Finding 3-Digit Even Numbers", - "TitleZH": "\u627e\u51fa 3 \u4f4d\u5076\u6570", + "TitleZH": "找出 3 位偶数", "TitleSlug": "finding-3-digit-even-numbers", "ContestSlug": "weekly-contest-270", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 270", - "ContestID_zh": "\u7b2c 270 \u573a\u5468\u8d5b" + "ContestID_zh": "第 270 场周赛" }, { "Rating": 1454.3901912166, "ID": 1846, "Title": "Maximum Element After Decreasing and Rearranging", - "TitleZH": "\u51cf\u5c0f\u548c\u91cd\u65b0\u6392\u5217\u6570\u7ec4\u540e\u7684\u6700\u5927\u5143\u7d20", + "TitleZH": "减小和重新排列数组后的最大元素", "TitleSlug": "maximum-element-after-decreasing-and-rearranging", "ContestSlug": "biweekly-contest-51", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 51", - "ContestID_zh": "\u7b2c 51 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 51 场双周赛" }, { "Rating": 1453.7818053022, "ID": 1472, "Title": "Design Browser History", - "TitleZH": "\u8bbe\u8ba1\u6d4f\u89c8\u5668\u5386\u53f2\u8bb0\u5f55", + "TitleZH": "设计浏览器历史记录", "TitleSlug": "design-browser-history", "ContestSlug": "weekly-contest-192", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 192", - "ContestID_zh": "\u7b2c 192 \u573a\u5468\u8d5b" + "ContestID_zh": "第 192 场周赛" }, { "Rating": 1453.1833769825, "ID": 781, "Title": "Rabbits in Forest", - "TitleZH": "\u68ee\u6797\u4e2d\u7684\u5154\u5b50", + "TitleZH": "森林中的兔子", "TitleSlug": "rabbits-in-forest", "ContestSlug": "weekly-contest-71", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u5468\u8d5b" + "ContestID_zh": "第 71 场周赛" }, { "Rating": 1450.5787293419, "ID": 831, "Title": "Masking Personal Information", - "TitleZH": "\u9690\u85cf\u4e2a\u4eba\u4fe1\u606f", + "TitleZH": "隐藏个人信息", "TitleSlug": "masking-personal-information", "ContestSlug": "weekly-contest-83", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u5468\u8d5b" + "ContestID_zh": "第 83 场周赛" }, { "Rating": 1448.1207963663, "ID": 945, "Title": "Minimum Increment to Make Array Unique", - "TitleZH": "\u4f7f\u6570\u7ec4\u552f\u4e00\u7684\u6700\u5c0f\u589e\u91cf", + "TitleZH": "使数组唯一的最小增量", "TitleSlug": "minimum-increment-to-make-array-unique", "ContestSlug": "weekly-contest-112", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 112", - "ContestID_zh": "\u7b2c 112 \u573a\u5468\u8d5b" + "ContestID_zh": "第 112 场周赛" }, { "Rating": 1447.0268321102, "ID": 2099, "Title": "Find Subsequence of Length K With the Largest Sum", - "TitleZH": "\u627e\u5230\u548c\u6700\u5927\u7684\u957f\u5ea6\u4e3a K \u7684\u5b50\u5e8f\u5217", + "TitleZH": "找到和最大的长度为 K 的子序列", "TitleSlug": "find-subsequence-of-length-k-with-the-largest-sum", "ContestSlug": "biweekly-contest-67", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 67 场双周赛" }, { "Rating": 1446.4280778775, "ID": 1026, "Title": "Maximum Difference Between Node and Ancestor", - "TitleZH": "\u8282\u70b9\u4e0e\u5176\u7956\u5148\u4e4b\u95f4\u7684\u6700\u5927\u5dee\u503c", + "TitleZH": "节点与其祖先之间的最大差值", "TitleSlug": "maximum-difference-between-node-and-ancestor", "ContestSlug": "weekly-contest-132", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 132", - "ContestID_zh": "\u7b2c 132 \u573a\u5468\u8d5b" + "ContestID_zh": "第 132 场周赛" }, { "Rating": 1445.3734269673, "ID": 1946, "Title": "Largest Number After Mutating Substring", - "TitleZH": "\u5b50\u5b57\u7b26\u4e32\u7a81\u53d8\u540e\u53ef\u80fd\u5f97\u5230\u7684\u6700\u5927\u6574\u6570", + "TitleZH": "子字符串突变后可能得到的最大整数", "TitleSlug": "largest-number-after-mutating-substring", "ContestSlug": "weekly-contest-251", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 251", - "ContestID_zh": "\u7b2c 251 \u573a\u5468\u8d5b" + "ContestID_zh": "第 251 场周赛" }, { "Rating": 1445.1422945604, "ID": 2295, "Title": "Replace Elements in an Array", - "TitleZH": "\u66ff\u6362\u6570\u7ec4\u4e2d\u7684\u5143\u7d20", + "TitleZH": "替换数组中的元素", "TitleSlug": "replace-elements-in-an-array", "ContestSlug": "weekly-contest-296", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 296", - "ContestID_zh": "\u7b2c 296 \u573a\u5468\u8d5b" + "ContestID_zh": "第 296 场周赛" }, { "Rating": 1444.6795731919, "ID": 2028, "Title": "Find Missing Observations", - "TitleZH": "\u627e\u51fa\u7f3a\u5931\u7684\u89c2\u6d4b\u6570\u636e", + "TitleZH": "找出缺失的观测数据", "TitleSlug": "find-missing-observations", "ContestSlug": "weekly-contest-261", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 261", - "ContestID_zh": "\u7b2c 261 \u573a\u5468\u8d5b" + "ContestID_zh": "第 261 场周赛" }, { "Rating": 1444.6098846511, "ID": 1465, "Title": "Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts", - "TitleZH": "\u5207\u5272\u540e\u9762\u79ef\u6700\u5927\u7684\u86cb\u7cd5", + "TitleZH": "切割后面积最大的蛋糕", "TitleSlug": "maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts", "ContestSlug": "weekly-contest-191", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 191", - "ContestID_zh": "\u7b2c 191 \u573a\u5468\u8d5b" + "ContestID_zh": "第 191 场周赛" }, { "Rating": 1444.2068009303, "ID": 942, "Title": "DI String Match", - "TitleZH": "\u589e\u51cf\u5b57\u7b26\u4e32\u5339\u914d", + "TitleZH": "增减字符串匹配", "TitleSlug": "di-string-match", "ContestSlug": "weekly-contest-111", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 111", - "ContestID_zh": "\u7b2c 111 \u573a\u5468\u8d5b" + "ContestID_zh": "第 111 场周赛" }, { "Rating": 1443.2353621969, "ID": 1560, "Title": "Most Visited Sector in a Circular Track", - "TitleZH": "\u5706\u5f62\u8d5b\u9053\u4e0a\u7ecf\u8fc7\u6b21\u6570\u6700\u591a\u7684\u6247\u533a", + "TitleZH": "圆形赛道上经过次数最多的扇区", "TitleSlug": "most-visited-sector-in-a-circular-track", "ContestSlug": "weekly-contest-203", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 203", - "ContestID_zh": "\u7b2c 203 \u573a\u5468\u8d5b" + "ContestID_zh": "第 203 场周赛" }, { "Rating": 1443.0697629277, "ID": 763, "Title": "Partition Labels", - "TitleZH": "\u5212\u5206\u5b57\u6bcd\u533a\u95f4", + "TitleZH": "划分字母区间", "TitleSlug": "partition-labels", "ContestSlug": "weekly-contest-67", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u5468\u8d5b" + "ContestID_zh": "第 67 场周赛" }, { "Rating": 1442.9468304752, "ID": 836, "Title": "Rectangle Overlap", - "TitleZH": "\u77e9\u5f62\u91cd\u53e0", + "TitleZH": "矩形重叠", "TitleSlug": "rectangle-overlap", "ContestSlug": "weekly-contest-85", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u5468\u8d5b" + "ContestID_zh": "第 85 场周赛" }, { "Rating": 1441.4290319373, "ID": 1094, "Title": "Car Pooling", - "TitleZH": "\u62fc\u8f66", + "TitleZH": "拼车", "TitleSlug": "car-pooling", "ContestSlug": "weekly-contest-142", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 142", - "ContestID_zh": "\u7b2c 142 \u573a\u5468\u8d5b" + "ContestID_zh": "第 142 场周赛" }, { "Rating": 1439.5656079032, "ID": 1261, "Title": "Find Elements in a Contaminated Binary Tree", - "TitleZH": "\u5728\u53d7\u6c61\u67d3\u7684\u4e8c\u53c9\u6811\u4e2d\u67e5\u627e\u5143\u7d20", + "TitleZH": "在受污染的二叉树中查找元素", "TitleSlug": "find-elements-in-a-contaminated-binary-tree", "ContestSlug": "weekly-contest-163", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 163", - "ContestID_zh": "\u7b2c 163 \u573a\u5468\u8d5b" + "ContestID_zh": "第 163 场周赛" }, { "Rating": 1438.8988489545, "ID": 1375, "Title": "Bulb Switcher III", - "TitleZH": "\u706f\u6ce1\u5f00\u5173 III", + "TitleZH": "灯泡开关 III", "TitleSlug": "number-of-times-binary-string-is-prefix-aligned", "ContestSlug": "weekly-contest-179", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 179", - "ContestID_zh": "\u7b2c 179 \u573a\u5468\u8d5b" + "ContestID_zh": "第 179 场周赛" }, { "Rating": 1438.223135905, "ID": 1609, "Title": "Even Odd Tree", - "TitleZH": "\u5947\u5076\u6811", + "TitleZH": "奇偶树", "TitleSlug": "even-odd-tree", "ContestSlug": "weekly-contest-209", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 209", - "ContestID_zh": "\u7b2c 209 \u573a\u5468\u8d5b" + "ContestID_zh": "第 209 场周赛" }, { "Rating": 1436.5343999134, "ID": 845, "Title": "Longest Mountain in Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u7684\u6700\u957f\u5c71\u8109", + "TitleZH": "数组中的最长山脉", "TitleSlug": "longest-mountain-in-array", "ContestSlug": "weekly-contest-87", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u5468\u8d5b" + "ContestID_zh": "第 87 场周赛" }, { "Rating": 1436.3892315914, "ID": 1701, "Title": "Average Waiting Time", - "TitleZH": "\u5e73\u5747\u7b49\u5f85\u65f6\u95f4", + "TitleZH": "平均等待时间", "TitleSlug": "average-waiting-time", "ContestSlug": "biweekly-contest-42", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 42", - "ContestID_zh": "\u7b2c 42 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 42 场双周赛" }, { "Rating": 1436.1125054038, "ID": 1433, "Title": "Check If a String Can Break Another String", - "TitleZH": "\u68c0\u67e5\u4e00\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u53ef\u4ee5\u6253\u7834\u53e6\u4e00\u4e2a\u5b57\u7b26\u4e32", + "TitleZH": "检查一个字符串是否可以打破另一个字符串", "TitleSlug": "check-if-a-string-can-break-another-string", "ContestSlug": "biweekly-contest-25", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 25", - "ContestID_zh": "\u7b2c 25 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 25 场双周赛" }, { "Rating": 1435.9559888935, "ID": 2001, "Title": "Number of Pairs of Interchangeable Rectangles", - "TitleZH": "\u53ef\u4e92\u6362\u77e9\u5f62\u7684\u7ec4\u6570", + "TitleZH": "可互换矩形的组数", "TitleSlug": "number-of-pairs-of-interchangeable-rectangles", "ContestSlug": "weekly-contest-258", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 258", - "ContestID_zh": "\u7b2c 258 \u573a\u5468\u8d5b" + "ContestID_zh": "第 258 场周赛" }, { "Rating": 1435.3564963722, "ID": 1025, "Title": "Divisor Game", - "TitleZH": "\u9664\u6570\u535a\u5f08", + "TitleZH": "除数博弈", "TitleSlug": "divisor-game", "ContestSlug": "weekly-contest-132", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 132", - "ContestID_zh": "\u7b2c 132 \u573a\u5468\u8d5b" + "ContestID_zh": "第 132 场周赛" }, { "Rating": 1433.0795554833, "ID": 1535, "Title": "Find the Winner of an Array Game", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u6e38\u620f\u7684\u8d62\u5bb6", + "TitleZH": "找出数组游戏的赢家", "TitleSlug": "find-the-winner-of-an-array-game", "ContestSlug": "weekly-contest-200", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 200", - "ContestID_zh": "\u7b2c 200 \u573a\u5468\u8d5b" + "ContestID_zh": "第 200 场周赛" }, { "Rating": 1432.9593207076, "ID": 967, "Title": "Numbers With Same Consecutive Differences", - "TitleZH": "\u8fde\u7eed\u5dee\u76f8\u540c\u7684\u6570\u5b57", + "TitleZH": "连续差相同的数字", "TitleSlug": "numbers-with-same-consecutive-differences", "ContestSlug": "weekly-contest-117", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 117", - "ContestID_zh": "\u7b2c 117 \u573a\u5468\u8d5b" + "ContestID_zh": "第 117 场周赛" }, { "Rating": 1432.9051050881, "ID": 994, "Title": "Rotting Oranges", - "TitleZH": "\u8150\u70c2\u7684\u6a58\u5b50", + "TitleZH": "腐烂的橘子", "TitleSlug": "rotting-oranges", "ContestSlug": "weekly-contest-124", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 124", - "ContestID_zh": "\u7b2c 124 \u573a\u5468\u8d5b" + "ContestID_zh": "第 124 场周赛" }, { "Rating": 1432.0967926378, "ID": 1785, "Title": "Minimum Elements to Add to Form a Given Sum", - "TitleZH": "\u6784\u6210\u7279\u5b9a\u548c\u9700\u8981\u6dfb\u52a0\u7684\u6700\u5c11\u5143\u7d20", + "TitleZH": "构成特定和需要添加的最少元素", "TitleSlug": "minimum-elements-to-add-to-form-a-given-sum", "ContestSlug": "weekly-contest-231", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 231", - "ContestID_zh": "\u7b2c 231 \u573a\u5468\u8d5b" + "ContestID_zh": "第 231 场周赛" }, { "Rating": 1431.6864980883, "ID": 1170, "Title": "Compare Strings by Frequency of the Smallest Character", - "TitleZH": "\u6bd4\u8f83\u5b57\u7b26\u4e32\u6700\u5c0f\u5b57\u6bcd\u51fa\u73b0\u9891\u6b21", + "TitleZH": "比较字符串最小字母出现频次", "TitleSlug": "compare-strings-by-frequency-of-the-smallest-character", "ContestSlug": "weekly-contest-151", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 151", - "ContestID_zh": "\u7b2c 151 \u573a\u5468\u8d5b" + "ContestID_zh": "第 151 场周赛" }, { "Rating": 1431.0523656241, "ID": 2415, "Title": "Reverse Odd Levels of Binary Tree", - "TitleZH": "\u53cd\u8f6c\u4e8c\u53c9\u6811\u7684\u5947\u6570\u5c42", + "TitleZH": "反转二叉树的奇数层", "TitleSlug": "reverse-odd-levels-of-binary-tree", "ContestSlug": "weekly-contest-311", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 311", - "ContestID_zh": "\u7b2c 311 \u573a\u5468\u8d5b" + "ContestID_zh": "第 311 场周赛" }, { "Rating": 1430.3429533629, "ID": 1636, "Title": "Sort Array by Increasing Frequency", - "TitleZH": "\u6309\u7167\u9891\u7387\u5c06\u6570\u7ec4\u5347\u5e8f\u6392\u5e8f", + "TitleZH": "按照频率将数组升序排序", "TitleSlug": "sort-array-by-increasing-frequency", "ContestSlug": "biweekly-contest-38", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 38", - "ContestID_zh": "\u7b2c 38 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 38 场双周赛" }, { "Rating": 1429.6349292399, "ID": 1357, "Title": "Apply Discount Every n Orders", - "TitleZH": "\u6bcf\u9694 n \u4e2a\u987e\u5ba2\u6253\u6298", + "TitleZH": "每隔 n 个顾客打折", "TitleSlug": "apply-discount-every-n-orders", "ContestSlug": "biweekly-contest-20", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 20", - "ContestID_zh": "\u7b2c 20 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 20 场双周赛" }, { "Rating": 1429.1878389249, "ID": 988, "Title": "Smallest String Starting From Leaf", - "TitleZH": "\u4ece\u53f6\u7ed3\u70b9\u5f00\u59cb\u7684\u6700\u5c0f\u5b57\u7b26\u4e32", + "TitleZH": "从叶结点开始的最小字符串", "TitleSlug": "smallest-string-starting-from-leaf", "ContestSlug": "weekly-contest-122", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 122", - "ContestID_zh": "\u7b2c 122 \u573a\u5468\u8d5b" + "ContestID_zh": "第 122 场周赛" }, { "Rating": 1428.712905903, "ID": 817, "Title": "Linked List Components", - "TitleZH": "\u94fe\u8868\u7ec4\u4ef6", + "TitleZH": "链表组件", "TitleSlug": "linked-list-components", "ContestSlug": "weekly-contest-80", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u5468\u8d5b" + "ContestID_zh": "第 80 场周赛" }, { "Rating": 1428.6729861424, "ID": 1845, "Title": "Seat Reservation Manager", - "TitleZH": "\u5ea7\u4f4d\u9884\u7ea6\u7ba1\u7406\u7cfb\u7edf", + "TitleZH": "座位预约管理系统", "TitleSlug": "seat-reservation-manager", "ContestSlug": "biweekly-contest-51", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 51", - "ContestID_zh": "\u7b2c 51 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 51 场双周赛" }, { "Rating": 1428.1443796872, "ID": 1669, "Title": "Merge In Between Linked Lists", - "TitleZH": "\u5408\u5e76\u4e24\u4e2a\u94fe\u8868", + "TitleZH": "合并两个链表", "TitleSlug": "merge-in-between-linked-lists", "ContestSlug": "biweekly-contest-40", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 40", - "ContestID_zh": "\u7b2c 40 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 40 场双周赛" }, { "Rating": 1427.7906804882, "ID": 1887, "Title": "Reduction Operations to Make the Array Elements Equal", - "TitleZH": "\u4f7f\u6570\u7ec4\u5143\u7d20\u76f8\u7b49\u7684\u51cf\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "使数组元素相等的减少操作次数", "TitleSlug": "reduction-operations-to-make-the-array-elements-equal", "ContestSlug": "weekly-contest-244", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 244", - "ContestID_zh": "\u7b2c 244 \u573a\u5468\u8d5b" + "ContestID_zh": "第 244 场周赛" }, { "Rating": 1426.9800910361, "ID": 2437, "Title": "Number of Valid Clock Times", - "TitleZH": "\u6709\u6548\u65f6\u95f4\u7684\u6570\u76ee", + "TitleZH": "有效时间的数目", "TitleSlug": "number-of-valid-clock-times", "ContestSlug": "biweekly-contest-89", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 89 场双周赛" }, { "Rating": 1426.948379305, "ID": 1315, "Title": "Sum of Nodes with Even-Valued Grandparent", - "TitleZH": "\u7956\u7236\u8282\u70b9\u503c\u4e3a\u5076\u6570\u7684\u8282\u70b9\u548c", + "TitleZH": "祖父节点值为偶数的节点和", "TitleSlug": "sum-of-nodes-with-even-valued-grandparent", "ContestSlug": "biweekly-contest-17", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 17", - "ContestID_zh": "\u7b2c 17 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 17 场双周赛" }, { "Rating": 1426.7384112327, "ID": 1432, "Title": "Max Difference You Can Get From Changing an Integer", - "TitleZH": "\u6539\u53d8\u4e00\u4e2a\u6574\u6570\u80fd\u5f97\u5230\u7684\u6700\u5927\u5dee\u503c", + "TitleZH": "改变一个整数能得到的最大差值", "TitleSlug": "max-difference-you-can-get-from-changing-an-integer", "ContestSlug": "biweekly-contest-25", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 25", - "ContestID_zh": "\u7b2c 25 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 25 场双周赛" }, { "Rating": 1426.7144554733, "ID": 1003, "Title": "Check If Word Is Valid After Substitutions", - "TitleZH": "\u68c0\u67e5\u66ff\u6362\u540e\u7684\u8bcd\u662f\u5426\u6709\u6548", + "TitleZH": "检查替换后的词是否有效", "TitleSlug": "check-if-word-is-valid-after-substitutions", "ContestSlug": "weekly-contest-126", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 126", - "ContestID_zh": "\u7b2c 126 \u573a\u5468\u8d5b" + "ContestID_zh": "第 126 场周赛" }, { "Rating": 1425.9672522649, "ID": 840, "Title": "Magic Squares In Grid", - "TitleZH": "\u77e9\u9635\u4e2d\u7684\u5e7b\u65b9", + "TitleZH": "矩阵中的幻方", "TitleSlug": "magic-squares-in-grid", "ContestSlug": "weekly-contest-86", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u5468\u8d5b" + "ContestID_zh": "第 86 场周赛" }, { "Rating": 1425.3981616639, "ID": 883, "Title": "Projection Area of 3D Shapes", - "TitleZH": "\u4e09\u7ef4\u5f62\u4f53\u6295\u5f71\u9762\u79ef", + "TitleZH": "三维形体投影面积", "TitleSlug": "projection-area-of-3d-shapes", "ContestSlug": "weekly-contest-96", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 96", - "ContestID_zh": "\u7b2c 96 \u573a\u5468\u8d5b" + "ContestID_zh": "第 96 场周赛" }, { "Rating": 1423.5501543781, "ID": 791, "Title": "Custom Sort String", - "TitleZH": "\u81ea\u5b9a\u4e49\u5b57\u7b26\u4e32\u6392\u5e8f", + "TitleZH": "自定义字符串排序", "TitleSlug": "custom-sort-string", "ContestSlug": "weekly-contest-73", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u5468\u8d5b" + "ContestID_zh": "第 73 场周赛" }, { "Rating": 1423.1058649921, "ID": 1333, "Title": "Filter Restaurants by Vegan-Friendly, Price and Distance", - "TitleZH": "\u9910\u5385\u8fc7\u6ee4\u5668", + "TitleZH": "餐厅过滤器", "TitleSlug": "filter-restaurants-by-vegan-friendly-price-and-distance", "ContestSlug": "weekly-contest-173", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 173", - "ContestID_zh": "\u7b2c 173 \u573a\u5468\u8d5b" + "ContestID_zh": "第 173 场周赛" }, { "Rating": 1423.0355763093, "ID": 1493, "Title": "Longest Subarray of 1's After Deleting One Element", - "TitleZH": "\u5220\u6389\u4e00\u4e2a\u5143\u7d20\u4ee5\u540e\u5168\u4e3a 1 \u7684\u6700\u957f\u5b50\u6570\u7ec4", + "TitleZH": "删掉一个元素以后全为 1 的最长子数组", "TitleSlug": "longest-subarray-of-1s-after-deleting-one-element", "ContestSlug": "biweekly-contest-29", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 29", - "ContestID_zh": "\u7b2c 29 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 29 场双周赛" }, { "Rating": 1421.9944676861, "ID": 1630, "Title": "Arithmetic Subarrays", - "TitleZH": "\u7b49\u5dee\u5b50\u6570\u7ec4", + "TitleZH": "等差子数组", "TitleSlug": "arithmetic-subarrays", "ContestSlug": "weekly-contest-212", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 212", - "ContestID_zh": "\u7b2c 212 \u573a\u5468\u8d5b" + "ContestID_zh": "第 212 场周赛" }, { "Rating": 1421.7251191403, "ID": 2326, "Title": "Spiral Matrix IV", - "TitleZH": "\u87ba\u65cb\u77e9\u9635 IV", + "TitleZH": "螺旋矩阵 IV", "TitleSlug": "spiral-matrix-iv", "ContestSlug": "weekly-contest-300", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 300", - "ContestID_zh": "\u7b2c 300 \u573a\u5468\u8d5b" + "ContestID_zh": "第 300 场周赛" }, { "Rating": 1421.6541140049, "ID": 1360, "Title": "Number of Days Between Two Dates", - "TitleZH": "\u65e5\u671f\u4e4b\u95f4\u9694\u51e0\u5929", + "TitleZH": "日期之间隔几天", "TitleSlug": "number-of-days-between-two-dates", "ContestSlug": "weekly-contest-177", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 177", - "ContestID_zh": "\u7b2c 177 \u573a\u5468\u8d5b" + "ContestID_zh": "第 177 场周赛" }, { "Rating": 1421.2624065513, "ID": 1033, "Title": "Moving Stones Until Consecutive", - "TitleZH": "\u79fb\u52a8\u77f3\u5b50\u76f4\u5230\u8fde\u7eed", + "TitleZH": "移动石子直到连续", "TitleSlug": "moving-stones-until-consecutive", "ContestSlug": "weekly-contest-134", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 134", - "ContestID_zh": "\u7b2c 134 \u573a\u5468\u8d5b" + "ContestID_zh": "第 134 场周赛" }, { "Rating": 1418.9758090724, "ID": 2374, "Title": "Node With Highest Edge Score", - "TitleZH": "\u8fb9\u79ef\u5206\u6700\u9ad8\u7684\u8282\u70b9", + "TitleZH": "边积分最高的节点", "TitleSlug": "node-with-highest-edge-score", "ContestSlug": "weekly-contest-306", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 306", - "ContestID_zh": "\u7b2c 306 \u573a\u5468\u8d5b" + "ContestID_zh": "第 306 场周赛" }, { "Rating": 1418.8205349928, "ID": 1656, "Title": "Design an Ordered Stream", - "TitleZH": "\u8bbe\u8ba1\u6709\u5e8f\u6d41", + "TitleZH": "设计有序流", "TitleSlug": "design-an-ordered-stream", "ContestSlug": "weekly-contest-215", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 215", - "ContestID_zh": "\u7b2c 215 \u573a\u5468\u8d5b" + "ContestID_zh": "第 215 场周赛" }, { "Rating": 1418.6847740057, "ID": 1962, "Title": "Remove Stones to Minimize the Total", - "TitleZH": "\u79fb\u9664\u77f3\u5b50\u4f7f\u603b\u6570\u6700\u5c0f", + "TitleZH": "移除石子使总数最小", "TitleSlug": "remove-stones-to-minimize-the-total", "ContestSlug": "weekly-contest-253", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 253", - "ContestID_zh": "\u7b2c 253 \u573a\u5468\u8d5b" + "ContestID_zh": "第 253 场周赛" }, { "Rating": 1418.1401949854, "ID": 1052, "Title": "Grumpy Bookstore Owner", - "TitleZH": "\u7231\u751f\u6c14\u7684\u4e66\u5e97\u8001\u677f", + "TitleZH": "爱生气的书店老板", "TitleSlug": "grumpy-bookstore-owner", "ContestSlug": "weekly-contest-138", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 138", - "ContestID_zh": "\u7b2c 138 \u573a\u5468\u8d5b" + "ContestID_zh": "第 138 场周赛" }, { "Rating": 1417.3934930077, "ID": 2139, "Title": "Minimum Moves to Reach Target Score", - "TitleZH": "\u5f97\u5230\u76ee\u6807\u503c\u7684\u6700\u5c11\u884c\u52a8\u6b21\u6570", + "TitleZH": "得到目标值的最少行动次数", "TitleSlug": "minimum-moves-to-reach-target-score", "ContestSlug": "weekly-contest-276", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 276", - "ContestID_zh": "\u7b2c 276 \u573a\u5468\u8d5b" + "ContestID_zh": "第 276 场周赛" }, { "Rating": 1416.8961009909, "ID": 1652, "Title": "Defuse the Bomb", - "TitleZH": "\u62c6\u70b8\u5f39", + "TitleZH": "拆炸弹", "TitleSlug": "defuse-the-bomb", "ContestSlug": "biweekly-contest-39", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 39", - "ContestID_zh": "\u7b2c 39 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 39 场双周赛" }, { "Rating": 1416.4124723866, "ID": 2294, "Title": "Partition Array Such That Maximum Difference Is K", - "TitleZH": "\u5212\u5206\u6570\u7ec4\u4f7f\u6700\u5927\u5dee\u4e3a K", + "TitleZH": "划分数组使最大差为 K", "TitleSlug": "partition-array-such-that-maximum-difference-is-k", "ContestSlug": "weekly-contest-296", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 296", - "ContestID_zh": "\u7b2c 296 \u573a\u5468\u8d5b" + "ContestID_zh": "第 296 场周赛" }, { "Rating": 1414.4918812526, "ID": 890, "Title": "Find and Replace Pattern", - "TitleZH": "\u67e5\u627e\u548c\u66ff\u6362\u6a21\u5f0f", + "TitleZH": "查找和替换模式", "TitleSlug": "find-and-replace-pattern", "ContestSlug": "weekly-contest-98", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 98", - "ContestID_zh": "\u7b2c 98 \u573a\u5468\u8d5b" + "ContestID_zh": "第 98 场周赛" }, { "Rating": 1414.4351202231, "ID": 1985, "Title": "Find the Kth Largest Integer in the Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u4e2d\u7684\u7b2c K \u5927\u6574\u6570", + "TitleZH": "找出数组中的第 K 大整数", "TitleSlug": "find-the-kth-largest-integer-in-the-array", "ContestSlug": "weekly-contest-256", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 256", - "ContestID_zh": "\u7b2c 256 \u573a\u5468\u8d5b" + "ContestID_zh": "第 256 场周赛" }, { "Rating": 1413.4238697034, "ID": 2383, "Title": "Minimum Hours of Training to Win a Competition", - "TitleZH": "\u8d62\u5f97\u6bd4\u8d5b\u9700\u8981\u7684\u6700\u5c11\u8bad\u7ec3\u65f6\u957f", + "TitleZH": "赢得比赛需要的最少训练时长", "TitleSlug": "minimum-hours-of-training-to-win-a-competition", "ContestSlug": "weekly-contest-307", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 307", - "ContestID_zh": "\u7b2c 307 \u573a\u5468\u8d5b" + "ContestID_zh": "第 307 场周赛" }, { "Rating": 1412.3053230205, "ID": 1823, "Title": "Find the Winner of the Circular Game", - "TitleZH": "\u627e\u51fa\u6e38\u620f\u7684\u83b7\u80dc\u8005", + "TitleZH": "找出游戏的获胜者", "TitleSlug": "find-the-winner-of-the-circular-game", "ContestSlug": "weekly-contest-236", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 236", - "ContestID_zh": "\u7b2c 236 \u573a\u5468\u8d5b" + "ContestID_zh": "第 236 场周赛" }, { "Rating": 1412.2790156634, "ID": 841, "Title": "Keys and Rooms", - "TitleZH": "\u94a5\u5319\u548c\u623f\u95f4", + "TitleZH": "钥匙和房间", "TitleSlug": "keys-and-rooms", "ContestSlug": "weekly-contest-86", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u5468\u8d5b" + "ContestID_zh": "第 86 场周赛" }, { "Rating": 1410.5239927267, "ID": 1138, "Title": "Alphabet Board Path", - "TitleZH": "\u5b57\u6bcd\u677f\u4e0a\u7684\u8def\u5f84", + "TitleZH": "字母板上的路径", "TitleSlug": "alphabet-board-path", "ContestSlug": "weekly-contest-147", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 147", - "ContestID_zh": "\u7b2c 147 \u573a\u5468\u8d5b" + "ContestID_zh": "第 147 场周赛" }, { "Rating": 1408.7923640745, "ID": 1588, "Title": "Sum of All Odd Length Subarrays", - "TitleZH": "\u6240\u6709\u5947\u6570\u957f\u5ea6\u5b50\u6570\u7ec4\u7684\u548c", + "TitleZH": "所有奇数长度子数组的和", "TitleSlug": "sum-of-all-odd-length-subarrays", "ContestSlug": "biweekly-contest-35", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 35", - "ContestID_zh": "\u7b2c 35 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 35 场双周赛" }, { "Rating": 1408.427592417, "ID": 2110, "Title": "Number of Smooth Descent Periods of a Stock", - "TitleZH": "\u80a1\u7968\u5e73\u6ed1\u4e0b\u8dcc\u9636\u6bb5\u7684\u6570\u76ee", + "TitleZH": "股票平滑下跌阶段的数目", "TitleSlug": "number-of-smooth-descent-periods-of-a-stock", "ContestSlug": "weekly-contest-272", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 272", - "ContestID_zh": "\u7b2c 272 \u573a\u5468\u8d5b" + "ContestID_zh": "第 272 场周赛" }, { "Rating": 1407.9870845299, "ID": 1006, "Title": "Clumsy Factorial", - "TitleZH": "\u7b28\u9636\u4e58", + "TitleZH": "笨阶乘", "TitleSlug": "clumsy-factorial", "ContestSlug": "weekly-contest-127", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 127", - "ContestID_zh": "\u7b2c 127 \u573a\u5468\u8d5b" + "ContestID_zh": "第 127 场周赛" }, { "Rating": 1407.5442381391, "ID": 1217, "Title": "Minimum Cost to Move Chips to The Same Position", - "TitleZH": "\u73a9\u7b79\u7801", + "TitleZH": "玩筹码", "TitleSlug": "minimum-cost-to-move-chips-to-the-same-position", "ContestSlug": "weekly-contest-157", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 157", - "ContestID_zh": "\u7b2c 157 \u573a\u5468\u8d5b" + "ContestID_zh": "第 157 场周赛" }, { "Rating": 1407.1322366299, "ID": 1325, "Title": "Delete Leaves With a Given Value", - "TitleZH": "\u5220\u9664\u7ed9\u5b9a\u503c\u7684\u53f6\u5b50\u8282\u70b9", + "TitleZH": "删除给定值的叶子节点", "TitleSlug": "delete-leaves-with-a-given-value", "ContestSlug": "weekly-contest-172", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 172", - "ContestID_zh": "\u7b2c 172 \u573a\u5468\u8d5b" + "ContestID_zh": "第 172 场周赛" }, { "Rating": 1407.0629410799, "ID": 1886, "Title": "Determine Whether Matrix Can Be Obtained By Rotation", - "TitleZH": "\u5224\u65ad\u77e9\u9635\u7ecf\u8f6e\u8f6c\u540e\u662f\u5426\u4e00\u81f4", + "TitleZH": "判断矩阵经轮转后是否一致", "TitleSlug": "determine-whether-matrix-can-be-obtained-by-rotation", "ContestSlug": "weekly-contest-244", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 244", - "ContestID_zh": "\u7b2c 244 \u573a\u5468\u8d5b" + "ContestID_zh": "第 244 场周赛" }, { "Rating": 1406.1279714442, "ID": 2451, "Title": "Odd String Difference", - "TitleZH": "\u5dee\u503c\u6570\u7ec4\u4e0d\u540c\u7684\u5b57\u7b26\u4e32", + "TitleZH": "差值数组不同的字符串", "TitleSlug": "odd-string-difference", "ContestSlug": "biweekly-contest-90", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 90 场双周赛" }, { "Rating": 1405.5786892723, "ID": 1561, "Title": "Maximum Number of Coins You Can Get", - "TitleZH": "\u4f60\u53ef\u4ee5\u83b7\u5f97\u7684\u6700\u5927\u786c\u5e01\u6570\u76ee", + "TitleZH": "你可以获得的最大硬币数目", "TitleSlug": "maximum-number-of-coins-you-can-get", "ContestSlug": "weekly-contest-203", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 203", - "ContestID_zh": "\u7b2c 203 \u573a\u5468\u8d5b" + "ContestID_zh": "第 203 场周赛" }, { "Rating": 1405.4005354401, "ID": 1410, "Title": "HTML Entity Parser", - "TitleZH": "HTML \u5b9e\u4f53\u89e3\u6790\u5668", + "TitleZH": "HTML 实体解析器", "TitleSlug": "html-entity-parser", "ContestSlug": "weekly-contest-184", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 184", - "ContestID_zh": "\u7b2c 184 \u573a\u5468\u8d5b" + "ContestID_zh": "第 184 场周赛" }, { "Rating": 1405.0021415178, "ID": 1457, "Title": "Pseudo-Palindromic Paths in a Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u4e2d\u7684\u4f2a\u56de\u6587\u8def\u5f84", + "TitleZH": "二叉树中的伪回文路径", "TitleSlug": "pseudo-palindromic-paths-in-a-binary-tree", "ContestSlug": "weekly-contest-190", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 190", - "ContestID_zh": "\u7b2c 190 \u573a\u5468\u8d5b" + "ContestID_zh": "第 190 场周赛" }, { "Rating": 1404.7016862187, "ID": 1237, "Title": "Find Positive Integer Solution for a Given Equation", - "TitleZH": "\u627e\u51fa\u7ed9\u5b9a\u65b9\u7a0b\u7684\u6b63\u6574\u6570\u89e3", + "TitleZH": "找出给定方程的正整数解", "TitleSlug": "find-positive-integer-solution-for-a-given-equation", "ContestSlug": "weekly-contest-160", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 160", - "ContestID_zh": "\u7b2c 160 \u573a\u5468\u8d5b" + "ContestID_zh": "第 160 场周赛" }, { "Rating": 1404.1839222, "ID": 1700, "Title": "Number of Students Unable to Eat Lunch", - "TitleZH": "\u65e0\u6cd5\u5403\u5348\u9910\u7684\u5b66\u751f\u6570\u91cf", + "TitleZH": "无法吃午餐的学生数量", "TitleSlug": "number-of-students-unable-to-eat-lunch", "ContestSlug": "biweekly-contest-42", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 42", - "ContestID_zh": "\u7b2c 42 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 42 场双周赛" }, { "Rating": 1402.0863615706, "ID": 1508, "Title": "Range Sum of Sorted Subarray Sums", - "TitleZH": "\u5b50\u6570\u7ec4\u548c\u6392\u5e8f\u540e\u7684\u533a\u95f4\u548c", + "TitleZH": "子数组和排序后的区间和", "TitleSlug": "range-sum-of-sorted-subarray-sums", "ContestSlug": "biweekly-contest-30", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 30", - "ContestID_zh": "\u7b2c 30 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 30 场双周赛" }, { "Rating": 1401.2246983038, "ID": 1198, "Title": "Find Smallest Common Element in All Rows", - "TitleZH": "\u627e\u51fa\u6240\u6709\u884c\u4e2d\u6700\u5c0f\u516c\u5171\u5143\u7d20", + "TitleZH": "找出所有行中最小公共元素", "TitleSlug": "find-smallest-common-element-in-all-rows", "ContestSlug": "biweekly-contest-9", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 9", - "ContestID_zh": "\u7b2c 9 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 9 场双周赛" }, { "Rating": 1399.8468905274, "ID": 2240, "Title": "Number of Ways to Buy Pens and Pencils", - "TitleZH": "\u4e70\u94a2\u7b14\u548c\u94c5\u7b14\u7684\u65b9\u6848\u6570", + "TitleZH": "买钢笔和铅笔的方案数", "TitleSlug": "number-of-ways-to-buy-pens-and-pencils", "ContestSlug": "biweekly-contest-76", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 76 场双周赛" }, { "Rating": 1397.8875115008, "ID": 1071, "Title": "Greatest Common Divisor of Strings", - "TitleZH": "\u5b57\u7b26\u4e32\u7684\u6700\u5927\u516c\u56e0\u5b50", + "TitleZH": "字符串的最大公因子", "TitleSlug": "greatest-common-divisor-of-strings", "ContestSlug": "weekly-contest-139", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 139", - "ContestID_zh": "\u7b2c 139 \u573a\u5468\u8d5b" + "ContestID_zh": "第 139 场周赛" }, { "Rating": 1397.7743198793, "ID": 1176, "Title": "Diet Plan Performance", - "TitleZH": "\u5065\u8eab\u8ba1\u5212\u8bc4\u4f30", + "TitleZH": "健身计划评估", "TitleSlug": "diet-plan-performance", "ContestSlug": "weekly-contest-152", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 152", - "ContestID_zh": "\u7b2c 152 \u573a\u5468\u8d5b" + "ContestID_zh": "第 152 场周赛" }, { "Rating": 1396.8422030812, "ID": 788, "Title": "Rotated Digits", - "TitleZH": "\u65cb\u8f6c\u6570\u5b57", + "TitleZH": "旋转数字", "TitleSlug": "rotated-digits", "ContestSlug": "weekly-contest-73", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u5468\u8d5b" + "ContestID_zh": "第 73 场周赛" }, { "Rating": 1396.5990609759, "ID": 1404, "Title": "Number of Steps to Reduce a Number in Binary Representation to One", - "TitleZH": "\u5c06\u4e8c\u8fdb\u5236\u8868\u793a\u51cf\u5230 1 \u7684\u6b65\u9aa4\u6570", + "TitleZH": "将二进制表示减到 1 的步骤数", "TitleSlug": "number-of-steps-to-reduce-a-number-in-binary-representation-to-one", "ContestSlug": "weekly-contest-183", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 183", - "ContestID_zh": "\u7b2c 183 \u573a\u5468\u8d5b" + "ContestID_zh": "第 183 场周赛" }, { "Rating": 1396.5448074496, "ID": 1306, "Title": "Jump Game III", - "TitleZH": "\u8df3\u8dc3\u6e38\u620f III", + "TitleZH": "跳跃游戏 III", "TitleSlug": "jump-game-iii", "ContestSlug": "weekly-contest-169", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 169", - "ContestID_zh": "\u7b2c 169 \u573a\u5468\u8d5b" + "ContestID_zh": "第 169 场周赛" }, { "Rating": 1396.4853538164, "ID": 944, "Title": "Delete Columns to Make Sorted", - "TitleZH": "\u5220\u5217\u9020\u5e8f", + "TitleZH": "删列造序", "TitleSlug": "delete-columns-to-make-sorted", "ContestSlug": "weekly-contest-111", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 111", - "ContestID_zh": "\u7b2c 111 \u573a\u5468\u8d5b" + "ContestID_zh": "第 111 场周赛" }, { "Rating": 1395.5132479177, "ID": 1668, "Title": "Maximum Repeating Substring", - "TitleZH": "\u6700\u5927\u91cd\u590d\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "最大重复子字符串", "TitleSlug": "maximum-repeating-substring", "ContestSlug": "biweekly-contest-40", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 40", - "ContestID_zh": "\u7b2c 40 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 40 场双周赛" }, { "Rating": 1394.9149882274, "ID": 2256, "Title": "Minimum Average Difference", - "TitleZH": "\u6700\u5c0f\u5e73\u5747\u5dee", + "TitleZH": "最小平均差", "TitleSlug": "minimum-average-difference", "ContestSlug": "biweekly-contest-77", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 77 场双周赛" }, { "Rating": 1393.4123491817, "ID": 978, "Title": "Longest Turbulent Subarray", - "TitleZH": "\u6700\u957f\u6e4d\u6d41\u5b50\u6570\u7ec4", + "TitleZH": "最长湍流子数组", "TitleSlug": "longest-turbulent-subarray", "ContestSlug": "weekly-contest-120", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 120", - "ContestID_zh": "\u7b2c 120 \u573a\u5468\u8d5b" + "ContestID_zh": "第 120 场周赛" }, { "Rating": 1392.6601629182, "ID": 1529, "Title": "Bulb Switcher IV", - "TitleZH": "\u706f\u6ce1\u5f00\u5173 IV", + "TitleZH": "灯泡开关 IV", "TitleSlug": "minimum-suffix-flips", "ContestSlug": "weekly-contest-199", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 199", - "ContestID_zh": "\u7b2c 199 \u573a\u5468\u8d5b" + "ContestID_zh": "第 199 场周赛" }, { "Rating": 1392.0853311911, "ID": 957, "Title": "Prison Cells After N Days", - "TitleZH": "N \u5929\u540e\u7684\u7262\u623f", + "TitleZH": "N 天后的牢房", "TitleSlug": "prison-cells-after-n-days", "ContestSlug": "weekly-contest-115", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 115", - "ContestID_zh": "\u7b2c 115 \u573a\u5468\u8d5b" + "ContestID_zh": "第 115 场周赛" }, { "Rating": 1391.7243180131, "ID": 1222, "Title": "Queens That Can Attack the King", - "TitleZH": "\u53ef\u4ee5\u653b\u51fb\u56fd\u738b\u7684\u7687\u540e", + "TitleZH": "可以攻击国王的皇后", "TitleSlug": "queens-that-can-attack-the-king", "ContestSlug": "weekly-contest-158", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 158", - "ContestID_zh": "\u7b2c 158 \u573a\u5468\u8d5b" + "ContestID_zh": "第 158 场周赛" }, { "Rating": 1390.5023027273, "ID": 2155, "Title": "All Divisions With the Highest Score of a Binary Array", - "TitleZH": "\u5206\u7ec4\u5f97\u5206\u6700\u9ad8\u7684\u6240\u6709\u4e0b\u6807", + "TitleZH": "分组得分最高的所有下标", "TitleSlug": "all-divisions-with-the-highest-score-of-a-binary-array", "ContestSlug": "weekly-contest-278", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 278", - "ContestID_zh": "\u7b2c 278 \u573a\u5468\u8d5b" + "ContestID_zh": "第 278 场周赛" }, { "Rating": 1389.331169471, "ID": 1065, "Title": "Index Pairs of a String", - "TitleZH": "\u5b57\u7b26\u4e32\u7684\u7d22\u5f15\u5bf9", + "TitleZH": "字符串的索引对", "TitleSlug": "index-pairs-of-a-string", "ContestSlug": "biweekly-contest-1", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 1", - "ContestID_zh": "\u7b2c 1 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 1 场双周赛" }, { "Rating": 1389.0328392117, "ID": 1214, "Title": "Two Sum BSTs", - "TitleZH": "\u67e5\u627e\u4e24\u68f5\u4e8c\u53c9\u641c\u7d22\u6811\u4e4b\u548c", + "TitleZH": "查找两棵二叉搜索树之和", "TitleSlug": "two-sum-bsts", "ContestSlug": "biweekly-contest-10", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 10", - "ContestID_zh": "\u7b2c 10 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 10 场双周赛" }, { "Rating": 1387.9431104106, "ID": 1302, "Title": "Deepest Leaves Sum", - "TitleZH": "\u5c42\u6570\u6700\u6df1\u53f6\u5b50\u8282\u70b9\u7684\u548c", + "TitleZH": "层数最深叶子节点的和", "TitleSlug": "deepest-leaves-sum", "ContestSlug": "biweekly-contest-16", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 16", - "ContestID_zh": "\u7b2c 16 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 16 场双周赛" }, { "Rating": 1387.7347071166, "ID": 2389, "Title": "Longest Subsequence With Limited Sum", - "TitleZH": "\u548c\u6709\u9650\u7684\u6700\u957f\u5b50\u5e8f\u5217", + "TitleZH": "和有限的最长子序列", "TitleSlug": "longest-subsequence-with-limited-sum", "ContestSlug": "weekly-contest-308", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 308", - "ContestID_zh": "\u7b2c 308 \u573a\u5468\u8d5b" + "ContestID_zh": "第 308 场周赛" }, { "Rating": 1387.3672639293, "ID": 937, "Title": "Reorder Data in Log Files", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u65e5\u5fd7\u6587\u4ef6", + "TitleZH": "重新排列日志文件", "TitleSlug": "reorder-data-in-log-files", "ContestSlug": "weekly-contest-110", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 110", - "ContestID_zh": "\u7b2c 110 \u573a\u5468\u8d5b" + "ContestID_zh": "第 110 场周赛" }, { "Rating": 1387.2941868867, "ID": 1860, "Title": "Incremental Memory Leak", - "TitleZH": "\u589e\u957f\u7684\u5185\u5b58\u6cc4\u9732", + "TitleZH": "增长的内存泄露", "TitleSlug": "incremental-memory-leak", "ContestSlug": "biweekly-contest-52", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 52", - "ContestID_zh": "\u7b2c 52 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 52 场双周赛" }, { "Rating": 1386.9203620297, "ID": 1721, "Title": "Swapping Nodes in a Linked List", - "TitleZH": "\u4ea4\u6362\u94fe\u8868\u4e2d\u7684\u8282\u70b9", + "TitleZH": "交换链表中的节点", "TitleSlug": "swapping-nodes-in-a-linked-list", "ContestSlug": "weekly-contest-223", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 223", - "ContestID_zh": "\u7b2c 223 \u573a\u5468\u8d5b" + "ContestID_zh": "第 223 场周赛" }, { "Rating": 1386.3256313989, "ID": 1276, "Title": "Number of Burgers with No Waste of Ingredients", - "TitleZH": "\u4e0d\u6d6a\u8d39\u539f\u6599\u7684\u6c49\u5821\u5236\u4f5c\u65b9\u6848", + "TitleZH": "不浪费原料的汉堡制作方案", "TitleSlug": "number-of-burgers-with-no-waste-of-ingredients", "ContestSlug": "weekly-contest-165", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 165", - "ContestID_zh": "\u7b2c 165 \u573a\u5468\u8d5b" + "ContestID_zh": "第 165 场周赛" }, { "Rating": 1384.4078082338, "ID": 1271, "Title": "Hexspeak", - "TitleZH": "\u5341\u516d\u8fdb\u5236\u9b54\u672f\u6570\u5b57", + "TitleZH": "十六进制魔术数字", "TitleSlug": "hexspeak", "ContestSlug": "biweekly-contest-14", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 14", - "ContestID_zh": "\u7b2c 14 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 14 场双周赛" }, { "Rating": 1384.0226911434, "ID": 2091, "Title": "Removing Minimum and Maximum From Array", - "TitleZH": "\u4ece\u6570\u7ec4\u4e2d\u79fb\u9664\u6700\u5927\u503c\u548c\u6700\u5c0f\u503c", + "TitleZH": "从数组中移除最大值和最小值", "TitleSlug": "removing-minimum-and-maximum-from-array", "ContestSlug": "weekly-contest-269", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 269", - "ContestID_zh": "\u7b2c 269 \u573a\u5468\u8d5b" + "ContestID_zh": "第 269 场周赛" }, { "Rating": 1383.4424411643, "ID": 762, "Title": "Prime Number of Set Bits in Binary Representation", - "TitleZH": "\u4e8c\u8fdb\u5236\u8868\u793a\u4e2d\u8d28\u6570\u4e2a\u8ba1\u7b97\u7f6e\u4f4d", + "TitleZH": "二进制表示中质数个计算置位", "TitleSlug": "prime-number-of-set-bits-in-binary-representation", "ContestSlug": "weekly-contest-67", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 67", - "ContestID_zh": "\u7b2c 67 \u573a\u5468\u8d5b" + "ContestID_zh": "第 67 场周赛" }, { "Rating": 1382.760607823, "ID": 1318, "Title": "Minimum Flips to Make a OR b Equal to c", - "TitleZH": "\u6216\u8fd0\u7b97\u7684\u6700\u5c0f\u7ffb\u8f6c\u6b21\u6570", + "TitleZH": "或运算的最小翻转次数", "TitleSlug": "minimum-flips-to-make-a-or-b-equal-to-c", "ContestSlug": "weekly-contest-171", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 171", - "ContestID_zh": "\u7b2c 171 \u573a\u5468\u8d5b" + "ContestID_zh": "第 171 场周赛" }, { "Rating": 1382.7178688716, "ID": 849, "Title": "Maximize Distance to Closest Person", - "TitleZH": "\u5230\u6700\u8fd1\u7684\u4eba\u7684\u6700\u5927\u8ddd\u79bb", + "TitleZH": "到最近的人的最大距离", "TitleSlug": "maximize-distance-to-closest-person", "ContestSlug": "weekly-contest-88", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u5468\u8d5b" + "ContestID_zh": "第 88 场周赛" }, { "Rating": 1382.5129151601, "ID": 797, "Title": "All Paths From Source to Target", - "TitleZH": "\u6240\u6709\u53ef\u80fd\u7684\u8def\u5f84", + "TitleZH": "所有可能的路径", "TitleSlug": "all-paths-from-source-to-target", "ContestSlug": "weekly-contest-75", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u5468\u8d5b" + "ContestID_zh": "第 75 场周赛" }, { "Rating": 1382.4809893713, "ID": 1185, "Title": "Day of the Week", - "TitleZH": "\u4e00\u5468\u4e2d\u7684\u7b2c\u51e0\u5929", + "TitleZH": "一周中的第几天", "TitleSlug": "day-of-the-week", "ContestSlug": "weekly-contest-153", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 153", - "ContestID_zh": "\u7b2c 153 \u573a\u5468\u8d5b" + "ContestID_zh": "第 153 场周赛" }, { "Rating": 1381.2168789318, "ID": 1881, "Title": "Maximum Value after Insertion", - "TitleZH": "\u63d2\u5165\u540e\u7684\u6700\u5927\u503c", + "TitleZH": "插入后的最大值", "TitleSlug": "maximum-value-after-insertion", "ContestSlug": "weekly-contest-243", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 243", - "ContestID_zh": "\u7b2c 243 \u573a\u5468\u8d5b" + "ContestID_zh": "第 243 场周赛" }, { "Rating": 1381.0888968455, "ID": 2410, "Title": "Maximum Matching of Players With Trainers", - "TitleZH": "\u8fd0\u52a8\u5458\u548c\u8bad\u7ec3\u5e08\u7684\u6700\u5927\u5339\u914d\u6570", + "TitleZH": "运动员和训练师的最大匹配数", "TitleSlug": "maximum-matching-of-players-with-trainers", "ContestSlug": "biweekly-contest-87", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 87 场双周赛" }, { "Rating": 1380.1541980647, "ID": 814, "Title": "Binary Tree Pruning", - "TitleZH": "\u4e8c\u53c9\u6811\u526a\u679d", + "TitleZH": "二叉树剪枝", "TitleSlug": "binary-tree-pruning", "ContestSlug": "weekly-contest-79", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u5468\u8d5b" + "ContestID_zh": "第 79 场周赛" }, { "Rating": 1380.0192844155, "ID": 1828, "Title": "Queries on Number of Points Inside a Circle", - "TitleZH": "\u7edf\u8ba1\u4e00\u4e2a\u5706\u4e2d\u70b9\u7684\u6570\u76ee", + "TitleZH": "统计一个圆中点的数目", "TitleSlug": "queries-on-number-of-points-inside-a-circle", "ContestSlug": "biweekly-contest-50", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 50", - "ContestID_zh": "\u7b2c 50 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 50 场双周赛" }, { "Rating": 1379.8787648129, "ID": 2120, "Title": "Execution of All Suffix Instructions Staying in a Grid", - "TitleZH": "\u6267\u884c\u6240\u6709\u540e\u7f00\u6307\u4ee4", + "TitleZH": "执行所有后缀指令", "TitleSlug": "execution-of-all-suffix-instructions-staying-in-a-grid", "ContestSlug": "weekly-contest-273", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 273", - "ContestID_zh": "\u7b2c 273 \u573a\u5468\u8d5b" + "ContestID_zh": "第 273 场周赛" }, { "Rating": 1378.7570411077, "ID": 1013, "Title": "Partition Array Into Three Parts With Equal Sum", - "TitleZH": "\u5c06\u6570\u7ec4\u5206\u6210\u548c\u76f8\u7b49\u7684\u4e09\u4e2a\u90e8\u5206", + "TitleZH": "将数组分成和相等的三个部分", "TitleSlug": "partition-array-into-three-parts-with-equal-sum", "ContestSlug": "weekly-contest-129", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 129", - "ContestID_zh": "\u7b2c 129 \u573a\u5468\u8d5b" + "ContestID_zh": "第 129 场周赛" }, { "Rating": 1377.6120218199, "ID": 811, "Title": "Subdomain Visit Count", - "TitleZH": "\u5b50\u57df\u540d\u8bbf\u95ee\u8ba1\u6570", + "TitleZH": "子域名访问计数", "TitleSlug": "subdomain-visit-count", "ContestSlug": "weekly-contest-78", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u5468\u8d5b" + "ContestID_zh": "第 78 场周赛" }, { "Rating": 1377.1913915125, "ID": 1010, "Title": "Pairs of Songs With Total Durations Divisible by 60", - "TitleZH": "\u603b\u6301\u7eed\u65f6\u95f4\u53ef\u88ab 60 \u6574\u9664\u7684\u6b4c\u66f2", + "TitleZH": "总持续时间可被 60 整除的歌曲", "TitleSlug": "pairs-of-songs-with-total-durations-divisible-by-60", "ContestSlug": "weekly-contest-128", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 128", - "ContestID_zh": "\u7b2c 128 \u573a\u5468\u8d5b" + "ContestID_zh": "第 128 场周赛" }, { "Rating": 1376.4549624575, "ID": 1018, "Title": "Binary Prefix Divisible By 5", - "TitleZH": "\u53ef\u88ab 5 \u6574\u9664\u7684\u4e8c\u8fdb\u5236\u524d\u7f00", + "TitleZH": "可被 5 整除的二进制前缀", "TitleSlug": "binary-prefix-divisible-by-5", "ContestSlug": "weekly-contest-130", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 130", - "ContestID_zh": "\u7b2c 130 \u573a\u5468\u8d5b" + "ContestID_zh": "第 130 场周赛" }, { "Rating": 1376.2600892096, "ID": 807, "Title": "Max Increase to Keep City Skyline", - "TitleZH": "\u4fdd\u6301\u57ce\u5e02\u5929\u9645\u7ebf", + "TitleZH": "保持城市天际线", "TitleSlug": "max-increase-to-keep-city-skyline", "ContestSlug": "weekly-contest-77", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u5468\u8d5b" + "ContestID_zh": "第 77 场周赛" }, { "Rating": 1376.0047008182, "ID": 2443, "Title": "Sum of Number and Its Reverse", - "TitleZH": "\u53cd\u8f6c\u4e4b\u540e\u7684\u6570\u5b57\u548c", + "TitleZH": "反转之后的数字和", "TitleSlug": "sum-of-number-and-its-reverse", "ContestSlug": "weekly-contest-315", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 315", - "ContestID_zh": "\u7b2c 315 \u573a\u5468\u8d5b" + "ContestID_zh": "第 315 场周赛" }, { "Rating": 1375.0376362104, "ID": 2336, "Title": "Smallest Number in Infinite Set", - "TitleZH": "\u65e0\u9650\u96c6\u4e2d\u7684\u6700\u5c0f\u6570\u5b57", + "TitleZH": "无限集中的最小数字", "TitleSlug": "smallest-number-in-infinite-set", "ContestSlug": "weekly-contest-301", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 301", - "ContestID_zh": "\u7b2c 301 \u573a\u5468\u8d5b" + "ContestID_zh": "第 301 场周赛" }, { "Rating": 1375.0234414965, "ID": 1288, "Title": "Remove Covered Intervals", - "TitleZH": "\u5220\u9664\u88ab\u8986\u76d6\u533a\u95f4", + "TitleZH": "删除被覆盖区间", "TitleSlug": "remove-covered-intervals", "ContestSlug": "biweekly-contest-15", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 15", - "ContestID_zh": "\u7b2c 15 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 15 场双周赛" }, { "Rating": 1374.6755455786, "ID": 1038, "Title": "Binary Search Tree to Greater Sum Tree", - "TitleZH": "\u628a\u4e8c\u53c9\u641c\u7d22\u6811\u8f6c\u6362\u4e3a\u7d2f\u52a0\u6811", + "TitleZH": "把二叉搜索树转换为累加树", "TitleSlug": "binary-search-tree-to-greater-sum-tree", "ContestSlug": "weekly-contest-135", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 135", - "ContestID_zh": "\u7b2c 135 \u573a\u5468\u8d5b" + "ContestID_zh": "第 135 场周赛" }, { "Rating": 1374.574900311, "ID": 1267, "Title": "Count Servers that Communicate", - "TitleZH": "\u7edf\u8ba1\u53c2\u4e0e\u901a\u4fe1\u7684\u670d\u52a1\u5668", + "TitleZH": "统计参与通信的服务器", "TitleSlug": "count-servers-that-communicate", "ContestSlug": "weekly-contest-164", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 164", - "ContestID_zh": "\u7b2c 164 \u573a\u5468\u8d5b" + "ContestID_zh": "第 164 场周赛" }, { "Rating": 1374.3549007913, "ID": 1619, "Title": "Mean of Array After Removing Some Elements", - "TitleZH": "\u5220\u9664\u67d0\u4e9b\u5143\u7d20\u540e\u7684\u6570\u7ec4\u5747\u503c", + "TitleZH": "删除某些元素后的数组均值", "TitleSlug": "mean-of-array-after-removing-some-elements", "ContestSlug": "biweekly-contest-37", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 37", - "ContestID_zh": "\u7b2c 37 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 37 场双周赛" }, { "Rating": 1373.8113453501, "ID": 1291, "Title": "Sequential Digits", - "TitleZH": "\u987a\u6b21\u6570", + "TitleZH": "顺次数", "TitleSlug": "sequential-digits", "ContestSlug": "weekly-contest-167", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 167", - "ContestID_zh": "\u7b2c 167 \u573a\u5468\u8d5b" + "ContestID_zh": "第 167 场周赛" }, { "Rating": 1372.7398808669, "ID": 748, "Title": "Shortest Completing Word", - "TitleZH": "\u6700\u77ed\u8865\u5168\u8bcd", + "TitleZH": "最短补全词", "TitleSlug": "shortest-completing-word", "ContestSlug": "weekly-contest-63", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u5468\u8d5b" + "ContestID_zh": "第 63 场周赛" }, { "Rating": 1372.1152262488, "ID": 1863, "Title": "Sum of All Subset XOR Totals", - "TitleZH": "\u627e\u51fa\u6240\u6709\u5b50\u96c6\u7684\u5f02\u6216\u603b\u548c\u518d\u6c42\u548c", + "TitleZH": "找出所有子集的异或总和再求和", "TitleSlug": "sum-of-all-subset-xor-totals", "ContestSlug": "weekly-contest-241", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 241", - "ContestID_zh": "\u7b2c 241 \u573a\u5468\u8d5b" + "ContestID_zh": "第 241 场周赛" }, { "Rating": 1371.8092952004, "ID": 2244, "Title": "Minimum Rounds to Complete All Tasks", - "TitleZH": "\u5b8c\u6210\u6240\u6709\u4efb\u52a1\u9700\u8981\u7684\u6700\u5c11\u8f6e\u6570", + "TitleZH": "完成所有任务需要的最少轮数", "TitleSlug": "minimum-rounds-to-complete-all-tasks", "ContestSlug": "weekly-contest-289", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 289", - "ContestID_zh": "\u7b2c 289 \u573a\u5468\u8d5b" + "ContestID_zh": "第 289 场周赛" }, { "Rating": 1370.6144908238, "ID": 914, "Title": "X of a Kind in a Deck of Cards", - "TitleZH": "\u5361\u724c\u5206\u7ec4", + "TitleZH": "卡牌分组", "TitleSlug": "x-of-a-kind-in-a-deck-of-cards", "ContestSlug": "weekly-contest-104", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 104", - "ContestID_zh": "\u7b2c 104 \u573a\u5468\u8d5b" + "ContestID_zh": "第 104 场周赛" }, { "Rating": 1370.4186698287, "ID": 1854, "Title": "Maximum Population Year", - "TitleZH": "\u4eba\u53e3\u6700\u591a\u7684\u5e74\u4efd", + "TitleZH": "人口最多的年份", "TitleSlug": "maximum-population-year", "ContestSlug": "weekly-contest-240", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 240", - "ContestID_zh": "\u7b2c 240 \u573a\u5468\u8d5b" + "ContestID_zh": "第 240 场周赛" }, { "Rating": 1369.614440152, "ID": 1608, "Title": "Special Array With X Elements Greater Than or Equal X", - "TitleZH": "\u7279\u6b8a\u6570\u7ec4\u7684\u7279\u5f81\u503c", + "TitleZH": "特殊数组的特征值", "TitleSlug": "special-array-with-x-elements-greater-than-or-equal-x", "ContestSlug": "weekly-contest-209", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 209", - "ContestID_zh": "\u7b2c 209 \u573a\u5468\u8d5b" + "ContestID_zh": "第 209 场周赛" }, { "Rating": 1369.0053354603, "ID": 1370, "Title": "Increasing Decreasing String", - "TitleZH": "\u4e0a\u5347\u4e0b\u964d\u5b57\u7b26\u4e32", + "TitleZH": "上升下降字符串", "TitleSlug": "increasing-decreasing-string", "ContestSlug": "biweekly-contest-21", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 21", - "ContestID_zh": "\u7b2c 21 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 21 场双周赛" }, { "Rating": 1368.0043517215, "ID": 1576, "Title": "Replace All ?'s to Avoid Consecutive Repeating Characters", - "TitleZH": "\u66ff\u6362\u6240\u6709\u7684\u95ee\u53f7", + "TitleZH": "替换所有的问号", "TitleSlug": "replace-all-s-to-avoid-consecutive-repeating-characters", "ContestSlug": "weekly-contest-205", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 205", - "ContestID_zh": "\u7b2c 205 \u573a\u5468\u8d5b" + "ContestID_zh": "第 205 场周赛" }, { "Rating": 1366.6789652398, "ID": 2433, "Title": "Find The Original Array of Prefix Xor", - "TitleZH": "\u627e\u51fa\u524d\u7f00\u5f02\u6216\u7684\u539f\u59cb\u6570\u7ec4", + "TitleZH": "找出前缀异或的原始数组", "TitleSlug": "find-the-original-array-of-prefix-xor", "ContestSlug": "weekly-contest-314", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 314", - "ContestID_zh": "\u7b2c 314 \u573a\u5468\u8d5b" + "ContestID_zh": "第 314 场周赛" }, { "Rating": 1365.2269076492, "ID": 2231, "Title": "Largest Number After Digit Swaps by Parity", - "TitleZH": "\u6309\u5947\u5076\u6027\u4ea4\u6362\u540e\u7684\u6700\u5927\u6570\u5b57", + "TitleZH": "按奇偶性交换后的最大数字", "TitleSlug": "largest-number-after-digit-swaps-by-parity", "ContestSlug": "weekly-contest-288", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 288", - "ContestID_zh": "\u7b2c 288 \u573a\u5468\u8d5b" + "ContestID_zh": "第 288 场周赛" }, { "Rating": 1364.6787168645, "ID": 2260, "Title": "Minimum Consecutive Cards to Pick Up", - "TitleZH": "\u5fc5\u987b\u62ff\u8d77\u7684\u6700\u5c0f\u8fde\u7eed\u5361\u724c\u6570", + "TitleZH": "必须拿起的最小连续卡牌数", "TitleSlug": "minimum-consecutive-cards-to-pick-up", "ContestSlug": "weekly-contest-291", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 291", - "ContestID_zh": "\u7b2c 291 \u573a\u5468\u8d5b" + "ContestID_zh": "第 291 场周赛" }, { "Rating": 1364.154859918, "ID": 1974, "Title": "Minimum Time to Type Word Using Special Typewriter", - "TitleZH": "\u4f7f\u7528\u7279\u6b8a\u6253\u5b57\u673a\u952e\u5165\u5355\u8bcd\u7684\u6700\u5c11\u65f6\u95f4", + "TitleZH": "使用特殊打字机键入单词的最少时间", "TitleSlug": "minimum-time-to-type-word-using-special-typewriter", "ContestSlug": "biweekly-contest-59", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 59", - "ContestID_zh": "\u7b2c 59 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 59 场双周赛" }, { "Rating": 1362.6613797387, "ID": 1592, "Title": "Rearrange Spaces Between Words", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u5355\u8bcd\u95f4\u7684\u7a7a\u683c", + "TitleZH": "重新排列单词间的空格", "TitleSlug": "rearrange-spaces-between-words", "ContestSlug": "weekly-contest-207", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 207", - "ContestID_zh": "\u7b2c 207 \u573a\u5468\u8d5b" + "ContestID_zh": "第 207 场周赛" }, { "Rating": 1361.8801013336, "ID": 1120, "Title": "Maximum Average Subtree", - "TitleZH": "\u5b50\u6811\u7684\u6700\u5927\u5e73\u5747\u503c", + "TitleZH": "子树的最大平均值", "TitleSlug": "maximum-average-subtree", "ContestSlug": "biweekly-contest-4", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 4", - "ContestID_zh": "\u7b2c 4 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 4 场双周赛" }, { "Rating": 1361.6459603518, "ID": 1980, "Title": "Find Unique Binary String", - "TitleZH": "\u627e\u51fa\u4e0d\u540c\u7684\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32", + "TitleZH": "找出不同的二进制字符串", "TitleSlug": "find-unique-binary-string", "ContestSlug": "weekly-contest-255", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 255", - "ContestID_zh": "\u7b2c 255 \u573a\u5468\u8d5b" + "ContestID_zh": "第 255 场周赛" }, { "Rating": 1361.5824742947, "ID": 2165, "Title": "Smallest Value of the Rearranged Number", - "TitleZH": "\u91cd\u6392\u6570\u5b57\u7684\u6700\u5c0f\u503c", + "TitleZH": "重排数字的最小值", "TitleSlug": "smallest-value-of-the-rearranged-number", "ContestSlug": "weekly-contest-279", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 279", - "ContestID_zh": "\u7b2c 279 \u573a\u5468\u8d5b" + "ContestID_zh": "第 279 场周赛" }, { "Rating": 1360.421258727, "ID": 2335, "Title": "Minimum Amount of Time to Fill Cups", - "TitleZH": "\u88c5\u6ee1\u676f\u5b50\u9700\u8981\u7684\u6700\u77ed\u603b\u65f6\u957f", + "TitleZH": "装满杯子需要的最短总时长", "TitleSlug": "minimum-amount-of-time-to-fill-cups", "ContestSlug": "weekly-contest-301", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 301", - "ContestID_zh": "\u7b2c 301 \u573a\u5468\u8d5b" + "ContestID_zh": "第 301 场周赛" }, { "Rating": 1360.3005775112, "ID": 1817, "Title": "Finding the Users Active Minutes", - "TitleZH": "\u67e5\u627e\u7528\u6237\u6d3b\u8dc3\u5206\u949f\u6570", + "TitleZH": "查找用户活跃分钟数", "TitleSlug": "finding-the-users-active-minutes", "ContestSlug": "weekly-contest-235", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 235", - "ContestID_zh": "\u7b2c 235 \u573a\u5468\u8d5b" + "ContestID_zh": "第 235 场周赛" }, { "Rating": 1360.2184128413, "ID": 1448, "Title": "Count Good Nodes in Binary Tree", - "TitleZH": "\u7edf\u8ba1\u4e8c\u53c9\u6811\u4e2d\u597d\u8282\u70b9\u7684\u6570\u76ee", + "TitleZH": "统计二叉树中好节点的数目", "TitleSlug": "count-good-nodes-in-binary-tree", "ContestSlug": "biweekly-contest-26", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 26", - "ContestID_zh": "\u7b2c 26 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 26 场双周赛" }, { "Rating": 1360.0511262593, "ID": 2379, "Title": "Minimum Recolors to Get K Consecutive Black Blocks", - "TitleZH": "\u5f97\u5230 K \u4e2a\u9ed1\u5757\u7684\u6700\u5c11\u6d82\u8272\u6b21\u6570", + "TitleZH": "得到 K 个黑块的最少涂色次数", "TitleSlug": "minimum-recolors-to-get-k-consecutive-black-blocks", "ContestSlug": "biweekly-contest-85", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 85", - "ContestID_zh": "\u7b2c 85 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 85 场双周赛" }, { "Rating": 1358.3561730566, "ID": 746, "Title": "Min Cost Climbing Stairs", - "TitleZH": "\u4f7f\u7528\u6700\u5c0f\u82b1\u8d39\u722c\u697c\u68af", + "TitleZH": "使用最小花费爬楼梯", "TitleSlug": "min-cost-climbing-stairs", "ContestSlug": "weekly-contest-63", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u5468\u8d5b" + "ContestID_zh": "第 63 场周赛" }, { "Rating": 1358.152613403, "ID": 2090, "Title": "K Radius Subarray Averages", - "TitleZH": "\u534a\u5f84\u4e3a k \u7684\u5b50\u6570\u7ec4\u5e73\u5747\u503c", + "TitleZH": "半径为 k 的子数组平均值", "TitleSlug": "k-radius-subarray-averages", "ContestSlug": "weekly-contest-269", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 269", - "ContestID_zh": "\u7b2c 269 \u573a\u5468\u8d5b" + "ContestID_zh": "第 269 场周赛" }, { "Rating": 1357.6553050616, "ID": 1957, "Title": "Delete Characters to Make Fancy String", - "TitleZH": "\u5220\u9664\u5b57\u7b26\u4f7f\u5b57\u7b26\u4e32\u53d8\u597d", + "TitleZH": "删除字符使字符串变好", "TitleSlug": "delete-characters-to-make-fancy-string", "ContestSlug": "biweekly-contest-58", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 58", - "ContestID_zh": "\u7b2c 58 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 58 场双周赛" }, { "Rating": 1356.6925765299, "ID": 2037, "Title": "Minimum Number of Moves to Seat Everyone", - "TitleZH": "\u4f7f\u6bcf\u4f4d\u5b66\u751f\u90fd\u6709\u5ea7\u4f4d\u7684\u6700\u5c11\u79fb\u52a8\u6b21\u6570", + "TitleZH": "使每位学生都有座位的最少移动次数", "TitleSlug": "minimum-number-of-moves-to-seat-everyone", "ContestSlug": "biweekly-contest-63", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 63", - "ContestID_zh": "\u7b2c 63 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 63 场双周赛" }, { "Rating": 1356.1920189231, "ID": 2043, "Title": "Simple Bank System", - "TitleZH": "\u7b80\u6613\u94f6\u884c\u7cfb\u7edf", + "TitleZH": "简易银行系统", "TitleSlug": "simple-bank-system", "ContestSlug": "weekly-contest-263", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 263", - "ContestID_zh": "\u7b2c 263 \u573a\u5468\u8d5b" + "ContestID_zh": "第 263 场周赛" }, { "Rating": 1355.9817184778, "ID": 1331, "Title": "Rank Transform of an Array", - "TitleZH": "\u6570\u7ec4\u5e8f\u53f7\u8f6c\u6362", + "TitleZH": "数组序号转换", "TitleSlug": "rank-transform-of-an-array", "ContestSlug": "biweekly-contest-18", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 18", - "ContestID_zh": "\u7b2c 18 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 18 场双周赛" }, { "Rating": 1355.5386161215, "ID": 1894, "Title": "Find the Student that Will Replace the Chalk", - "TitleZH": "\u627e\u5230\u9700\u8981\u8865\u5145\u7c89\u7b14\u7684\u5b66\u751f\u7f16\u53f7", + "TitleZH": "找到需要补充粉笔的学生编号", "TitleSlug": "find-the-student-that-will-replace-the-chalk", "ContestSlug": "biweekly-contest-54", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 54", - "ContestID_zh": "\u7b2c 54 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 54 场双周赛" }, { "Rating": 1355.3956434989, "ID": 2405, "Title": "Optimal Partition of String", - "TitleZH": "\u5b50\u5b57\u7b26\u4e32\u7684\u6700\u4f18\u5212\u5206", + "TitleZH": "子字符串的最优划分", "TitleSlug": "optimal-partition-of-string", "ContestSlug": "weekly-contest-310", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 310", - "ContestID_zh": "\u7b2c 310 \u573a\u5468\u8d5b" + "ContestID_zh": "第 310 场周赛" }, { "Rating": 1355.3825442341, "ID": 1689, "Title": "Partitioning Into Minimum Number Of Deci-Binary Numbers", - "TitleZH": "\u5341-\u4e8c\u8fdb\u5236\u6570\u7684\u6700\u5c11\u6570\u76ee", + "TitleZH": "十-二进制数的最少数目", "TitleSlug": "partitioning-into-minimum-number-of-deci-binary-numbers", "ContestSlug": "weekly-contest-219", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 219", - "ContestID_zh": "\u7b2c 219 \u573a\u5468\u8d5b" + "ContestID_zh": "第 219 场周赛" }, { "Rating": 1354.5231125217, "ID": 2210, "Title": "Count Hills and Valleys in an Array", - "TitleZH": "\u7edf\u8ba1\u6570\u7ec4\u4e2d\u5cf0\u548c\u8c37\u7684\u6570\u91cf", + "TitleZH": "统计数组中峰和谷的数量", "TitleSlug": "count-hills-and-valleys-in-an-array", "ContestSlug": "weekly-contest-285", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 285", - "ContestID_zh": "\u7b2c 285 \u573a\u5468\u8d5b" + "ContestID_zh": "第 285 场周赛" }, { "Rating": 1354.1247827015, "ID": 1244, "Title": "Design A Leaderboard", - "TitleZH": "\u529b\u6263\u6392\u884c\u699c", + "TitleZH": "力扣排行榜", "TitleSlug": "design-a-leaderboard", "ContestSlug": "biweekly-contest-12", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 12", - "ContestID_zh": "\u7b2c 12 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 12 场双周赛" }, { "Rating": 1353.629677812, "ID": 1758, "Title": "Minimum Changes To Make Alternating Binary String", - "TitleZH": "\u751f\u6210\u4ea4\u66ff\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32\u7684\u6700\u5c11\u64cd\u4f5c\u6570", + "TitleZH": "生成交替二进制字符串的最少操作数", "TitleSlug": "minimum-changes-to-make-alternating-binary-string", "ContestSlug": "weekly-contest-228", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 228", - "ContestID_zh": "\u7b2c 228 \u573a\u5468\u8d5b" + "ContestID_zh": "第 228 场周赛" }, { "Rating": 1352.7250049956, "ID": 848, "Title": "Shifting Letters", - "TitleZH": "\u5b57\u6bcd\u79fb\u4f4d", + "TitleZH": "字母移位", "TitleSlug": "shifting-letters", "ContestSlug": "weekly-contest-88", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 88", - "ContestID_zh": "\u7b2c 88 \u573a\u5468\u8d5b" + "ContestID_zh": "第 88 场周赛" }, { "Rating": 1352.1791099256, "ID": 1995, "Title": "Count Special Quadruplets", - "TitleZH": "\u7edf\u8ba1\u7279\u6b8a\u56db\u5143\u7ec4", + "TitleZH": "统计特殊四元组", "TitleSlug": "count-special-quadruplets", "ContestSlug": "weekly-contest-257", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 257", - "ContestID_zh": "\u7b2c 257 \u573a\u5468\u8d5b" + "ContestID_zh": "第 257 场周赛" }, { "Rating": 1351.4184681108, "ID": 1513, "Title": "Number of Substrings With Only 1s", - "TitleZH": "\u4ec5\u542b 1 \u7684\u5b50\u4e32\u6570", + "TitleZH": "仅含 1 的子串数", "TitleSlug": "number-of-substrings-with-only-1s", "ContestSlug": "weekly-contest-197", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 197", - "ContestID_zh": "\u7b2c 197 \u573a\u5468\u8d5b" + "ContestID_zh": "第 197 场周赛" }, { "Rating": 1350.6048768377, "ID": 2053, "Title": "Kth Distinct String in an Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u7b2c K \u4e2a\u72ec\u4e00\u65e0\u4e8c\u7684\u5b57\u7b26\u4e32", + "TitleZH": "数组中第 K 个独一无二的字符串", "TitleSlug": "kth-distinct-string-in-an-array", "ContestSlug": "biweekly-contest-64", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 64 场双周赛" }, { "Rating": 1348.670191438, "ID": 1100, "Title": "Find K-Length Substrings With No Repeated Characters", - "TitleZH": "\u957f\u5ea6\u4e3a K \u7684\u65e0\u91cd\u590d\u5b57\u7b26\u5b50\u4e32", + "TitleZH": "长度为 K 的无重复字符子串", "TitleSlug": "find-k-length-substrings-with-no-repeated-characters", "ContestSlug": "biweekly-contest-3", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 3", - "ContestID_zh": "\u7b2c 3 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 3 场双周赛" }, { "Rating": 1348.0079390256, "ID": 1029, "Title": "Two City Scheduling", - "TitleZH": "\u4e24\u5730\u8c03\u5ea6", + "TitleZH": "两地调度", "TitleSlug": "two-city-scheduling", "ContestSlug": "weekly-contest-133", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 133", - "ContestID_zh": "\u7b2c 133 \u573a\u5468\u8d5b" + "ContestID_zh": "第 133 场周赛" }, { "Rating": 1347.8521638635, "ID": 2390, "Title": "Removing Stars From a String", - "TitleZH": "\u4ece\u5b57\u7b26\u4e32\u4e2d\u79fb\u9664\u661f\u53f7", + "TitleZH": "从字符串中移除星号", "TitleSlug": "removing-stars-from-a-string", "ContestSlug": "weekly-contest-308", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 308", - "ContestID_zh": "\u7b2c 308 \u573a\u5468\u8d5b" + "ContestID_zh": "第 308 场周赛" }, { "Rating": 1346.9594471871, "ID": 2284, "Title": "Sender With Largest Word Count", - "TitleZH": "\u6700\u591a\u5355\u8bcd\u6570\u7684\u53d1\u4ef6\u4eba", + "TitleZH": "最多单词数的发件人", "TitleSlug": "sender-with-largest-word-count", "ContestSlug": "biweekly-contest-79", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 79 场双周赛" }, { "Rating": 1346.3556309143, "ID": 2027, "Title": "Minimum Moves to Convert String", - "TitleZH": "\u8f6c\u6362\u5b57\u7b26\u4e32\u7684\u6700\u5c11\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "转换字符串的最少操作次数", "TitleSlug": "minimum-moves-to-convert-string", "ContestSlug": "weekly-contest-261", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 261", - "ContestID_zh": "\u7b2c 261 \u573a\u5468\u8d5b" + "ContestID_zh": "第 261 场周赛" }, { "Rating": 1345.737168609, "ID": 1679, "Title": "Max Number of K-Sum Pairs", - "TitleZH": "K \u548c\u6570\u5bf9\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "K 和数对的最大数目", "TitleSlug": "max-number-of-k-sum-pairs", "ContestSlug": "weekly-contest-218", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 218", - "ContestID_zh": "\u7b2c 218 \u573a\u5468\u8d5b" + "ContestID_zh": "第 218 场周赛" }, { "Rating": 1344.226133202, "ID": 1544, "Title": "Make The String Great", - "TitleZH": "\u6574\u7406\u5b57\u7b26\u4e32", + "TitleZH": "整理字符串", "TitleSlug": "make-the-string-great", "ContestSlug": "weekly-contest-201", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 201", - "ContestID_zh": "\u7b2c 201 \u573a\u5468\u8d5b" + "ContestID_zh": "第 201 场周赛" }, { "Rating": 1343.628913055, "ID": 1395, "Title": "Count Number of Teams", - "TitleZH": "\u7edf\u8ba1\u4f5c\u6218\u5355\u4f4d\u6570", + "TitleZH": "统计作战单位数", "TitleSlug": "count-number-of-teams", "ContestSlug": "weekly-contest-182", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 182", - "ContestID_zh": "\u7b2c 182 \u573a\u5468\u8d5b" + "ContestID_zh": "第 182 场周赛" }, { "Rating": 1341.8397242604, "ID": 1796, "Title": "Second Largest Digit in a String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u7b2c\u4e8c\u5927\u7684\u6570\u5b57", + "TitleZH": "字符串中第二大的数字", "TitleSlug": "second-largest-digit-in-a-string", "ContestSlug": "biweekly-contest-48", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 48", - "ContestID_zh": "\u7b2c 48 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 48 场双周赛" }, { "Rating": 1341.5076441361, "ID": 784, "Title": "Letter Case Permutation", - "TitleZH": "\u5b57\u6bcd\u5927\u5c0f\u5199\u5168\u6392\u5217", + "TitleZH": "字母大小写全排列", "TitleSlug": "letter-case-permutation", "ContestSlug": "weekly-contest-72", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u5468\u8d5b" + "ContestID_zh": "第 72 场周赛" }, { "Rating": 1341.3713970313, "ID": 2023, "Title": "Number of Pairs of Strings With Concatenation Equal to Target", - "TitleZH": "\u8fde\u63a5\u540e\u7b49\u4e8e\u76ee\u6807\u5b57\u7b26\u4e32\u7684\u5b57\u7b26\u4e32\u5bf9", + "TitleZH": "连接后等于目标字符串的字符串对", "TitleSlug": "number-of-pairs-of-strings-with-concatenation-equal-to-target", "ContestSlug": "biweekly-contest-62", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 62", - "ContestID_zh": "\u7b2c 62 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 62 场双周赛" }, { "Rating": 1341.2659819842, "ID": 859, "Title": "Buddy Strings", - "TitleZH": "\u4eb2\u5bc6\u5b57\u7b26\u4e32", + "TitleZH": "亲密字符串", "TitleSlug": "buddy-strings", "ContestSlug": "weekly-contest-90", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 90", - "ContestID_zh": "\u7b2c 90 \u573a\u5468\u8d5b" + "ContestID_zh": "第 90 场周赛" }, { "Rating": 1341.0476642293, "ID": 1399, "Title": "Count Largest Group", - "TitleZH": "\u7edf\u8ba1\u6700\u5927\u7ec4\u7684\u6570\u76ee", + "TitleZH": "统计最大组的数目", "TitleSlug": "count-largest-group", "ContestSlug": "biweekly-contest-23", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 23", - "ContestID_zh": "\u7b2c 23 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 23 场双周赛" }, { "Rating": 1340.5559417151, "ID": 976, "Title": "Largest Perimeter Triangle", - "TitleZH": "\u4e09\u89d2\u5f62\u7684\u6700\u5927\u5468\u957f", + "TitleZH": "三角形的最大周长", "TitleSlug": "largest-perimeter-triangle", "ContestSlug": "weekly-contest-119", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 119", - "ContestID_zh": "\u7b2c 119 \u573a\u5468\u8d5b" + "ContestID_zh": "第 119 场周赛" }, { "Rating": 1338.8322315568, "ID": 970, "Title": "Powerful Integers", - "TitleZH": "\u5f3a\u6574\u6570", + "TitleZH": "强整数", "TitleSlug": "powerful-integers", "ContestSlug": "weekly-contest-118", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 118", - "ContestID_zh": "\u7b2c 118 \u573a\u5468\u8d5b" + "ContestID_zh": "第 118 场周赛" }, { "Rating": 1337.8472367494, "ID": 933, "Title": "Number of Recent Calls", - "TitleZH": "\u6700\u8fd1\u7684\u8bf7\u6c42\u6b21\u6570", + "TitleZH": "最近的请求次数", "TitleSlug": "number-of-recent-calls", "ContestSlug": "weekly-contest-109", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 109", - "ContestID_zh": "\u7b2c 109 \u573a\u5468\u8d5b" + "ContestID_zh": "第 109 场周赛" }, { "Rating": 1337.6115578703, "ID": 2161, "Title": "Partition Array According to Given Pivot", - "TitleZH": "\u6839\u636e\u7ed9\u5b9a\u6570\u5b57\u5212\u5206\u6570\u7ec4", + "TitleZH": "根据给定数字划分数组", "TitleSlug": "partition-array-according-to-given-pivot", "ContestSlug": "biweekly-contest-71", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 71 场双周赛" }, { "Rating": 1337.3722299775, "ID": 1260, "Title": "Shift 2D Grid", - "TitleZH": "\u4e8c\u7ef4\u7f51\u683c\u8fc1\u79fb", + "TitleZH": "二维网格迁移", "TitleSlug": "shift-2d-grid", "ContestSlug": "weekly-contest-163", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 163", - "ContestID_zh": "\u7b2c 163 \u573a\u5468\u8d5b" + "ContestID_zh": "第 163 场周赛" }, { "Rating": 1336.9494482313, "ID": 1275, "Title": "Find Winner on a Tic Tac Toe Game", - "TitleZH": "\u627e\u51fa\u4e95\u5b57\u68cb\u7684\u83b7\u80dc\u8005", + "TitleZH": "找出井字棋的获胜者", "TitleSlug": "find-winner-on-a-tic-tac-toe-game", "ContestSlug": "weekly-contest-165", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 165", - "ContestID_zh": "\u7b2c 165 \u573a\u5468\u8d5b" + "ContestID_zh": "第 165 场周赛" }, { "Rating": 1335.0295688697, "ID": 938, "Title": "Range Sum of BST", - "TitleZH": "\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u8303\u56f4\u548c", + "TitleZH": "二叉搜索树的范围和", "TitleSlug": "range-sum-of-bst", "ContestSlug": "weekly-contest-110", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 110", - "ContestID_zh": "\u7b2c 110 \u573a\u5468\u8d5b" + "ContestID_zh": "第 110 场周赛" }, { "Rating": 1334.5718985411, "ID": 1409, "Title": "Queries on a Permutation With Key", - "TitleZH": "\u67e5\u8be2\u5e26\u952e\u7684\u6392\u5217", + "TitleZH": "查询带键的排列", "TitleSlug": "queries-on-a-permutation-with-key", "ContestSlug": "weekly-contest-184", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 184", - "ContestID_zh": "\u7b2c 184 \u573a\u5468\u8d5b" + "ContestID_zh": "第 184 场周赛" }, { "Rating": 1334.5708444649, "ID": 2126, "Title": "Destroying Asteroids", - "TitleZH": "\u6467\u6bc1\u5c0f\u884c\u661f", + "TitleZH": "摧毁小行星", "TitleSlug": "destroying-asteroids", "ContestSlug": "weekly-contest-274", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 274", - "ContestID_zh": "\u7b2c 274 \u573a\u5468\u8d5b" + "ContestID_zh": "第 274 场周赛" }, { "Rating": 1334.0564009231, "ID": 888, "Title": "Fair Candy Swap", - "TitleZH": "\u516c\u5e73\u7684\u7cd6\u679c\u68d2\u4ea4\u6362", + "TitleZH": "公平的糖果棒交换", "TitleSlug": "fair-candy-swap", "ContestSlug": "weekly-contest-98", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 98", - "ContestID_zh": "\u7b2c 98 \u573a\u5468\u8d5b" + "ContestID_zh": "第 98 场周赛" }, { "Rating": 1334.0516779626, "ID": 2270, "Title": "Number of Ways to Split Array", - "TitleZH": "\u5206\u5272\u6570\u7ec4\u7684\u65b9\u6848\u6570", + "TitleZH": "分割数组的方案数", "TitleSlug": "number-of-ways-to-split-array", "ContestSlug": "biweekly-contest-78", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 78 场双周赛" }, { "Rating": 1333.3138174157, "ID": 1805, "Title": "Number of Different Integers in a String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u4e0d\u540c\u6574\u6570\u7684\u6570\u76ee", + "TitleZH": "字符串中不同整数的数目", "TitleSlug": "number-of-different-integers-in-a-string", "ContestSlug": "weekly-contest-234", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 234", - "ContestID_zh": "\u7b2c 234 \u573a\u5468\u8d5b" + "ContestID_zh": "第 234 场周赛" }, { "Rating": 1333.192050397, "ID": 2181, "Title": "Merge Nodes in Between Zeros", - "TitleZH": "\u5408\u5e76\u96f6\u4e4b\u95f4\u7684\u8282\u70b9", + "TitleZH": "合并零之间的节点", "TitleSlug": "merge-nodes-in-between-zeros", "ContestSlug": "weekly-contest-281", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 281", - "ContestID_zh": "\u7b2c 281 \u573a\u5468\u8d5b" + "ContestID_zh": "第 281 场周赛" }, { "Rating": 1332.622596763, "ID": 1128, "Title": "Number of Equivalent Domino Pairs", - "TitleZH": "\u7b49\u4ef7\u591a\u7c73\u8bfa\u9aa8\u724c\u5bf9\u7684\u6570\u91cf", + "TitleZH": "等价多米诺骨牌对的数量", "TitleSlug": "number-of-equivalent-domino-pairs", "ContestSlug": "weekly-contest-146", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 146", - "ContestID_zh": "\u7b2c 146 \u573a\u5468\u8d5b" + "ContestID_zh": "第 146 场周赛" }, { "Rating": 1332.6187879411, "ID": 2274, "Title": "Maximum Consecutive Floors Without Special Floors", - "TitleZH": "\u4e0d\u542b\u7279\u6b8a\u697c\u5c42\u7684\u6700\u5927\u8fde\u7eed\u697c\u5c42\u6570", + "TitleZH": "不含特殊楼层的最大连续楼层数", "TitleSlug": "maximum-consecutive-floors-without-special-floors", "ContestSlug": "weekly-contest-293", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 293", - "ContestID_zh": "\u7b2c 293 \u573a\u5468\u8d5b" + "ContestID_zh": "第 293 场周赛" }, { "Rating": 1332.4653491345, "ID": 1471, "Title": "The k Strongest Values in an Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u7684 k \u4e2a\u6700\u5f3a\u503c", + "TitleZH": "数组中的 k 个最强值", "TitleSlug": "the-k-strongest-values-in-an-array", "ContestSlug": "weekly-contest-192", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 192", - "ContestID_zh": "\u7b2c 192 \u573a\u5468\u8d5b" + "ContestID_zh": "第 192 场周赛" }, { "Rating": 1331.5287857686, "ID": 2259, "Title": "Remove Digit From Number to Maximize Result", - "TitleZH": "\u79fb\u9664\u6307\u5b9a\u6570\u5b57\u5f97\u5230\u7684\u6700\u5927\u7ed3\u679c", + "TitleZH": "移除指定数字得到的最大结果", "TitleSlug": "remove-digit-from-number-to-maximize-result", "ContestSlug": "weekly-contest-291", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 291", - "ContestID_zh": "\u7b2c 291 \u573a\u5468\u8d5b" + "ContestID_zh": "第 291 场周赛" }, { "Rating": 1331.3935128035, "ID": 2373, "Title": "Largest Local Values in a Matrix", - "TitleZH": "\u77e9\u9635\u4e2d\u7684\u5c40\u90e8\u6700\u5927\u503c", + "TitleZH": "矩阵中的局部最大值", "TitleSlug": "largest-local-values-in-a-matrix", "ContestSlug": "weekly-contest-306", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 306", - "ContestID_zh": "\u7b2c 306 \u573a\u5468\u8d5b" + "ContestID_zh": "第 306 场周赛" }, { "Rating": 1330.918577828, "ID": 1347, "Title": "Minimum Number of Steps to Make Two Strings Anagram", - "TitleZH": "\u5236\u9020\u5b57\u6bcd\u5f02\u4f4d\u8bcd\u7684\u6700\u5c0f\u6b65\u9aa4\u6570", + "TitleZH": "制造字母异位词的最小步骤数", "TitleSlug": "minimum-number-of-steps-to-make-two-strings-anagram", "ContestSlug": "weekly-contest-175", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 175", - "ContestID_zh": "\u7b2c 175 \u573a\u5468\u8d5b" + "ContestID_zh": "第 175 场周赛" }, { "Rating": 1328.7281033317, "ID": 1324, "Title": "Print Words Vertically", - "TitleZH": "\u7ad6\u76f4\u6253\u5370\u5355\u8bcd", + "TitleZH": "竖直打印单词", "TitleSlug": "print-words-vertically", "ContestSlug": "weekly-contest-172", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 172", - "ContestID_zh": "\u7b2c 172 \u573a\u5468\u8d5b" + "ContestID_zh": "第 172 场周赛" }, { "Rating": 1328.5499677186, "ID": 2396, "Title": "Strictly Palindromic Number", - "TitleZH": "\u4e25\u683c\u56de\u6587\u7684\u6570\u5b57", + "TitleZH": "严格回文的数字", "TitleSlug": "strictly-palindromic-number", "ContestSlug": "biweekly-contest-86", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 86 场双周赛" }, { "Rating": 1328.513147726, "ID": 1812, "Title": "Determine Color of a Chessboard Square", - "TitleZH": "\u5224\u65ad\u56fd\u9645\u8c61\u68cb\u68cb\u76d8\u4e2d\u4e00\u4e2a\u683c\u5b50\u7684\u989c\u8272", + "TitleZH": "判断国际象棋棋盘中一个格子的颜色", "TitleSlug": "determine-color-of-a-chessboard-square", "ContestSlug": "biweekly-contest-49", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 49", - "ContestID_zh": "\u7b2c 49 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 49 场双周赛" }, { "Rating": 1327.0282989915, "ID": 1086, "Title": "High Five", - "TitleZH": "\u524d\u4e94\u79d1\u7684\u5747\u5206", + "TitleZH": "前五科的均分", "TitleSlug": "high-five", "ContestSlug": "biweekly-contest-2", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 2", - "ContestID_zh": "\u7b2c 2 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 2 场双周赛" }, { "Rating": 1326.4047670018, "ID": 1476, "Title": "Subrectangle Queries", - "TitleZH": "\u5b50\u77e9\u5f62\u67e5\u8be2", + "TitleZH": "子矩形查询", "TitleSlug": "subrectangle-queries", "ContestSlug": "biweekly-contest-28", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 28", - "ContestID_zh": "\u7b2c 28 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 28 场双周赛" }, { "Rating": 1325.3607218257, "ID": 2073, "Title": "Time Needed to Buy Tickets", - "TitleZH": "\u4e70\u7968\u9700\u8981\u7684\u65f6\u95f4", + "TitleZH": "买票需要的时间", "TitleSlug": "time-needed-to-buy-tickets", "ContestSlug": "weekly-contest-267", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 267", - "ContestID_zh": "\u7b2c 267 \u573a\u5468\u8d5b" + "ContestID_zh": "第 267 场周赛" }, { "Rating": 1324.5696223867, "ID": 1344, "Title": "Angle Between Hands of a Clock", - "TitleZH": "\u65f6\u949f\u6307\u9488\u7684\u5939\u89d2", + "TitleZH": "时钟指针的夹角", "TitleSlug": "angle-between-hands-of-a-clock", "ContestSlug": "biweekly-contest-19", "ProblemIndex": "Q3", "ContestID_en": "Biweekly Contest 19", - "ContestID_zh": "\u7b2c 19 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 19 场双周赛" }, { "Rating": 1324.5320836804, "ID": 1752, "Title": "Check if Array Is Sorted and Rotated", - "TitleZH": "\u68c0\u67e5\u6570\u7ec4\u662f\u5426\u7ecf\u6392\u5e8f\u548c\u8f6e\u8f6c\u5f97\u5230", + "TitleZH": "检查数组是否经排序和轮转得到", "TitleSlug": "check-if-array-is-sorted-and-rotated", "ContestSlug": "weekly-contest-227", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 227", - "ContestID_zh": "\u7b2c 227 \u573a\u5468\u8d5b" + "ContestID_zh": "第 227 场周赛" }, { "Rating": 1324.3520304377, "ID": 2095, "Title": "Delete the Middle Node of a Linked List", - "TitleZH": "\u5220\u9664\u94fe\u8868\u7684\u4e2d\u95f4\u8282\u70b9", + "TitleZH": "删除链表的中间节点", "TitleSlug": "delete-the-middle-node-of-a-linked-list", "ContestSlug": "weekly-contest-270", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 270", - "ContestID_zh": "\u7b2c 270 \u573a\u5468\u8d5b" + "ContestID_zh": "第 270 场周赛" }, { "Rating": 1324.1757200103, "ID": 1603, "Title": "Design Parking System", - "TitleZH": "\u8bbe\u8ba1\u505c\u8f66\u7cfb\u7edf", + "TitleZH": "设计停车系统", "TitleSlug": "design-parking-system", "ContestSlug": "biweekly-contest-36", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 36", - "ContestID_zh": "\u7b2c 36 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 36 场双周赛" }, { "Rating": 1323.8236471852, "ID": 1925, "Title": "Count Square Sum Triples", - "TitleZH": "\u7edf\u8ba1\u5e73\u65b9\u548c\u4e09\u5143\u7ec4\u7684\u6570\u76ee", + "TitleZH": "统计平方和三元组的数目", "TitleSlug": "count-square-sum-triples", "ContestSlug": "biweekly-contest-56", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 56", - "ContestID_zh": "\u7b2c 56 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 56 场双周赛" }, { "Rating": 1322.8302750313, "ID": 1614, "Title": "Maximum Nesting Depth of the Parentheses", - "TitleZH": "\u62ec\u53f7\u7684\u6700\u5927\u5d4c\u5957\u6df1\u5ea6", + "TitleZH": "括号的最大嵌套深度", "TitleSlug": "maximum-nesting-depth-of-the-parentheses", "ContestSlug": "weekly-contest-210", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 210", - "ContestID_zh": "\u7b2c 210 \u573a\u5468\u8d5b" + "ContestID_zh": "第 210 场周赛" }, { "Rating": 1322.5926536743, "ID": 1936, "Title": "Add Minimum Number of Rungs", - "TitleZH": "\u65b0\u589e\u7684\u6700\u5c11\u53f0\u9636\u6570", + "TitleZH": "新增的最少台阶数", "TitleSlug": "add-minimum-number-of-rungs", "ContestSlug": "weekly-contest-250", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 250", - "ContestID_zh": "\u7b2c 250 \u573a\u5468\u8d5b" + "ContestID_zh": "第 250 场周赛" }, { "Rating": 1322.3886921778, "ID": 2446, "Title": "Determine if Two Events Have Conflict", - "TitleZH": "\u5224\u65ad\u4e24\u4e2a\u4e8b\u4ef6\u662f\u5426\u5b58\u5728\u51b2\u7a81", + "TitleZH": "判断两个事件是否存在冲突", "TitleSlug": "determine-if-two-events-have-conflict", "ContestSlug": "weekly-contest-316", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 316", - "ContestID_zh": "\u7b2c 316 \u573a\u5468\u8d5b" + "ContestID_zh": "第 316 场周赛" }, { "Rating": 1321.9346201204, "ID": 1694, "Title": "Reformat Phone Number", - "TitleZH": "\u91cd\u65b0\u683c\u5f0f\u5316\u7535\u8bdd\u53f7\u7801", + "TitleZH": "重新格式化电话号码", "TitleSlug": "reformat-phone-number", "ContestSlug": "weekly-contest-220", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 220", - "ContestID_zh": "\u7b2c 220 \u573a\u5468\u8d5b" + "ContestID_zh": "第 220 场周赛" }, { "Rating": 1321.2748903388, "ID": 1582, "Title": "Special Positions in a Binary Matrix", - "TitleZH": "\u4e8c\u8fdb\u5236\u77e9\u9635\u4e2d\u7684\u7279\u6b8a\u4f4d\u7f6e", + "TitleZH": "二进制矩阵中的特殊位置", "TitleSlug": "special-positions-in-a-binary-matrix", "ContestSlug": "weekly-contest-206", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 206", - "ContestID_zh": "\u7b2c 206 \u573a\u5468\u8d5b" + "ContestID_zh": "第 206 场周赛" }, { "Rating": 1320.6485731562, "ID": 2079, "Title": "Watering Plants", - "TitleZH": "\u7ed9\u690d\u7269\u6d47\u6c34", + "TitleZH": "给植物浇水", "TitleSlug": "watering-plants", "ContestSlug": "weekly-contest-268", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 268", - "ContestID_zh": "\u7b2c 268 \u573a\u5468\u8d5b" + "ContestID_zh": "第 268 场周赛" }, { "Rating": 1317.9521104466, "ID": 999, "Title": "Available Captures for Rook", - "TitleZH": "\u53ef\u4ee5\u88ab\u4e00\u6b65\u6355\u83b7\u7684\u68cb\u5b50\u6570", + "TitleZH": "可以被一步捕获的棋子数", "TitleSlug": "available-captures-for-rook", "ContestSlug": "weekly-contest-125", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 125", - "ContestID_zh": "\u7b2c 125 \u573a\u5468\u8d5b" + "ContestID_zh": "第 125 场周赛" }, { "Rating": 1317.9207508583, "ID": 2130, "Title": "Maximum Twin Sum of a Linked List", - "TitleZH": "\u94fe\u8868\u6700\u5927\u5b6a\u751f\u548c", + "TitleZH": "链表最大孪生和", "TitleSlug": "maximum-twin-sum-of-a-linked-list", "ContestSlug": "biweekly-contest-69", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 69 场双周赛" }, { "Rating": 1317.4638832497, "ID": 1313, "Title": "Decompress Run-Length Encoded List", - "TitleZH": "\u89e3\u538b\u7f29\u7f16\u7801\u5217\u8868", + "TitleZH": "解压缩编码列表", "TitleSlug": "decompress-run-length-encoded-list", "ContestSlug": "biweekly-contest-17", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 17", - "ContestID_zh": "\u7b2c 17 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 17 场双周赛" }, { "Rating": 1317.2976846981, "ID": 2221, "Title": "Find Triangular Sum of an Array", - "TitleZH": "\u6570\u7ec4\u7684\u4e09\u89d2\u548c", + "TitleZH": "数组的三角和", "TitleSlug": "find-triangular-sum-of-an-array", "ContestSlug": "biweekly-contest-75", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 75 场双周赛" }, { "Rating": 1317.1729927899, "ID": 1343, "Title": "Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold", - "TitleZH": "\u5927\u5c0f\u4e3a K \u4e14\u5e73\u5747\u503c\u5927\u4e8e\u7b49\u4e8e\u9608\u503c\u7684\u5b50\u6570\u7ec4\u6570\u76ee", + "TitleZH": "大小为 K 且平均值大于等于阈值的子数组数目", "TitleSlug": "number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold", "ContestSlug": "biweekly-contest-19", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 19", - "ContestID_zh": "\u7b2c 19 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 19 场双周赛" }, { "Rating": 1316.2046992429, "ID": 2225, "Title": "Find Players With Zero or One Losses", - "TitleZH": "\u627e\u51fa\u8f93\u6389\u96f6\u573a\u6216\u4e00\u573a\u6bd4\u8d5b\u7684\u73a9\u5bb6", + "TitleZH": "找出输掉零场或一场比赛的玩家", "TitleSlug": "find-players-with-zero-or-one-losses", "ContestSlug": "weekly-contest-287", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 287", - "ContestID_zh": "\u7b2c 287 \u573a\u5468\u8d5b" + "ContestID_zh": "第 287 场周赛" }, { "Rating": 1315.8569286597, "ID": 2348, "Title": "Number of Zero-Filled Subarrays", - "TitleZH": "\u5168 0 \u5b50\u6570\u7ec4\u7684\u6570\u76ee", + "TitleZH": "全 0 子数组的数目", "TitleSlug": "number-of-zero-filled-subarrays", "ContestSlug": "biweekly-contest-83", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 83 场双周赛" }, { "Rating": 1315.4085759361, "ID": 1180, "Title": "Count Substrings with Only One Distinct Letter", - "TitleZH": "\u7edf\u8ba1\u53ea\u542b\u5355\u4e00\u5b57\u6bcd\u7684\u5b50\u4e32", + "TitleZH": "统计只含单一字母的子串", "TitleSlug": "count-substrings-with-only-one-distinct-letter", "ContestSlug": "biweekly-contest-8", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 8", - "ContestID_zh": "\u7b2c 8 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 8 场双周赛" }, { "Rating": 1315.3715333947, "ID": 1629, "Title": "Slowest Key", - "TitleZH": "\u6309\u952e\u6301\u7eed\u65f6\u95f4\u6700\u957f\u7684\u952e", + "TitleZH": "按键持续时间最长的键", "TitleSlug": "slowest-key", "ContestSlug": "weekly-contest-212", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 212", - "ContestID_zh": "\u7b2c 212 \u573a\u5468\u8d5b" + "ContestID_zh": "第 212 场周赛" }, { "Rating": 1315.1890809249, "ID": 2109, "Title": "Adding Spaces to a String", - "TitleZH": "\u5411\u5b57\u7b26\u4e32\u6dfb\u52a0\u7a7a\u683c", + "TitleZH": "向字符串添加空格", "TitleSlug": "adding-spaces-to-a-string", "ContestSlug": "weekly-contest-272", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 272", - "ContestID_zh": "\u7b2c 272 \u573a\u5468\u8d5b" + "ContestID_zh": "第 272 场周赛" }, { "Rating": 1314.8600143277, "ID": 1827, "Title": "Minimum Operations to Make the Array Increasing", - "TitleZH": "\u6700\u5c11\u64cd\u4f5c\u4f7f\u6570\u7ec4\u9012\u589e", + "TitleZH": "最少操作使数组递增", "TitleSlug": "minimum-operations-to-make-the-array-increasing", "ContestSlug": "biweekly-contest-50", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 50", - "ContestID_zh": "\u7b2c 50 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 50 场双周赛" }, { "Rating": 1314.2912238536, "ID": 2160, "Title": "Minimum Sum of Four Digit Number After Splitting Digits", - "TitleZH": "\u62c6\u5206\u6570\u4f4d\u540e\u56db\u4f4d\u6570\u5b57\u7684\u6700\u5c0f\u548c", + "TitleZH": "拆分数位后四位数字的最小和", "TitleSlug": "minimum-sum-of-four-digit-number-after-splitting-digits", "ContestSlug": "biweekly-contest-71", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 71 场双周赛" }, { "Rating": 1311.3495317884, "ID": 1021, "Title": "Remove Outermost Parentheses", - "TitleZH": "\u5220\u9664\u6700\u5916\u5c42\u7684\u62ec\u53f7", + "TitleZH": "删除最外层的括号", "TitleSlug": "remove-outermost-parentheses", "ContestSlug": "weekly-contest-131", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 131", - "ContestID_zh": "\u7b2c 131 \u573a\u5468\u8d5b" + "ContestID_zh": "第 131 场周赛" }, { "Rating": 1310.9129840277, "ID": 2058, "Title": "Find the Minimum and Maximum Number of Nodes Between Critical Points", - "TitleZH": "\u627e\u51fa\u4e34\u754c\u70b9\u4e4b\u95f4\u7684\u6700\u5c0f\u548c\u6700\u5927\u8ddd\u79bb", + "TitleZH": "找出临界点之间的最小和最大距离", "TitleSlug": "find-the-minimum-and-maximum-number-of-nodes-between-critical-points", "ContestSlug": "weekly-contest-265", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 265", - "ContestID_zh": "\u7b2c 265 \u573a\u5468\u8d5b" + "ContestID_zh": "第 265 场周赛" }, { "Rating": 1309.8100518373, "ID": 1710, "Title": "Maximum Units on a Truck", - "TitleZH": "\u5361\u8f66\u4e0a\u7684\u6700\u5927\u5355\u5143\u6570", + "TitleZH": "卡车上的最大单元数", "TitleSlug": "maximum-units-on-a-truck", "ContestSlug": "weekly-contest-222", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 222", - "ContestID_zh": "\u7b2c 222 \u573a\u5468\u8d5b" + "ContestID_zh": "第 222 场周赛" }, { "Rating": 1309.3113721825, "ID": 1451, "Title": "Rearrange Words in a Sentence", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u53e5\u5b50\u4e2d\u7684\u5355\u8bcd", + "TitleZH": "重新排列句子中的单词", "TitleSlug": "rearrange-words-in-a-sentence", "ContestSlug": "weekly-contest-189", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 189", - "ContestID_zh": "\u7b2c 189 \u573a\u5468\u8d5b" + "ContestID_zh": "第 189 场周赛" }, { "Rating": 1309.1422268153, "ID": 1897, "Title": "Redistribute Characters to Make All Strings Equal", - "TitleZH": "\u91cd\u65b0\u5206\u914d\u5b57\u7b26\u4f7f\u6240\u6709\u5b57\u7b26\u4e32\u90fd\u76f8\u7b49", + "TitleZH": "重新分配字符使所有字符串都相等", "TitleSlug": "redistribute-characters-to-make-all-strings-equal", "ContestSlug": "weekly-contest-245", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 245", - "ContestID_zh": "\u7b2c 245 \u573a\u5468\u8d5b" + "ContestID_zh": "第 245 场周赛" }, { "Rating": 1308.9617729374, "ID": 2342, "Title": "Max Sum of a Pair With Equal Sum of Digits", - "TitleZH": "\u6570\u4f4d\u548c\u76f8\u7b49\u6570\u5bf9\u7684\u6700\u5927\u548c", + "TitleZH": "数位和相等数对的最大和", "TitleSlug": "max-sum-of-a-pair-with-equal-sum-of-digits", "ContestSlug": "weekly-contest-302", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 302", - "ContestID_zh": "\u7b2c 302 \u573a\u5468\u8d5b" + "ContestID_zh": "第 302 场周赛" }, { "Rating": 1308.948547975, "ID": 2264, "Title": "Largest 3-Same-Digit Number in String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u6700\u5927\u7684 3 \u4f4d\u76f8\u540c\u6570\u5b57", + "TitleZH": "字符串中最大的 3 位相同数字", "TitleSlug": "largest-3-same-digit-number-in-string", "ContestSlug": "weekly-contest-292", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 292", - "ContestID_zh": "\u7b2c 292 \u573a\u5468\u8d5b" + "ContestID_zh": "第 292 场周赛" }, { "Rating": 1307.9800903088, "ID": 1064, "Title": "Fixed Point", - "TitleZH": "\u4e0d\u52a8\u70b9", + "TitleZH": "不动点", "TitleSlug": "fixed-point", "ContestSlug": "biweekly-contest-1", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 1", - "ContestID_zh": "\u7b2c 1 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 1 场双周赛" }, { "Rating": 1307.5663523368, "ID": 804, "Title": "Unique Morse Code Words", - "TitleZH": "\u552f\u4e00\u6469\u5c14\u65af\u5bc6\u7801\u8bcd", + "TitleZH": "唯一摩尔斯密码词", "TitleSlug": "unique-morse-code-words", "ContestSlug": "weekly-contest-77", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u5468\u8d5b" + "ContestID_zh": "第 77 场周赛" }, { "Rating": 1307.4608905199, "ID": 2085, "Title": "Count Common Words With One Occurrence", - "TitleZH": "\u7edf\u8ba1\u51fa\u73b0\u8fc7\u4e00\u6b21\u7684\u516c\u5171\u5b57\u7b26\u4e32", + "TitleZH": "统计出现过一次的公共字符串", "TitleSlug": "count-common-words-with-one-occurrence", "ContestSlug": "biweekly-contest-66", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 66 场双周赛" }, { "Rating": 1307.3797385769, "ID": 1893, "Title": "Check if All the Integers in a Range Are Covered", - "TitleZH": "\u68c0\u67e5\u662f\u5426\u533a\u57df\u5185\u6240\u6709\u6574\u6570\u90fd\u88ab\u8986\u76d6", + "TitleZH": "检查是否区域内所有整数都被覆盖", "TitleSlug": "check-if-all-the-integers-in-a-range-are-covered", "ContestSlug": "biweekly-contest-54", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 54", - "ContestID_zh": "\u7b2c 54 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 54 场双周赛" }, { "Rating": 1307.3265298181, "ID": 2022, "Title": "Convert 1D Array Into 2D Array", - "TitleZH": "\u5c06\u4e00\u7ef4\u6570\u7ec4\u8f6c\u53d8\u6210\u4e8c\u7ef4\u6570\u7ec4", + "TitleZH": "将一维数组转变成二维数组", "TitleSlug": "convert-1d-array-into-2d-array", "ContestSlug": "biweekly-contest-62", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 62", - "ContestID_zh": "\u7b2c 62 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 62 场双周赛" }, { "Rating": 1307.2991245272, "ID": 868, "Title": "Binary Gap", - "TitleZH": "\u4e8c\u8fdb\u5236\u95f4\u8ddd", + "TitleZH": "二进制间距", "TitleSlug": "binary-gap", "ContestSlug": "weekly-contest-93", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 93", - "ContestID_zh": "\u7b2c 93 \u573a\u5468\u8d5b" + "ContestID_zh": "第 93 场周赛" }, { "Rating": 1306.2821637677, "ID": 1984, "Title": "Minimum Difference Between Highest and Lowest of K Scores", - "TitleZH": "\u5b66\u751f\u5206\u6570\u7684\u6700\u5c0f\u5dee\u503c", + "TitleZH": "学生分数的最小差值", "TitleSlug": "minimum-difference-between-highest-and-lowest-of-k-scores", "ContestSlug": "weekly-contest-256", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 256", - "ContestID_zh": "\u7b2c 256 \u573a\u5468\u8d5b" + "ContestID_zh": "第 256 场周赛" }, { "Rating": 1303.5594588137, "ID": 2331, "Title": "Evaluate Boolean Binary Tree", - "TitleZH": "\u8ba1\u7b97\u5e03\u5c14\u4e8c\u53c9\u6811\u7684\u503c", + "TitleZH": "计算布尔二叉树的值", "TitleSlug": "evaluate-boolean-binary-tree", "ContestSlug": "biweekly-contest-82", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 82 场双周赛" }, { "Rating": 1303.3201984827, "ID": 783, "Title": "Minimum Distance Between BST Nodes", - "TitleZH": "\u4e8c\u53c9\u641c\u7d22\u6811\u8282\u70b9\u6700\u5c0f\u8ddd\u79bb", + "TitleZH": "二叉搜索树节点最小距离", "TitleSlug": "minimum-distance-between-bst-nodes", "ContestSlug": "weekly-contest-71", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 71", - "ContestID_zh": "\u7b2c 71 \u573a\u5468\u8d5b" + "ContestID_zh": "第 71 场周赛" }, { "Rating": 1303.022570497, "ID": 1338, "Title": "Reduce Array Size to The Half", - "TitleZH": "\u6570\u7ec4\u5927\u5c0f\u51cf\u534a", + "TitleZH": "数组大小减半", "TitleSlug": "reduce-array-size-to-the-half", "ContestSlug": "weekly-contest-174", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 174", - "ContestID_zh": "\u7b2c 174 \u573a\u5468\u8d5b" + "ContestID_zh": "第 174 场周赛" }, { "Rating": 1303.0179795942, "ID": 1051, "Title": "Height Checker", - "TitleZH": "\u9ad8\u5ea6\u68c0\u67e5\u5668", + "TitleZH": "高度检查器", "TitleSlug": "height-checker", "ContestSlug": "weekly-contest-138", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 138", - "ContestID_zh": "\u7b2c 138 \u573a\u5468\u8d5b" + "ContestID_zh": "第 138 场周赛" }, { "Rating": 1302.7005460171, "ID": 1266, "Title": "Minimum Time Visiting All Points", - "TitleZH": "\u8bbf\u95ee\u6240\u6709\u70b9\u7684\u6700\u5c0f\u65f6\u95f4", + "TitleZH": "访问所有点的最小时间", "TitleSlug": "minimum-time-visiting-all-points", "ContestSlug": "weekly-contest-164", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 164", - "ContestID_zh": "\u7b2c 164 \u573a\u5468\u8d5b" + "ContestID_zh": "第 164 场周赛" }, { "Rating": 1302.6469071738, "ID": 1991, "Title": "Find the Middle Index in Array", - "TitleZH": "\u627e\u5230\u6570\u7ec4\u7684\u4e2d\u95f4\u4f4d\u7f6e", + "TitleZH": "找到数组的中间位置", "TitleSlug": "find-the-middle-index-in-array", "ContestSlug": "biweekly-contest-60", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 60", - "ContestID_zh": "\u7b2c 60 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 60 场双周赛" }, { "Rating": 1301.9432665133, "ID": 2243, "Title": "Calculate Digit Sum of a String", - "TitleZH": "\u8ba1\u7b97\u5b57\u7b26\u4e32\u7684\u6570\u5b57\u548c", + "TitleZH": "计算字符串的数字和", "TitleSlug": "calculate-digit-sum-of-a-string", "ContestSlug": "weekly-contest-289", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 289", - "ContestID_zh": "\u7b2c 289 \u573a\u5468\u8d5b" + "ContestID_zh": "第 289 场周赛" }, { "Rating": 1301.4117757184, "ID": 806, "Title": "Number of Lines To Write String", - "TitleZH": "\u5199\u5b57\u7b26\u4e32\u9700\u8981\u7684\u884c\u6570", + "TitleZH": "写字符串需要的行数", "TitleSlug": "number-of-lines-to-write-string", "ContestSlug": "weekly-contest-77", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u5468\u8d5b" + "ContestID_zh": "第 77 场周赛" }, { "Rating": 1301.4027057843, "ID": 1646, "Title": "Get Maximum in Generated Array", - "TitleZH": "\u83b7\u53d6\u751f\u6210\u6570\u7ec4\u4e2d\u7684\u6700\u5927\u503c", + "TitleZH": "获取生成数组中的最大值", "TitleSlug": "get-maximum-in-generated-array", "ContestSlug": "weekly-contest-214", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 214", - "ContestID_zh": "\u7b2c 214 \u573a\u5468\u8d5b" + "ContestID_zh": "第 214 场周赛" }, { "Rating": 1301.381757401, "ID": 1877, "Title": "Minimize Maximum Pair Sum in Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u6700\u5927\u6570\u5bf9\u548c\u7684\u6700\u5c0f\u503c", + "TitleZH": "数组中最大数对和的最小值", "TitleSlug": "minimize-maximum-pair-sum-in-array", "ContestSlug": "biweekly-contest-53", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 53", - "ContestID_zh": "\u7b2c 53 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 53 场双周赛" }, { "Rating": 1300.9041426403, "ID": 1844, "Title": "Replace All Digits with Characters", - "TitleZH": "\u5c06\u6240\u6709\u6570\u5b57\u7528\u5b57\u7b26\u66ff\u6362", + "TitleZH": "将所有数字用字符替换", "TitleSlug": "replace-all-digits-with-characters", "ContestSlug": "biweekly-contest-51", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 51", - "ContestID_zh": "\u7b2c 51 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 51 场双周赛" }, { "Rating": 1300.8009461582, "ID": 1790, "Title": "Check if One String Swap Can Make Strings Equal", - "TitleZH": "\u4ec5\u6267\u884c\u4e00\u6b21\u5b57\u7b26\u4e32\u4ea4\u6362\u80fd\u5426\u4f7f\u4e24\u4e2a\u5b57\u7b26\u4e32\u76f8\u7b49", + "TitleZH": "仅执行一次字符串交换能否使两个字符串相等", "TitleSlug": "check-if-one-string-swap-can-make-strings-equal", "ContestSlug": "weekly-contest-232", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 232", - "ContestID_zh": "\u7b2c 232 \u573a\u5468\u8d5b" + "ContestID_zh": "第 232 场周赛" }, { "Rating": 1299.8393735643, "ID": 2287, "Title": "Rearrange Characters to Make Target String", - "TitleZH": "\u91cd\u6392\u5b57\u7b26\u5f62\u6210\u76ee\u6807\u5b57\u7b26\u4e32", + "TitleZH": "重排字符形成目标字符串", "TitleSlug": "rearrange-characters-to-make-target-string", "ContestSlug": "weekly-contest-295", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 295", - "ContestID_zh": "\u7b2c 295 \u573a\u5468\u8d5b" + "ContestID_zh": "第 295 场周赛" }, { "Rating": 1299.6035132992, "ID": 953, "Title": "Verifying an Alien Dictionary", - "TitleZH": "\u9a8c\u8bc1\u5916\u661f\u8bed\u8bcd\u5178", + "TitleZH": "验证外星语词典", "TitleSlug": "verifying-an-alien-dictionary", "ContestSlug": "weekly-contest-114", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 114", - "ContestID_zh": "\u7b2c 114 \u573a\u5468\u8d5b" + "ContestID_zh": "第 114 场周赛" }, { "Rating": 1298.5921473119, "ID": 908, "Title": "Smallest Range I", - "TitleZH": "\u6700\u5c0f\u5dee\u503c I", + "TitleZH": "最小差值 I", "TitleSlug": "smallest-range-i", "ContestSlug": "weekly-contest-103", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 103", - "ContestID_zh": "\u7b2c 103 \u573a\u5468\u8d5b" + "ContestID_zh": "第 103 场周赛" }, { "Rating": 1297.5338328524, "ID": 819, "Title": "Most Common Word", - "TitleZH": "\u6700\u5e38\u89c1\u7684\u5355\u8bcd", + "TitleZH": "最常见的单词", "TitleSlug": "most-common-word", "ContestSlug": "weekly-contest-80", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u5468\u8d5b" + "ContestID_zh": "第 80 场周赛" }, { "Rating": 1297.3006230632, "ID": 1598, "Title": "Crawler Log Folder", - "TitleZH": "\u6587\u4ef6\u5939\u64cd\u4f5c\u65e5\u5fd7\u641c\u96c6\u5668", + "TitleZH": "文件夹操作日志搜集器", "TitleSlug": "crawler-log-folder", "ContestSlug": "weekly-contest-208", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 208", - "ContestID_zh": "\u7b2c 208 \u573a\u5468\u8d5b" + "ContestID_zh": "第 208 场周赛" }, { "Rating": 1295.8868965907, "ID": 2224, "Title": "Minimum Number of Operations to Convert Time", - "TitleZH": "\u8f6c\u5316\u65f6\u95f4\u9700\u8981\u7684\u6700\u5c11\u64cd\u4f5c\u6570", + "TitleZH": "转化时间需要的最少操作数", "TitleSlug": "minimum-number-of-operations-to-convert-time", "ContestSlug": "weekly-contest-287", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 287", - "ContestID_zh": "\u7b2c 287 \u573a\u5468\u8d5b" + "ContestID_zh": "第 287 场周赛" }, { "Rating": 1295.4970938463, "ID": 1539, "Title": "Kth Missing Positive Number", - "TitleZH": "\u7b2c k \u4e2a\u7f3a\u5931\u7684\u6b63\u6574\u6570", + "TitleZH": "第 k 个缺失的正整数", "TitleSlug": "kth-missing-positive-number", "ContestSlug": "biweekly-contest-32", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 32", - "ContestID_zh": "\u7b2c 32 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 32 场双周赛" }, { "Rating": 1294.7724244077, "ID": 1769, "Title": "Minimum Number of Operations to Move All Balls to Each Box", - "TitleZH": "\u79fb\u52a8\u6240\u6709\u7403\u5230\u6bcf\u4e2a\u76d2\u5b50\u6240\u9700\u7684\u6700\u5c0f\u64cd\u4f5c\u6570", + "TitleZH": "移动所有球到每个盒子所需的最小操作数", "TitleSlug": "minimum-number-of-operations-to-move-all-balls-to-each-box", "ContestSlug": "weekly-contest-229", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 229", - "ContestID_zh": "\u7b2c 229 \u573a\u5468\u8d5b" + "ContestID_zh": "第 229 场周赛" }, { "Rating": 1294.5800368625, "ID": 2273, "Title": "Find Resultant Array After Removing Anagrams", - "TitleZH": "\u79fb\u9664\u5b57\u6bcd\u5f02\u4f4d\u8bcd\u540e\u7684\u7ed3\u679c\u6570\u7ec4", + "TitleZH": "移除字母异位词后的结果数组", "TitleSlug": "find-resultant-array-after-removing-anagrams", "ContestSlug": "weekly-contest-293", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 293", - "ContestID_zh": "\u7b2c 293 \u573a\u5468\u8d5b" + "ContestID_zh": "第 293 场周赛" }, { "Rating": 1294.5297034757, "ID": 1716, "Title": "Calculate Money in Leetcode Bank", - "TitleZH": "\u8ba1\u7b97\u529b\u6263\u94f6\u884c\u7684\u94b1", + "TitleZH": "计算力扣银行的钱", "TitleSlug": "calculate-money-in-leetcode-bank", "ContestSlug": "biweekly-contest-43", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 43", - "ContestID_zh": "\u7b2c 43 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 43 场双周赛" }, { "Rating": 1293.4904281819, "ID": 1551, "Title": "Minimum Operations to Make Array Equal", - "TitleZH": "\u4f7f\u6570\u7ec4\u4e2d\u6240\u6709\u5143\u7d20\u76f8\u7b49\u7684\u6700\u5c0f\u64cd\u4f5c\u6570", + "TitleZH": "使数组中所有元素相等的最小操作数", "TitleSlug": "minimum-operations-to-make-array-equal", "ContestSlug": "weekly-contest-202", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 202", - "ContestID_zh": "\u7b2c 202 \u573a\u5468\u8d5b" + "ContestID_zh": "第 202 场周赛" }, { "Rating": 1290.0361853035, "ID": 1859, "Title": "Sorting the Sentence", - "TitleZH": "\u5c06\u53e5\u5b50\u6392\u5e8f", + "TitleZH": "将句子排序", "TitleSlug": "sorting-the-sentence", "ContestSlug": "biweekly-contest-52", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 52", - "ContestID_zh": "\u7b2c 52 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 52 场双周赛" }, { "Rating": 1289.945159062, "ID": 2428, "Title": "Maximum Sum of an Hourglass", - "TitleZH": "\u6c99\u6f0f\u7684\u6700\u5927\u603b\u548c", + "TitleZH": "沙漏的最大总和", "TitleSlug": "maximum-sum-of-an-hourglass", "ContestSlug": "weekly-contest-313", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 313", - "ContestID_zh": "\u7b2c 313 \u573a\u5468\u8d5b" + "ContestID_zh": "第 313 场周赛" }, { "Rating": 1289.1912178611, "ID": 2190, "Title": "Most Frequent Number Following Key In an Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u7d27\u8ddf key \u4e4b\u540e\u51fa\u73b0\u6700\u9891\u7e41\u7684\u6570\u5b57", + "TitleZH": "数组中紧跟 key 之后出现最频繁的数字", "TitleSlug": "most-frequent-number-following-key-in-an-array", "ContestSlug": "biweekly-contest-73", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 73", - "ContestID_zh": "\u7b2c 73 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 73 场双周赛" }, { "Rating": 1288.5621697906, "ID": 1684, "Title": "Count the Number of Consistent Strings", - "TitleZH": "\u7edf\u8ba1\u4e00\u81f4\u5b57\u7b26\u4e32\u7684\u6570\u76ee", + "TitleZH": "统计一致字符串的数目", "TitleSlug": "count-the-number-of-consistent-strings", "ContestSlug": "biweekly-contest-41", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 41", - "ContestID_zh": "\u7b2c 41 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 41 场双周赛" }, { "Rating": 1288.1970048184, "ID": 1403, "Title": "Minimum Subsequence in Non-Increasing Order", - "TitleZH": "\u975e\u9012\u589e\u987a\u5e8f\u7684\u6700\u5c0f\u5b50\u5e8f\u5217", + "TitleZH": "非递增顺序的最小子序列", "TitleSlug": "minimum-subsequence-in-non-increasing-order", "ContestSlug": "weekly-contest-183", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 183", - "ContestID_zh": "\u7b2c 183 \u573a\u5468\u8d5b" + "ContestID_zh": "第 183 场周赛" }, { "Rating": 1287.9002757199, "ID": 993, "Title": "Cousins in Binary Tree", - "TitleZH": "\u4e8c\u53c9\u6811\u7684\u5802\u5144\u5f1f\u8282\u70b9", + "TitleZH": "二叉树的堂兄弟节点", "TitleSlug": "cousins-in-binary-tree", "ContestSlug": "weekly-contest-124", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 124", - "ContestID_zh": "\u7b2c 124 \u573a\u5468\u8d5b" + "ContestID_zh": "第 124 场周赛" }, { "Rating": 1287.8970301681, "ID": 872, "Title": "Leaf-Similar Trees", - "TitleZH": "\u53f6\u5b50\u76f8\u4f3c\u7684\u6811", + "TitleZH": "叶子相似的树", "TitleSlug": "leaf-similar-trees", "ContestSlug": "weekly-contest-94", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 94", - "ContestID_zh": "\u7b2c 94 \u573a\u5468\u8d5b" + "ContestID_zh": "第 94 场周赛" }, { "Rating": 1287.1053917452, "ID": 1103, "Title": "Distribute Candies to People", - "TitleZH": "\u5206\u7cd6\u679c II", + "TitleZH": "分糖果 II", "TitleSlug": "distribute-candies-to-people", "ContestSlug": "weekly-contest-143", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 143", - "ContestID_zh": "\u7b2c 143 \u573a\u5468\u8d5b" + "ContestID_zh": "第 143 场周赛" }, { "Rating": 1286.7934718934, "ID": 1791, "Title": "Find Center of Star Graph", - "TitleZH": "\u627e\u51fa\u661f\u578b\u56fe\u7684\u4e2d\u5fc3\u8282\u70b9", + "TitleZH": "找出星型图的中心节点", "TitleSlug": "find-center-of-star-graph", "ContestSlug": "weekly-contest-232", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 232", - "ContestID_zh": "\u7b2c 232 \u573a\u5468\u8d5b" + "ContestID_zh": "第 232 场周赛" }, { "Rating": 1286.3841359213, "ID": 2352, "Title": "Equal Row and Column Pairs", - "TitleZH": "\u76f8\u7b49\u884c\u5217\u5bf9", + "TitleZH": "相等行列对", "TitleSlug": "equal-row-and-column-pairs", "ContestSlug": "weekly-contest-303", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 303", - "ContestID_zh": "\u7b2c 303 \u573a\u5468\u8d5b" + "ContestID_zh": "第 303 场周赛" }, { "Rating": 1286.3167937403, "ID": 1047, "Title": "Remove All Adjacent Duplicates In String", - "TitleZH": "\u5220\u9664\u5b57\u7b26\u4e32\u4e2d\u7684\u6240\u6709\u76f8\u90bb\u91cd\u590d\u9879", + "TitleZH": "删除字符串中的所有相邻重复项", "TitleSlug": "remove-all-adjacent-duplicates-in-string", "ContestSlug": "weekly-contest-137", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 137", - "ContestID_zh": "\u7b2c 137 \u573a\u5468\u8d5b" + "ContestID_zh": "第 137 场周赛" }, { "Rating": 1285.9726675488, "ID": 1381, "Title": "Design a Stack With Increment Operation", - "TitleZH": "\u8bbe\u8ba1\u4e00\u4e2a\u652f\u6301\u589e\u91cf\u64cd\u4f5c\u7684\u6808", + "TitleZH": "设计一个支持增量操作的栈", "TitleSlug": "design-a-stack-with-increment-operation", "ContestSlug": "weekly-contest-180", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 180", - "ContestID_zh": "\u7b2c 180 \u573a\u5468\u8d5b" + "ContestID_zh": "第 180 场周赛" }, { "Rating": 1285.7282180721, "ID": 860, "Title": "Lemonade Change", - "TitleZH": "\u67e0\u6aac\u6c34\u627e\u96f6", + "TitleZH": "柠檬水找零", "TitleSlug": "lemonade-change", "ContestSlug": "weekly-contest-91", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 91", - "ContestID_zh": "\u7b2c 91 \u573a\u5468\u8d5b" + "ContestID_zh": "第 91 场周赛" }, { "Rating": 1284.4514662456, "ID": 1720, "Title": "Decode XORed Array", - "TitleZH": "\u89e3\u7801\u5f02\u6216\u540e\u7684\u6570\u7ec4", + "TitleZH": "解码异或后的数组", "TitleSlug": "decode-xored-array", "ContestSlug": "weekly-contest-223", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 223", - "ContestID_zh": "\u7b2c 223 \u573a\u5468\u8d5b" + "ContestID_zh": "第 223 场周赛" }, { "Rating": 1284.3625733813, "ID": 1481, "Title": "Least Number of Unique Integers after K Removals", - "TitleZH": "\u4e0d\u540c\u6574\u6570\u7684\u6700\u5c11\u6570\u76ee", + "TitleZH": "不同整数的最少数目", "TitleSlug": "least-number-of-unique-integers-after-k-removals", "ContestSlug": "weekly-contest-193", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 193", - "ContestID_zh": "\u7b2c 193 \u573a\u5468\u8d5b" + "ContestID_zh": "第 193 场周赛" }, { "Rating": 1283.6412252736, "ID": 2303, "Title": "Calculate Amount Paid in Taxes", - "TitleZH": "\u8ba1\u7b97\u5e94\u7f34\u7a0e\u6b3e\u603b\u989d", + "TitleZH": "计算应缴税款总额", "TitleSlug": "calculate-amount-paid-in-taxes", "ContestSlug": "weekly-contest-297", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 297", - "ContestID_zh": "\u7b2c 297 \u573a\u5468\u8d5b" + "ContestID_zh": "第 297 场周赛" }, { "Rating": 1283.51021448, "ID": 1507, "Title": "Reformat Date", - "TitleZH": "\u8f6c\u53d8\u65e5\u671f\u683c\u5f0f", + "TitleZH": "转变日期格式", "TitleSlug": "reformat-date", "ContestSlug": "biweekly-contest-30", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 30", - "ContestID_zh": "\u7b2c 30 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 30 场双周赛" }, { "Rating": 1283.4980318021, "ID": 1252, "Title": "Cells with Odd Values in a Matrix", - "TitleZH": "\u5947\u6570\u503c\u5355\u5143\u683c\u7684\u6570\u76ee", + "TitleZH": "奇数值单元格的数目", "TitleSlug": "cells-with-odd-values-in-a-matrix", "ContestSlug": "weekly-contest-162", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 162", - "ContestID_zh": "\u7b2c 162 \u573a\u5468\u8d5b" + "ContestID_zh": "第 162 场周赛" }, { "Rating": 1282.4111853142, "ID": 1837, "Title": "Sum of Digits in Base K", - "TitleZH": "K \u8fdb\u5236\u8868\u793a\u4e0b\u7684\u5404\u4f4d\u6570\u5b57\u603b\u548c", + "TitleZH": "K 进制表示下的各位数字总和", "TitleSlug": "sum-of-digits-in-base-k", "ContestSlug": "weekly-contest-238", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 238", - "ContestID_zh": "\u7b2c 238 \u573a\u5468\u8d5b" + "ContestID_zh": "第 238 场周赛" }, { "Rating": 1282.1502428906, "ID": 2220, "Title": "Minimum Bit Flips to Convert Number", - "TitleZH": "\u8f6c\u6362\u6570\u5b57\u7684\u6700\u5c11\u4f4d\u7ffb\u8f6c\u6b21\u6570", + "TitleZH": "转换数字的最少位翻转次数", "TitleSlug": "minimum-bit-flips-to-convert-number", "ContestSlug": "biweekly-contest-75", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 75 场双周赛" }, { "Rating": 1281.9771427903, "ID": 1624, "Title": "Largest Substring Between Two Equal Characters", - "TitleZH": "\u4e24\u4e2a\u76f8\u540c\u5b57\u7b26\u4e4b\u95f4\u7684\u6700\u957f\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "两个相同字符之间的最长子字符串", "TitleSlug": "largest-substring-between-two-equal-characters", "ContestSlug": "weekly-contest-211", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 211", - "ContestID_zh": "\u7b2c 211 \u573a\u5468\u8d5b" + "ContestID_zh": "第 211 场周赛" }, { "Rating": 1280.2941647587, "ID": 1572, "Title": "Matrix Diagonal Sum", - "TitleZH": "\u77e9\u9635\u5bf9\u89d2\u7ebf\u5143\u7d20\u7684\u548c", + "TitleZH": "矩阵对角线元素的和", "TitleSlug": "matrix-diagonal-sum", "ContestSlug": "biweekly-contest-34", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 34", - "ContestID_zh": "\u7b2c 34 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 34 场双周赛" }, { "Rating": 1280.2203734882, "ID": 2125, "Title": "Number of Laser Beams in a Bank", - "TitleZH": "\u94f6\u884c\u4e2d\u7684\u6fc0\u5149\u675f\u6570\u91cf", + "TitleZH": "银行中的激光束数量", "TitleSlug": "number-of-laser-beams-in-a-bank", "ContestSlug": "weekly-contest-274", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 274", - "ContestID_zh": "\u7b2c 274 \u573a\u5468\u8d5b" + "ContestID_zh": "第 274 场周赛" }, { "Rating": 1279.7894769956, "ID": 2269, "Title": "Find the K-Beauty of a Number", - "TitleZH": "\u627e\u5230\u4e00\u4e2a\u6570\u5b57\u7684 K \u7f8e\u4e3d\u503c", + "TitleZH": "找到一个数字的 K 美丽值", "TitleSlug": "find-the-k-beauty-of-a-number", "ContestSlug": "biweekly-contest-78", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 78", - "ContestID_zh": "\u7b2c 78 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 78 场双周赛" }, { "Rating": 1279.7669712099, "ID": 1002, "Title": "Find Common Characters", - "TitleZH": "\u67e5\u627e\u5e38\u7528\u5b57\u7b26", + "TitleZH": "查找常用字符", "TitleSlug": "find-common-characters", "ContestSlug": "weekly-contest-126", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 126", - "ContestID_zh": "\u7b2c 126 \u573a\u5468\u8d5b" + "ContestID_zh": "第 126 场周赛" }, { "Rating": 1279.3383966145, "ID": 1534, "Title": "Count Good Triplets", - "TitleZH": "\u7edf\u8ba1\u597d\u4e09\u5143\u7ec4", + "TitleZH": "统计好三元组", "TitleSlug": "count-good-triplets", "ContestSlug": "weekly-contest-200", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 200", - "ContestID_zh": "\u7b2c 200 \u573a\u5468\u8d5b" + "ContestID_zh": "第 200 场周赛" }, { "Rating": 1277.9987709491, "ID": 1742, "Title": "Maximum Number of Balls in a Box", - "TitleZH": "\u76d2\u5b50\u4e2d\u5c0f\u7403\u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "盒子中小球的最大数量", "TitleSlug": "maximum-number-of-balls-in-a-box", "ContestSlug": "weekly-contest-226", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 226", - "ContestID_zh": "\u7b2c 226 \u573a\u5468\u8d5b" + "ContestID_zh": "第 226 场周赛" }, { "Rating": 1277.8260125315, "ID": 1317, "Title": "Convert Integer to the Sum of Two No-Zero Integers", - "TitleZH": "\u5c06\u6574\u6570\u8f6c\u6362\u4e3a\u4e24\u4e2a\u65e0\u96f6\u6574\u6570\u7684\u548c", + "TitleZH": "将整数转换为两个无零整数的和", "TitleSlug": "convert-integer-to-the-sum-of-two-no-zero-integers", "ContestSlug": "weekly-contest-171", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 171", - "ContestID_zh": "\u7b2c 171 \u573a\u5468\u8d5b" + "ContestID_zh": "第 171 场周赛" }, { "Rating": 1275.6108152653, "ID": 2150, "Title": "Find All Lonely Numbers in the Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5b64\u72ec\u6570\u5b57", + "TitleZH": "找出数组中的所有孤独数字", "TitleSlug": "find-all-lonely-numbers-in-the-array", "ContestSlug": "weekly-contest-277", "ProblemIndex": "Q3", "ContestID_en": "Weekly Contest 277", - "ContestID_zh": "\u7b2c 277 \u573a\u5468\u8d5b" + "ContestID_zh": "第 277 场周赛" }, { "Rating": 1274.881752217, "ID": 2129, "Title": "Capitalize the Title", - "TitleZH": "\u5c06\u6807\u9898\u9996\u5b57\u6bcd\u5927\u5199", + "TitleZH": "将标题首字母大写", "TitleSlug": "capitalize-the-title", "ContestSlug": "biweekly-contest-69", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 69 场双周赛" }, { "Rating": 1274.7596170193, "ID": 1078, "Title": "Occurrences After Bigram", - "TitleZH": "Bigram \u5206\u8bcd", + "TitleZH": "Bigram 分词", "TitleSlug": "occurrences-after-bigram", "ContestSlug": "weekly-contest-140", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 140", - "ContestID_zh": "\u7b2c 140 \u573a\u5468\u8d5b" + "ContestID_zh": "第 140 场周赛" }, { "Rating": 1274.6742564805, "ID": 1005, "Title": "Maximize Sum Of Array After K Negations", - "TitleZH": "K \u6b21\u53d6\u53cd\u540e\u6700\u5927\u5316\u7684\u6570\u7ec4\u548c", + "TitleZH": "K 次取反后最大化的数组和", "TitleSlug": "maximize-sum-of-array-after-k-negations", "ContestSlug": "weekly-contest-127", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 127", - "ContestID_zh": "\u7b2c 127 \u573a\u5468\u8d5b" + "ContestID_zh": "第 127 场周赛" }, { "Rating": 1273.0588534723, "ID": 2068, "Title": "Check Whether Two Strings are Almost Equivalent", - "TitleZH": "\u68c0\u67e5\u4e24\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u51e0\u4e4e\u76f8\u7b49", + "TitleZH": "检查两个字符串是否几乎相等", "TitleSlug": "check-whether-two-strings-are-almost-equivalent", "ContestSlug": "biweekly-contest-65", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 65", - "ContestID_zh": "\u7b2c 65 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 65 场双周赛" }, { "Rating": 1273.046473797, "ID": 2138, "Title": "Divide a String Into Groups of Size k", - "TitleZH": "\u5c06\u5b57\u7b26\u4e32\u62c6\u5206\u4e3a\u82e5\u5e72\u957f\u5ea6\u4e3a k \u7684\u7ec4", + "TitleZH": "将字符串拆分为若干长度为 k 的组", "TitleSlug": "divide-a-string-into-groups-of-size-k", "ContestSlug": "weekly-contest-276", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 276", - "ContestID_zh": "\u7b2c 276 \u573a\u5468\u8d5b" + "ContestID_zh": "第 276 场周赛" }, { "Rating": 1271.7726574892, "ID": 2006, "Title": "Count Number of Pairs With Absolute Difference K", - "TitleZH": "\u5dee\u7684\u7edd\u5bf9\u503c\u4e3a K \u7684\u6570\u5bf9\u6570\u76ee", + "TitleZH": "差的绝对值为 K 的数对数目", "TitleSlug": "count-number-of-pairs-with-absolute-difference-k", "ContestSlug": "biweekly-contest-61", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 61", - "ContestID_zh": "\u7b2c 61 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 61 场双周赛" }, { "Rating": 1271.7055549365, "ID": 824, "Title": "Goat Latin", - "TitleZH": "\u5c71\u7f8a\u62c9\u4e01\u6587", + "TitleZH": "山羊拉丁文", "TitleSlug": "goat-latin", "ContestSlug": "weekly-contest-82", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 82", - "ContestID_zh": "\u7b2c 82 \u573a\u5468\u8d5b" + "ContestID_zh": "第 82 场周赛" }, { "Rating": 1271.3776510163, "ID": 1556, "Title": "Thousand Separator", - "TitleZH": "\u5343\u4f4d\u5206\u9694\u6570", + "TitleZH": "千位分隔数", "TitleSlug": "thousand-separator", "ContestSlug": "biweekly-contest-33", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 33", - "ContestID_zh": "\u7b2c 33 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 33 场双周赛" }, { "Rating": 1271.3313760514, "ID": 925, "Title": "Long Pressed Name", - "TitleZH": "\u957f\u6309\u952e\u5165", + "TitleZH": "长按键入", "TitleSlug": "long-pressed-name", "ContestSlug": "weekly-contest-107", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 107", - "ContestID_zh": "\u7b2c 107 \u573a\u5468\u8d5b" + "ContestID_zh": "第 107 场周赛" }, { "Rating": 1270.6712381632, "ID": 2363, "Title": "Merge Similar Items", - "TitleZH": "\u5408\u5e76\u76f8\u4f3c\u7684\u7269\u54c1", + "TitleZH": "合并相似的物品", "TitleSlug": "merge-similar-items", "ContestSlug": "biweekly-contest-84", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 84 场双周赛" }, { "Rating": 1269.7567553523, "ID": 2032, "Title": "Two Out of Three", - "TitleZH": "\u81f3\u5c11\u5728\u4e24\u4e2a\u6570\u7ec4\u4e2d\u51fa\u73b0\u7684\u503c", + "TitleZH": "至少在两个数组中出现的值", "TitleSlug": "two-out-of-three", "ContestSlug": "weekly-contest-262", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 262", - "ContestID_zh": "\u7b2c 262 \u573a\u5468\u8d5b" + "ContestID_zh": "第 262 场周赛" }, { "Rating": 1268.5768566953, "ID": 1447, "Title": "Simplified Fractions", - "TitleZH": "\u6700\u7b80\u5206\u6570", + "TitleZH": "最简分数", "TitleSlug": "simplified-fractions", "ContestSlug": "biweekly-contest-26", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 26", - "ContestID_zh": "\u7b2c 26 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 26 场双周赛" }, { "Rating": 1268.0287696194, "ID": 2325, "Title": "Decode the Message", - "TitleZH": "\u89e3\u5bc6\u6d88\u606f", + "TitleZH": "解密消息", "TitleSlug": "decode-the-message", "ContestSlug": "weekly-contest-300", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 300", - "ContestID_zh": "\u7b2c 300 \u573a\u5468\u8d5b" + "ContestID_zh": "第 300 场周赛" }, { "Rating": 1267.223591366, "ID": 1282, "Title": "Group the People Given the Group Size They Belong To", - "TitleZH": "\u7528\u6237\u5206\u7ec4", + "TitleZH": "用户分组", "TitleSlug": "group-the-people-given-the-group-size-they-belong-to", "ContestSlug": "weekly-contest-166", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 166", - "ContestID_zh": "\u7b2c 166 \u573a\u5468\u8d5b" + "ContestID_zh": "第 166 场周赛" }, { "Rating": 1266.7001363197, "ID": 2432, "Title": "The Employee That Worked on the Longest Task", - "TitleZH": "\u5904\u7406\u7528\u65f6\u6700\u957f\u7684\u90a3\u4e2a\u4efb\u52a1\u7684\u5458\u5de5", + "TitleZH": "处理用时最长的那个任务的员工", "TitleSlug": "the-employee-that-worked-on-the-longest-task", "ContestSlug": "weekly-contest-314", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 314", - "ContestID_zh": "\u7b2c 314 \u573a\u5468\u8d5b" + "ContestID_zh": "第 314 场周赛" }, { "Rating": 1266.341468955, "ID": 2200, "Title": "Find All K-Distant Indices in an Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u4e2d\u7684\u6240\u6709 K \u8fd1\u90bb\u4e0b\u6807", + "TitleZH": "找出数组中的所有 K 近邻下标", "TitleSlug": "find-all-k-distant-indices-in-an-array", "ContestSlug": "weekly-contest-284", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 284", - "ContestID_zh": "\u7b2c 284 \u573a\u5468\u8d5b" + "ContestID_zh": "第 284 场周赛" }, { "Rating": 1266.3368046515, "ID": 821, "Title": "Shortest Distance to a Character", - "TitleZH": "\u5b57\u7b26\u7684\u6700\u77ed\u8ddd\u79bb", + "TitleZH": "字符的最短距离", "TitleSlug": "shortest-distance-to-a-character", "ContestSlug": "weekly-contest-81", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u5468\u8d5b" + "ContestID_zh": "第 81 场周赛" }, { "Rating": 1264.4836883082, "ID": 1736, "Title": "Latest Time by Replacing Hidden Digits", - "TitleZH": "\u66ff\u6362\u9690\u85cf\u6570\u5b57\u5f97\u5230\u7684\u6700\u665a\u65f6\u95f4", + "TitleZH": "替换隐藏数字得到的最晚时间", "TitleSlug": "latest-time-by-replacing-hidden-digits", "ContestSlug": "weekly-contest-225", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 225", - "ContestID_zh": "\u7b2c 225 \u573a\u5468\u8d5b" + "ContestID_zh": "第 225 场周赛" }, { "Rating": 1264.4778916192, "ID": 2248, "Title": "Intersection of Multiple Arrays", - "TitleZH": "\u591a\u4e2a\u6570\u7ec4\u6c42\u4ea4\u96c6", + "TitleZH": "多个数组求交集", "TitleSlug": "intersection-of-multiple-arrays", "ContestSlug": "weekly-contest-290", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 290", - "ContestID_zh": "\u7b2c 290 \u573a\u5468\u8d5b" + "ContestID_zh": "第 290 场周赛" }, { "Rating": 1264.2868345638, "ID": 2133, "Title": "Check if Every Row and Column Contains All Numbers", - "TitleZH": "\u68c0\u67e5\u662f\u5426\u6bcf\u4e00\u884c\u6bcf\u4e00\u5217\u90fd\u5305\u542b\u5168\u90e8\u6574\u6570", + "TitleZH": "检查是否每一行每一列都包含全部整数", "TitleSlug": "check-if-every-row-and-column-contains-all-numbers", "ContestSlug": "weekly-contest-275", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 275", - "ContestID_zh": "\u7b2c 275 \u573a\u5468\u8d5b" + "ContestID_zh": "第 275 场周赛" }, { "Rating": 1263.2728668041, "ID": 1456, "Title": "Maximum Number of Vowels in a Substring of Given Length", - "TitleZH": "\u5b9a\u957f\u5b50\u4e32\u4e2d\u5143\u97f3\u7684\u6700\u5927\u6570\u76ee", + "TitleZH": "定长子串中元音的最大数目", "TitleSlug": "maximum-number-of-vowels-in-a-substring-of-given-length", "ContestSlug": "weekly-contest-190", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 190", - "ContestID_zh": "\u7b2c 190 \u573a\u5468\u8d5b" + "ContestID_zh": "第 190 场周赛" }, { "Rating": 1262.5890311992, "ID": 1089, "Title": "Duplicate Zeros", - "TitleZH": "\u590d\u5199\u96f6", + "TitleZH": "复写零", "TitleSlug": "duplicate-zeros", "ContestSlug": "weekly-contest-141", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 141", - "ContestID_zh": "\u7b2c 141 \u573a\u5468\u8d5b" + "ContestID_zh": "第 141 场周赛" }, { "Rating": 1260.9112824221, "ID": 2144, "Title": "Minimum Cost of Buying Candies With Discount", - "TitleZH": "\u6253\u6298\u8d2d\u4e70\u7cd6\u679c\u7684\u6700\u5c0f\u5f00\u9500", + "TitleZH": "打折购买糖果的最小开销", "TitleSlug": "minimum-cost-of-buying-candies-with-discount", "ContestSlug": "biweekly-contest-70", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 70", - "ContestID_zh": "\u7b2c 70 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 70 场双周赛" }, { "Rating": 1260.870208308, "ID": 2255, "Title": "Count Prefixes of a Given String", - "TitleZH": "\u7edf\u8ba1\u662f\u7ed9\u5b9a\u5b57\u7b26\u4e32\u524d\u7f00\u7684\u5b57\u7b26\u4e32\u6570\u76ee", + "TitleZH": "统计是给定字符串前缀的字符串数目", "TitleSlug": "count-prefixes-of-a-given-string", "ContestSlug": "biweekly-contest-77", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 77", - "ContestID_zh": "\u7b2c 77 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 77 场双周赛" }, { "Rating": 1260.1755576607, "ID": 1305, "Title": "All Elements in Two Binary Search Trees", - "TitleZH": "\u4e24\u68f5\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u7684\u6240\u6709\u5143\u7d20", + "TitleZH": "两棵二叉搜索树中的所有元素", "TitleSlug": "all-elements-in-two-binary-search-trees", "ContestSlug": "weekly-contest-169", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 169", - "ContestID_zh": "\u7b2c 169 \u573a\u5468\u8d5b" + "ContestID_zh": "第 169 场周赛" }, { "Rating": 1259.5707438932, "ID": 1779, "Title": "Find Nearest Point That Has the Same X or Y Coordinate", - "TitleZH": "\u627e\u5230\u6700\u8fd1\u7684\u6709\u76f8\u540c X \u6216 Y \u5750\u6807\u7684\u70b9", + "TitleZH": "找到最近的有相同 X 或 Y 坐标的点", "TitleSlug": "find-nearest-point-that-has-the-same-x-or-y-coordinate", "ContestSlug": "biweekly-contest-47", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 47", - "ContestID_zh": "\u7b2c 47 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 47 场双周赛" }, { "Rating": 1259.409726189, "ID": 884, "Title": "Uncommon Words from Two Sentences", - "TitleZH": "\u4e24\u53e5\u8bdd\u4e2d\u7684\u4e0d\u5e38\u89c1\u5355\u8bcd", + "TitleZH": "两句话中的不常见单词", "TitleSlug": "uncommon-words-from-two-sentences", "ContestSlug": "weekly-contest-97", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 97", - "ContestID_zh": "\u7b2c 97 \u573a\u5468\u8d5b" + "ContestID_zh": "第 97 场周赛" }, { "Rating": 1259.3406231708, "ID": 2404, "Title": "Most Frequent Even Element", - "TitleZH": "\u51fa\u73b0\u6700\u9891\u7e41\u7684\u5076\u6570\u5143\u7d20", + "TitleZH": "出现最频繁的偶数元素", "TitleSlug": "most-frequent-even-element", "ContestSlug": "weekly-contest-310", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 310", - "ContestID_zh": "\u7b2c 310 \u573a\u5468\u8d5b" + "ContestID_zh": "第 310 场周赛" }, { "Rating": 1259.1979660519, "ID": 1213, "Title": "Intersection of Three Sorted Arrays", - "TitleZH": "\u4e09\u4e2a\u6709\u5e8f\u6570\u7ec4\u7684\u4ea4\u96c6", + "TitleZH": "三个有序数组的交集", "TitleSlug": "intersection-of-three-sorted-arrays", "ContestSlug": "biweekly-contest-10", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 10", - "ContestID_zh": "\u7b2c 10 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 10 场双周赛" }, { "Rating": 1258.8401788462, "ID": 867, "Title": "Transpose Matrix", - "TitleZH": "\u8f6c\u7f6e\u77e9\u9635", + "TitleZH": "转置矩阵", "TitleSlug": "transpose-matrix", "ContestSlug": "weekly-contest-92", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 92", - "ContestID_zh": "\u7b2c 92 \u573a\u5468\u8d5b" + "ContestID_zh": "第 92 场周赛" }, { "Rating": 1258.6719675401, "ID": 896, "Title": "Monotonic Array", - "TitleZH": "\u5355\u8c03\u6570\u5217", + "TitleZH": "单调数列", "TitleSlug": "monotonic-array", "ContestSlug": "weekly-contest-100", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 100", - "ContestID_zh": "\u7b2c 100 \u573a\u5468\u8d5b" + "ContestID_zh": "第 100 场周赛" }, { "Rating": 1257.7670945029, "ID": 2103, "Title": "Rings and Rods", - "TitleZH": "\u73af\u548c\u6746", + "TitleZH": "环和杆", "TitleSlug": "rings-and-rods", "ContestSlug": "weekly-contest-271", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 271", - "ContestID_zh": "\u7b2c 271 \u573a\u5468\u8d5b" + "ContestID_zh": "第 271 场周赛" }, { "Rating": 1257.7082143289, "ID": 1356, "Title": "Sort Integers by The Number of 1 Bits", - "TitleZH": "\u6839\u636e\u6570\u5b57\u4e8c\u8fdb\u5236\u4e0b 1 \u7684\u6570\u76ee\u6392\u5e8f", + "TitleZH": "根据数字二进制下 1 的数目排序", "TitleSlug": "sort-integers-by-the-number-of-1-bits", "ContestSlug": "biweekly-contest-20", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 20", - "ContestID_zh": "\u7b2c 20 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 20 场双周赛" }, { "Rating": 1257.679633165, "ID": 1309, "Title": "Decrypt String from Alphabet to Integer Mapping", - "TitleZH": "\u89e3\u7801\u5b57\u6bcd\u5230\u6574\u6570\u6620\u5c04", + "TitleZH": "解码字母到整数映射", "TitleSlug": "decrypt-string-from-alphabet-to-integer-mapping", "ContestSlug": "weekly-contest-170", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 170", - "ContestID_zh": "\u7b2c 170 \u573a\u5468\u8d5b" + "ContestID_zh": "第 170 场周赛" }, { "Rating": 1257.323514611, "ID": 2114, "Title": "Maximum Number of Words Found in Sentences", - "TitleZH": "\u53e5\u5b50\u4e2d\u7684\u6700\u591a\u5355\u8bcd\u6570", + "TitleZH": "句子中的最多单词数", "TitleSlug": "maximum-number-of-words-found-in-sentences", "ContestSlug": "biweekly-contest-68", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 68 场双周赛" }, { "Rating": 1257.264923599, "ID": 2042, "Title": "Check if Numbers Are Ascending in a Sentence", - "TitleZH": "\u68c0\u67e5\u53e5\u5b50\u4e2d\u7684\u6570\u5b57\u662f\u5426\u9012\u589e", + "TitleZH": "检查句子中的数字是否递增", "TitleSlug": "check-if-numbers-are-ascending-in-a-sentence", "ContestSlug": "weekly-contest-263", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 263", - "ContestID_zh": "\u7b2c 263 \u573a\u5468\u8d5b" + "ContestID_zh": "第 263 场周赛" }, { "Rating": 1257.1556875655, "ID": 2177, "Title": "Find Three Consecutive Integers That Sum to a Given Number", - "TitleZH": "\u627e\u5230\u548c\u4e3a\u7ed9\u5b9a\u6574\u6570\u7684\u4e09\u4e2a\u8fde\u7eed\u6574\u6570", + "TitleZH": "找到和为给定整数的三个连续整数", "TitleSlug": "find-three-consecutive-integers-that-sum-to-a-given-number", "ContestSlug": "biweekly-contest-72", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 72 场双周赛" }, { "Rating": 1257.1166915286, "ID": 2180, "Title": "Count Integers With Even Digit Sum", - "TitleZH": "\u7edf\u8ba1\u5404\u4f4d\u6570\u5b57\u4e4b\u548c\u4e3a\u5076\u6570\u7684\u6574\u6570\u4e2a\u6570", + "TitleZH": "统计各位数字之和为偶数的整数个数", "TitleSlug": "count-integers-with-even-digit-sum", "ContestSlug": "weekly-contest-281", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 281", - "ContestID_zh": "\u7b2c 281 \u573a\u5468\u8d5b" + "ContestID_zh": "第 281 场周赛" }, { "Rating": 1256.6807087287, "ID": 1732, "Title": "Find the Highest Altitude", - "TitleZH": "\u627e\u5230\u6700\u9ad8\u6d77\u62d4", + "TitleZH": "找到最高海拔", "TitleSlug": "find-the-highest-altitude", "ContestSlug": "biweekly-contest-44", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 44", - "ContestID_zh": "\u7b2c 44 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 44 场双周赛" }, { "Rating": 1256.4891142083, "ID": 1085, "Title": "Sum of Digits in the Minimum Number", - "TitleZH": "\u6700\u5c0f\u5143\u7d20\u5404\u6570\u4f4d\u4e4b\u548c", + "TitleZH": "最小元素各数位之和", "TitleSlug": "sum-of-digits-in-the-minimum-number", "ContestSlug": "biweekly-contest-2", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 2", - "ContestID_zh": "\u7b2c 2 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 2 场双周赛" }, { "Rating": 1256.0514740971, "ID": 2239, "Title": "Find Closest Number to Zero", - "TitleZH": "\u627e\u5230\u6700\u63a5\u8fd1 0 \u7684\u6570\u5b57", + "TitleZH": "找到最接近 0 的数字", "TitleSlug": "find-closest-number-to-zero", "ContestSlug": "biweekly-contest-76", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 76", - "ContestID_zh": "\u7b2c 76 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 76 场双周赛" }, { "Rating": 1255.9002796024, "ID": 1037, "Title": "Valid Boomerang", - "TitleZH": "\u6709\u6548\u7684\u56de\u65cb\u9556", + "TitleZH": "有效的回旋镖", "TitleSlug": "valid-boomerang", "ContestSlug": "weekly-contest-135", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 135", - "ContestID_zh": "\u7b2c 135 \u573a\u5468\u8d5b" + "ContestID_zh": "第 135 场周赛" }, { "Rating": 1254.8626139269, "ID": 1945, "Title": "Sum of Digits of String After Convert", - "TitleZH": "\u5b57\u7b26\u4e32\u8f6c\u5316\u540e\u7684\u5404\u4f4d\u6570\u5b57\u4e4b\u548c", + "TitleZH": "字符串转化后的各位数字之和", "TitleSlug": "sum-of-digits-of-string-after-convert", "ContestSlug": "weekly-contest-251", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 251", - "ContestID_zh": "\u7b2c 251 \u573a\u5468\u8d5b" + "ContestID_zh": "第 251 场周赛" }, { "Rating": 1253.4847783954, "ID": 2283, "Title": "Check if Number Has Equal Digit Count and Digit Value", - "TitleZH": "\u5224\u65ad\u4e00\u4e2a\u6570\u7684\u6570\u5b57\u8ba1\u6570\u662f\u5426\u7b49\u4e8e\u6570\u4f4d\u7684\u503c", + "TitleZH": "判断一个数的数字计数是否等于数位的值", "TitleSlug": "check-if-number-has-equal-digit-count-and-digit-value", "ContestSlug": "biweekly-contest-79", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 79", - "ContestID_zh": "\u7b2c 79 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 79 场双周赛" }, { "Rating": 1253.1463945043, "ID": 2194, "Title": "Cells in a Range on an Excel Sheet", - "TitleZH": "Excel \u8868\u4e2d\u67d0\u4e2a\u8303\u56f4\u5185\u7684\u5355\u5143\u683c", + "TitleZH": "Excel 表中某个范围内的单元格", "TitleSlug": "cells-in-a-range-on-an-excel-sheet", "ContestSlug": "weekly-contest-283", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 283", - "ContestID_zh": "\u7b2c 283 \u573a\u5468\u8d5b" + "ContestID_zh": "第 283 场周赛" }, { "Rating": 1253.1107481745, "ID": 2186, "Title": "Minimum Number of Steps to Make Two Strings Anagram II", - "TitleZH": "\u4f7f\u4e24\u5b57\u7b26\u4e32\u4e92\u4e3a\u5b57\u6bcd\u5f02\u4f4d\u8bcd\u7684\u6700\u5c11\u6b65\u9aa4\u6570", + "TitleZH": "使两字符串互为字母异位词的最少步骤数", "TitleSlug": "minimum-number-of-steps-to-make-two-strings-anagram-ii", "ContestSlug": "weekly-contest-282", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 282", - "ContestID_zh": "\u7b2c 282 \u573a\u5468\u8d5b" + "ContestID_zh": "第 282 场周赛" }, { "Rating": 1252.8406166148, "ID": 2164, "Title": "Sort Even and Odd Indices Independently", - "TitleZH": "\u5bf9\u5947\u5076\u4e0b\u6807\u5206\u522b\u6392\u5e8f", + "TitleZH": "对奇偶下标分别排序", "TitleSlug": "sort-even-and-odd-indices-independently", "ContestSlug": "weekly-contest-279", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 279", - "ContestID_zh": "\u7b2c 279 \u573a\u5468\u8d5b" + "ContestID_zh": "第 279 场周赛" }, { "Rating": 1252.7479413966, "ID": 1833, "Title": "Maximum Ice Cream Bars", - "TitleZH": "\u96ea\u7cd5\u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "雪糕的最大数量", "TitleSlug": "maximum-ice-cream-bars", "ContestSlug": "weekly-contest-237", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 237", - "ContestID_zh": "\u7b2c 237 \u573a\u5468\u8d5b" + "ContestID_zh": "第 237 场周赛" }, { "Rating": 1251.822378691, "ID": 830, "Title": "Positions of Large Groups", - "TitleZH": "\u8f83\u5927\u5206\u7ec4\u7684\u4f4d\u7f6e", + "TitleZH": "较大分组的位置", "TitleSlug": "positions-of-large-groups", "ContestSlug": "weekly-contest-83", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u5468\u8d5b" + "ContestID_zh": "第 83 场周赛" }, { "Rating": 1250.8974254752, "ID": 2315, "Title": "Count Asterisks", - "TitleZH": "\u7edf\u8ba1\u661f\u53f7", + "TitleZH": "统计星号", "TitleSlug": "count-asterisks", "ContestSlug": "biweekly-contest-81", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 81", - "ContestID_zh": "\u7b2c 81 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 81 场双周赛" }, { "Rating": 1249.9947800752, "ID": 1150, "Title": "Check If a Number Is Majority Element in a Sorted Array", - "TitleZH": "\u68c0\u67e5\u4e00\u4e2a\u6570\u662f\u5426\u5728\u6570\u7ec4\u4e2d\u5360\u7edd\u5927\u591a\u6570", + "TitleZH": "检查一个数是否在数组中占绝大多数", "TitleSlug": "check-if-a-number-is-majority-element-in-a-sorted-array", "ContestSlug": "biweekly-contest-6", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 6", - "ContestID_zh": "\u7b2c 6 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 6 场双周赛" }, { "Rating": 1249.9086403595, "ID": 1161, "Title": "Maximum Level Sum of a Binary Tree", - "TitleZH": "\u6700\u5927\u5c42\u5185\u5143\u7d20\u548c", + "TitleZH": "最大层内元素和", "TitleSlug": "maximum-level-sum-of-a-binary-tree", "ContestSlug": "weekly-contest-150", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 150", - "ContestID_zh": "\u7b2c 150 \u573a\u5468\u8d5b" + "ContestID_zh": "第 150 场周赛" }, { "Rating": 1249.8425270142, "ID": 2395, "Title": "Find Subarrays With Equal Sum", - "TitleZH": "\u548c\u76f8\u7b49\u7684\u5b50\u6570\u7ec4", + "TitleZH": "和相等的子数组", "TitleSlug": "find-subarrays-with-equal-sum", "ContestSlug": "biweekly-contest-86", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 86", - "ContestID_zh": "\u7b2c 86 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 86 场双周赛" }, { "Rating": 1249.4294341104, "ID": 766, "Title": "Toeplitz Matrix", - "TitleZH": "\u6258\u666e\u5229\u8328\u77e9\u9635", + "TitleZH": "托普利茨矩阵", "TitleSlug": "toeplitz-matrix", "ContestSlug": "weekly-contest-68", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 68", - "ContestID_zh": "\u7b2c 68 \u573a\u5468\u8d5b" + "ContestID_zh": "第 68 场周赛" }, { "Rating": 1249.2572200035, "ID": 2279, "Title": "Maximum Bags With Full Capacity of Rocks", - "TitleZH": "\u88c5\u6ee1\u77f3\u5934\u7684\u80cc\u5305\u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "装满石头的背包的最大数量", "TitleSlug": "maximum-bags-with-full-capacity-of-rocks", "ContestSlug": "weekly-contest-294", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 294", - "ContestID_zh": "\u7b2c 294 \u573a\u5468\u8d5b" + "ContestID_zh": "第 294 场周赛" }, { "Rating": 1248.8547072235, "ID": 1903, "Title": "Largest Odd Number in String", - "TitleZH": "\u5b57\u7b26\u4e32\u4e2d\u7684\u6700\u5927\u5947\u6570", + "TitleZH": "字符串中的最大奇数", "TitleSlug": "largest-odd-number-in-string", "ContestSlug": "weekly-contest-246", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 246", - "ContestID_zh": "\u7b2c 246 \u573a\u5468\u8d5b" + "ContestID_zh": "第 246 场周赛" }, { "Rating": 1248.8026990632, "ID": 1196, "Title": "How Many Apples Can You Put into the Basket", - "TitleZH": "\u6700\u591a\u53ef\u4ee5\u4e70\u5230\u7684\u82f9\u679c\u6570\u91cf", + "TitleZH": "最多可以买到的苹果数量", "TitleSlug": "how-many-apples-can-you-put-into-the-basket", "ContestSlug": "biweekly-contest-9", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 9", - "ContestID_zh": "\u7b2c 9 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 9 场双周赛" }, { "Rating": 1248.7224675206, "ID": 1876, "Title": "Substrings of Size Three with Distinct Characters", - "TitleZH": "\u957f\u5ea6\u4e3a\u4e09\u4e14\u5404\u5b57\u7b26\u4e0d\u540c\u7684\u5b50\u5b57\u7b26\u4e32", + "TitleZH": "长度为三且各字符不同的子字符串", "TitleSlug": "substrings-of-size-three-with-distinct-characters", "ContestSlug": "biweekly-contest-53", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 53", - "ContestID_zh": "\u7b2c 53 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 53 场双周赛" }, { "Rating": 1247.3198836387, "ID": 1232, "Title": "Check If It Is a Straight Line", - "TitleZH": "\u7f00\u70b9\u6210\u7ebf", + "TitleZH": "缀点成线", "TitleSlug": "check-if-it-is-a-straight-line", "ContestSlug": "weekly-contest-159", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 159", - "ContestID_zh": "\u7b2c 159 \u573a\u5468\u8d5b" + "ContestID_zh": "第 159 场周赛" }, { "Rating": 1246.0141927368, "ID": 2016, "Title": "Maximum Difference Between Increasing Elements", - "TitleZH": "\u589e\u91cf\u5143\u7d20\u4e4b\u95f4\u7684\u6700\u5927\u5dee\u503c", + "TitleZH": "增量元素之间的最大差值", "TitleSlug": "maximum-difference-between-increasing-elements", "ContestSlug": "weekly-contest-260", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 260", - "ContestID_zh": "\u7b2c 260 \u573a\u5468\u8d5b" + "ContestID_zh": "第 260 场周赛" }, { "Rating": 1245.2999833877, "ID": 1518, "Title": "Water Bottles", - "TitleZH": "\u6362\u9152\u95ee\u9898", + "TitleZH": "换酒问题", "TitleSlug": "water-bottles", "ContestSlug": "weekly-contest-198", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 198", - "ContestID_zh": "\u7b2c 198 \u573a\u5468\u8d5b" + "ContestID_zh": "第 198 场周赛" }, { "Rating": 1245.2741257148, "ID": 1099, "Title": "Two Sum Less Than K", - "TitleZH": "\u5c0f\u4e8e K \u7684\u4e24\u6570\u4e4b\u548c", + "TitleZH": "小于 K 的两数之和", "TitleSlug": "two-sum-less-than-k", "ContestSlug": "biweekly-contest-3", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 3", - "ContestID_zh": "\u7b2c 3 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 3 场双周赛" }, { "Rating": 1244.317367883, "ID": 1228, "Title": "Missing Number In Arithmetic Progression", - "TitleZH": "\u7b49\u5dee\u6570\u5217\u4e2d\u7f3a\u5931\u7684\u6570\u5b57", + "TitleZH": "等差数列中缺失的数字", "TitleSlug": "missing-number-in-arithmetic-progression", "ContestSlug": "biweekly-contest-11", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 11", - "ContestID_zh": "\u7b2c 11 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 11 场双周赛" }, { "Rating": 1243.6250741657, "ID": 2399, "Title": "Check Distances Between Same Letters", - "TitleZH": "\u68c0\u67e5\u76f8\u540c\u5b57\u6bcd\u95f4\u7684\u8ddd\u79bb", + "TitleZH": "检查相同字母间的距离", "TitleSlug": "check-distances-between-same-letters", "ContestSlug": "weekly-contest-309", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 309", - "ContestID_zh": "\u7b2c 309 \u573a\u5468\u8d5b" + "ContestID_zh": "第 309 场周赛" }, { "Rating": 1243.1009943284, "ID": 832, "Title": "Flipping an Image", - "TitleZH": "\u7ffb\u8f6c\u56fe\u50cf", + "TitleZH": "翻转图像", "TitleSlug": "flipping-an-image", "ContestSlug": "weekly-contest-84", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 84", - "ContestID_zh": "\u7b2c 84 \u573a\u5468\u8d5b" + "ContestID_zh": "第 84 场周赛" }, { "Rating": 1242.8939284628, "ID": 2309, "Title": "Greatest English Letter in Upper and Lower Case", - "TitleZH": "\u517c\u5177\u5927\u5c0f\u5199\u7684\u6700\u597d\u82f1\u6587\u5b57\u6bcd", + "TitleZH": "兼具大小写的最好英文字母", "TitleSlug": "greatest-english-letter-in-upper-and-lower-case", "ContestSlug": "weekly-contest-298", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 298", - "ContestID_zh": "\u7b2c 298 \u573a\u5468\u8d5b" + "ContestID_zh": "第 298 场周赛" }, { "Rating": 1242.6172898768, "ID": 1941, "Title": "Check if All Characters Have Equal Number of Occurrences", - "TitleZH": "\u68c0\u67e5\u662f\u5426\u6240\u6709\u5b57\u7b26\u51fa\u73b0\u6b21\u6570\u76f8\u540c", + "TitleZH": "检查是否所有字符出现次数相同", "TitleSlug": "check-if-all-characters-have-equal-number-of-occurrences", "ContestSlug": "biweekly-contest-57", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 57", - "ContestID_zh": "\u7b2c 57 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 57 场双周赛" }, { "Rating": 1242.4710735813, "ID": 921, "Title": "Minimum Add to Make Parentheses Valid", - "TitleZH": "\u4f7f\u62ec\u53f7\u6709\u6548\u7684\u6700\u5c11\u6dfb\u52a0", + "TitleZH": "使括号有效的最少添加", "TitleSlug": "minimum-add-to-make-parentheses-valid", "ContestSlug": "weekly-contest-106", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 106", - "ContestID_zh": "\u7b2c 106 \u573a\u5468\u8d5b" + "ContestID_zh": "第 106 场周赛" }, { "Rating": 1241.9262857175, "ID": 1417, "Title": "Reformat The String", - "TitleZH": "\u91cd\u65b0\u683c\u5f0f\u5316\u5b57\u7b26\u4e32", + "TitleZH": "重新格式化字符串", "TitleSlug": "reformat-the-string", "ContestSlug": "weekly-contest-185", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 185", - "ContestID_zh": "\u7b2c 185 \u573a\u5468\u8d5b" + "ContestID_zh": "第 185 场周赛" }, { "Rating": 1241.5645130241, "ID": 2347, "Title": "Best Poker Hand", - "TitleZH": "\u6700\u597d\u7684\u6251\u514b\u624b\u724c", + "TitleZH": "最好的扑克手牌", "TitleSlug": "best-poker-hand", "ContestSlug": "biweekly-contest-83", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 83", - "ContestID_zh": "\u7b2c 83 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 83 场双周赛" }, { "Rating": 1241.5396695569, "ID": 2299, "Title": "Strong Password Checker II", - "TitleZH": "\u5f3a\u5bc6\u7801\u68c0\u9a8c\u5668 II", + "TitleZH": "强密码检验器 II", "TitleSlug": "strong-password-checker-ii", "ContestSlug": "biweekly-contest-80", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 80", - "ContestID_zh": "\u7b2c 80 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 80 场双周赛" }, { "Rating": 1241.0825147417, "ID": 2293, "Title": "Min Max Game", - "TitleZH": "\u6781\u5927\u6781\u5c0f\u6e38\u620f", + "TitleZH": "极大极小游戏", "TitleSlug": "min-max-game", "ContestSlug": "weekly-contest-296", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 296", - "ContestID_zh": "\u7b2c 296 \u573a\u5468\u8d5b" + "ContestID_zh": "第 296 场周赛" }, { "Rating": 1240.829758176, "ID": 2078, "Title": "Two Furthest Houses With Different Colors", - "TitleZH": "\u4e24\u680b\u989c\u8272\u4e0d\u540c\u4e14\u8ddd\u79bb\u6700\u8fdc\u7684\u623f\u5b50", + "TitleZH": "两栋颜色不同且距离最远的房子", "TitleSlug": "two-furthest-houses-with-different-colors", "ContestSlug": "weekly-contest-268", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 268", - "ContestID_zh": "\u7b2c 268 \u573a\u5468\u8d5b" + "ContestID_zh": "第 268 场周赛" }, { "Rating": 1237.7565585875, "ID": 1422, "Title": "Maximum Score After Splitting a String", - "TitleZH": "\u5206\u5272\u5b57\u7b26\u4e32\u7684\u6700\u5927\u5f97\u5206", + "TitleZH": "分割字符串的最大得分", "TitleSlug": "maximum-score-after-splitting-a-string", "ContestSlug": "weekly-contest-186", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 186", - "ContestID_zh": "\u7b2c 186 \u573a\u5468\u8d5b" + "ContestID_zh": "第 186 场周赛" }, { "Rating": 1235.9216009709, "ID": 2149, "Title": "Rearrange Array Elements by Sign", - "TitleZH": "\u6309\u7b26\u53f7\u91cd\u6392\u6570\u7ec4", + "TitleZH": "按符号重排数组", "TitleSlug": "rearrange-array-elements-by-sign", "ContestSlug": "weekly-contest-277", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 277", - "ContestID_zh": "\u7b2c 277 \u573a\u5468\u8d5b" + "ContestID_zh": "第 277 场周赛" }, { "Rating": 1235.8413685224, "ID": 2154, "Title": "Keep Multiplying Found Values by Two", - "TitleZH": "\u5c06\u627e\u5230\u7684\u503c\u4e58\u4ee5 2", + "TitleZH": "将找到的值乘以 2", "TitleSlug": "keep-multiplying-found-values-by-two", "ContestSlug": "weekly-contest-278", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 278", - "ContestID_zh": "\u7b2c 278 \u573a\u5468\u8d5b" + "ContestID_zh": "第 278 场周赛" }, { "Rating": 1235.6114196155, "ID": 1816, "Title": "Truncate Sentence", - "TitleZH": "\u622a\u65ad\u53e5\u5b50", + "TitleZH": "截断句子", "TitleSlug": "truncate-sentence", "ContestSlug": "weekly-contest-235", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 235", - "ContestID_zh": "\u7b2c 235 \u573a\u5468\u8d5b" + "ContestID_zh": "第 235 场周赛" }, { "Rating": 1234.8049089605, "ID": 1385, "Title": "Find the Distance Value Between Two Arrays", - "TitleZH": "\u4e24\u4e2a\u6570\u7ec4\u95f4\u7684\u8ddd\u79bb\u503c", + "TitleZH": "两个数组间的距离值", "TitleSlug": "find-the-distance-value-between-two-arrays", "ContestSlug": "biweekly-contest-22", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 22", - "ContestID_zh": "\u7b2c 22 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 22 场双周赛" }, { "Rating": 1234.7692637513, "ID": 989, "Title": "Add to Array-Form of Integer", - "TitleZH": "\u6570\u7ec4\u5f62\u5f0f\u7684\u6574\u6570\u52a0\u6cd5", + "TitleZH": "数组形式的整数加法", "TitleSlug": "add-to-array-form-of-integer", "ContestSlug": "weekly-contest-123", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 123", - "ContestID_zh": "\u7b2c 123 \u573a\u5468\u8d5b" + "ContestID_zh": "第 123 场周赛" }, { "Rating": 1234.7084656358, "ID": 1009, "Title": "Complement of Base 10 Integer", - "TitleZH": "\u5341\u8fdb\u5236\u6574\u6570\u7684\u53cd\u7801", + "TitleZH": "十进制整数的反码", "TitleSlug": "complement-of-base-10-integer", "ContestSlug": "weekly-contest-128", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 128", - "ContestID_zh": "\u7b2c 128 \u573a\u5468\u8d5b" + "ContestID_zh": "第 128 场周赛" }, { "Rating": 1234.4144116814, "ID": 1184, "Title": "Distance Between Bus Stops", - "TitleZH": "\u516c\u4ea4\u7ad9\u95f4\u7684\u8ddd\u79bb", + "TitleZH": "公交站间的距离", "TitleSlug": "distance-between-bus-stops", "ContestSlug": "weekly-contest-153", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 153", - "ContestID_zh": "\u7b2c 153 \u573a\u5468\u8d5b" + "ContestID_zh": "第 153 场周赛" }, { "Rating": 1234.058537565, "ID": 1961, "Title": "Check If String Is a Prefix of Array", - "TitleZH": "\u68c0\u67e5\u5b57\u7b26\u4e32\u662f\u5426\u4e3a\u6570\u7ec4\u524d\u7f00", + "TitleZH": "检查字符串是否为数组前缀", "TitleSlug": "check-if-string-is-a-prefix-of-array", "ContestSlug": "weekly-contest-253", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 253", - "ContestID_zh": "\u7b2c 253 \u573a\u5468\u8d5b" + "ContestID_zh": "第 253 场周赛" }, { "Rating": 1232.8314427996, "ID": 1119, "Title": "Remove Vowels from a String", - "TitleZH": "\u5220\u53bb\u5b57\u7b26\u4e32\u4e2d\u7684\u5143\u97f3", + "TitleZH": "删去字符串中的元音", "TitleSlug": "remove-vowels-from-a-string", "ContestSlug": "biweekly-contest-4", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 4", - "ContestID_zh": "\u7b2c 4 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 4 场双周赛" }, { "Rating": 1231.999241335, "ID": 1492, "Title": "The kth Factor of n", - "TitleZH": "n \u7684\u7b2c k \u4e2a\u56e0\u5b50", + "TitleZH": "n 的第 k 个因子", "TitleSlug": "the-kth-factor-of-n", "ContestSlug": "biweekly-contest-29", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 29", - "ContestID_zh": "\u7b2c 29 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 29 场双周赛" }, { "Rating": 1231.8671440198, "ID": 1967, "Title": "Number of Strings That Appear as Substrings in Word", - "TitleZH": "\u4f5c\u4e3a\u5b50\u5b57\u7b26\u4e32\u51fa\u73b0\u5728\u5355\u8bcd\u4e2d\u7684\u5b57\u7b26\u4e32\u6570\u76ee", + "TitleZH": "作为子字符串出现在单词中的字符串数目", "TitleSlug": "number-of-strings-that-appear-as-substrings-in-word", "ContestSlug": "weekly-contest-254", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 254", - "ContestID_zh": "\u7b2c 254 \u573a\u5468\u8d5b" + "ContestID_zh": "第 254 场周赛" }, { "Rating": 1231.6157956848, "ID": 876, "Title": "Middle of the Linked List", - "TitleZH": "\u94fe\u8868\u7684\u4e2d\u95f4\u7ed3\u70b9", + "TitleZH": "链表的中间结点", "TitleSlug": "middle-of-the-linked-list", "ContestSlug": "weekly-contest-95", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 95", - "ContestID_zh": "\u7b2c 95 \u573a\u5468\u8d5b" + "ContestID_zh": "第 95 场周赛" }, { "Rating": 1231.4004525633, "ID": 1134, "Title": "Armstrong Number", - "TitleZH": "\u963f\u59c6\u65af\u7279\u6717\u6570", + "TitleZH": "阿姆斯特朗数", "TitleSlug": "armstrong-number", "ContestSlug": "biweekly-contest-5", "ProblemIndex": "Q2", "ContestID_en": "Biweekly Contest 5", - "ContestID_zh": "\u7b2c 5 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 5 场双周赛" }, { "Rating": 1229.4850365142, "ID": 1725, "Title": "Number Of Rectangles That Can Form The Largest Square", - "TitleZH": "\u53ef\u4ee5\u5f62\u6210\u6700\u5927\u6b63\u65b9\u5f62\u7684\u77e9\u5f62\u6570\u76ee", + "TitleZH": "可以形成最大正方形的矩形数目", "TitleSlug": "number-of-rectangles-that-can-form-the-largest-square", "ContestSlug": "weekly-contest-224", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 224", - "ContestID_zh": "\u7b2c 224 \u573a\u5468\u8d5b" + "ContestID_zh": "第 224 场周赛" }, { "Rating": 1229.1709574783, "ID": 1800, "Title": "Maximum Ascending Subarray Sum", - "TitleZH": "\u6700\u5927\u5347\u5e8f\u5b50\u6570\u7ec4\u548c", + "TitleZH": "最大升序子数组和", "TitleSlug": "maximum-ascending-subarray-sum", "ContestSlug": "weekly-contest-233", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 233", - "ContestID_zh": "\u7b2c 233 \u573a\u5468\u8d5b" + "ContestID_zh": "第 233 场周赛" }, { "Rating": 1228.630993648, "ID": 917, "Title": "Reverse Only Letters", - "TitleZH": "\u4ec5\u4ec5\u53cd\u8f6c\u5b57\u6bcd", + "TitleZH": "仅仅反转字母", "TitleSlug": "reverse-only-letters", "ContestSlug": "weekly-contest-105", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 105", - "ContestID_zh": "\u7b2c 105 \u573a\u5468\u8d5b" + "ContestID_zh": "第 105 场周赛" }, { "Rating": 1228.4824438011, "ID": 1748, "Title": "Sum of Unique Elements", - "TitleZH": "\u552f\u4e00\u5143\u7d20\u7684\u548c", + "TitleZH": "唯一元素的和", "TitleSlug": "sum-of-unique-elements", "ContestSlug": "biweekly-contest-45", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 45", - "ContestID_zh": "\u7b2c 45 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 45 场双周赛" }, { "Rating": 1227.7906887239, "ID": 844, "Title": "Backspace String Compare", - "TitleZH": "\u6bd4\u8f83\u542b\u9000\u683c\u7684\u5b57\u7b26\u4e32", + "TitleZH": "比较含退格的字符串", "TitleSlug": "backspace-string-compare", "ContestSlug": "weekly-contest-87", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 87", - "ContestID_zh": "\u7b2c 87 \u573a\u5468\u8d5b" + "ContestID_zh": "第 87 场周赛" }, { "Rating": 1227.3485530532, "ID": 1118, "Title": "Number of Days in a Month", - "TitleZH": "\u4e00\u6708\u6709\u591a\u5c11\u5929", + "TitleZH": "一月有多少天", "TitleSlug": "number-of-days-in-a-month", "ContestSlug": "biweekly-contest-4", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 4", - "ContestID_zh": "\u7b2c 4 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 4 场双周赛" }, { "Rating": 1226.8332278145, "ID": 1935, "Title": "Maximum Number of Words You Can Type", - "TitleZH": "\u53ef\u4ee5\u8f93\u5165\u7684\u6700\u5927\u5355\u8bcd\u6570", + "TitleZH": "可以输入的最大单词数", "TitleSlug": "maximum-number-of-words-you-can-type", "ContestSlug": "weekly-contest-250", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 250", - "ContestID_zh": "\u7b2c 250 \u573a\u5468\u8d5b" + "ContestID_zh": "第 250 场周赛" }, { "Rating": 1226.2960135431, "ID": 1133, "Title": "Largest Unique Number", - "TitleZH": "\u6700\u5927\u552f\u4e00\u6570", + "TitleZH": "最大唯一数", "TitleSlug": "largest-unique-number", "ContestSlug": "biweekly-contest-5", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 5", - "ContestID_zh": "\u7b2c 5 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 5 场双周赛" }, { "Rating": 1225.3923012413, "ID": 2357, "Title": "Make Array Zero by Subtracting Equal Amounts", - "TitleZH": "\u4f7f\u6570\u7ec4\u4e2d\u6240\u6709\u5143\u7d20\u90fd\u7b49\u4e8e\u96f6", + "TitleZH": "使数组中所有元素都等于零", "TitleSlug": "make-array-zero-by-subtracting-equal-amounts", "ContestSlug": "weekly-contest-304", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 304", - "ContestID_zh": "\u7b2c 304 \u573a\u5468\u8d5b" + "ContestID_zh": "第 304 场周赛" }, { "Rating": 1225.3601348675, "ID": 1346, "Title": "Check If N and Its Double Exist", - "TitleZH": "\u68c0\u67e5\u6574\u6570\u53ca\u5176\u4e24\u500d\u6570\u662f\u5426\u5b58\u5728", + "TitleZH": "检查整数及其两倍数是否存在", "TitleSlug": "check-if-n-and-its-double-exist", "ContestSlug": "weekly-contest-175", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 175", - "ContestID_zh": "\u7b2c 175 \u573a\u5468\u8d5b" + "ContestID_zh": "第 175 场周赛" }, { "Rating": 1224.7606792444, "ID": 1337, "Title": "The K Weakest Rows in a Matrix", - "TitleZH": "\u77e9\u9635\u4e2d\u6218\u6597\u529b\u6700\u5f31\u7684 K \u884c", + "TitleZH": "矩阵中战斗力最弱的 K 行", "TitleSlug": "the-k-weakest-rows-in-a-matrix", "ContestSlug": "weekly-contest-174", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 174", - "ContestID_zh": "\u7b2c 174 \u573a\u5468\u8d5b" + "ContestID_zh": "第 174 场周赛" + }, + { + "Rating": 1223.9335618833, + "ID": 2460, + "Title": "Apply Operations to an Array", + "TitleZH": "对数组执行操作", + "TitleSlug": "apply-operations-to-an-array", + "ContestSlug": "weekly-contest-318", + "ProblemIndex": "Q1", + "ContestID_en": "Weekly Contest 318", + "ContestID_zh": "第 318 场周赛" }, { "Rating": 1223.9335618833, @@ -14094,1144 +14138,1144 @@ "Rating": 1223.406570396, "ID": 2206, "Title": "Divide Array Into Equal Pairs", - "TitleZH": "\u5c06\u6570\u7ec4\u5212\u5206\u6210\u76f8\u7b49\u6570\u5bf9", + "TitleZH": "将数组划分成相等数对", "TitleSlug": "divide-array-into-equal-pairs", "ContestSlug": "biweekly-contest-74", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 74", - "ContestID_zh": "\u7b2c 74 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 74 场双周赛" }, { "Rating": 1223.3861903833, "ID": 1408, "Title": "String Matching in an Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u7684\u5b57\u7b26\u4e32\u5339\u914d", + "TitleZH": "数组中的字符串匹配", "TitleSlug": "string-matching-in-an-array", "ContestSlug": "weekly-contest-184", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 184", - "ContestID_zh": "\u7b2c 184 \u573a\u5468\u8d5b" + "ContestID_zh": "第 184 场周赛" }, { "Rating": 1221.9872943569, "ID": 1678, "Title": "Goal Parser Interpretation", - "TitleZH": "\u8bbe\u8ba1 Goal \u89e3\u6790\u5668", + "TitleZH": "设计 Goal 解析器", "TitleSlug": "goal-parser-interpretation", "ContestSlug": "weekly-contest-218", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 218", - "ContestID_zh": "\u7b2c 218 \u573a\u5468\u8d5b" + "ContestID_zh": "第 218 场周赛" }, { "Rating": 1221.8477681772, "ID": 2414, "Title": "Length of the Longest Alphabetical Continuous Substring", - "TitleZH": "\u6700\u957f\u7684\u5b57\u6bcd\u5e8f\u8fde\u7eed\u5b50\u5b57\u7b26\u4e32\u7684\u957f\u5ea6", + "TitleZH": "最长的字母序连续子字符串的长度", "TitleSlug": "length-of-the-longest-alphabetical-continuous-substring", "ContestSlug": "weekly-contest-311", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 311", - "ContestID_zh": "\u7b2c 311 \u573a\u5468\u8d5b" + "ContestID_zh": "第 311 场周赛" }, { "Rating": 1221.6801628274, "ID": 1550, "Title": "Three Consecutive Odds", - "TitleZH": "\u5b58\u5728\u8fde\u7eed\u4e09\u4e2a\u5947\u6570\u7684\u6570\u7ec4", + "TitleZH": "存在连续三个奇数的数组", "TitleSlug": "three-consecutive-odds", "ContestSlug": "weekly-contest-202", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 202", - "ContestID_zh": "\u7b2c 202 \u573a\u5468\u8d5b" + "ContestID_zh": "第 202 场周赛" }, { "Rating": 1219.5284561367, "ID": 1221, "Title": "Split a String in Balanced Strings", - "TitleZH": "\u5206\u5272\u5e73\u8861\u5b57\u7b26\u4e32", + "TitleZH": "分割平衡字符串", "TitleSlug": "split-a-string-in-balanced-strings", "ContestSlug": "weekly-contest-158", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 158", - "ContestID_zh": "\u7b2c 158 \u573a\u5468\u8d5b" + "ContestID_zh": "第 158 场周赛" }, { "Rating": 1219.4252907184, "ID": 1299, "Title": "Replace Elements with Greatest Element on Right Side", - "TitleZH": "\u5c06\u6bcf\u4e2a\u5143\u7d20\u66ff\u6362\u4e3a\u53f3\u4fa7\u6700\u5927\u5143\u7d20", + "TitleZH": "将每个元素替换为右侧最大元素", "TitleSlug": "replace-elements-with-greatest-element-on-right-side", "ContestSlug": "biweekly-contest-16", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 16", - "ContestID_zh": "\u7b2c 16 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 16 场双周赛" }, { "Rating": 1218.9011436003, "ID": 2442, "Title": "Count Number of Distinct Integers After Reverse Operations", - "TitleZH": "\u53cd\u8f6c\u4e4b\u540e\u4e0d\u540c\u6574\u6570\u7684\u6570\u76ee", + "TitleZH": "反转之后不同整数的数目", "TitleSlug": "count-number-of-distinct-integers-after-reverse-operations", "ContestSlug": "weekly-contest-315", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 315", - "ContestID_zh": "\u7b2c 315 \u573a\u5468\u8d5b" + "ContestID_zh": "第 315 场周赛" }, { "Rating": 1217.1184374247, "ID": 1662, "Title": "Check If Two String Arrays are Equivalent", - "TitleZH": "\u68c0\u67e5\u4e24\u4e2a\u5b57\u7b26\u4e32\u6570\u7ec4\u662f\u5426\u76f8\u7b49", + "TitleZH": "检查两个字符串数组是否相等", "TitleSlug": "check-if-two-string-arrays-are-equivalent", "ContestSlug": "weekly-contest-216", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 216", - "ContestID_zh": "\u7b2c 216 \u573a\u5468\u8d5b" + "ContestID_zh": "第 216 场周赛" }, { "Rating": 1216.6376846517, "ID": 1848, "Title": "Minimum Distance to the Target Element", - "TitleZH": "\u5230\u76ee\u6807\u5143\u7d20\u7684\u6700\u5c0f\u8ddd\u79bb", + "TitleZH": "到目标元素的最小距离", "TitleSlug": "minimum-distance-to-the-target-element", "ContestSlug": "weekly-contest-239", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 239", - "ContestID_zh": "\u7b2c 239 \u573a\u5468\u8d5b" + "ContestID_zh": "第 239 场周赛" }, { "Rating": 1215.7827321325, "ID": 2176, "Title": "Count Equal and Divisible Pairs in an Array", - "TitleZH": "\u7edf\u8ba1\u6570\u7ec4\u4e2d\u76f8\u7b49\u4e14\u53ef\u4ee5\u88ab\u6574\u9664\u7684\u6570\u5bf9", + "TitleZH": "统计数组中相等且可以被整除的数对", "TitleSlug": "count-equal-and-divisible-pairs-in-an-array", "ContestSlug": "biweekly-contest-72", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 72", - "ContestID_zh": "\u7b2c 72 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 72 场双周赛" }, { "Rating": 1215.7443346869, "ID": 2108, "Title": "Find First Palindromic String in the Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u4e2d\u7684\u7b2c\u4e00\u4e2a\u56de\u6587\u5b57\u7b26\u4e32", + "TitleZH": "找出数组中的第一个回文字符串", "TitleSlug": "find-first-palindromic-string-in-the-array", "ContestSlug": "weekly-contest-272", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 272", - "ContestID_zh": "\u7b2c 272 \u573a\u5468\u8d5b" + "ContestID_zh": "第 272 场周赛" }, { "Rating": 1213.8073621345, "ID": 973, "Title": "K Closest Points to Origin", - "TitleZH": "\u6700\u63a5\u8fd1\u539f\u70b9\u7684 K \u4e2a\u70b9", + "TitleZH": "最接近原点的 K 个点", "TitleSlug": "k-closest-points-to-origin", "ContestSlug": "weekly-contest-119", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 119", - "ContestID_zh": "\u7b2c 119 \u573a\u5468\u8d5b" + "ContestID_zh": "第 119 场周赛" }, { "Rating": 1212.2606422181, "ID": 1475, "Title": "Final Prices With a Special Discount in a Shop", - "TitleZH": "\u5546\u54c1\u6298\u6263\u540e\u7684\u6700\u7ec8\u4ef7\u683c", + "TitleZH": "商品折扣后的最终价格", "TitleSlug": "final-prices-with-a-special-discount-in-a-shop", "ContestSlug": "biweekly-contest-28", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 28", - "ContestID_zh": "\u7b2c 28 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 28 场双周赛" }, { "Rating": 1212.2309421538, "ID": 1413, "Title": "Minimum Value to Get Positive Step by Step Sum", - "TitleZH": "\u9010\u6b65\u6c42\u548c\u5f97\u5230\u6b63\u6570\u7684\u6700\u5c0f\u503c", + "TitleZH": "逐步求和得到正数的最小值", "TitleSlug": "minimum-value-to-get-positive-step-by-step-sum", "ContestSlug": "biweekly-contest-24", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 24", - "ContestID_zh": "\u7b2c 24 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 24 场双周赛" }, { "Rating": 1209.6571020247, "ID": 1822, "Title": "Sign of the Product of an Array", - "TitleZH": "\u6570\u7ec4\u5143\u7d20\u79ef\u7684\u7b26\u53f7", + "TitleZH": "数组元素积的符号", "TitleSlug": "sign-of-the-product-of-an-array", "ContestSlug": "weekly-contest-236", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 236", - "ContestID_zh": "\u7b2c 236 \u573a\u5468\u8d5b" + "ContestID_zh": "第 236 场周赛" }, { "Rating": 1209.3722198224, "ID": 1523, "Title": "Count Odd Numbers in an Interval Range", - "TitleZH": "\u5728\u533a\u95f4\u8303\u56f4\u5185\u7edf\u8ba1\u5947\u6570\u6570\u76ee", + "TitleZH": "在区间范围内统计奇数数目", "TitleSlug": "count-odd-numbers-in-an-interval-range", "ContestSlug": "biweekly-contest-31", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 31", - "ContestID_zh": "\u7b2c 31 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 31 场双周赛" }, { "Rating": 1208.0417047337, "ID": 1389, "Title": "Create Target Array in the Given Order", - "TitleZH": "\u6309\u65e2\u5b9a\u987a\u5e8f\u521b\u5efa\u76ee\u6807\u6570\u7ec4", + "TitleZH": "按既定顺序创建目标数组", "TitleSlug": "create-target-array-in-the-given-order", "ContestSlug": "weekly-contest-181", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 181", - "ContestID_zh": "\u7b2c 181 \u573a\u5468\u8d5b" + "ContestID_zh": "第 181 场周赛" }, { "Rating": 1208.0130656905, "ID": 941, "Title": "Valid Mountain Array", - "TitleZH": "\u6709\u6548\u7684\u5c71\u8109\u6570\u7ec4", + "TitleZH": "有效的山脉数组", "TitleSlug": "valid-mountain-array", "ContestSlug": "weekly-contest-111", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 111", - "ContestID_zh": "\u7b2c 111 \u573a\u5468\u8d5b" + "ContestID_zh": "第 111 场周赛" }, { "Rating": 1207.7810914125, "ID": 1380, "Title": "Lucky Numbers in a Matrix", - "TitleZH": "\u77e9\u9635\u4e2d\u7684\u5e78\u8fd0\u6570", + "TitleZH": "矩阵中的幸运数", "TitleSlug": "lucky-numbers-in-a-matrix", "ContestSlug": "weekly-contest-180", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 180", - "ContestID_zh": "\u7b2c 180 \u573a\u5468\u8d5b" + "ContestID_zh": "第 180 场周赛" }, { "Rating": 1207.748239075, "ID": 2215, "Title": "Find the Difference of Two Arrays", - "TitleZH": "\u627e\u51fa\u4e24\u6570\u7ec4\u7684\u4e0d\u540c", + "TitleZH": "找出两数组的不同", "TitleSlug": "find-the-difference-of-two-arrays", "ContestSlug": "weekly-contest-286", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 286", - "ContestID_zh": "\u7b2c 286 \u573a\u5468\u8d5b" + "ContestID_zh": "第 286 场周赛" }, { "Rating": 1207.7224406285, "ID": 1704, "Title": "Determine if String Halves Are Alike", - "TitleZH": "\u5224\u65ad\u5b57\u7b26\u4e32\u7684\u4e24\u534a\u662f\u5426\u76f8\u4f3c", + "TitleZH": "判断字符串的两半是否相似", "TitleSlug": "determine-if-string-halves-are-alike", "ContestSlug": "weekly-contest-221", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 221", - "ContestID_zh": "\u7b2c 221 \u573a\u5468\u8d5b" + "ContestID_zh": "第 221 场周赛" }, { "Rating": 1206.1240971343, "ID": 1784, "Title": "Check if Binary String Has at Most One Segment of Ones", - "TitleZH": "\u68c0\u67e5\u4e8c\u8fdb\u5236\u5b57\u7b26\u4e32\u5b57\u6bb5", + "TitleZH": "检查二进制字符串字段", "TitleSlug": "check-if-binary-string-has-at-most-one-segment-of-ones", "ContestSlug": "weekly-contest-231", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 231", - "ContestID_zh": "\u7b2c 231 \u573a\u5468\u8d5b" + "ContestID_zh": "第 231 场周赛" }, { "Rating": 1205.6698455508, "ID": 1160, "Title": "Find Words That Can Be Formed by Characters", - "TitleZH": "\u62fc\u5199\u5355\u8bcd", + "TitleZH": "拼写单词", "TitleSlug": "find-words-that-can-be-formed-by-characters", "ContestSlug": "weekly-contest-150", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 150", - "ContestID_zh": "\u7b2c 150 \u573a\u5468\u8d5b" + "ContestID_zh": "第 150 场周赛" }, { "Rating": 1204.9864820183, "ID": 1869, "Title": "Longer Contiguous Segments of Ones than Zeros", - "TitleZH": "\u54ea\u79cd\u8fde\u7eed\u5b50\u5b57\u7b26\u4e32\u66f4\u957f", + "TitleZH": "哪种连续子字符串更长", "TitleSlug": "longer-contiguous-segments-of-ones-than-zeros", "ContestSlug": "weekly-contest-242", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 242", - "ContestID_zh": "\u7b2c 242 \u573a\u5468\u8d5b" + "ContestID_zh": "第 242 场周赛" }, { "Rating": 1203.7504950404, "ID": 1952, "Title": "Three Divisors", - "TitleZH": "\u4e09\u9664\u6570", + "TitleZH": "三除数", "TitleSlug": "three-divisors", "ContestSlug": "weekly-contest-252", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 252", - "ContestID_zh": "\u7b2c 252 \u573a\u5468\u8d5b" + "ContestID_zh": "第 252 场周赛" }, { "Rating": 1203.1408035909, "ID": 1688, "Title": "Count of Matches in Tournament", - "TitleZH": "\u6bd4\u8d5b\u4e2d\u7684\u914d\u5bf9\u6b21\u6570", + "TitleZH": "比赛中的配对次数", "TitleSlug": "count-of-matches-in-tournament", "ContestSlug": "weekly-contest-219", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 219", - "ContestID_zh": "\u7b2c 219 \u573a\u5468\u8d5b" + "ContestID_zh": "第 219 场周赛" }, { "Rating": 1203.0737869081, "ID": 2367, "Title": "Number of Arithmetic Triplets", - "TitleZH": "\u7b97\u672f\u4e09\u5143\u7ec4\u7684\u6570\u76ee", + "TitleZH": "算术三元组的数目", "TitleSlug": "number-of-arithmetic-triplets", "ContestSlug": "weekly-contest-305", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 305", - "ContestID_zh": "\u7b2c 305 \u573a\u5468\u8d5b" + "ContestID_zh": "第 305 场周赛" }, { "Rating": 1201.8730954169, "ID": 2148, "Title": "Count Elements With Strictly Smaller and Greater Elements ", - "TitleZH": "\u5143\u7d20\u8ba1\u6570", + "TitleZH": "元素计数", "TitleSlug": "count-elements-with-strictly-smaller-and-greater-elements", "ContestSlug": "weekly-contest-277", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 277", - "ContestID_zh": "\u7b2c 277 \u573a\u5468\u8d5b" + "ContestID_zh": "第 277 场周赛" }, { "Rating": 1201.7686271329, "ID": 2124, "Title": "Check if All A's Appears Before All B's", - "TitleZH": "\u68c0\u67e5\u662f\u5426\u6240\u6709 A \u90fd\u5728 B \u4e4b\u524d", + "TitleZH": "检查是否所有 A 都在 B 之前", "TitleSlug": "check-if-all-as-appears-before-all-bs", "ContestSlug": "weekly-contest-274", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 274", - "ContestID_zh": "\u7b2c 274 \u573a\u5468\u8d5b" + "ContestID_zh": "第 274 场周赛" }, { "Rating": 1201.6117337798, "ID": 997, "Title": "Find the Town Judge", - "TitleZH": "\u627e\u5230\u5c0f\u9547\u7684\u6cd5\u5b98", + "TitleZH": "找到小镇的法官", "TitleSlug": "find-the-town-judge", "ContestSlug": "weekly-contest-125", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 125", - "ContestID_zh": "\u7b2c 125 \u573a\u5468\u8d5b" + "ContestID_zh": "第 125 场周赛" }, { "Rating": 1201.3497763919, "ID": 1491, "Title": "Average Salary Excluding the Minimum and Maximum Salary", - "TitleZH": "\u53bb\u6389\u6700\u4f4e\u5de5\u8d44\u548c\u6700\u9ad8\u5de5\u8d44\u540e\u7684\u5de5\u8d44\u5e73\u5747\u503c", + "TitleZH": "去掉最低工资和最高工资后的工资平均值", "TitleSlug": "average-salary-excluding-the-minimum-and-maximum-salary", "ContestSlug": "biweekly-contest-29", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 29", - "ContestID_zh": "\u7b2c 29 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 29 场双周赛" }, { "Rating": 1200.9464053417, "ID": 2319, "Title": "Check if Matrix Is X-Matrix", - "TitleZH": "\u5224\u65ad\u77e9\u9635\u662f\u5426\u662f\u4e00\u4e2a X \u77e9\u9635", + "TitleZH": "判断矩阵是否是一个 X 矩阵", "TitleSlug": "check-if-matrix-is-x-matrix", "ContestSlug": "weekly-contest-299", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 299", - "ContestID_zh": "\u7b2c 299 \u573a\u5468\u8d5b" + "ContestID_zh": "第 299 场周赛" }, { "Rating": 1199.8592887103, "ID": 2169, "Title": "Count Operations to Obtain Zero", - "TitleZH": "\u5f97\u5230 0 \u7684\u64cd\u4f5c\u6570", + "TitleZH": "得到 0 的操作数", "TitleSlug": "count-operations-to-obtain-zero", "ContestSlug": "weekly-contest-280", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 280", - "ContestID_zh": "\u7b2c 280 \u573a\u5468\u8d5b" + "ContestID_zh": "第 280 场周赛" }, { "Rating": 1199.4477805501, "ID": 2000, "Title": "Reverse Prefix of Word", - "TitleZH": "\u53cd\u8f6c\u5355\u8bcd\u524d\u7f00", + "TitleZH": "反转单词前缀", "TitleSlug": "reverse-prefix-of-word", "ContestSlug": "weekly-contest-258", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 258", - "ContestID_zh": "\u7b2c 258 \u573a\u5468\u8d5b" + "ContestID_zh": "第 258 场周赛" }, { "Rating": 1199.4427635582, "ID": 1154, "Title": "Day of the Year", - "TitleZH": "\u4e00\u5e74\u4e2d\u7684\u7b2c\u51e0\u5929", + "TitleZH": "一年中的第几天", "TitleSlug": "day-of-the-year", "ContestSlug": "weekly-contest-149", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 149", - "ContestID_zh": "\u7b2c 149 \u573a\u5468\u8d5b" + "ContestID_zh": "第 149 场周赛" }, { "Rating": 1199.2892732505, "ID": 929, "Title": "Unique Email Addresses", - "TitleZH": "\u72ec\u7279\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740", + "TitleZH": "独特的电子邮件地址", "TitleSlug": "unique-email-addresses", "ContestSlug": "weekly-contest-108", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 108", - "ContestID_zh": "\u7b2c 108 \u573a\u5468\u8d5b" + "ContestID_zh": "第 108 场周赛" }, { "Rating": 1199.2392672964, "ID": 1165, "Title": "Single-Row Keyboard", - "TitleZH": "\u5355\u884c\u952e\u76d8", + "TitleZH": "单行键盘", "TitleSlug": "single-row-keyboard", "ContestSlug": "biweekly-contest-7", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 7", - "ContestID_zh": "\u7b2c 7 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 7 场双周赛" }, { "Rating": 1198.5705825982, "ID": 1200, "Title": "Minimum Absolute Difference", - "TitleZH": "\u6700\u5c0f\u7edd\u5bf9\u5dee", + "TitleZH": "最小绝对差", "TitleSlug": "minimum-absolute-difference", "ContestSlug": "weekly-contest-155", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 155", - "ContestID_zh": "\u7b2c 155 \u573a\u5468\u8d5b" + "ContestID_zh": "第 155 场周赛" }, { "Rating": 1198.4180401014, "ID": 985, "Title": "Sum of Even Numbers After Queries", - "TitleZH": "\u67e5\u8be2\u540e\u7684\u5076\u6570\u548c", + "TitleZH": "查询后的偶数和", "TitleSlug": "sum-of-even-numbers-after-queries", "ContestSlug": "weekly-contest-122", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 122", - "ContestID_zh": "\u7b2c 122 \u573a\u5468\u8d5b" + "ContestID_zh": "第 122 场周赛" }, { "Rating": 1195.7512695571, "ID": 1207, "Title": "Unique Number of Occurrences", - "TitleZH": "\u72ec\u4e00\u65e0\u4e8c\u7684\u51fa\u73b0\u6b21\u6570", + "TitleZH": "独一无二的出现次数", "TitleSlug": "unique-number-of-occurrences", "ContestSlug": "weekly-contest-156", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 156", - "ContestID_zh": "\u7b2c 156 \u573a\u5468\u8d5b" + "ContestID_zh": "第 156 场周赛" }, { "Rating": 1193.9819783429, "ID": 1323, "Title": "Maximum 69 Number", - "TitleZH": "6 \u548c 9 \u7ec4\u6210\u7684\u6700\u5927\u6570\u5b57", + "TitleZH": "6 和 9 组成的最大数字", "TitleSlug": "maximum-69-number", "ContestSlug": "weekly-contest-172", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 172", - "ContestID_zh": "\u7b2c 172 \u573a\u5468\u8d5b" + "ContestID_zh": "第 172 场周赛" }, { "Rating": 1193.2687290573, "ID": 1437, "Title": "Check If All 1's Are at Least Length K Places Away", - "TitleZH": "\u662f\u5426\u6240\u6709 1 \u90fd\u81f3\u5c11\u76f8\u9694 k \u4e2a\u5143\u7d20", + "TitleZH": "是否所有 1 都至少相隔 k 个元素", "TitleSlug": "check-if-all-1s-are-at-least-length-k-places-away", "ContestSlug": "weekly-contest-187", "ProblemIndex": "Q2", "ContestID_en": "Weekly Contest 187", - "ContestID_zh": "\u7b2c 187 \u573a\u5468\u8d5b" + "ContestID_zh": "第 187 场周赛" }, { "Rating": 1193.1328299324, "ID": 1528, "Title": "Shuffle String", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u5b57\u7b26\u4e32", + "TitleZH": "重新排列字符串", "TitleSlug": "shuffle-string", "ContestSlug": "weekly-contest-199", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 199", - "ContestID_zh": "\u7b2c 199 \u573a\u5468\u8d5b" + "ContestID_zh": "第 199 场周赛" }, { "Rating": 1193.0585534828, "ID": 2418, "Title": "Sort the People", - "TitleZH": "\u6309\u8eab\u9ad8\u6392\u5e8f", + "TitleZH": "按身高排序", "TitleSlug": "sort-the-people", "ContestSlug": "weekly-contest-312", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 312", - "ContestID_zh": "\u7b2c 312 \u573a\u5468\u8d5b" + "ContestID_zh": "第 312 场周赛" }, { "Rating": 1192.3167969426, "ID": 1436, "Title": "Destination City", - "TitleZH": "\u65c5\u884c\u7ec8\u70b9\u7ad9", + "TitleZH": "旅行终点站", "TitleSlug": "destination-city", "ContestSlug": "weekly-contest-187", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 187", - "ContestID_zh": "\u7b2c 187 \u573a\u5468\u8d5b" + "ContestID_zh": "第 187 场周赛" }, { "Rating": 1188.6470369782, "ID": 747, "Title": "Largest Number At Least Twice of Others", - "TitleZH": "\u81f3\u5c11\u662f\u5176\u4ed6\u6570\u5b57\u4e24\u500d\u7684\u6700\u5927\u6570", + "TitleZH": "至少是其他数字两倍的最大数", "TitleSlug": "largest-number-at-least-twice-of-others", "ContestSlug": "weekly-contest-64", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 64", - "ContestID_zh": "\u7b2c 64 \u573a\u5468\u8d5b" + "ContestID_zh": "第 64 场周赛" }, { "Rating": 1188.6311093158, "ID": 1122, "Title": "Relative Sort Array", - "TitleZH": "\u6570\u7ec4\u7684\u76f8\u5bf9\u6392\u5e8f", + "TitleZH": "数组的相对排序", "TitleSlug": "relative-sort-array", "ContestSlug": "weekly-contest-145", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 145", - "ContestID_zh": "\u7b2c 145 \u573a\u5468\u8d5b" + "ContestID_zh": "第 145 场周赛" }, { "Rating": 1187.1641565458, "ID": 1880, "Title": "Check if Word Equals Summation of Two Words", - "TitleZH": "\u68c0\u67e5\u67d0\u5355\u8bcd\u662f\u5426\u7b49\u4e8e\u4e24\u5355\u8bcd\u4e4b\u548c", + "TitleZH": "检查某单词是否等于两单词之和", "TitleSlug": "check-if-word-equals-summation-of-two-words", "ContestSlug": "weekly-contest-243", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 243", - "ContestID_zh": "\u7b2c 243 \u573a\u5468\u8d5b" + "ContestID_zh": "第 243 场周赛" }, { "Rating": 1187.1344261572, "ID": 2119, "Title": "A Number After a Double Reversal", - "TitleZH": "\u53cd\u8f6c\u4e24\u6b21\u7684\u6570\u5b57", + "TitleZH": "反转两次的数字", "TitleSlug": "a-number-after-a-double-reversal", "ContestSlug": "weekly-contest-273", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 273", - "ContestID_zh": "\u7b2c 273 \u573a\u5468\u8d5b" + "ContestID_zh": "第 273 场周赛" }, { "Rating": 1184.795721284, "ID": 2341, "Title": "Maximum Number of Pairs in Array", - "TitleZH": "\u6570\u7ec4\u80fd\u5f62\u6210\u591a\u5c11\u6570\u5bf9", + "TitleZH": "数组能形成多少数对", "TitleSlug": "maximum-number-of-pairs-in-array", "ContestSlug": "weekly-contest-302", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 302", - "ContestID_zh": "\u7b2c 302 \u573a\u5468\u8d5b" + "ContestID_zh": "第 302 场周赛" }, { "Rating": 1184.4264833435, "ID": 1979, "Title": "Find Greatest Common Divisor of Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u7684\u6700\u5927\u516c\u7ea6\u6570", + "TitleZH": "找出数组的最大公约数", "TitleSlug": "find-greatest-common-divisor-of-array", "ContestSlug": "weekly-contest-255", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 255", - "ContestID_zh": "\u7b2c 255 \u573a\u5468\u8d5b" + "ContestID_zh": "第 255 场周赛" }, { "Rating": 1182.6489068544, "ID": 1672, "Title": "Richest Customer Wealth", - "TitleZH": "\u6700\u5bcc\u6709\u5ba2\u6237\u7684\u8d44\u4ea7\u603b\u91cf", + "TitleZH": "最富有客户的资产总量", "TitleSlug": "richest-customer-wealth", "ContestSlug": "weekly-contest-217", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 217", - "ContestID_zh": "\u7b2c 217 \u573a\u5468\u8d5b" + "ContestID_zh": "第 217 场周赛" }, { "Rating": 1181.9716216714, "ID": 1189, "Title": "Maximum Number of Balloons", - "TitleZH": "\u201c\u6c14\u7403\u201d \u7684\u6700\u5927\u6570\u91cf", + "TitleZH": "“气球” 的最大数量", "TitleSlug": "maximum-number-of-balloons", "ContestSlug": "weekly-contest-154", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 154", - "ContestID_zh": "\u7b2c 154 \u573a\u5468\u8d5b" + "ContestID_zh": "第 154 场周赛" }, { "Rating": 1181.5839867359, "ID": 852, "Title": "Peak Index in a Mountain Array", - "TitleZH": "\u5c71\u8109\u6570\u7ec4\u7684\u5cf0\u9876\u7d22\u5f15", + "TitleZH": "山脉数组的峰顶索引", "TitleSlug": "peak-index-in-a-mountain-array", "ContestSlug": "weekly-contest-89", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 89", - "ContestID_zh": "\u7b2c 89 \u573a\u5468\u8d5b" + "ContestID_zh": "第 89 场周赛" }, { "Rating": 1180.923623906, "ID": 1486, "Title": "XOR Operation in an Array", - "TitleZH": "\u6570\u7ec4\u5f02\u6216\u64cd\u4f5c", + "TitleZH": "数组异或操作", "TitleSlug": "xor-operation-in-an-array", "ContestSlug": "weekly-contest-194", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 194", - "ContestID_zh": "\u7b2c 194 \u573a\u5468\u8d5b" + "ContestID_zh": "第 194 场周赛" }, { "Rating": 1180.3543157775, "ID": 1441, "Title": "Build an Array With Stack Operations", - "TitleZH": "\u7528\u6808\u64cd\u4f5c\u6784\u5efa\u6570\u7ec4", + "TitleZH": "用栈操作构建数组", "TitleSlug": "build-an-array-with-stack-operations", "ContestSlug": "weekly-contest-188", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 188", - "ContestID_zh": "\u7b2c 188 \u573a\u5468\u8d5b" + "ContestID_zh": "第 188 场周赛" }, { "Rating": 1179.1495967491, "ID": 1287, "Title": "Element Appearing More Than 25% In Sorted Array", - "TitleZH": "\u6709\u5e8f\u6570\u7ec4\u4e2d\u51fa\u73b0\u6b21\u6570\u8d85\u8fc725%\u7684\u5143\u7d20", + "TitleZH": "有序数组中出现次数超过25%的元素", "TitleSlug": "element-appearing-more-than-25-in-sorted-array", "ContestSlug": "biweekly-contest-15", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 15", - "ContestID_zh": "\u7b2c 15 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 15 场双周赛" }, { "Rating": 1178.4942541235, "ID": 905, "Title": "Sort Array By Parity", - "TitleZH": "\u6309\u5947\u5076\u6392\u5e8f\u6570\u7ec4", + "TitleZH": "按奇偶排序数组", "TitleSlug": "sort-array-by-parity", "ContestSlug": "weekly-contest-102", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 102", - "ContestID_zh": "\u7b2c 102 \u573a\u5468\u8d5b" + "ContestID_zh": "第 102 场周赛" }, { "Rating": 1177.5660617941, "ID": 965, "Title": "Univalued Binary Tree", - "TitleZH": "\u5355\u503c\u4e8c\u53c9\u6811", + "TitleZH": "单值二叉树", "TitleSlug": "univalued-binary-tree", "ContestSlug": "weekly-contest-117", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 117", - "ContestID_zh": "\u7b2c 117 \u573a\u5468\u8d5b" + "ContestID_zh": "第 117 场周赛" }, { "Rating": 1176.4547272896, "ID": 1431, "Title": "Kids With the Greatest Number of Candies", - "TitleZH": "\u62e5\u6709\u6700\u591a\u7cd6\u679c\u7684\u5b69\u5b50", + "TitleZH": "拥有最多糖果的孩子", "TitleSlug": "kids-with-the-greatest-number-of-candies", "ContestSlug": "biweekly-contest-25", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 25", - "ContestID_zh": "\u7b2c 25 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 25 场双周赛" }, { "Rating": 1174.8589329736, "ID": 1773, "Title": "Count Items Matching a Rule", - "TitleZH": "\u7edf\u8ba1\u5339\u914d\u68c0\u7d22\u89c4\u5219\u7684\u7269\u54c1\u6570\u91cf", + "TitleZH": "统计匹配检索规则的物品数量", "TitleSlug": "count-items-matching-a-rule", "ContestSlug": "weekly-contest-230", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 230", - "ContestID_zh": "\u7b2c 230 \u573a\u5468\u8d5b" + "ContestID_zh": "第 230 场周赛" }, { "Rating": 1173.505926482, "ID": 922, "Title": "Sort Array By Parity II", - "TitleZH": "\u6309\u5947\u5076\u6392\u5e8f\u6570\u7ec4 II", + "TitleZH": "按奇偶排序数组 II", "TitleSlug": "sort-array-by-parity-ii", "ContestSlug": "weekly-contest-106", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 106", - "ContestID_zh": "\u7b2c 106 \u573a\u5468\u8d5b" + "ContestID_zh": "第 106 场周赛" }, { "Rating": 1172.6819789183, "ID": 1046, "Title": "Last Stone Weight", - "TitleZH": "\u6700\u540e\u4e00\u5757\u77f3\u5934\u7684\u91cd\u91cf", + "TitleZH": "最后一块石头的重量", "TitleSlug": "last-stone-weight", "ContestSlug": "weekly-contest-137", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 137", - "ContestID_zh": "\u7b2c 137 \u573a\u5468\u8d5b" + "ContestID_zh": "第 137 场周赛" }, { "Rating": 1172.5106645463, "ID": 760, "Title": "Find Anagram Mappings", - "TitleZH": "\u627e\u51fa\u53d8\u4f4d\u6620\u5c04", + "TitleZH": "找出变位映射", "TitleSlug": "find-anagram-mappings", "ContestSlug": "weekly-contest-66", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 66", - "ContestID_zh": "\u7b2c 66 \u573a\u5468\u8d5b" + "ContestID_zh": "第 66 场周赛" }, { "Rating": 1172.0548998046, "ID": 2427, "Title": "Number of Common Factors", - "TitleZH": "\u516c\u56e0\u5b50\u7684\u6570\u76ee", + "TitleZH": "公因子的数目", "TitleSlug": "number-of-common-factors", "ContestSlug": "weekly-contest-313", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 313", - "ContestID_zh": "\u7b2c 313 \u573a\u5468\u8d5b" + "ContestID_zh": "第 313 场周赛" }, { "Rating": 1167.8737144048, "ID": 2057, "Title": "Smallest Index With Equal Value", - "TitleZH": "\u503c\u76f8\u7b49\u7684\u6700\u5c0f\u7d22\u5f15", + "TitleZH": "值相等的最小索引", "TitleSlug": "smallest-index-with-equal-value", "ContestSlug": "weekly-contest-265", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 265", - "ContestID_zh": "\u7b2c 265 \u573a\u5468\u8d5b" + "ContestID_zh": "第 265 场周赛" }, { "Rating": 1167.647122501, "ID": 2441, "Title": "Largest Positive Integer That Exists With Its Negative", - "TitleZH": "\u4e0e\u5bf9\u5e94\u8d1f\u6570\u540c\u65f6\u5b58\u5728\u7684\u6700\u5927\u6b63\u6574\u6570", + "TitleZH": "与对应负数同时存在的最大正整数", "TitleSlug": "largest-positive-integer-that-exists-with-its-negative", "ContestSlug": "weekly-contest-315", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 315", - "ContestID_zh": "\u7b2c 315 \u573a\u5468\u8d5b" + "ContestID_zh": "第 315 场周赛" }, { "Rating": 1167.1331831913, "ID": 1304, "Title": "Find N Unique Integers Sum up to Zero", - "TitleZH": "\u548c\u4e3a\u96f6\u7684N\u4e2a\u552f\u4e00\u6574\u6570", + "TitleZH": "和为零的N个唯一整数", "TitleSlug": "find-n-unique-integers-sum-up-to-zero", "ContestSlug": "weekly-contest-169", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 169", - "ContestID_zh": "\u7b2c 169 \u573a\u5468\u8d5b" + "ContestID_zh": "第 169 场周赛" }, { "Rating": 1167.1241589729, "ID": 2185, "Title": "Counting Words With a Given Prefix", - "TitleZH": "\u7edf\u8ba1\u5305\u542b\u7ed9\u5b9a\u524d\u7f00\u7684\u5b57\u7b26\u4e32", + "TitleZH": "统计包含给定前缀的字符串", "TitleSlug": "counting-words-with-a-given-prefix", "ContestSlug": "weekly-contest-282", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 282", - "ContestID_zh": "\u7b2c 282 \u573a\u5468\u8d5b" + "ContestID_zh": "第 282 场周赛" }, { "Rating": 1167.0749837258, "ID": 796, "Title": "Rotate String", - "TitleZH": "\u65cb\u8f6c\u5b57\u7b26\u4e32", + "TitleZH": "旋转字符串", "TitleSlug": "rotate-string", "ContestSlug": "weekly-contest-75", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 75", - "ContestID_zh": "\u7b2c 75 \u573a\u5468\u8d5b" + "ContestID_zh": "第 75 场周赛" }, { "Rating": 1166.78818332, "ID": 1832, "Title": "Check if the Sentence Is Pangram", - "TitleZH": "\u5224\u65ad\u53e5\u5b50\u662f\u5426\u4e3a\u5168\u5b57\u6bcd\u53e5", + "TitleZH": "判断句子是否为全字母句", "TitleSlug": "check-if-the-sentence-is-pangram", "ContestSlug": "weekly-contest-237", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 237", - "ContestID_zh": "\u7b2c 237 \u573a\u5468\u8d5b" + "ContestID_zh": "第 237 场周赛" }, { "Rating": 1166.5264284193, "ID": 1768, "Title": "Merge Strings Alternately", - "TitleZH": "\u4ea4\u66ff\u5408\u5e76\u5b57\u7b26\u4e32", + "TitleZH": "交替合并字符串", "TitleSlug": "merge-strings-alternately", "ContestSlug": "weekly-contest-229", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 229", - "ContestID_zh": "\u7b2c 229 \u573a\u5468\u8d5b" + "ContestID_zh": "第 229 场周赛" }, { "Rating": 1165.4768151611, "ID": 1446, "Title": "Consecutive Characters", - "TitleZH": "\u8fde\u7eed\u5b57\u7b26", + "TitleZH": "连续字符", "TitleSlug": "consecutive-characters", "ContestSlug": "biweekly-contest-26", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 26", - "ContestID_zh": "\u7b2c 26 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 26 场双周赛" }, { "Rating": 1165.2135167215, "ID": 2011, "Title": "Final Value of Variable After Performing Operations", - "TitleZH": "\u6267\u884c\u64cd\u4f5c\u540e\u7684\u53d8\u91cf\u503c", + "TitleZH": "执行操作后的变量值", "TitleSlug": "final-value-of-variable-after-performing-operations", "ContestSlug": "weekly-contest-259", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 259", - "ContestID_zh": "\u7b2c 259 \u573a\u5468\u8d5b" + "ContestID_zh": "第 259 场周赛" }, { "Rating": 1164.8182315157, "ID": 771, "Title": "Jewels and Stones", - "TitleZH": "\u5b9d\u77f3\u4e0e\u77f3\u5934", + "TitleZH": "宝石与石头", "TitleSlug": "jewels-and-stones", "ContestSlug": "weekly-contest-69", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 69", - "ContestID_zh": "\u7b2c 69 \u573a\u5468\u8d5b" + "ContestID_zh": "第 69 场周赛" }, { "Rating": 1164.0227691933, "ID": 1374, "Title": "Generate a String With Characters That Have Odd Counts", - "TitleZH": "\u751f\u6210\u6bcf\u79cd\u5b57\u7b26\u90fd\u662f\u5947\u6570\u4e2a\u7684\u5b57\u7b26\u4e32", + "TitleZH": "生成每种字符都是奇数个的字符串", "TitleSlug": "generate-a-string-with-characters-that-have-odd-counts", "ContestSlug": "weekly-contest-179", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 179", - "ContestID_zh": "\u7b2c 179 \u573a\u5468\u8d5b" + "ContestID_zh": "第 179 场周赛" }, { "Rating": 1163.6047095526, "ID": 1342, "Title": "Number of Steps to Reduce a Number to Zero", - "TitleZH": "\u5c06\u6570\u5b57\u53d8\u6210 0 \u7684\u64cd\u4f5c\u6b21\u6570", + "TitleZH": "将数字变成 0 的操作次数", "TitleSlug": "number-of-steps-to-reduce-a-number-to-zero", "ContestSlug": "biweekly-contest-19", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 19", - "ContestID_zh": "\u7b2c 19 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 19 场双周赛" }, { "Rating": 1161.8236318927, "ID": 2278, "Title": "Percentage of Letter in String", - "TitleZH": "\u5b57\u6bcd\u5728\u5b57\u7b26\u4e32\u4e2d\u7684\u767e\u5206\u6bd4", + "TitleZH": "字母在字符串中的百分比", "TitleSlug": "percentage-of-letter-in-string", "ContestSlug": "weekly-contest-294", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 294", - "ContestID_zh": "\u7b2c 294 \u573a\u5468\u8d5b" + "ContestID_zh": "第 294 场周赛" }, { "Rating": 1161.6227767245, "ID": 961, "Title": "N-Repeated Element in Size 2N Array", - "TitleZH": "\u91cd\u590d N \u6b21\u7684\u5143\u7d20", + "TitleZH": "重复 N 次的元素", "TitleSlug": "n-repeated-element-in-size-2n-array", "ContestSlug": "weekly-contest-116", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 116", - "ContestID_zh": "\u7b2c 116 \u573a\u5468\u8d5b" + "ContestID_zh": "第 116 场周赛" }, { "Rating": 1160.8899403409, "ID": 1512, "Title": "Number of Good Pairs", - "TitleZH": "\u597d\u6570\u5bf9\u7684\u6570\u76ee", + "TitleZH": "好数对的数目", "TitleSlug": "number-of-good-pairs", "ContestSlug": "weekly-contest-197", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 197", - "ContestID_zh": "\u7b2c 197 \u573a\u5468\u8d5b" + "ContestID_zh": "第 197 场周赛" }, { "Rating": 1160.4439395369, "ID": 1920, "Title": "Build Array from Permutation", - "TitleZH": "\u57fa\u4e8e\u6392\u5217\u6784\u5efa\u6570\u7ec4", + "TitleZH": "基于排列构建数组", "TitleSlug": "build-array-from-permutation", "ContestSlug": "weekly-contest-248", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 248", - "ContestID_zh": "\u7b2c 248 \u573a\u5468\u8d5b" + "ContestID_zh": "第 248 场周赛" }, { "Rating": 1155.4545579447, "ID": 2351, "Title": "First Letter to Appear Twice", - "TitleZH": "\u7b2c\u4e00\u4e2a\u51fa\u73b0\u4e24\u6b21\u7684\u5b57\u6bcd", + "TitleZH": "第一个出现两次的字母", "TitleSlug": "first-letter-to-appear-twice", "ContestSlug": "weekly-contest-303", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 303", - "ContestID_zh": "\u7b2c 303 \u573a\u5468\u8d5b" + "ContestID_zh": "第 303 场周赛" }, { "Rating": 1154.828067979, "ID": 1502, "Title": "Can Make Arithmetic Progression From Sequence", - "TitleZH": "\u5224\u65ad\u80fd\u5426\u5f62\u6210\u7b49\u5dee\u6570\u5217", + "TitleZH": "判断能否形成等差数列", "TitleSlug": "can-make-arithmetic-progression-from-sequence", "ContestSlug": "weekly-contest-196", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 196", - "ContestID_zh": "\u7b2c 196 \u573a\u5468\u8d5b" + "ContestID_zh": "第 196 场周赛" }, { "Rating": 1152.1494742874, "ID": 2089, "Title": "Find Target Indices After Sorting Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u6392\u5e8f\u540e\u7684\u76ee\u6807\u4e0b\u6807", + "TitleZH": "找出数组排序后的目标下标", "TitleSlug": "find-target-indices-after-sorting-array", "ContestSlug": "weekly-contest-269", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 269", - "ContestID_zh": "\u7b2c 269 \u573a\u5468\u8d5b" + "ContestID_zh": "第 269 场周赛" }, { "Rating": 1152.1377893605, "ID": 1365, "Title": "How Many Numbers Are Smaller Than the Current Number", - "TitleZH": "\u6709\u591a\u5c11\u5c0f\u4e8e\u5f53\u524d\u6570\u5b57\u7684\u6570\u5b57", + "TitleZH": "有多少小于当前数字的数字", "TitleSlug": "how-many-numbers-are-smaller-than-the-current-number", "ContestSlug": "weekly-contest-178", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 178", - "ContestID_zh": "\u7b2c 178 \u573a\u5468\u8d5b" + "ContestID_zh": "第 178 场周赛" }, { "Rating": 1151.5250329621, "ID": 1460, "Title": "Make Two Arrays Equal by Reversing Sub-arrays", - "TitleZH": "\u901a\u8fc7\u7ffb\u8f6c\u5b50\u6570\u7ec4\u4f7f\u4e24\u4e2a\u6570\u7ec4\u76f8\u7b49", + "TitleZH": "通过翻转子数组使两个数组相等", "TitleSlug": "make-two-arrays-equal-by-reversing-subarrays", "ContestSlug": "biweekly-contest-27", "ProblemIndex": "Q1", "ContestID_en": "Biweekly Contest 27", - "ContestID_zh": "\u7b2c 27 \u573a\u53cc\u5468\u8d5b" + "ContestID_zh": "第 27 场双周赛" }, { "Rating": 1151.3534799042, "ID": 1290, "Title": "Convert Binary Number in a Linked List to Integer", - "TitleZH": "\u4e8c\u8fdb\u5236\u94fe\u8868\u8f6c\u6574\u6570", + "TitleZH": "二进制链表转整数", "TitleSlug": "convert-binary-number-in-a-linked-list-to-integer", "ContestSlug": "weekly-contest-167", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 167", - "ContestID_zh": "\u7b2c 167 \u573a\u5468\u8d5b" + "ContestID_zh": "第 167 场周赛" }, { "Rating": 1151.2537511408, "ID": 2455, "Title": "Average Value of Even Numbers That Are Divisible by Three", - "TitleZH": "\u53ef\u88ab\u4e09\u6574\u9664\u7684\u5076\u6570\u7684\u5e73\u5747\u503c", + "TitleZH": "可被三整除的偶数的平均值", "TitleSlug": "average-value-of-even-numbers-that-are-divisible-by-three", "ContestSlug": "weekly-contest-317", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 317", - "ContestID_zh": "\u7b2c 317 \u573a\u5468\u8d5b" + "ContestID_zh": "第 317 场周赛" }, { "Rating": 1144.9508874557, "ID": 2413, "Title": "Smallest Even Multiple", - "TitleZH": "\u6700\u5c0f\u5076\u500d\u6570", + "TitleZH": "最小偶倍数", "TitleSlug": "smallest-even-multiple", "ContestSlug": "weekly-contest-311", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 311", - "ContestID_zh": "\u7b2c 311 \u573a\u5468\u8d5b" + "ContestID_zh": "第 311 场周赛" }, { "Rating": 1144.6237559885, "ID": 1913, "Title": "Maximum Product Difference Between Two Pairs", - "TitleZH": "\u4e24\u4e2a\u6570\u5bf9\u4e4b\u95f4\u7684\u6700\u5927\u4e58\u79ef\u5dee", + "TitleZH": "两个数对之间的最大乘积差", "TitleSlug": "maximum-product-difference-between-two-pairs", "ContestSlug": "weekly-contest-247", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 247", - "ContestID_zh": "\u7b2c 247 \u573a\u5468\u8d5b" + "ContestID_zh": "第 247 场周赛" }, { "Rating": 1142.8650731632, "ID": 1137, "Title": "N-th Tribonacci Number", - "TitleZH": "\u7b2c N \u4e2a\u6cf0\u6ce2\u90a3\u5951\u6570", + "TitleZH": "第 N 个泰波那契数", "TitleSlug": "n-th-tribonacci-number", "ContestSlug": "weekly-contest-147", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 147", - "ContestID_zh": "\u7b2c 147 \u573a\u5468\u8d5b" + "ContestID_zh": "第 147 场周赛" }, { "Rating": 1141.2363999461, "ID": 1281, "Title": "Subtract the Product and Sum of Digits of an Integer", - "TitleZH": "\u6574\u6570\u7684\u5404\u4f4d\u79ef\u548c\u4e4b\u5dee", + "TitleZH": "整数的各位积和之差", "TitleSlug": "subtract-the-product-and-sum-of-digits-of-an-integer", "ContestSlug": "weekly-contest-166", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 166", - "ContestID_zh": "\u7b2c 166 \u573a\u5468\u8d5b" + "ContestID_zh": "第 166 场周赛" }, { "Rating": 1139.6630206282, "ID": 1295, "Title": "Find Numbers with Even Number of Digits", - "TitleZH": "\u7edf\u8ba1\u4f4d\u6570\u4e3a\u5076\u6570\u7684\u6570\u5b57", + "TitleZH": "统计位数为偶数的数字", "TitleSlug": "find-numbers-with-even-number-of-digits", "ContestSlug": "weekly-contest-168", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 168", - "ContestID_zh": "\u7b2c 168 \u573a\u5468\u8d5b" + "ContestID_zh": "第 168 场周赛" }, { "Rating": 1139.4248492279, "ID": 1351, "Title": "Count Negative Numbers in a Sorted Matrix", - "TitleZH": "\u7edf\u8ba1\u6709\u5e8f\u77e9\u9635\u4e2d\u7684\u8d1f\u6570", + "TitleZH": "统计有序矩阵中的负数", "TitleSlug": "count-negative-numbers-in-a-sorted-matrix", "ContestSlug": "weekly-contest-176", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 176", - "ContestID_zh": "\u7b2c 176 \u573a\u5468\u8d5b" + "ContestID_zh": "第 176 场周赛" }, { "Rating": 1132.6812943289, "ID": 1929, "Title": "Concatenation of Array", - "TitleZH": "\u6570\u7ec4\u4e32\u8054", + "TitleZH": "数组串联", "TitleSlug": "concatenation-of-array", "ContestSlug": "weekly-contest-249", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 249", - "ContestID_zh": "\u7b2c 249 \u573a\u5468\u8d5b" + "ContestID_zh": "第 249 场周赛" }, { "Rating": 1129.949090232, "ID": 977, "Title": "Squares of a Sorted Array", - "TitleZH": "\u6709\u5e8f\u6570\u7ec4\u7684\u5e73\u65b9", + "TitleZH": "有序数组的平方", "TitleSlug": "squares-of-a-sorted-array", "ContestSlug": "weekly-contest-120", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 120", - "ContestID_zh": "\u7b2c 120 \u573a\u5468\u8d5b" + "ContestID_zh": "第 120 场周赛" }, { "Rating": 1129.3432988996, "ID": 1450, "Title": "Number of Students Doing Homework at a Given Time", - "TitleZH": "\u5728\u65e2\u5b9a\u65f6\u95f4\u505a\u4f5c\u4e1a\u7684\u5b66\u751f\u4eba\u6570", + "TitleZH": "在既定时间做作业的学生人数", "TitleSlug": "number-of-students-doing-homework-at-a-given-time", "ContestSlug": "weekly-contest-189", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 189", - "ContestID_zh": "\u7b2c 189 \u573a\u5468\u8d5b" + "ContestID_zh": "第 189 场周赛" }, { "Rating": 1125.575238274, "ID": 1455, "Title": "Check If a Word Occurs As a Prefix of Any Word in a Sentence", - "TitleZH": "\u68c0\u67e5\u5355\u8bcd\u662f\u5426\u4e3a\u53e5\u4e2d\u5176\u4ed6\u5355\u8bcd\u7684\u524d\u7f00", + "TitleZH": "检查单词是否为句中其他单词的前缀", "TitleSlug": "check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence", "ContestSlug": "weekly-contest-190", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 190", - "ContestID_zh": "\u7b2c 190 \u573a\u5468\u8d5b" + "ContestID_zh": "第 190 场周赛" }, { "Rating": 1121.0677596555, "ID": 1464, "Title": "Maximum Product of Two Elements in an Array", - "TitleZH": "\u6570\u7ec4\u4e2d\u4e24\u5143\u7d20\u7684\u6700\u5927\u4e58\u79ef", + "TitleZH": "数组中两元素的最大乘积", "TitleSlug": "maximum-product-of-two-elements-in-an-array", "ContestSlug": "weekly-contest-191", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 191", - "ContestID_zh": "\u7b2c 191 \u573a\u5468\u8d5b" + "ContestID_zh": "第 191 场周赛" }, { "Rating": 1120.698183624, "ID": 1470, "Title": "Shuffle the Array", - "TitleZH": "\u91cd\u65b0\u6392\u5217\u6570\u7ec4", + "TitleZH": "重新排列数组", "TitleSlug": "shuffle-the-array", "ContestSlug": "weekly-contest-192", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 192", - "ContestID_zh": "\u7b2c 192 \u573a\u5468\u8d5b" + "ContestID_zh": "第 192 场周赛" }, { "Rating": 1118.1080334618, "ID": 1394, "Title": "Find Lucky Integer in an Array", - "TitleZH": "\u627e\u51fa\u6570\u7ec4\u4e2d\u7684\u5e78\u8fd0\u6570", + "TitleZH": "找出数组中的幸运数", "TitleSlug": "find-lucky-integer-in-an-array", "ContestSlug": "weekly-contest-182", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 182", - "ContestID_zh": "\u7b2c 182 \u573a\u5468\u8d5b" + "ContestID_zh": "第 182 场周赛" }, { "Rating": 1104.7359028407, "ID": 1480, "Title": "Running Sum of 1d Array", - "TitleZH": "\u4e00\u7ef4\u6570\u7ec4\u7684\u52a8\u6001\u548c", + "TitleZH": "一维数组的动态和", "TitleSlug": "running-sum-of-1d-array", "ContestSlug": "weekly-contest-193", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 193", - "ContestID_zh": "\u7b2c 193 \u573a\u5468\u8d5b" + "ContestID_zh": "第 193 场周赛" }, { "Rating": 1084.1319467318, "ID": 1108, "Title": "Defanging an IP Address", - "TitleZH": "IP \u5730\u5740\u65e0\u6548\u5316", + "TitleZH": "IP 地址无效化", "TitleSlug": "defanging-an-ip-address", "ContestSlug": "weekly-contest-144", "ProblemIndex": "Q1", "ContestID_en": "Weekly Contest 144", - "ContestID_zh": "\u7b2c 144 \u573a\u5468\u8d5b" + "ContestID_zh": "第 144 场周赛" } ] diff --git a/src/childProcessCall/cli.ts b/src/childProcessCall/cli.ts new file mode 100644 index 0000000..5cba554 --- /dev/null +++ b/src/childProcessCall/cli.ts @@ -0,0 +1,41 @@ + +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/cli.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ +// var h = require('./helper'); + + +import { myPluginBase } from "./my_plugin_base"; +import { config } from "./config"; +import { log } from "./log"; +import { storageUtils } from "./storageUtils"; +class NewCli { + constructor() { + this.run(); + } + public run() { + process.stdout.on('error', function (e) { + if (e.code === 'EPIPE') process.exit(); + }); + config.init(); + log.init(); + storageUtils.init(); + if (myPluginBase.base_init()) { + myPluginBase.save(); + storageUtils.initCache(); + this.runCommand_new(); + } + }; + private runCommand_new() { + let com_str = process.argv[2]; + let auto_js = require("./commands/" + com_str)[com_str + "Command"]; + auto_js.handler(auto_js.process_argv(process.argv)); + } +} + +export const newCli: NewCli = new NewCli(); diff --git a/src/childProcessCall/commands/cache.ts b/src/childProcessCall/commands/cache.ts new file mode 100644 index 0000000..f8fb0ec --- /dev/null +++ b/src/childProcessCall/commands/cache.ts @@ -0,0 +1,56 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/cache.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +// let underscore = require('underscore'); + + +import { helper } from "../helper"; +// import { log } from "../log"; +import { storageUtils } from "../storageUtils"; +import { session } from "../session"; + +class CacheCommand { + constructor() { + } + + process_argv = function (argv) { + let argv_config = helper.base_argv().option('d', { + alias: 'delete', + type: 'boolean', + describe: 'Delete cache by keyword', + default: false + }); + argv_config.process_argv(argv); + + return argv_config.get_result(); + }; + + + handler = function (argv) { + session.argv = argv; + + const name = argv.keyword; + const isInteger = Number.isInteger(Number(name)); + + const all_data_file = storageUtils.listCache() + .filter(function (f) { + return (name.length === 0) || + (isInteger ? f.name.startsWith(name + '.') : f.name === name); + }); + + if (argv.delete) { + for (let f of all_data_file) { + storageUtils.delCache(f.name); + } + } + }; +} + +export const cacheCommand: CacheCommand = new CacheCommand(); diff --git a/src/childProcessCall/commands/config.ts b/src/childProcessCall/commands/config.ts new file mode 100644 index 0000000..9936333 --- /dev/null +++ b/src/childProcessCall/commands/config.ts @@ -0,0 +1,106 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/config.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +// let underscore = require('underscore'); +// let nconf = require('nconf'); + + +// import { config } from "../config"; +// import { log } from "../log"; +// import { file } from "../file"; +// import { session } from "../session"; +// import { helper } from "../helper"; + +class ConfigCommand { + constructor() { + + } + + // process_argv(argv) { + // let argv_config = helper.base_argv().option('a', { + // alias: 'all', + // type: 'boolean', + // describe: 'Show all config', + // default: false + // }) + // .option('d', { + // alias: 'delete', + // type: 'boolean', + // describe: 'Delete config by key', + // default: false + // }) + // .positional('key', { + // type: 'string', + // describe: 'Config key, delimited by colon', + // default: '' + // }) + // .positional('value', { + // type: 'string', + // describe: 'Config value', + // default: '' + // }); + // argv_config.process_argv(argv); + + // return argv_config.get_result(); + // } + + + // prettyConfig(cfg) { + // return JSON.stringify(cfg, null, 2); + // } + + // loadConfig(showall) { + // const cfg = showall ? config.getAll(true) : nconf.get(); + // return underscore.omit(cfg, 'type'); + // } + + // saveConfig() { + // storageUtils.write(storageUtils.configFile(), this.prettyConfig(this.loadConfig(false))); + // } + + // handler(argv) { + // session.argv = argv; + // nconf.file('local', storageUtils.configFile()); + + // // show all + // if (argv.key.length === 0) + // return log.info(this.prettyConfig(this.loadConfig(argv.all))); + + + // const v = nconf.get(argv.key); + + // // delete + // if (argv.delete) { + // if (v === undefined) return log.fatal('Key not found: ' + argv.key); + // nconf.clear(argv.key); + // return this.saveConfig(); + // } + + // // show + // if (argv.value.length === 0) { + // if (v === undefined) return log.fatal('Key not found: ' + argv.key); + // return log.info(this.prettyConfig(v)); + // } + + // // set + // try { + // nconf.set(argv.key, JSON.parse(argv.value)); + // } catch (e) { + // nconf.set(argv.key, JSON.parse('"' + argv.value + '"')); + // } + // return this.saveConfig(); + // }; +} + + + + +export const configCommand: ConfigCommand = new ConfigCommand(); + diff --git a/src/vsc-leetcode-cli/new_lib/commands/list.ts b/src/childProcessCall/commands/list.ts similarity index 72% rename from src/vsc-leetcode-cli/new_lib/commands/list.ts rename to src/childProcessCall/commands/list.ts index 7e95189..4548b22 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/list.ts +++ b/src/childProcessCall/commands/list.ts @@ -1,4 +1,14 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/list.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + import { helper } from "../helper"; import { log } from "../log"; import { corePlugin } from "../core"; @@ -10,7 +20,7 @@ class ListCommand { } process_argv(argv) { - var argv_config = helper.base_argv().option('q', corePlugin.filters.query) + let argv_config = helper.base_argv().option('q', corePlugin.filters.query) .option('s', { alias: 'stat', type: 'boolean', @@ -34,11 +44,11 @@ class ListCommand { type: 'string', default: '', describe: 'Filter questions by keyword' - }) + }); - argv_config.process_argv(argv) + argv_config.process_argv(argv); - return argv_config.get_result() + return argv_config.get_result(); } handler(argv) { @@ -47,10 +57,10 @@ class ListCommand { if (e) return log.info(e); let new_objcet: Array = []; problems.forEach(element => { - let temp_ele: any = {} + let temp_ele: any = {}; for (const key in element) { if (key != "link") { - temp_ele[key] = element[key] + temp_ele[key] = element[key]; } } new_objcet.push(temp_ele); @@ -60,7 +70,4 @@ class ListCommand { }; } - - - export const listCommand: ListCommand = new ListCommand(); diff --git a/src/vsc-leetcode-cli/new_lib/commands/plugin.ts b/src/childProcessCall/commands/plugin.ts similarity index 66% rename from src/vsc-leetcode-cli/new_lib/commands/plugin.ts rename to src/childProcessCall/commands/plugin.ts index 11b9168..7f187e4 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/plugin.ts +++ b/src/childProcessCall/commands/plugin.ts @@ -1,3 +1,11 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/plugin.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ import { helper } from "../helper"; @@ -13,7 +21,7 @@ class PluginCommand { } process_argv = function (argv) { - var argv_config = helper.base_argv().option('d', { + let argv_config = helper.base_argv().option('d', { alias: 'disable', type: 'boolean', describe: 'Disable plugin', @@ -32,17 +40,17 @@ class PluginCommand { type: 'string', describe: 'Filter plugin by name', default: '' - }) + }); - argv_config.process_argv(argv) + argv_config.process_argv(argv); - return argv_config.get_result() - } + return argv_config.get_result(); + }; handler = function (argv) { session.argv = argv; - let plugins = myPluginBase.plugins; + let all_plugin = myPluginBase.installed; const name = argv.name; // if (argv.install) { @@ -56,13 +64,14 @@ class PluginCommand { // return; // } - if (name) plugins = plugins.filter(x => x.name === name); - if (plugins.length === 0) return log.fatal('Plugin not found!'); - - const p = plugins[0]; - if (p.missing && (argv.enable || argv.disable)) - return log.fatal('Plugin missing, install it first'); + if (name) { + all_plugin = all_plugin.filter(x => x.name === name); + }; + if (all_plugin.length === 0) { + return log.fatal('Plugin not found!'); + } + const p = all_plugin[0]; if (argv.enable) { p.enabled = true; p.save(); @@ -70,12 +79,11 @@ class PluginCommand { p.enabled = false; p.save(); } else if (argv.delete) { - p.delete(); + // p.delete(); p.save(); myPluginBase.init(); } else if (argv.config) { log.info(JSON.stringify(config.plugins[name] || {}, null, 2)); - } else { } }; } diff --git a/src/childProcessCall/commands/query.ts b/src/childProcessCall/commands/query.ts new file mode 100644 index 0000000..173e7e8 --- /dev/null +++ b/src/childProcessCall/commands/query.ts @@ -0,0 +1,89 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/query.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +import { helper } from "../helper"; +import { log } from "../log"; +import { corePlugin } from "../core"; +import { session } from "../session"; + +class QueryCommand { + constructor() { } + process_argv = function (argv) { + let argv_config = helper.base_argv().option('T', { + alias: 'dontTranslate', + type: 'boolean', + default: false, + describe: 'Set to true to disable endpoint\'s translation', + }).option('a', { + alias: 'getTodayQuestion', + type: 'boolean', + default: false, + describe: 'getTodayQuestion', + }).option('b', { + alias: 'username', + type: 'string', + default: "", + describe: 'user name', + }).option('c', { + alias: 'getRating', + type: 'boolean', + default: false, + describe: 'ranking', + }).option('z', { + alias: 'test', + type: 'string', + default: "", + describe: 'test', + }); + argv_config.process_argv(argv); + return argv_config.get_result(); + }; + + handler = function (argv) { + session.argv = argv; + if (argv.a) { + corePlugin.getTodayQuestion(function (e, result) { + if (e) return; + log.info(JSON.stringify(result)); + }); + } else if (argv.b) { + corePlugin.getUserContest(argv.b, function (e, result) { + if (e) return; + log.info(JSON.stringify(result)); + }); + } else if (argv.c) { + corePlugin.getRating(function (e, result) { + if (e) { + let log_data = { + code: 101, + data: {} + }; + log.info(JSON.stringify(log_data)); + return; + }; + let log_data = { + code: 100, + data: result + }; + log.info(JSON.stringify(log_data)); + }); + } + else if (argv.z) { + corePlugin.getQueryZ(argv.z, function (e, result) { + if (e) return; + log.info(JSON.stringify(result)); + }); + } + }; +} + + + +export const queryCommand: QueryCommand = new QueryCommand(); diff --git a/src/childProcessCall/commands/session.ts b/src/childProcessCall/commands/session.ts new file mode 100644 index 0000000..e1955e6 --- /dev/null +++ b/src/childProcessCall/commands/session.ts @@ -0,0 +1,86 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/session.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + + +// import { helper } from "../helper"; +// import { corePlugin } from "../core"; +// import { log } from "../log"; +// import { session } from "../session"; + + +class SessionCommand { + constructor() { + + } + + // printSessions(e, sessions) { + // if (e) return log.info(e); + + // log.info(' %6s %5s %18s %28s %16s', + // 'Active', 'Id', 'Name', 'AC Questions', 'AC Submits'); + // log.info('-'.repeat(80)); + + // for (let s of sessions) { + // let questionRate = 0; + // let submissionRate = 0; + // if (s.submitted_questions > 0) + // questionRate = s.ac_questions * 100 / s.submitted_questions; + // if (s.total_submitted > 0) + // submissionRate = s.total_acs * 100 / s.total_submitted; + + // log.info( + // s.is_active ? helper.prettyState('ac') : ' ', + // s.id, + // s.name || 'Anonymous Session', + // s.ac_questions, + // questionRate.toFixed(2), + // s.total_acs, + // submissionRate.toFixed(2)); + // } + // } + + // handler(argv) { + // session.argv = argv; + + // if (argv.create) + // return corePlugin.createSession(argv.keyword, this.printSessions); + + // let that = this; + // corePlugin.getSessions(function (e, sessions) { + // if (e) return log.info(e); + + // if (argv.keyword) { + // const id = Number(argv.keyword); + // sessions = sessions.filter(x => x.name === argv.keyword || x.id === id); + // if (sessions.length > 1) return log.info('Ambiguous sessions?'); + + // const session = sessions[0]; + // if (!session) return log.info('Session not found!'); + + // if (argv.enable && !session.is_active) { + // corePlugin.activateSession(session, function (e, sessions) { + // if (e) return log.info(e); + // require('../session').session.deleteCodingSession(); + // that.printSessions(e, sessions); + // }); + // return; + // } + + // if (argv.delete) { + // return corePlugin.deleteSession(session, that.printSessions); + // } + // } + // that.printSessions(null, sessions); + // }); + // }; +} + + +export const sessionCommand: SessionCommand = new SessionCommand(); diff --git a/src/vsc-leetcode-cli/new_lib/commands/show.ts b/src/childProcessCall/commands/show.ts similarity index 71% rename from src/vsc-leetcode-cli/new_lib/commands/show.ts rename to src/childProcessCall/commands/show.ts index f9d3ac1..c09caf3 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/show.ts +++ b/src/childProcessCall/commands/show.ts @@ -1,10 +1,19 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/show.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -var util = require('util'); -var childProcess = require('child_process'); + +let util = require('util'); +let childProcess = require('child_process'); import { helper } from "../helper"; -import { file } from "../file"; +import { storageUtils } from "../storageUtils"; import { log } from "../log"; import { config } from "../config"; @@ -18,67 +27,55 @@ class ShowCommand { process_argv = function (argv) { - var argv_config = helper.base_argv().option('c', { + let argv_config = helper.base_argv().option('c', { alias: 'codeonly', type: 'boolean', default: false, describe: 'Only show code template' - }) - .option('e', { - alias: 'editor', - type: 'string', - describe: 'Open source code in editor' - }) - .option('g', { - alias: 'gen', - type: 'boolean', - default: false, - describe: 'Generate source code' - }) - .option('l', { - alias: 'lang', - type: 'string', - default: config.code.lang, - describe: 'Programming language of the source code', - choices: config.sys.langs - }) - .option('o', { - alias: 'outdir', - type: 'string', - describe: 'Where to save source code', - default: '.' - }) - .option('q', corePlugin.filters.query) + }).option('e', { + alias: 'editor', + type: 'string', + describe: 'Open source code in editor' + }).option('g', { + alias: 'gen', + type: 'boolean', + default: false, + describe: 'Generate source code' + }).option('l', { + alias: 'lang', + type: 'string', + default: config.code.lang, + describe: 'Programming language of the source code', + choices: config.sys.langs + }).option('o', { + alias: 'outdir', + type: 'string', + describe: 'Where to save source code', + default: '.' + }).option('q', corePlugin.filters.query) .option('t', corePlugin.filters.tag) .option('x', { alias: 'extra', type: 'boolean', default: false, describe: 'Show extra question details in source code' - }) - .option('T', { + }).option('T', { alias: 'dontTranslate', type: 'boolean', default: false, describe: 'Set to true to disable endpoint\'s translation', - }) - .positional('keyword', { + }).positional('keyword', { type: 'string', default: '', describe: 'Show question by name or id' - }) - - - argv_config.process_argv(argv) - - return argv_config.get_result() - } - - + }); + argv_config.process_argv(argv); + return argv_config.get_result(); + }; genFileName(problem, opts) { const path = require('path'); const params = [ - file.fmt(config.file.show, problem), + storageUtils.fmt(config.file.show, problem), '', helper.langToExt(opts.lang) ]; @@ -86,7 +83,7 @@ class ShowCommand { // try new name to avoid overwrite by mistake for (let i = 0; ; ++i) { const name = path.join(opts.outdir, params.join('.').replace(/\.+/g, '.')); - if (!file.exist(name)) + if (!storageUtils.exist(name)) return name; params[1] = i; } @@ -123,9 +120,9 @@ class ShowCommand { let filename; if (argv.gen) { - file.mkdir(argv.outdir); + storageUtils.mkdir(argv.outdir); filename = this.genFileName(problem, argv); - file.write(filename, code); + storageUtils.write(filename, code); if (argv.editor !== undefined) { childProcess.spawn(argv.editor || config.code.editor, [filename], { @@ -165,7 +162,7 @@ class ShowCommand { if (problem.totalSubmit) log.info(`* Total Submissions: ${problem.totalSubmit}`); if (problem.testable && problem.testcase) { - var testcase_value = util.inspect(problem.testcase) + let testcase_value = util.inspect(problem.testcase); log.info(`* Testcase Example: ${testcase_value}`); } if (filename) @@ -176,7 +173,7 @@ class ShowCommand { } handler(argv) { - var that = this + let that = this; session.argv = argv; if (argv.keyword.length > 0) { // show specific one @@ -185,7 +182,7 @@ class ShowCommand { that.showProblem(problem, argv); }); } else { - + // } }; } diff --git a/src/vsc-leetcode-cli/new_lib/commands/star.ts b/src/childProcessCall/commands/star.ts similarity index 62% rename from src/vsc-leetcode-cli/new_lib/commands/star.ts rename to src/childProcessCall/commands/star.ts index c43d6b1..198cc45 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/star.ts +++ b/src/childProcessCall/commands/star.ts @@ -1,4 +1,14 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/star.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + import { helper } from "../helper"; import { log } from "../log"; import { corePlugin } from "../core"; @@ -10,7 +20,7 @@ class StarCommand { } process_argv(argv) { - var argv_config = helper.base_argv().option('d', { + let argv_config = helper.base_argv().option('d', { alias: 'delete', type: 'boolean', describe: 'Unstar question', @@ -20,12 +30,12 @@ class StarCommand { type: 'string', describe: 'Question name or id', default: '' - }) + }); - argv_config.process_argv(argv) + argv_config.process_argv(argv); - return argv_config.get_result() + return argv_config.get_result(); } handler(argv) { @@ -36,10 +46,7 @@ class StarCommand { corePlugin.starProblem(problem, !argv.delete, function (e, starred) { if (e) return log.info(e); - - log.info('[%s] %s %s', problem.fid, problem.name, - starred ? 'icon.like' : 'icon.unlike'); - + log.info(`[${problem.fid}] ${problem.name} ${starred ? 'icon.like' : 'icon.unlike'}`); corePlugin.updateProblem(problem, { starred: starred }); }); }); diff --git a/src/childProcessCall/commands/stat.ts b/src/childProcessCall/commands/stat.ts new file mode 100644 index 0000000..c207724 --- /dev/null +++ b/src/childProcessCall/commands/stat.ts @@ -0,0 +1,220 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/stat.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +// let moment_out = require('moment'); +// let underscore = require('underscore'); + +// import { helper } from "../helper"; +// import { log } from "../log"; +// import { corePlugin } from "../core"; +// import { session } from "../session"; + +class StatCommand { + constructor() { + + } + + // process_argv(argv) { + // let argv_config = helper.base_argv().option('c', { + // alias: 'cal', + // type: 'boolean', + // default: false, + // describe: 'Show calendar statistics' + // }) + // .option('g', { + // alias: 'graph', + // type: 'boolean', + // default: false, + // describe: 'Show graphic statistics' + // }) + // .option('l', { + // alias: 'lock', + // type: 'boolean', + // default: true, + // describe: 'Include locked questions' + // }) + // .option('q', corePlugin.filters.query) + // .option('t', corePlugin.filters.tag); + // argv_config.process_argv(argv); + + // return argv_config.get_result(); + // } + + // printLine(key, done, all) { + // const n = 30; + // const percent = (all > 0) ? done / all : 0; + // const x = Math.ceil(n * percent); + // log.info(' %s\t%3s/%-3s (%6s %%) %s%s', + // helper.prettyLevel(key), done, all, + // (100 * percent).toFixed(2), + // '█'.repeat(x), + // '░'.repeat(n - x)); + // } + + // showProgress(problems) { + // const stats = { + // easy: { all: 0, ac: 0 }, + // medium: { all: 0, ac: 0 }, + // hard: { all: 0, ac: 0 } + // }; + + // for (let problem of problems) { + // const level = problem.level.toLowerCase(); + // const state = problem.state.toLowerCase(); + + // if (!(level in stats)) continue; + // ++stats[level].all; + + // if (!(state in stats[level])) continue; + // ++stats[level][state]; + // } + + // this.printLine('Easy', stats.easy.ac, stats.easy.all); + // this.printLine('Medium', stats.medium.ac, stats.medium.all); + // this.printLine('Hard', stats.hard.ac, stats.hard.all); + // } + + // showGraph(problems) { + // const ICONS = { + + // }; + + // let groups = 1; + + // const header = underscore.range(groups) + // .map(x => x * 10 + 1 + '' + x * 10 + 10) + // .join(''); + // log.info(' ' + header); + + // const graph: Array = []; + // for (let problem of problems) + // graph[problem.fid] = ICONS[problem.state] || ' ICONS.none '; + + // let line = ['0']; + // for (let i = 1, n = graph.length; i <= n; ++i) { + // // padding before group + // if (i % 10 === 1) line.push(' '); + + // line.push(graph[i] || ' ICONS.empty'); + + // // time to start new row + // if (i % (10 * groups) === 0 || i === n) { + // log.info(line.join(' ')); + // line = [' ' + i]; + // } + // } + + // log.info(); + // log.info('%7s%s%3s%s%3s%s', + // ' ', 'ICONS.ac' + ' Accepted', + // ' ', 'ICONS.notac' + ' Not Accepted', + // ' ', 'ICONS.none' + ' Remaining'); + // } + + // showCal(problems) { + // const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + // const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; + // const ICONS = [ + // 'icon.none', + // 'icon.ac', + // 'icon.ac', + // 'icon.ac', + // 'icon.ac', + // ]; + + // const N_MONTHS = 12; + // const N_WEEKS = 53; + // const N_WEEKDAYS = 7; + + // const now = moment_out(); + + // const SCORES = { easy: 1, medium: 2, hard: 5 }; + // function toScore(sum, id) { + // const problem = problems.find(x => x.fid === id); + // if (problem) sum += (SCORES[problem.level.toLowerCase()] || 1); + // return sum; + // } + + // // load historical stats + // const graph: Array = []; + // const stats = require('../cache').get(helper.KEYS.stat) || {}; + // for (let k of underscore.keys(stats)) { + // const score = (stats[k]['ac.set'] || []).reduce(toScore, 0); + // if (score === 0) continue; + + // const d = moment_out(k, 'YYYY-MM-DD'); + // graph[now.diff(d, 'days')] = score; + // } + + // // print header + // const buf = Buffer.alloc(120, ' ', 'ascii'); + // for (let i = 0; i <= N_MONTHS; ++i) { + // // for day 1 in each month, calculate its column position in graph + // const d = now.clone().subtract(i, 'months').date(1); + // const idx = now.diff(d, 'days'); + + // const j = (N_WEEKS - idx / N_WEEKDAYS + 1) * 2; + // if (j >= 0) buf.write(MONTHS[d.month()], j); + // } + // log.info('%7s%s', ' ', buf.toString()); + + // // print graph + // for (let i = 0; i < N_WEEKDAYS; ++i) { + // const line: Array = []; + // // print day in week + // const idx = (now.day() + i + 1) % N_WEEKDAYS; + // line.push(WEEKDAYS[idx]); + + // for (let j = 0; j < N_WEEKS; ++j) { + // let idx = (N_WEEKS - j - 1) * N_WEEKDAYS + N_WEEKDAYS - i - 1; + // const d = now.clone().subtract(idx, 'days'); + + // // map count to icons index: + // // [0] => 0, [1,5] => 1, [6,10] => 2, [11,15] => 3, [16,) => 4 + // const count = graph[idx] || 0; + // idx = Math.floor((count - 1) / 5) + 1; + // if (idx > 4) idx = 4; + + // let icon = ICONS[idx]; + // // use different colors for adjacent months + // if (idx === 0 && d.month() % 2) icon = icon; + // line.push(icon); + // } + // log.info(line.join(' ')); + // } + + // log.info(); + // log.info('%8s%s%3s%s%3s%s%3s%s', + // ' ', ICONS[1] + ' 1~5', + // ' ', ICONS[2] + ' 6~10', + // ' ', ICONS[3] + ' 11~15', + // ' ', ICONS[4] + ' 16+'); + // } + + // handler(argv) { + // session.argv = argv; + // let that = this; + // corePlugin.filterProblems(argv, function (e, problems) { + // if (e) return log.info(e); + + // if (!argv.lock) + // problems = problems.filter(x => !x.locked); + + // log.info(); + // if (argv.graph) that.showGraph(problems); + // else if (argv.cal) that.showCal(problems); + // else that.showProgress(problems); + // log.info(); + // }); + // }; +} + +export const statCommand: StatCommand = new StatCommand(); + diff --git a/src/childProcessCall/commands/submission.ts b/src/childProcessCall/commands/submission.ts new file mode 100644 index 0000000..f0ff5ef --- /dev/null +++ b/src/childProcessCall/commands/submission.ts @@ -0,0 +1,166 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/submission.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + + +// let path = require('path'); + +// let _ = require('underscore'); + + + +// import { helper } from "../helper"; +// import { file } from "../file"; +// import { config } from "../config"; +// import { log } from "../log"; +// import { Queue } from "../queue"; +// import { corePlugin } from "../core"; +// import { session } from "../session"; + + +class SubMission { + constructor() { + + } + + // process_argv = function (argv) { + // let argv_config = helper.base_argv().option('a', { + // alias: 'all', + // type: 'boolean', + // default: false, + // describe: 'Download all questions' + // }) + // .option('l', { + // alias: 'lang', + // type: 'string', + // default: 'all', + // describe: 'Filter by programming language' + // }) + // .option('o', { + // alias: 'outdir', + // type: 'string', + // describe: 'Where to save submission code', + // default: '.' + // }) + // .option('x', { + // alias: 'extra', + // type: 'boolean', + // default: false, + // describe: 'Show extra question details in submission code' + // }) + // .option('T', { + // alias: 'dontTranslate', + // type: 'boolean', + // default: false, + // describe: 'Set to true to disable endpoint\'s translation', + // }) + // .positional('keyword', { + // type: 'string', + // default: '', + // describe: 'Download specific question by id' + // }); + // argv_config.process_argv(argv); + + // return argv_config.get_result(); + // }; + + + // doTask(problem, queue, cb) { + // let that = this; + // const argv = queue.ctx.argv; + + // function onTaskDone(e, msg) { + // // NOTE: msg color means different purpose: + // // - red: error + // // - green: accepted, fresh download + // // - yellow: not ac-ed, fresh download + // // - white: existed already, skip download + // log.info('[%=4s] %-60s %s', problem.fid, problem.name, + // (e ? 'ERROR: ' + (e.msg || e) : msg)); + // if (cb) cb(e); + // } + + // if (argv.extra) { + // // have to get problem details, e.g. problem description. + // corePlugin.getProblem(problem.fid, !argv.dontTranslate, function (e, problem) { + // if (e) return cb(e); + // that.exportSubmission(problem, argv, onTaskDone); + // }); + // } else { + // that.exportSubmission(problem, argv, onTaskDone); + // } + // } + + // exportSubmission(problem, argv, cb) { + // corePlugin.getSubmissions(problem, function (e, submissions) { + // if (e) return cb(e); + // if (submissions.length === 0) + // return cb('No submissions?'); + + // // get obj list contain required filetype + // submissions = submissions.filter(x => argv.lang === 'all' || argv.lang === x.lang); + // if (submissions.length === 0) + // return cb('No submissions in required language.'); + + // // if no accepted, use the latest non-accepted one + // const submission = submissions.find(x => x.status_display === 'Accepted') || submissions[0]; + // submission.ac = (submission.status_display === 'Accepted'); + + // const data = _.extend({}, submission, problem); + // data.sid = submission.id; + // data.ac = submission.ac ? 'ac' : 'notac'; + // const basename = storageUtils.fmt(config.storageUtils.submission, data); + // const f = path.join(argv.outdir, basename + helper.langToExt(submission.lang)); + + // storageUtils.mkdir(argv.outdir); + // // skip the existing cached submissions + // if (storageUtils.exist(f)) + // return cb(null, f); + + // corePlugin.getSubmission(submission, function (e, submission) { + // if (e) return cb(e); + + // const opts = { + // lang: submission.lang, + // code: submission.code, + // tpl: argv.extra ? 'detailed' : 'codeonly' + // }; + // storageUtils.write(f, corePlugin.exportProblem(problem, opts)); + // cb(null, submission.ac ? f + // : f); + // }); + // }); + // } + + // handler(argv) { + // session.argv = argv; + // const q = new Queue(null, { argv: argv }, this.doTask); + + // if (argv.all) { + // corePlugin.getProblems(false, function (e, problems) { + // if (e) return log.info(e); + // problems = problems.filter(x => x.state === 'ac' || x.state === 'notac'); + // q.addTasks(problems).run(); + // }); + // return; + // } + + // if (!argv.keyword) + // return log.info('missing keyword?'); + + // corePlugin.getProblem(argv.keyword, !argv.dontTranslate, function (e, problem) { + // if (e) return log.info(e); + // q.addTask(problem).run(); + // }); + // }; +} + + + +export const subMissionCommand: SubMission = new SubMission(); diff --git a/src/vsc-leetcode-cli/new_lib/commands/submit.ts b/src/childProcessCall/commands/submit.ts similarity index 70% rename from src/vsc-leetcode-cli/new_lib/commands/submit.ts rename to src/childProcessCall/commands/submit.ts index 5c07c34..76cc91a 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/submit.ts +++ b/src/childProcessCall/commands/submit.ts @@ -1,10 +1,20 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/submit.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -var util = require('util'); -var lodash = require('lodash'); + + +let util = require('util'); +let lodash = require('lodash'); import { helper } from "../helper"; -import { file } from "../file"; +import { storageUtils } from "../storageUtils"; import { log } from "../log"; import { corePlugin } from "../core"; import { session } from "../session"; @@ -18,14 +28,14 @@ class SubmitCommand { process_argv(argv) { - var argv_config = helper.base_argv().positional('filename', { + let argv_config = helper.base_argv().positional('filename', { type: 'string', describe: 'Code file to submit', default: '' - }) - argv_config.process_argv(argv) + }); + argv_config.process_argv(argv); - return argv_config.get_result() + return argv_config.get_result(); } @@ -37,12 +47,12 @@ class SubmitCommand { for (let line of lines) { if (k !== 'state') { if (!log_obj.hasOwnProperty(lodash.startCase(k))) { - log_obj[lodash.startCase(k)] = [line] + log_obj[lodash.startCase(k)] = [line]; } else { - log_obj[lodash.startCase(k)].push(line) + log_obj[lodash.startCase(k)].push(line); } } else { - log_obj.messages.push(line) + log_obj.messages.push(line); } } } @@ -50,16 +60,16 @@ class SubmitCommand { printLine(log_obj, ...ret: any[]) { const args = ret.slice(1); const line = util.format.apply(util, args); - log_obj.messages.push(line) + log_obj.messages.push(line); } handler(argv) { session.argv = argv; - if (!file.exist(argv.filename)) + if (!storageUtils.exist(argv.filename)) return log.fatal('File ' + argv.filename + ' not exist!'); - const meta = file.meta(argv.filename); - var that = this; + const meta = storageUtils.meta(argv.filename); + let that = this; // translation doesn't affect problem lookup corePlugin.getProblem(meta, true, function (e, problem) { if (e) return log.info(e); @@ -72,13 +82,13 @@ class SubmitCommand { const result = results[0]; - var log_obj: any = {} - log_obj.messages = [] - log_obj.system_message = {} - log_obj.system_message.fid = problem.fid - log_obj.system_message.id = problem.id - log_obj.system_message.qid = problem.id - log_obj.system_message.sub_type = "submit" + let log_obj: any = {}; + log_obj.messages = []; + log_obj.system_message = {}; + log_obj.system_message.fid = problem.fid; + log_obj.system_message.id = problem.id; + log_obj.system_message.qid = problem.id; + log_obj.system_message.sub_type = "submit"; log_obj.system_message.accepted = false; that.printResult(result, 'state', log_obj); @@ -110,7 +120,7 @@ class SubmitCommand { that.printResult(result, 'expected_answer', log_obj); that.printResult(result, 'stdout', log_obj); } - log.info(JSON.stringify(log_obj)) + log.info(JSON.stringify(log_obj)); corePlugin.updateProblem(problem, { state: (result.ok ? 'ac' : 'notac') }); }); }); diff --git a/src/vsc-leetcode-cli/new_lib/commands/test.ts b/src/childProcessCall/commands/test.ts similarity index 74% rename from src/vsc-leetcode-cli/new_lib/commands/test.ts rename to src/childProcessCall/commands/test.ts index 868fe65..324c634 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/test.ts +++ b/src/childProcessCall/commands/test.ts @@ -1,10 +1,20 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/test.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -var _ = require('underscore'); -var lodash = require('lodash'); + + +let _ = require('underscore'); +let lodash = require('lodash'); import { helper } from "../helper"; -import { file } from "../file"; +import { storageUtils } from "../storageUtils"; import { log } from "../log"; import { corePlugin } from "../core"; import { session } from "../session"; @@ -17,7 +27,7 @@ class TestCommand { process_argv(argv) { - var argv_config = helper.base_argv().option('i', { + let argv_config = helper.base_argv().option('i', { alias: 'interactive', type: 'boolean', default: false, @@ -39,11 +49,11 @@ class TestCommand { type: 'string', default: '', describe: 'Code file to test' - }) + }); - argv_config.process_argv(argv) + argv_config.process_argv(argv); - return argv_config.get_result() + return argv_config.get_result(); } @@ -59,24 +69,24 @@ class TestCommand { for (let line of lines) { const extraInfo = extra ? ` (${extra})` : ''; if (k !== 'state') { - var new_kk = lodash.startCase(k) + extraInfo; + let new_kk = lodash.startCase(k) + extraInfo; if (!log_obj.hasOwnProperty(new_kk)) { - log_obj[new_kk] = [line] + log_obj[new_kk] = [line]; } else { - log_obj[new_kk].push(line) + log_obj[new_kk].push(line); } } else { - log_obj.messages.push(line) + log_obj.messages.push(line); } } } runTest(argv) { - var that = this - if (!file.exist(argv.filename)) + let that = this; + if (!storageUtils.exist(argv.filename)) return log.fatal('File ' + argv.filename + ' not exist!'); - const meta = file.meta(argv.filename); + const meta = storageUtils.meta(argv.filename); // [key: string]: string[]; // messages: string[]; @@ -98,10 +108,10 @@ class TestCommand { // NOTE: wordwrap internally uses '\n' as EOL, so here we have to // remove all '\r' in the raw string. new_desc = new_desc.replace(/\r\n/g, '\n').replace(/^ /mg, '⁠'); - var input = (require('wordwrap')(120))(new_desc).split('\n'); - var temp_test: Array = [] - var start_flag = false; - var temp_collect = ""; + let input = (require('wordwrap')(120))(new_desc).split('\n'); + let temp_test: Array = []; + let start_flag = false; + let temp_collect = ""; for (let all_input = 0; all_input < input.length; all_input++) { const element = input[all_input]; var check_index = element.indexOf("输入"); @@ -109,7 +119,7 @@ class TestCommand { check_index = element.indexOf("Input:"); } if (check_index != -1) { - temp_collect += element.substring(check_index + 1) + temp_collect += element.substring(check_index + 1); start_flag = true; continue; } @@ -125,10 +135,10 @@ class TestCommand { temp_collect += element; } else { if (temp_collect.length > 0) { - var new_ele = temp_collect; - var temp_case: Array = [] - var wait_cur = "" - var no_need_flag = false + let new_ele = temp_collect; + let temp_case: Array = []; + let wait_cur = ""; + let no_need_flag = false; for (let index = new_ele.length - 1; index >= 0; index--) { if (no_need_flag) { if (new_ele[index] == ",") { @@ -136,16 +146,16 @@ class TestCommand { } } else { if (new_ele[index] == "=") { - temp_case.push(wait_cur.trim()) + temp_case.push(wait_cur.trim()); no_need_flag = true; - wait_cur = "" + wait_cur = ""; } else { - wait_cur = new_ele[index] + wait_cur + wait_cur = new_ele[index] + wait_cur; } } } for (let index = temp_case.length - 1; index >= 0; index--) { - temp_test.push(temp_case[index]) + temp_test.push(temp_case[index]); } temp_collect = ""; } @@ -156,8 +166,8 @@ class TestCommand { if (temp_test.length < 1) { return; } - var all_case = temp_test.join("\n") - problem.testcase = all_case + let all_case = temp_test.join("\n"); + problem.testcase = all_case; } if (!problem.testcase) @@ -172,13 +182,13 @@ class TestCommand { results = _.sortBy(results, x => x.type); - var log_obj: any = {} - log_obj.messages = [] - log_obj.system_message = {} - log_obj.system_message.fid = problem.fid - log_obj.system_message.id = problem.id - log_obj.system_message.qid = problem.id - log_obj.system_message.sub_type = "test" + let log_obj: any = {}; + log_obj.messages = []; + log_obj.system_message = {}; + log_obj.system_message.fid = problem.fid; + log_obj.system_message.id = problem.id; + log_obj.system_message.qid = problem.id; + log_obj.system_message.sub_type = "test"; log_obj.system_message.accepted = false; if (results[0].state === 'Accepted') { @@ -205,7 +215,7 @@ class TestCommand { } handler(argv) { - var that = this; + let that = this; session.argv = argv; if (!argv.i) return that.runTest(argv); diff --git a/src/vsc-leetcode-cli/new_lib/commands/user.ts b/src/childProcessCall/commands/user.ts similarity index 88% rename from src/vsc-leetcode-cli/new_lib/commands/user.ts rename to src/childProcessCall/commands/user.ts index 2341e69..71a5739 100644 --- a/src/vsc-leetcode-cli/new_lib/commands/user.ts +++ b/src/childProcessCall/commands/user.ts @@ -1,5 +1,14 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/commands/user.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -var prompt_out = require('prompt'); + +let prompt_out = require('prompt'); import { helper } from "../helper"; import { log } from "../log"; import { corePlugin } from "../core"; @@ -11,7 +20,7 @@ class UserCommand { } process_argv(argv) { - var argv_config = helper.base_argv().option('l', { + let argv_config = helper.base_argv().option('l', { alias: 'login', type: 'boolean', default: false, @@ -40,11 +49,11 @@ class UserCommand { type: 'boolean', default: false, describe: 'Logout' - }) + }); - argv_config.process_argv(argv) + argv_config.process_argv(argv); - return argv_config.get_result() + return argv_config.get_result(); } diff --git a/src/vsc-leetcode-cli/new_lib/config.ts b/src/childProcessCall/config.ts similarity index 88% rename from src/vsc-leetcode-cli/new_lib/config.ts rename to src/childProcessCall/config.ts index 4f5529f..fcb4ebd 100644 --- a/src/vsc-leetcode-cli/new_lib/config.ts +++ b/src/childProcessCall/config.ts @@ -1,15 +1,25 @@ -var underscore = require('underscore'); +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/config.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +let underscore = require('underscore'); class Config { - app - sys - autologin - code - file - color - icon - network - plugins + app; + sys; + autologin; + code; + file; + color; + icon; + network; + plugins; constructor() { this.sys = { categories: [ @@ -66,37 +76,36 @@ class Config { verify: 'https://leetcode.com/submissions/detail/$id/check/', favorites: 'https://leetcode.com/list/api/questions', favorite_delete: 'https://leetcode.com/list/api/questions/$hash/$id', - plugin: 'https://raw.githubusercontent.com/leetcode-tools/leetcode-cli/master/lib/plugins/$name.js', problem_detail: '', noj_go: '', u: '', }, - } + }; this.autologin = { enable: false, retry: 2 - } + }; this.code = { editor: 'vim', lang: 'cpp' - } + }; this.file = { show: '${fid}.${slug}', submission: '${fid}.${slug}.${sid}.${ac}' - } + }; this.color = { enable: true, theme: 'default' - } + }; this.icon = { theme: '' - } + }; this.network = { concurrency: 10, delay: 1 - } - this.plugins = {} + }; + this.plugins = {}; } init() { @@ -124,8 +133,8 @@ class Config { this.sys.urls.verify = 'https://leetcode.cn/submissions/detail/$id/check/'; this.sys.urls.favorites = 'https://leetcode.cn/list/api/questions'; this.sys.urls.favorite_delete = 'https://leetcode.cn/list/api/questions/$hash/$id'; - this.sys.urls.noj_go = 'https://leetcode.cn/graphql/noj-go/' - this.sys.urls.u = 'https://leetcode.cn/u/$username/' + this.sys.urls.noj_go = 'https://leetcode.cn/graphql/noj-go/'; + this.sys.urls.u = 'https://leetcode.cn/u/$username/'; this.sys.urls.github_login = 'https://leetcode.cn/accounts/github/login/?next=%2F'; this.sys.urls.linkedin_login = 'https://leetcode.cn/accounts/linkedin_oauth2/login/?next=%2F'; this.sys.urls.leetcode_redirect = 'https://leetcode.cn/'; diff --git a/src/vsc-leetcode-cli/new_lib/core.ts b/src/childProcessCall/core.ts similarity index 82% rename from src/vsc-leetcode-cli/new_lib/core.ts rename to src/childProcessCall/core.ts index 5f267be..2fb9aa9 100644 --- a/src/vsc-leetcode-cli/new_lib/core.ts +++ b/src/childProcessCall/core.ts @@ -1,11 +1,21 @@ -var util = require('util'); +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/core.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -var _ = require('underscore'); -var cheerio = require('cheerio'); + +let util = require('util'); + +let _ = require('underscore'); +let cheerio = require('cheerio'); // import { log } from "./log"; import { helper } from "./helper"; -import { file } from "./file"; +import { storageUtils } from "./storageUtils"; import { MyPluginBase } from "./my_plugin_base"; @@ -14,8 +24,8 @@ function hasTag(o, tag) { } class CorePlugin extends MyPluginBase { - id = 99999999 - name = 'core' + id = 99999999; + name = 'core'; builtin = true; filters = { query: { @@ -46,7 +56,6 @@ class CorePlugin extends MyPluginBase { } - filterProblems = (opts, cb) => { this.getProblems(!opts.dontTranslate, function (e, problems) { if (e) return cb(e); @@ -69,16 +78,16 @@ class CorePlugin extends MyPluginBase { }); }; public getProblem = (keyword, needTranslation, cb) => { - var that = this; + let that = this; this.getProblems(needTranslation, function (e, problems) { if (e) return cb(e); keyword = Number(keyword) || keyword; - const metaFid = file.exist(keyword) ? file.meta(keyword).id : NaN; + const metaFid = storageUtils.exist(keyword) ? storageUtils.meta(keyword).id : NaN; const problem = problems.find(function (x) { if (keyword?.fid) { - return x.fid + '' === keyword.fid + '' + return x.fid + '' === keyword.fid + ''; } else if (keyword?.qid) { - return x.id + '' === keyword.qid + '' + return x.id + '' === keyword.qid + ''; } else { return x.id + '' === keyword + '' || x.fid + '' === metaFid + '' || x.name === keyword || x.slug === keyword; } @@ -121,7 +130,7 @@ class CorePlugin extends MyPluginBase { const wrap = require('wordwrap')(79 - data.comment.line.length); data.desc = wrap(desc).split('\n'); } - return file.render(opts.tpl, data); + return storageUtils.render(opts.tpl, data); }; getTodayQuestion = (cb) => { @@ -129,20 +138,28 @@ class CorePlugin extends MyPluginBase { if (e) return cb(e); return cb(null, result); }); - } + }; + + getRating = (cb) => { + this.getRatingOnline(function (e, result) { + if (e) return cb(e); + return cb(null, result); + }); + }; + getQueryZ = (username, cb) => { this.getTestApi(username, function (e, result) { if (e) return cb(e); return cb(null, result); }); - } + }; getUserContest = (username, cb) => { this.getUserContestP(username, function (e, result) { if (e) return cb(e); return cb(null, result); }); - } + }; } diff --git a/src/vsc-leetcode-cli/new_lib/helper.ts b/src/childProcessCall/helper.ts similarity index 65% rename from src/vsc-leetcode-cli/new_lib/helper.ts rename to src/childProcessCall/helper.ts index 267cbfe..e9c9c07 100644 --- a/src/vsc-leetcode-cli/new_lib/helper.ts +++ b/src/childProcessCall/helper.ts @@ -1,33 +1,42 @@ -// var underscore = require('underscore'); -var ora = require('ora'); +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/helper.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ -import { file } from "./file"; -export const UNITS_SIZE = [ - { unit: 'B', name: 'Bytes', count: 1024 }, - { unit: 'K', name: 'KBytes', count: 1024 }, - { unit: 'M', name: 'MBytes', count: 1024 }, - { unit: 'G', name: 'GBytes', count: -1 } -]; +let ora = require('ora'); -export const UNITS_TIME = [ - { unit: 's', name: 'seconds', count: 60 }, - { unit: 'm', name: 'minutes', count: 60 }, - { unit: 'h', name: 'hours', count: 24 }, - { unit: 'd', name: 'days', count: 7 }, - { unit: 'w', name: 'weeks', count: 4 }, - { unit: 'm', name: 'months', count: 12 }, - { unit: 'y', name: 'years', count: -1 } -]; +import { storageUtils } from "./storageUtils"; -export function getUnit(units, v) { - for (let i = 0; i < units.length; ++i) { - if (units[i].count <= 0 || v < units[i].count) - return [v, units[i]]; - v /= units[i].count; - } - return []; -} +// export const UNITS_SIZE = [ +// { unit: 'B', name: 'Bytes', count: 1024 }, +// { unit: 'K', name: 'KBytes', count: 1024 }, +// { unit: 'M', name: 'MBytes', count: 1024 }, +// { unit: 'G', name: 'GBytes', count: -1 } +// ]; + +// export const UNITS_TIME = [ +// { unit: 's', name: 'seconds', count: 60 }, +// { unit: 'm', name: 'minutes', count: 60 }, +// { unit: 'h', name: 'hours', count: 24 }, +// { unit: 'd', name: 'days', count: 7 }, +// { unit: 'w', name: 'weeks', count: 4 }, +// { unit: 'm', name: 'months', count: 12 }, +// { unit: 'y', name: 'years', count: -1 } +// ]; + +// export function getUnit(units, v) { +// for (let i = 0; i < units.length; ++i) { +// if (units[i].count <= 0 || v < units[i].count) +// return [v, units[i]]; +// v /= units[i].count; +// } +// return []; +// } export const LANGS = [ { lang: 'bash', ext: '.sh', style: '#' }, @@ -50,7 +59,7 @@ export const LANGS = [ ]; class HELPER { - KEYS + KEYS; constructor() { this.KEYS = { user: '../user', @@ -58,36 +67,37 @@ class HELPER { plugins: '../../plugins', problems: 'problems', translation: 'translationConfig', + ranting_path: '../../rating', problem: p => p.fid + '.' + p.slug + '.' + p.category }; } - prettyState(state) { - switch (state) { - case 'ac': return this.prettyText('', true); - case 'notac': return this.prettyText('', false); - default: return ' '; - } - }; + // prettyState(state) { + // switch (state) { + // case 'ac': return this.prettyText('', true); + // case 'notac': return this.prettyText('', false); + // default: return ' '; + // } + // }; - prettyText(text, yesNo) { - const icon = require('./icon'); - switch (yesNo) { - case true: return (icon.yes + text); - case false: return (icon.no + text); - default: return text; - } - }; + // prettyText(text, yesNo) { + // const icon = require('./icon'); + // switch (yesNo) { + // case true: return (icon.yes + text); + // case false: return (icon.no + text); + // default: return text; + // } + // }; - prettySize(n) { - const res = getUnit(UNITS_SIZE, n) || []; - return res[0].toFixed(2) + res[1].unit; - }; + // prettySize(n) { + // const res = getUnit(UNITS_SIZE, n) || []; + // return res[0].toFixed(2) + res[1].unit; + // }; - prettyTime(n) { - const res = getUnit(UNITS_TIME, n) || []; - return res[0].toFixed(0) + ' ' + res[1].name; - }; + // prettyTime(n) { + // const res = getUnit(UNITS_TIME, n) || []; + // return res[0].toFixed(0) + ' ' + res[1].name; + // }; prettyLevel(level) { switch (level.toLowerCase().trim()) { @@ -142,16 +152,16 @@ class HELPER { readStdin(cb) { const stdin = process.stdin; - var bufs: Array = []; + let bufs: Array = []; console.log('NOTE: to finish the input, press ' + - (file.isWindows() ? ' and ' : '')); + (storageUtils.isWindows() ? ' and ' : '')); stdin.on('readable', function () { const data = stdin.read(); if (data) { // windows doesn't treat ctrl-D as EOF - if (file.isWindows() && data.toString() === '\x04\r\n') { + if (storageUtils.isWindows() && data.toString() === '\x04\r\n') { stdin.emit('end'); } else { bufs.push(data); @@ -194,26 +204,26 @@ class HELPER { }; base_argv() { - var base = { + let base = { all_base_data: {}, positional_index: 0, positional_key: {}, option: function (key, value) { - this.all_base_data[key] = value.default - this.all_base_data[value.alias] = value.default - this[key] = value - return this + this.all_base_data[key] = value.default; + this.all_base_data[value.alias] = value.default; + this[key] = value; + return this; }, positional: function (key, value) { - this.positional_key[this.positional_index] = key + this.positional_key[this.positional_index] = key; this.positional_index = this.positional_index + 1; - this.all_base_data[key] = value.default - this.all_base_data[value.alias] = value.default - this[key] = value - return this + this.all_base_data[key] = value.default; + this.all_base_data[value.alias] = value.default; + this[key] = value; + return this; }, set_opt(key, temp_val?) { - var cfg = this[key] + let cfg = this[key]; if (cfg) { if (cfg.type == "boolean") { this.all_base_data[key] = true; @@ -234,8 +244,8 @@ class HELPER { return false; }, set_posi(value, index) { - var cfg_key = this.positional_key[index] - var cfg = this[cfg_key] + let cfg_key = this.positional_key[index]; + let cfg = this[cfg_key]; if (cfg) { this.all_base_data[cfg_key] = value; if (cfg.alias) { @@ -244,11 +254,11 @@ class HELPER { } }, process_argv(argv) { - var all_posi = 0 + let all_posi = 0; for (let index = 3; index < argv.length; index++) { - var con = argv[index] + let con = argv[index]; if (con[0] == '-' && con[1] == '-') { - this.set_opt(con.substring(2)) + this.set_opt(con.substring(2)); } else if (con[0] == '-') { for (let con_index = 1; con_index < con.length; con_index++) { @@ -263,9 +273,9 @@ class HELPER { } }, get_result: function () { - return this.all_base_data + return this.all_base_data; } - } + }; return base; } } diff --git a/src/vsc-leetcode-cli/new_lib/log.ts b/src/childProcessCall/log.ts similarity index 62% rename from src/vsc-leetcode-cli/new_lib/log.ts rename to src/childProcessCall/log.ts index 7db468a..37bea8d 100644 --- a/src/vsc-leetcode-cli/new_lib/log.ts +++ b/src/childProcessCall/log.ts @@ -1,14 +1,24 @@ -var _ = require('underscore'); +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/log.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +let _ = require('underscore'); class LOG { - output = _.bind(console.log, console) - level + output = _.bind(console.log, console); + level; levels = new Map([ ['INFO', { value: 2 }], ['WARN', { value: 3 }], ['ERROR', { value: 4 }], - ]) + ]); setLevel(name) { this.level = this.levels.get(name) || this.levels.get('INFO'); }; @@ -31,19 +41,19 @@ class LOG { }; info(...rest: any[]) { - const args = rest //Array.from(arguments); + const args = rest; //Array.from(arguments); let s = args.map(x => x.toString()).join(' '); this.output(s); }; warn(...rest: any[]) { - const args = rest //Array.from(arguments); + const args = rest; //Array.from(arguments); args.unshift('[' + "warn" + ']'); let s = args.map(x => x.toString()).join(' '); this.output(s); }; error(...rest: any[]) { - const args = rest //Array.from(arguments); + const args = rest; //Array.from(arguments); args.unshift('[' + "error" + ']'); let s = args.map(x => x.toString()).join(' '); diff --git a/src/childProcessCall/my_plugin_base.ts b/src/childProcessCall/my_plugin_base.ts new file mode 100644 index 0000000..7e97349 --- /dev/null +++ b/src/childProcessCall/my_plugin_base.ts @@ -0,0 +1,200 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/my_plugin_base.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + +let underscore = require('underscore'); + +import { config as out_config } from "./config"; +import { storageUtils } from "./storageUtils"; +// import { log } from "./log"; +import { helper } from "./helper"; + +export class MyPluginBase { + id; + name; + ver; + desc; + enabled; + deleted; + builtin; + deps; + next; + plugins: Array = []; + installed: Array = []; + head; // 插件头 是core + config; + constructor() { + } + + public save() { + const stats = storageUtils.getCache(helper.KEYS.plugins) || {}; + + if (this.deleted) delete stats[this.name]; + else stats[this.name] = this.enabled; + + storageUtils.setCache(helper.KEYS.plugins, stats); + }; + + public init() { + this.config = out_config.plugins[this.name] || {}; + this.next = null; + }; + + public base_init(head?) { + head = head || require('./core').corePlugin; + const stats = storageUtils.getCache(helper.KEYS.plugins) || {}; + let file_plugin: Array = storageUtils.listCodeDir('plugins'); + this.installed = []; + for (let f of file_plugin) { + const p = f.data; + if (!p) continue; + p.file = f.file; + p.enabled = stats[p.name]; + if (!(p.name in stats)) { + if (p.builtin) { + p.enabled = true; + } else { + p.enabled = false; + } + } + this.installed.push(p); + } + // 根据id大小排序, 大的前面 + this.installed = underscore.sortBy(this.installed, x => -x.id); + // 从小的开始init + for (let i = this.installed.length - 1; i >= 0; --i) { + const p = this.installed[i]; + if (p.enabled) { + p.init(); + } + } + // 连成链表状 + this.plugins = this.installed.filter(x => x.enabled); + let last = head; + for (let p of this.plugins) { + last.setNext(p); + last = p; + } + return true; + }; + + public setNext(next) { + Object.setPrototypeOf(this, next); + this.next = next; + }; + public save_all() { + for (let p of this.plugins) { + p.save(); + } + }; + + public getProblems(Translate: boolean, cb) { + this.next.getProblems(Translate, cb); + } + public getQuestionOfToday(cb) { + this.next.getQuestionOfToday(cb); + } + + public getRatingOnline(cb) { + this.next.getRatingOnline(cb); + } + + public getTestApi(username, cb) { + this.next.getTestApi(username, cb); + } + public getUserContestP(username, cb) { + this.next.getUserContestP(username, cb); + } + public getProblemsTitle(cb) { + this.next.getProblemsTitle(cb); + } + public createSession(a, cb) { + this.next.createSession(a, cb); + } + public getSessions(cb) { + this.next.getSessions(cb); + } + public activateSession(s, cb) { + this.next.activateSession(s, cb); + + } + public deleteSession(s, cb) { + this.next.deleteSession(s, cb); + + } + public updateProblem(a, b) { + this.next.updateProblem(a, b); + + } + public getSubmissions(s, cb) { + this.next.getSubmissions(s, cb); + + } + public getSubmission(s, cb) { + this.next.getSubmission(s, cb); + + } + public submitProblem(s, cb) { + this.next.submitProblem(s, cb); + + } + public testProblem(s, cb) { + this.next.testProblem(s, cb); + + } + public login(user, cb) { + this.next.login(user, cb); + + } + public logout(user, cb) { + this.next.logout(user, cb); + + } + public githubLogin(user, cb) { + this.next.githubLogin(user, cb); + + } + public linkedinLogin(user, cb) { + this.next.linkedinLogin(user, cb); + + } + public cookieLogin(user, cb) { + this.next.cookieLogin(user, cb); + } + public filterProblems(opts, cb) { + this.next.filterProblems(opts, cb); + } + + public getProblem(keyword, needTranslation, cb) { + this.next.getProblem(keyword, needTranslation, cb); + } + + public starProblem(problem, starred, cb) { + this.next.starProblem(problem, starred, cb); + } + public exportProblem(problem, opts) { + this.next.exportProblem(problem, opts); + } + + public getTodayQuestion(cb) { + this.next.getTodayQuestion(cb); + } + + public getQueryZ(username, cb) { + this.next.getQueryZ(username, cb); + } + + public getUserContest(username, cb) { + this.next.getUserContest(username, cb); + } +} + + + +export const myPluginBase: MyPluginBase = new MyPluginBase(); diff --git a/src/vsc-leetcode-cli/new_lib/plugins/cache.ts b/src/childProcessCall/plugins/cache.ts similarity index 55% rename from src/vsc-leetcode-cli/new_lib/plugins/cache.ts rename to src/childProcessCall/plugins/cache.ts index c22f216..e94fbf9 100644 --- a/src/vsc-leetcode-cli/new_lib/plugins/cache.ts +++ b/src/childProcessCall/plugins/cache.ts @@ -1,56 +1,86 @@ +/* + * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/plugins/cache.ts + * Path: https://github.com/ccagml/vscode-leetcode-problem-rating + * Created Date: Thursday, October 27th 2022, 7:43:29 pm + * Author: ccagml + * + * Copyright (c) 2022 ccagml . All rights reserved. + */ + + import { MyPluginBase } from "../my_plugin_base"; -var underscore = require('underscore'); +let underscore = require('underscore'); -import { cache } from "../cache"; +import { storageUtils } from "../storageUtils"; import { helper } from "../helper"; // import { log } from "../log"; import { session } from "../session"; -// const plugin = new Plugin(50, 'cache', '', 'Plugin to provide local cache.'); + class CachePlugin extends MyPluginBase { - id = 50 - name = 'cache' + id = 50; + name = 'cache'; builtin = true; constructor() { - super() + super(); } clearCacheIfTchanged = (needTranslation) => { - const translationConfig = cache.get(helper.KEYS.translation); + const translationConfig = storageUtils.getCache(helper.KEYS.translation); if (!translationConfig || translationConfig['useEndpointTranslation'] != needTranslation) { - cache.deleteAll(); - cache.set(helper.KEYS.translation, { useEndpointTranslation: needTranslation }); - + storageUtils.deleteAllCache(); + storageUtils.setCache(helper.KEYS.translation, { useEndpointTranslation: needTranslation }); } - } + }; public getProblems = (needTranslation, cb) => { this.clearCacheIfTchanged(needTranslation); - const problems = cache.get(helper.KEYS.problems); + const problems = storageUtils.getCache(helper.KEYS.problems); if (problems) { - return cb(null, problems); } this.next.getProblems(needTranslation, function (e, problems) { if (e) return cb(e); - cache.set(helper.KEYS.problems, problems); + storageUtils.setCache(helper.KEYS.problems, problems); return cb(null, problems); }); }; + /** + * getRatingOnline + */ + public getRatingOnline = (cb) => { + const cacheRantingData = storageUtils.getCache(helper.KEYS.ranting_path); + if (cacheRantingData) { + return cb(null, cacheRantingData); + } + this.next.getRatingOnline(function (e, ratingData) { + if (e) return cb(e); + let ratingObj; + try { + ratingObj = JSON.parse(ratingData); + } catch (error) { + return cb("JSON.parse(ratingData) error"); + } + storageUtils.setCache(helper.KEYS.ranting_path, ratingObj); + return cb(null, ratingObj); + }); + }; + + public getProblem = (problem, needTranslation, cb) => { this.clearCacheIfTchanged(needTranslation); const k = helper.KEYS.problem(problem); - const _problem = cache.get(k); - var that = this; + const _problem = storageUtils.getCache(k); + let that = this; if (_problem) { if (!_problem.desc.includes('
')) {
-
+                //
             } else if (!['likes', 'dislikes'].every(p => p in _problem)) {
-
+                //
             } else {
 
                 underscore.extendOwn(problem, _problem);
@@ -66,22 +96,19 @@ class CachePlugin extends MyPluginBase {
     };
 
     saveProblem = (problem) => {
-        // it would be better to leave specific problem cache being user
-        // independent, thus try to reuse existing cache as much as possible
-        // after changing user.
         const _problem = underscore.omit(problem, ['locked', 'state', 'starred']);
-        return cache.set(helper.KEYS.problem(problem), _problem);
+        return storageUtils.setCache(helper.KEYS.problem(problem), _problem);
     };
 
     updateProblem = (problem, kv) => {
-        const problems = cache.get(helper.KEYS.problems);
+        const problems = storageUtils.getCache(helper.KEYS.problems);
         if (!problems) return false;
 
         const _problem = problems.find(x => x.id === problem.id);
         if (!_problem) return false;
 
         underscore.extend(_problem, kv);
-        return cache.set(helper.KEYS.problems, problems);
+        return storageUtils.setCache(helper.KEYS.problems, problems);
     };
 
     login = (user, cb) => {
diff --git a/src/vsc-leetcode-cli/new_lib/plugins/leetcode.cn.ts b/src/childProcessCall/plugins/leetcode.cn.ts
similarity index 74%
rename from src/vsc-leetcode-cli/new_lib/plugins/leetcode.cn.ts
rename to src/childProcessCall/plugins/leetcode.cn.ts
index 7682fbf..1137db9 100644
--- a/src/vsc-leetcode-cli/new_lib/plugins/leetcode.cn.ts
+++ b/src/childProcessCall/plugins/leetcode.cn.ts
@@ -1,26 +1,34 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/plugins/leetcode.cn.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
 
 import { MyPluginBase } from "../my_plugin_base";
 
-var request = require('request');
+let request = require('request');
 
 import { config } from "../config";
 
 import { session } from "../session";
 
 class LeetCodeCn extends MyPluginBase {
-  id = 15
-  name = 'leetcode.cn'
+  id = 15;
+  name = 'leetcode.cn';
   builtin = true;
   constructor() {
-    super()
+    super();
   }
   init() {
-    config.fix_cn()
+    config.fix_cn();
   };
 
   getProblems = (needTranslation, cb) => {
-    var that = this;
+    let that = this;
     this.next.getProblems(needTranslation, function (e, problems) {
       if (e) return cb(e);
 
@@ -120,12 +128,12 @@ class LeetCodeCn extends MyPluginBase {
 
       e = checkError(e, resp, 200);
       if (e) return cb(e);
-      var result: any = {}
-      result.titleSlug = body.data.todayRecord[0].question.titleSlug
-      result.questionId = body.data.todayRecord[0].question.questionId
-      result.fid = body.data.todayRecord[0].question.questionFrontendId
-      result.date = body.data.todayRecord[0].data
-      result.userStatus = body.data.todayRecord[0].userStatus
+      let result: any = {};
+      result.titleSlug = body.data.todayRecord[0].question.titleSlug;
+      result.questionId = body.data.todayRecord[0].question.questionId;
+      result.fid = body.data.todayRecord[0].question.questionFrontendId;
+      result.date = body.data.todayRecord[0].data;
+      result.userStatus = body.data.todayRecord[0].userStatus;
       return cb(null, result);
     });
   };
@@ -179,59 +187,26 @@ class LeetCodeCn extends MyPluginBase {
     });
   };
 
-  getTestApi = (value, cb) => {
 
-    const opts = makeOpts(config.sys.urls.graphql);
-    opts.headers.Origin = config.sys.urls.base;
-
-    const value_array = value.split("-")
-
-    opts.json = true;
-    opts.body = {
-      variables: {
-        categorySlug: "",
-        skip: value_array[0],
-        limit: value_array[1],
-        filters: {},
-      },
-      query: [
-        '    query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {',
-        '      problemsetQuestionList(',
-        '        categorySlug: $categorySlug',
-        '        limit: $limit',
-        '        skip: $skip',
-        '        filters: $filters',
-        '      ) {',
-        '        hasMore',
-        '        total',
-        '        questions {',
-        '          frontendQuestionId',
-        '          topicTags {',
-        '            slug',
-        '          }',
-        '        }',
-        '       }',
-        '  }',
-      ].join('\n'),
-    };
-
-
-    request.post(opts, function (e, resp, body) {
-
-      e = checkError(e, resp, 200);
-      if (e) return cb(e);
-      let result = {}
-      body.data.problemsetQuestionList.questions.forEach(element => {
-        result[element.frontendQuestionId] = {
-          topicTags: element.topicTags.map(function (p) { return p.slug; }),
-          CompanyTags: element.extra.topCompanyTags.map(function (p) { return p.slug; }),
-        }
-      })
-      return cb(null, result);
+  getRatingOnline = (cb) => {
+    const _request = request.defaults({ jar: true });
+    _request("https://zerotrac.github.io/leetcode_problem_rating/data.json", function (error, _, body) {
+      // console.log(error);
+      // console.log(info);
+      cb(error, body);
     });
   };
 
 
+  getTestApi = (value, _) => {
+    const _request = request.defaults({ jar: true });
+    _request("https://zerotrac.github.io/leetcode_problem_rating/data.json", function (error, info, body) {
+      console.log(error);
+      console.log(info);
+      let a = body;
+      console.log(a, value);
+    });
+  };
 }
 
 
@@ -243,7 +218,7 @@ function signOpts(opts, user) {
 }
 
 function makeOpts(url) {
-  var opts: any = {};
+  let opts: any = {};
   opts.url = url;
   opts.headers = {};
 
diff --git a/src/vsc-leetcode-cli/new_lib/plugins/leetcode.ts b/src/childProcessCall/plugins/leetcode.ts
similarity index 95%
rename from src/vsc-leetcode-cli/new_lib/plugins/leetcode.ts
rename to src/childProcessCall/plugins/leetcode.ts
index b4de85a..bfaa5d9 100644
--- a/src/vsc-leetcode-cli/new_lib/plugins/leetcode.ts
+++ b/src/childProcessCall/plugins/leetcode.ts
@@ -1,24 +1,34 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/plugins/leetcode.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-var util = require('util');
 
-var underscore = require('underscore');
-var request = require('request');
-var prompt_out = require('prompt');
+
+let util = require('util');
+
+let underscore = require('underscore');
+let request = require('request');
+let prompt_out = require('prompt');
 
 import { config } from "../config";
 import { helper } from "../helper";
-import { file } from "../file";
+import { storageUtils } from "../storageUtils";
 import { log } from "../log";
 import { session } from "../session";
 import { MyPluginBase } from "../my_plugin_base";
 import { Queue } from "../queue";
 
 class LeetCode extends MyPluginBase {
-  id = 10
-  name = 'leetcode'
+  id = 10;
+  name = 'leetcode';
   builtin = true;
   constructor() {
-    super()
+    super();
   }
 
   signOpts(opts, user) {
@@ -56,12 +66,12 @@ class LeetCode extends MyPluginBase {
   };
 
   getProblems = (_, cb) => {
-    var that = this;
+    let that = this;
     let problems = [];
     const getCategory = function (category, _, cb) {
       that.getCategoryProblems(category, function (e, _problems) {
         if (e) {
-
+          //
         } else {
 
           problems = problems.concat(_problems);
@@ -82,7 +92,7 @@ class LeetCode extends MyPluginBase {
 
     const opts = this.makeOpts(config.sys.urls.problems.replace('$category', category));
 
-    var that = this
+    let that = this;
     request(opts, function (e, resp, body) {
       e = that.checkError(e, resp, 200);
       if (e) return cb(e);
@@ -148,7 +158,7 @@ class LeetCode extends MyPluginBase {
     };
 
 
-    var that = this
+    let that = this;
     request.post(opts, function (e, resp, body) {
 
       e = that.checkError(e, resp, 200);
@@ -186,11 +196,11 @@ class LeetCode extends MyPluginBase {
       lang: problem.lang,
       question_id: parseInt(problem.id, 10),
       test_mode: false,
-      typed_code: file.codeData(problem.file)
+      typed_code: storageUtils.codeData(problem.file)
     });
 
 
-    var that = this
+    let that = this;
     request(opts, function (e, resp, body) {
 
       e = that.checkError(e, resp, 200);
@@ -212,7 +222,7 @@ class LeetCode extends MyPluginBase {
 
       return cb(null, body);
     });
-  }
+  };
 
 
   verifyResult = (task, queue, cb) => {
@@ -221,7 +231,7 @@ class LeetCode extends MyPluginBase {
     opts.url = config.sys.urls.verify.replace('$id', task.id);
 
 
-    var that = this;
+    let that = this;
     request(opts, function (e, resp, body) {
 
       e = that.checkError(e, resp, 200);
@@ -237,7 +247,7 @@ class LeetCode extends MyPluginBase {
       }
       return cb();
     });
-  }
+  };
 
   formatResult = (result) => {
     const x: any = {
@@ -281,13 +291,13 @@ class LeetCode extends MyPluginBase {
     if (x.error.length > 0) x.ok = false;
 
     return x;
-  }
+  };
 
   testProblem = (problem, cb) => {
 
     const opts = this.makeOpts(config.sys.urls.test.replace('$slug', problem.slug));
     opts.body = { data_input: problem.testcase };
-    var that = this
+    let that = this;
     this.runCode(opts, problem, function (e, task) {
       if (e) return cb(e);
 
@@ -310,7 +320,7 @@ class LeetCode extends MyPluginBase {
 
     const opts = this.makeOpts(config.sys.urls.submit.replace('$slug', problem.slug));
     opts.body = { judge_type: 'large' };
-    var that = this
+    let that = this;
     this.runCode(opts, problem, function (e, task) {
       if (e) return cb(e);
 
@@ -326,7 +336,7 @@ class LeetCode extends MyPluginBase {
 
     const opts = this.makeOpts(config.sys.urls.submissions.replace('$slug', problem.slug));
     opts.headers.Referer = config.sys.urls.problem.replace('$slug', problem.slug);
-    var that = this
+    let that = this;
     request(opts, function (e, resp, body) {
       e = that.checkError(e, resp, 200);
       if (e) return cb(e);
@@ -343,7 +353,7 @@ class LeetCode extends MyPluginBase {
   getSubmission = (submission, cb) => {
 
     const opts = this.makeOpts(config.sys.urls.submission.replace('$id', submission.id));
-    var that = this
+    let that = this;
     request(opts, function (e, resp, body) {
       e = that.checkError(e, resp, 200);
       if (e) return cb(e);
@@ -373,7 +383,7 @@ class LeetCode extends MyPluginBase {
     };
 
 
-    var that = this;
+    let that = this;
     request.post(opts, function (e, resp, _) {
 
       e = that.checkError(e, resp, 200);
@@ -387,7 +397,7 @@ class LeetCode extends MyPluginBase {
     const opts = this.makeOpts(config.sys.urls.favorites);
 
 
-    var that = this;
+    let that = this;
     request(opts, function (e, resp, body) {
 
       e = that.checkError(e, resp, 200);
@@ -399,7 +409,7 @@ class LeetCode extends MyPluginBase {
   };
 
   getUserInfo = (cb) => {
-    var that = this;
+    let that = this;
     const opts = this.makeOpts(config.sys.urls.graphql);
     opts.headers.Origin = config.sys.urls.base;
     opts.headers.Referer = config.sys.urls.base;
@@ -435,7 +445,7 @@ class LeetCode extends MyPluginBase {
     opts.body = data;
 
 
-    var that = this;
+    let that = this;
     request(opts, function (e, resp, body) {
 
       e = that.checkError(e, resp, 200);
@@ -443,7 +453,7 @@ class LeetCode extends MyPluginBase {
 
       return e ? cb(e) : cb(null, body.sessions);
     });
-  }
+  };
 
   getSessions = (cb) => {
 
@@ -470,7 +480,7 @@ class LeetCode extends MyPluginBase {
   signin = (user, cb) => {
     const isCN = config.app === 'leetcode.cn';
     const spin = isCN ? helper.spin('Signing in leetcode.cn') : helper.spin('Signing in leetcode.com');
-    var that = this;
+    let that = this;
     request(config.sys.urls.login, function (e, resp, _) {
       spin.stop();
       e = that.checkError(e, resp, 200);
@@ -504,7 +514,7 @@ class LeetCode extends MyPluginBase {
   };
 
   getUser = (user, cb) => {
-    var that = this;
+    let that = this;
     this.getFavorites(function (e, favorites) {
       if (!e) {
         const f = favorites.favorites.private_favorites.find((f) => f.name === 'Favorite');
@@ -530,7 +540,7 @@ class LeetCode extends MyPluginBase {
   };
 
   login = (user, cb) => {
-    var that = this;
+    let that = this;
     that.signin(user, function (e, user) {
       if (e) return cb(e);
       that.getUser(user, cb);
@@ -549,10 +559,10 @@ class LeetCode extends MyPluginBase {
       sessionId: reSessionResult[1],
       sessionCSRF: reCsrfResult[1],
     };
-  }
+  };
 
   requestLeetcodeAndSave = (request, leetcodeUrl, user, cb) => {
-    var that = this;
+    let that = this;
     request.get({ url: leetcodeUrl }, function (_, resp, __) {
       const redirectUri = resp.request.uri.href;
       if (redirectUri !== config.sys.urls.leetcode_redirect) {
@@ -564,7 +574,7 @@ class LeetCode extends MyPluginBase {
       session.saveUser(user);
       that.getUser(user, cb);
     });
-  }
+  };
 
   cookieLogin = (user, cb) => {
     const cookieData = this.parseCookie(user.cookie, cb);
@@ -578,7 +588,7 @@ class LeetCode extends MyPluginBase {
     const urls = config.sys.urls;
     const leetcodeUrl = urls.github_login;
     const _request = request.defaults({ jar: true });
-    var that = this;
+    let that = this;
     _request(urls.github_login_request, function (_, __, body) {
 
       const authenticityToken = body.match(/name="authenticity_token" value="(.*?)"/);
@@ -671,7 +681,7 @@ class LeetCode extends MyPluginBase {
         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
       }
     });
-    var that = this;
+    let that = this;
     _request(urls.linkedin_login_request, function (_, resp, body) {
 
       if (resp.statusCode !== 200) {
diff --git a/src/vsc-leetcode-cli/new_lib/plugins/retry.ts b/src/childProcessCall/plugins/retry.ts
similarity index 83%
rename from src/vsc-leetcode-cli/new_lib/plugins/retry.ts
rename to src/childProcessCall/plugins/retry.ts
index 2c2add7..8ca06fa 100644
--- a/src/vsc-leetcode-cli/new_lib/plugins/retry.ts
+++ b/src/childProcessCall/plugins/retry.ts
@@ -1,13 +1,22 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/plugins/retry.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
 
 import { MyPluginBase } from "../my_plugin_base";
 import { config } from "../config";
 import { session } from "../session";
 
-// var plugin = new Plugin(30, 'retry', '',
-//   'Plugin to retry last failed request if autologin.enable is on.');
+
 class RetryPlugin extends MyPluginBase {
-  id = 30
-  name = 'retry'
+  id = 30;
+  name = 'retry';
   builtin = true;
   count = {};
 
@@ -15,7 +24,7 @@ class RetryPlugin extends MyPluginBase {
     return config.autologin.enable &&
       (e === session.errors.EXPIRED) &&
       (this.count[name] || 0) < config.autologin.retry;
-  }
+  };
   init = () => {
     const names = [
       'activateSession',
@@ -31,7 +40,7 @@ class RetryPlugin extends MyPluginBase {
       'submitProblem',
       'starProblem'
     ];
-    var that = this;
+    let that = this;
     for (let name of names) {
       that.count[name] = 0;
       this[name] = function () {
@@ -73,9 +82,9 @@ class RetryPlugin extends MyPluginBase {
 
     this.next.login(user, function (e) {
       if (e) {
-
+        //
       } else {
-
+        //
       }
       return cb();
     });
diff --git a/src/vsc-leetcode-cli/new_lib/plugins/solution.discuss.ts b/src/childProcessCall/plugins/solution.discuss.ts
similarity index 78%
rename from src/vsc-leetcode-cli/new_lib/plugins/solution.discuss.ts
rename to src/childProcessCall/plugins/solution.discuss.ts
index 8d5cadc..ac24a4f 100644
--- a/src/vsc-leetcode-cli/new_lib/plugins/solution.discuss.ts
+++ b/src/childProcessCall/plugins/solution.discuss.ts
@@ -1,25 +1,28 @@
-var request = require('request');
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/plugins/solution.discuss.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
+let request = require('request');
 
 
 import { log } from "../log";
 import { session } from "../session";
 import { MyPluginBase } from "../my_plugin_base";
 
-//
-// [Usage]
-//
-// https://github.com/skygragon/leetcode-cli-plugins/blob/master/docs/solution.discuss.md
-//
-// var plugin = new Plugin(200, 'solution.discuss', '',
-//   'Plugin to fetch most voted solution in discussions.');
 
 
 class SolutionDiscuss extends MyPluginBase {
-  id = 200
-  name = "solution.discuss"
+  id = 200;
+  name = "solution.discuss";
   builtin = true;
   constructor() {
-    super()
+    super();
   }
 
 
@@ -28,13 +31,13 @@ class SolutionDiscuss extends MyPluginBase {
     this.next.getProblem(problem, needTranslation, function (e, problem) {
       if (e || !session.argv.solution) return cb(e, problem);
 
-      var lang = session.argv.lang;
+      let lang = session.argv.lang;
       getSolution(problem, lang, function (e, solution) {
         if (e) return cb(e);
         if (!solution) return log.error('Solution not found for ' + lang);
 
-        var link = URL_DISCUSS.replace('$slug', problem.slug).replace('$id', solution.id);
-        var content = solution.post.content.replace(/\\n/g, '\n').replace(/\\t/g, '\t');
+        let link = URL_DISCUSS.replace('$slug', problem.slug).replace('$id', solution.id);
+        let content = solution.post.content.replace(/\\n/g, '\n').replace(/\\t/g, '\t');
 
         log.info();
         log.info(problem.name);
@@ -54,15 +57,15 @@ class SolutionDiscuss extends MyPluginBase {
 
 }
 
-var URL_DISCUSSES = 'https://leetcode.com/graphql';
-var URL_DISCUSS = 'https://leetcode.com/problems/$slug/discuss/$id';
+let URL_DISCUSSES = 'https://leetcode.com/graphql';
+let URL_DISCUSS = 'https://leetcode.com/problems/$slug/discuss/$id';
 
 function getSolution(problem, lang, cb) {
   if (!problem) return cb();
 
   if (lang === 'python3') lang = 'python';
 
-  var opts = {
+  let opts = {
     url: URL_DISCUSSES,
     json: true,
     body: {
diff --git a/src/vsc-leetcode-cli/new_lib/queue.ts b/src/childProcessCall/queue.ts
similarity index 72%
rename from src/vsc-leetcode-cli/new_lib/queue.ts
rename to src/childProcessCall/queue.ts
index 1e2f781..1db7165 100644
--- a/src/vsc-leetcode-cli/new_lib/queue.ts
+++ b/src/childProcessCall/queue.ts
@@ -1,15 +1,25 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/queue.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-var underscore = require('underscore');
+
+
+let underscore = require('underscore');
 
 import { config } from "./config";
 
 export class Queue {
-  tasks
-  ctx
-  onTask
-  error
-  concurrency
-  onDone
+  tasks;
+  ctx;
+  onTask;
+  error;
+  concurrency;
+  onDone;
   constructor(tasks, ctx, onTask) {
     this.tasks = underscore.clone(tasks) || [];
     this.ctx = ctx || {};
diff --git a/src/vsc-leetcode-cli/new_lib/session.ts b/src/childProcessCall/session.ts
similarity index 59%
rename from src/vsc-leetcode-cli/new_lib/session.ts
rename to src/childProcessCall/session.ts
index 164a220..d1737c3 100644
--- a/src/vsc-leetcode-cli/new_lib/session.ts
+++ b/src/childProcessCall/session.ts
@@ -1,9 +1,18 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/session.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-var moment_out = require('moment');
-var underscore = require('underscore');
 
+let moment_out = require('moment');
+let underscore = require('underscore');
 
-import { cache } from "./cache";
+
+import { storageUtils } from "./storageUtils";
 import { config } from "./config";
 import { helper } from "./helper";
 
@@ -14,31 +23,26 @@ class Session {
       statusCode: -1
     }
   };
-  argv: any = {
-
-  }
+  argv: any = {};
   constructor() {
-
   }
-
-
   public getUser = function () {
-    return cache.get(helper.KEYS.user);
+    return storageUtils.getCache(helper.KEYS.user);
   };
 
   public saveUser = function (user) {
     // when auto login enabled, have to save password to re-login later
     // otherwise don't dump password for the sake of security.
     const _user = underscore.omit(user, config.autologin.enable ? [] : ['pass']);
-    cache.set(helper.KEYS.user, _user);
+    storageUtils.setCache(helper.KEYS.user, _user);
   };
 
   public deleteUser = function () {
-    cache.del(helper.KEYS.user);
+    storageUtils.delCache(helper.KEYS.user);
   };
 
   public deleteCodingSession = function () {
-    cache.del(helper.KEYS.problems);
+    storageUtils.delCache(helper.KEYS.problems);
   };
 
   public isLogin() {
@@ -48,7 +52,7 @@ class Session {
   public updateStat = function (k, v) {
     // TODO: use other storage if too many stat data
     const today = moment_out().format('YYYY-MM-DD');
-    const stats = cache.get(helper.KEYS.stat) || {};
+    const stats = storageUtils.getCache(helper.KEYS.stat) || {};
     const stat = stats[today] = stats[today] || {};
 
     if (k.endsWith('.set')) {
@@ -58,10 +62,7 @@ class Session {
     } else {
       stat[k] = (stat[k] || 0) + v;
     }
-
-    cache.set(helper.KEYS.stat, stats);
+    storageUtils.setCache(helper.KEYS.stat, stats);
   };
-
-
 }
 export const session: Session = new Session();
diff --git a/src/childProcessCall/storageUtils.ts b/src/childProcessCall/storageUtils.ts
new file mode 100644
index 0000000..aae8e5e
--- /dev/null
+++ b/src/childProcessCall/storageUtils.ts
@@ -0,0 +1,242 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/childProcessCall/storageUtils.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
+let fs = require('fs');
+let os = require('os');
+let path = require('path');
+
+let _ = require('underscore');
+let mkdirp = require('mkdirp');
+
+export interface IMETA {
+  id: string
+  fid: string
+  lang: string
+}
+
+//Object.assign({}, defaultMETA, {})
+export const defaultMETA: IMETA = {
+  id: "",
+  fid: "",
+  lang: "",
+};
+
+class StorageUtils {
+  public init() {
+    _.templateSettings = {
+      evaluate: /\{\{(.+?)\}\}/g,
+      interpolate: /\$\{(.+?)\}/g
+    };
+    this.mkdir(this.homeDir());
+  };
+
+  public isWindows() {
+    return process.platform === 'win32';
+  };
+
+  public userHomeDir() {
+    return process.env.HOME || process.env.USERPROFILE;
+  };
+
+  public homeDir() {
+    return path.join(this.userHomeDir(), '.lcpr');
+  };
+
+  public appDir() {
+    const config = require('./config');
+    return path.join(this.homeDir(), config.app || 'leetcode');
+  };
+
+  // 缓存目录
+  public cacheDir() {
+    return path.join(this.appDir(), 'cache');
+  };
+
+  // 代码目录
+  public codeDir(dir) {
+    return path.join(__dirname, dir || '');
+  };
+
+  // 缓存目录文件
+  public cacheFile(k) {
+    return path.join(this.cacheDir(), k + '.json');
+  };
+
+  // public configFile() {
+  //   return path.join(this.homeDir(), 'config.json');
+  // };
+
+  // 插件代码目录
+  public listCodeDir(dir) {
+    dir = this.codeDir(dir);
+    let that = this;
+    return this.list(dir).map(function (f) {
+      const fullpath = path.join(dir, f);
+      const ext = path.extname(f);
+      const name = path.basename(f, ext);
+
+      let data = null;
+      switch (ext) {
+        case '.js': data = require(fullpath).pluginObj; break;
+        case '.json': data = JSON.parse(that.getData(fullpath)); break;
+      }
+      return { name: name, data: data, file: f };
+    });
+  };
+
+
+  public initCache() {
+    this.mkdir(this.cacheDir());
+  };
+  public deleteAllCache() {
+    this.listCache().forEach(value => {
+      this.delCache(value.name);
+    });
+  };
+
+  public getCache(k) {
+    const fullpath = this.cacheFile(k);
+    if (!this.exist(fullpath)) return null;
+
+    return JSON.parse(this.getData(fullpath));
+  };
+
+  public setCache(k, v) {
+    const fullpath = this.cacheFile(k);
+    this.write(fullpath, JSON.stringify(v));
+    return true;
+  };
+
+  public delCache(k) {
+    const fullpath = this.cacheFile(k);
+    if (!this.exist(fullpath)) return false;
+
+    this.rm(fullpath);
+    return true;
+  };
+
+  public listCache(): Array {
+    let that = this;
+    return this.list(this.cacheDir())
+      .filter(x => path.extname(x) === '.json')
+      .map(function (filename) {
+        const k = path.basename(filename, '.json');
+        const stat = that.stat(that.cacheFile(k));
+        return {
+          name: k,
+          size: stat.size,
+          mtime: stat.mtime
+        };
+      });
+  };
+
+  public mkdir(fullpath) {
+    if (fs.existsSync(fullpath)) return;
+    mkdirp.sync(fullpath);
+  };
+
+  public exist(fullpath) {
+    return fs.existsSync(fullpath);
+  };
+
+  public rm(fullpath) {
+    return fs.unlinkSync(fullpath);
+  };
+
+  public mv(src, dst) {
+    return fs.renameSync(src, dst);
+  };
+
+  public list(dir) {
+    return fs.readdirSync(dir);
+  };
+
+  public stat(fullpath) {
+    return fs.statSync(fullpath);
+  };
+
+  public write(fullpath, data) {
+    return fs.writeFileSync(fullpath, data);
+  };
+
+  public name(fullpath) {
+    return path.basename(fullpath, path.extname(fullpath));
+  };
+
+  public getData(fullpath) {
+    return fs.existsSync(fullpath) ? fs.readFileSync(fullpath).toString() : null;
+  };
+
+  // 获取要提交测试的数据
+  public codeData(fullpath) {
+    const data = this.getData(fullpath);
+
+    if (data === null) {
+      return null;
+    }
+
+    const lines = data.split(/\r\n|\n|\r/);
+    const start = lines.findIndex(x => x.indexOf('@lc code=start') !== -1);
+    const end = lines.findIndex(x => x.indexOf('@lc code=end') !== -1);
+
+    if (start !== -1 && end !== -1 && start + 1 <= end) {
+      return lines.slice(start + 1, end).join(os.EOL);
+    }
+
+    return data;
+  };
+
+  // 加载输出模板数据
+  public render(tpl, data) {
+    const tplfile = path.join(__dirname, "..", "..", "..", "resources", "templates", tpl + '.tpl');
+    let result = _.template(this.getData(tplfile).replace(/\r\n/g, '\n'))(data);
+    if (this.isWindows()) {
+      result = result.replace(/\n/g, '\r\n');
+    } else {
+      result = result.replace(/\r\n/g, '\n');
+    }
+    return result;
+  };
+
+  public fmt(format, data) {
+    return _.template(format)(data);
+  };
+
+  // public metaByName(filename) {
+  //   const m = Object.assign({}, defaultMETA, {});
+
+  //   m.id = storageUtils.name(filename).split('.')[0];
+
+
+  //   if (filename.endsWith('.py3') || filename.endsWith('.python3.py'))
+  //     m.lang = 'python3';
+  //   else
+  //     m.lang = require('./helper').extToLang(filename);
+
+  //   return m;
+  // };
+
+  public meta(filename) {
+    const m = Object.assign({}, defaultMETA, {});
+    const line = this.getData(filename).split('\n').find(x => x.indexOf(' @lc app=') >= 0) || '';
+    // @lc app=leetcode.cn id=剑指 Offer II 116 lang=cpp
+    let id_right = line.split('id=')[1];
+    let lang_cat = id_right.split('lang=');
+    let id = lang_cat[0].trim();
+    let lang = lang_cat[1].trim();
+    m.id = id;
+    m.fid = id;
+    m.lang = lang;
+    return m;
+  };
+
+}
+
+export const storageUtils: StorageUtils = new StorageUtils();
diff --git a/src/codelens/CodeLensController.ts b/src/codelens/CodeLensController.ts
deleted file mode 100644
index b41f28f..0000000
--- a/src/codelens/CodeLensController.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import { ConfigurationChangeEvent, Disposable, languages, workspace } from "vscode";
-import { customCodeLensProvider, CustomCodeLensProvider } from "./CustomCodeLensProvider";
-
-class CodeLensController implements Disposable {
-    private internalProvider: CustomCodeLensProvider;
-    private registeredProvider: Disposable | undefined;
-    private configurationChangeListener: Disposable;
-
-    constructor() {
-        this.internalProvider = customCodeLensProvider;
-
-        this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => {
-            if (event.affectsConfiguration("leetcode.editor.shortcuts")) {
-                this.internalProvider.refresh();
-            }
-        }, this);
-
-        this.registeredProvider = languages.registerCodeLensProvider({ scheme: "file" }, this.internalProvider);
-    }
-
-    public dispose(): void {
-        if (this.registeredProvider) {
-            this.registeredProvider.dispose();
-        }
-        this.configurationChangeListener.dispose();
-    }
-}
-
-export const codeLensController: CodeLensController = new CodeLensController();
diff --git a/src/commands/cache.ts b/src/commands/cache.ts
deleted file mode 100644
index 1f6b656..0000000
--- a/src/commands/cache.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils";
-
-export async function deleteCache(): Promise {
-    try {
-        await leetCodeExecutor.deleteCache();
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to delete cache. Please open the output channel for details.", DialogType.error);
-    }
-}
diff --git a/src/commands/language.ts b/src/commands/language.ts
deleted file mode 100644
index aec9b38..0000000
--- a/src/commands/language.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import { QuickPickItem, window, workspace, WorkspaceConfiguration } from "vscode";
-import { languages } from "../shared";
-
-export async function switchDefaultLanguage(): Promise {
-    const leetCodeConfig: WorkspaceConfiguration = workspace.getConfiguration("leetcode-problem-rating");
-    const defaultLanguage: string | undefined = leetCodeConfig.get("defaultLanguage");
-    const languageItems: QuickPickItem[] = [];
-    for (const language of languages) {
-        languageItems.push({
-            label: language,
-            description: defaultLanguage === language ? "Currently used" : undefined,
-        });
-    }
-    // Put the default language at the top of the list
-    languageItems.sort((a: QuickPickItem, b: QuickPickItem) => {
-        if (a.description) {
-            return Number.MIN_SAFE_INTEGER;
-        } else if (b.description) {
-            return Number.MAX_SAFE_INTEGER;
-        }
-        return a.label.localeCompare(b.label);
-    });
-
-    const selectedItem: QuickPickItem | undefined = await window.showQuickPick(languageItems, {
-        placeHolder: "Please the default language",
-        ignoreFocusOut: true,
-    });
-
-    if (!selectedItem) {
-        return;
-    }
-
-    leetCodeConfig.update("defaultLanguage", selectedItem.label, true /* Global */);
-    window.showInformationMessage(`Successfully set the default language to ${selectedItem.label}`);
-}
diff --git a/src/commands/list.ts b/src/commands/list.ts
deleted file mode 100644
index 2ba5c36..0000000
--- a/src/commands/list.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as vscode from "vscode";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { leetCodeManager } from "../leetCodeManager";
-import { IProblem, ProblemState, RootNodeSort, UserStatus } from "../shared";
-import * as settingUtils from "../utils/settingUtils";
-import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils";
-import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider";
-import { resourcesData } from "../ResourcesData";
-
-export async function listProblems(): Promise {
-    try {
-        if (leetCodeManager.getStatus() === UserStatus.SignedOut) {
-            return [];
-        }
-        const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-        const showLocked: boolean = !!leetCodeConfig.get("showLocked");
-        const useEndpointTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-        const result: string = await leetCodeExecutor.listProblems(showLocked, useEndpointTranslation);
-        const all_problem_info = JSON.parse(result);
-        const problems: IProblem[] = [];
-        // const lines: string[] = result.split("\n");
-        // const reg: RegExp = /^(.)\s(.{1,2})\s(.)\s\[\s*(\d*)\s*\]\s*(.*)\s*(Easy|Medium|Hard)\s*\((\s*\d+\.\d+ %)\)/;
-        // const { companies, tags } = await leetCodeExecutor.getCompaniesAndTags();
-        const AllScoreData = leetCodeTreeDataProvider.getScoreData();
-        for (const p of all_problem_info) {
-            // console.log(p)
-            problems.push({
-                id: p.fid,
-                qid: p.id,
-                isFavorite: p.starred,
-                locked: p.locked,
-                state: parseProblemState(p.state),
-                name: p.name,
-                difficulty: p.level,
-                passRate: p.percent,
-                companies: p.companies || [],
-                tags: resourcesData.getTagsData(p.fid) || ["Unknown"],
-                scoreData: AllScoreData.get(p.fid),
-                isSearchResult: false,
-                input: "",
-                rootNodeSortId: RootNodeSort.ZERO,
-                todayData: undefined,
-            });
-        }
-        return problems.reverse();
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to list problems. Please open the output channel for details.", DialogType.error);
-        return [];
-    }
-}
-
-function parseProblemState(stateOutput: string): ProblemState {
-    if (!stateOutput) {
-        return ProblemState.Unknown;
-    }
-    switch (stateOutput.trim()) {
-        case "v":
-        case "✔":
-        case "√":
-        case "ac":
-            return ProblemState.AC;
-        case "X":
-        case "✘":
-        case "×":
-        case "notac":
-            return ProblemState.NotAC;
-        default:
-            return ProblemState.Unknown;
-    }
-}
diff --git a/src/commands/plugin.ts b/src/commands/plugin.ts
deleted file mode 100644
index b39efc1..0000000
--- a/src/commands/plugin.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as vscode from "vscode";
-import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { IQuickItemEx } from "../shared";
-import { Endpoint, SortingStrategy } from "../shared";
-import { DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils";
-import { deleteCache } from "./cache";
-
-export async function switchEndpoint(): Promise {
-    const isCnEnabled: boolean = getLeetCodeEndpoint() === Endpoint.LeetCodeCN;
-    const picks: Array> = [];
-    picks.push(
-        {
-            label: `${isCnEnabled ? "" : "$(check) "}LeetCode`,
-            description: "leetcode.com",
-            detail: `Enable LeetCode US`,
-            value: Endpoint.LeetCode,
-        },
-        {
-            label: `${isCnEnabled ? "$(check) " : ""}力扣`,
-            description: "leetcode.cn",
-            detail: `启用中国版 LeetCode`,
-            value: Endpoint.LeetCodeCN,
-        },
-    );
-    const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
-    if (!choice || choice.value === getLeetCodeEndpoint()) {
-        return;
-    }
-    const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-    try {
-        const endpoint: string = choice.value;
-        await leetCodeExecutor.switchEndpoint(endpoint);
-        await leetCodeConfig.update("endpoint", endpoint, true /* UserSetting */);
-        vscode.window.showInformationMessage(`Switched the endpoint to ${endpoint}`);
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to switch endpoint. Please open the output channel for details.", DialogType.error);
-    }
-
-    try {
-        await vscode.commands.executeCommand("leetcode.signout");
-        await deleteCache();
-        await promptForSignIn();
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to sign in. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-export function getLeetCodeEndpoint(): string {
-    const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-    return leetCodeConfig.get("endpoint", Endpoint.LeetCodeCN);
-}
-
-const SORT_ORDER: SortingStrategy[] = [
-    SortingStrategy.None,
-    SortingStrategy.AcceptanceRateAsc,
-    SortingStrategy.AcceptanceRateDesc,
-    SortingStrategy.ScoreAsc,
-    SortingStrategy.ScoreDesc,
-    SortingStrategy.IDDesc,
-];
-
-export async function switchSortingStrategy(): Promise {
-    const currentStrategy: SortingStrategy = getSortingStrategy();
-    const picks: Array> = [];
-    picks.push(
-        ...SORT_ORDER.map((s: SortingStrategy) => {
-            return {
-                label: `${currentStrategy === s ? "$(check)" : "    "} ${s}`,
-                value: s,
-            };
-        }),
-    );
-
-    const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
-    if (!choice || choice.value === currentStrategy) {
-        return;
-    }
-
-    const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-    await leetCodeConfig.update("problems.sortStrategy", choice.value, true);
-    await leetCodeTreeDataProvider.refresh();
-}
-
-export function getSortingStrategy(): SortingStrategy {
-    const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-    return leetCodeConfig.get("problems.sortStrategy", SortingStrategy.None);
-}
diff --git a/src/commands/session.ts b/src/commands/session.ts
deleted file mode 100644
index 2b26f26..0000000
--- a/src/commands/session.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-// import * as vscode from "vscode";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { leetCodeManager } from "../leetCodeManager";
-// import { IQuickItemEx } from "../shared";
-// import { DialogOptions, DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils";
-import { promptForSignIn } from "../utils/uiUtils";
-
-export async function getSessionList(): Promise {
-    const signInStatus: string | undefined = leetCodeManager.getUser();
-    if (!signInStatus) {
-        promptForSignIn();
-        return [];
-    }
-    const result: string = await leetCodeExecutor.listSessions();
-    const lines: string[] = result.split("\n");
-    const sessions: ISession[] = [];
-    const reg: RegExp = /(.?)\s*(\d+)\s+(.*)\s+(\d+ \(\s*\d+\.\d+ %\))\s+(\d+ \(\s*\d+\.\d+ %\))/;
-    for (const line of lines) {
-        const match: RegExpMatchArray | null = line.match(reg);
-        if (match && match.length === 6) {
-            sessions.push({
-                active: !!(match[1].trim()),
-                id: match[2].trim(),
-                name: match[3].trim(),
-                acQuestions: match[4].trim(),
-                acSubmits: match[5].trim(),
-            });
-        }
-    }
-    return sessions;
-}
-
-export async function manageSessions(): Promise {
-    // const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(parseSessionsToPicks(true /* includeOperation */));
-    // if (!choice || choice.description === "Active") {
-    //     return;
-    // }
-    // if (choice.value === ":createSession") {
-    //     await createSession();
-    //     return;
-    // }
-    // if (choice.value === ":deleteSession") {
-    //     await deleteSession();
-    //     return;
-    // }
-    // try {
-    //     await leetCodeExecutor.enableSession((choice.value as ISession).id);
-    //     vscode.window.showInformationMessage(`Successfully switched to session '${choice.label}'.`);
-    //     await vscode.commands.executeCommand("leetcode.refreshExplorer");
-    // } catch (error) {
-    //     await promptForOpenOutputChannel("Failed to switch session. Please open the output channel for details.", DialogType.error);
-    // }
-}
-
-// async function parseSessionsToPicks(includeOperations: boolean = false): Promise>> {
-//     return new Promise(async (resolve: (res: Array>) => void): Promise => {
-//         try {
-//             const sessions: ISession[] = await getSessionList();
-//             const picks: Array> = sessions.map((s: ISession) => Object.assign({}, {
-//                 label: `${s.active ? "$(check) " : ""}${s.name}`,
-//                 description: s.active ? "Active" : "",
-//                 detail: `AC Questions: ${s.acQuestions}, AC Submits: ${s.acSubmits}`,
-//                 value: s,
-//             }));
-
-//             if (includeOperations) {
-//                 picks.push(...parseSessionManagementOperations());
-//             }
-//             resolve(picks);
-//         } catch (error) {
-//             return await promptForOpenOutputChannel("Failed to list sessions. Please open the output channel for details.", DialogType.error);
-//         }
-//     });
-// }
-
-// function parseSessionManagementOperations(): Array> {
-//     return [{
-//         label: "$(plus) Create a session",
-//         description: "",
-//         detail: "Click this item to create a session",
-//         value: ":createSession",
-//     }, {
-//         label: "$(trashcan) Delete a session",
-//         description: "",
-//         detail: "Click this item to DELETE a session",
-//         value: ":deleteSession",
-//     }];
-// }
-
-// async function createSession(): Promise {
-//     const session: string | undefined = await vscode.window.showInputBox({
-//         prompt: "Enter the new session name.",
-//         validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "Session name must not be empty",
-//     });
-//     if (!session) {
-//         return;
-//     }
-//     try {
-//         await leetCodeExecutor.createSession(session);
-//         vscode.window.showInformationMessage("New session created, you can switch to it by clicking the status bar.");
-//     } catch (error) {
-//         await promptForOpenOutputChannel("Failed to create session. Please open the output channel for details.", DialogType.error);
-//     }
-// }
-
-// async function deleteSession(): Promise {
-//     const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
-//         parseSessionsToPicks(false /* includeOperation */),
-//         { placeHolder: "Please select the session you want to delete" },
-//     );
-//     if (!choice) {
-//         return;
-//     }
-
-//     const selectedSession: ISession = choice.value as ISession;
-//     if (selectedSession.active) {
-//         vscode.window.showInformationMessage("Cannot delete an active session.");
-//         return;
-//     }
-
-//     const action: vscode.MessageItem | undefined = await vscode.window.showWarningMessage(
-//         `This operation cannot be reverted. Are you sure to delete the session: ${selectedSession.name}?`,
-//         DialogOptions.yes,
-//         DialogOptions.no,
-//     );
-//     if (action !== DialogOptions.yes) {
-//         return;
-//     }
-
-//     const confirm: string | undefined = await vscode.window.showInputBox({
-//         prompt: "Enter 'yes' to confirm deleting the session",
-//         validateInput: (value: string): string => {
-//             if (value === "yes") {
-//                 return "";
-//             } else {
-//                 return "Enter 'yes' to confirm";
-//             }
-//         },
-//     });
-
-//     if (confirm === "yes") {
-//         await leetCodeExecutor.deleteSession(selectedSession.id);
-//         vscode.window.showInformationMessage("The session has been successfully deleted.");
-//     }
-// }
-
-export interface ISession {
-    active: boolean;
-    id: string;
-    name: string;
-    acQuestions: string;
-    acSubmits: string;
-}
diff --git a/src/commands/show.ts b/src/commands/show.ts
deleted file mode 100644
index 5e127d8..0000000
--- a/src/commands/show.ts
+++ /dev/null
@@ -1,497 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as _ from "lodash";
-import * as path from "path";
-import * as unescapeJS from "unescape-js";
-import * as vscode from "vscode";
-import { explorerNodeManager } from "../explorer/explorerNodeManager";
-import { LeetCodeNode } from "../explorer/LeetCodeNode";
-import { leetCodeChannel } from "../leetCodeChannel";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { leetCodeManager } from "../leetCodeManager";
-import { IProblem, IQuickItemEx, languages, ProblemState, SearchNode, SearchSetType, userContestRankingObj, userContestRanKingBase } from "../shared";
-import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider";
-import { genFileExt, genFileName, getNodeIdFromFile } from "../utils/problemUtils";
-import * as settingUtils from "../utils/settingUtils";
-import { IDescriptionConfiguration } from "../utils/settingUtils";
-import { DialogOptions, DialogType, openSettingsEditor, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/uiUtils";
-import { getActiveFilePath, selectWorkspaceFolder } from "../utils/workspaceUtils";
-import * as wsl from "../utils/wslUtils";
-import { leetCodePreviewProvider } from "../webview/leetCodePreviewProvider";
-import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider";
-import { getPickOneByRankRangeMin, getPickOneByRankRangeMax } from "../utils/settingUtils";
-import * as list from "./list";
-import { getLeetCodeEndpoint } from "./plugin";
-
-export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: boolean = false): Promise {
-    let node: IProblem;
-    if (input instanceof vscode.Uri) {
-        const activeFilePath: string = input.fsPath;
-        const id: string = await getNodeIdFromFile(activeFilePath);
-        if (!id) {
-            vscode.window.showErrorMessage(`Failed to resolve the problem id from file: ${activeFilePath}.`);
-            return;
-        }
-        const cachedNode: IProblem | undefined = explorerNodeManager.getNodeById(id);
-        if (!cachedNode) {
-            vscode.window.showErrorMessage(`Failed to resolve the problem with id: ${id}.`);
-            return;
-        }
-        node = cachedNode;
-        // Move the preview page aside if it's triggered from Code Lens
-        isSideMode = true;
-    } else {
-        node = input;
-    }
-    const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-    const descString: string = await leetCodeExecutor.getDescription(node.qid, needTranslation);
-    leetCodePreviewProvider.show(descString, node, isSideMode);
-}
-
-export async function deleteAllCache(): Promise {
-    await leetCodeManager.signOut();
-    await leetCodeExecutor.removeOldCache();
-    await leetCodeExecutor.switchEndpoint(getLeetCodeEndpoint());
-    await leetCodeTreeDataProvider.refresh()
-}
-
-
-export async function pickOne(): Promise {
-    const problems: IProblem[] = await list.listProblems();
-    var randomProblem: IProblem;
-
-    const user_score = leetCodeManager.getUserContestScore()
-    if (user_score > 0) {
-
-        let min_score: number = getPickOneByRankRangeMin();
-        let max_score: number = getPickOneByRankRangeMax();
-        let temp_problems: IProblem[] = new Array();
-        const need_min = user_score + min_score;
-        const need_max = user_score + max_score;
-        problems.forEach(element => {
-            if (element.scoreData?.Rating) {
-                if (element.scoreData.Rating >= need_min && element.scoreData.Rating <= need_max) {
-                    temp_problems.push(element);
-                }
-            }
-        });
-        randomProblem = temp_problems[Math.floor(Math.random() * temp_problems.length)];
-
-    } else {
-        randomProblem = problems[Math.floor(Math.random() * problems.length)];
-    }
-    if (randomProblem) {
-        await showProblemInternal(randomProblem);
-    }
-}
-export async function searchScoreRange(): Promise {
-    const twoFactor: string | undefined = await vscode.window.showInputBox({
-        prompt: "输入分数范围 低分-高分 例如: 1500-1600",
-        ignoreFocusOut: true,
-        validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
-    });
-
-    // vscode.window.showErrorMessage(twoFactor || "输入错误");
-    const tt = Object.assign({}, SearchNode, {
-        value: twoFactor,
-        type: SearchSetType.ScoreRange,
-        time: Math.floor(Date.now() / 1000)
-    })
-    explorerNodeManager.insertSearchSet(tt);
-    await leetCodeTreeDataProvider.refresh()
-}
-
-export async function searchContest(): Promise {
-    const twoFactor: string | undefined = await vscode.window.showInputBox({
-        prompt: "单期数 例如: 300 或者 输入期数范围 低期数-高期数 例如: 303-306",
-        ignoreFocusOut: true,
-        validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
-    });
-
-    // vscode.window.showErrorMessage(twoFactor || "输入错误");
-    const tt = Object.assign({}, SearchNode, {
-        value: twoFactor,
-        type: SearchSetType.Context,
-        time: Math.floor(Date.now() / 1000)
-    })
-    explorerNodeManager.insertSearchSet(tt);
-    await leetCodeTreeDataProvider.refresh()
-}
-
-export async function showProblem(node?: LeetCodeNode): Promise {
-    if (!node) {
-        return;
-    }
-    await showProblemInternal(node);
-}
-
-
-export async function searchProblemByID(): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-    const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
-        parseProblemsToPicks(list.listProblems()),
-        {
-            matchOnDetail: true,
-            matchOnDescription: true,
-            placeHolder: "Select one problem",
-        },
-    );
-    if (!choice) {
-        return;
-    }
-    await showProblemInternal(choice.value);
-}
-
-
-export async function searchProblem(): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-
-    const picks: Array> = [];
-    picks.push(
-        {
-            label: `题目id查询`,
-            detail: `通过题目id查询`,
-            value: `byid`,
-        },
-        {
-            label: `分数范围查询`,
-            detail: `例如 1500-1600`,
-            value: `range`,
-        },
-        {
-            label: `周赛期数查询`,
-            detail: `周赛期数查询`,
-            value: `contest`,
-        },
-        // {
-        //     label: `测试api`,
-        //     detail: `测试api`,
-        //     value: `testapi`,
-        // }
-        // ,
-        // {
-        //     label: `每日一题`,
-        //     detail: `每日一题`,
-        //     value: `today`,
-        // },
-        // {
-        //     label: `查询自己竞赛信息`,
-        //     detail: `查询自己竞赛信息`,
-        //     value: `userContest`,
-        // }
-    );
-    const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
-        picks,
-        { title: "选择查询选项" },
-    );
-    if (!choice) {
-        return
-    }
-    if (choice.value == "byid") {
-        await searchProblemByID();
-    } else if (choice.value == "range") {
-        await searchScoreRange();
-    } else if (choice.value == "contest") {
-        await searchContest();
-    } else if (choice.value == "today") {
-        await searchToday();
-    } else if (choice.value == "userContest") {
-        await searchUserContest();
-    } else if (choice.value == "testapi") {
-        await testapi();
-    }
-
-}
-
-export async function testapi(): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-    try {
-        const twoFactor: string | undefined = await vscode.window.showInputBox({
-            prompt: "测试数据",
-            ignoreFocusOut: true,
-            validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
-        });
-
-        // vscode.window.showErrorMessage(twoFactor || "输入错误");
-        const solution: string = await leetCodeExecutor.getTestApi(twoFactor || "")
-        const query_result = JSON.parse(solution);
-        console.log(query_result);
-    } catch (error) {
-        leetCodeChannel.appendLine(error.toString());
-        await promptForOpenOutputChannel("Failed to fetch today question. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-export async function searchUserContest(): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-    try {
-        const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-        const solution: string = await leetCodeExecutor.getUserContest(needTranslation, leetCodeManager.getUser() || "");
-        const query_result = JSON.parse(solution);
-        const tt: userContestRanKingBase = Object.assign({}, userContestRankingObj, query_result.userContestRanking)
-        await leetCodeManager.insertCurrentUserContestInfo(tt);
-        leetCodeManager.emit("searchUserContest")
-    } catch (error) {
-        leetCodeChannel.appendLine(error.toString());
-        await promptForOpenOutputChannel("Failed to fetch today question. Please open the output channel for details.", DialogType.error);
-    }
-}
-export async function searchToday(): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-    try {
-        const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-        const solution: string = await leetCodeExecutor.getTodayQuestion(needTranslation);
-        const query_result = JSON.parse(solution);
-        // const titleSlug: string = query_result.titleSlug
-        // const questionId: string = query_result.questionId
-        const fid: string = query_result.fid
-        if (fid) {
-            const tt = Object.assign({}, SearchNode, {
-                value: fid,
-                type: SearchSetType.Day,
-                time: Math.floor(Date.now() / 1000),
-                todayData: query_result,
-            })
-            explorerNodeManager.insertSearchSet(tt);
-            await leetCodeTreeDataProvider.refresh()
-        }
-
-    } catch (error) {
-        leetCodeChannel.appendLine(error.toString());
-        await promptForOpenOutputChannel("Failed to fetch today question. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-
-export async function showSolution(input: LeetCodeNode | vscode.Uri): Promise {
-    let problemInput: string | undefined;
-    if (input instanceof LeetCodeNode) { // Triggerred from explorer
-        problemInput = input.qid;
-    } else if (input instanceof vscode.Uri) { // Triggerred from Code Lens/context menu
-        if (wsl.useVscodeNode()) {
-            problemInput = `${input.fsPath}`;
-        } else {
-            problemInput = `"${input.fsPath}"`;
-            if (wsl.useWsl()) {
-                problemInput = await wsl.toWslPath(input.fsPath);
-            }
-        }
-    } else if (!input) { // Triggerred from command
-        problemInput = await getActiveFilePath();
-    }
-
-    if (!problemInput) {
-        vscode.window.showErrorMessage("Invalid input to fetch the solution data.");
-        return;
-    }
-
-    const language: string | undefined = await fetchProblemLanguage();
-    if (!language) {
-        return;
-    }
-    try {
-        const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-        const solution: string = await leetCodeExecutor.showSolution(problemInput, language, needTranslation);
-        leetCodeSolutionProvider.show(unescapeJS(solution));
-    } catch (error) {
-        leetCodeChannel.appendLine(error.toString());
-        await promptForOpenOutputChannel("Failed to fetch the top voted solution. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-async function fetchProblemLanguage(): Promise {
-    const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-    let defaultLanguage: string | undefined = leetCodeConfig.get("defaultLanguage");
-    if (defaultLanguage && languages.indexOf(defaultLanguage) < 0) {
-        defaultLanguage = undefined;
-    }
-    const language: string | undefined = defaultLanguage || await vscode.window.showQuickPick(languages, { placeHolder: "Select the language you want to use", ignoreFocusOut: true });
-    // fire-and-forget default language query
-    (async (): Promise => {
-        if (language && !defaultLanguage && leetCodeConfig.get("hint.setDefaultLanguage")) {
-            const choice: vscode.MessageItem | undefined = await vscode.window.showInformationMessage(
-                `Would you like to set '${language}' as your default language?`,
-                DialogOptions.yes,
-                DialogOptions.no,
-                DialogOptions.never,
-            );
-            if (choice === DialogOptions.yes) {
-                leetCodeConfig.update("defaultLanguage", language, true /* UserSetting */);
-            } else if (choice === DialogOptions.never) {
-                leetCodeConfig.update("hint.setDefaultLanguage", false, true /* UserSetting */);
-            }
-        }
-    })();
-    return language;
-}
-
-async function showProblemInternal(node: IProblem): Promise {
-    try {
-        const language: string | undefined = await fetchProblemLanguage();
-        if (!language) {
-            return;
-        }
-
-        const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
-        const workspaceFolder: string = await selectWorkspaceFolder();
-        if (!workspaceFolder) {
-            return;
-        }
-
-        const fileFolder: string = leetCodeConfig
-            .get(`filePath.${language}.folder`, leetCodeConfig.get(`filePath.default.folder`, ""))
-            .trim();
-        const fileName: string = leetCodeConfig
-            .get(
-                `filePath.${language}.filename`,
-                leetCodeConfig.get(`filePath.default.filename`) || genFileName(node, language),
-            )
-            .trim();
-
-        let finalPath: string = path.join(workspaceFolder, fileFolder, fileName);
-
-        if (finalPath) {
-            finalPath = await resolveRelativePath(finalPath, node, language);
-            if (!finalPath) {
-                leetCodeChannel.appendLine("Showing problem canceled by user.");
-                return;
-            }
-        }
-
-        finalPath = wsl.useWsl() ? await wsl.toWinPath(finalPath) : finalPath;
-
-        const descriptionConfig: IDescriptionConfiguration = settingUtils.getDescriptionConfiguration();
-        const needTranslation: boolean = settingUtils.shouldUseEndpointTranslation();
-
-        await leetCodeExecutor.showProblem(node, language, finalPath, descriptionConfig.showInComment, needTranslation);
-        const promises: any[] = [
-            vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }),
-            promptHintMessage(
-                "hint.commentDescription",
-                'You can config how to show the problem description through "leetcode.showDescription".',
-                "Open settings",
-                (): Promise => openSettingsEditor("leetcode.showDescription"),
-            ),
-        ];
-        if (descriptionConfig.showInWebview) {
-            promises.push(showDescriptionView(node));
-        }
-
-        await Promise.all(promises);
-    } catch (error) {
-        await promptForOpenOutputChannel(`${error} Please open the output channel for details.`, DialogType.error);
-    }
-}
-
-async function showDescriptionView(node: IProblem): Promise {
-    return previewProblem(node, vscode.workspace.getConfiguration("leetcode-problem-rating").get("enableSideMode", true));
-}
-async function parseProblemsToPicks(p: Promise): Promise>> {
-    return new Promise(async (resolve: (res: Array>) => void): Promise => {
-        const picks: Array> = (await p).map((problem: IProblem) => Object.assign({}, {
-            label: `${parseProblemDecorator(problem.state, problem.locked)}${problem.id}.${problem.name}`,
-            description: `QID:${problem.qid}`,
-            detail: ((problem.scoreData?.score || "0") > "0" ? ("score: " + problem.scoreData?.score + " , ") : "") + `AC rate: ${problem.passRate}, Difficulty: ${problem.difficulty}`,
-            value: problem,
-        }));
-        resolve(picks);
-    });
-}
-
-function parseProblemDecorator(state: ProblemState, locked: boolean): string {
-    switch (state) {
-        case ProblemState.AC:
-            return "$(check) ";
-        case ProblemState.NotAC:
-            return "$(x) ";
-        default:
-            return locked ? "$(lock) " : "";
-    }
-}
-
-async function resolveRelativePath(relativePath: string, node: IProblem, selectedLanguage: string): Promise {
-    let tag: string = "";
-    if (/\$\{tag\}/i.test(relativePath)) {
-        tag = (await resolveTagForProblem(node)) || "";
-    }
-
-    let company: string = "";
-    if (/\$\{company\}/i.test(relativePath)) {
-        company = (await resolveCompanyForProblem(node)) || "";
-    }
-
-    return relativePath.replace(/\$\{(.*?)\}/g, (_substring: string, ...args: string[]) => {
-        const placeholder: string = args[0].toLowerCase().trim();
-        switch (placeholder) {
-            case "id":
-                return node.id;
-            case "name":
-                return node.name;
-            case "camelcasename":
-                return _.camelCase(node.name);
-            case "pascalcasename":
-                return _.upperFirst(_.camelCase(node.name));
-            case "kebabcasename":
-            case "kebab-case-name":
-                return _.kebabCase(node.name);
-            case "snakecasename":
-            case "snake_case_name":
-                return _.snakeCase(node.name);
-            case "ext":
-                return genFileExt(selectedLanguage);
-            case "language":
-                return selectedLanguage;
-            case "difficulty":
-                return node.difficulty.toLocaleLowerCase();
-            case "tag":
-                return tag;
-            case "company":
-                return company;
-            default:
-                const errorMsg: string = `The config '${placeholder}' is not supported.`;
-                leetCodeChannel.appendLine(errorMsg);
-                throw new Error(errorMsg);
-        }
-    });
-}
-
-async function resolveTagForProblem(problem: IProblem): Promise {
-    if (problem.tags.length === 1) {
-        return problem.tags[0];
-    }
-    return await vscode.window.showQuickPick(
-        problem.tags,
-        {
-            matchOnDetail: true,
-            placeHolder: "Multiple tags available, please select one",
-            ignoreFocusOut: true,
-        },
-    );
-}
-
-async function resolveCompanyForProblem(problem: IProblem): Promise {
-    if (problem.companies.length === 1) {
-        return problem.companies[0];
-    }
-    return await vscode.window.showQuickPick(problem.companies, {
-        matchOnDetail: true,
-        placeHolder: "Multiple tags available, please select one",
-        ignoreFocusOut: true,
-    });
-}
diff --git a/src/commands/star.ts b/src/commands/star.ts
deleted file mode 100644
index 3661149..0000000
--- a/src/commands/star.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import { customCodeLensProvider } from "../codelens/CustomCodeLensProvider";
-import { LeetCodeNode } from "../explorer/LeetCodeNode";
-import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { hasStarShortcut } from "../utils/settingUtils";
-import { DialogType, promptForOpenOutputChannel } from "../utils/uiUtils";
-
-export async function addFavorite(node: LeetCodeNode): Promise {
-    try {
-        await leetCodeExecutor.toggleFavorite(node, true);
-        await leetCodeTreeDataProvider.refresh();
-        if (hasStarShortcut()) {
-            customCodeLensProvider.refresh();
-        }
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to add the problem to favorite. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-export async function removeFavorite(node: LeetCodeNode): Promise {
-    try {
-        await leetCodeExecutor.toggleFavorite(node, false);
-        await leetCodeTreeDataProvider.refresh();
-        if (hasStarShortcut()) {
-            customCodeLensProvider.refresh();
-        }
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to remove the problem from favorite. Please open the output channel for details.", DialogType.error);
-    }
-}
diff --git a/src/commands/submit.ts b/src/commands/submit.ts
deleted file mode 100644
index 34710b6..0000000
--- a/src/commands/submit.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as vscode from "vscode";
-import { leetCodeTreeDataProvider } from "../explorer/LeetCodeTreeDataProvider";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { leetCodeManager } from "../leetCodeManager";
-import { DialogType, promptForOpenOutputChannel, promptForSignIn } from "../utils/uiUtils";
-import { getActiveFilePath } from "../utils/workspaceUtils";
-import { leetCodeSubmissionProvider } from "../webview/leetCodeSubmissionProvider";
-
-export async function submitSolution(uri?: vscode.Uri): Promise {
-    if (!leetCodeManager.getUser()) {
-        promptForSignIn();
-        return;
-    }
-
-    const filePath: string | undefined = await getActiveFilePath(uri);
-    if (!filePath) {
-        return;
-    }
-
-    try {
-        const result: string = await leetCodeExecutor.submitSolution(filePath);
-        leetCodeSubmissionProvider.show(result);
-        leetCodeManager.emit("submit", leetCodeSubmissionProvider.getSubmitEvent());
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to submit the solution. Please open the output channel for details.", DialogType.error);
-        return;
-    }
-
-    leetCodeTreeDataProvider.refresh();
-}
diff --git a/src/commands/test.ts b/src/commands/test.ts
deleted file mode 100644
index 7b0c18e..0000000
--- a/src/commands/test.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as fse from "fs-extra";
-import * as vscode from "vscode";
-import { leetCodeExecutor } from "../leetCodeExecutor";
-import { leetCodeManager } from "../leetCodeManager";
-import { IQuickItemEx, UserStatus } from "../shared";
-import { isWindows, usingCmd } from "../utils/osUtils";
-import { DialogType, promptForOpenOutputChannel, showFileSelectDialog } from "../utils/uiUtils";
-import { getActiveFilePath } from "../utils/workspaceUtils";
-import * as wsl from "../utils/wslUtils";
-import { leetCodeSubmissionProvider } from "../webview/leetCodeSubmissionProvider";
-
-export async function testSolution(uri?: vscode.Uri): Promise {
-    try {
-        if (leetCodeManager.getStatus() === UserStatus.SignedOut) {
-            return;
-        }
-
-        const filePath: string | undefined = await getActiveFilePath(uri);
-        if (!filePath) {
-            return;
-        }
-        const picks: Array> = [];
-        picks.push(
-            {
-                label: "$(three-bars) Default test cases",
-                description: "",
-                detail: "Test with the default cases",
-                value: ":default",
-            },
-            {
-                label: "$(pencil) Write directly...",
-                description: "",
-                detail: "Write test cases in input box",
-                value: ":direct",
-            },
-            {
-                label: "$(file-text) Browse...",
-                description: "",
-                detail: "Test with the written cases in file",
-                value: ":file",
-            },
-            {
-                label: "All Default test cases...",
-                description: "",
-                detail: "Test with the all default cases",
-                value: ":alldefault",
-            },
-        );
-        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
-        if (!choice) {
-            return;
-        }
-
-        let result: string | undefined;
-        switch (choice.value) {
-            case ":default":
-                result = await leetCodeExecutor.testSolution(filePath);
-                break;
-            case ":direct":
-                const testString: string | undefined = await vscode.window.showInputBox({
-                    prompt: "Enter the test cases.",
-                    validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "Test case must not be empty.",
-                    placeHolder: "Example: [1,2,3]\\n4",
-                    ignoreFocusOut: true,
-                });
-                if (testString) {
-                    result = await leetCodeExecutor.testSolution(filePath, parseTestString(testString));
-                }
-                break;
-            case ":file":
-                const testFile: vscode.Uri[] | undefined = await showFileSelectDialog(filePath);
-                if (testFile && testFile.length) {
-                    const input: string = (await fse.readFile(testFile[0].fsPath, "utf-8")).trim();
-                    if (input) {
-                        result = await leetCodeExecutor.testSolution(filePath, parseTestString(input.replace(/\r?\n/g, "\\n")));
-                    } else {
-                        vscode.window.showErrorMessage("The selected test file must not be empty.");
-                    }
-                }
-                break;
-            case ":alldefault":
-                result = await leetCodeExecutor.testSolution(filePath, undefined, true);
-                break;
-            default:
-                break;
-        }
-        if (!result) {
-            return;
-        }
-        leetCodeSubmissionProvider.show(result);
-        leetCodeManager.emit("submit", leetCodeSubmissionProvider.getSubmitEvent());
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to test the solution. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-export async function testSolutionDefault(uri?: vscode.Uri, allCase?: boolean): Promise {
-    try {
-        if (leetCodeManager.getStatus() === UserStatus.SignedOut) {
-            return;
-        }
-
-        const filePath: string | undefined = await getActiveFilePath(uri);
-        if (!filePath) {
-            return;
-        }
-
-        let result: string | undefined = await leetCodeExecutor.testSolution(filePath, undefined, allCase || false);
-        if (!result) {
-            return;
-        }
-        leetCodeSubmissionProvider.show(result);
-        leetCodeManager.emit("submit", leetCodeSubmissionProvider.getSubmitEvent());
-    } catch (error) {
-        await promptForOpenOutputChannel("Failed to test the solution. Please open the output channel for details.", DialogType.error);
-    }
-}
-
-
-function parseTestString(test: string): string {
-    if (wsl.useWsl() || !isWindows()) {
-        if (wsl.useVscodeNode()) {
-            return `${test}`;
-        }
-        return `'${test}'`;
-    }
-
-    // In windows and not using WSL
-    if (usingCmd()) {
-        // 一般需要走进这里, 除非改了 环境变量ComSpec的值
-        if (wsl.useVscodeNode()) {
-            return `${test.replace(/"/g, '\"')}`;
-        }
-        return `"${test.replace(/"/g, '\\"')}"`;
-    } else {
-        if (wsl.useVscodeNode()) {
-            return `${test.replace(/"/g, '\"')}`;
-        }
-        return `'${test.replace(/"/g, '\\"')}'`;
-    }
-}
diff --git a/src/controller/EventController.ts b/src/controller/EventController.ts
new file mode 100644
index 0000000..4f55adf
--- /dev/null
+++ b/src/controller/EventController.ts
@@ -0,0 +1,21 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/controller/EventController.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Monday, October 31st 2022, 10:16:47 am
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+import { eventService } from "../service/EventService";
+// 事件的控制器
+class EventContorller {
+    /**
+     * 监听事件
+     */
+    public add_event() {
+        eventService.add_event();
+    }
+}
+
+export const eventController: EventContorller = new EventContorller();
diff --git a/src/controller/FileButtonController.ts b/src/controller/FileButtonController.ts
new file mode 100644
index 0000000..c3f5cf0
--- /dev/null
+++ b/src/controller/FileButtonController.ts
@@ -0,0 +1,37 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/controller/FileButtonController.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
+import { ConfigurationChangeEvent, Disposable, languages, workspace } from "vscode";
+import { fileButtonService } from "../service/FileButtonService";
+// 文件按钮的控制器
+class FileButtonController implements Disposable {
+
+    private registeredProvider: Disposable | undefined;
+    private configurationChangeListener: Disposable;
+
+    constructor() {
+        this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => {
+            if (event.affectsConfiguration("leetcode-problem-rating.editor.shortcuts")) {
+                fileButtonService.refresh();
+            }
+        }, this);
+
+        this.registeredProvider = languages.registerCodeLensProvider({ scheme: "file" }, fileButtonService);
+    }
+
+    public dispose(): void {
+        if (this.registeredProvider) {
+            this.registeredProvider.dispose();
+        }
+        this.configurationChangeListener.dispose();
+    }
+}
+
+export const fileButtonController: FileButtonController = new FileButtonController();
diff --git a/src/controller/LoginController.ts b/src/controller/LoginController.ts
new file mode 100644
index 0000000..2d50c0c
--- /dev/null
+++ b/src/controller/LoginController.ts
@@ -0,0 +1,190 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/controller/LoginController.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 3:06:12 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+import * as cp from "child_process";
+import * as systemUtils from "../utils/SystemUtils";
+import { executeService } from "../service/ExecuteService";
+import { DialogType, Endpoint, IQuickItemEx, loginArgsMapping, UserStatus } from "../model/Model";
+import { createEnvOption } from "../utils/CliUtils";
+import { logOutput, promptForOpenOutputChannel } from "../utils/OutputUtils";
+import { eventService } from "../service/EventService";
+import { window, QuickPickOptions } from "vscode";
+import { statusBarService } from "../service/StatusBarService";
+import { treeDataService } from "../service/TreeDataService";
+import { getLeetCodeEndpoint } from "../utils/ConfigUtils";
+
+
+// 登录控制器
+class LoginContorller {
+    constructor() { }
+
+    // 登录操作
+    public async signIn(): Promise {
+        const picks: Array> = [];
+        let qpOpiton: QuickPickOptions = {
+            title: "正在登录leetcode.com",
+            matchOnDescription: false,
+            matchOnDetail: false,
+            placeHolder: "请选择登录方式 正在登录leetcode.com",
+        };
+        if (getLeetCodeEndpoint() == Endpoint.LeetCodeCN) {
+            picks.push({
+                label: "LeetCode Account",
+                detail: "只能登录leetcode.cn",
+                value: "LeetCode",
+            });
+            qpOpiton.title = "正在登录中文版leetcode.cn";
+            qpOpiton.placeHolder = "请选择登录方式 正在登录中文版leetcode.cn";
+        }
+        picks.push(
+            {
+                label: "Third-Party: GitHub",
+                detail: "Use GitHub account to login",
+                value: "GitHub",
+            },
+            {
+                label: "Third-Party: LinkedIn",
+                detail: "Use LinkedIn account to login",
+                value: "LinkedIn",
+            },
+            {
+                label: "LeetCode Cookie",
+                detail: "Use LeetCode cookie copied from browser to login",
+                value: "Cookie",
+            },
+        );
+        const choice: IQuickItemEx | undefined = await window.showQuickPick(picks, qpOpiton);
+        if (!choice) {
+            return;
+        }
+        const loginMethod: string = choice.value;
+        const commandArg: string | undefined = loginArgsMapping.get(loginMethod);
+        if (!commandArg) {
+            throw new Error(`不支持 "${loginMethod}" 方式登录`);
+        }
+        const isByCookie: boolean = loginMethod === "Cookie";
+        const inMessage: string = isByCookie ? " 通过cookie登录" : "登录";
+        try {
+            const userName: string | undefined = await new Promise(async (resolve: (res: string | undefined) => void, reject: (e: Error) => void): Promise => {
+
+                const leetCodeBinaryPath: string = await executeService.getLeetCodeBinaryPath();
+
+                let childProc: cp.ChildProcess;
+
+                if (systemUtils.useVscodeNode()) {
+                    childProc = cp.fork(await executeService.getLeetCodeBinaryPath(), ["user", commandArg], {
+                        silent: true,
+                        env: createEnvOption(),
+                    });
+                } else {
+                    if (systemUtils.useWsl()) {
+                        childProc = cp.spawn("wsl", [executeService.node, leetCodeBinaryPath, "user", commandArg], { shell: true });
+                    } else {
+                        childProc = cp.spawn(executeService.node, [leetCodeBinaryPath, "user", commandArg], {
+                            shell: true,
+                            env: createEnvOption(),
+                        });
+                    }
+
+                }
+
+                childProc.stdout?.on("data", async (data: string | Buffer) => {
+                    data = data.toString();
+                    // vscode.window.showInformationMessage(`cc login msg ${data}.`);
+                    logOutput.append(data);
+                    if (data.includes("twoFactorCode")) {
+                        const twoFactor: string | undefined = await window.showInputBox({
+                            prompt: "Enter two-factor code.",
+                            ignoreFocusOut: true,
+                            validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
+                        });
+                        if (!twoFactor) {
+                            childProc.kill();
+                            return resolve(undefined);
+                        }
+                        childProc.stdin?.write(`${twoFactor}\n`);
+                    }
+
+                    let successMatch;
+                    try {
+                        successMatch = JSON.parse(data);
+                    } catch (e) {
+                        successMatch = {};
+                    }
+                    if (successMatch.code == 100) {
+                        childProc.stdin?.end();
+                        return resolve(successMatch.user_name);
+                    } else if (successMatch.code < 0) {
+                        childProc.stdin?.end();
+                        return reject(new Error(successMatch.msg));
+                    }
+                });
+
+                childProc.stderr?.on("data", (data: string | Buffer) => logOutput.append(data.toString()));
+
+                childProc.on("error", reject);
+                const name: string | undefined = await window.showInputBox({
+                    prompt: "Enter username or E-mail.",
+                    ignoreFocusOut: true,
+                    validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
+                });
+                if (!name) {
+                    childProc.kill();
+                    return resolve(undefined);
+                }
+                childProc.stdin?.write(`${name}\n`);
+                const pwd: string | undefined = await window.showInputBox({
+                    prompt: isByCookie ? "Enter cookie" : "Enter password.",
+                    password: true,
+                    ignoreFocusOut: true,
+                    validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty",
+                });
+                if (!pwd) {
+                    childProc.kill();
+                    return resolve(undefined);
+                }
+                childProc.stdin?.write(`${pwd}\n`);
+            });
+            if (userName) {
+                window.showInformationMessage(`${inMessage} 成功`);
+                eventService.emit("statusChanged", UserStatus.SignedIn, userName);
+            }
+        } catch (error) {
+            promptForOpenOutputChannel(`${inMessage}失败. 请看看控制台输出信息`, DialogType.error);
+        }
+
+    }
+
+    // 登出
+    public async signOut(): Promise {
+        try {
+            await executeService.signOut();
+            window.showInformationMessage("成功登出");
+            eventService.emit("statusChanged", UserStatus.SignedOut, undefined);
+        } catch (error) {
+            // promptForOpenOutputChannel(`Failed to signOut. Please open the output channel for details`, DialogType.error);
+        }
+    }
+
+    // 获取登录状态
+    public async getLoginStatus() {
+        return await statusBarService.getLoginStatus();
+    }
+
+    // 删除所有缓存
+    public async deleteAllCache(): Promise {
+        await this.signOut();
+        await executeService.removeOldCache();
+        await executeService.switchEndpoint(getLeetCodeEndpoint());
+        await treeDataService.refresh();
+    }
+
+}
+
+export const loginContorller: LoginContorller = new LoginContorller();
diff --git a/src/controller/MainController.ts b/src/controller/MainController.ts
new file mode 100644
index 0000000..f5abdaa
--- /dev/null
+++ b/src/controller/MainController.ts
@@ -0,0 +1,42 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/controller/MainController.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 2:18:21 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+import * as systemUtils from "../utils/SystemUtils";
+import { executeService } from "../service/ExecuteService";
+import { ExtensionContext } from "vscode";
+import { treeDataService } from "../service/TreeDataService";
+
+// 做杂活
+class MainContorller {
+    constructor() { }
+
+    /**
+     * 检查运行环境
+     */
+    public async checkNodeEnv(context: ExtensionContext) {
+        if (!systemUtils.useVscodeNode()) {
+            if (!await executeService.checkNodeEnv(context)) {
+                throw new Error("The environment doesn't meet requirements.");
+            }
+        }
+    }
+
+    // 初始化上下文
+    public initialize(context: ExtensionContext) {
+        treeDataService.initialize(context);
+    }
+
+
+    // 删除缓存
+    public async deleteCache() {
+        await executeService.deleteCache();
+    }
+}
+
+export const mainContorller: MainContorller = new MainContorller();
diff --git a/src/controller/TreeViewController.ts b/src/controller/TreeViewController.ts
new file mode 100644
index 0000000..33df1ce
--- /dev/null
+++ b/src/controller/TreeViewController.ts
@@ -0,0 +1,1455 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/controller/TreeViewController.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
+import * as lodash from "lodash";
+import * as path from "path";
+import * as unescapeJS from "unescape-js";
+import * as vscode from "vscode";
+import { toNumber } from "lodash";
+import { Disposable, Uri, window, QuickPickItem, workspace, WorkspaceConfiguration } from "vscode";
+import { SearchNode, userContestRankingObj, userContestRanKingBase, UserStatus, IProblem, IQuickItemEx, languages, Category, defaultProblem, ProblemState, SortingStrategy, SearchSetTypeName, RootNodeSort, SearchSetType, ISubmitEvent, SORT_ORDER, Endpoint, OpenOption, DialogType, DialogOptions } from "../model/Model";
+import { isHideSolvedProblem, isHideScoreProblem, getDescriptionConfiguration, isUseEndpointTranslation, enableSideMode, getPickOneByRankRangeMin, getPickOneByRankRangeMax, isShowLocked, updateSortingStrategy, getSortingStrategy, getLeetCodeEndpoint, openSettingsEditor } from "../utils/ConfigUtils";
+import { NodeModel } from "../model/NodeModel";
+import { ISearchSet } from "../model/Model";
+import { statusBarService } from "../service/StatusBarService";
+import { previewService } from "../service/PreviewService";
+import { executeService } from "../service/ExecuteService";
+import { getNodeIdFromFile } from "../utils/SystemUtils";
+import { logOutput, promptForOpenOutputChannel, promptForSignIn, promptHintMessage } from "../utils/OutputUtils";
+import { treeDataService } from "../service/TreeDataService";
+import { genFileExt, genFileName } from "../utils/SystemUtils";
+import { IDescriptionConfiguration, isStarShortcut } from "../utils/ConfigUtils";
+import * as systemUtils from "../utils/SystemUtils";
+import { solutionService } from "../service/SolutionService";
+import { eventService } from "../service/EventService";
+import { fileButtonService } from "../service/FileButtonService";
+
+import * as fse from "fs-extra";
+import { submissionService } from "../service/SubmissionService";
+
+
+import * as os from "os";
+import { getVsCodeConfig, getWorkspaceFolder } from "../utils/ConfigUtils";
+
+
+// 视图控制器
+class TreeViewController implements Disposable {
+    private explorerNodeMap: Map = new Map();
+    private companySet: Set = new Set();
+    private tagSet: Set = new Set();
+    private searchSet: Map = new Map();
+    private waitTodayQuestion: boolean;
+    private waitUserContest: boolean;
+
+    // 获取当前文件的路径
+    public async getActiveFilePath(uri?: vscode.Uri): Promise {
+        let textEditor: vscode.TextEditor | undefined;
+        if (uri) {
+            textEditor = await vscode.window.showTextDocument(uri, { preview: false });
+        } else {
+            textEditor = vscode.window.activeTextEditor;
+        }
+
+        if (!textEditor) {
+            return undefined;
+        }
+        if (textEditor.document.isDirty && !await textEditor.document.save()) {
+            vscode.window.showWarningMessage("请先保存当前文件");
+            return undefined;
+        }
+        return systemUtils.useWsl() ? systemUtils.toWslPath(textEditor.document.uri.fsPath) : textEditor.document.uri.fsPath;
+    }
+
+    // 提交问题
+    public async submitSolution(uri?: vscode.Uri): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+
+        const filePath: string | undefined = await this.getActiveFilePath(uri);
+        if (!filePath) {
+            return;
+        }
+
+        try {
+            const result: string = await executeService.submitSolution(filePath);
+            submissionService.show(result);
+            eventService.emit("submit", submissionService.getSubmitEvent());
+        } catch (error) {
+            await promptForOpenOutputChannel("提交出错了. 请查看控制台信息~", DialogType.error);
+            return;
+        }
+
+        treeDataService.refresh();
+    }
+
+
+    // 提交测试用例
+    public async testSolution(uri?: vscode.Uri): Promise {
+        try {
+            if (statusBarService.getStatus() === UserStatus.SignedOut) {
+                return;
+            }
+
+            const filePath: string | undefined = await this.getActiveFilePath(uri);
+            if (!filePath) {
+                return;
+            }
+            const picks: Array> = [];
+            picks.push(
+                // {
+                //     label: "$(three-bars) Default test cases",
+                //     description: "",
+                //     detail: "默认用例",
+                //     value: ":default",
+                // },
+                {
+                    label: "$(pencil) Write directly...",
+                    description: "",
+                    detail: "输入框的测试用例",
+                    value: ":direct",
+                },
+                {
+                    label: "$(file-text) Browse...",
+                    description: "",
+                    detail: "文件中的测试用例",
+                    value: ":file",
+                },
+                // {
+                //     label: "All Default test cases...",
+                //     description: "",
+                //     detail: "所有的测试用例",
+                //     value: ":alldefault",
+                // },
+            );
+            const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
+            if (!choice) {
+                return;
+            }
+
+            let result: string | undefined;
+            let testString: string | undefined;
+            let testFile: vscode.Uri[] | undefined;
+            switch (choice.value) {
+                case ":default":
+                    result = await executeService.testSolution(filePath);
+                    break;
+                case ":direct":
+                    testString = await vscode.window.showInputBox({
+                        prompt: "Enter the test cases.",
+                        validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "Test case must not be empty.",
+                        placeHolder: "Example: [1,2,3]\\n4",
+                        ignoreFocusOut: true,
+                    });
+                    if (testString) {
+                        result = await executeService.testSolution(filePath, this.parseTestString(testString));
+                    }
+                    break;
+                case ":file":
+                    testFile = await this.showFileSelectDialog(filePath);
+                    if (testFile && testFile.length) {
+                        const input: string = (await fse.readFile(testFile[0].fsPath, "utf-8")).trim();
+                        if (input) {
+                            result = await executeService.testSolution(filePath, this.parseTestString(input.replace(/\r?\n/g, "\\n")));
+                        } else {
+                            vscode.window.showErrorMessage("The selected test file must not be empty.");
+                        }
+                    }
+                    break;
+                case ":alldefault":
+                    result = await executeService.testSolution(filePath, undefined, true);
+                    break;
+                default:
+                    break;
+            }
+            if (!result) {
+                return;
+            }
+            submissionService.show(result);
+            eventService.emit("submit", submissionService.getSubmitEvent());
+        } catch (error) {
+            await promptForOpenOutputChannel("提交测试出错了. 请查看控制台信息~", DialogType.error);
+        }
+    }
+    public async showFileSelectDialog(fsPath?: string): Promise {
+        const defaultUri: vscode.Uri | undefined = this.getBelongingWorkspaceFolderUri(fsPath);
+        const options: vscode.OpenDialogOptions = {
+            defaultUri,
+            canSelectFiles: true,
+            canSelectFolders: false,
+            canSelectMany: false,
+            openLabel: "Select",
+        };
+        return await vscode.window.showOpenDialog(options);
+    }
+
+
+    public async testSolutionDefault(uri?: vscode.Uri, allCase?: boolean): Promise {
+        try {
+            if (statusBarService.getStatus() === UserStatus.SignedOut) {
+                return;
+            }
+
+            const filePath: string | undefined = await this.getActiveFilePath(uri);
+            if (!filePath) {
+                return;
+            }
+
+            let result: string | undefined = await executeService.testSolution(filePath, undefined, allCase || false);
+            if (!result) {
+                return;
+            }
+            submissionService.show(result);
+            eventService.emit("submit", submissionService.getSubmitEvent());
+        } catch (error) {
+            await promptForOpenOutputChannel("提交测试出错了. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+    public usingCmd(): boolean {
+        const comSpec: string | undefined = process.env.ComSpec;
+        // 'cmd.exe' is used as a fallback if process.env.ComSpec is unavailable.
+        if (!comSpec) {
+            return true;
+        }
+
+        if (comSpec.indexOf("cmd.exe") > -1) {
+            return true;
+        }
+        return false;
+    }
+
+    public parseTestString(test: string): string {
+        if (systemUtils.useWsl() || !systemUtils.isWindows()) {
+            if (systemUtils.useVscodeNode()) {
+                return `${test}`;
+            }
+            return `'${test}'`;
+        }
+
+        if (this.usingCmd()) {
+            // 一般需要走进这里, 除非改了 环境变量ComSpec的值
+            if (systemUtils.useVscodeNode()) {
+                //eslint-disable-next-line
+                return `${test.replace(/"/g, '\"')}`;
+            }
+            return `"${test.replace(/"/g, '\\"')}"`;
+        } else {
+            if (systemUtils.useVscodeNode()) {
+                //eslint-disable-next-line
+                return `${test.replace(/"/g, '\"')}`;
+            }
+            return `'${test.replace(/"/g, '\\"')}'`;
+        }
+    }
+
+
+    public async switchEndpoint(): Promise {
+        const isCnEnabled: boolean = getLeetCodeEndpoint() === Endpoint.LeetCodeCN;
+        const picks: Array> = [];
+        picks.push(
+            {
+                label: `${isCnEnabled ? "" : "$(check) "}LeetCode`,
+                description: "leetcode.com",
+                detail: `Enable LeetCode.com US`,
+                value: Endpoint.LeetCode,
+            },
+            {
+                label: `${isCnEnabled ? "$(check) " : ""}力扣`,
+                description: "leetcode.cn",
+                detail: `启用中国版 LeetCode.cn`,
+                value: Endpoint.LeetCodeCN,
+            },
+        );
+        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
+        if (!choice || choice.value === getLeetCodeEndpoint()) {
+            return;
+        }
+        const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
+        try {
+            const endpoint: string = choice.value;
+            await executeService.switchEndpoint(endpoint);
+            await leetCodeConfig.update("endpoint", endpoint, true /* UserSetting */);
+            vscode.window.showInformationMessage(`Switched the endpoint to ${endpoint}`);
+        } catch (error) {
+            await promptForOpenOutputChannel("切换站点出错. 请查看控制台信息~", DialogType.error);
+        }
+
+        try {
+            await vscode.commands.executeCommand("leetcode.signout");
+            await executeService.deleteCache();
+            await promptForSignIn();
+        } catch (error) {
+            await promptForOpenOutputChannel("登录失败. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+
+    public async switchSortingStrategy(): Promise {
+        const currentStrategy: SortingStrategy = getSortingStrategy();
+        const picks: Array> = [];
+        picks.push(
+            ...SORT_ORDER.map((s: SortingStrategy) => {
+                return {
+                    label: `${currentStrategy === s ? "$(check)" : "    "} ${s}`,
+                    value: s,
+                };
+            }),
+        );
+
+        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
+        if (!choice || choice.value === currentStrategy) {
+            return;
+        }
+
+        await updateSortingStrategy(choice.value, true);
+        await treeDataService.refresh();
+    }
+
+
+    public async addFavorite(node: NodeModel): Promise {
+        try {
+            await executeService.toggleFavorite(node, true);
+            await treeDataService.refresh();
+            if (isStarShortcut()) {
+                fileButtonService.refresh();
+            }
+        } catch (error) {
+            await promptForOpenOutputChannel("添加喜欢题目失败. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+    public async removeFavorite(node: NodeModel): Promise {
+        try {
+            await executeService.toggleFavorite(node, false);
+            await treeDataService.refresh();
+            if (isStarShortcut()) {
+                fileButtonService.refresh();
+            }
+        } catch (error) {
+            await promptForOpenOutputChannel("移除喜欢题目失败. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+    public async listProblems(): Promise {
+        try {
+            if (statusBarService.getStatus() === UserStatus.SignedOut) {
+                return [];
+            }
+
+            const showLockedFlag: boolean = isShowLocked();
+            const useEndpointTranslation: boolean = isUseEndpointTranslation();
+            const result: string = await executeService.listProblems(showLockedFlag, useEndpointTranslation);
+            const all_problem_info = JSON.parse(result);
+            const problems: IProblem[] = [];
+            const AllScoreData = treeDataService.getScoreData();
+            // 增加直接在线获取分数数据
+            const AllScoreDataOnline = await treeDataService.getScoreDataOnline();
+            for (const p of all_problem_info) {
+                problems.push({
+                    id: p.fid,
+                    qid: p.id,
+                    isFavorite: p.starred,
+                    locked: p.locked,
+                    state: this.parseProblemState(p.state),
+                    name: p.name,
+                    difficulty: p.level,
+                    passRate: p.percent,
+                    companies: p.companies || [],
+                    tags: treeDataService.getTagsData(p.fid),
+                    scoreData: AllScoreDataOnline.get(p.fid) || AllScoreData.get(p.fid),
+                    isSearchResult: false,
+                    input: "",
+                    rootNodeSortId: RootNodeSort.ZERO,
+                    todayData: undefined,
+                });
+            }
+            return problems.reverse();
+        } catch (error) {
+            await promptForOpenOutputChannel("获取题目失败. 请查看控制台信息~", DialogType.error);
+            return [];
+        }
+    }
+
+    public parseProblemState(stateOutput: string): ProblemState {
+        if (!stateOutput) {
+            return ProblemState.Unknown;
+        }
+        switch (stateOutput.trim()) {
+            case "v":
+            case "✔":
+            case "√":
+            case "ac":
+                return ProblemState.AC;
+            case "X":
+            case "✘":
+            case "×":
+            case "notac":
+                return ProblemState.NotAC;
+            default:
+                return ProblemState.Unknown;
+        }
+    }
+
+
+    public async switchDefaultLanguage(): Promise {
+        const leetCodeConfig: WorkspaceConfiguration = workspace.getConfiguration("leetcode-problem-rating");
+        const defaultLanguage: string | undefined = leetCodeConfig.get("defaultLanguage");
+        const languageItems: QuickPickItem[] = [];
+        for (const language of languages) {
+            languageItems.push({
+                label: language,
+                description: defaultLanguage === language ? "Currently used" : undefined,
+            });
+        }
+        // Put the default language at the top of the list
+        languageItems.sort((a: QuickPickItem, b: QuickPickItem) => {
+            if (a.description) {
+                return Number.MIN_SAFE_INTEGER;
+            } else if (b.description) {
+                return Number.MAX_SAFE_INTEGER;
+            }
+            return a.label.localeCompare(b.label);
+        });
+
+        const selectedItem: QuickPickItem | undefined = await window.showQuickPick(languageItems, {
+            placeHolder: "请设置默认语言",
+            ignoreFocusOut: true,
+        });
+
+        if (!selectedItem) {
+            return;
+        }
+
+        leetCodeConfig.update("defaultLanguage", selectedItem.label, true /* Global */);
+        window.showInformationMessage(`设置默认语言 ${selectedItem.label} 成功`);
+    }
+
+
+    public isSubFolder(from: string, to: string): boolean {
+        const relative: string = path.relative(from, to);
+        if (relative === "") {
+            return true;
+        }
+        return !relative.startsWith("..") && !path.isAbsolute(relative);
+    }
+
+    public async determineLeetCodeFolder(): Promise {
+        let result: string;
+        const picks: Array> = [];
+        picks.push(
+            {
+                label: `Default location`,
+                detail: `${path.join(os.homedir(), ".leetcode")}`,
+                value: `${path.join(os.homedir(), ".leetcode")}`,
+            },
+            {
+                label: "$(file-directory) Browse...",
+                value: ":browse",
+            },
+        );
+        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
+            picks,
+            { placeHolder: "Select where you would like to save your LeetCode files" },
+        );
+        if (!choice) {
+            result = "";
+        } else if (choice.value === ":browse") {
+            const directory: vscode.Uri[] | undefined = await this.showDirectorySelectDialog();
+            if (!directory || directory.length < 1) {
+                result = "";
+            } else {
+                result = directory[0].fsPath;
+            }
+        } else {
+            result = choice.value;
+        }
+
+        getVsCodeConfig().update("workspaceFolder", result, vscode.ConfigurationTarget.Global);
+
+        return result;
+    }
+
+    public async showDirectorySelectDialog(fsPath?: string): Promise {
+        const defaultUri: vscode.Uri | undefined = this.getBelongingWorkspaceFolderUri(fsPath);
+        const options: vscode.OpenDialogOptions = {
+            defaultUri,
+            canSelectFiles: false,
+            canSelectFolders: true,
+            canSelectMany: false,
+            openLabel: "Select",
+        };
+        return await vscode.window.showOpenDialog(options);
+    }
+
+    public getBelongingWorkspaceFolderUri(fsPath: string | undefined): vscode.Uri | undefined {
+        let defaultUri: vscode.Uri | undefined;
+        if (fsPath) {
+            const workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(fsPath));
+            if (workspaceFolder) {
+                defaultUri = workspaceFolder.uri;
+            }
+        }
+        return defaultUri;
+    }
+
+
+    public async searchProblem(): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+
+        const picks: Array> = [];
+        picks.push(
+            {
+                label: `题目id查询`,
+                detail: `通过题目id查询`,
+                value: `byid`,
+            },
+            {
+                label: `分数范围查询`,
+                detail: `例如 1500-1600`,
+                value: `range`,
+            },
+            {
+                label: `周赛期数查询`,
+                detail: `周赛期数查询`,
+                value: `contest`,
+            },
+            {
+                label: `测试api`,
+                detail: `测试api`,
+                value: `testapi`,
+            }
+            // ,
+            // {
+            //     label: `每日一题`,
+            //     detail: `每日一题`,
+            //     value: `today`,
+            // },
+            // {
+            //     label: `查询自己竞赛信息`,
+            //     detail: `查询自己竞赛信息`,
+            //     value: `userContest`,
+            // }
+        );
+        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
+            picks,
+            { title: "选择查询选项" },
+        );
+        if (!choice) {
+            return;
+        }
+        if (choice.value == "byid") {
+            await this.searchProblemByID();
+        } else if (choice.value == "range") {
+            await this.searchScoreRange();
+        } else if (choice.value == "contest") {
+            await this.searchContest();
+        } else if (choice.value == "today") {
+            await this.searchToday();
+        } else if (choice.value == "userContest") {
+            await this.searchUserContest();
+        } else if (choice.value == "testapi") {
+            await this.testapi();
+        }
+
+    }
+
+    public async showSolution(input: NodeModel | vscode.Uri): Promise {
+        let problemInput: string | undefined;
+        if (input instanceof NodeModel) { // Triggerred from explorer
+            problemInput = input.qid;
+        } else if (input instanceof vscode.Uri) { // Triggerred from Code Lens/context menu
+            if (systemUtils.useVscodeNode()) {
+                problemInput = `${input.fsPath}`;
+            } else {
+                problemInput = `"${input.fsPath}"`;
+                if (systemUtils.useWsl()) {
+                    problemInput = await systemUtils.toWslPath(input.fsPath);
+                }
+            }
+        } else if (!input) { // Triggerred from command
+            problemInput = await this.getActiveFilePath();
+        }
+
+        if (!problemInput) {
+            vscode.window.showErrorMessage("Invalid input to fetch the solution data.");
+            return;
+        }
+
+        const language: string | undefined = await this.fetchProblemLanguage();
+        if (!language) {
+            return;
+        }
+        try {
+            const needTranslation: boolean = isUseEndpointTranslation();
+            const solution: string = await executeService.showSolution(problemInput, language, needTranslation);
+            solutionService.show(unescapeJS(solution));
+        } catch (error) {
+            logOutput.appendLine(error.toString());
+            await promptForOpenOutputChannel("Failed to fetch the top voted solution. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+
+
+    public async testapi(): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+        try {
+            const twoFactor: string | undefined = await vscode.window.showInputBox({
+                prompt: "测试数据",
+                ignoreFocusOut: true,
+                validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
+            });
+
+            // vscode.window.showErrorMessage(twoFactor || "输入错误");
+            const solution: string = await executeService.getTestApi(twoFactor || "");
+            const query_result = JSON.parse(solution);
+            console.log(query_result);
+        } catch (error) {
+            logOutput.appendLine(error.toString());
+            await promptForOpenOutputChannel("Failed to fetch today question. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+
+    public async searchProblemByID(): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(
+            this.parseProblemsToPicks(this.listProblems()),
+            {
+                matchOnDetail: true,
+                matchOnDescription: true,
+                placeHolder: "Select one problem",
+            },
+        );
+        if (!choice) {
+            return;
+        }
+        await this.showProblemInternal(choice.value);
+    }
+
+    public async showProblem(node?: NodeModel): Promise {
+        if (!node) {
+            return;
+        }
+        await this.showProblemInternal(node);
+    }
+
+
+    public async pickOne(): Promise {
+        const problems: IProblem[] = await this.listProblems();
+        let randomProblem: IProblem;
+
+        const user_score = statusBarService.getUserContestScore();
+        if (user_score > 0) {
+
+            let min_score: number = getPickOneByRankRangeMin();
+            let max_score: number = getPickOneByRankRangeMax();
+            let temp_problems: IProblem[] = [];
+            const need_min = user_score + min_score;
+            const need_max = user_score + max_score;
+            problems.forEach(element => {
+                if (element.scoreData?.Rating) {
+                    if (element.scoreData.Rating >= need_min && element.scoreData.Rating <= need_max) {
+                        temp_problems.push(element);
+                    }
+                }
+            });
+            randomProblem = temp_problems[Math.floor(Math.random() * temp_problems.length)];
+
+        } else {
+            randomProblem = problems[Math.floor(Math.random() * problems.length)];
+        }
+        if (randomProblem) {
+            await this.showProblemInternal(randomProblem);
+        }
+    }
+
+    public async fetchProblemLanguage(): Promise {
+        const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
+        let defaultLanguage: string | undefined = leetCodeConfig.get("defaultLanguage");
+        if (defaultLanguage && languages.indexOf(defaultLanguage) < 0) {
+            defaultLanguage = undefined;
+        }
+        const language: string | undefined = defaultLanguage || await vscode.window.showQuickPick(languages, { placeHolder: "Select the language you want to use", ignoreFocusOut: true });
+        // fire-and-forget default language query
+        (async (): Promise => {
+            if (language && !defaultLanguage && leetCodeConfig.get("hint.setDefaultLanguage")) {
+                const choice: vscode.MessageItem | undefined = await vscode.window.showInformationMessage(
+                    `Would you like to set '${language}' as your default language?`,
+                    DialogOptions.yes,
+                    DialogOptions.no,
+                    DialogOptions.never,
+                );
+                if (choice === DialogOptions.yes) {
+                    leetCodeConfig.update("defaultLanguage", language, true /* UserSetting */);
+                } else if (choice === DialogOptions.never) {
+                    leetCodeConfig.update("hint.setDefaultLanguage", false, true /* UserSetting */);
+                }
+            }
+        })();
+        return language;
+    }
+
+    public async selectWorkspaceFolder(): Promise {
+        let workspaceFolderSetting: string = getWorkspaceFolder();
+        if (workspaceFolderSetting.trim() === "") {
+            workspaceFolderSetting = await this.determineLeetCodeFolder();
+            if (workspaceFolderSetting === "") {
+                // User cancelled
+                return workspaceFolderSetting;
+            }
+        }
+        let needAsk: boolean = true;
+        await fse.ensureDir(workspaceFolderSetting);
+        for (const folder of vscode.workspace.workspaceFolders || []) {
+            if (this.isSubFolder(folder.uri.fsPath, workspaceFolderSetting)) {
+                needAsk = false;
+            }
+        }
+
+        if (needAsk) {
+            const choice: string | undefined = await vscode.window.showQuickPick(
+                [
+                    OpenOption.justOpenFile,
+                    OpenOption.openInCurrentWindow,
+                    OpenOption.openInNewWindow,
+                    OpenOption.addToWorkspace,
+                ],
+                { placeHolder: "The LeetCode workspace folder is not opened in VS Code, would you like to open it?" },
+            );
+
+            // Todo: generate file first
+            switch (choice) {
+                case OpenOption.justOpenFile:
+                    return workspaceFolderSetting;
+                case OpenOption.openInCurrentWindow:
+                    await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), false);
+                    return "";
+                case OpenOption.openInNewWindow:
+                    await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(workspaceFolderSetting), true);
+                    return "";
+                case OpenOption.addToWorkspace:
+                    vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders?.length ?? 0, 0, { uri: vscode.Uri.file(workspaceFolderSetting) });
+                    break;
+                default:
+                    return "";
+            }
+        }
+
+        return systemUtils.useWsl() ? systemUtils.toWslPath(workspaceFolderSetting) : workspaceFolderSetting;
+    }
+
+    public async showProblemInternal(node: IProblem): Promise {
+        try {
+            const language: string | undefined = await this.fetchProblemLanguage();
+            if (!language) {
+                return;
+            }
+
+            const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode-problem-rating");
+            const workspaceFolder: string = await this.selectWorkspaceFolder();
+            if (!workspaceFolder) {
+                return;
+            }
+
+            const fileFolder: string = leetCodeConfig
+                .get(`filePath.${language}.folder`, leetCodeConfig.get(`filePath.default.folder`, ""))
+                .trim();
+            const fileName: string = leetCodeConfig
+                .get(
+                    `filePath.${language}.filename`,
+                    leetCodeConfig.get(`filePath.default.filename`) || genFileName(node, language),
+                )
+                .trim();
+
+            let finalPath: string = path.join(workspaceFolder, fileFolder, fileName);
+
+            if (finalPath) {
+                finalPath = await this.resolveRelativePath(finalPath, node, language);
+                if (!finalPath) {
+                    logOutput.appendLine("Showing problem canceled by user.");
+                    return;
+                }
+            }
+
+            finalPath = systemUtils.useWsl() ? await systemUtils.toWinPath(finalPath) : finalPath;
+
+            const descriptionConfig: IDescriptionConfiguration = getDescriptionConfiguration();
+            const needTranslation: boolean = isUseEndpointTranslation();
+
+            await executeService.showProblem(node, language, finalPath, descriptionConfig.showInComment, needTranslation);
+            const promises: any[] = [
+                vscode.window.showTextDocument(vscode.Uri.file(finalPath), { preview: false, viewColumn: vscode.ViewColumn.One }),
+                promptHintMessage(
+                    "hint.commentDescription",
+                    'You can config how to show the problem description through "leetcode-problem-rating.showDescription".',
+                    "Open settings",
+                    (): Promise => openSettingsEditor("leetcode-problem-rating.showDescription"),
+                ),
+            ];
+            if (descriptionConfig.showInWebview) {
+                promises.push(this.showDescriptionView(node));
+            }
+
+            await Promise.all(promises);
+        } catch (error) {
+            await promptForOpenOutputChannel(`${error} 请查看控制台信息~`, DialogType.error);
+        }
+    }
+
+    public async showDescriptionView(node: IProblem): Promise {
+        return this.previewProblem(node, enableSideMode());
+    }
+
+    public async previewProblem(input: IProblem | Uri, isSideMode: boolean = false): Promise {
+        let node: IProblem;
+        if (input instanceof Uri) {
+            const activeFilePath: string = input.fsPath;
+            const id: string = await getNodeIdFromFile(activeFilePath);
+            if (!id) {
+                window.showErrorMessage(`Failed to resolve the problem id from file: ${activeFilePath}.`);
+                return;
+            }
+            const cachedNode: IProblem | undefined = treeViewController.getNodeById(id);
+            if (!cachedNode) {
+                window.showErrorMessage(`Failed to resolve the problem with id: ${id}.`);
+                return;
+            }
+            node = cachedNode;
+            // Move the preview page aside if it's triggered from Code Lens
+            isSideMode = true;
+        } else {
+            node = input;
+        }
+        const needTranslation: boolean = isUseEndpointTranslation();
+        const descString: string = await executeService.getDescription(node.qid, needTranslation);
+        previewService.show(descString, node, isSideMode);
+    }
+
+
+    public async searchScoreRange(): Promise {
+        const twoFactor: string | undefined = await vscode.window.showInputBox({
+            prompt: "输入分数范围 低分-高分 例如: 1500-1600",
+            ignoreFocusOut: true,
+            validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
+        });
+
+        // vscode.window.showErrorMessage(twoFactor || "输入错误");
+        const tt = Object.assign({}, SearchNode, {
+            value: twoFactor,
+            type: SearchSetType.ScoreRange,
+            time: Math.floor(Date.now() / 1000)
+        });
+        treeViewController.insertSearchSet(tt);
+        await treeDataService.refresh();
+    }
+
+    public async searchContest(): Promise {
+        const twoFactor: string | undefined = await vscode.window.showInputBox({
+            prompt: "单期数 例如: 300 或者 输入期数范围 低期数-高期数 例如: 303-306",
+            ignoreFocusOut: true,
+            validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
+        });
+
+        // vscode.window.showErrorMessage(twoFactor || "输入错误");
+        const tt = Object.assign({}, SearchNode, {
+            value: twoFactor,
+            type: SearchSetType.Context,
+            time: Math.floor(Date.now() / 1000)
+        });
+        treeViewController.insertSearchSet(tt);
+        await treeDataService.refresh();
+    }
+
+
+
+    public async searchUserContest(): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+        try {
+            const needTranslation: boolean = isUseEndpointTranslation();
+            const solution: string = await executeService.getUserContest(needTranslation, statusBarService.getUser() || "");
+            const query_result = JSON.parse(solution);
+            const tt: userContestRanKingBase = Object.assign({}, userContestRankingObj, query_result.userContestRanking);
+            eventService.emit("searchUserContest", tt);
+        } catch (error) {
+            logOutput.appendLine(error.toString());
+            await promptForOpenOutputChannel("Failed to fetch today question. 请查看控制台信息~", DialogType.error);
+        }
+    }
+    public async searchToday(): Promise {
+        if (!statusBarService.getUser()) {
+            promptForSignIn();
+            return;
+        }
+        try {
+            const needTranslation: boolean = isUseEndpointTranslation();
+            const solution: string = await executeService.getTodayQuestion(needTranslation);
+            const query_result = JSON.parse(solution);
+            // const titleSlug: string = query_result.titleSlug
+            // const questionId: string = query_result.questionId
+            const fid: string = query_result.fid;
+            if (fid) {
+                const tt = Object.assign({}, SearchNode, {
+                    value: fid,
+                    type: SearchSetType.Day,
+                    time: Math.floor(Date.now() / 1000),
+                    todayData: query_result,
+                });
+                treeViewController.insertSearchSet(tt);
+                await treeDataService.refresh();
+            }
+
+        } catch (error) {
+            logOutput.appendLine(error.toString());
+            await promptForOpenOutputChannel("Failed to fetch today question. 请查看控制台信息~", DialogType.error);
+        }
+    }
+
+
+
+
+    public async parseProblemsToPicks(p: Promise): Promise>> {
+        return new Promise(async (resolve: (res: Array>) => void): Promise => {
+            const picks: Array> = (await p).map((problem: IProblem) => Object.assign({}, {
+                label: `${this.parseProblemDecorator(problem.state, problem.locked)}${problem.id}.${problem.name}`,
+                description: `QID:${problem.qid}`,
+                detail: ((problem.scoreData?.score || "0") > "0" ? ("score: " + problem.scoreData?.score + " , ") : "") + `AC rate: ${problem.passRate}, Difficulty: ${problem.difficulty}`,
+                value: problem,
+            }));
+            resolve(picks);
+        });
+    }
+
+    public parseProblemDecorator(state: ProblemState, locked: boolean): string {
+        switch (state) {
+            case ProblemState.AC:
+                return "$(check) ";
+            case ProblemState.NotAC:
+                return "$(x) ";
+            default:
+                return locked ? "$(lock) " : "";
+        }
+    }
+
+    public async resolveRelativePath(relativePath: string, node: IProblem, selectedLanguage: string): Promise {
+        let tag: string = "";
+        if (/\$\{ tag \} /i.test(relativePath)) {
+            tag = (await this.resolveTagForProblem(node)) || "";
+        }
+
+        let company: string = "";
+        if (/\$\{company\}/i.test(relativePath)) {
+            company = (await this.resolveCompanyForProblem(node)) || "";
+        }
+
+        let errorMsg: string;
+        return relativePath.replace(/\$\{(.*?)\}/g, (_substring: string, ...args: string[]) => {
+            const placeholder: string = args[0].toLowerCase().trim();
+            switch (placeholder) {
+                case "id":
+                    return node.id;
+                case "name":
+                    return node.name;
+                case "camelcasename":
+                    return lodash.camelCase(node.name);
+                case "pascalcasename":
+                    return lodash.upperFirst(lodash.camelCase(node.name));
+                case "kebabcasename":
+                case "kebab-case-name":
+                    return lodash.kebabCase(node.name);
+                case "snakecasename":
+                case "snake_case_name":
+                    return lodash.snakeCase(node.name);
+                case "ext":
+                    return genFileExt(selectedLanguage);
+                case "language":
+                    return selectedLanguage;
+                case "difficulty":
+                    return node.difficulty.toLocaleLowerCase();
+                case "tag":
+                    return tag;
+                case "company":
+                    return company;
+                default:
+                    errorMsg = `The config '${placeholder}' is not supported.`;
+                    logOutput.appendLine(errorMsg);
+                    throw new Error(errorMsg);
+            }
+        });
+    }
+
+    public async resolveTagForProblem(problem: IProblem): Promise {
+        if (problem.tags.length === 1) {
+            return problem.tags[0];
+        }
+        return await vscode.window.showQuickPick(
+            problem.tags,
+            {
+                matchOnDetail: true,
+                placeHolder: "Multiple tags available, please select one",
+                ignoreFocusOut: true,
+            },
+        );
+    }
+
+    public async resolveCompanyForProblem(problem: IProblem): Promise {
+        if (problem.companies.length === 1) {
+            return problem.companies[0];
+        }
+        return await vscode.window.showQuickPick(problem.companies, {
+            matchOnDetail: true,
+            placeHolder: "Multiple tags available, please select one",
+            ignoreFocusOut: true,
+        });
+    }
+
+
+    public insertSearchSet(tt: ISearchSet) {
+        this.searchSet.set(tt.value, tt);
+    }
+    public clearUserScore() {
+        this.waitUserContest = false;
+        this.waitTodayQuestion = false;
+        this.searchSet = new Map();
+    }
+
+    public checkSubmit(e: ISubmitEvent) {
+        if (e.sub_type == "submit" && e.accepted) {
+            const day_start = new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000; //获取当天零点的时间
+            const day_end = new Date(new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1).getTime() / 1000; //获取当天23:59:59的时间
+            let need_get_today: boolean = false;
+            this.searchSet.forEach(element => {
+                if (element.type == SearchSetType.Day) {
+                    if (day_start <= element.time && element.time <= day_end) {
+                        if (e.fid == element.value) {
+                            need_get_today = true;
+                        }
+                    }
+                }
+            });
+            if (need_get_today) {
+                this.searchToday();
+            }
+        }
+    }
+
+    public async refreshCheck(): Promise {
+        if (!statusBarService.getUser()) {
+            return;
+        }
+        const day_start = new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000; //获取当天零点的时间
+        const day_end = new Date(new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1).getTime() / 1000; //获取当天23:59:59的时间
+        let need_get_today: boolean = true;
+        this.searchSet.forEach(element => {
+            if (element.type == SearchSetType.Day) {
+                if (day_start <= element.time && element.time <= day_end) {
+                    need_get_today = false;
+                } else {
+                    this.waitTodayQuestion = false;
+                }
+            }
+        });
+        if (need_get_today && !this.waitTodayQuestion) {
+            this.waitTodayQuestion = true;
+            await this.searchToday();
+        }
+        let user_score = statusBarService.getUserContestScore();
+        if (!user_score && !this.waitUserContest) {
+            this.waitUserContest = true;
+            await this.searchUserContest();
+        }
+    }
+
+    public async refreshCache(): Promise {
+        const temp_searchSet: Map = this.searchSet;
+        const temp_waitTodayQuestion: boolean = this.waitTodayQuestion;
+        const temp_waitUserContest: boolean = this.waitUserContest;
+        this.dispose();
+        let user_score = statusBarService.getUserContestScore();
+        for (const problem of await this.listProblems()) {
+            this.explorerNodeMap.set(problem.id, new NodeModel(problem, true, user_score));
+            for (const company of problem.companies) {
+                this.companySet.add(company);
+            }
+            for (const tag of problem.tags) {
+                this.tagSet.add(tag);
+            }
+        }
+        this.searchSet = temp_searchSet;
+        this.waitTodayQuestion = temp_waitTodayQuestion;
+        this.waitUserContest = temp_waitUserContest;
+    }
+
+    public getRootNodes(): NodeModel[] {
+        let user_score = statusBarService.getUserContestScore();
+        const baseNode: NodeModel[] = [
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.All,
+                name: Category.All,
+                rootNodeSortId: RootNodeSort.All,
+            }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.Difficulty,
+                name: Category.Difficulty,
+                rootNodeSortId: RootNodeSort.Difficulty,
+            }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.Tag,
+                name: Category.Tag,
+                rootNodeSortId: RootNodeSort.Tag,
+            }), false),
+            // new NodeModel(Object.assign({}, defaultProblem, {
+            //     id: Category.Company,
+            //     name: Category.Company,
+            //     rootNodeSortId: RootNodeSort.Company,
+            // }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.Favorite,
+                name: Category.Favorite,
+                rootNodeSortId: RootNodeSort.Favorite,
+            }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.Score,
+                name: Category.Score,
+                rootNodeSortId: RootNodeSort.Score,
+            }), false, user_score),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: Category.Choice,
+                name: Category.Choice,
+                rootNodeSortId: RootNodeSort.Choice,
+            }), false),
+        ];
+        this.searchSet.forEach(element => {
+            if (element.type == SearchSetType.Day) {
+                const curDate = new Date(element.time * 1000);
+                baseNode.push(new NodeModel(Object.assign({}, defaultProblem, {
+                    id: element.type,
+                    name: "[" + (curDate.getFullYear()) + "-" + (curDate.getMonth() + 1) + "-" + (curDate.getDate()) + "]" + SearchSetTypeName[SearchSetType.Day],
+                    input: element.value,
+                    isSearchResult: true,
+                    rootNodeSortId: RootNodeSort[element.type],
+                    todayData: element.todayData
+                }), false));
+            } else {
+                baseNode.push(new NodeModel(Object.assign({}, defaultProblem, {
+                    id: element.type,
+                    name: SearchSetTypeName[element.type] + element.value,
+                    input: element.value,
+                    isSearchResult: true,
+                    rootNodeSortId: RootNodeSort[element.type],
+                }), false));
+            }
+        });
+        baseNode.sort(function (a: NodeModel, b: NodeModel): number {
+            if (a.rootNodeSortId < b.rootNodeSortId) {
+                return -1;
+            } else if (a.rootNodeSortId > b.rootNodeSortId) {
+                return 1;
+            }
+            return 0;
+        });
+        return baseNode;
+    }
+
+    public getScoreRangeNodes(rank_range: string): NodeModel[] {
+        const sorceNode: NodeModel[] = [];
+        const rank_r: Array = rank_range.split("-");
+        let rank_a = Number(rank_r[0]);
+        let rank_b = Number(rank_r[1]);
+        if (rank_a > 0 && rank_b > 0) {
+            if (rank_a > rank_b) {
+                const rank_c: number = rank_a;
+                rank_a = rank_b;
+                rank_b = rank_c;
+            }
+
+            this.explorerNodeMap.forEach(element => {
+                if (!this.canShow(element)) {
+                    return;
+                }
+                if (rank_a <= Number(element.score) && Number(element.score) <= rank_b) {
+                    sorceNode.push(element);
+                }
+            });
+        }
+        return this.applySortingStrategy(sorceNode);
+    }
+
+    public canShow(element: NodeModel) {
+        if (isHideSolvedProblem() && element.state === ProblemState.AC) {
+            return false;
+        }
+        if (isHideScoreProblem(element, element.user_score)) {
+            return false;
+        }
+        return true;
+    }
+
+    public getContextNodes(rank_range: string): NodeModel[] {
+        const sorceNode: NodeModel[] = [];
+        const rank_r: Array = rank_range.split("-");
+        let rank_a = Number(rank_r[0]);
+        let rank_b = Number(rank_r[1]);
+        if (rank_a > 0) {
+            this.explorerNodeMap.forEach(element => {
+                if (!this.canShow(element)) {
+                    return;
+                }
+                const slu = element.ContestSlug;
+                const slu_arr: Array = slu.split("-");
+                const slu_id = Number(slu_arr[slu_arr.length - 1]);
+                if (rank_b > 0 && rank_a <= slu_id && slu_id <= rank_b) {
+                    sorceNode.push(element);
+                } else if (rank_a == slu_id) {
+                    sorceNode.push(element);
+                }
+            });
+        }
+        return this.applySortingStrategy(sorceNode);
+    }
+    public getDayNodes(element: NodeModel | undefined): NodeModel[] {
+        const rank_range: string = element?.input || "";
+        const sorceNode: NodeModel[] = [];
+        if (rank_range) {
+            this.explorerNodeMap.forEach(new_node => {
+                if (new_node.id == rank_range) {
+                    new_node.todayData = element?.todayData;
+                    sorceNode.push(new_node);
+                }
+            });
+        }
+        return this.applySortingStrategy(sorceNode);
+    }
+
+    public getAllNodes(): NodeModel[] {
+        return this.applySortingStrategy(
+            Array.from(this.explorerNodeMap.values()).filter(p => this.canShow(p)),
+        );
+    }
+
+    public getAllDifficultyNodes(): NodeModel[] {
+        const res: NodeModel[] = [];
+        res.push(
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Difficulty}.Easy`,
+                name: "Easy",
+            }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Difficulty}.Medium`,
+                name: "Medium",
+            }), false),
+            new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Difficulty}.Hard`,
+                name: "Hard",
+            }), false),
+        );
+        this.sortSubCategoryNodes(res, Category.Difficulty);
+        return res;
+    }
+
+    public getAllScoreNodes(user_score: number): NodeModel[] {
+        const res: NodeModel[] = [];
+        const score_array: Array = ["3300", "3200", "3100", "3000", "2900", "2800", "2700", "2600", "2500", "2400", "2300", "2200", "2100", "2000", "1900", "1800", "1700", "1600", "1500", "1400", "1300", "1200", "1100"];
+        score_array.forEach(element => {
+            const temp_num = Number(element);
+            const diff = Math.abs(temp_num - user_score);
+            if (diff <= 200) {
+                res.push(new NodeModel(Object.assign({}, defaultProblem, {
+                    id: `${Category.Score}.${element}`,
+                    name: `${element}`,
+                }), false, user_score));
+            }
+        });
+
+        this.sortSubCategoryNodes(res, Category.Score);
+        return res;
+    }
+
+    public getAllChoiceNodes(): NodeModel[] {
+        const res: NodeModel[] = [];
+
+        const all_choice = treeDataService.getChoiceData();
+        all_choice.forEach(element => {
+            res.push(new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Choice}.${element.id}`,
+                name: `${element.name}`,
+            }), false));
+        });
+        this.sortSubCategoryNodes(res, Category.Choice);
+        return res;
+    }
+
+    public getAllCompanyNodes(): NodeModel[] {
+        const res: NodeModel[] = [];
+        for (const company of this.companySet.values()) {
+            res.push(new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Company}.${company}`,
+                name: lodash.startCase(company),
+            }), false));
+        }
+        this.sortSubCategoryNodes(res, Category.Company);
+        return res;
+    }
+
+    public getAllTagNodes(): NodeModel[] {
+        const res: NodeModel[] = [];
+        for (const tag of this.tagSet.values()) {
+            res.push(new NodeModel(Object.assign({}, defaultProblem, {
+                id: `${Category.Tag}.${tag}`,
+                name: lodash.startCase(tag),
+            }), false));
+        }
+        this.sortSubCategoryNodes(res, Category.Tag);
+        return res;
+    }
+
+    public getNodeById(id: string): NodeModel | undefined {
+        return this.explorerNodeMap.get(id);
+    }
+
+    public getFavoriteNodes(): NodeModel[] {
+        const res: NodeModel[] = [];
+        for (const node of this.explorerNodeMap.values()) {
+            if (!this.canShow(node)) {
+                continue;
+            }
+            if (node.isFavorite) {
+                res.push(node);
+            }
+        }
+        return this.applySortingStrategy(res);
+    }
+
+    public getChildrenNodesById(id: string): NodeModel[] {
+        // The sub-category node's id is named as {Category.SubName}
+        const metaInfo: string[] = id.split(".");
+        const res: NodeModel[] = [];
+
+        const choiceQuestionId: Map = new Map();
+        if (metaInfo[0] == Category.Choice) {
+            const all_choice = treeDataService.getChoiceData();
+            all_choice.forEach(element => {
+                if (element.id == metaInfo[1]) {
+                    element.questions.forEach(kk => {
+                        choiceQuestionId[kk] = true;
+                    });
+                    return;
+                }
+            });
+        }
+
+        for (const node of this.explorerNodeMap.values()) {
+            if (!this.canShow(node)) {
+                continue;
+            }
+            switch (metaInfo[0]) {
+                case Category.Company:
+                    if (node.companies.indexOf(metaInfo[1]) >= 0) {
+                        res.push(node);
+                    }
+                    break;
+                case Category.Difficulty:
+                    if (node.difficulty === metaInfo[1]) {
+                        res.push(node);
+                    }
+                    break;
+                case Category.Tag:
+                    if (node.tags.indexOf(metaInfo[1]) >= 0) {
+                        res.push(node);
+                    }
+                    break;
+                case Category.Score:
+                    if (node.score > "0") {
+                        const check_rank = toNumber(metaInfo[1]);
+                        const node_rank = toNumber(node.score);
+                        if (check_rank <= node_rank && node_rank < check_rank + 100) {
+                            res.push(node);
+                        }
+                    }
+                    break;
+                case Category.Choice:
+                    if (choiceQuestionId[Number(node.qid)]) {
+                        res.push(node);
+                    }
+            }
+        }
+        return this.applySortingStrategy(res);
+    }
+
+    public dispose(): void {
+        this.explorerNodeMap.clear();
+        this.companySet.clear();
+        this.tagSet.clear();
+    }
+
+    private sortSubCategoryNodes(subCategoryNodes: NodeModel[], category: Category): void {
+        switch (category) {
+            case Category.Difficulty:
+                subCategoryNodes.sort((a: NodeModel, b: NodeModel): number => {
+                    function getValue(input: NodeModel): number {
+                        switch (input.name.toLowerCase()) {
+                            case "easy":
+                                return 1;
+                            case "medium":
+                                return 2;
+                            case "hard":
+                                return 3;
+                            default:
+                                return Number.MAX_SAFE_INTEGER;
+                        }
+                    }
+                    return getValue(a) - getValue(b);
+                });
+                break;
+            case Category.Tag:
+            case Category.Company:
+                subCategoryNodes.sort((a: NodeModel, b: NodeModel): number => {
+                    if (a.name === "Unknown") {
+                        return 1;
+                    } else if (b.name === "Unknown") {
+                        return -1;
+                    } else {
+                        return Number(a.name > b.name) - Number(a.name < b.name);
+                    }
+                });
+                break;
+            default:
+                break;
+        }
+    }
+
+    private applySortingStrategy(nodes: NodeModel[]): NodeModel[] {
+        const strategy: SortingStrategy = getSortingStrategy();
+        switch (strategy) {
+            case SortingStrategy.AcceptanceRateAsc: return nodes.sort((x: NodeModel, y: NodeModel) => Number(x.acceptanceRate) - Number(y.acceptanceRate));
+            case SortingStrategy.AcceptanceRateDesc: return nodes.sort((x: NodeModel, y: NodeModel) => Number(y.acceptanceRate) - Number(x.acceptanceRate));
+            case SortingStrategy.ScoreAsc: return nodes.sort((x: NodeModel, y: NodeModel) => Number(x.score) - Number(y.score));
+            case SortingStrategy.ScoreDesc: return nodes.sort((x: NodeModel, y: NodeModel) => Number(y.score) - Number(x.score));
+            case SortingStrategy.IDDesc: return nodes.sort((x: NodeModel, y: NodeModel) => Number(y.id) - Number(x.id));
+            default: return nodes;
+        }
+    }
+}
+
+export const treeViewController: TreeViewController = new TreeViewController();
diff --git a/src/dao/choiceDao.ts b/src/dao/choiceDao.ts
new file mode 100644
index 0000000..ec3bba4
--- /dev/null
+++ b/src/dao/choiceDao.ts
@@ -0,0 +1,2095 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/dao/choiceDao.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 11:34:10 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+class ChoiceDao {
+
+    public getChoiceData() {
+        return this.choiceData;
+    }
+
+    private choiceData = [
+        {
+            "id": "shopee",
+            "name": "Shopee精选",
+            "questions": [
+                341,
+                1000447,
+                1000446,
+                1000445,
+                1000444,
+                1000443,
+                232,
+                871,
+                102,
+                101,
+                15,
+                460,
+                456,
+                448,
+                179,
+                432,
+                48,
+                37,
+                20,
+                146
+            ],
+
+        },
+        {
+            "id": "binary-search",
+            "name": "二分查找",
+            "questions": [
+                4,
+                1550,
+                540,
+                1056,
+                33,
+                34,
+                35,
+                1059,
+                1060,
+                1083,
+                2047,
+                69,
+                1605,
+                74,
+                1612,
+                1102,
+                1615,
+                81,
+                1621,
+                1122,
+                611,
+                1645,
+                1134,
+                1646,
+                1143,
+                633,
+                1149,
+                644,
+                1672,
+                1675,
+                1679,
+                658,
+                1684,
+                153,
+                154,
+                668,
+                1185,
+                162,
+                167,
+                1192,
+                1730,
+                718,
+                719,
+                1232,
+                209,
+                1753,
+                222,
+                1249,
+                1766,
+                745,
+                1771,
+                1262,
+                240,
+                1290,
+                270,
+                786,
+                275,
+                788,
+                278,
+                792,
+                794,
+                1307,
+                287,
+                802,
+                1831,
+                1832,
+                809,
+                300,
+                302,
+                1326,
+                1851,
+                1352,
+                853,
+                350,
+                1374,
+                352,
+                1886,
+                1891,
+                1384,
+                363,
+                367,
+                882,
+                374,
+                378,
+                894,
+                1918,
+                1408,
+                1413,
+                1929,
+                907,
+                912,
+                1946,
+                923,
+                1957,
+                1966,
+                947,
+                436,
+                1463,
+                441,
+                1468,
+                1984,
+                1476,
+                1486,
+                2000,
+                2006,
+                2018,
+                2027,
+                2036,
+                2045,
+                1023
+            ],
+
+        },
+        {
+            "id": "lcof",
+            "name": "剑指 Offer",
+            "questions": [
+                1000228,
+                1000229,
+                1000230,
+                1000231,
+                1000232,
+                1000233,
+                1000234,
+                1000235,
+                1000236,
+                1000237,
+                1000238,
+                1000239,
+                1000240,
+                1000241,
+                1000242,
+                1000243,
+                1000244,
+                1000245,
+                1000246,
+                1000247,
+                1000248,
+                1000249,
+                1000250,
+                1000251,
+                1000252,
+                1000253,
+                1000254,
+                1000255,
+                1000256,
+                1000257,
+                1000258,
+                1000259,
+                1000260,
+                1000261,
+                1000262,
+                1000263,
+                1000264,
+                1000265,
+                1000266,
+                1000267,
+                1000268,
+                1000269,
+                1000270,
+                1000271,
+                1000272,
+                1000273,
+                1000274,
+                1000275,
+                1000276,
+                1000277,
+                1000278,
+                1000279,
+                1000280,
+                1000281,
+                1000282,
+                1000283,
+                1000284,
+                1000285,
+                1000286,
+                1000287,
+                1000288,
+                1000289,
+                1000290,
+                1000291,
+                1000292,
+                1000293,
+                1000294,
+                1000295,
+                1000296,
+                1000297,
+                1000298,
+                1000299,
+                1000300,
+                1000301,
+                1000302,
+                1000303,
+                1000304,
+                1000305,
+                1000306,
+                1000307,
+                1000308,
+                1000309,
+                1000310,
+                1000311,
+                1000312,
+                1000313,
+                1000314,
+                1000315,
+                1000316,
+                1000317,
+                1000318,
+                1000319,
+                1000320,
+                1000321,
+                1000322,
+                1000323,
+                1000324,
+                1000325,
+                1000326,
+                1000327,
+                1000328,
+                1000329,
+                1000330,
+                1000331,
+                1000332,
+                1000333,
+                1000334,
+                1000335,
+                1000336,
+                1000337,
+                1000338,
+                1000339,
+                1000340,
+                1000341,
+                1000342,
+                1000343,
+                1000344,
+                1000345,
+                1000346,
+                100273,
+                100274,
+                100275,
+                100276,
+                100277,
+                100278,
+                100279,
+                100280,
+                100281,
+                100282,
+                100283,
+                100284,
+                100285,
+                100286,
+                100287,
+                100288,
+                100289,
+                100290,
+                100291,
+                100292,
+                100293,
+                100294,
+                100295,
+                100296,
+                100297,
+                100298,
+                100299,
+                100300,
+                100301,
+                100302,
+                100303,
+                100304,
+                100305,
+                100306,
+                100307,
+                100308,
+                100309,
+                100310,
+                100311,
+                100312,
+                100313,
+                100314,
+                100315,
+                100316,
+                100317,
+                100318,
+                100319,
+                100320,
+                100321,
+                100322,
+                100323,
+                100324,
+                100325,
+                100326,
+                100327,
+                100328,
+                100329,
+                100330,
+                100331,
+                100332,
+                100333,
+                100334,
+                100335,
+                100336,
+                100337,
+                100338,
+                100339,
+                100340,
+                100341,
+                100342,
+                100343,
+                100344,
+                100345,
+                100346,
+                100347
+            ],
+
+        },
+        {
+            "id": "e8X3pBZi",
+            "name": "剑指 Offer(专项突击版)",
+            "questions": [
+                1000228,
+                1000229,
+                1000230,
+                1000231,
+                1000232,
+                1000233,
+                1000234,
+                1000235,
+                1000236,
+                1000237,
+                1000238,
+                1000239,
+                1000240,
+                1000241,
+                1000242,
+                1000243,
+                1000244,
+                1000245,
+                1000246,
+                1000247,
+                1000248,
+                1000249,
+                1000250,
+                1000251,
+                1000252,
+                1000253,
+                1000254,
+                1000255,
+                1000256,
+                1000257,
+                1000258,
+                1000259,
+                1000260,
+                1000261,
+                1000262,
+                1000263,
+                1000264,
+                1000265,
+                1000266,
+                1000267,
+                1000268,
+                1000269,
+                1000270,
+                1000271,
+                1000272,
+                1000273,
+                1000274,
+                1000275,
+                1000276,
+                1000277,
+                1000278,
+                1000279,
+                1000280,
+                1000281,
+                1000282,
+                1000283,
+                1000284,
+                1000285,
+                1000286,
+                1000287,
+                1000288,
+                1000289,
+                1000290,
+                1000291,
+                1000292,
+                1000293,
+                1000294,
+                1000295,
+                1000296,
+                1000297,
+                1000298,
+                1000299,
+                1000300,
+                1000301,
+                1000302,
+                1000303,
+                1000304,
+                1000305,
+                1000306,
+                1000307,
+                1000308,
+                1000309,
+                1000310,
+                1000311,
+                1000312,
+                1000313,
+                1000314,
+                1000315,
+                1000316,
+                1000317,
+                1000318,
+                1000319,
+                1000320,
+                1000321,
+                1000322,
+                1000323,
+                1000324,
+                1000325,
+                1000326,
+                1000327,
+                1000328,
+                1000329,
+                1000330,
+                1000331,
+                1000332,
+                1000333,
+                1000334,
+                1000335,
+                1000336,
+                1000337,
+                1000338,
+                1000339,
+                1000340,
+                1000341,
+                1000342,
+                1000343,
+                1000344,
+                1000345,
+                1000346
+            ],
+
+        },
+        {
+            "id": "xb9nqhhg",
+            "name": "剑指 Offer(第 2 版)",
+            "questions": [
+                100319,
+                100328,
+                100327,
+                100326,
+                100325,
+                100324,
+                100323,
+                100322,
+                100321,
+                100320,
+                100329,
+                100318,
+                100317,
+                100316,
+                100315,
+                100314,
+                100313,
+                100312,
+                100311,
+                100338,
+                100347,
+                100346,
+                100345,
+                100344,
+                100343,
+                100342,
+                100341,
+                100340,
+                100339,
+                100310,
+                100337,
+                100336,
+                100335,
+                100334,
+                100333,
+                100332,
+                100331,
+                100330,
+                100282,
+                100291,
+                100290,
+                100289,
+                100288,
+                100287,
+                100286,
+                100285,
+                100284,
+                100283,
+                100292,
+                100281,
+                100280,
+                100279,
+                100278,
+                100277,
+                100276,
+                100275,
+                100274,
+                100301,
+                100309,
+                100308,
+                100307,
+                100306,
+                100305,
+                100304,
+                100303,
+                100302,
+                100273,
+                100300,
+                100299,
+                100298,
+                100297,
+                100296,
+                100295,
+                100294,
+                100293
+            ],
+
+        },
+        {
+            "id": "lccup",
+            "name": "力扣杯竞赛真题集",
+            "questions": [
+                1000134,
+                1000222,
+                1000362,
+                1000367,
+                1000368,
+                1000369,
+                1000370,
+                1000371,
+                1000373,
+                1000374,
+                1000375,
+                1000130,
+                1000131,
+                1000132,
+                1000133,
+                100094,
+                1000138,
+                1000139,
+                1000140,
+                1000146,
+                1000147,
+                1000056,
+                1000057,
+                1000058,
+                1000059,
+                100092,
+                100093,
+                1000062,
+                1000063,
+                1000218,
+                100107,
+                1000085,
+                1000086,
+                1000087,
+                1000088,
+                1000089,
+                1000090,
+                1000091,
+                1052,
+                1053,
+                1000093,
+                1000215,
+                1000216,
+                100096,
+                1058,
+                1059,
+                1060,
+                1061,
+                1000219,
+                1000220,
+                1000223,
+                1000224,
+                1000221,
+                1000359,
+                1000361,
+                813,
+                1069
+            ],
+
+        },
+        {
+            "id": "dynamic-programming",
+            "name": "动态规划",
+            "questions": [
+                1025,
+                514,
+                516,
+                5,
+                518,
+                10,
+                526,
+                1042,
+                1559,
+                1051,
+                32,
+                1057,
+                546,
+                1571,
+                1060,
+                549,
+                39,
+                40,
+                1063,
+                42,
+                1067,
+                1068,
+                45,
+                1583,
+                562,
+                53,
+                55,
+                568,
+                62,
+                63,
+                64,
+                576,
+                70,
+                72,
+                1105,
+                1617,
+                600,
+                91,
+                96,
+                1129,
+                1130,
+                1134,
+                115,
+                118,
+                119,
+                120,
+                121,
+                122,
+                123,
+                124,
+                634,
+                1669,
+                646,
+                647,
+                650,
+                139,
+                140,
+                651,
+                1166,
+                1680,
+                1170,
+                152,
+                664,
+                1178,
+                1690,
+                673,
+                1196,
+                174,
+                688,
+                1201,
+                1202,
+                691,
+                698,
+                188,
+                1213,
+                1220,
+                198,
+                712,
+                714,
+                1228,
+                1744,
+                1236,
+                213,
+                727,
+                1240,
+                1242,
+                221,
+                1758,
+                1250,
+                740,
+                741,
+                747,
+                238,
+                751,
+                1263,
+                1789,
+                254,
+                256,
+                1286,
+                264,
+                265,
+                1296,
+                279,
+                1822,
+                1828,
+                294,
+                298,
+                300,
+                304,
+                309,
+                312,
+                1851,
+                322,
+                1352,
+                329,
+                333,
+                337,
+                1361,
+                343,
+                351,
+                867,
+                1893,
+                361,
+                877,
+                368,
+                1906,
+                1398,
+                376,
+                377,
+                1402,
+                1403,
+                896,
+                1924,
+                392,
+                911,
+                923,
+                413,
+                1437,
+                416,
+                418,
+                930,
+                938,
+                435,
+                954,
+                446,
+                1471,
+                1474,
+                452,
+                1989,
+                967,
+                1996,
+                464,
+                977,
+                471,
+                486,
+                487,
+                494,
+                2031,
+                1008,
+                1522,
+                1013,
+                1017,
+                1531,
+                1022,
+                1535
+            ],
+
+        },
+        {
+            "id": "tusmiple",
+            "name": "图森未来",
+            "questions": [
+                718,
+                127,
+                1005,
+                1000428,
+                1000427,
+                1000426,
+                1000425,
+                1000424,
+                1000423,
+                726,
+                522,
+                973,
+                1217,
+                193,
+                1972,
+                171,
+                1957,
+                36,
+                27,
+                1294
+            ],
+
+        },
+        {
+            "id": "graph",
+            "name": "图论",
+            "questions": [
+                317,
+                1912,
+                1389,
+                877,
+                365,
+                871,
+                869,
+                1380,
+                352,
+                863,
+                323,
+                895,
+                310,
+                820,
+                305,
+                1325,
+                813,
+                803,
+                801,
+                1309,
+                1308,
+                794,
+                1986,
+                505,
+                2040,
+                2038,
+                2035,
+                499,
+                490,
+                1492,
+                1485,
+                971,
+                964,
+                1815,
+                960,
+                949,
+                433,
+                1456,
+                1447,
+                1442,
+                417,
+                922,
+                1428,
+                1100,
+                1191,
+                1701,
+                1696,
+                1171,
+                127,
+                1661,
+                1144,
+                1117,
+                1613,
+                1101,
+                1706,
+                1085,
+                1587,
+                1073,
+                1576,
+                547,
+                1058,
+                542,
+                1558,
+                1039,
+                721,
+                1300,
+                269,
+                261,
+                753,
+                744,
+                737,
+                1757,
+                733,
+                1753,
+                210,
+                1032,
+                207,
+                1229,
+                1738,
+                200,
+                1223,
+                695,
+                694,
+                685,
+                684
+            ],
+
+        },
+        {
+            "id": "bytedancecampus",
+            "name": "字节校园",
+            "questions": [
+                69,
+                88,
+                215,
+                206,
+                76,
+                200,
+                72,
+                199,
+                198,
+                92,
+                322,
+                64,
+                56,
+                54,
+                53,
+                948,
+                46,
+                300,
+                94,
+                102,
+                103,
+                232,
+                105,
+                236,
+                239,
+                1000185,
+                1000182,
+                1000183,
+                1000184,
+                121,
+                1000186,
+                1000187,
+                124,
+                135,
+                146,
+                143,
+                142,
+                15,
+                14,
+                141,
+                394,
+                1000188,
+                20,
+                7,
+                129,
+                5,
+                4,
+                3,
+                2,
+                1,
+                128,
+                21,
+                22,
+                23,
+                151,
+                25,
+                152,
+                792,
+                923,
+                31,
+                160,
+                33,
+                415,
+                41,
+                42,
+                43
+            ],
+
+        },
+        {
+            "id": "ponyai",
+            "name": "小马智行 Pony.ai",
+            "questions": [
+                15,
+                1000351,
+                1000350,
+                1000349,
+                92,
+                1000347,
+                148,
+                146,
+                1105,
+                1000352,
+                909,
+                173,
+                1000348,
+                105,
+                39,
+                1860,
+                98,
+                1441
+            ],
+
+        },
+        {
+            "id": "cmbchina-cc",
+            "name": "招商银行信用卡",
+            "questions": [
+                33,
+                124,
+                103,
+                88,
+                199,
+                198,
+                322,
+                64,
+                53,
+                41,
+                1,
+                415,
+                923,
+                22,
+                21,
+                20,
+                15,
+                7,
+                5,
+                3
+            ],
+        },
+        {
+            "id": "data-structures",
+            "name": "数据结构",
+            "questions": [
+                1,
+                2,
+                5,
+                1032,
+                15,
+                1039,
+                20,
+                21,
+                23,
+                24,
+                25,
+                547,
+                36,
+                42,
+                43,
+                44,
+                48,
+                49,
+                560,
+                53,
+                566,
+                56,
+                59,
+                1085,
+                73,
+                1609,
+                75,
+                82,
+                83,
+                84,
+                1107,
+                88,
+                94,
+                98,
+                101,
+                102,
+                103,
+                104,
+                105,
+                108,
+                112,
+                113,
+                118,
+                119,
+                121,
+                124,
+                1661,
+                128,
+                1665,
+                642,
+                136,
+                138,
+                141,
+                142,
+                143,
+                144,
+                145,
+                653,
+                148,
+                155,
+                1693,
+                160,
+                1701,
+                169,
+                173,
+                1710,
+                187,
+                199,
+                203,
+                206,
+                208,
+                1745,
+                211,
+                212,
+                214,
+                215,
+                217,
+                218,
+                729,
+                226,
+                739,
+                230,
+                232,
+                235,
+                236,
+                238,
+                1774,
+                240,
+                242,
+                761,
+                253,
+                766,
+                768,
+                261,
+                783,
+                784,
+                281,
+                290,
+                803,
+                295,
+                297,
+                305,
+                817,
+                1345,
+                323,
+                325,
+                838,
+                334,
+                336,
+                337,
+                347,
+                1371,
+                350,
+                358,
+                871,
+                366,
+                1903,
+                369,
+                378,
+                892,
+                383,
+                387,
+                394,
+                402,
+                409,
+                922,
+                415,
+                1951,
+                1442,
+                1450,
+                435,
+                448,
+                450,
+                451,
+                452,
+                454,
+                456,
+                2009,
+                1008,
+                1014
+            ],
+
+        },
+        {
+            "id": "xb9lfcwi",
+            "name": "程序员面试金典(第 6 版)",
+            "questions": [
+                100352,
+                100353,
+                100354,
+                100355,
+                100356,
+                1000003,
+                1000004,
+                1000005,
+                1000006,
+                1000007,
+                1000008,
+                1000009,
+                1000010,
+                1000011,
+                1000012,
+                1000013,
+                1000015,
+                1000016,
+                1000017,
+                1000018,
+                1000019,
+                1000020,
+                1000021,
+                1000022,
+                1000023,
+                1000024,
+                1000025,
+                1000026,
+                1000027,
+                1000028,
+                1000029,
+                1000030,
+                1000031,
+                1000032,
+                1000033,
+                1000034,
+                1000035,
+                1000036,
+                1000037,
+                1000038,
+                1000039,
+                1000040,
+                1000041,
+                1000042,
+                1000043,
+                1000044,
+                1000045,
+                1000046,
+                1000047,
+                1000048,
+                1000049,
+                1000050,
+                1000051,
+                100158,
+                100159,
+                100160,
+                100161,
+                100162,
+                100163,
+                100164,
+                100167,
+                100168,
+                100169,
+                100170,
+                100171,
+                100172,
+                100173,
+                100174,
+                100175,
+                100176,
+                100177,
+                100178,
+                100179,
+                100180,
+                100181,
+                100182,
+                100183,
+                100184,
+                100185,
+                100186,
+                100187,
+                100188,
+                100195,
+                100196,
+                100197,
+                100198,
+                100199,
+                100200,
+                100201,
+                100202,
+                100203,
+                100228,
+                100229,
+                100230,
+                100231,
+                100232,
+                100233,
+                100240,
+                100241,
+                100242,
+                100258,
+                100259,
+                100260,
+                100261,
+                100262,
+                100348,
+                100349,
+                100350,
+                100351
+            ],
+
+        },
+        {
+            "id": "algorithms",
+            "name": "算法",
+            "questions": [
+                1025,
+                3,
+                4,
+                5,
+                1028,
+                10,
+                11,
+                1036,
+                1037,
+                15,
+                17,
+                19,
+                21,
+                22,
+                1046,
+                542,
+                33,
+                34,
+                35,
+                547,
+                37,
+                1059,
+                39,
+                40,
+                42,
+                45,
+                46,
+                47,
+                557,
+                51,
+                53,
+                55,
+                567,
+                2047,
+                572,
+                62,
+                70,
+                582,
+                72,
+                583,
+                74,
+                1609,
+                76,
+                77,
+                78,
+                79,
+                1101,
+                82,
+                85,
+                90,
+                91,
+                617,
+                1134,
+                116,
+                117,
+                120,
+                123,
+                130,
+                131,
+                132,
+                136,
+                139,
+                1165,
+                146,
+                1171,
+                149,
+                153,
+                159,
+                673,
+                162,
+                167,
+                1192,
+                174,
+                695,
+                189,
+                190,
+                191,
+                198,
+                200,
+                201,
+                202,
+                713,
+                714,
+                715,
+                206,
+                207,
+                209,
+                210,
+                213,
+                221,
+                733,
+                1250,
+                231,
+                239,
+                241,
+                753,
+                254,
+                260,
+                269,
+                1300,
+                278,
+                792,
+                283,
+                286,
+                287,
+                800,
+                300,
+                301,
+                813,
+                309,
+                310,
+                315,
+                322,
+                329,
+                337,
+                340,
+                343,
+                344,
+                865,
+                874,
+                893,
+                895,
+                384,
+                394,
+                908,
+                410,
+                413,
+                416,
+                417,
+                1442,
+                438,
+                460,
+                1485,
+                2019,
+                486,
+                1512,
+                1019,
+                1023
+            ],
+
+        },
+        {
+            "id": "programming-skills",
+            "name": "编程能力",
+            "questions": [
+                2,
+                1031,
+                8,
+                525,
+                23,
+                535,
+                28,
+                43,
+                556,
+                48,
+                49,
+                1584,
+                54,
+                566,
+                58,
+                61,
+                65,
+                66,
+                67,
+                1626,
+                1630,
+                1125,
+                104,
+                110,
+                631,
+                635,
+                642,
+                138,
+                1677,
+                143,
+                146,
+                148,
+                150,
+                1176,
+                155,
+                1693,
+                1708,
+                173,
+                1713,
+                191,
+                1728,
+                1729,
+                1736,
+                713,
+                202,
+                715,
+                208,
+                209,
+                211,
+                214,
+                1752,
+                217,
+                729,
+                224,
+                227,
+                739,
+                742,
+                232,
+                1768,
+                1774,
+                241,
+                242,
+                244,
+                758,
+                251,
+                764,
+                255,
+                1791,
+                771,
+                1797,
+                775,
+                785,
+                2322,
+                281,
+                282,
+                283,
+                295,
+                297,
+                303,
+                304,
+                307,
+                325,
+                838,
+                1349,
+                850,
+                341,
+                859,
+                348,
+                860,
+                1888,
+                353,
+                1894,
+                369,
+                1905,
+                885,
+                890,
+                1915,
+                380,
+                381,
+                1406,
+                1411,
+                389,
+                1930,
+                908,
+                404,
+                1434,
+                1949,
+                1950,
+                931,
+                932,
+                1955,
+                937,
+                946,
+                1458,
+                438,
+                445,
+                1982,
+                449,
+                1477,
+                459,
+                460,
+                1484,
+                1492,
+                990,
+                2015,
+                1512,
+                496,
+                1014,
+                503,
+                1018
+            ],
+
+        },
+        {
+            "id": "meituan",
+            "name": "美团真题",
+            "questions": [
+                1000192,
+                1000193,
+                1000194,
+                1000195,
+                1000196,
+                1000197,
+                1000198,
+                1000199,
+                1000200,
+                1000201,
+                1000202,
+                1000203,
+                1000189,
+                1000190,
+                1000191,
+                257,
+                100158,
+                13,
+                455,
+                45,
+                200,
+                143,
+                139,
+                19,
+                100344,
+                162,
+                177,
+                75,
+                1036,
+                71,
+                475,
+                42,
+                51,
+                440,
+                25
+            ],
+
+        },
+        {
+            "id": "ke",
+            "name": "贝壳找房",
+            "questions": [
+                30,
+                120,
+                113,
+                85,
+                82,
+                209,
+                200,
+                315,
+                56,
+                53,
+                43,
+                2,
+                152,
+                20,
+                19,
+                17,
+                15,
+                14,
+                264,
+                135,
+                4
+            ],
+
+        },
+        {
+            "id": "efficient-winning",
+            "name": "高效制胜",
+            "questions": [
+                230,
+                329,
+                79,
+                720,
+                218,
+                1120,
+                97,
+                483,
+                1508,
+                456,
+                112,
+                496,
+                1008,
+                1013,
+                119,
+                121,
+                122,
+                416,
+                3,
+                11,
+                524,
+                15,
+                18,
+                20,
+                279,
+                28,
+                1,
+                803,
+                167,
+                42,
+                53,
+                825,
+                322,
+                70
+            ],
+
+        },
+        {
+            "id": "2cktkvj",
+            "name": "LeetCode 热题 HOT 100",
+            "questions": [
+                160,
+                236,
+                234,
+                739,
+                226,
+                221,
+                215,
+                208,
+                207,
+                206,
+                200,
+                198,
+                169,
+                238,
+                155,
+                152,
+                148,
+                146,
+                142,
+                141,
+                139,
+                136,
+                647,
+                128,
+                124,
+                322,
+                494,
+                461,
+                448,
+                438,
+                437,
+                416,
+                406,
+                399,
+                394,
+                347,
+                338,
+                337,
+                121,
+                312,
+                309,
+                301,
+                300,
+                297,
+                287,
+                283,
+                279,
+                253,
+                240,
+                239,
+                22,
+                49,
+                48,
+                46,
+                42,
+                39,
+                543,
+                34,
+                33,
+                32,
+                31,
+                538,
+                23,
+                560,
+                21,
+                20,
+                19,
+                17,
+                15,
+                11,
+                10,
+                5,
+                4,
+                3,
+                2,
+                79,
+                114,
+                621,
+                617,
+                105,
+                104,
+                102,
+                101,
+                98,
+                96,
+                94,
+                85,
+                84,
+                1,
+                78,
+                76,
+                75,
+                72,
+                70,
+                581,
+                64,
+                62,
+                56,
+                55,
+                53
+            ],
+
+        },
+        {
+            "id": "7cyqwuv",
+            "name": "力扣杯 - 竞赛合集",
+            "questions": [
+                1000134,
+                1000222,
+                1000362,
+                1000367,
+                1000368,
+                1000369,
+                1000370,
+                1000371,
+                1000373,
+                1000374,
+                1000375,
+                1000130,
+                1000131,
+                1000132,
+                1000133,
+                100094,
+                1000138,
+                1000139,
+                1000140,
+                1000146,
+                1000147,
+                1000056,
+                1000057,
+                1000058,
+                1000059,
+                100092,
+                100093,
+                1000062,
+                1000063,
+                1000216,
+                100107,
+                511,
+                1000085,
+                1000086,
+                1000087,
+                1000088,
+                1000089,
+                1000090,
+                1000091,
+                1052,
+                1053,
+                1000093,
+                1000215,
+                100096,
+                1000218,
+                1058,
+                1059,
+                1060,
+                1061,
+                1000219,
+                1000220,
+                1000223,
+                1000224,
+                1000221,
+                1000359,
+                1000361,
+                1069
+            ],
+
+        },
+        {
+            "id": "ex0k24j",
+            "name": "腾讯精选练习 50 题",
+            "questions": [
+                217,
+                46,
+                53,
+                54,
+                59,
+                61,
+                62,
+                70,
+                78,
+                206,
+                215,
+                88,
+                89,
+                557,
+                344,
+                230,
+                231,
+                104,
+                235,
+                236,
+                237,
+                238,
+                121,
+                122,
+                124,
+                146,
+                4,
+                5,
+                7,
+                8,
+                9,
+                136,
+                11,
+                141,
+                14,
+                15,
+                16,
+                142,
+                2,
+                20,
+                21,
+                148,
+                23,
+                26,
+                155,
+                160,
+                33,
+                292,
+                169,
+                43
+            ],
+
+        },
+        {
+            "id": "2ckc81c",
+            "name": "LeetCode 精选 TOP 面试题",
+            "questions": [
+                1,
+                2,
+                3,
+                4,
+                5,
+                7,
+                8,
+                10,
+                11,
+                13,
+                14,
+                15,
+                17,
+                19,
+                20,
+                21,
+                22,
+                23,
+                26,
+                28,
+                29,
+                33,
+                34,
+                36,
+                38,
+                41,
+                42,
+                44,
+                46,
+                48,
+                49,
+                50,
+                53,
+                54,
+                55,
+                56,
+                62,
+                66,
+                69,
+                70,
+                73,
+                75,
+                76,
+                78,
+                79,
+                84,
+                88,
+                91,
+                94,
+                98,
+                101,
+                102,
+                103,
+                104,
+                105,
+                108,
+                116,
+                118,
+                121,
+                122,
+                124,
+                125,
+                127,
+                128,
+                130,
+                131,
+                134,
+                136,
+                138,
+                139,
+                140,
+                141,
+                146,
+                148,
+                149,
+                150,
+                152,
+                155,
+                160,
+                162,
+                163,
+                166,
+                169,
+                171,
+                172,
+                179,
+                189,
+                190,
+                191,
+                198,
+                200,
+                202,
+                204,
+                206,
+                207,
+                208,
+                210,
+                212,
+                215,
+                217,
+                218,
+                227,
+                230,
+                234,
+                236,
+                237,
+                238,
+                239,
+                240,
+                242,
+                251,
+                253,
+                268,
+                269,
+                277,
+                279,
+                283,
+                285,
+                287,
+                289,
+                295,
+                297,
+                300,
+                308,
+                315,
+                322,
+                324,
+                326,
+                328,
+                329,
+                334,
+                340,
+                341,
+                344,
+                347,
+                348,
+                350,
+                371,
+                378,
+                380,
+                384,
+                387,
+                395,
+                412,
+                454
+            ],
+
+        }
+    ];
+}
+
+
+export const choiceDao: ChoiceDao = new ChoiceDao();
+
+
+
+
+
+
diff --git a/src/dao/scoreDao.ts b/src/dao/scoreDao.ts
new file mode 100644
index 0000000..211ac43
--- /dev/null
+++ b/src/dao/scoreDao.ts
@@ -0,0 +1,43 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/dao/scoreDao.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 11:40:22 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+import { IScoreData } from "../model/Model";
+
+
+
+
+class ScoreDao {
+    private scoreBase = require("../../../resources/data.json");
+
+    public getScoreData(onlineData?): Map {
+
+        let nameSiteMapping = new Map();
+        let temp = this.scoreBase as IScoreData[];
+        if (onlineData) {
+            temp = onlineData;
+        }
+        temp.forEach(element => {
+            // Rating
+            // ID
+            // ContestSlug
+            element.score = "" + Math.floor(element.Rating || 0);
+            nameSiteMapping.set("" + element.ID, element);
+        });
+        return nameSiteMapping;
+    }
+}
+
+
+export const scoreDao: ScoreDao = new ScoreDao();
+
+
+
+
+
+
diff --git a/src/ResourcesData.ts b/src/dao/tagsDao.ts
similarity index 82%
rename from src/ResourcesData.ts
rename to src/dao/tagsDao.ts
index 1c568db..42ee915 100644
--- a/src/ResourcesData.ts
+++ b/src/dao/tagsDao.ts
@@ -1,2080 +1,17 @@
-import { IScoreData } from "./shared";
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/dao/tagsDao.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 11:38:10 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-class ResourcesData {
 
-    private scoreBase = require("../../resources/data.json")
 
-    private choiceData = [
-        {
-            "id": "shopee",
-            "name": "Shopee精选",
-            "questions": [
-                341,
-                1000447,
-                1000446,
-                1000445,
-                1000444,
-                1000443,
-                232,
-                871,
-                102,
-                101,
-                15,
-                460,
-                456,
-                448,
-                179,
-                432,
-                48,
-                37,
-                20,
-                146
-            ],
+class TagsDao {
 
-        },
-        {
-            "id": "binary-search",
-            "name": "二分查找",
-            "questions": [
-                4,
-                1550,
-                540,
-                1056,
-                33,
-                34,
-                35,
-                1059,
-                1060,
-                1083,
-                2047,
-                69,
-                1605,
-                74,
-                1612,
-                1102,
-                1615,
-                81,
-                1621,
-                1122,
-                611,
-                1645,
-                1134,
-                1646,
-                1143,
-                633,
-                1149,
-                644,
-                1672,
-                1675,
-                1679,
-                658,
-                1684,
-                153,
-                154,
-                668,
-                1185,
-                162,
-                167,
-                1192,
-                1730,
-                718,
-                719,
-                1232,
-                209,
-                1753,
-                222,
-                1249,
-                1766,
-                745,
-                1771,
-                1262,
-                240,
-                1290,
-                270,
-                786,
-                275,
-                788,
-                278,
-                792,
-                794,
-                1307,
-                287,
-                802,
-                1831,
-                1832,
-                809,
-                300,
-                302,
-                1326,
-                1851,
-                1352,
-                853,
-                350,
-                1374,
-                352,
-                1886,
-                1891,
-                1384,
-                363,
-                367,
-                882,
-                374,
-                378,
-                894,
-                1918,
-                1408,
-                1413,
-                1929,
-                907,
-                912,
-                1946,
-                923,
-                1957,
-                1966,
-                947,
-                436,
-                1463,
-                441,
-                1468,
-                1984,
-                1476,
-                1486,
-                2000,
-                2006,
-                2018,
-                2027,
-                2036,
-                2045,
-                1023
-            ],
-
-        },
-        {
-            "id": "lcof",
-            "name": "剑指 Offer",
-            "questions": [
-                1000228,
-                1000229,
-                1000230,
-                1000231,
-                1000232,
-                1000233,
-                1000234,
-                1000235,
-                1000236,
-                1000237,
-                1000238,
-                1000239,
-                1000240,
-                1000241,
-                1000242,
-                1000243,
-                1000244,
-                1000245,
-                1000246,
-                1000247,
-                1000248,
-                1000249,
-                1000250,
-                1000251,
-                1000252,
-                1000253,
-                1000254,
-                1000255,
-                1000256,
-                1000257,
-                1000258,
-                1000259,
-                1000260,
-                1000261,
-                1000262,
-                1000263,
-                1000264,
-                1000265,
-                1000266,
-                1000267,
-                1000268,
-                1000269,
-                1000270,
-                1000271,
-                1000272,
-                1000273,
-                1000274,
-                1000275,
-                1000276,
-                1000277,
-                1000278,
-                1000279,
-                1000280,
-                1000281,
-                1000282,
-                1000283,
-                1000284,
-                1000285,
-                1000286,
-                1000287,
-                1000288,
-                1000289,
-                1000290,
-                1000291,
-                1000292,
-                1000293,
-                1000294,
-                1000295,
-                1000296,
-                1000297,
-                1000298,
-                1000299,
-                1000300,
-                1000301,
-                1000302,
-                1000303,
-                1000304,
-                1000305,
-                1000306,
-                1000307,
-                1000308,
-                1000309,
-                1000310,
-                1000311,
-                1000312,
-                1000313,
-                1000314,
-                1000315,
-                1000316,
-                1000317,
-                1000318,
-                1000319,
-                1000320,
-                1000321,
-                1000322,
-                1000323,
-                1000324,
-                1000325,
-                1000326,
-                1000327,
-                1000328,
-                1000329,
-                1000330,
-                1000331,
-                1000332,
-                1000333,
-                1000334,
-                1000335,
-                1000336,
-                1000337,
-                1000338,
-                1000339,
-                1000340,
-                1000341,
-                1000342,
-                1000343,
-                1000344,
-                1000345,
-                1000346,
-                100273,
-                100274,
-                100275,
-                100276,
-                100277,
-                100278,
-                100279,
-                100280,
-                100281,
-                100282,
-                100283,
-                100284,
-                100285,
-                100286,
-                100287,
-                100288,
-                100289,
-                100290,
-                100291,
-                100292,
-                100293,
-                100294,
-                100295,
-                100296,
-                100297,
-                100298,
-                100299,
-                100300,
-                100301,
-                100302,
-                100303,
-                100304,
-                100305,
-                100306,
-                100307,
-                100308,
-                100309,
-                100310,
-                100311,
-                100312,
-                100313,
-                100314,
-                100315,
-                100316,
-                100317,
-                100318,
-                100319,
-                100320,
-                100321,
-                100322,
-                100323,
-                100324,
-                100325,
-                100326,
-                100327,
-                100328,
-                100329,
-                100330,
-                100331,
-                100332,
-                100333,
-                100334,
-                100335,
-                100336,
-                100337,
-                100338,
-                100339,
-                100340,
-                100341,
-                100342,
-                100343,
-                100344,
-                100345,
-                100346,
-                100347
-            ],
-
-        },
-        {
-            "id": "e8X3pBZi",
-            "name": "剑指 Offer(专项突击版)",
-            "questions": [
-                1000228,
-                1000229,
-                1000230,
-                1000231,
-                1000232,
-                1000233,
-                1000234,
-                1000235,
-                1000236,
-                1000237,
-                1000238,
-                1000239,
-                1000240,
-                1000241,
-                1000242,
-                1000243,
-                1000244,
-                1000245,
-                1000246,
-                1000247,
-                1000248,
-                1000249,
-                1000250,
-                1000251,
-                1000252,
-                1000253,
-                1000254,
-                1000255,
-                1000256,
-                1000257,
-                1000258,
-                1000259,
-                1000260,
-                1000261,
-                1000262,
-                1000263,
-                1000264,
-                1000265,
-                1000266,
-                1000267,
-                1000268,
-                1000269,
-                1000270,
-                1000271,
-                1000272,
-                1000273,
-                1000274,
-                1000275,
-                1000276,
-                1000277,
-                1000278,
-                1000279,
-                1000280,
-                1000281,
-                1000282,
-                1000283,
-                1000284,
-                1000285,
-                1000286,
-                1000287,
-                1000288,
-                1000289,
-                1000290,
-                1000291,
-                1000292,
-                1000293,
-                1000294,
-                1000295,
-                1000296,
-                1000297,
-                1000298,
-                1000299,
-                1000300,
-                1000301,
-                1000302,
-                1000303,
-                1000304,
-                1000305,
-                1000306,
-                1000307,
-                1000308,
-                1000309,
-                1000310,
-                1000311,
-                1000312,
-                1000313,
-                1000314,
-                1000315,
-                1000316,
-                1000317,
-                1000318,
-                1000319,
-                1000320,
-                1000321,
-                1000322,
-                1000323,
-                1000324,
-                1000325,
-                1000326,
-                1000327,
-                1000328,
-                1000329,
-                1000330,
-                1000331,
-                1000332,
-                1000333,
-                1000334,
-                1000335,
-                1000336,
-                1000337,
-                1000338,
-                1000339,
-                1000340,
-                1000341,
-                1000342,
-                1000343,
-                1000344,
-                1000345,
-                1000346
-            ],
-
-        },
-        {
-            "id": "xb9nqhhg",
-            "name": "剑指 Offer(第 2 版)",
-            "questions": [
-                100319,
-                100328,
-                100327,
-                100326,
-                100325,
-                100324,
-                100323,
-                100322,
-                100321,
-                100320,
-                100329,
-                100318,
-                100317,
-                100316,
-                100315,
-                100314,
-                100313,
-                100312,
-                100311,
-                100338,
-                100347,
-                100346,
-                100345,
-                100344,
-                100343,
-                100342,
-                100341,
-                100340,
-                100339,
-                100310,
-                100337,
-                100336,
-                100335,
-                100334,
-                100333,
-                100332,
-                100331,
-                100330,
-                100282,
-                100291,
-                100290,
-                100289,
-                100288,
-                100287,
-                100286,
-                100285,
-                100284,
-                100283,
-                100292,
-                100281,
-                100280,
-                100279,
-                100278,
-                100277,
-                100276,
-                100275,
-                100274,
-                100301,
-                100309,
-                100308,
-                100307,
-                100306,
-                100305,
-                100304,
-                100303,
-                100302,
-                100273,
-                100300,
-                100299,
-                100298,
-                100297,
-                100296,
-                100295,
-                100294,
-                100293
-            ],
-
-        },
-        {
-            "id": "lccup",
-            "name": "力扣杯竞赛真题集",
-            "questions": [
-                1000134,
-                1000222,
-                1000362,
-                1000367,
-                1000368,
-                1000369,
-                1000370,
-                1000371,
-                1000373,
-                1000374,
-                1000375,
-                1000130,
-                1000131,
-                1000132,
-                1000133,
-                100094,
-                1000138,
-                1000139,
-                1000140,
-                1000146,
-                1000147,
-                1000056,
-                1000057,
-                1000058,
-                1000059,
-                100092,
-                100093,
-                1000062,
-                1000063,
-                1000218,
-                100107,
-                1000085,
-                1000086,
-                1000087,
-                1000088,
-                1000089,
-                1000090,
-                1000091,
-                1052,
-                1053,
-                1000093,
-                1000215,
-                1000216,
-                100096,
-                1058,
-                1059,
-                1060,
-                1061,
-                1000219,
-                1000220,
-                1000223,
-                1000224,
-                1000221,
-                1000359,
-                1000361,
-                813,
-                1069
-            ],
-
-        },
-        {
-            "id": "dynamic-programming",
-            "name": "动态规划",
-            "questions": [
-                1025,
-                514,
-                516,
-                5,
-                518,
-                10,
-                526,
-                1042,
-                1559,
-                1051,
-                32,
-                1057,
-                546,
-                1571,
-                1060,
-                549,
-                39,
-                40,
-                1063,
-                42,
-                1067,
-                1068,
-                45,
-                1583,
-                562,
-                53,
-                55,
-                568,
-                62,
-                63,
-                64,
-                576,
-                70,
-                72,
-                1105,
-                1617,
-                600,
-                91,
-                96,
-                1129,
-                1130,
-                1134,
-                115,
-                118,
-                119,
-                120,
-                121,
-                122,
-                123,
-                124,
-                634,
-                1669,
-                646,
-                647,
-                650,
-                139,
-                140,
-                651,
-                1166,
-                1680,
-                1170,
-                152,
-                664,
-                1178,
-                1690,
-                673,
-                1196,
-                174,
-                688,
-                1201,
-                1202,
-                691,
-                698,
-                188,
-                1213,
-                1220,
-                198,
-                712,
-                714,
-                1228,
-                1744,
-                1236,
-                213,
-                727,
-                1240,
-                1242,
-                221,
-                1758,
-                1250,
-                740,
-                741,
-                747,
-                238,
-                751,
-                1263,
-                1789,
-                254,
-                256,
-                1286,
-                264,
-                265,
-                1296,
-                279,
-                1822,
-                1828,
-                294,
-                298,
-                300,
-                304,
-                309,
-                312,
-                1851,
-                322,
-                1352,
-                329,
-                333,
-                337,
-                1361,
-                343,
-                351,
-                867,
-                1893,
-                361,
-                877,
-                368,
-                1906,
-                1398,
-                376,
-                377,
-                1402,
-                1403,
-                896,
-                1924,
-                392,
-                911,
-                923,
-                413,
-                1437,
-                416,
-                418,
-                930,
-                938,
-                435,
-                954,
-                446,
-                1471,
-                1474,
-                452,
-                1989,
-                967,
-                1996,
-                464,
-                977,
-                471,
-                486,
-                487,
-                494,
-                2031,
-                1008,
-                1522,
-                1013,
-                1017,
-                1531,
-                1022,
-                1535
-            ],
-
-        },
-        {
-            "id": "tusmiple",
-            "name": "图森未来",
-            "questions": [
-                718,
-                127,
-                1005,
-                1000428,
-                1000427,
-                1000426,
-                1000425,
-                1000424,
-                1000423,
-                726,
-                522,
-                973,
-                1217,
-                193,
-                1972,
-                171,
-                1957,
-                36,
-                27,
-                1294
-            ],
-
-        },
-        {
-            "id": "graph",
-            "name": "图论",
-            "questions": [
-                317,
-                1912,
-                1389,
-                877,
-                365,
-                871,
-                869,
-                1380,
-                352,
-                863,
-                323,
-                895,
-                310,
-                820,
-                305,
-                1325,
-                813,
-                803,
-                801,
-                1309,
-                1308,
-                794,
-                1986,
-                505,
-                2040,
-                2038,
-                2035,
-                499,
-                490,
-                1492,
-                1485,
-                971,
-                964,
-                1815,
-                960,
-                949,
-                433,
-                1456,
-                1447,
-                1442,
-                417,
-                922,
-                1428,
-                1100,
-                1191,
-                1701,
-                1696,
-                1171,
-                127,
-                1661,
-                1144,
-                1117,
-                1613,
-                1101,
-                1706,
-                1085,
-                1587,
-                1073,
-                1576,
-                547,
-                1058,
-                542,
-                1558,
-                1039,
-                721,
-                1300,
-                269,
-                261,
-                753,
-                744,
-                737,
-                1757,
-                733,
-                1753,
-                210,
-                1032,
-                207,
-                1229,
-                1738,
-                200,
-                1223,
-                695,
-                694,
-                685,
-                684
-            ],
-
-        },
-        {
-            "id": "bytedancecampus",
-            "name": "字节校园",
-            "questions": [
-                69,
-                88,
-                215,
-                206,
-                76,
-                200,
-                72,
-                199,
-                198,
-                92,
-                322,
-                64,
-                56,
-                54,
-                53,
-                948,
-                46,
-                300,
-                94,
-                102,
-                103,
-                232,
-                105,
-                236,
-                239,
-                1000185,
-                1000182,
-                1000183,
-                1000184,
-                121,
-                1000186,
-                1000187,
-                124,
-                135,
-                146,
-                143,
-                142,
-                15,
-                14,
-                141,
-                394,
-                1000188,
-                20,
-                7,
-                129,
-                5,
-                4,
-                3,
-                2,
-                1,
-                128,
-                21,
-                22,
-                23,
-                151,
-                25,
-                152,
-                792,
-                923,
-                31,
-                160,
-                33,
-                415,
-                41,
-                42,
-                43
-            ],
-
-        },
-        {
-            "id": "ponyai",
-            "name": "小马智行 Pony.ai",
-            "questions": [
-                15,
-                1000351,
-                1000350,
-                1000349,
-                92,
-                1000347,
-                148,
-                146,
-                1105,
-                1000352,
-                909,
-                173,
-                1000348,
-                105,
-                39,
-                1860,
-                98,
-                1441
-            ],
-
-        },
-        {
-            "id": "cmbchina-cc",
-            "name": "招商银行信用卡",
-            "questions": [
-                33,
-                124,
-                103,
-                88,
-                199,
-                198,
-                322,
-                64,
-                53,
-                41,
-                1,
-                415,
-                923,
-                22,
-                21,
-                20,
-                15,
-                7,
-                5,
-                3
-            ],
-        },
-        {
-            "id": "data-structures",
-            "name": "数据结构",
-            "questions": [
-                1,
-                2,
-                5,
-                1032,
-                15,
-                1039,
-                20,
-                21,
-                23,
-                24,
-                25,
-                547,
-                36,
-                42,
-                43,
-                44,
-                48,
-                49,
-                560,
-                53,
-                566,
-                56,
-                59,
-                1085,
-                73,
-                1609,
-                75,
-                82,
-                83,
-                84,
-                1107,
-                88,
-                94,
-                98,
-                101,
-                102,
-                103,
-                104,
-                105,
-                108,
-                112,
-                113,
-                118,
-                119,
-                121,
-                124,
-                1661,
-                128,
-                1665,
-                642,
-                136,
-                138,
-                141,
-                142,
-                143,
-                144,
-                145,
-                653,
-                148,
-                155,
-                1693,
-                160,
-                1701,
-                169,
-                173,
-                1710,
-                187,
-                199,
-                203,
-                206,
-                208,
-                1745,
-                211,
-                212,
-                214,
-                215,
-                217,
-                218,
-                729,
-                226,
-                739,
-                230,
-                232,
-                235,
-                236,
-                238,
-                1774,
-                240,
-                242,
-                761,
-                253,
-                766,
-                768,
-                261,
-                783,
-                784,
-                281,
-                290,
-                803,
-                295,
-                297,
-                305,
-                817,
-                1345,
-                323,
-                325,
-                838,
-                334,
-                336,
-                337,
-                347,
-                1371,
-                350,
-                358,
-                871,
-                366,
-                1903,
-                369,
-                378,
-                892,
-                383,
-                387,
-                394,
-                402,
-                409,
-                922,
-                415,
-                1951,
-                1442,
-                1450,
-                435,
-                448,
-                450,
-                451,
-                452,
-                454,
-                456,
-                2009,
-                1008,
-                1014
-            ],
-
-        },
-        {
-            "id": "xb9lfcwi",
-            "name": "程序员面试金典(第 6 版)",
-            "questions": [
-                100352,
-                100353,
-                100354,
-                100355,
-                100356,
-                1000003,
-                1000004,
-                1000005,
-                1000006,
-                1000007,
-                1000008,
-                1000009,
-                1000010,
-                1000011,
-                1000012,
-                1000013,
-                1000015,
-                1000016,
-                1000017,
-                1000018,
-                1000019,
-                1000020,
-                1000021,
-                1000022,
-                1000023,
-                1000024,
-                1000025,
-                1000026,
-                1000027,
-                1000028,
-                1000029,
-                1000030,
-                1000031,
-                1000032,
-                1000033,
-                1000034,
-                1000035,
-                1000036,
-                1000037,
-                1000038,
-                1000039,
-                1000040,
-                1000041,
-                1000042,
-                1000043,
-                1000044,
-                1000045,
-                1000046,
-                1000047,
-                1000048,
-                1000049,
-                1000050,
-                1000051,
-                100158,
-                100159,
-                100160,
-                100161,
-                100162,
-                100163,
-                100164,
-                100167,
-                100168,
-                100169,
-                100170,
-                100171,
-                100172,
-                100173,
-                100174,
-                100175,
-                100176,
-                100177,
-                100178,
-                100179,
-                100180,
-                100181,
-                100182,
-                100183,
-                100184,
-                100185,
-                100186,
-                100187,
-                100188,
-                100195,
-                100196,
-                100197,
-                100198,
-                100199,
-                100200,
-                100201,
-                100202,
-                100203,
-                100228,
-                100229,
-                100230,
-                100231,
-                100232,
-                100233,
-                100240,
-                100241,
-                100242,
-                100258,
-                100259,
-                100260,
-                100261,
-                100262,
-                100348,
-                100349,
-                100350,
-                100351
-            ],
-
-        },
-        {
-            "id": "algorithms",
-            "name": "算法",
-            "questions": [
-                1025,
-                3,
-                4,
-                5,
-                1028,
-                10,
-                11,
-                1036,
-                1037,
-                15,
-                17,
-                19,
-                21,
-                22,
-                1046,
-                542,
-                33,
-                34,
-                35,
-                547,
-                37,
-                1059,
-                39,
-                40,
-                42,
-                45,
-                46,
-                47,
-                557,
-                51,
-                53,
-                55,
-                567,
-                2047,
-                572,
-                62,
-                70,
-                582,
-                72,
-                583,
-                74,
-                1609,
-                76,
-                77,
-                78,
-                79,
-                1101,
-                82,
-                85,
-                90,
-                91,
-                617,
-                1134,
-                116,
-                117,
-                120,
-                123,
-                130,
-                131,
-                132,
-                136,
-                139,
-                1165,
-                146,
-                1171,
-                149,
-                153,
-                159,
-                673,
-                162,
-                167,
-                1192,
-                174,
-                695,
-                189,
-                190,
-                191,
-                198,
-                200,
-                201,
-                202,
-                713,
-                714,
-                715,
-                206,
-                207,
-                209,
-                210,
-                213,
-                221,
-                733,
-                1250,
-                231,
-                239,
-                241,
-                753,
-                254,
-                260,
-                269,
-                1300,
-                278,
-                792,
-                283,
-                286,
-                287,
-                800,
-                300,
-                301,
-                813,
-                309,
-                310,
-                315,
-                322,
-                329,
-                337,
-                340,
-                343,
-                344,
-                865,
-                874,
-                893,
-                895,
-                384,
-                394,
-                908,
-                410,
-                413,
-                416,
-                417,
-                1442,
-                438,
-                460,
-                1485,
-                2019,
-                486,
-                1512,
-                1019,
-                1023
-            ],
-
-        },
-        {
-            "id": "programming-skills",
-            "name": "编程能力",
-            "questions": [
-                2,
-                1031,
-                8,
-                525,
-                23,
-                535,
-                28,
-                43,
-                556,
-                48,
-                49,
-                1584,
-                54,
-                566,
-                58,
-                61,
-                65,
-                66,
-                67,
-                1626,
-                1630,
-                1125,
-                104,
-                110,
-                631,
-                635,
-                642,
-                138,
-                1677,
-                143,
-                146,
-                148,
-                150,
-                1176,
-                155,
-                1693,
-                1708,
-                173,
-                1713,
-                191,
-                1728,
-                1729,
-                1736,
-                713,
-                202,
-                715,
-                208,
-                209,
-                211,
-                214,
-                1752,
-                217,
-                729,
-                224,
-                227,
-                739,
-                742,
-                232,
-                1768,
-                1774,
-                241,
-                242,
-                244,
-                758,
-                251,
-                764,
-                255,
-                1791,
-                771,
-                1797,
-                775,
-                785,
-                2322,
-                281,
-                282,
-                283,
-                295,
-                297,
-                303,
-                304,
-                307,
-                325,
-                838,
-                1349,
-                850,
-                341,
-                859,
-                348,
-                860,
-                1888,
-                353,
-                1894,
-                369,
-                1905,
-                885,
-                890,
-                1915,
-                380,
-                381,
-                1406,
-                1411,
-                389,
-                1930,
-                908,
-                404,
-                1434,
-                1949,
-                1950,
-                931,
-                932,
-                1955,
-                937,
-                946,
-                1458,
-                438,
-                445,
-                1982,
-                449,
-                1477,
-                459,
-                460,
-                1484,
-                1492,
-                990,
-                2015,
-                1512,
-                496,
-                1014,
-                503,
-                1018
-            ],
-
-        },
-        {
-            "id": "meituan",
-            "name": "美团真题",
-            "questions": [
-                1000192,
-                1000193,
-                1000194,
-                1000195,
-                1000196,
-                1000197,
-                1000198,
-                1000199,
-                1000200,
-                1000201,
-                1000202,
-                1000203,
-                1000189,
-                1000190,
-                1000191,
-                257,
-                100158,
-                13,
-                455,
-                45,
-                200,
-                143,
-                139,
-                19,
-                100344,
-                162,
-                177,
-                75,
-                1036,
-                71,
-                475,
-                42,
-                51,
-                440,
-                25
-            ],
-
-        },
-        {
-            "id": "ke",
-            "name": "贝壳找房",
-            "questions": [
-                30,
-                120,
-                113,
-                85,
-                82,
-                209,
-                200,
-                315,
-                56,
-                53,
-                43,
-                2,
-                152,
-                20,
-                19,
-                17,
-                15,
-                14,
-                264,
-                135,
-                4
-            ],
-
-        },
-        {
-            "id": "efficient-winning",
-            "name": "高效制胜",
-            "questions": [
-                230,
-                329,
-                79,
-                720,
-                218,
-                1120,
-                97,
-                483,
-                1508,
-                456,
-                112,
-                496,
-                1008,
-                1013,
-                119,
-                121,
-                122,
-                416,
-                3,
-                11,
-                524,
-                15,
-                18,
-                20,
-                279,
-                28,
-                1,
-                803,
-                167,
-                42,
-                53,
-                825,
-                322,
-                70
-            ],
-
-        },
-        {
-            "id": "2cktkvj",
-            "name": "LeetCode 热题 HOT 100",
-            "questions": [
-                160,
-                236,
-                234,
-                739,
-                226,
-                221,
-                215,
-                208,
-                207,
-                206,
-                200,
-                198,
-                169,
-                238,
-                155,
-                152,
-                148,
-                146,
-                142,
-                141,
-                139,
-                136,
-                647,
-                128,
-                124,
-                322,
-                494,
-                461,
-                448,
-                438,
-                437,
-                416,
-                406,
-                399,
-                394,
-                347,
-                338,
-                337,
-                121,
-                312,
-                309,
-                301,
-                300,
-                297,
-                287,
-                283,
-                279,
-                253,
-                240,
-                239,
-                22,
-                49,
-                48,
-                46,
-                42,
-                39,
-                543,
-                34,
-                33,
-                32,
-                31,
-                538,
-                23,
-                560,
-                21,
-                20,
-                19,
-                17,
-                15,
-                11,
-                10,
-                5,
-                4,
-                3,
-                2,
-                79,
-                114,
-                621,
-                617,
-                105,
-                104,
-                102,
-                101,
-                98,
-                96,
-                94,
-                85,
-                84,
-                1,
-                78,
-                76,
-                75,
-                72,
-                70,
-                581,
-                64,
-                62,
-                56,
-                55,
-                53
-            ],
-
-        },
-        {
-            "id": "7cyqwuv",
-            "name": "力扣杯 - 竞赛合集",
-            "questions": [
-                1000134,
-                1000222,
-                1000362,
-                1000367,
-                1000368,
-                1000369,
-                1000370,
-                1000371,
-                1000373,
-                1000374,
-                1000375,
-                1000130,
-                1000131,
-                1000132,
-                1000133,
-                100094,
-                1000138,
-                1000139,
-                1000140,
-                1000146,
-                1000147,
-                1000056,
-                1000057,
-                1000058,
-                1000059,
-                100092,
-                100093,
-                1000062,
-                1000063,
-                1000216,
-                100107,
-                511,
-                1000085,
-                1000086,
-                1000087,
-                1000088,
-                1000089,
-                1000090,
-                1000091,
-                1052,
-                1053,
-                1000093,
-                1000215,
-                100096,
-                1000218,
-                1058,
-                1059,
-                1060,
-                1061,
-                1000219,
-                1000220,
-                1000223,
-                1000224,
-                1000221,
-                1000359,
-                1000361,
-                1069
-            ],
-
-        },
-        {
-            "id": "ex0k24j",
-            "name": "腾讯精选练习 50 题",
-            "questions": [
-                217,
-                46,
-                53,
-                54,
-                59,
-                61,
-                62,
-                70,
-                78,
-                206,
-                215,
-                88,
-                89,
-                557,
-                344,
-                230,
-                231,
-                104,
-                235,
-                236,
-                237,
-                238,
-                121,
-                122,
-                124,
-                146,
-                4,
-                5,
-                7,
-                8,
-                9,
-                136,
-                11,
-                141,
-                14,
-                15,
-                16,
-                142,
-                2,
-                20,
-                21,
-                148,
-                23,
-                26,
-                155,
-                160,
-                33,
-                292,
-                169,
-                43
-            ],
-
-        },
-        {
-            "id": "2ckc81c",
-            "name": "LeetCode 精选 TOP 面试题",
-            "questions": [
-                1,
-                2,
-                3,
-                4,
-                5,
-                7,
-                8,
-                10,
-                11,
-                13,
-                14,
-                15,
-                17,
-                19,
-                20,
-                21,
-                22,
-                23,
-                26,
-                28,
-                29,
-                33,
-                34,
-                36,
-                38,
-                41,
-                42,
-                44,
-                46,
-                48,
-                49,
-                50,
-                53,
-                54,
-                55,
-                56,
-                62,
-                66,
-                69,
-                70,
-                73,
-                75,
-                76,
-                78,
-                79,
-                84,
-                88,
-                91,
-                94,
-                98,
-                101,
-                102,
-                103,
-                104,
-                105,
-                108,
-                116,
-                118,
-                121,
-                122,
-                124,
-                125,
-                127,
-                128,
-                130,
-                131,
-                134,
-                136,
-                138,
-                139,
-                140,
-                141,
-                146,
-                148,
-                149,
-                150,
-                152,
-                155,
-                160,
-                162,
-                163,
-                166,
-                169,
-                171,
-                172,
-                179,
-                189,
-                190,
-                191,
-                198,
-                200,
-                202,
-                204,
-                206,
-                207,
-                208,
-                210,
-                212,
-                215,
-                217,
-                218,
-                227,
-                230,
-                234,
-                236,
-                237,
-                238,
-                239,
-                240,
-                242,
-                251,
-                253,
-                268,
-                269,
-                277,
-                279,
-                283,
-                285,
-                287,
-                289,
-                295,
-                297,
-                300,
-                308,
-                315,
-                322,
-                324,
-                326,
-                328,
-                329,
-                334,
-                340,
-                341,
-                344,
-                347,
-                348,
-                350,
-                371,
-                378,
-                380,
-                384,
-                387,
-                395,
-                412,
-                454
-            ],
-
-        }
-    ]
-    private tags_data = {
+    private tagsData = {
         "1": { "topicTags": ["array", "hash-table"] },
         "2": { "topicTags": ["recursion", "linked-list", "math"] },
         "3": { "topicTags": ["hash-table", "string", "sliding-window"] },
@@ -4867,7 +2804,7 @@ class ResourcesData {
         "面试题 17.26": { "topicTags": ["array", "hash-table", "sorting"] },
         "面试题13": { "topicTags": ["depth-first-search", "breadth-first-search", "dynamic-programming"] },
         "面试题59 - II": { "topicTags": ["design", "queue", "monotonic-queue"] }
-    }
+    };
 
     private tags_name = {
         'array': '数组',
@@ -4942,29 +2879,20 @@ class ResourcesData {
         'biconnected-component': '双连接组件',
         'strongly-connected-component': '强连接组件'
 
-    }
-    public getChoiceData() {
-        return this.choiceData
-    }
-
-    public getScoreData(): Map {
-
-        let nameSiteMapping = new Map();
-        const temp = this.scoreBase as IScoreData[]
-        temp.forEach(element => {
-            // Rating
-            // ID
-            // ContestSlug
-            element.score = "" + Math.floor(element.Rating || 0);
-            nameSiteMapping.set("" + element.ID, element)
-        });
-        return nameSiteMapping
-    }
+    };
     public getTagsData(fid: string): Array {
-        return (this.tags_data[fid]?.topicTags || []).map(p => {
-            return this.tags_name[p]
-        })
+        return (this.tagsData[fid]?.topicTags || []).map(p => {
+            return this.tags_name[p];
+        });
     }
+
 }
 
-export const resourcesData: ResourcesData = new ResourcesData();
+
+export const tagsDao: TagsDao = new TagsDao();
+
+
+
+
+
+
diff --git a/src/explorer/explorerNodeManager.ts b/src/explorer/explorerNodeManager.ts
deleted file mode 100644
index 0b5e0e1..0000000
--- a/src/explorer/explorerNodeManager.ts
+++ /dev/null
@@ -1,460 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as _ from "lodash";
-import { toNumber } from "lodash";
-import { Disposable } from "vscode";
-import * as list from "../commands/list";
-import { getSortingStrategy } from "../commands/plugin";
-import { Category, defaultProblem, ProblemState, SortingStrategy, SearchSetTypeName, RootNodeSort, SearchSetType, ISubmitEvent } from "../shared";
-import { shouldHideSolvedProblem, shouldHideScoreProblem } from "../utils/settingUtils";
-import { LeetCodeNode } from "./LeetCodeNode";
-import { ISearchSet } from "../shared";
-import { searchToday, searchUserContest } from "../commands/show";
-import { leetCodeTreeDataProvider } from "./LeetCodeTreeDataProvider";
-import { resourcesData } from "../ResourcesData";
-import { leetCodeManager } from "../leetCodeManager";
-
-class ExplorerNodeManager implements Disposable {
-    private explorerNodeMap: Map = new Map();
-    private companySet: Set = new Set();
-    private tagSet: Set = new Set();
-    private searchSet: Map = new Map();
-    private waitTodayQuestion: boolean;
-    private waitUserContest: boolean;
-    private user_score: number;
-
-
-    public async update_user_score(user_score: number) {
-        this.user_score = user_score;
-        await leetCodeTreeDataProvider.refresh()
-    }
-
-    public insertSearchSet(tt: ISearchSet) {
-        this.searchSet.set(tt.value, tt);
-    }
-    public clearUserScore() {
-        this.user_score = 0;
-        this.waitUserContest = false;
-        this.waitTodayQuestion = false;
-        this.searchSet = new Map();
-    }
-
-    public checkSubmit(e: ISubmitEvent) {
-        if (e.sub_type == "submit" && e.accepted) {
-            const day_start = new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000; //获取当天零点的时间
-            const day_end = new Date(new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1).getTime() / 1000; //获取当天23:59:59的时间
-            var need_get_today: boolean = false;
-            this.searchSet.forEach(element => {
-                if (element.type == SearchSetType.Day) {
-                    if (day_start <= element.time && element.time <= day_end) {
-                        if (e.fid == element.value) {
-                            need_get_today = true;
-                        }
-                    }
-                }
-            });
-            if (need_get_today) {
-                searchToday();
-            }
-        }
-    }
-
-    public async refreshCheck(): Promise {
-        if (!leetCodeManager.getUser()) {
-            return;
-        }
-        const day_start = new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000; //获取当天零点的时间
-        const day_end = new Date(new Date().setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1000 - 1).getTime() / 1000; //获取当天23:59:59的时间
-        var need_get_today: boolean = true;
-        this.searchSet.forEach(element => {
-            if (element.type == SearchSetType.Day) {
-                if (day_start <= element.time && element.time <= day_end) {
-                    need_get_today = false;
-                } else {
-                    this.waitTodayQuestion = false
-                }
-            }
-        });
-        if (need_get_today && !this.waitTodayQuestion) {
-            this.waitTodayQuestion = true
-            await searchToday();
-        }
-        if (!this.user_score && !this.waitUserContest) {
-            this.waitUserContest = true;
-            await searchUserContest();
-        }
-    }
-
-    public async refreshCache(): Promise {
-        const temp_searchSet: Map = this.searchSet
-        const temp_waitTodayQuestion: boolean = this.waitTodayQuestion
-        const temp_waitUserContest: boolean = this.waitUserContest
-        this.dispose();
-        for (const problem of await list.listProblems()) {
-            this.explorerNodeMap.set(problem.id, new LeetCodeNode(problem, true, this.user_score));
-            for (const company of problem.companies) {
-                this.companySet.add(company);
-            }
-            for (const tag of problem.tags) {
-                this.tagSet.add(tag);
-            }
-        }
-        this.searchSet = temp_searchSet;
-        this.waitTodayQuestion = temp_waitTodayQuestion
-        this.waitUserContest = temp_waitUserContest
-    }
-
-    public getRootNodes(): LeetCodeNode[] {
-        const baseNode: LeetCodeNode[] = [
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.All,
-                name: Category.All,
-                rootNodeSortId: RootNodeSort.All,
-            }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.Difficulty,
-                name: Category.Difficulty,
-                rootNodeSortId: RootNodeSort.Difficulty,
-            }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.Tag,
-                name: Category.Tag,
-                rootNodeSortId: RootNodeSort.Tag,
-            }), false),
-            // new LeetCodeNode(Object.assign({}, defaultProblem, {
-            //     id: Category.Company,
-            //     name: Category.Company,
-            //     rootNodeSortId: RootNodeSort.Company,
-            // }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.Favorite,
-                name: Category.Favorite,
-                rootNodeSortId: RootNodeSort.Favorite,
-            }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.Score,
-                name: Category.Score,
-                rootNodeSortId: RootNodeSort.Score,
-            }), false, this.user_score),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: Category.Choice,
-                name: Category.Choice,
-                rootNodeSortId: RootNodeSort.Choice,
-            }), false),
-        ];
-        this.searchSet.forEach(element => {
-            if (element.type == SearchSetType.Day) {
-                const curDate = new Date(element.time * 1000)
-                baseNode.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                    id: element.type,
-                    name: "[" + (curDate.getFullYear()) + "-" + (curDate.getMonth() + 1) + "-" + (curDate.getDate()) + "]" + SearchSetTypeName[SearchSetType.Day],
-                    input: element.value,
-                    isSearchResult: true,
-                    rootNodeSortId: RootNodeSort[element.type],
-                    todayData: element.todayData
-                }), false));
-            } else {
-                baseNode.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                    id: element.type,
-                    name: SearchSetTypeName[element.type] + element.value,
-                    input: element.value,
-                    isSearchResult: true,
-                    rootNodeSortId: RootNodeSort[element.type],
-                }), false));
-            }
-        });
-        baseNode.sort(function (a: LeetCodeNode, b: LeetCodeNode): number {
-            if (a.rootNodeSortId < b.rootNodeSortId) {
-                return -1;
-            } else if (a.rootNodeSortId > b.rootNodeSortId) {
-                return 1
-            }
-            return 0;
-        })
-        return baseNode;
-    }
-
-    public getScoreRangeNodes(rank_range: string): LeetCodeNode[] {
-        const sorceNode: LeetCodeNode[] = []
-        const rank_r: Array = rank_range.split("-")
-        var rank_a = Number(rank_r[0])
-        var rank_b = Number(rank_r[1])
-        if (rank_a > 0 && rank_b > 0) {
-            if (rank_a > rank_b) {
-                const rank_c: number = rank_a
-                rank_a = rank_b
-                rank_b = rank_c
-            }
-
-            this.explorerNodeMap.forEach(element => {
-                if (!this.canShow(element)) {
-                    return;
-                }
-                if (rank_a <= Number(element.score) && Number(element.score) <= rank_b) {
-                    sorceNode.push(element)
-                }
-            });
-        }
-        return this.applySortingStrategy(sorceNode);
-    }
-
-    public canShow(element: LeetCodeNode) {
-        if (shouldHideSolvedProblem() && element.state === ProblemState.AC) {
-            return false;
-        }
-        if (shouldHideScoreProblem(element, element.user_score)) {
-            return false;
-        }
-        return true;
-    }
-
-    public getContextNodes(rank_range: string): LeetCodeNode[] {
-        const sorceNode: LeetCodeNode[] = []
-        const rank_r: Array = rank_range.split("-")
-        var rank_a = Number(rank_r[0])
-        var rank_b = Number(rank_r[1])
-        if (rank_a > 0) {
-            this.explorerNodeMap.forEach(element => {
-                if (!this.canShow(element)) {
-                    return;
-                }
-                const slu = element.ContestSlug;
-                const slu_arr: Array = slu.split("-")
-                const slu_id = Number(slu_arr[slu_arr.length - 1]);
-                if (rank_b > 0 && rank_a <= slu_id && slu_id <= rank_b) {
-                    sorceNode.push(element)
-                } else if (rank_a == slu_id) {
-                    sorceNode.push(element)
-                }
-            });
-        }
-        return this.applySortingStrategy(sorceNode);
-    }
-    public getDayNodes(element: LeetCodeNode | undefined): LeetCodeNode[] {
-        const rank_range: string = element?.input || ""
-        const sorceNode: LeetCodeNode[] = []
-        if (rank_range) {
-            this.explorerNodeMap.forEach(new_node => {
-                if (new_node.id == rank_range) {
-                    new_node.todayData = element?.todayData
-                    sorceNode.push(new_node);
-                }
-            });
-        }
-        return this.applySortingStrategy(sorceNode);
-    }
-
-    public getAllNodes(): LeetCodeNode[] {
-        return this.applySortingStrategy(
-            Array.from(this.explorerNodeMap.values()).filter(p => this.canShow(p)),
-        );
-    }
-
-    public getAllDifficultyNodes(): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-        res.push(
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Difficulty}.Easy`,
-                name: "Easy",
-            }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Difficulty}.Medium`,
-                name: "Medium",
-            }), false),
-            new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Difficulty}.Hard`,
-                name: "Hard",
-            }), false),
-        );
-        this.sortSubCategoryNodes(res, Category.Difficulty);
-        return res;
-    }
-
-    public getAllScoreNodes(user_score: number): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-        const score_array: Array = ["3300", "3200", "3100", "3000", "2900", "2800", "2700", "2600", "2500", "2400", "2300", "2200", "2100", "2000", "1900", "1800", "1700", "1600", "1500", "1400", "1300", "1200", "1100"];
-        score_array.forEach(element => {
-            const temp_num = Number(element);
-            const diff = Math.abs(temp_num - user_score)
-            if (diff <= 200) {
-                res.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                    id: `${Category.Score}.${element}`,
-                    name: `${element}`,
-                }), false, user_score))
-            }
-        })
-
-        this.sortSubCategoryNodes(res, Category.Score);
-        return res;
-    }
-
-    public getAllChoiceNodes(): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-
-        const all_choice = resourcesData.getChoiceData();
-        all_choice.forEach(element => {
-            res.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Choice}.${element.id}`,
-                name: `${element.name}`,
-            }), false))
-        })
-        this.sortSubCategoryNodes(res, Category.Choice);
-        return res;
-    }
-
-    public getAllCompanyNodes(): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-        for (const company of this.companySet.values()) {
-            res.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Company}.${company}`,
-                name: _.startCase(company),
-            }), false));
-        }
-        this.sortSubCategoryNodes(res, Category.Company);
-        return res;
-    }
-
-    public getAllTagNodes(): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-        for (const tag of this.tagSet.values()) {
-            res.push(new LeetCodeNode(Object.assign({}, defaultProblem, {
-                id: `${Category.Tag}.${tag}`,
-                name: _.startCase(tag),
-            }), false));
-        }
-        this.sortSubCategoryNodes(res, Category.Tag);
-        return res;
-    }
-
-    public getNodeById(id: string): LeetCodeNode | undefined {
-        return this.explorerNodeMap.get(id);
-    }
-
-    public getFavoriteNodes(): LeetCodeNode[] {
-        const res: LeetCodeNode[] = [];
-        for (const node of this.explorerNodeMap.values()) {
-            if (!this.canShow(node)) {
-                continue;
-            }
-            if (node.isFavorite) {
-                res.push(node);
-            }
-        }
-        return this.applySortingStrategy(res);
-    }
-
-    public getChildrenNodesById(id: string): LeetCodeNode[] {
-        // The sub-category node's id is named as {Category.SubName}
-        const metaInfo: string[] = id.split(".");
-        const res: LeetCodeNode[] = [];
-
-        const choiceQuestionId: Map = new Map()
-        if (metaInfo[0] == Category.Choice) {
-            const all_choice = resourcesData.getChoiceData();
-            all_choice.forEach(element => {
-                if (element.id == metaInfo[1]) {
-                    element.questions.forEach(kk => {
-                        choiceQuestionId[kk] = true
-                    })
-                    return
-                }
-            })
-        }
-
-        for (const node of this.explorerNodeMap.values()) {
-            if (!this.canShow(node)) {
-                continue;
-            }
-            switch (metaInfo[0]) {
-                case Category.Company:
-                    if (node.companies.indexOf(metaInfo[1]) >= 0) {
-                        res.push(node);
-                    }
-                    break;
-                case Category.Difficulty:
-                    if (node.difficulty === metaInfo[1]) {
-                        res.push(node);
-                    }
-                    break;
-                case Category.Tag:
-                    if (node.tags.indexOf(metaInfo[1]) >= 0) {
-                        res.push(node);
-                    }
-                    break;
-                case Category.Score:
-                    if (node.score > "0") {
-                        const check_rank = toNumber(metaInfo[1]);
-                        const node_rank = toNumber(node.score);
-                        if (check_rank <= node_rank && node_rank < check_rank + 100) {
-                            res.push(node);
-                        }
-                    }
-                    break;
-                case Category.Choice:
-                    if (choiceQuestionId[Number(node.qid)]) {
-                        res.push(node);
-                    }
-                default:
-                    break;
-            }
-        }
-        return this.applySortingStrategy(res);
-    }
-
-    public dispose(): void {
-        this.explorerNodeMap.clear();
-        this.companySet.clear();
-        this.tagSet.clear();
-    }
-
-    private sortSubCategoryNodes(subCategoryNodes: LeetCodeNode[], category: Category): void {
-        switch (category) {
-            case Category.Difficulty:
-                subCategoryNodes.sort((a: LeetCodeNode, b: LeetCodeNode): number => {
-                    function getValue(input: LeetCodeNode): number {
-                        switch (input.name.toLowerCase()) {
-                            case "easy":
-                                return 1;
-                            case "medium":
-                                return 2;
-                            case "hard":
-                                return 3;
-                            default:
-                                return Number.MAX_SAFE_INTEGER;
-                        }
-                    }
-                    return getValue(a) - getValue(b);
-                });
-                break;
-            case Category.Tag:
-            case Category.Company:
-                subCategoryNodes.sort((a: LeetCodeNode, b: LeetCodeNode): number => {
-                    if (a.name === "Unknown") {
-                        return 1;
-                    } else if (b.name === "Unknown") {
-                        return -1;
-                    } else {
-                        return Number(a.name > b.name) - Number(a.name < b.name);
-                    }
-                });
-                break;
-            default:
-                break;
-        }
-    }
-
-    private applySortingStrategy(nodes: LeetCodeNode[]): LeetCodeNode[] {
-        const strategy: SortingStrategy = getSortingStrategy();
-        switch (strategy) {
-            case SortingStrategy.AcceptanceRateAsc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(x.acceptanceRate) - Number(y.acceptanceRate));
-            case SortingStrategy.AcceptanceRateDesc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(y.acceptanceRate) - Number(x.acceptanceRate));
-            case SortingStrategy.ScoreAsc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(x.score) - Number(y.score));
-            case SortingStrategy.ScoreDesc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(y.score) - Number(x.score));
-            case SortingStrategy.IDDesc: return nodes.sort((x: LeetCodeNode, y: LeetCodeNode) => Number(y.id) - Number(x.id));
-            default: return nodes;
-        }
-    }
-}
-
-export const explorerNodeManager: ExplorerNodeManager = new ExplorerNodeManager();
diff --git a/src/extension.ts b/src/extension.ts
index 829a168..5ddec09 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -1,96 +1,83 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/extension.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Monday, October 31st 2022, 10:16:47 am
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-import * as vscode from "vscode";
-import { codeLensController } from "./codelens/CodeLensController";
-import * as cache from "./commands/cache";
-import { switchDefaultLanguage } from "./commands/language";
-import * as plugin from "./commands/plugin";
-import * as session from "./commands/session";
-import * as show from "./commands/show";
-import * as star from "./commands/star";
-import * as submit from "./commands/submit";
-import * as test from "./commands/test";
-import { explorerNodeManager } from "./explorer/explorerNodeManager";
-import { LeetCodeNode } from "./explorer/LeetCodeNode";
-import { leetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider";
-import { leetCodeTreeItemDecorationProvider } from "./explorer/LeetCodeTreeItemDecorationProvider";
-import { leetCodeChannel } from "./leetCodeChannel";
-import { leetCodeExecutor } from "./leetCodeExecutor";
-import { leetCodeManager } from "./leetCodeManager";
-import { leetCodeStatusBarController } from "./statusbar/leetCodeStatusBarController";
-import { DialogType, promptForOpenOutputChannel } from "./utils/uiUtils";
-import { leetCodePreviewProvider } from "./webview/leetCodePreviewProvider";
-import { leetCodeSolutionProvider } from "./webview/leetCodeSolutionProvider";
-import { leetCodeSubmissionProvider } from "./webview/leetCodeSubmissionProvider";
-import { markdownEngine } from "./webview/markdownEngine";
-import { ISubmitEvent } from "./shared";
-import * as wsl from "./utils/wslUtils";
 
+import { ExtensionContext, window, commands, Uri } from "vscode";
+import { fileButtonController } from "./controller/FileButtonController";
+import { treeViewController } from "./controller/TreeViewController";
+import { NodeModel } from "./model/NodeModel";
+import { treeDataService } from "./service/TreeDataService";
+import { treeItemDecorationService } from "./service/TreeItemDecorationService";
+import { logOutput, promptForOpenOutputChannel } from "./utils/OutputUtils";
+import { executeService } from "./service/ExecuteService";
+import { eventController } from "./controller/EventController";
+import { statusBarService } from "./service/StatusBarService";
+import { previewService } from "./service/PreviewService";
+import { solutionService } from "./service/SolutionService";
+import { submissionService } from "./service/SubmissionService";
+import { markdownService } from "./service/MarkdownService";
+import { mainContorller } from "./controller/MainController";
+import { loginContorller } from "./controller/LoginController";
+import { getLeetCodeEndpoint } from "./utils/ConfigUtils";
+import { DialogType } from "./model/Model";
 
-export async function activate(context: vscode.ExtensionContext): Promise {
+// 激活插件
+export async function activate(context: ExtensionContext): Promise {
     try {
 
-        if (!wsl.useVscodeNode()) {
-            if (!await leetCodeExecutor.meetRequirements(context)) {
-                throw new Error("The environment doesn't meet requirements.");
-            }
-        }
-
-
-        leetCodeManager.on("statusChanged", () => {
-            leetCodeStatusBarController.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser());
-            leetCodeTreeDataProvider.cleanUserScore();
-            leetCodeTreeDataProvider.refresh();
-        });
-        leetCodeManager.on("submit", (e: ISubmitEvent) => {
-            leetCodeTreeDataProvider.checkSubmit(e);
-        });
-
-        leetCodeManager.on("searchUserContest", () => {
-            leetCodeStatusBarController.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser(), leetCodeManager.getUserContestInfo());
-        });
-
-        leetCodeTreeDataProvider.initialize(context);
+        // 初始化控制器
+        mainContorller.initialize(context);
+        // 检查node环境
+        await mainContorller.checkNodeEnv(context);
+        // 事件监听
+        eventController.add_event();
 
+        // 资源管理
         context.subscriptions.push(
-            leetCodeStatusBarController,
-            leetCodeChannel,
-            leetCodePreviewProvider,
-            leetCodeSubmissionProvider,
-            leetCodeSolutionProvider,
-            leetCodeExecutor,
-            markdownEngine,
-            codeLensController,
-            explorerNodeManager,
-            vscode.window.registerFileDecorationProvider(leetCodeTreeItemDecorationProvider),
-            vscode.window.createTreeView("leetCodeExplorer", { treeDataProvider: leetCodeTreeDataProvider, showCollapseAll: true }),
-            vscode.commands.registerCommand("leetcode.deleteCache", () => cache.deleteCache()),
-            vscode.commands.registerCommand("leetcode.toggleLeetCodeCn", () => plugin.switchEndpoint()),
-            vscode.commands.registerCommand("leetcode.signin", () => leetCodeManager.signIn()),
-            vscode.commands.registerCommand("leetcode.signout", () => leetCodeManager.signOut()),
-            vscode.commands.registerCommand("leetcode.manageSessions", () => session.manageSessions()),
-            vscode.commands.registerCommand("leetcode.previewProblem", (node: LeetCodeNode) => show.previewProblem(node)),
-            vscode.commands.registerCommand("leetcode.showProblem", (node: LeetCodeNode) => show.showProblem(node)),
-            vscode.commands.registerCommand("leetcode.pickOne", () => show.pickOne()),
-            vscode.commands.registerCommand("leetcode.deleteAllCache", () => show.deleteAllCache()),
-            vscode.commands.registerCommand("leetcode.searchScoreRange", () => show.searchScoreRange()),
-            vscode.commands.registerCommand("leetcode.searchProblem", () => show.searchProblem()),
-            vscode.commands.registerCommand("leetcode.showSolution", (input: LeetCodeNode | vscode.Uri) => show.showSolution(input)),
-            vscode.commands.registerCommand("leetcode.refreshExplorer", () => leetCodeTreeDataProvider.refresh()),
-            vscode.commands.registerCommand("leetcode.testSolution", (uri?: vscode.Uri) => test.testSolution(uri)),
-            vscode.commands.registerCommand("leetcode.testSolutionDefault", (uri?: vscode.Uri, allCase?: boolean) => test.testSolutionDefault(uri, allCase)),
-            vscode.commands.registerCommand("leetcode.submitSolution", (uri?: vscode.Uri) => submit.submitSolution(uri)),
-            vscode.commands.registerCommand("leetcode.switchDefaultLanguage", () => switchDefaultLanguage()),
-            vscode.commands.registerCommand("leetcode.addFavorite", (node: LeetCodeNode) => star.addFavorite(node)),
-            vscode.commands.registerCommand("leetcode.removeFavorite", (node: LeetCodeNode) => star.removeFavorite(node)),
-            vscode.commands.registerCommand("leetcode.problems.sort", () => plugin.switchSortingStrategy()),
+            statusBarService,
+            logOutput,
+            previewService,
+            submissionService,
+            solutionService,
+            executeService,
+            markdownService,
+            fileButtonController,
+            treeViewController,
+            window.registerFileDecorationProvider(treeItemDecorationService),
+            window.createTreeView("leetCodeExplorer", { treeDataProvider: treeDataService, showCollapseAll: true }),
+            commands.registerCommand("leetcode.deleteCache", () => mainContorller.deleteCache()),
+            commands.registerCommand("leetcode.toggleLeetCodeCn", () => treeViewController.switchEndpoint()),
+            commands.registerCommand("leetcode.signin", () => loginContorller.signIn()),
+            commands.registerCommand("leetcode.signout", () => loginContorller.signOut()),
+            commands.registerCommand("leetcode.previewProblem", (node: NodeModel) => treeViewController.previewProblem(node)),
+            commands.registerCommand("leetcode.showProblem", (node: NodeModel) => treeViewController.showProblem(node)),
+            commands.registerCommand("leetcode.pickOne", () => treeViewController.pickOne()),
+            commands.registerCommand("leetcode.deleteAllCache", () => loginContorller.deleteAllCache()),
+            commands.registerCommand("leetcode.searchScoreRange", () => treeViewController.searchScoreRange()),
+            commands.registerCommand("leetcode.searchProblem", () => treeViewController.searchProblem()),
+            commands.registerCommand("leetcode.showSolution", (input: NodeModel | Uri) => treeViewController.showSolution(input)),
+            commands.registerCommand("leetcode.refreshExplorer", () => treeDataService.refresh()),
+            commands.registerCommand("leetcode.testSolution", (uri?: Uri) => treeViewController.testSolution(uri)),
+            commands.registerCommand("leetcode.testSolutionDefault", (uri?: Uri, allCase?: boolean) => treeViewController.testSolutionDefault(uri, allCase)),
+            commands.registerCommand("leetcode.submitSolution", (uri?: Uri) => treeViewController.submitSolution(uri)),
+            commands.registerCommand("leetcode.switchDefaultLanguage", () => treeViewController.switchDefaultLanguage()),
+            commands.registerCommand("leetcode.addFavorite", (node: NodeModel) => treeViewController.addFavorite(node)),
+            commands.registerCommand("leetcode.removeFavorite", (node: NodeModel) => treeViewController.removeFavorite(node)),
+            commands.registerCommand("leetcode.problems.sort", () => treeViewController.switchSortingStrategy()),
         );
 
-        await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint());
-        await leetCodeManager.getLoginStatus();
+        // 设置站点
+        await executeService.switchEndpoint(getLeetCodeEndpoint());
+        // 获取登录状态
+        await loginContorller.getLoginStatus();
     } catch (error) {
-        leetCodeChannel.appendLine(error.toString());
+        logOutput.appendLine(error.toString());
         promptForOpenOutputChannel("Extension initialization failed. Please open output channel for details.", DialogType.error);
     }
 }
@@ -98,7 +85,7 @@ export async function activate(context: vscode.ExtensionContext): Promise
 export function deactivate(): void {
     // Do nothing.
     if (0) {
-        var a = 0;
+        let a = 0;
         console.log(a);
     }
 }
diff --git a/src/leetCodeChannel.ts b/src/leetCodeChannel.ts
deleted file mode 100644
index fa32ac2..0000000
--- a/src/leetCodeChannel.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as vscode from "vscode";
-
-class LeetCodeChannel implements vscode.Disposable {
-    private readonly channel: vscode.OutputChannel = vscode.window.createOutputChannel("LeetCode");
-
-    public appendLine(message: string): void {
-        this.channel.appendLine(message);
-    }
-
-    public append(message: string): void {
-        this.channel.append(message);
-    }
-
-    public show(): void {
-        this.channel.show();
-    }
-
-    public dispose(): void {
-        this.channel.dispose();
-    }
-}
-
-export const leetCodeChannel: LeetCodeChannel = new LeetCodeChannel();
diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts
deleted file mode 100644
index 2dc42bd..0000000
--- a/src/leetCodeManager.ts
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
-
-import * as cp from "child_process";
-import { EventEmitter } from "events";
-import * as vscode from "vscode";
-import { leetCodeChannel } from "./leetCodeChannel";
-import { leetCodeExecutor } from "./leetCodeExecutor";
-import { IQuickItemEx, loginArgsMapping, UserStatus, userContestRanKingBase, userContestRankingObj } from "./shared";
-import { createEnvOption } from "./utils/cpUtils";
-import { DialogType, promptForOpenOutputChannel } from "./utils/uiUtils";
-import * as wsl from "./utils/wslUtils";
-import { explorerNodeManager } from "./explorer/explorerNodeManager";
-
-class LeetCodeManager extends EventEmitter {
-    private currentUser: string | undefined;
-    private userStatus: UserStatus;
-    // private readonly successRegex: RegExp = /(?:.*)Successfully .*login as (.*)/i;
-    // private readonly failRegex: RegExp = /.*\[ERROR\].*/i;
-    private currentUserContestInfo: userContestRanKingBase;
-
-    constructor() {
-        super();
-        this.currentUser = undefined;
-        this.userStatus = UserStatus.SignedOut;
-    }
-
-    public async insertCurrentUserContestInfo(tt: userContestRanKingBase) {
-        this.currentUserContestInfo = tt;
-        await explorerNodeManager.update_user_score(tt.rating);
-    }
-    public async getLoginStatus(): Promise {
-        try {
-            const result: string = await leetCodeExecutor.getUserInfo();
-            this.currentUser = this.tryParseUserName(result);
-            this.userStatus = UserStatus.SignedIn;
-            if (this.currentUser == undefined) {
-                this.userStatus = UserStatus.SignedOut;
-            }
-        } catch (error) {
-            this.currentUser = undefined;
-            this.userStatus = UserStatus.SignedOut;
-        } finally {
-            this.emit("statusChanged");
-        }
-    }
-
-    public async signIn(): Promise {
-        const picks: Array> = [];
-        picks.push(
-            {
-                label: "LeetCode Account",
-                detail: "Use LeetCode account to login (US endpoint is not supported)",
-                value: "LeetCode",
-            },
-            {
-                label: "Third-Party: GitHub",
-                detail: "Use GitHub account to login",
-                value: "GitHub",
-            },
-            {
-                label: "Third-Party: LinkedIn",
-                detail: "Use LinkedIn account to login",
-                value: "LinkedIn",
-            },
-            {
-                label: "LeetCode Cookie",
-                detail: "Use LeetCode cookie copied from browser to login",
-                value: "Cookie",
-            },
-        );
-        const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks);
-        if (!choice) {
-            return;
-        }
-        const loginMethod: string = choice.value;
-        const commandArg: string | undefined = loginArgsMapping.get(loginMethod);
-        if (!commandArg) {
-            throw new Error(`The login method "${loginMethod}" is not supported.`);
-        }
-        const isByCookie: boolean = loginMethod === "Cookie";
-        const inMessage: string = isByCookie ? "sign in by cookie" : "sign in";
-        try {
-            const userName: string | undefined = await new Promise(async (resolve: (res: string | undefined) => void, reject: (e: Error) => void): Promise => {
-
-                const leetCodeBinaryPath: string = await leetCodeExecutor.getLeetCodeBinaryPath();
-
-                var childProc: cp.ChildProcess;
-
-                if (wsl.useVscodeNode()) {
-                    childProc = cp.fork(await leetCodeExecutor.getLeetCodeBinaryPath(), ["user", commandArg], {
-                        silent: true,
-                        env: createEnvOption(),
-                    });
-                } else {
-                    if (wsl.useWsl()) {
-                        childProc = cp.spawn("wsl", [leetCodeExecutor.node, leetCodeBinaryPath, "user", commandArg], { shell: true })
-                    } else {
-                        childProc = cp.spawn(leetCodeExecutor.node, [leetCodeBinaryPath, "user", commandArg], {
-                            shell: true,
-                            env: createEnvOption(),
-                        });
-                    }
-
-                }
-
-                childProc.stdout?.on("data", async (data: string | Buffer) => {
-                    data = data.toString();
-                    // vscode.window.showInformationMessage(`cc login msg ${data}.`);
-                    leetCodeChannel.append(data);
-                    if (data.includes("twoFactorCode")) {
-                        const twoFactor: string | undefined = await vscode.window.showInputBox({
-                            prompt: "Enter two-factor code.",
-                            ignoreFocusOut: true,
-                            validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
-                        });
-                        if (!twoFactor) {
-                            childProc.kill();
-                            return resolve(undefined);
-                        }
-                        childProc.stdin?.write(`${twoFactor}\n`);
-                    }
-
-                    var successMatch;
-                    try {
-                        successMatch = JSON.parse(data);
-                    } catch (e) {
-                        successMatch = {};
-                    }
-                    if (successMatch.code == 100) {
-                        childProc.stdin?.end();
-                        return resolve(successMatch.user_name);
-                    } else if (successMatch.code < 0) {
-                        childProc.stdin?.end();
-                        return reject(new Error(successMatch.msg));
-                    }
-                });
-
-                childProc.stderr?.on("data", (data: string | Buffer) => leetCodeChannel.append(data.toString()));
-
-                childProc.on("error", reject);
-                const name: string | undefined = await vscode.window.showInputBox({
-                    prompt: "Enter username or E-mail.",
-                    ignoreFocusOut: true,
-                    validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty",
-                });
-                if (!name) {
-                    childProc.kill();
-                    return resolve(undefined);
-                }
-                childProc.stdin?.write(`${name}\n`);
-                const pwd: string | undefined = await vscode.window.showInputBox({
-                    prompt: isByCookie ? "Enter cookie" : "Enter password.",
-                    password: true,
-                    ignoreFocusOut: true,
-                    validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty",
-                });
-                if (!pwd) {
-                    childProc.kill();
-                    return resolve(undefined);
-                }
-                childProc.stdin?.write(`${pwd}\n`);
-            });
-            if (userName) {
-                vscode.window.showInformationMessage(`Successfully ${inMessage}.`);
-                this.currentUser = userName;
-                this.userStatus = UserStatus.SignedIn;
-                this.emit("statusChanged");
-            }
-        } catch (error) {
-            promptForOpenOutputChannel(`Failed to ${inMessage}. Please open the output channel for details`, DialogType.error);
-        }
-
-    }
-
-    public async signOut(): Promise {
-        try {
-            await leetCodeExecutor.signOut();
-            vscode.window.showInformationMessage("Successfully signed out.");
-            this.currentUser = undefined;
-            this.userStatus = UserStatus.SignedOut;
-            this.currentUserContestInfo = Object.assign({}, userContestRankingObj, {})
-            this.emit("statusChanged");
-        } catch (error) {
-            // swallow the error when sign out.
-        }
-    }
-
-    public getStatus(): UserStatus {
-        return this.userStatus;
-    }
-
-    // 获取竞赛分
-    public getUserContestScore(): number {
-        if (this.currentUserContestInfo.rating > 0) {
-            return this.currentUserContestInfo.rating
-        }
-        return 0;
-    }
-
-    public getUserContestInfo(): userContestRanKingBase | undefined {
-        return this.currentUserContestInfo;
-    }
-
-    public getUser(): string | undefined {
-        return this.currentUser;
-    }
-
-    private tryParseUserName(output: string): string | undefined {
-        var successMatch;
-        try {
-            successMatch = JSON.parse(output);
-        } catch (e) {
-            successMatch = {};
-        }
-        if (successMatch.code == 100) {
-            return successMatch.user_name;
-        }
-        return undefined;
-    }
-}
-
-export const leetCodeManager: LeetCodeManager = new LeetCodeManager();
diff --git a/src/shared.ts b/src/model/Model.ts
similarity index 74%
rename from src/shared.ts
rename to src/model/Model.ts
index 37ce32e..170dea0 100644
--- a/src/shared.ts
+++ b/src/model/Model.ts
@@ -1,9 +1,16 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/model/Model.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
-import * as vscode from "vscode";
 
-export interface IQuickItemEx extends vscode.QuickPickItem {
+import { ViewColumn, QuickPickItem, MessageItem } from "vscode";
+
+export interface IQuickItemEx extends QuickPickItem {
     value: T;
 }
 
@@ -173,6 +180,17 @@ export enum SortingStrategy {
     IDDesc = "ID (Descending)"
 }
 
+
+export const SORT_ORDER: SortingStrategy[] = [
+    SortingStrategy.None,
+    SortingStrategy.AcceptanceRateAsc,
+    SortingStrategy.AcceptanceRateDesc,
+    SortingStrategy.ScoreAsc,
+    SortingStrategy.ScoreDesc,
+    SortingStrategy.IDDesc,
+];
+
+
 export enum SearchSetType {
     ScoreRange = "ScoreRange",
     Context = "Context",
@@ -197,7 +215,7 @@ export const SearchNode: ISearchSet = {
     type: SearchSetType.ScoreRange,
     time: 0,
     todayData: undefined
-}
+};
 
 export interface userContestRanKingBase {
     attendedContestsCount: number, // 参与次数
@@ -227,3 +245,39 @@ export interface ISubmitEvent {
     sub_type: string; // test  submit
     accepted: boolean
 }
+
+
+export interface IWebViewOption {
+    title: string;
+    viewColumn: ViewColumn;
+    preserveFocus?: boolean;
+}
+
+
+export enum OpenOption {
+    justOpenFile = "仅打开问题文件",
+    openInCurrentWindow = "在当前VsCode窗口打开",
+    openInNewWindow = "在新的VsCode窗口打开",
+    addToWorkspace = "添加到工作空间",
+}
+
+export enum DialogType {
+    info = "info",
+    warning = "warning",
+    error = "error",
+}
+
+
+export const MessageItemObj: MessageItem = {
+    title: "",
+    isCloseAffordance: false,
+};
+
+
+export const DialogOptions = {
+    open: Object.assign({}, MessageItemObj, { title: "Open" }),
+    yes: Object.assign({}, MessageItemObj, { title: "Yes" }),
+    no: Object.assign({}, MessageItemObj, { title: "No", isCloseAffordance: true }),
+    never: Object.assign({}, MessageItemObj, { title: "Never" }),
+    singUp: Object.assign({}, MessageItemObj, { title: "Sign up" }),
+};
diff --git a/src/explorer/LeetCodeNode.ts b/src/model/NodeModel.ts
similarity index 79%
rename from src/explorer/LeetCodeNode.ts
rename to src/model/NodeModel.ts
index 821517e..39c0e52 100644
--- a/src/explorer/LeetCodeNode.ts
+++ b/src/model/NodeModel.ts
@@ -1,10 +1,17 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/model/NodeMOdel.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
 
 import { Command, Uri } from "vscode";
-import { IProblem, IScoreData, ITodayData, ProblemState, RootNodeSort } from "../shared";
+import { IProblem, IScoreData, ITodayData, ProblemState, RootNodeSort } from "./Model";
 
-export class LeetCodeNode {
+export class NodeModel {
     private _u_score;
     constructor(private data: IProblem, private isProblemNode: boolean = true, userscore: number = 0) {
         this._u_score = userscore;
@@ -21,11 +28,11 @@ export class LeetCodeNode {
 
         // 每日一题的修正
         if (this.todayData) {
-            const us = this.todayDataUserStatus
+            const us = this.todayDataUserStatus;
             if (us == "FINISH") {
-                return ProblemState.AC
+                return ProblemState.AC;
             } else {
-                return ProblemState.Unknown
+                return ProblemState.Unknown;
             }
         }
 
@@ -109,28 +116,28 @@ export class LeetCodeNode {
         return this.data.scoreData?.ContestSlug || "";
     }
     public get scoreData(): IScoreData | undefined {
-        return this.data.scoreData
+        return this.data.scoreData;
     }
     public get isSearchResult(): boolean {
-        return this.data.isSearchResult
+        return this.data.isSearchResult;
     }
     public get input(): string {
         return this.data.input || "";
     }
     // 每日一题的一些信息
     public get todayData(): ITodayData | undefined {
-        return this.data.todayData
+        return this.data.todayData;
     }
     public set todayData(s: ITodayData | undefined) {
-        this.data.todayData = s
+        this.data.todayData = s;
     }
     public get todayDataDate(): string {
-        return this.data.todayData?.date || ""
+        return this.data.todayData?.date || "";
     }
     public get todayDataUserStatus(): string {
-        return this.data.todayData?.userStatus || ""
+        return this.data.todayData?.userStatus || "";
     }
     public get qid(): string {
-        return this.data.qid || ""
+        return this.data.qid || "";
     }
 }
diff --git a/src/webview/LeetCodeWebview.ts b/src/service/BaseWebviewService.ts
similarity index 78%
rename from src/webview/LeetCodeWebview.ts
rename to src/service/BaseWebviewService.ts
index 8532c8d..3646604 100644
--- a/src/webview/LeetCodeWebview.ts
+++ b/src/service/BaseWebviewService.ts
@@ -1,11 +1,20 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/webview/BaseWebViewService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
 
 import { commands, ConfigurationChangeEvent, Disposable, ViewColumn, WebviewPanel, window, workspace } from "vscode";
-import { openSettingsEditor, promptHintMessage } from "../utils/uiUtils";
-import { markdownEngine } from "./markdownEngine";
+import { markdownService } from "./MarkdownService";
+import { IWebViewOption } from "../model/Model";
+import { openSettingsEditor } from "../utils/ConfigUtils";
+import { promptHintMessage } from "../utils/OutputUtils";
 
-export abstract class LeetCodeWebview implements Disposable {
+export abstract class BaseWebViewService implements Disposable {
 
     protected readonly viewType: string = "leetcode.webview";
     protected panel: WebviewPanel | undefined;
@@ -25,7 +34,7 @@ export abstract class LeetCodeWebview implements Disposable {
                 enableCommandUris: true,
                 enableFindWidget: true,
                 retainContextWhenHidden: true,
-                localResourceRoots: markdownEngine.localResourceRoots,
+                localResourceRoots: markdownService.localResourceRoots,
             });
             this.panel.onDidDispose(this.onDidDisposeWebview, this, this.listeners);
             this.panel.webview.onDidReceiveMessage(this.onDidReceiveMessage, this, this.listeners);
@@ -61,7 +70,7 @@ export abstract class LeetCodeWebview implements Disposable {
 
     protected async onDidReceiveMessage(_message: any): Promise { /* no special rule */ }
 
-    protected abstract getWebviewOption(): ILeetCodeWebviewOption;
+    protected abstract getWebviewOption(): IWebViewOption;
 
     protected abstract getWebviewContent(): string;
 
@@ -75,8 +84,3 @@ export abstract class LeetCodeWebview implements Disposable {
     }
 }
 
-export interface ILeetCodeWebviewOption {
-    title: string;
-    viewColumn: ViewColumn;
-    preserveFocus?: boolean;
-}
diff --git a/src/service/EventService.ts b/src/service/EventService.ts
new file mode 100644
index 0000000..a89d488
--- /dev/null
+++ b/src/service/EventService.ts
@@ -0,0 +1,49 @@
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/service/EventService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, November 10th 2022, 3:14:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
+
+
+import { EventEmitter } from "events";
+
+
+import { UserStatus } from "../model/Model";
+import { ISubmitEvent } from "../model/Model";
+import { statusBarService } from "../service/StatusBarService";
+import { treeDataService } from "../service/TreeDataService";
+
+class EventService extends EventEmitter {
+
+    constructor() {
+        super();
+    }
+
+    /**
+     * 监听事件
+     */
+    public add_event() {
+        this.on("statusChanged", (userStatus: UserStatus, userName?: string) => {
+            statusBarService.update_status(userStatus, userName);
+            statusBarService.update();
+            treeDataService.cleanUserScore();
+            treeDataService.refresh();
+        });
+        this.on("submit", (e: ISubmitEvent) => {
+            treeDataService.checkSubmit(e);
+        });
+
+        this.on("searchUserContest", (tt) => {
+            statusBarService.update_UserContestInfo(tt);
+            statusBarService.update();
+            treeDataService.refresh();
+        });
+    }
+}
+
+export const eventService: EventService = new EventService();
+
diff --git a/src/leetCodeExecutor.ts b/src/service/ExecuteService.ts
similarity index 67%
rename from src/leetCodeExecutor.ts
rename to src/service/ExecuteService.ts
index f16b200..d33ef5e 100644
--- a/src/leetCodeExecutor.ts
+++ b/src/service/ExecuteService.ts
@@ -1,51 +1,58 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/service/executeService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Monday, October 31st 2022, 10:16:47 am
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
 
 import * as cp from "child_process";
 import * as fse from "fs-extra";
 import * as os from "os";
 import * as path from "path";
-import * as requireFromString from "require-from-string";
 import { ExtensionContext } from "vscode";
-import { ConfigurationChangeEvent, Disposable, MessageItem, window, workspace, WorkspaceConfiguration } from "vscode";
-import { Endpoint, IProblem, leetcodeHasInited } from "./shared";
-import { executeCommand, executeCommandWithProgress } from "./utils/cpUtils";
-import { DialogOptions, openUrl } from "./utils/uiUtils";
-import * as wsl from "./utils/wslUtils";
-import { toWslPath, useWsl } from "./utils/wslUtils";
-
-class LeetCodeExecutor implements Disposable {
+import { ConfigurationChangeEvent, Disposable, MessageItem, window, workspace } from "vscode";
+import { DialogOptions, DialogType, Endpoint, IProblem, leetcodeHasInited } from "../model/Model";
+import { executeCommand, executeCommandWithProgress } from "../utils/CliUtils";
+import { getNodePath } from "../utils/ConfigUtils";
+import { openUrl, promptForOpenOutputChannel } from "../utils/OutputUtils";
+import * as systemUtils from "../utils/SystemUtils";
+import { toWslPath, useWsl } from "../utils/SystemUtils";
+
+class ExecuteService implements Disposable {
     private leetCodeCliResourcesRootPath: string;
     private leetCodeCliRootPath: string;
     private nodeExecutable: string;
     private configurationChangeListener: Disposable;
 
     constructor() {
-        // this.leetCodeCliResourcesRootPath = path.join(__dirname, "..", "..", "node_modules", "vsc-leetcode-cli");
-        if (!wsl.useVscodeNode()) {
-            this.leetCodeCliResourcesRootPath = path.join(__dirname, "..", "..", "resources");
+        // this.leetCodeCliResourcesRootPath = path.join(__dirname, "..", "..", "node_modules", "childProcessCall");
+        if (!systemUtils.useVscodeNode()) {
+            this.leetCodeCliResourcesRootPath = path.join(__dirname, "..", "..", "..", "resources");
         }
-        this.leetCodeCliRootPath = path.join(__dirname, "..", "..", "out", "src", "vsc-leetcode-cli");
-        this.nodeExecutable = this.getNodePath();
+        this.leetCodeCliRootPath = path.join(__dirname, "..", "..", "..", "out", "src", "childProcessCall");
+        this.nodeExecutable = this.initNodePath();
         this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => {
-            if (event.affectsConfiguration("leetcode.nodePath")) {
-                this.nodeExecutable = this.getNodePath();
+            if (event.affectsConfiguration("leetcode-problem-rating.nodePath")) {
+                this.nodeExecutable = this.initNodePath();
             }
         }, this);
     }
 
     public async getLeetCodeBinaryPath(): Promise {
-        if (wsl.useVscodeNode()) {
-            return `${path.join(this.leetCodeCliRootPath, "new_lib", "cli.js")}`;
+        if (systemUtils.useVscodeNode()) {
+            return `${path.join(this.leetCodeCliRootPath, "cli.js")}`;
         } else {
-            if (wsl.useWsl()) {
-                return `${await wsl.toWslPath(`"${path.join(this.leetCodeCliResourcesRootPath, "bin", "leetcode")}"`)}`;
+            if (systemUtils.useWsl()) {
+                return `${await systemUtils.toWslPath(`"${path.join(this.leetCodeCliResourcesRootPath, "bin", "leetcode")}"`)}`;
             }
             return `"${path.join(this.leetCodeCliResourcesRootPath, "bin", "leetcode")}"`;
         }
     }
 
-    public async meetRequirements(context: ExtensionContext): Promise {
+    public async checkNodeEnv(context: ExtensionContext): Promise {
         const hasInited: boolean | undefined = context.globalState.get(leetcodeHasInited);
         if (!hasInited) {
             await this.removeOldCache();
@@ -72,21 +79,16 @@ class LeetCodeExecutor implements Disposable {
             }
             return false;
         }
-        // for (const plugin of supportedPlugins) {
-        //     try { // Check plugin
-        //         // await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "plugin", "-e", plugin]);
-        //     } catch (error) { // Remove old cache that may cause the error download plugin and activate
-        //         // await this.removeOldCache();
-        //         // await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "plugin", "-i", plugin]);
-        //     }
-        // }
-        // Set the global state HasInited true to skip delete old cache after init
         context.globalState.update(leetcodeHasInited, true);
         return true;
     }
 
-    public async deleteCache(): Promise {
-        return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "cache", "-d"]);
+    public async deleteCache() {
+        try {
+            await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "cache", "-d"]);
+        } catch (error) {
+            await promptForOpenOutputChannel("Failed to delete cache. 请查看控制台信息~", DialogType.error);
+        }
     }
 
     public async getUserInfo(): Promise {
@@ -124,19 +126,7 @@ class LeetCodeExecutor implements Disposable {
         }
     }
 
-    /**
-     * This function returns solution of a problem identified by input
-     *
-     * @remarks
-     * Even though this function takes the needTranslation flag, it is important to note
-     * that as of vsc-leetcode-cli 2.8.0, leetcode-cli doesn't support querying solution
-     * on CN endpoint yet. So this flag doesn't have any effect right now.
-     *
-     * @param input - parameter to pass to cli that can identify a problem
-     * @param language - the source code language of the solution desired
-     * @param needTranslation - whether or not to use endPoint translation on solution query
-     * @returns promise of the solution string
-     */
+
     public async showSolution(input: string, language: string, needTranslation: boolean): Promise {
         // solution don't support translation
         const cmd: string[] = [await this.getLeetCodeBinaryPath(), "show", input, "--solution", "-l", language];
@@ -157,6 +147,13 @@ class LeetCodeExecutor implements Disposable {
         return solution;
     }
 
+    public async getScoreDataOnline(): Promise {
+        // solution don't support translation
+        const cmd: string[] = [await this.getLeetCodeBinaryPath(), "query", "-c"];
+        const solution: string = await this.executeCommandWithProgressEx("get data from https://zerotrac.github.io/leetcode_problem_rating/data.json", this.nodeExecutable, cmd);
+        return solution;
+    }
+
     public async getTestApi(username: string): Promise {
         // solution don't support translation
         const cmd: string[] = [await this.getLeetCodeBinaryPath(), "query", "-z", username];
@@ -183,25 +180,10 @@ class LeetCodeExecutor implements Disposable {
         return await this.executeCommandWithProgressEx("Fetching problem description...", this.nodeExecutable, cmd);
     }
 
-    public async listSessions(): Promise {
-        return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session"]);
-    }
-
-    public async enableSession(name: string): Promise {
-        return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-e", name]);
-    }
-
-    public async createSession(id: string): Promise {
-        return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-c", id]);
-    }
-
-    public async deleteSession(id: string): Promise {
-        return await this.executeCommandEx(this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "session", "-d", id]);
-    }
 
     public async submitSolution(filePath: string): Promise {
         try {
-            if (wsl.useVscodeNode()) {
+            if (systemUtils.useVscodeNode()) {
                 return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "submit", `${filePath}`]);
             }
             return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "submit", `"${filePath}"`]);
@@ -215,18 +197,18 @@ class LeetCodeExecutor implements Disposable {
 
     public async testSolution(filePath: string, testString?: string, allCase?: boolean): Promise {
         if (testString) {
-            if (wsl.useVscodeNode()) {
+            if (systemUtils.useVscodeNode()) {
                 return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `${filePath}`, "-t", `${testString}`]);
             }
             return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `"${filePath}"`, "-t", `${testString}`]);
         }
         if (allCase) {
-            if (wsl.useVscodeNode()) {
+            if (systemUtils.useVscodeNode()) {
                 return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `${filePath}`, "-a"]);
             }
             return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `"${filePath}"`, "-a"]);
         }
-        if (wsl.useVscodeNode()) {
+        if (systemUtils.useVscodeNode()) {
             return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `${filePath}`]);
         }
         return await this.executeCommandWithProgressEx("Submitting to LeetCode...", this.nodeExecutable, [await this.getLeetCodeBinaryPath(), "test", `"${filePath}"`]);
@@ -249,17 +231,7 @@ class LeetCodeExecutor implements Disposable {
         }
         await this.executeCommandWithProgressEx("Updating the favorite list...", "node", commandParams);
     }
-    // 读取tag 编号看着只有钱1148才有
-    public async getCompaniesAndTags(): Promise<{ companies: { [key: string]: string[] }, tags: { [key: string]: string[] } }> {
-        // preprocess the plugin source
-        const companiesTagsPath: string = path.join(this.leetCodeCliRootPath, "lib", "plugins", "company.js");
-        const companiesTagsSrc: string = (await fse.readFile(companiesTagsPath, "utf8")).replace(
-            "module.exports = plugin",
-            "module.exports = { COMPONIES, TAGS }",
-        );
-        const { COMPONIES, TAGS } = requireFromString(companiesTagsSrc, companiesTagsPath);
-        return { companies: COMPONIES, tags: TAGS };
-    }
+
 
     public get node(): string {
         return this.nodeExecutable;
@@ -269,30 +241,29 @@ class LeetCodeExecutor implements Disposable {
         this.configurationChangeListener.dispose();
     }
 
-    private getNodePath(): string {
-        if (wsl.useVscodeNode()) {
-            return "node"
+    private initNodePath(): string {
+        if (systemUtils.useVscodeNode()) {
+            return "node";
         }
-        const extensionConfig: WorkspaceConfiguration = workspace.getConfiguration("leetcode-problem-rating", null);
-        return extensionConfig.get("nodePath", "node" /* default value */);
+        return getNodePath();
     }
 
     private async executeCommandEx(command: string, args: string[], options: cp.SpawnOptions = { shell: true }): Promise {
-        if (wsl.useWsl()) {
+        if (systemUtils.useWsl()) {
             return await executeCommand("wsl", [command].concat(args), options);
         }
         return await executeCommand(command, args, options);
     }
 
     private async executeCommandWithProgressEx(message: string, command: string, args: string[], options: cp.SpawnOptions = { shell: true }): Promise {
-        if (wsl.useWsl()) {
+        if (systemUtils.useWsl()) {
             return await executeCommandWithProgress(message, "wsl", [command].concat(args), options);
         }
         return await executeCommandWithProgress(message, command, args, options);
     }
 
     public async removeOldCache(): Promise {
-        const oldPath: string = path.join(os.homedir(), ".lc");
+        const oldPath: string = path.join(os.homedir(), ".lcpr");
         if (await fse.pathExists(oldPath)) {
             await fse.remove(oldPath);
         }
@@ -300,4 +271,4 @@ class LeetCodeExecutor implements Disposable {
 
 }
 
-export const leetCodeExecutor: LeetCodeExecutor = new LeetCodeExecutor();
+export const executeService: ExecuteService = new ExecuteService();
diff --git a/src/codelens/CustomCodeLensProvider.ts b/src/service/FileButtonService.ts
similarity index 81%
rename from src/codelens/CustomCodeLensProvider.ts
rename to src/service/FileButtonService.ts
index 3322ed2..d922fae 100644
--- a/src/codelens/CustomCodeLensProvider.ts
+++ b/src/service/FileButtonService.ts
@@ -1,12 +1,18 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/service/FileButtonService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
 
 import * as vscode from "vscode";
-import { explorerNodeManager } from "../explorer/explorerNodeManager";
-import { LeetCodeNode } from "../explorer/LeetCodeNode";
-import { getEditorShortcuts } from "../utils/settingUtils";
+import { treeViewController } from "../controller/TreeViewController";
+import { NodeModel } from "../model/NodeModel";
+import { getEditorShortcuts } from "../utils/ConfigUtils";
 
-export class CustomCodeLensProvider implements vscode.CodeLensProvider {
+export class FileButtonService implements vscode.CodeLensProvider {
 
     private onDidChangeCodeLensesEmitter: vscode.EventEmitter = new vscode.EventEmitter();
 
@@ -30,9 +36,9 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider {
             return undefined;
         }
         const nodeId: string | undefined = matchResult[1];
-        let node: LeetCodeNode | undefined;
+        let node: NodeModel | undefined;
         if (nodeId) {
-            node = explorerNodeManager.getNodeById(nodeId);
+            node = treeViewController.getNodeById(nodeId);
         }
 
         let codeLensLine: number = document.lineCount - 1;
@@ -106,4 +112,4 @@ export class CustomCodeLensProvider implements vscode.CodeLensProvider {
     }
 }
 
-export const customCodeLensProvider: CustomCodeLensProvider = new CustomCodeLensProvider();
+export const fileButtonService: FileButtonService = new FileButtonService();
diff --git a/src/webview/markdownEngine.ts b/src/service/MarkdownService.ts
similarity index 90%
rename from src/webview/markdownEngine.ts
rename to src/service/MarkdownService.ts
index 4c1db65..a2e8405 100644
--- a/src/webview/markdownEngine.ts
+++ b/src/service/MarkdownService.ts
@@ -1,15 +1,22 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/service/markdownService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
 
 import * as hljs from "highlight.js";
 import * as MarkdownIt from "markdown-it";
 import * as os from "os";
 import * as path from "path";
 import * as vscode from "vscode";
-import { leetCodeChannel } from "../leetCodeChannel";
-import { isWindows } from "../utils/osUtils";
+import { logOutput } from "../utils/OutputUtils";
+import { isWindows } from "../utils/SystemUtils";
 
-class MarkdownEngine implements vscode.Disposable {
+class MarkdownService implements vscode.Disposable {
 
     private engine: MarkdownIt;
     private config: MarkdownConfiguration;
@@ -54,7 +61,7 @@ class MarkdownEngine implements vscode.Disposable {
             const stylePaths: string[] = require(path.join(this.config.extRoot, "package.json"))["contributes"]["markdown.previewStyles"];
             styles = stylePaths.map((p: string) => vscode.Uri.file(path.join(this.config.extRoot, p)).with({ scheme: "vscode-resource" }));
         } catch (error) {
-            leetCodeChannel.appendLine("[Error] Fail to load built-in markdown style file.");
+            logOutput.appendLine("[Error] Fail to load built-in markdown style file.");
         }
         return styles.map((style: vscode.Uri) => ``).join(os.EOL);
     }
@@ -163,4 +170,4 @@ class MarkdownConfiguration {
     }
 }
 
-export const markdownEngine: MarkdownEngine = new MarkdownEngine();
+export const markdownService: MarkdownService = new MarkdownService();
diff --git a/src/webview/leetCodePreviewProvider.ts b/src/service/PreviewService.ts
similarity index 85%
rename from src/webview/leetCodePreviewProvider.ts
rename to src/service/PreviewService.ts
index 78b4099..ff94145 100644
--- a/src/webview/leetCodePreviewProvider.ts
+++ b/src/service/PreviewService.ts
@@ -1,13 +1,20 @@
-// Copyright (c) jdneo. All rights reserved.
-// Licensed under the MIT license.
+/*
+ * Filename: https://github.com/ccagml/vscode-leetcode-problem-rating/src/service/previewService.ts
+ * Path: https://github.com/ccagml/vscode-leetcode-problem-rating
+ * Created Date: Thursday, October 27th 2022, 7:43:29 pm
+ * Author: ccagml
+ *
+ * Copyright (c) 2022 ccagml . All rights reserved.
+ */
+
 
 import { commands, ViewColumn } from "vscode";
-import { getLeetCodeEndpoint } from "../commands/plugin";
-import { Endpoint, IProblem } from "../shared";
-import { ILeetCodeWebviewOption, LeetCodeWebview } from "./LeetCodeWebview";
-import { markdownEngine } from "./markdownEngine";
+import { Endpoint, IProblem, IWebViewOption } from "../model/Model";
+import { getLeetCodeEndpoint } from "../utils/ConfigUtils";
+import { BaseWebViewService } from "./BaseWebviewService";
+import { markdownService } from "./MarkdownService";
 
-class LeetCodePreviewProvider extends LeetCodeWebview {
+class PreviewService extends BaseWebViewService {
 
     protected readonly viewType: string = "leetcode.preview";
     private node: IProblem;
@@ -30,7 +37,7 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
         // }
     }
 
-    protected getWebviewOption(): ILeetCodeWebviewOption {
+    protected getWebviewOption(): IWebViewOption {
         if (!this.sideMode) {
             return {
                 title: `${this.node.name}: Preview`,
@@ -72,8 +79,8 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
                 `,
         };
         const { title, url, category, difficulty, likes, dislikes, body } = this.description;
-        const head: string = markdownEngine.render(`# [${title}](${url})`);
-        const info: string = markdownEngine.render([
+        const head: string = markdownService.render(`# [${title}](${url})`);
+        const info: string = markdownService.render([
             `| Category | Difficulty | Likes | Dislikes |`,
             `| :------: | :--------: | :---: | :------: |`,
             `| ${category} | ${difficulty} | ${likes} | ${dislikes} |`,
@@ -81,7 +88,7 @@ class LeetCodePreviewProvider extends LeetCodeWebview {
         const tags: string = [
             `
`, `Tags`, - markdownEngine.render( + markdownService.render( this.description.tags .map((t: string) => `[\`${t}\`](https://leetcode.com/tag/${t})`) .join(" | "), @@ -91,20 +98,20 @@ class LeetCodePreviewProvider extends LeetCodeWebview { const companies: string = [ `
`, `Companies`, - markdownEngine.render( + markdownService.render( this.description.companies .map((c: string) => `\`${c}\``) .join(" | "), ), `
`, ].join("\n"); - const links: string = markdownEngine.render(`[Discussion](${this.getDiscussionLink(url)}) | [Solution](${this.getSolutionLink(url)})`); + const links: string = markdownService.render(`[Discussion](${this.getDiscussionLink(url)}) | [Solution](${this.getSolutionLink(url)})`); return ` - ${markdownEngine.getStyles()} + ${markdownService.getStyles()} ${!this.sideMode ? button.style : ""}