## 4 Palindrominkokeilija **Tehtävä:** Luvun kuusi neljäs harjoitustehtävä on luoda ohjelma, joka testaa onko käyttäjän antama merkkijono palindromi, eli merkkijono, joka on etu- ja takaperin luettuna sama. Esimerkiksi "saippuakauppias" tai lause "Nalle vai Viivi Avellan?" ovat palindromeja, koska ne voidaan lukea samalla tavoin etu- ja takaperin. Tee siis ohjelma, joka pyytää käyttäjältä testattavaa lausetta kysymällä "Kirjoita testattava lause: " ja testaa syötteen, vastaten joko "[syöte] on palindromi." tai "[syöte] ei ole palindromi; se on väärinpäin [syöte väärinpäin].". Lisäksi, mikäli käyttäjän antama syöte on alle 5 merkkiä pitkä, annetaan virheilmoitus "[syöte] ei ole kelvollinen sana.". Lopuksi käyttäjältä vielä kysytään "Testataanko lisää? (k/e): ". Toteuta ohjelmasti siten, että palindromin tunnistus onnistuu epäsymmetrisesti asetelluista välilyönneistä ja isoista kirjaimista huolimatta. Välimerkkejä (!,?, : jne...) järjestelmän ei tarvitse tunnistaa; oletetaan että käyttäjä ei kirjoita niitä testisyötteisiin. Toimiessaan oikein ohjelma tulostaa seuraavaa: Example output: ``` Kirjoita testattava lause: saippua saippua ei ole palindromi; se on väärinpäin auppias. Testataanko lisää? (k/e): k Kirjoita testattava lause: saippuakauppias saippuakauppias on palindromi. Testataanko lisää? (k/e): e ``` **Vastaus** ``` #!/usr/bin/env ruby # coding: utf-8 def palindromi(syote) if syote.length < 5 puts "#{syote} ei ole kelvollinen sana." return end syotecp = syote.downcase.gsub(" ", "") if syotecp == syotecp.reverse puts "#{syote} on palindromi." else puts "#{syote} ei ole palindromi; se on väärinpäin #{syote.reverse}." end end while true print "Kirjoita testattava lause: " palindromi(String(gets.chomp)) begin print "Testataanko lisää? (k/e): " input = String(gets.strip.chomp) case input when "k" next when "e" Process.exit(0) else throw ArgumentError end rescue ArgumentError warn "Tuntematon valinta" retry end end ```