Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.2 KiB

4 years ago
  1. ## 4 Palindrominkokeilija
  2. **Tehtävä:**
  3. 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.
  4. 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): ".
  5. 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.
  6. Toimiessaan oikein ohjelma tulostaa seuraavaa:
  7. Example output:
  8. ```
  9. Kirjoita testattava lause: saippua
  10. saippua ei ole palindromi; se on väärinpäin auppias.
  11. Testataanko lisää? (k/e): k
  12. Kirjoita testattava lause: saippuakauppias
  13. saippuakauppias on palindromi.
  14. Testataanko lisää? (k/e): e
  15. ```
  16. **Vastaus**
  17. ```
  18. #!/usr/bin/env ruby
  19. # coding: utf-8
  20. def palindromi(syote)
  21. if syote.length < 5
  22. puts "#{syote} ei ole kelvollinen sana."
  23. return
  24. end
  25. syotecp = syote.downcase.gsub(" ", "")
  26. if syotecp == syotecp.reverse
  27. puts "#{syote} on palindromi."
  28. else
  29. puts "#{syote} ei ole palindromi; se on väärinpäin #{syote.reverse}."
  30. end
  31. end
  32. while true
  33. print "Kirjoita testattava lause: "
  34. palindromi(String(gets.chomp))
  35. begin
  36. print "Testataanko lisää? (k/e): "
  37. input = String(gets.strip.chomp)
  38. case input
  39. when "k"
  40. next
  41. when "e"
  42. Process.exit(0)
  43. else
  44. throw ArgumentError
  45. end
  46. rescue ArgumentError
  47. warn "Tuntematon valinta"
  48. retry
  49. end
  50. end
  51. ```