sicherung

This commit is contained in:
Christian Fraß 2017-11-08 19:47:56 +01:00
parent 8dd4d54f94
commit cb28201e41
6 changed files with 191 additions and 56 deletions

View file

@ -18,9 +18,23 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(richtung : typ_richtung = 0)
private symbol_links : typ_symbol;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private symbol_rechts : typ_symbol;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(richtung : typ_richtung = 0, symbol_links : typ_symbol = 0, symbol_rechts : typ_symbol = 1)
{
this.richtung = richtung;
this.symbol_links = symbol_links;
this.symbol_rechts = symbol_rechts;
}
@ -33,6 +47,24 @@ module mod_vtm_aufbau
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public symbol_links_lesen() : typ_symbol
{
return this.symbol_links;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public symbol_rechts_lesen() : typ_symbol
{
return this.symbol_rechts;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
@ -55,24 +87,17 @@ module mod_vtm_aufbau
{
let symbol : typ_symbol = symbol_.lesen();
figur.schieben();
switch (symbol)
if (symbol === this.symbol_links)
{
case 0:
{
summand = +1;
break;
}
case 1:
{
summand = -1;
break;
}
default:
{
let meldung : string = ("ungültiges Symbol '" + String(symbol) + "'");
throw (new Error(meldung));
break;
}
summand = +2;
}
else if (symbol === this.symbol_rechts)
{
summand = -2;
}
else
{
summand = 0;
}
}
else

View file

@ -0,0 +1,16 @@
module mod_vtm_aufbau
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_transduktor
{
}
}

View file

@ -72,34 +72,88 @@ module mod_vtm_aufbau
*/
public feld_wechseln(stelle : typ_stelle) : void
{
let liste : Array<{pruefer : (aktor : schnittstelle_aktor)=>boolean; ersteller : ()=>schnittstelle_aktor;}> =
[
{
"pruefer": (aktor) => (aktor instanceof klasse_befoerderer),
"ersteller": () => new klasse_befoerderer(),
},
{
"pruefer": (aktor) => ((aktor instanceof klasse_schreiber) && ((<klasse_schreiber>(aktor)).symbol_lesen() === 0)),
"ersteller": () => new klasse_schreiber(0, 0),
},
{
"pruefer": (aktor) => ((aktor instanceof klasse_schreiber) && ((<klasse_schreiber>(aktor)).symbol_lesen() === 1)),
"ersteller": () => new klasse_schreiber(0, 1),
},
{
"pruefer": (aktor) => (aktor instanceof klasse_leser),
"ersteller": () => new klasse_leser(),
},
{
"pruefer": (aktor) => (aktor instanceof klasse_annehmer),
"ersteller": () => new klasse_annehmer(),
},
{
"pruefer": (aktor) => (aktor instanceof klasse_verwerfer),
"ersteller": () => new klasse_verwerfer(),
},
]
;
let liste : Array<{pruefer : (aktor : schnittstelle_aktor)=>boolean; ersteller : ()=>schnittstelle_aktor;}> = (
[]
.concat
(
[
{
"pruefer": (aktor) => (aktor instanceof klasse_befoerderer),
"ersteller": () => new klasse_befoerderer(),
},
]
)
.concat
(
mod_vtm_helfer.sequenz(4).map
(
symbol => (
{
"pruefer": (aktor) =>
{
if (aktor instanceof klasse_schreiber)
{
let schreiber : klasse_schreiber = <klasse_schreiber>(aktor);
return (schreiber.symbol_lesen() === symbol);
}
else
{
return false;
}
}
,
"ersteller": () => new klasse_schreiber(0, symbol),
}
)
)
)
.concat
(
mod_vtm_helfer.sequenz(2).map
(
index =>
{
let symbol_links : typ_symbol = (2*index+0);
let symbol_rechts : typ_symbol = (2*index+1);
return (
{
"pruefer": (aktor) =>
{
if (aktor instanceof klasse_leser)
{
let leser : klasse_leser = <klasse_leser>(aktor);
return (
(leser.symbol_links_lesen() === symbol_links)
&&
(leser.symbol_rechts_lesen() === symbol_rechts)
);
}
else
{
return false;
}
}
,
"ersteller": () => new klasse_leser(0, symbol_links, 2*index+1),
}
);
}
)
)
.concat
(
[
{
"pruefer": (aktor) => (aktor instanceof klasse_annehmer),
"ersteller": () => new klasse_annehmer(),
},
{
"pruefer": (aktor) => (aktor instanceof klasse_verwerfer),
"ersteller": () => new klasse_verwerfer(),
},
]
)
);
let index : int;
let aktor_alt_ : schnittstelle_fehlermonade<schnittstelle_aktor> = this.felder.holen(stelle);
if (aktor_alt_.ist_schlicht)

View file

@ -22,12 +22,22 @@
.symbol_0
{
fill: hsl( 0, 50%, 50%);
fill: hsl(000.0000000000000, 50%, 50%);
}
.symbol_1
{
fill: hsl(120, 50%, 50%);
fill: hsl(222.4922359499621, 50%, 50%);
}
.symbol_2
{
fill: hsl(084.9844718999243, 50%, 50%);
}
.symbol_3
{
fill: hsl(307.4767078498864, 50%, 50%);
}
.kreis
@ -50,7 +60,10 @@
.eintrag
{
/*
stroke: black;
stroke-width: 0.01;
*/
stroke: none;
}

View file

@ -122,12 +122,12 @@ module mod_vtm_darstellung_steuerung
"symbol": new klasse_nichts<mod_vtm_aufbau.typ_symbol>(),
},
{
"summand": +1,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(0),
"summand": +2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_links_lesen()),
},
{
"summand": -1,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(1),
"summand": -2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_rechts_lesen()),
},
]
;
@ -278,22 +278,22 @@ module mod_vtm_darstellung_steuerung
(dummy, symbol, index) =>
{
let r : float = 0.06125;
let x : float = (+0.1+(2*r)*index);
let x : float = (+0.1+(2*r*1.25)*index);
let y : float = (-0.1);
let knoten_eintrag : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"rect",
"circle",
{
/*
"cx": x.toFixed(svg_float_praezission),
"cy": y.toFixed(svg_float_praezission),
"r": r.toFixed(svg_float_praezission),
*/
/*
"x": (x-r).toFixed(svg_float_praezission),
"y": (y-r).toFixed(svg_float_praezission),
"width": (2*r).toFixed(svg_float_praezission),
"height": (2*r).toFixed(svg_float_praezission),
*/
"class": (
[
"eintrag",

View file

@ -0,0 +1,27 @@
{
"blau_filter": [
{
"titel": "Blau-Filter",
"text": "aus der Eingabe alle roten Einträge beibehalten und alle blauen entfernen",
"tests": [
{
"eingabe": [0,0,0,1,0],
"ausgabe": [0,0,0,0],
},
{
"eingabe": [1,0,1,0,1],
"ausgabe": [0,0,0],
},
{
"eingabe": [1,1,1,1,0],
"ausgabe": [0],
},
{
"eingabe": [0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1],
"ausgabe": [0,0,0,0,0,0,0,0,0],
},
]
}
]
}