[mod] save
This commit is contained in:
parent
474061fdd7
commit
a47a8e30e3
|
|
@ -56,11 +56,11 @@ jsonp_handle(
|
|||
"tasks.dreifaltigkeit.title": "Dreifaltigkeit",
|
||||
"tasks.dreifaltigkeit.text": "Annehmen genau dann, wenn die Eingabe mindestens drei ${s1} enth\u00e4lt",
|
||||
"tasks.abwechslung_erfreuet.title": "Abwechslung erfreuet",
|
||||
"tasks.abwechslung_erfreuet.text": "annehmen genau dann wenn: Die Farben der Eingabe (${s0} / ${s1}) sich immer abwechseln",
|
||||
"tasks.abwechslung_erfreuet.text": "Annehmen genau dann wenn: Die Farben der Eingabe (${s0} / ${s1}) sich immer abwechseln",
|
||||
"tasks.ans_ende.title": "Ans Ende",
|
||||
"tasks.ans_ende.text": "die Eingabe (${s0} / ${s1}), aber mit dem ersten Symbol am Ende",
|
||||
"tasks.ans_ende.text": "Die Eingabe (${s0} / ${s1}), aber mit dem ersten Symbol am Ende",
|
||||
"tasks.tauschen.title": "Tauschen",
|
||||
"tasks.tauschen.text": "aus der Eingabe (${s0} / ${s1}) alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
||||
"tasks.tauschen.text": "Aus der Eingabe (${s0} / ${s1}) alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
||||
"tasks.waehlerisch.title": "W\u00e4hlerisch",
|
||||
"tasks.waehlerisch.text": "aus der Eingabe alle ${s0} entfernen und alle ${s1} beibehalten",
|
||||
"tasks.dekorator.title": "Dekorator",
|
||||
|
|
@ -68,7 +68,7 @@ jsonp_handle(
|
|||
"tasks.alpha_und_omega.title": "Alpha und Omega",
|
||||
"tasks.alpha_und_omega.text": "Eingaben (${s0} / ${s1}), die mit den gleichen Symbolen anfangen und enden",
|
||||
"tasks.an_den_anfang.title": "An den Anfang",
|
||||
"tasks.an_den_anfang.text": "die Eingabe (${s0} / ${s1}), aber mit dem letzten Symbol am Anfang",
|
||||
"tasks.an_den_anfang.text": "Die Eingabe (${s0} / ${s1}), aber mit dem letzten Symbol am Anfang",
|
||||
"tasks.a_n_b_n.title": "a^n b^n",
|
||||
"tasks.a_n_b_n.text": "Jaja, die ber\u00fchmt ber\u00fcchtige Sprache, die sich mit einem endlichen Automaten nicht erkennen l\u00e4sst \u2026 Das ist deine Chance zu zeigen, dass dieses Ding hier mehr ist als so ein k\u00fcmmerlicher DEA \u2026 und das ganz ohne Kellerspeicher! Also: Eine beliebige Anzahl an ${s0}, dann die gleiche Anzahl an ${s1}!",
|
||||
"tasks.a_n_b_n.hinweise.hinweis1": "Ein Wort ist genau dann Element der Sprache ${s0}^n ${s1}^n, wenn sie entweder 1) leer ist (also n = 0 gilt) oder 2) sie mit ${s0} beginnt, mit ${s1} endet und dazwischen ein Wort der Form ${s0}^(n-1) ${s1}^(n-1) steht \u2026 Stichwort: Rekursion"
|
||||
|
|
|
|||
|
|
@ -50,9 +50,24 @@ jsonp_handle(
|
|||
"help.tasks.transducer.description": "In a transducer task an output shall be generated, which has a certain relationship to to the input; in other words: to apply a function.",
|
||||
"help.tasks.transducer.example": "Example: The input repeated two times.",
|
||||
"tasks.einfuehrung.title": "Introduction",
|
||||
"tasks.einfuehrung.text": "Move the token from the entrance (left) to the exit (rights)!",
|
||||
"tasks.einfuehrung.text": "Move the token from the entrance (left) to the exit (right)!",
|
||||
"tasks.a_n_b_n.title": "a^n b^n",
|
||||
"tasks.a_n_b_n.text": "Yeah, yeah, yeah … The far famed language, which can't be recognized by a finite automaton … This is your chance to prove that this gizmo here is mightier than any wimpy DFA; even without any stack! So: An arbitrary number of ${s0}, then the same number of ${s1}!"
|
||||
"tasks.a_n_b_n.text": "Yeah, yeah, yeah … The far famed language, which can't be recognized by a finite automaton … This is your chance to prove that this gizmo here is mightier than any wimpy DFA; even without any stack! So: An arbitrary number of ${s0}, then the same number of ${s1}!",
|
||||
|
||||
"tasks.start_symbol.title": "starting symbol",
|
||||
"tasks.start_symbol.text": "Accept if the input commences with ${s1}; reject otherwise",
|
||||
"tasks.dreifaltigkeit.title": "Trinity",
|
||||
"tasks.dreifaltigkeit.text": "Accept only if the input contains ${s1} at least 3 times",
|
||||
"tasks.abwechslung_erfreuet.title": "Variation pleases",
|
||||
"tasks.abwechslung_erfreuet.text": "Accept only if the input colors (${s0} / ${s1}) alternate",
|
||||
"tasks.ans_ende.title": "To the end",
|
||||
"tasks.ans_ende.text": "The input, but with the first symbol moved to the end",
|
||||
"tasks.tauschen.title": "Swap",
|
||||
"tasks.tauschen.text": "In the input sequence (${s0} / ${s1}, replace all ${s0} by ${s2} and all ${s1} by ${s3}",
|
||||
"tasks.waehlerisch.title": "Picky",
|
||||
"tasks.waehlerisch.text": "remove all ${s0} from the input and keep all ${s1}",
|
||||
"tasks.dekorator.title": "Decorator",
|
||||
"tasks.dekorator.text": "Absolutely everything is better with ribbons, squiggle and trinkets of all kind! At least that's what people believe — shopping TV channels are the definite proof! But does it also hold for the tape of the token, if it contains only ${s0} and ${s1}? Let's find out: Put ${s2} to the begin and ${s3} to the end!"
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "acceptor";
|
||||
const kind : string = "acceptor";
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "conveyer";
|
||||
const kind : string = "conveyer";
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "generator";
|
||||
const kind : string = "generator";
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "reader";
|
||||
const kind : string = "reader";
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -155,11 +155,11 @@ module mod_vtm
|
|||
)
|
||||
: void
|
||||
{
|
||||
let symbol_ : lib_errormonade.type_errormonade<mod_symbol.type_symbol> = mod_token.read(token);
|
||||
const symbol_ : lib_errormonade.type_errormonade<mod_symbol.type_symbol> = mod_token.read(token);
|
||||
let summand : mod_direction.type_direction;
|
||||
if (lib_errormonade.filled(symbol_))
|
||||
{
|
||||
let symbol : mod_symbol.type_symbol = lib_errormonade.read(symbol_);
|
||||
const symbol : mod_symbol.type_symbol = lib_errormonade.read(symbol_);
|
||||
if (symbol === reader.symbol_links)
|
||||
{
|
||||
mod_token.shift(token);
|
||||
|
|
@ -179,7 +179,7 @@ module mod_vtm
|
|||
{
|
||||
summand = 0;
|
||||
}
|
||||
let direction : mod_direction.type_direction = mod_direction.add(reader.direction, summand);
|
||||
const direction : mod_direction.type_direction = mod_direction.add(reader.direction, summand);
|
||||
mod_token.move(token, direction);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "rejector";
|
||||
const kind : string = "rejector";
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
|||
/**
|
||||
* @author kcf <vidofnir@folksprak.org>
|
||||
*/
|
||||
let kind : string = "writer";
|
||||
const kind : string = "writer";
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -56,15 +56,14 @@ module mod_vtm
|
|||
"task": task,
|
||||
"testindex": undefined,
|
||||
"mode": undefined,
|
||||
"listeners": undefined,
|
||||
}
|
||||
;
|
||||
game.listeners =
|
||||
{
|
||||
"change_task": [],
|
||||
"change_world": [],
|
||||
"change_token": [],
|
||||
"change_mode": [],
|
||||
"listeners":
|
||||
{
|
||||
"change_task": [],
|
||||
"change_world": [],
|
||||
"change_token": [],
|
||||
"change_mode": [],
|
||||
}
|
||||
,
|
||||
}
|
||||
;
|
||||
world_clear(game, false);
|
||||
|
|
@ -90,7 +89,7 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let message : string = "kein Ereignis mit diesem Name";
|
||||
const message : string = "kein Ereignis mit diesem Name";
|
||||
throw (new Error(message));
|
||||
}
|
||||
}
|
||||
|
|
@ -106,11 +105,12 @@ module mod_vtm
|
|||
data : any = {}
|
||||
) : void
|
||||
{
|
||||
if (event in game.listeners)
|
||||
if (game.listeners.hasOwnProperty(event))
|
||||
{
|
||||
game.listeners[event].forEach
|
||||
game.listeners[event]
|
||||
.forEach
|
||||
(
|
||||
procedure =>
|
||||
(procedure) =>
|
||||
{
|
||||
procedure(data);
|
||||
}
|
||||
|
|
@ -119,7 +119,7 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let message : string = "kein Ereignis mit diesem Name";
|
||||
const message : string = "kein Ereignis mit diesem Name";
|
||||
throw (new Error(message));
|
||||
}
|
||||
}
|
||||
|
|
@ -276,7 +276,7 @@ module mod_vtm
|
|||
{
|
||||
if (! (game.mode === mod_mode.initial))
|
||||
{
|
||||
let message : string = "gesperrt";
|
||||
const message : string = "gesperrt";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -313,7 +313,7 @@ module mod_vtm
|
|||
{
|
||||
if (! (game.mode === mod_mode.initial))
|
||||
{
|
||||
let message : string = "gesperrt";
|
||||
const message : string = "gesperrt";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -345,9 +345,9 @@ module mod_vtm
|
|||
{
|
||||
if (! lib_errormonade.filled<mod_token.type_token>(game.token))
|
||||
{
|
||||
let test : mod_test.type_test = mod_task.tests(game.task)[lib_errormonade.read<int>(game.testindex)];
|
||||
let tape : Array<mod_symbol.type_symbol> = lib_list.copy<mod_symbol.type_symbol>(mod_test.input(test));
|
||||
let spot : mod_spot.type_spot = mod_world.generator_finden(game.world);
|
||||
const test : mod_test.type_test = mod_task.tests(game.task)[lib_errormonade.read<int>(game.testindex)];
|
||||
const tape : Array<mod_symbol.type_symbol> = lib_list.copy<mod_symbol.type_symbol>(mod_test.input(test));
|
||||
const spot : mod_spot.type_spot = mod_world.generator_finden(game.world);
|
||||
game.token = (
|
||||
lib_errormonade.create_just<mod_token.type_token>
|
||||
(
|
||||
|
|
@ -361,28 +361,28 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let token : mod_token.type_token = lib_errormonade.read<mod_token.type_token>(game.token);
|
||||
let spot : mod_spot.type_spot = mod_token.spot_read(token);
|
||||
let actuator_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = mod_world.tile_get(game.world, spot);
|
||||
let actuator : mod_actuator.type_actuator = (
|
||||
const token : mod_token.type_token = lib_errormonade.read<mod_token.type_token>(game.token);
|
||||
const spot : mod_spot.type_spot = mod_token.spot_read(token);
|
||||
const actuator_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = mod_world.tile_get(game.world, spot);
|
||||
const actuator : mod_actuator.type_actuator = (
|
||||
lib_errormonade.filled<mod_actuator.type_actuator>(actuator_)
|
||||
? lib_errormonade.read<mod_actuator.type_actuator>(actuator_)
|
||||
: mod_actuator.mod_rejector.create_extended()
|
||||
);
|
||||
mod_actuator.use(actuator, token);
|
||||
let state : mod_state.type_state = mod_token.state_read(token);
|
||||
const state : mod_state.type_state = mod_token.state_read(token);
|
||||
if (state === mod_state.running)
|
||||
{
|
||||
// nothing tun
|
||||
}
|
||||
else if ((state === mod_state.accepted) || (state === mod_state.rejected))
|
||||
{
|
||||
let accepted : boolean = (state === mod_state.accepted);
|
||||
let output : Array<mod_symbol.type_symbol> = mod_token.tape_read(token);
|
||||
const accepted : boolean = (state === mod_state.accepted);
|
||||
const output : Array<mod_symbol.type_symbol> = mod_token.tape_read(token);
|
||||
game.token = (lib_errormonade.create_nothing<mod_token.type_token>());
|
||||
let testindex : int = lib_errormonade.read<int>(game.testindex);
|
||||
let tests : Array<mod_test.type_test> = mod_task.tests(game.task);
|
||||
let test : mod_test.type_test = tests[testindex];
|
||||
const tests : Array<mod_test.type_test> = mod_task.tests(game.task);
|
||||
const test : mod_test.type_test = tests[testindex];
|
||||
if (! mod_test.pruefen(test, accepted, output))
|
||||
{
|
||||
game.mode = mod_mode.wrong;
|
||||
|
|
@ -407,7 +407,7 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let message : string = "unbehandelter Zustand";
|
||||
const message : string = "unbehandelter Zustand";
|
||||
throw (new Error(message));
|
||||
}
|
||||
}
|
||||
|
|
@ -416,17 +416,17 @@ module mod_vtm
|
|||
}
|
||||
case mod_mode.wrong:
|
||||
{
|
||||
// nothing tun
|
||||
// do nothing
|
||||
break;
|
||||
}
|
||||
case mod_mode.correct:
|
||||
{
|
||||
// nothing tun
|
||||
// do nothing
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
let message : string = "unbehandelter Modus";
|
||||
const message : string = "unbehandelter Modus";
|
||||
throw (new Error(message));
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ module mod_vtm
|
|||
}
|
||||
default:
|
||||
{
|
||||
let message : string = "unbehandelte Art '" + task_raw["kind"] + "'";
|
||||
const message : string = "unbehandelte Art '" + task_raw["kind"] + "'";
|
||||
throw (new Error(message));
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,10 +60,10 @@ module mod_vtm
|
|||
: Array<{spot : mod_spot.type_spot; actuator : mod_actuator.type_actuator;}>
|
||||
{
|
||||
let tiles : Array<{spot : mod_spot.type_spot; actuator : mod_actuator.type_actuator;}> = [];
|
||||
lib_hashmap.iterate
|
||||
lib_hashmap.iterate
|
||||
(
|
||||
world.tiles,
|
||||
(spot, actuator) => tiles.push({"spot": spot, "actuator": actuator})
|
||||
(spot, actuator) => {tiles.push({"spot": spot, "actuator": actuator});}
|
||||
)
|
||||
;
|
||||
return tiles;
|
||||
|
|
@ -110,8 +110,8 @@ module mod_vtm
|
|||
)
|
||||
: void
|
||||
{
|
||||
let extended : boolean = true;
|
||||
let liste : Array<{pruefer : (actuator : mod_actuator.type_actuator)=>boolean; erspotr : ()=>mod_actuator.type_actuator;}> = (
|
||||
const extended : boolean = true;
|
||||
const liste : Array<{pruefer : (actuator : mod_actuator.type_actuator)=>boolean; erspotr : ()=>mod_actuator.type_actuator;}> = (
|
||||
[]
|
||||
.concat
|
||||
(
|
||||
|
|
@ -188,12 +188,13 @@ module mod_vtm
|
|||
)
|
||||
);
|
||||
let index_alt : lib_errormonade.type_errormonade<int>;
|
||||
let actuator_alt_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = lib_hashmap.get(world.tiles, spot);
|
||||
const actuator_alt_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = lib_hashmap.get(world.tiles, spot);
|
||||
if (lib_errormonade.filled<mod_actuator.type_actuator>(actuator_alt_))
|
||||
{
|
||||
let actuator_alt : mod_actuator.type_actuator = lib_errormonade.read(actuator_alt_);
|
||||
let gefunden : boolean = (
|
||||
liste.some
|
||||
const actuator_alt : mod_actuator.type_actuator = lib_errormonade.read(actuator_alt_);
|
||||
const gefunden : boolean = (
|
||||
liste
|
||||
.some
|
||||
(
|
||||
(entry, index) =>
|
||||
{
|
||||
|
|
@ -220,19 +221,19 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let message : string = "kein Aktor gesetzt";
|
||||
const message : string = "kein Aktor gesetzt";
|
||||
// console.warn(message);
|
||||
index_alt = (lib_errormonade.create_just<int>(0));
|
||||
}
|
||||
if (lib_errormonade.filled<int>(index_alt))
|
||||
{
|
||||
let index_neu : int = lib_math.mod(lib_errormonade.read<int>(index_alt) + (inverted ? -1 : +1), liste.length);
|
||||
let actuator_neu : mod_actuator.type_actuator = liste[index_neu].erspotr();
|
||||
const index_neu : int = lib_math.mod(lib_errormonade.read<int>(index_alt) + (inverted ? -1 : +1), liste.length);
|
||||
const actuator_neu : mod_actuator.type_actuator = liste[index_neu].erspotr();
|
||||
tile_set(world, spot, actuator_neu);
|
||||
}
|
||||
else
|
||||
{
|
||||
let message : string = ("Aktor nicht gefunden");
|
||||
const message : string = ("Aktor nicht gefunden");
|
||||
// throw (new Error(message));
|
||||
console.warn(message);
|
||||
}
|
||||
|
|
@ -282,7 +283,7 @@ module mod_vtm
|
|||
{
|
||||
if (lib_errormonade.filled<mod_spot.type_spot>(spot))
|
||||
{
|
||||
let message : string = "mehrere Erzeuger gefunden";
|
||||
const message : string = "mehrere Erzeuger gefunden";
|
||||
throw (new Error(message));
|
||||
}
|
||||
else
|
||||
|
|
@ -299,7 +300,7 @@ module mod_vtm
|
|||
}
|
||||
else
|
||||
{
|
||||
let message : string = "kein Erzeuger gefunden";
|
||||
const message : string = "kein Erzeuger gefunden";
|
||||
throw (new Error(message));
|
||||
}
|
||||
}
|
||||
|
|
@ -321,7 +322,7 @@ module mod_vtm
|
|||
{
|
||||
if (Math.abs(u-v) <= groesse)
|
||||
{
|
||||
let spot : mod_spot.type_spot = {"u": u, "v": v};
|
||||
const spot : mod_spot.type_spot = {"u": u, "v": v};
|
||||
let actuator : mod_actuator.type_actuator;
|
||||
if ((u === -groesse) && (v === 0))
|
||||
{
|
||||
|
|
@ -359,8 +360,8 @@ module mod_vtm
|
|||
world.tiles,
|
||||
(spot, actuator) =>
|
||||
{
|
||||
let spot_ : string = mod_spot.export_(spot);
|
||||
let actuator_ : any = mod_actuator.export_(actuator);
|
||||
const spot_ : string = mod_spot.export_(spot);
|
||||
const actuator_ : any = mod_actuator.export_(actuator);
|
||||
raw["tiles"][spot_] = actuator_;
|
||||
}
|
||||
)
|
||||
|
|
@ -381,9 +382,9 @@ module mod_vtm
|
|||
let tiles : lib_hashmap.type_hashmap<mod_spot.type_spot, mod_actuator.type_actuator> = (lib_hashmap.create<mod_spot.type_spot, mod_actuator.type_actuator>(mod_spot.hash));
|
||||
for (let spot_ in raw["tiles"])
|
||||
{
|
||||
let spot : mod_spot.type_spot = mod_spot.import_(spot_);
|
||||
let actuator_ : mod_actuator.type_actuator = raw["tiles"][spot_];
|
||||
let actuator : mod_actuator.type_actuator = mod_actuator.import_(actuator_);
|
||||
const spot : mod_spot.type_spot = mod_spot.import_(spot_);
|
||||
const actuator_ : mod_actuator.type_actuator = raw["tiles"][spot_];
|
||||
const actuator : mod_actuator.type_actuator = mod_actuator.import_(actuator_);
|
||||
lib_hashmap.set(tiles, spot, actuator);
|
||||
}
|
||||
return (
|
||||
|
|
|
|||
Loading…
Reference in a new issue