<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">&Sigma; = {0, 1, …, 9}</span>
	</dd>
	<dt>output alphabet:</dt>
	<dd>
		<span class="term">&Gamma; = {T, F}</span>
	</dd>
	<dt>transition function:</dt>
	<dd>
		<span class="term">&delta;(<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 &times; <i>u</i> + <i>d</i>) mod <i>n</i></span>
	</dd>
	<dt>output function:</dt>
	<dd>
		<span class="term">&omega;(<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">&delta;(<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 &times; <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) );
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://bittersmann.de/lib/backlink/backlink.js