fork download
  1. class Kamus {
  2. constructor() {
  3. this.data = {}; // Menyimpan kata dan sinonimnya
  4. }
  5.  
  6. // Menambahkan kata dan sinonimnya
  7. tambah(kata, daftarSinonim) {
  8. if (!this.data[kata]) {
  9. this.data[kata] = new Set();
  10. }
  11.  
  12. for (let sinonim of daftarSinonim) {
  13. this.data[kata].add(sinonim);
  14. }
  15. }
  16.  
  17. // Mengambil semua sinonim dari suatu kata
  18. ambilSinonim(kata) {
  19. if (!this.data[kata]) { // akan ditelusuri dulu apakah kata yang dijalankan tidak ditemukan di kamus
  20.  
  21. for (let kunci in this.data) { // lalu dicek dlu apakah kata bagian dari sinonim dari kata lain
  22. if (this.data[kunci].has(kata)) {
  23. return [kata];
  24. }
  25. }
  26. return null; // kalau kata yang digunakan benar-benar tidak ditemukan di mana pun
  27. }
  28.  
  29. let hasil = new Set();
  30. let antrian = [...this.data[kata]];
  31. let dikunjungi = new Set();
  32.  
  33. for (let s of this.data[kata]) {
  34. hasil.add(s);
  35. dikunjungi.add(s);
  36. }
  37.  
  38. while (antrian.length > 0) {
  39. let sekarang = antrian.shift();
  40. if (this.data[sekarang]) {
  41. for (let berikutnya of this.data[sekarang]) {
  42. if (!dikunjungi.has(berikutnya)) {
  43. hasil.add(berikutnya);
  44. antrian.push(berikutnya);
  45. dikunjungi.add(berikutnya);
  46. }
  47. }
  48. }
  49. }
  50.  
  51. return Array.from(hasil);
  52. }
  53. }
  54.  
  55. const kamus = new Kamus();
  56.  
  57. // Tambahkan sinonim
  58. kamus.tambah('bahagia', ['senang', 'gembira']);
  59. kamus.tambah('gembira', ['riang', 'ceria']);
  60. kamus.tambah('senang', ['puas', 'lega']);
  61. kamus.tambah('lega', ['tenang']);
  62.  
  63. kamus.tambah('marah', ['geram', 'murka']);
  64. kamus.tambah('geram', ['kesal']);
  65.  
  66. // Ambil sinonim
  67. console.log('Sinonim dari "bahagia":');
  68. console.log(kamus.ambilSinonim('bahagia'));
  69. // harusnya akan menghasilkan output: ['senang', 'gembira', 'puas', 'lega', 'riang', 'ceria', 'tenang']
  70.  
  71. console.log('\nSinonim dari "gembira":');
  72. console.log(kamus.ambilSinonim('gembira'));
  73. // harusnya akan menghasilkan output : ['riang', 'ceria']
  74.  
  75. console.log('\nSinonim dari "geram":');
  76. console.log(kamus.ambilSinonim('geram'));
  77. // harusnya akan menghasilkan output: ['kesal']
  78.  
  79. console.log('\nSinonim dari "kesal":');
  80. console.log(kamus.ambilSinonim('kesal'));
  81. // Outputnya : ['kesal']
  82.  
  83. console.log('\nSinonim dari "abcde":');
  84. console.log(kamus.ambilSinonim('abcde'));
  85. // untuk kata yang tidak ada didalam kamus, outputnya : null
  86.  
Success #stdin #stdout 0.05s 17132KB
stdin
Standard input is empty
stdout
Sinonim dari "bahagia":
senang,gembira,puas,lega,riang,ceria,tenang

Sinonim dari "gembira":
riang,ceria

Sinonim dari "geram":
kesal

Sinonim dari "kesal":
kesal

Sinonim dari "abcde":
null