code-battles 1.7.0 → 1.7.2
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/cjs/index.js +2153 -1954
- package/dist/cjs/styles.css +2 -1
- package/dist/cjs/types/components/DataTable.d.ts +21 -0
- package/dist/cjs/types/components/ResultStaticsTable.d.ts +3 -0
- package/dist/cjs/types/configuration.d.ts +0 -1
- package/dist/code_battles/battles.py +22 -9
- package/dist/code_battles/utilities.py +5 -1
- package/dist/esm/index.js +2154 -1955
- package/dist/esm/styles.css +2 -1
- package/dist/esm/types/components/DataTable.d.ts +21 -0
- package/dist/esm/types/components/ResultStaticsTable.d.ts +3 -0
- package/dist/esm/types/configuration.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/pyscript/codemirror-eKulCBrd.js +2 -0
- package/dist/pyscript/codemirror-eKulCBrd.js.map +1 -0
- package/dist/pyscript/codemirror_commands-BVu_0Pnj.js +2 -0
- package/dist/pyscript/codemirror_commands-BVu_0Pnj.js.map +1 -0
- package/dist/pyscript/codemirror_lang-python-a2LxSo5G.js +2 -0
- package/dist/pyscript/codemirror_lang-python-a2LxSo5G.js.map +1 -0
- package/dist/pyscript/codemirror_language-_2pXlKJ9.js +2 -0
- package/dist/pyscript/codemirror_language-_2pXlKJ9.js.map +1 -0
- package/dist/pyscript/codemirror_view-DMW9kQlJ.js +2 -0
- package/dist/pyscript/codemirror_view-DMW9kQlJ.js.map +1 -0
- package/dist/pyscript/core-DezwbZpG.js +4 -0
- package/dist/pyscript/core-DezwbZpG.js.map +1 -0
- package/dist/pyscript/core.js +1 -1
- package/dist/pyscript/deprecations-manager-B1bDno27.js +2 -0
- package/dist/pyscript/deprecations-manager-B1bDno27.js.map +1 -0
- package/dist/pyscript/donkey-DNl0ASkM.js +2 -0
- package/dist/pyscript/donkey-DNl0ASkM.js.map +1 -0
- package/dist/pyscript/error-DmRE4Y-7.js +2 -0
- package/dist/pyscript/error-DmRE4Y-7.js.map +1 -0
- package/dist/pyscript/index-DkgvWIf-.js +2 -0
- package/dist/pyscript/index-DkgvWIf-.js.map +1 -0
- package/dist/pyscript/mpy-BoY0tVRD.js +2 -0
- package/dist/pyscript/mpy-BoY0tVRD.js.map +1 -0
- package/dist/pyscript/py-DsQqgZuM.js +2 -0
- package/dist/pyscript/py-DsQqgZuM.js.map +1 -0
- package/dist/pyscript/py-editor-DZkG_or6.js +2 -0
- package/dist/pyscript/py-editor-DZkG_or6.js.map +1 -0
- package/dist/pyscript/py-game-D0Z4YnzZ.js +2 -0
- package/dist/pyscript/py-game-D0Z4YnzZ.js.map +1 -0
- package/dist/pyscript/py-terminal-DYHK7LJ0.js +2 -0
- package/dist/pyscript/py-terminal-DYHK7LJ0.js.map +1 -0
- package/dist/pyscript/service-worker.js +1 -0
- package/dist/pyscript/storage.js +1 -1
- package/dist/pyscript/storage.js.map +1 -1
- package/dist/pyscript/xterm-CVv2fC4I.js +2 -0
- package/dist/pyscript/xterm-CVv2fC4I.js.map +1 -0
- package/dist/pyscript/zip-D13-hp9W.js +2 -0
- package/dist/pyscript/zip-D13-hp9W.js.map +1 -0
- package/package.json +14 -14
package/dist/cjs/styles.css
CHANGED
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
pre[class*="language-"].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber;}pre[class*="language-"].line-numbers>code{position:relative;white-space:inherit;}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers-rows>span{display:block;counter-increment:linenumber;}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:0.8em;text-align:right;}
|
|
3
3
|
code[class*="language-"],pre[class*="language-"]{color:black;background:none;text-shadow:0 1px white;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}pre[class*="language-"]::-moz-selection,pre[class*="language-"] ::-moz-selection,code[class*="language-"]::-moz-selection,code[class*="language-"] ::-moz-selection{text-shadow:none;background:#b3d4fc;}pre[class*="language-"]::selection,pre[class*="language-"] ::selection,code[class*="language-"]::selection,code[class*="language-"] ::selection{text-shadow:none;background:#b3d4fc;}@media print{code[class*="language-"],pre[class*="language-"]{text-shadow:none;}}pre[class*="language-"]{padding:1em;margin:.5em 0;overflow:auto;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#f5f2f0;}:not(pre)>code[class*="language-"]{padding:.1em;border-radius:.3em;white-space:normal;}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:slategray;}.token.punctuation{color:#999;}.token.namespace{opacity:.7;}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#905;}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#690;}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:#9a6e3a;background:hsla(0,0%,100%,.5);}.token.atrule,.token.attr-value,.token.keyword{color:#07a;}.token.function,.token.class-name{color:#DD4A68;}.token.regex,.token.important,.token.variable{color:#e90;}.token.important,.token.bold{font-weight:bold;}.token.italic{font-style:italic;}.token.entity{cursor:help;}
|
|
4
4
|
py-config,py-script,py-splashscreen,.py-error{display:none;}h1,h2,h3,h4,h5,h6,p{margin:0;}
|
|
5
|
-
.token.operator{background:inherit !important;}pre[class*="language-"],code[class*="language-"]{color:#d4d4d4;font-size:13px;text-shadow:none;font-family:Menlo,Monaco,Consolas,"Andale Mono","Ubuntu Mono","Courier New",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}pre[class*="language-"]::selection,code[class*="language-"]::selection,pre[class*="language-"] *::selection,code[class*="language-"] *::selection{text-shadow:none;background:#264f78;}@media print{pre[class*="language-"],code[class*="language-"]{text-shadow:none;}}pre[class*="language-"]{padding:1em;margin:0.5em 0;overflow:auto;background:#1e1e1e;}:not(pre)>code[class*="language-"]{padding:0.1em 0.3em;border-radius:0.3em;color:#db4c69;background:#1e1e1e;}.namespace{opacity:0.7;}.token.doctype .token.doctype-tag{color:#569cd6;}.token.doctype .token.name{color:#9cdcfe;}.token.comment,.token.prolog{color:#6a9955;}.token.punctuation,.language-html .language-css .token.punctuation,.language-html .language-javascript .token.punctuation{color:#d4d4d4;}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.inserted,.token.unit{color:#b5cea8;}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.deleted{color:#ce9178;}.language-css .token.string.url{text-decoration:underline;}.token.operator,.token.entity{color:#d4d4d4;}.token.operator.arrow{color:#569cd6;}.token.atrule{color:#ce9178;}.token.atrule .token.rule{color:#c586c0;}.token.atrule .token.url{color:#9cdcfe;}.token.atrule .token.url .token.function{color:#dcdcaa;}.token.atrule .token.url .token.punctuation{color:#d4d4d4;}.token.keyword{color:#569cd6;}.token.keyword.module,.token.keyword.control-flow{color:#c586c0;}.token.function,.token.function .token.maybe-class-name{color:#dcdcaa;}.token.regex{color:#d16969;}.token.important{color:#569cd6;}.token.italic{font-style:italic;}.token.constant{color:#9cdcfe;}.token.class-name,.token.maybe-class-name{color:#4ec9b0;}.token.console{color:#9cdcfe;}.token.parameter{color:#9cdcfe;}.token.interpolation{color:#9cdcfe;}.token.punctuation.interpolation-punctuation{color:#569cd6;}.token.boolean{color:#569cd6;}.token.property,.token.variable,.token.imports .token.maybe-class-name,.token.exports .token.maybe-class-name{color:#9cdcfe;}.token.selector{color:#d7ba7d;}.token.escape{color:#d7ba7d;}.token.tag{color:#569cd6;}.token.tag .token.punctuation{color:#808080;}.token.cdata{color:#808080;}.token.attr-name{color:#9cdcfe;}.token.attr-value,.token.attr-value .token.punctuation{color:#ce9178;}.token.attr-value .token.punctuation.attr-equals{color:#d4d4d4;}.token.entity{color:#569cd6;}.token.namespace{color:#4ec9b0;}pre[class*="language-javascript"],code[class*="language-javascript"],pre[class*="language-jsx"],code[class*="language-jsx"],pre[class*="language-typescript"],code[class*="language-typescript"],pre[class*="language-tsx"],code[class*="language-tsx"]{color:#9cdcfe;}pre[class*="language-css"],code[class*="language-css"]{color:#ce9178;}pre[class*="language-html"],code[class*="language-html"]{color:#d4d4d4;}.language-regex .token.anchor{color:#dcdcaa;}.language-html .token.punctuation{color:#808080;}pre[class*="language-"]>code[class*="language-"]{position:relative;z-index:1;}.line-highlight.line-highlight{background:#f7ebc6;box-shadow:inset 5px 0 0 #f7d87c;z-index:0;}
|
|
5
|
+
.token.operator{background:inherit !important;}pre[class*="language-"],code[class*="language-"]{color:#d4d4d4;font-size:13px;text-shadow:none;font-family:Menlo,Monaco,Consolas,"Andale Mono","Ubuntu Mono","Courier New",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}pre[class*="language-"]::selection,code[class*="language-"]::selection,pre[class*="language-"] *::selection,code[class*="language-"] *::selection{text-shadow:none;background:#264f78;}@media print{pre[class*="language-"],code[class*="language-"]{text-shadow:none;}}pre[class*="language-"]{padding:1em;margin:0.5em 0;overflow:auto;background:#1e1e1e;}:not(pre)>code[class*="language-"]{padding:0.1em 0.3em;border-radius:0.3em;color:#db4c69;background:#1e1e1e;}.namespace{opacity:0.7;}.token.doctype .token.doctype-tag{color:#569cd6;}.token.doctype .token.name{color:#9cdcfe;}.token.comment,.token.prolog{color:#6a9955;}.token.punctuation,.language-html .language-css .token.punctuation,.language-html .language-javascript .token.punctuation{color:#d4d4d4;}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.inserted,.token.unit{color:#b5cea8;}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.deleted{color:#ce9178;}.language-css .token.string.url{text-decoration:underline;}.token.operator,.token.entity{color:#d4d4d4;}.token.operator.arrow{color:#569cd6;}.token.atrule{color:#ce9178;}.token.atrule .token.rule{color:#c586c0;}.token.atrule .token.url{color:#9cdcfe;}.token.atrule .token.url .token.function{color:#dcdcaa;}.token.atrule .token.url .token.punctuation{color:#d4d4d4;}.token.keyword{color:#569cd6;}.token.keyword.module,.token.keyword.control-flow{color:#c586c0;}.token.function,.token.function .token.maybe-class-name{color:#dcdcaa;}.token.regex{color:#d16969;}.token.important{color:#569cd6;}.token.italic{font-style:italic;}.token.constant{color:#9cdcfe;}.token.class-name,.token.maybe-class-name{color:#4ec9b0;}.token.console{color:#9cdcfe;}.token.parameter{color:#9cdcfe;}.token.interpolation{color:#9cdcfe;}.token.punctuation.interpolation-punctuation{color:#569cd6;}.token.boolean{color:#569cd6;}.token.property,.token.variable,.token.imports .token.maybe-class-name,.token.exports .token.maybe-class-name{color:#9cdcfe;}.token.selector{color:#d7ba7d;}.token.escape{color:#d7ba7d;}.token.tag{color:#569cd6;}.token.tag .token.punctuation{color:#808080;}.token.cdata{color:#808080;}.token.attr-name{color:#9cdcfe;}.token.attr-value,.token.attr-value .token.punctuation{color:#ce9178;}.token.attr-value .token.punctuation.attr-equals{color:#d4d4d4;}.token.entity{color:#569cd6;}.token.namespace{color:#4ec9b0;}pre[class*="language-javascript"],code[class*="language-javascript"],pre[class*="language-jsx"],code[class*="language-jsx"],pre[class*="language-typescript"],code[class*="language-typescript"],pre[class*="language-tsx"],code[class*="language-tsx"]{color:#9cdcfe;}pre[class*="language-css"],code[class*="language-css"]{color:#ce9178;}pre[class*="language-html"],code[class*="language-html"]{color:#d4d4d4;}.language-regex .token.anchor{color:#dcdcaa;}.language-html .token.punctuation{color:#808080;}pre[class*="language-"]>code[class*="language-"]{position:relative;z-index:1;}.line-highlight.line-highlight{background:#f7ebc6;box-shadow:inset 5px 0 0 #f7d87c;z-index:0;}
|
|
6
|
+
.control{width:100%;padding:10px;cursor:pointer;}.control:hover{background-color:light-dark(var(--mantine-color-gray-0),var(--mantine-color-dark-6));}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import "./DataTable.css";
|
|
3
|
+
export interface DataTableData {
|
|
4
|
+
head: string[];
|
|
5
|
+
body: string[][];
|
|
6
|
+
}
|
|
7
|
+
declare const DataTable: ({ tableName, data, renderValue, renderHead, disableSort, hideIfEmpty, selectable, selectedRows, setSelectedRows, defaultSort, defaultReversed, stickyFirstColumn, }: {
|
|
8
|
+
tableName: string;
|
|
9
|
+
data: DataTableData;
|
|
10
|
+
renderValue?: (rowIndex: number, columnName: string, value: string) => React.ReactNode;
|
|
11
|
+
renderHead?: (columnName: string, columnIndex: number) => React.ReactNode;
|
|
12
|
+
disableSort?: boolean;
|
|
13
|
+
hideIfEmpty?: boolean;
|
|
14
|
+
selectable?: boolean;
|
|
15
|
+
selectedRows?: number[];
|
|
16
|
+
setSelectedRows?: React.Dispatch<React.SetStateAction<number[]>>;
|
|
17
|
+
defaultSort?: number;
|
|
18
|
+
defaultReversed?: boolean;
|
|
19
|
+
stickyFirstColumn?: boolean;
|
|
20
|
+
}) => React.JSX.Element;
|
|
21
|
+
export default DataTable;
|
|
@@ -10,7 +10,7 @@ import traceback
|
|
|
10
10
|
import typing
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from random import Random
|
|
13
|
-
from typing import Any, Dict, Generic, List, Optional, Set, Tuple, TypeVar
|
|
13
|
+
from typing import Any, Dict, Generic, List, Optional, Set, Tuple, TypeVar, Union
|
|
14
14
|
from urllib.parse import quote
|
|
15
15
|
|
|
16
16
|
from code_battles.utilities import (
|
|
@@ -235,6 +235,15 @@ class CodeBattles(
|
|
|
235
235
|
|
|
236
236
|
pass
|
|
237
237
|
|
|
238
|
+
def get_statistics(self) -> Dict[str, Union[int, float]]:
|
|
239
|
+
"""
|
|
240
|
+
Optional method to return statistics, called after the game ends.
|
|
241
|
+
|
|
242
|
+
When running multiple no UI simulations, you can use this to view the simulations in a table.
|
|
243
|
+
"""
|
|
244
|
+
|
|
245
|
+
return {}
|
|
246
|
+
|
|
238
247
|
def configure_extra_width(self) -> int:
|
|
239
248
|
"""Optionally add extra height to the right of the boards. 0 by default."""
|
|
240
249
|
|
|
@@ -1015,15 +1024,13 @@ class CodeBattles(
|
|
|
1015
1024
|
document.getElementById("playpause").click()
|
|
1016
1025
|
|
|
1017
1026
|
@web_only
|
|
1018
|
-
def _step(self):
|
|
1019
|
-
from js import document
|
|
1020
|
-
from pyscript.ffi import create_proxy
|
|
1027
|
+
async def _step(self):
|
|
1028
|
+
from js import document
|
|
1021
1029
|
|
|
1022
1030
|
if not self.over:
|
|
1023
1031
|
if len(self._decisions) == self._decision_index:
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
return
|
|
1032
|
+
await asyncio.sleep(0.01)
|
|
1033
|
+
return await self._step()
|
|
1027
1034
|
else:
|
|
1028
1035
|
logs = self._logs[self._decision_index]
|
|
1029
1036
|
for log in logs:
|
|
@@ -1045,7 +1052,12 @@ class CodeBattles(
|
|
|
1045
1052
|
if len(self.active_players) == 1:
|
|
1046
1053
|
self._eliminated.append(self.active_players[0])
|
|
1047
1054
|
set_results(
|
|
1048
|
-
self.player_names,
|
|
1055
|
+
self.player_names,
|
|
1056
|
+
self._seed,
|
|
1057
|
+
self._eliminated[::-1],
|
|
1058
|
+
self.get_statistics(),
|
|
1059
|
+
self.parameters,
|
|
1060
|
+
self.verbose,
|
|
1049
1061
|
)
|
|
1050
1062
|
if not self.background:
|
|
1051
1063
|
self.render()
|
|
@@ -1123,9 +1135,10 @@ class CodeBattles(
|
|
|
1123
1135
|
while self._should_play():
|
|
1124
1136
|
start = time.time()
|
|
1125
1137
|
try:
|
|
1126
|
-
self._step()
|
|
1138
|
+
await self._step()
|
|
1127
1139
|
except Exception:
|
|
1128
1140
|
traceback.print_exc()
|
|
1141
|
+
|
|
1129
1142
|
if not self.background:
|
|
1130
1143
|
await asyncio.sleep(
|
|
1131
1144
|
max(
|
|
@@ -75,7 +75,9 @@ def show_alert(
|
|
|
75
75
|
@web_only
|
|
76
76
|
def set_results(
|
|
77
77
|
player_names: List[str],
|
|
78
|
+
seed: int,
|
|
78
79
|
places: List[int],
|
|
80
|
+
statistics: Dict[str, Union[float, int]],
|
|
79
81
|
parameters: Dict[str, str],
|
|
80
82
|
verbose: bool,
|
|
81
83
|
):
|
|
@@ -83,7 +85,9 @@ def set_results(
|
|
|
83
85
|
|
|
84
86
|
if hasattr(window, "setResults"):
|
|
85
87
|
try:
|
|
86
|
-
window.setResults(
|
|
88
|
+
window.setResults(
|
|
89
|
+
player_names, str(seed), places, statistics, parameters, verbose
|
|
90
|
+
)
|
|
87
91
|
except Exception as e:
|
|
88
92
|
print(e)
|
|
89
93
|
|