@xcpcio/core 0.34.1 → 0.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -15,8 +15,8 @@ const relativeTime = require('dayjs/plugin/relativeTime');
15
15
  const _ = require('lodash');
16
16
  const XLSX = require('xlsx-js-style');
17
17
  const stringWidth = require('string-width');
18
- const colorDiff = require('color-diff');
19
18
  const chroma = require('chroma-js');
19
+ const colorDiff = require('color-diff');
20
20
 
21
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
22
22
 
@@ -63,6 +63,9 @@ function stringToSubmissionStatus(status) {
63
63
  if (["RJ", "INCORRECT", types.SubmissionStatus.REJECTED.toString()].includes(status)) {
64
64
  return types.SubmissionStatus.REJECTED;
65
65
  }
66
+ if (["NO", types.SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
67
+ return types.SubmissionStatus.NO_OUTPUT;
68
+ }
66
69
  if (["PD", types.SubmissionStatus.PENDING.toString()].includes(status)) {
67
70
  return types.SubmissionStatus.PENDING;
68
71
  }
@@ -135,6 +138,7 @@ function isRejected(status) {
135
138
  types.SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
136
139
  types.SubmissionStatus.WRONG_ANSWER,
137
140
  types.SubmissionStatus.REJECTED,
141
+ types.SubmissionStatus.NO_OUTPUT,
138
142
  types.SubmissionStatus.JUDGEMENT_FAILED,
139
143
  types.SubmissionStatus.HACKED
140
144
  ];
@@ -465,7 +469,7 @@ function calcDirt(attemptedNum, solvedNum) {
465
469
  return Math.floor((attemptedNum - solvedNum) * 100 / attemptedNum);
466
470
  }
467
471
 
468
- function getWhiteOrBlackColor(background) {
472
+ function getWhiteOrBlackColorV1(background) {
469
473
  const [R, G, B] = chroma__default(background).rgb();
470
474
  const color = { R, G, B };
471
475
  const palette = [
@@ -479,6 +483,12 @@ function getWhiteOrBlackColor(background) {
479
483
  return "#fff";
480
484
  }
481
485
  }
486
+ function getWhiteOrBlackColor(background) {
487
+ const [R, G, B] = chroma__default(background).rgb();
488
+ const brightness = (R * 299 + G * 587 + B * 114) / 1e3;
489
+ const threshold = 148;
490
+ return brightness <= threshold ? "#fff" : "#000";
491
+ }
482
492
 
483
493
  class ProblemStatistics {
484
494
  constructor() {
@@ -1713,6 +1723,7 @@ exports.getImageSource = getImageSource;
1713
1723
  exports.getTimeDiff = getTimeDiff;
1714
1724
  exports.getTimestamp = getTimestamp;
1715
1725
  exports.getWhiteOrBlackColor = getWhiteOrBlackColor;
1726
+ exports.getWhiteOrBlackColorV1 = getWhiteOrBlackColorV1;
1716
1727
  exports.isAccepted = isAccepted;
1717
1728
  exports.isNotCalculatedPenaltyStatus = isNotCalculatedPenaltyStatus;
1718
1729
  exports.isPending = isPending;
package/dist/index.d.ts CHANGED
@@ -83,6 +83,7 @@ declare class TeamProblemStatistics {
83
83
 
84
84
  declare function calcDirt(attemptedNum: number, solvedNum: number): number;
85
85
 
86
+ declare function getWhiteOrBlackColorV1(background: string): "#000" | "#fff";
86
87
  declare function getWhiteOrBlackColor(background: string): "#000" | "#fff";
87
88
 
88
89
  declare function createDayJS(time?: Date | string | number | undefined): dayjs.Dayjs;
@@ -327,4 +328,4 @@ declare function isRejected(status: SubmissionStatus): boolean;
327
328
  declare function isPending(status: SubmissionStatus): boolean;
328
329
  declare function isNotCalculatedPenaltyStatus(status: SubmissionStatus): boolean;
329
330
 
330
- export { Award, Awards, Balloon, Balloons, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestIndexList, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Problems, Rank, RankOptions, RankStatistics, Resolver, SelectOptionItem, Submission, Submissions, Team, TeamProblemStatistics, Teams, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
331
+ export { Award, Awards, Balloon, Balloons, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestIndexList, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Problems, Rank, RankOptions, RankStatistics, Resolver, SelectOptionItem, Submission, Submissions, Team, TeamProblemStatistics, Teams, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, getWhiteOrBlackColorV1, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
package/dist/index.mjs CHANGED
@@ -12,8 +12,8 @@ import relativeTime from 'dayjs/plugin/relativeTime';
12
12
  import _ from 'lodash';
13
13
  import * as XLSX from 'xlsx-js-style';
14
14
  import stringWidth from 'string-width';
15
- import { furthest } from 'color-diff';
16
15
  import chroma from 'chroma-js';
16
+ import { furthest } from 'color-diff';
17
17
 
18
18
  function stringToSubmissionStatus(status) {
19
19
  status = status.toUpperCase().replace(" ", "_");
@@ -32,6 +32,9 @@ function stringToSubmissionStatus(status) {
32
32
  if (["RJ", "INCORRECT", SubmissionStatus.REJECTED.toString()].includes(status)) {
33
33
  return SubmissionStatus.REJECTED;
34
34
  }
35
+ if (["NO", SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
36
+ return SubmissionStatus.NO_OUTPUT;
37
+ }
35
38
  if (["PD", SubmissionStatus.PENDING.toString()].includes(status)) {
36
39
  return SubmissionStatus.PENDING;
37
40
  }
@@ -104,6 +107,7 @@ function isRejected(status) {
104
107
  SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
105
108
  SubmissionStatus.WRONG_ANSWER,
106
109
  SubmissionStatus.REJECTED,
110
+ SubmissionStatus.NO_OUTPUT,
107
111
  SubmissionStatus.JUDGEMENT_FAILED,
108
112
  SubmissionStatus.HACKED
109
113
  ];
@@ -434,7 +438,7 @@ function calcDirt(attemptedNum, solvedNum) {
434
438
  return Math.floor((attemptedNum - solvedNum) * 100 / attemptedNum);
435
439
  }
436
440
 
437
- function getWhiteOrBlackColor(background) {
441
+ function getWhiteOrBlackColorV1(background) {
438
442
  const [R, G, B] = chroma(background).rgb();
439
443
  const color = { R, G, B };
440
444
  const palette = [
@@ -448,6 +452,12 @@ function getWhiteOrBlackColor(background) {
448
452
  return "#fff";
449
453
  }
450
454
  }
455
+ function getWhiteOrBlackColor(background) {
456
+ const [R, G, B] = chroma(background).rgb();
457
+ const brightness = (R * 299 + G * 587 + B * 114) / 1e3;
458
+ const threshold = 148;
459
+ return brightness <= threshold ? "#fff" : "#000";
460
+ }
451
461
 
452
462
  class ProblemStatistics {
453
463
  constructor() {
@@ -1646,4 +1656,4 @@ class Resolver extends Rank {
1646
1656
  }
1647
1657
  }
1648
1658
 
1649
- export { Award, Balloon, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Rank, RankOptions, RankStatistics, Resolver, Submission, Team, TeamProblemStatistics, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
1659
+ export { Award, Balloon, CodeforcesGymGhostDATConverter, Contest, ContestIndex, ContestIndexConfig, ContestOptions, GeneralExcelConverter, MedalType, PlaceChartPointData, Problem, ProblemStatistics, Rank, RankOptions, RankStatistics, Resolver, Submission, Team, TeamProblemStatistics, calcDirt, createContest, createContestIndex, createContestIndexList, createDayJS, createProblem, createProblems, createProblemsByProblemIds, createSubmission, createSubmissions, createTeam, createTeams, getImageSource, getTimeDiff, getTimestamp, getWhiteOrBlackColor, getWhiteOrBlackColorV1, isAccepted, isNotCalculatedPenaltyStatus, isPending, isRejected, isValidMedalType, stringToSubmissionStatus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xcpcio/core",
3
- "version": "0.34.1",
3
+ "version": "0.35.1",
4
4
  "description": "XCPCIO Core",
5
5
  "author": "Dup4 <lyuzhi.pan@gmail.com>",
6
6
  "license": "MIT",
@@ -46,7 +46,7 @@
46
46
  "lodash": "^4.17.21",
47
47
  "string-width": "^6.1.0",
48
48
  "xlsx-js-style": "^1.2.0",
49
- "@xcpcio/types": "0.34.1"
49
+ "@xcpcio/types": "0.35.1"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@babel/types": "^7.22.4",
@@ -23,6 +23,10 @@ export function stringToSubmissionStatus(status: string): SubmissionStatus {
23
23
  return SubmissionStatus.REJECTED;
24
24
  }
25
25
 
26
+ if (["NO", SubmissionStatus.NO_OUTPUT.toString()].includes(status)) {
27
+ return SubmissionStatus.NO_OUTPUT;
28
+ }
29
+
26
30
  if (["PD", SubmissionStatus.PENDING.toString()].includes(status)) {
27
31
  return SubmissionStatus.PENDING;
28
32
  }
@@ -117,6 +121,7 @@ export function isRejected(status: SubmissionStatus): boolean {
117
121
  SubmissionStatus.IDLENESS_LIMIT_EXCEEDED,
118
122
  SubmissionStatus.WRONG_ANSWER,
119
123
  SubmissionStatus.REJECTED,
124
+ SubmissionStatus.NO_OUTPUT,
120
125
  SubmissionStatus.JUDGEMENT_FAILED,
121
126
  SubmissionStatus.HACKED,
122
127
  ];
@@ -1,7 +1,7 @@
1
- import { furthest } from "color-diff";
2
1
  import chroma from "chroma-js";
2
+ import { furthest } from "color-diff";
3
3
 
4
- export function getWhiteOrBlackColor(background: string) {
4
+ export function getWhiteOrBlackColorV1(background: string) {
5
5
  const [R, G, B] = chroma(background).rgb();
6
6
  const color = { R, G, B };
7
7
  const palette = [
@@ -17,3 +17,12 @@ export function getWhiteOrBlackColor(background: string) {
17
17
  return "#fff";
18
18
  }
19
19
  }
20
+
21
+ export function getWhiteOrBlackColor(background: string) {
22
+ const [R, G, B] = chroma(background).rgb();
23
+
24
+ const brightness = (R * 299 + G * 587 + B * 114) / 1000;
25
+ const threshold = 148;
26
+
27
+ return brightness <= threshold ? "#fff" : "#000";
28
+ }