Latihan 1 dari materi Memento Pattern (Undo/Redo) di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Starter sudah membuat createEditor(3) dan mencetak 10 baris; bagian itu tetap. Lengkapi createEditor(maxHistory) supaya mengembalikan object dengan lima method:
- Simpan
let text = '', const undoStack = [], dan const redoStack = [] di dalam createEditor.
type(str): push text ke undoStack sebelum mengubahnya. Kalau undoStack.length lebih dari maxHistory, buang yang paling tua dengan undoStack.shift(). Kosongkan redoStack. Lalu text += str.
getText(): kembalikan text.
undo(): kalau undoStack kosong, kembalikan false. Kalau gak, push text ke redoStack, isi text = undoStack.pop(), lalu kembalikan true.
redo(): kalau redoStack kosong, kembalikan false. Kalau gak, push text ke undoStack, isi text = redoStack.pop(), lalu kembalikan true.
historySize(): kembalikan { undo: undoStack.length, redo: redoStack.length }.
Console harus mencetak 10 baris ini, berurutan:
- string kosong (
'')
Hello, World
3
true
Hello, (dengan satu spasi di akhir)
1
true
Hello, World
Hello, !!
0
Yang juga dinilai: createEditor(2) yang diketik 'a' dan 'b', lalu undo, redo, undo, dan type('X'), menghasilkan teks ab, true, a, true, ab, aX, dan historySize().redo 0. Dan createEditor(2) yang diketik 'a', 'b', 'c' punya historySize().undo 2.