atcoder-userscript-libs

AtCoderのページ上で動作するスクリプト用のライブラリです。

当前为 2019-06-23 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/386712/711405/atcoder-userscript-libs.js

  1. usLibs =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = 23);
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ([
  89. /* 0 */
  90. /***/ (function(module, exports) {
  91.  
  92. module.exports = moment;
  93.  
  94. /***/ }),
  95. /* 1 */
  96. /***/ (function(module, exports) {
  97.  
  98. module.exports = jQuery;
  99.  
  100. /***/ }),
  101. /* 2 */
  102. /***/ (function(module, exports) {
  103.  
  104. module.exports = has;
  105.  
  106. /***/ }),
  107. /* 3 */
  108. /***/ (function(module, exports) {
  109.  
  110. module.exports = arrayToSet;
  111.  
  112. /***/ }),
  113. /* 4 */
  114. /***/ (function(module, exports) {
  115.  
  116. module.exports = setToArray;
  117.  
  118. /***/ }),
  119. /* 5 */
  120. /***/ (function(module, exports) {
  121.  
  122. module.exports = setCookie;
  123.  
  124. /***/ }),
  125. /* 6 */
  126. /***/ (function(module, exports) {
  127.  
  128. module.exports = getCookie;
  129.  
  130. /***/ }),
  131. /* 7 */
  132. /***/ (function(module, exports) {
  133.  
  134. module.exports = getCookieBool;
  135.  
  136. /***/ }),
  137. /* 8 */
  138. /***/ (function(module, exports) {
  139.  
  140. module.exports = delCookie;
  141.  
  142. /***/ }),
  143. /* 9 */
  144. /***/ (function(module, exports) {
  145.  
  146. module.exports = setLS;
  147.  
  148. /***/ }),
  149. /* 10 */
  150. /***/ (function(module, exports) {
  151.  
  152. module.exports = getLS;
  153.  
  154. /***/ }),
  155. /* 11 */
  156. /***/ (function(module, exports) {
  157.  
  158. module.exports = delLS;
  159.  
  160. /***/ }),
  161. /* 12 */
  162. /***/ (function(module, exports) {
  163.  
  164. module.exports = getServerTime;
  165.  
  166. /***/ }),
  167. /* 13 */
  168. /***/ (function(module, exports) {
  169.  
  170. module.exports = rand;
  171.  
  172. /***/ }),
  173. /* 14 */
  174. /***/ (function(module, exports) {
  175.  
  176. module.exports = copy;
  177.  
  178. /***/ }),
  179. /* 15 */
  180. /***/ (function(module, exports) {
  181.  
  182. module.exports = storeFavs;
  183.  
  184. /***/ }),
  185. /* 16 */
  186. /***/ (function(module, exports) {
  187.  
  188. module.exports = reloadFavs;
  189.  
  190. /***/ }),
  191. /* 17 */
  192. /***/ (function(module, exports) {
  193.  
  194. module.exports = toggleFav;
  195.  
  196. /***/ }),
  197. /* 18 */
  198. /***/ (function(module, exports) {
  199.  
  200. module.exports = LANG;
  201.  
  202. /***/ }),
  203. /* 19 */
  204. /***/ (function(module, exports) {
  205.  
  206. module.exports = userScreenName;
  207.  
  208. /***/ }),
  209. /* 20 */
  210. /***/ (function(module, exports) {
  211.  
  212. module.exports = (typeof contestScreenName !== "undefined" ? contestScreenName : null);
  213.  
  214. /***/ }),
  215. /* 21 */
  216. /***/ (function(module, exports) {
  217.  
  218. module.exports = (typeof startTime !== "undefined" ? startTime : null);
  219.  
  220. /***/ }),
  221. /* 22 */
  222. /***/ (function(module, exports) {
  223.  
  224. module.exports = (typeof endTime !== "undefined" ? endTime : null);
  225.  
  226. /***/ }),
  227. /* 23 */
  228. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  229.  
  230. "use strict";
  231. __webpack_require__.r(__webpack_exports__);
  232. var rating_namespaceObject = {};
  233. __webpack_require__.r(rating_namespaceObject);
  234. __webpack_require__.d(rating_namespaceObject, "calcRatingFromHistory", function() { return calcRatingFromHistory; });
  235. __webpack_require__.d(rating_namespaceObject, "calcRatingFromLast", function() { return calcRatingFromLast; });
  236. __webpack_require__.d(rating_namespaceObject, "positivizeRating", function() { return positivizeRating; });
  237. __webpack_require__.d(rating_namespaceObject, "unpositivizeRating", function() { return unpositivizeRating; });
  238. __webpack_require__.d(rating_namespaceObject, "calcRequiredPerformance", function() { return calcRequiredPerformance; });
  239. __webpack_require__.d(rating_namespaceObject, "colorBounds", function() { return colorBounds; });
  240. __webpack_require__.d(rating_namespaceObject, "colorNames", function() { return colorNames; });
  241. __webpack_require__.d(rating_namespaceObject, "getColor", function() { return getColor; });
  242. var global_namespaceObject = {};
  243. __webpack_require__.r(global_namespaceObject);
  244. __webpack_require__.d(global_namespaceObject, "has", function() { return external_has_default.a; });
  245. __webpack_require__.d(global_namespaceObject, "arrayToSet", function() { return external_arrayToSet_default.a; });
  246. __webpack_require__.d(global_namespaceObject, "setToArray", function() { return external_setToArray_default.a; });
  247. __webpack_require__.d(global_namespaceObject, "setCookie", function() { return external_setCookie_default.a; });
  248. __webpack_require__.d(global_namespaceObject, "getCookie", function() { return external_getCookie_default.a; });
  249. __webpack_require__.d(global_namespaceObject, "getCookieBool", function() { return external_getCookieBool_default.a; });
  250. __webpack_require__.d(global_namespaceObject, "delCookie", function() { return external_delCookie_default.a; });
  251. __webpack_require__.d(global_namespaceObject, "setLS", function() { return external_setLS_default.a; });
  252. __webpack_require__.d(global_namespaceObject, "getLS", function() { return external_getLS_default.a; });
  253. __webpack_require__.d(global_namespaceObject, "delLS", function() { return external_delLS_default.a; });
  254. __webpack_require__.d(global_namespaceObject, "getServerTime", function() { return external_getServerTime_default.a; });
  255. __webpack_require__.d(global_namespaceObject, "rand", function() { return external_rand_default.a; });
  256. __webpack_require__.d(global_namespaceObject, "copy", function() { return external_copy_default.a; });
  257. __webpack_require__.d(global_namespaceObject, "storeFavs", function() { return external_storeFavs_default.a; });
  258. __webpack_require__.d(global_namespaceObject, "reloadFavs", function() { return external_reloadFavs_default.a; });
  259. __webpack_require__.d(global_namespaceObject, "toggleFav", function() { return external_toggleFav_default.a; });
  260. __webpack_require__.d(global_namespaceObject, "LANG", function() { return external_LANG_default.a; });
  261. __webpack_require__.d(global_namespaceObject, "userScreenName", function() { return external_userScreenName_default.a; });
  262. __webpack_require__.d(global_namespaceObject, "contestScreenName", function() { return external_typeof_contestScreenName_undefined_contestScreenName_null_default.a; });
  263. __webpack_require__.d(global_namespaceObject, "startTime", function() { return external_typeof_startTime_undefined_startTime_null_default.a; });
  264. __webpack_require__.d(global_namespaceObject, "endTime", function() { return external_typeof_endTime_undefined_endTime_null_default.a; });
  265. var data_namespaceObject = {};
  266. __webpack_require__.r(data_namespaceObject);
  267. __webpack_require__.d(data_namespaceObject, "getStandingsData", function() { return getStandingsData; });
  268. __webpack_require__.d(data_namespaceObject, "getAPerfsData", function() { return getAPerfsData; });
  269. __webpack_require__.d(data_namespaceObject, "getResultsData", function() { return getResultsData; });
  270. __webpack_require__.d(data_namespaceObject, "getHistoryData", function() { return getHistoryData; });
  271. __webpack_require__.d(data_namespaceObject, "getMyHistoryData", function() { return getMyHistoryData; });
  272. __webpack_require__.d(data_namespaceObject, "getPerformanceHistories", function() { return getPerformanceHistories; });
  273. var contestInformation_namespaceObject = {};
  274. __webpack_require__.r(contestInformation_namespaceObject);
  275. __webpack_require__.d(contestInformation_namespaceObject, "contestInformation", function() { return contestInformation; });
  276.  
  277. // CONCATENATED MODULE: ./src/libs/rating.js
  278. //Copyright © 2017 koba-e964.
  279. //from : https://github.com/koba-e964/atcoder-rating-estimator
  280.  
  281. const finf = bigf(400);
  282.  
  283. function bigf(n) {
  284. let numerator = 1.0;
  285. let denominator = 1.0;
  286. for (let i = 0; i < n; ++i) {
  287. numerator *= 0.81;
  288. denominator *= 0.9;
  289. }
  290. numerator = (1 - numerator) * 0.81 / 0.19;
  291. denominator = (1 - denominator) * 0.9 / 0.1;
  292. return Math.sqrt(numerator) / denominator;
  293.  
  294. }
  295.  
  296. function f(n) {
  297. return (bigf(n) - finf) / (bigf(1) - finf) * 1200.0;
  298. }
  299.  
  300. /**
  301. * calculate unpositivized rating from performance history
  302. * @param {Number[]} [history] performance history
  303. * @returns {Number} unpositivized rating
  304. */
  305. function calcRatingFromHistory(history) {
  306. let n = history.length;
  307. let numerator = 0.0;
  308. let denominator = 0.0;
  309. for (let i = n - 1; i >= 0; --i) {
  310. numerator *= 0.9;
  311. numerator += 0.9 * Math.pow(2, history[i] / 800.0);
  312. denominator *= 0.9;
  313. denominator += 0.9;
  314. }
  315. return Math.log2(numerator / denominator) * 800.0 - f(n);
  316. }
  317.  
  318. /**
  319. * calculate unpositivized rating from last state
  320. * @param {Number} [last] last unpositivized rating
  321. * @param {Number} [perf] performance
  322. * @param {Number} [ratedMatches] count of participated rated contest
  323. * @returns {number} estimated unpositivized rating
  324. */
  325. function calcRatingFromLast(last, perf, ratedMatches) {
  326. if (ratedMatches === 0) return perf - 1200;
  327. last += f(ratedMatches);
  328. const weight = 9 - 9 * 0.9 ** ratedMatches;
  329. const numerator = weight * (2 ** (last / 800.0)) + 2 ** (perf / 800.0);
  330. const denominator = 1 + weight;
  331. return Math.log2(numerator / denominator) * 800.0 - f(ratedMatches + 1);
  332. }
  333.  
  334. /**
  335. * (-inf, inf) -> (0, inf)
  336. * @param {Number} [rating] unpositivized rating
  337. * @returns {number} positivized rating
  338. */
  339. function positivizeRating(rating) {
  340. if (rating >= 400.0) {
  341. return rating;
  342. }
  343. return 400.0 * Math.exp((rating - 400.0) / 400.0);
  344. }
  345.  
  346. /**
  347. * (0, inf) -> (-inf, inf)
  348. * @param {Number} [rating] positivized rating
  349. * @returns {number} unpositivized rating
  350. */
  351. function unpositivizeRating(rating) {
  352. if (rating >= 400.0) {
  353. return rating;
  354. }
  355. return 400.0 + 400.0 * Math.log(rating / 400.0);
  356. }
  357.  
  358. /**
  359. * calculate the performance required to reach a target rate
  360. * @param {Number} [targetRating] targeted unpositivized rating
  361. * @param {Number[]} [history] performance history
  362. * @returns {number} performance
  363. */
  364. function calcRequiredPerformance(targetRating, history) {
  365. let upper = 10000.0;
  366. let lower = -10000.0;
  367. for (let i = 0; i < 100; ++i) {
  368. const mid = (lower + upper) / 2;
  369. const rating = calcRatingFromHistory([mid].concat(history));
  370. if (targetRating <= rating) upper = mid;
  371. else lower = mid;
  372. }
  373. return lower;
  374. }
  375.  
  376.  
  377. const colorBounds = {
  378. "gray": 0,
  379. "brown": 400,
  380. "green": 800,
  381. "cyan": 1200,
  382. "blue": 1600,
  383. "yellow": 2000,
  384. "orange": 2400,
  385. "red": 2800
  386. };
  387.  
  388. const colorNames = ["unrated", "gray", "brown", "green", "cyan", "blue", "yellow", "orange", "red"];
  389.  
  390. function getColor(rating) {
  391. let colorIndex = rating > 0 ? Math.min(Math.floor(rating / 400) + 1, 8) : 0;
  392. return colorNames[colorIndex];
  393. }
  394. // EXTERNAL MODULE: external "jQuery"
  395. var external_jQuery_ = __webpack_require__(1);
  396.  
  397. // EXTERNAL MODULE: external "moment"
  398. var external_moment_ = __webpack_require__(0);
  399. var external_moment_default = /*#__PURE__*/__webpack_require__.n(external_moment_);
  400.  
  401. // EXTERNAL MODULE: external "has"
  402. var external_has_ = __webpack_require__(2);
  403. var external_has_default = /*#__PURE__*/__webpack_require__.n(external_has_);
  404.  
  405. // EXTERNAL MODULE: external "arrayToSet"
  406. var external_arrayToSet_ = __webpack_require__(3);
  407. var external_arrayToSet_default = /*#__PURE__*/__webpack_require__.n(external_arrayToSet_);
  408.  
  409. // EXTERNAL MODULE: external "setToArray"
  410. var external_setToArray_ = __webpack_require__(4);
  411. var external_setToArray_default = /*#__PURE__*/__webpack_require__.n(external_setToArray_);
  412.  
  413. // EXTERNAL MODULE: external "setCookie"
  414. var external_setCookie_ = __webpack_require__(5);
  415. var external_setCookie_default = /*#__PURE__*/__webpack_require__.n(external_setCookie_);
  416.  
  417. // EXTERNAL MODULE: external "getCookie"
  418. var external_getCookie_ = __webpack_require__(6);
  419. var external_getCookie_default = /*#__PURE__*/__webpack_require__.n(external_getCookie_);
  420.  
  421. // EXTERNAL MODULE: external "getCookieBool"
  422. var external_getCookieBool_ = __webpack_require__(7);
  423. var external_getCookieBool_default = /*#__PURE__*/__webpack_require__.n(external_getCookieBool_);
  424.  
  425. // EXTERNAL MODULE: external "delCookie"
  426. var external_delCookie_ = __webpack_require__(8);
  427. var external_delCookie_default = /*#__PURE__*/__webpack_require__.n(external_delCookie_);
  428.  
  429. // EXTERNAL MODULE: external "setLS"
  430. var external_setLS_ = __webpack_require__(9);
  431. var external_setLS_default = /*#__PURE__*/__webpack_require__.n(external_setLS_);
  432.  
  433. // EXTERNAL MODULE: external "getLS"
  434. var external_getLS_ = __webpack_require__(10);
  435. var external_getLS_default = /*#__PURE__*/__webpack_require__.n(external_getLS_);
  436.  
  437. // EXTERNAL MODULE: external "delLS"
  438. var external_delLS_ = __webpack_require__(11);
  439. var external_delLS_default = /*#__PURE__*/__webpack_require__.n(external_delLS_);
  440.  
  441. // EXTERNAL MODULE: external "getServerTime"
  442. var external_getServerTime_ = __webpack_require__(12);
  443. var external_getServerTime_default = /*#__PURE__*/__webpack_require__.n(external_getServerTime_);
  444.  
  445. // EXTERNAL MODULE: external "rand"
  446. var external_rand_ = __webpack_require__(13);
  447. var external_rand_default = /*#__PURE__*/__webpack_require__.n(external_rand_);
  448.  
  449. // EXTERNAL MODULE: external "copy"
  450. var external_copy_ = __webpack_require__(14);
  451. var external_copy_default = /*#__PURE__*/__webpack_require__.n(external_copy_);
  452.  
  453. // EXTERNAL MODULE: external "storeFavs"
  454. var external_storeFavs_ = __webpack_require__(15);
  455. var external_storeFavs_default = /*#__PURE__*/__webpack_require__.n(external_storeFavs_);
  456.  
  457. // EXTERNAL MODULE: external "reloadFavs"
  458. var external_reloadFavs_ = __webpack_require__(16);
  459. var external_reloadFavs_default = /*#__PURE__*/__webpack_require__.n(external_reloadFavs_);
  460.  
  461. // EXTERNAL MODULE: external "toggleFav"
  462. var external_toggleFav_ = __webpack_require__(17);
  463. var external_toggleFav_default = /*#__PURE__*/__webpack_require__.n(external_toggleFav_);
  464.  
  465. // EXTERNAL MODULE: external "LANG"
  466. var external_LANG_ = __webpack_require__(18);
  467. var external_LANG_default = /*#__PURE__*/__webpack_require__.n(external_LANG_);
  468.  
  469. // EXTERNAL MODULE: external "userScreenName"
  470. var external_userScreenName_ = __webpack_require__(19);
  471. var external_userScreenName_default = /*#__PURE__*/__webpack_require__.n(external_userScreenName_);
  472.  
  473. // EXTERNAL MODULE: external "(typeof contestScreenName !== \"undefined\" ? contestScreenName : null)"
  474. var external_typeof_contestScreenName_undefined_contestScreenName_null_ = __webpack_require__(20);
  475. var external_typeof_contestScreenName_undefined_contestScreenName_null_default = /*#__PURE__*/__webpack_require__.n(external_typeof_contestScreenName_undefined_contestScreenName_null_);
  476.  
  477. // EXTERNAL MODULE: external "(typeof startTime !== \"undefined\" ? startTime : null)"
  478. var external_typeof_startTime_undefined_startTime_null_ = __webpack_require__(21);
  479. var external_typeof_startTime_undefined_startTime_null_default = /*#__PURE__*/__webpack_require__.n(external_typeof_startTime_undefined_startTime_null_);
  480.  
  481. // EXTERNAL MODULE: external "(typeof endTime !== \"undefined\" ? endTime : null)"
  482. var external_typeof_endTime_undefined_endTime_null_ = __webpack_require__(22);
  483. var external_typeof_endTime_undefined_endTime_null_default = /*#__PURE__*/__webpack_require__.n(external_typeof_endTime_undefined_endTime_null_);
  484.  
  485. // CONCATENATED MODULE: ./src/libs/global.js
  486. //utils.js
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513. //global variable
  514.  
  515.  
  516. //only contest page
  517.  
  518.  
  519.  
  520.  
  521.  
  522. // CONCATENATED MODULE: ./src/libs/data.js
  523.  
  524.  
  525. /**
  526. * @typedef {{IsRated: boolean, Place: number, OldRating: number, NewRating: number, Performance: number, InnerPerformance: number, ContestScreenName: string, ContestName: string, EndTime : string}} UserResult
  527. * @typedef {{Assignment: string, TaskName: string, TaskScreenName: string}} TaskInfo
  528. * @typedef {{Count: number, Failure: number, Penalty: number, Score: number, Elapsed: number, Status: number, Pending: boolean, Frozen: boolean, Additional: null}} StandingResult
  529. * @typedef {{Rank: number, Additional: null, UserName: string, UserScreenName: string, UserIsDeleted: boolean, Affiliation: string, Country: string, Rating: number, OldRating: number, IsRated: boolean, Competitions: number, TaskResults: StandingResult[], TotalResult: StandingResult}} StandingData
  530. * @typedef {{Fixed: boolean, AdditionalColumns:null, TaskInfo: TaskInfo[], StandingsData: StandingData[]}} Standings
  531. */
  532.  
  533. /**
  534. *
  535. * @param contestScreenName
  536. * @return {Promise<Standings>}
  537. */
  538. async function getStandingsData(contestScreenName) {
  539. return await external_jQuery_["ajax"](`https://atcoder.jp/contests/${contestScreenName}/standings/json`);
  540. }
  541.  
  542. /**
  543. * コンテストの結果一覧を取得する
  544. * @param {string} [contestScreenName] コンテスト名
  545. * @return {Promise<Object.<string, number>>}
  546. */
  547. async function getAPerfsData(contestScreenName) {
  548. return await external_jQuery_["ajax"](`https://ac-predictor.azurewebsites.net/api/aperfs/${contestScreenName}`);
  549. }
  550.  
  551. /**
  552. * コンテストの結果一覧を取得する
  553. * @param {string} [contestScreenName] コンテスト名
  554. * @return {Promise<UserResult[]>}
  555. */
  556. async function getResultsData(contestScreenName) {
  557. return await external_jQuery_["ajax"](`https://atcoder.jp/contests/${contestScreenName}/results/json`);
  558. }
  559.  
  560. /**
  561. * ユーザーのコンテスト参加履歴を取得する
  562. * @param {string} [userScreenName] ユーザー名
  563. * @return {Promise<UserResult[]>}
  564. */
  565. async function getHistoryData(userScreenName) {
  566. return await external_jQuery_["ajax"](`https://atcoder.jp/users/${userScreenName}/history/json`);
  567. }
  568.  
  569.  
  570.  
  571.  
  572.  
  573. /**
  574. * @type {UserResult[]}
  575. */
  576. let myHistoryData = null;
  577. /**
  578. * 自分のパフォーマンス履歴を取得
  579. * @return {Promise<UserResult[]>} パフォーマンス履歴を返すpromise
  580. */
  581. async function getMyHistoryData() {
  582. return new Promise((resolve) => {
  583. if (myHistoryData || !external_userScreenName_default.a) resolve(myHistoryData);
  584. getHistoryData(external_userScreenName_default.a).then((data) => {
  585. resolve(myHistoryData = data);
  586. })
  587. });
  588. }
  589.  
  590. /**
  591. * ユーザーのパフォーマンス履歴を時間降順で取得
  592. * @param {UserResult[]} [history] ユーザーのコンテスト結果履歴
  593. * @return {number[]}
  594. */
  595. function getPerformanceHistories(history) {
  596. let onlyRated = history.filter(x => x.IsRated);
  597. onlyRated.sort((a, b) => external_moment_default()(b.EndTime) - external_moment_default()(a.EndTime));
  598. return onlyRated.map(x => x.Performance);
  599. }
  600. // CONCATENATED MODULE: ./src/libs/contestInformation.js
  601.  
  602.  
  603. class ContestInformation{
  604. /**
  605. * @param {number[]} [participatableRange]
  606. * @param {number[]} [ratedRange]
  607. * @param {number} [penalty]
  608. */
  609. constructor(participatableRange, ratedRange, penalty){
  610. this.ParticipatableRange = participatableRange;
  611. this.RatedRange = ratedRange;
  612. this.Penalty = penalty;
  613. }
  614. }
  615.  
  616. /**
  617. * トップページに表示されるコンテスト情報を取得
  618. * @param {string} [contestScreenName] コンテスト名
  619. * @return {Promise<ContestInformation>} コンテスト情報を返すPromise
  620. */
  621. async function contestInformation(contestScreenName) {
  622. return new Promise(async (resolve) => {
  623. const topPageDom = await $.ajax(`https://atcoder.jp/contests/${contestScreenName}`).then(x => new DOMParser().parseFromString(x, "text/html"));
  624. const dataParagraph = topPageDom.getElementsByClassName("small")[0];
  625. const data = Array.from(dataParagraph.children).map(x => x.innerText.split(':')[1].trim());
  626. resolve(new ContestInformation(parseRangeString(data[0]), parseRangeString(data[1]), parseDurationString(data[2])));
  627. });
  628.  
  629. /**
  630. * 範囲を表す文字列をパースする
  631. * @param {string} [s] 範囲を表す文字列
  632. * @return {number[]} 範囲を表す配列
  633. */
  634. function parseRangeString(s){
  635. if (s === 'All') return [0, Infinity];
  636. if (s.indexOf('~') === -1) return [0, -1];
  637. let res = s.split('~').map(x => parseInt(x.trim()));
  638. if (isNaN(res[0])) res[0] = 0;
  639. if (isNaN(res[1])) res[1] = Infinity;
  640. return res;
  641. }
  642. /**
  643. * 期間を表す文字列をパースする
  644. * @param {string} [s] 期間を表す文字列
  645. * @return {number} パース結果(ミリ秒)
  646. */
  647. function parseDurationString(s) {
  648. if (s === "None" || s === "なし") return 0;
  649. if (/(\d+[^\d]+)/.test(s)) return NaN;
  650. const dic = {ヶ月: "month", 日: "day", 時間: "hour", 分: "minute", 秒: "second"};
  651. let res = {};
  652. s.match(/(\d+[^\d]+)/g).forEach(x => {
  653. const trimmed = x.trim(' ','s');
  654. const num = trimmed.match(/\d+/)[0];
  655. const unit = trimmed.match(/[^\d]+/)[0];
  656. const convertedUnit = dic[unit]||unit;
  657. res[convertedUnit] = num;
  658. });
  659. return external_moment_["duration"](res).asMilliseconds();
  660. }
  661. }
  662.  
  663. // CONCATENATED MODULE: ./src/main.js
  664. /* concated harmony reexport rating */__webpack_require__.d(__webpack_exports__, "rating", function() { return rating_namespaceObject; });
  665. /* concated harmony reexport data */__webpack_require__.d(__webpack_exports__, "data", function() { return data_namespaceObject; });
  666. /* concated harmony reexport contestInformation */__webpack_require__.d(__webpack_exports__, "contestInformation", function() { return contestInformation_namespaceObject; });
  667. /* concated harmony reexport global */__webpack_require__.d(__webpack_exports__, "global", function() { return global_namespaceObject; });
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675. /***/ })
  676. /******/ ]);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址