Swift 練筆 —— 拉丁豬文字游戲

/***********************************************************
@Execise: 
    拉丁豬文字游戲:
        將一個英語單詞的第一個輔音音素的字母移動到詞尾并且加上后綴-ay
@notice:
    1. Swift 3.0+ 將字符串截取函數 substring 移到 Foundation 中
        因此需事先引入 Foundation
    2. 網上看到各種語言的實現版本,有Java的,C語系的,無論如何,
        Python 的實現看上去最簡潔
***********************************************************/

import Foundation

// 元音、半元音集合,除元音半元音之外的就是輔音
let vowels: Set<Character> = ["a", "e", "i", "o", "u", "y", "w"]

// 拉丁豬游戲邏輯實現
func doLatinPigGameLogic(_ string: String) {
    var pos = -1, index=0
    for c in string.characters {
        let s = String(c).lowercased()
        if !vowels.contains(Character(s)) {
            pos = index
            break 
        }
        index += 1
    }

    if pos >= 0 {
        let target = string.index(string.startIndex, offsetBy:pos)
        let from = string.index(string.startIndex, offsetBy:pos+1)
        let letter = String(string[target])
        let front = string.substring(to: target)
        let back = string.substring(from: from)
        let latin = front + back + "-" + letter + "ay"
        print("原文:\(string), 拉丁豬:\(latin)")
    }
    else{
        print("[\(string)]無法轉換為拉丁豬")
    }
}

// 測試
doLatinPigGameLogic("Banana")
doLatinPigGameLogic("swift")

// 輸出
// 原文:Banana, 拉丁豬:anana-Bay
// 原文:swift, 拉丁豬:wift-say

文末附上Python的實現版本:

# encoding=utf-8

VOWEL = ('a','e','i','o','u', 'w', 'y')

def doLatinPigGameLogic(string):
    target = -1
    for i, e in enumerate(string):
        if e not in VOWEL:
            target = i
            break
    if target >= 0:
        front = string[0:target]
        back = string[target+1:]
        middle = string[target:target+1]
        result = front + back + '-' + middle + 'ay'
        print(u"原文:%s, 拉丁豬:%s" % (string, result))
    else:
        print(string + "無法轉換為拉丁豬")

doLatinPigGameLogic("Banana")
doLatinPigGameLogic("swift")

// 輸出
// 原文:Banana, 拉丁豬:anana-Bay
// 原文:swift, 拉丁豬:wift-say
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,353評論 25 708
  • 一個朋友說,她寢室的一個人老是見不得她好,說話帶刺。后來朋友買了瑜伽墊,在寢室時不時可以運動一下,于是她也買了,但...
    Leo九九閱讀 516評論 0 2
  • 四月太多雨 月光也懶得皎潔 模糊了幾多人的夢 蛙鳴聲寂寥 三三兩兩 路燈拉長疲憊的人影 有人說 猜人喜不喜歡你 答...
    小至夏柯閱讀 162評論 0 2