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