0%

codewar-把英文字母轉成它的位置

題目:把英文字母轉成它的位置,忽略所有非英文字母

Example:

alphabet_position(“The sunset sets at twelve o’ clock.”)

Should return “20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11” (as a string)

解題方向:

  1. 大小寫會影響它的位置號碼,按照它要的結果,應該是用小寫去算,所以先全部換成小寫。

    1
    2
    3
    def alphabet_position(text)
    text.downcase
    end
  2. 把所有非英文字母,包含空白字元全部用gsub取代。

    這邊有參考stackoverflow關於如何使用正規表示法去刪除非字元:

    https://stackoverflow.com/questions/5424354/regex-to-remove-non-letters

    1
    2
    3
    4
    5
    def alphabet_position(text)
    text.downcase.gsub(/[^a-zA-Z]/, '')
    end

    => "thesunsetsetsattwelveoclock"
  3. 用bytes轉換成它的位置,但同時也會轉變成陣列

    https://ruby-doc.org/core-2.5.1/String.html#method-i-bytes

    1
    2
    3
    4
    5
    def alphabet_position(text)
    text.downcase.gsub(/[^a-zA-Z]/, '').bytes
    end

    =>[116, 104, 101, 115, 117, 110, 115, 101, 116, 115, 101, 116, 115, 97, 116, 116, 119, 101, 108, 118, 101, 111, 99, 108, 111, 99, 107]
  4. 個別減96計算出正確位置

    1
    2
    3
    4
    5
    def alphabet_position(text)
    text.downcase.gsub(/[^a-zA-Z]/, '').bytes.map{ |i| i - 96 }
    end

    => [20, 8, 5, 19, 21, 14, 19, 5, 20, 19, 5, 20, 19, 1, 20, 20, 23, 5, 12, 22, 5, 15, 3, 12, 15, 3, 11]
  5. 最後再轉回字串並且加上空格完成題目

    1
    2
    3
    4
    5
    def alphabet_position(text)
    text.downcase.gsub(/[^a-zA-Z]/, '').bytes.map{ |i| i - 96 }.join(' ')
    end

    => "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"