Langsung ke konten utama

Day 62 : membuat program sederhana go part 6 : mengecek kalimat palindrome

Hari ini saya akan melanjutkan tulisan blog saya di hari ke 61 dengan memberikan contoh kode program Golang yang berfungsi untuk mengecek apakah sebuah kalimat merupakan palindrome atau bukan.

Sebelum lanjut saya akan menjelaskan terlebih dahule mengenai palindrome karena saya pun baru tau palindrome itu setelah di berikan tugas ini oleh mas Ridwan.

Apa itu Palindrome?

Palindrome adalah kata, frasa, angka, atau urutan karakter yang dibaca sama dari depan maupun belakang. Dalam hal ini, spasi, tanda baca, dan huruf besar/kecil diabaikan saat memeriksa palindrome.



Contoh palindrome dalam bahasa Indonesia adalah:

  • "katak"
  • "kasur ini rusak"

Dalam bahasa Inggris, contohnya adalah:

  • "racecar"
  • "A man, a plan, a canal, Panama!"

Kode Program untuk Mengecek Palindrome

Berikut ini adalah kode Go untuk mengecek apakah input pengguna merupakan palindrome:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "unicode"
)


func filterAlphanumeric(input string) string {
    var hasil strings.Builder
    for _, char := range input {
        if unicode.IsLetter(char) || unicode.IsDigit(char) {
            hasil.WriteRune(unicode.ToLower(char))
        }
    }
    return hasil.String()
}


func cekPalindrome(kalimat string) bool {
    kalimat = filterAlphanumeric(kalimat)

    panjang := len(kalimat)
    for i := 0; i < panjang/2; i++ {
        if kalimat[i] != kalimat[panjang-1-i] {
            return false
        }
    }
    return true
}

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Masukkan kalimat: ")

    input, _ := reader.ReadString('\n')

    input = strings.TrimSpace(input)

    if cekPalindrome(input) {
        fmt.Println("True (Palindrom)")
    } else {
        fmt.Println("False (Bukan palindrom)")
    }
}

1. Import Package

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "unicode"
)
  • fmt: Untuk menampilkan output dan mengambil input.
  • os: Untuk mengakses input/output dari sistem operasi.
  • bufio: Digunakan untuk membaca input dari pengguna dengan metode bufio.NewReader.
  • strings: Berisi fungsi untuk manipulasi string, seperti mengubah huruf kecil dan menghapus spasi.
  • unicode: Berisi fungsi untuk mengecek tipe karakter, misalnya apakah huruf, angka, atau simbol.

2. Fungsi filterAlphanumeric

func filterAlphanumeric(input string) string {
    var hasil strings.Builder
    for _, char := range input {
        if unicode.IsLetter(char) || unicode.IsDigit(char) {
            hasil.WriteRune(unicode.ToLower(char)) // Ubah ke huruf kecil jika perlu
        }
    }
    return hasil.String()
}

Penjelasan:

  • Fungsi ini hanya mengambil karakter alfanumerik (huruf dan angka) dari input dan mengubah huruf kapital menjadi huruf kecil.
  • strings.Builder digunakan untuk membangun string secara efisien.
  • Loop for _, char := range input: Memeriksa setiap karakter dalam input.
  • unicode.IsLetter(char): Mengecek apakah karakter adalah huruf.
  • unicode.IsDigit(char): Mengecek apakah karakter adalah angka.
  • unicode.ToLower(char): Mengubah huruf besar menjadi kecil.

Contoh:

Input:

"Kasur ini rusak!"

Hasil dari fungsi ini:

"kasurinirusak"

3. Fungsi cekPalindrome

func cekPalindrome(kalimat string) bool {
    kalimat = filterAlphanumeric(kalimat)

    panjang := len(kalimat)
    for i := 0; i < panjang/2; i++ {
        if kalimat[i] != kalimat[panjang-1-i] {
            return false
        }
    }
    return true
}

Penjelasan:

  • Fungsi ini memanggil filterAlphanumeric untuk memproses input dan hanya mengambil karakter alfanumerik dengan huruf kecil.
  • Looping dari awal hingga tengah string:
    • Membandingkan karakter dari awal dengan karakter dari akhir string.
    • Jika ada perbedaan, fungsi akan mengembalikan false (bukan palindrome).
    • Jika semua pasangan karakter cocok, fungsi akan mengembalikan true (palindrome).

4. Fungsi main

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Masukkan kalimat: ")

    input, _ := reader.ReadString('\n')

    input = strings.TrimSpace(input)

    if cekPalindrome(input) {
        fmt.Println("True (Palindrom)")
    } else {
        fmt.Println("False (Bukan palindrom)")
    }
}

Penjelasan:

  • bufio.NewReader(os.Stdin): Membuat reader untuk membaca input dari keyboard.
  • reader.ReadString('\n'): Membaca input dari pengguna hingga Enter ditekan.
  • strings.TrimSpace(input): Menghapus spasi di awal dan akhir input.
  • Fungsi cekPalindrome digunakan untuk mengecek apakah input tersebut adalah palindrome atau bukan.

Contoh Input dan Output:

  1. Contoh 1:

    Input:

    Kasur ini rusak

    Output:

    True (Palindrom)
  2. Contoh 2:

    Input:

    Halo Dunia

    Output:

    False (Bukan palindrom)

Penjelasan Alur Program:

  1. Pengguna memasukkan kalimat.
  2. Program memanggil filterAlphanumeric untuk memproses input menjadi hanya karakter alfanumerik dan huruf kecil.
  3. Program memanggil cekPalindrome untuk memeriksa apakah string hasil filter tersebut adalah palindrome.
  4. Program menampilkan hasil:
    • "True" jika palindrome.
    • "False" jika bukan palindrome.

Kesimpulan:

  • Spasi, tanda baca, dan simbol diabaikan dalam pemeriksaan palindrome.
  • Huruf besar dan kecil tidak dibedakan.
  • Program ini efisien dan dapat memproses kalimat panjang dengan berbagai karakter dan simbol.


Komentar

Postingan populer dari blog ini

Day 109 : Akhir dari Perjalanan PKL: Terima Kasih untuk PT Excellent

Hari ini adalah hari terakhir saya menjalani PKL di PT Excellent. Momen ini menjadi penutup dari perjalanan yang luar biasa penuh pembelajaran, pengalaman, dan kenangan yang tak terlupakan. Saya ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada keluarga besar PT Excellent atas kesempatan, bimbingan, dan kepercayaan yang telah diberikan kepada saya selama saya melaksanakan PKL di sini. Selama PKL, saya mendapatkan banyak pengetahuan baru yang sebelumnya belum pernah saya pelajari. Dari segi teknis, saya belajar banyak tentang teknologi seperti Zimbra, bahasa pemrograman Golang, hingga DevOps hal-hal yang awalnya terasa asing, kini menjadi ilmu yang berharga dan menjadi ilmu baru bagi saya. Namun, pembelajaran saya di PT Excellent tidak hanya terbatas pada aspek teknis. Saya juga belajar tentang kedisiplinan, tanggung jawab, profesionalisme, serta bagaimana pentingnya kolaborasi dalam lingkungan kerja. Terima kasih kepada Mas Ridwan, yang selalu membimbing saya dengan sab...

Day 108 : H-2 menuju akhir PKL

Waktu rasanya berjalan begitu cepat. Hari ini sudah masuk H-2 menuju akhir masa PKL saya di PT Excellent. Ada perasaan campur aduk antara lega karena akhirnya berhasil menyelesaikan semuanya, senang karena banyak pengalaman baru yang saya dapatkan, tapi juga sedikit. PKL di PT Excellent bukan cuma soal kerjaan atau belajar teknis, tapi juga perjalanan penuh cerita dan pelajaran. Setiap hari yang saya jalani di sini selalu memberi pengalaman baru, baik dari tugas yang menantang, bimbingan dari mentor, maupun suasana kerja yang hangat. Salah satu hal yang paling membekas adalah semangat belajar dari Pak Bos. Beliau pernah bercerita tentang bagaimana sibuknya beliau tapi tetap bisa belajar bahasa baru bahkan lebih dari satu bahasa. Itu benar-benar membuka mata saya, bahwa waktu senggang yang sering terbuang sebenarnya bisa dimanfaatkan untuk hal-hal yang lebih produktif. Mas Ridwan, yang selalu menemani kami saat briefing pagi, juga memberikan banyak pelajaran berharga. Setiap pagi kami b...

Day 82 : Membuat image dengan bahasa pemrograman golang

Hari ini, saya melanjutkan perjalanan belajar Docker dengan memanfaatkan Visual Studio Code (VSCode), editor favorit saya. Fokus utama saya adalah memahami cara membuat Docker image menggunakan alur kerja yang terintegrasi dengan VSCode. Proses ini tidak hanya efisien tetapi juga menyenangkan karena VSCode memiliki ekosistem yang kaya, termasuk berbagai ekstensi pendukung yang mempermudah pekerjaan. Mengapa Menggunakan VSCode untuk Docker? VSCode menyediakan lingkungan pengembangan yang lengkap dengan berbagai fitur, seperti: Docker Extension : Mempermudah pengelolaan image, container, dan jaringan Docker langsung dari editor. Terminal Terintegrasi : Menjalankan perintah Docker langsung dari VSCode tanpa perlu beralih aplikasi. Debugging Tools : Membantu melacak masalah aplikasi yang berjalan di dalam container, terutama bagi pengembang Golang. Dengan semua keunggulan ini, VSCode menjadi alat yang sangat mendukung dalam pengembangan berbasis Docker. Langkah-langkah Membuat Docker Image...