<dl>
<dt>set of states:</dt>
<dd>
<span class="term"><i>S</i> = {<i>s</i><sub>0</sub>, <i>s</i><sub>1</sub>, …, <i>s</i><sub><i>n</i></sub>}</span>
</dd>
<dt>initial state:</dt>
<dd><i>s</i><sub>0</sub></dd>
<dt>input alphabet:</dt>
<dd>
<span class="term">Σ = {0, 1, …, 9}</span>
</dd>
<dt>output alphabet:</dt>
<dd>
<span class="term">Γ = {T, F}</span>
</dd>
<dt>transition function:</dt>
<dd>
<span class="term">δ(<i>s</i><sub><i>u</i></sub>, <i>d</i>)</span>
=
<span class="term"><i>s</i><sub><i>v</i></sub></span>
wherein
<span class="term"><i>v</i> = (10 × <i>u</i> + <i>d</i>) mod <i>n</i></span>
</dd>
<dt>output function:</dt>
<dd>
<span class="term">ω(<i>s</i><sub><i>u</i></sub>, <i>d</i>)</span>
=
<span class="cases">
<span class="case">
<span class="value">T</span>
<span class="condition">
when
<span class="term">δ(<i>s</i><sub><i>u</i></sub>, <i>d</i>) = <i>s</i><sub>0</sub></span>,
i.e. when
<span class="term">(10 × <i>u</i> + <i>d</i>) mod <i>n</i> = 0</span>;
</span>
</span>
<span class="case">
<span class="value">F</span>
<span class="condition">otherwise</span>
</span>
</span>
</dd>
</dl>
dl
{
padding: 1em;
display: grid;
grid-template-columns: auto 1fr;
gap: 0.5em 1em;
font: 1em Georgia;
}
dt, dd
{
margin: 0;
}
.term
{
white-space: nowrap;
}
.cases
{
display: inline-table;
vertical-align: middle;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3Ctext x='0' y='0.8' font-family='Georgia' font-size='1' transform='scale(0.5 1)'%3E{%3C/text%3E%3C/svg%3E") no-repeat;
}
.case
{
display: table-row;
vertical-align: middle;
}
.value, .condition
{
display: table-cell;
padding-left: 1em;
}
class DivisibilityFSA
{
n;
currentState = 0;
inputAlphabet = [0,1,2,3,4,5,6,7,8,9];
constructor(n)
{
this.n = n;
}
transition = input => this.inputAlphabet.includes(input) ?
!(this.currentState = (10 * this.currentState + input) % this.n) :
undefined;
}
const fsa = new DivisibilityFSA(7);
console.log( fsa.transition(9) );
console.log( fsa.transition(8) );
console.log( fsa.transition(7) );
console.log( fsa.transition(6) );
This Pen doesn't use any external CSS resources.