ex4_9.lua 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. local function remove(str, start, _end)
  2. -- print(start, _end, str:sub(start, start), str:sub(_end, _end))
  3. local start_part = str:sub(1, start - 1)
  4. local end_part = str:sub(_end + 1, -1)
  5. return start_part .. end_part
  6. end
  7. local function remove_patterns(str, pattern)
  8. while true do
  9. local rem_start, rem_end, _ = str:find(pattern)
  10. if rem_start == nil then
  11. break
  12. end
  13. -- print(str, pattern, rem_start, rem_end)
  14. str = remove(str, rem_start, rem_end)
  15. -- print(str)
  16. end
  17. return str
  18. end
  19. local function ispali(str)
  20. str = str:lower()
  21. -- format
  22. str = remove_patterns(str, "%s")
  23. str = remove_patterns(str, "%p")
  24. for i = 1, utf8.len(str) do
  25. local idx = utf8.offset(str, i)
  26. local idx_rev = utf8.offset(str, -i)
  27. local ch_code = utf8.codepoint(str, idx)
  28. local ch_code_rev = utf8.codepoint(str, idx_rev)
  29. if ch_code ~= ch_code_rev then
  30. return false
  31. end
  32. end
  33. return true
  34. end
  35. local function test(str)
  36. print(("%s: %q"):format(str, ispali(str)))
  37. end
  38. test("step ön nö pets")
  39. test("bänänä")
  40. print()
  41. test("step. ön nö pets!")
  42. test("bänänä??")