support using strings directly as level input and output data
This commit is contained in:
parent
ef01de9dae
commit
36b1b8672b
9 changed files with 35 additions and 38 deletions
|
@ -51,8 +51,6 @@ blueprint rotation?
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"outputs": [0, 0, 0, 0, 0, 0, 0, 0],
|
"outputs": [0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
"input_is_text": false,
|
|
||||||
"output_is_text": false
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### solution
|
### solution
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
"name": "Copy Cat",
|
"name": "Copy Cat",
|
||||||
"description": "read input and output the same thing",
|
"description": "read input and output the same thing",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 103, 33],
|
"inputs": "Hello, world!",
|
||||||
"outputs": [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 103, 33],
|
"outputs": "Hello, world!"
|
||||||
"input_is_text": true,
|
|
||||||
"output_is_text": true
|
|
||||||
}
|
}
|
|
@ -4,8 +4,6 @@
|
||||||
"name": "Null Separation",
|
"name": "Null Separation",
|
||||||
"description": "output everything after the first zero in the input data",
|
"description": "output everything after the first zero in the input data",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [199, 34, 71, 209, 4, 0, 72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 103, 33, 0],
|
"inputs": "9834726\u0000Hello, worlg!",
|
||||||
"outputs": [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 103, 33],
|
"outputs": "Hello, worlg!"
|
||||||
"input_is_text": true,
|
|
||||||
"output_is_text": true
|
|
||||||
}
|
}
|
|
@ -4,8 +4,6 @@
|
||||||
"name": "Reverse",
|
"name": "Reverse",
|
||||||
"description": "read input until zero and output the same thing in reverse",
|
"description": "read input until zero and output the same thing in reverse",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [116, 110, 114, 111, 112, 109, 105, 32, 121, 114, 101, 118, 0],
|
"inputs": "tnropmi yrev\u0000",
|
||||||
"outputs": [118, 101, 114, 121, 32, 105, 109, 112, 111, 114, 110, 116],
|
"outputs": "very impornt"
|
||||||
"input_is_text": true,
|
|
||||||
"output_is_text": true
|
|
||||||
}
|
}
|
|
@ -4,8 +4,6 @@
|
||||||
"name": "Lowercase",
|
"name": "Lowercase",
|
||||||
"description": "Convert text to lowercase",
|
"description": "Convert text to lowercase",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [73, 32, 67, 114, 97, 86, 101, 68, 32, 116, 72, 69, 32, 115, 116, 114, 69, 110, 71, 84, 72, 32, 65, 78, 68, 32, 67, 101, 114, 84, 65, 105, 110, 84, 121, 32, 111, 70, 32, 83, 84, 101, 101, 76],
|
"inputs": "I CraVeD tHE strEnGTH AND CerTAinTy oF STeeL",
|
||||||
"outputs": [105, 32, 99, 114, 97, 118, 101, 100, 32, 116, 104, 101, 32, 115, 116, 114, 101, 110, 103, 116, 104, 32, 97, 110, 100, 32, 99, 101, 114, 116, 97, 105, 110, 116, 121, 32, 111, 102, 32, 115, 116, 101, 101, 108],
|
"outputs": "i craved the strength and certainty of steel"
|
||||||
"input_is_text": true,
|
|
||||||
"output_is_text": true
|
|
||||||
}
|
}
|
|
@ -5,7 +5,5 @@
|
||||||
"description": "Convert input numbers to text, separated by spaces (32)\n'0' = 48, '1' = 49, '2' = 50, and so on",
|
"description": "Convert input numbers to text, separated by spaces (32)\n'0' = 48, '1' = 49, '2' = 50, and so on",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [85, 114, 32, 103, 97, 121, 58, 51],
|
"inputs": [85, 114, 32, 103, 97, 121, 58, 51],
|
||||||
"outputs": [56, 53, 32, 49, 49, 52, 32, 51, 50, 32, 49, 48, 51, 32, 57, 55, 32, 49, 50, 49, 32, 53, 56, 32, 53, 49],
|
"outputs": "85 114 32 103 97 121 58 51"
|
||||||
"input_is_text": false,
|
|
||||||
"output_is_text": true
|
|
||||||
}
|
}
|
|
@ -4,8 +4,6 @@
|
||||||
"name": "Numbers 2",
|
"name": "Numbers 2",
|
||||||
"description": "Convert input numbers from text, separated by spaces (32)\n'0' = 48, '1' = 49, '2' = 50, and so on",
|
"description": "Convert input numbers from text, separated by spaces (32)\n'0' = 48, '1' = 49, '2' = 50, and so on",
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [56, 53, 32, 49, 49, 52, 32, 51, 50, 32, 49, 48, 51, 32, 57, 55, 32, 49, 50, 49, 32, 51, 50, 32, 53, 56, 32, 53, 49],
|
"inputs": "85 114 32 103 97 121 58 51",
|
||||||
"outputs": [85, 114, 32, 103, 97, 121, 58, 51],
|
"outputs": [85, 114, 32, 103, 97, 121, 58, 51]
|
||||||
"input_is_text": true,
|
|
||||||
"output_is_text": false
|
|
||||||
}
|
}
|
|
@ -5,7 +5,6 @@
|
||||||
"description": "make whatever you want here",
|
"description": "make whatever you want here",
|
||||||
"is_sandbox": true,
|
"is_sandbox": true,
|
||||||
"init_board": null,
|
"init_board": null,
|
||||||
"inputs": [],
|
"inputs": "",
|
||||||
"outputs": [],
|
"outputs": []
|
||||||
"input_is_text": true
|
|
||||||
}
|
}
|
32
src/level.rs
32
src/level.rs
|
@ -9,12 +9,24 @@ pub struct Level {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
is_sandbox: bool,
|
is_sandbox: bool,
|
||||||
init_board: Option<String>,
|
init_board: Option<String>,
|
||||||
inputs: Vec<u8>,
|
inputs: IOData,
|
||||||
outputs: Vec<u8>,
|
outputs: IOData,
|
||||||
#[serde(default)]
|
}
|
||||||
input_is_text: bool,
|
|
||||||
#[serde(default)]
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
output_is_text: bool,
|
#[serde(untagged)]
|
||||||
|
pub enum IOData {
|
||||||
|
Bytes(Vec<u8>),
|
||||||
|
Text(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IOData {
|
||||||
|
pub fn as_bytes(&self) -> &[u8] {
|
||||||
|
match self {
|
||||||
|
IOData::Bytes(b) => b,
|
||||||
|
IOData::Text(t) => t.as_bytes(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Level {
|
impl Level {
|
||||||
|
@ -43,18 +55,18 @@ impl Level {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn inputs(&self) -> &[u8] {
|
pub fn inputs(&self) -> &[u8] {
|
||||||
&self.inputs
|
self.inputs.as_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn outputs(&self) -> &[u8] {
|
pub fn outputs(&self) -> &[u8] {
|
||||||
&self.outputs
|
self.outputs.as_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn input_is_text(&self) -> bool {
|
pub fn input_is_text(&self) -> bool {
|
||||||
self.input_is_text
|
matches!(self.inputs, IOData::Text(_))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn output_is_text(&self) -> bool {
|
pub fn output_is_text(&self) -> bool {
|
||||||
self.output_is_text
|
matches!(self.outputs, IOData::Text(_))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue