Berikut adalah implementasi dalam JavaScript untuk dua metode yang ada di modul:
- Automata-based Construction (Menggunakan
switch
untuk menangani state) - Table-driven Construction (Menggunakan array untuk lookup nilai)
1. Automata-based Construction (FSM)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const State = { START: "START", GAME: "GAME", PAUSE: "PAUSE", EXIT: "EXIT" }; let state = State.START; function runStateMachine() { console.log(`${state} SCREEN`); rl.question("Enter Command: ", (command) => { switch (state) { case State.START: if (command === "ENTER") state = State.GAME; else if (command === "QUIT") state = State.EXIT; break; case State.GAME: if (command === "ESC") state = State.PAUSE; break; case State.PAUSE: if (command === "BACK") state = State.GAME; else if (command === "HOME") state = State.START; else if (command === "QUIT") state = State.EXIT; break; } if (state !== State.EXIT) { runStateMachine(); } else { console.log("EXIT SCREEN"); rl.close(); } }); } runStateMachine(); |
Penjelasan:
- Program ini berjalan dalam loop hingga pengguna memasukkan “QUIT”.
- Menggunakan
readline
untuk membaca input dari terminal. state
berpindah berdasarkan input pengguna.
2. Table-driven Construction
Direct Access:
1 2 3 4 5 6 7 |
function getDaysPerMonth(month) { const daysPerMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; return daysPerMonth[month - 1] || "Invalid month"; } console.log(getDaysPerMonth(2)); // Output: 28 console.log(getDaysPerMonth(13)); // Output: Invalid month |
Stair-step Access:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function getGradeByScore(studentScore) { const grades = ["A", "AB", "B", "BC", "C", "D", "E"]; const rangeLimit = [80, 70, 65, 60, 50, 40, 0]; for (let i = 0; i < rangeLimit.length; i++) { if (studentScore >= rangeLimit[i]) { return grades[i]; } } return "E"; } console.log(getGradeByScore(75)); // Output: AB console.log(getGradeByScore(45)); // Output: D |
Soal 1: Automata-based Construction (FSM)
Sebuah game memiliki tiga state utama:
- START (awal permainan)
- PLAYING (sedang bermain)
- GAME OVER (permainan berakhir)
Aturan transisi antar state:
- Dari START, jika pemain mengetik “PLAY”, permainan masuk ke state PLAYING.
- Dari PLAYING, jika pemain mengetik “LOSE”, permainan masuk ke state GAME OVER.
- Dari GAME OVER, jika pemain mengetik “RESTART”, permainan kembali ke state START.
- Pemain bisa keluar kapan saja dengan mengetik “EXIT”.