Skip to content

Instantly share code, notes, and snippets.

@renyuanL
Last active August 29, 2015 14:05
Show Gist options
  • Save renyuanL/d11c169d37cf05b8f704 to your computer and use it in GitHub Desktop.
Save renyuanL/d11c169d37cf05b8f704 to your computer and use it in GitHub Desktop.
'''
ryOlmp2013_01.py
呂仁園,2014/08/27
----------------------------
第一題:拼字問題
執行時間: 1 秒
有一位李先生從英文報紙上剪下 n 個大寫字母,
希望可以拼貼出一封由大寫字母與空白字元組成的賀年字串 L 寄給朋友。
請問這 n 個字母能從 L 的第一個字排到第幾個字,
請將能拼出的部分顯示出來。
例如,賀年卡 L 的內容為 HAPPY NEW YEAR,
而 n 個字母為 NAWPEHLP。則須顯示 HAPP。
輸入說明
第一行輸入字串 L,L 由大寫字母與空白字元組成,0 < |L| <= 100。
第二行輸入 n 個連續大寫字母,其中 0 < n <= 100。
輸出說明
顯示所能拼出的文字(單字跟單字間要有一個空白字元)。
假設至少可拼出一個字母。
範例一
輸入
HAPPY NEW YEAR
AWPEHLPY
輸出
HAPPY
說明: 在比對的過程中發現 n = 8 個大寫字母中沒有 N 這個字,
且在 N 之前的部分都有找到,因此輸出 HAPPY(Y 之後不需列印空白字元)。
範例二
輸入
GOOD LUCK IN THE YEAR AHEAD
OMKLDLMONNG
輸出
GOOD L
說明: 在比對的過程中發現 n = 11 個大寫字母中沒有 U 這個字,
而在 U 之前的部分都有找到,
且因為 L 是屬於下一個單字 LUCK 的字母,
因此輸出為 GOOD L,D 和 L 間必須有一個空白字元。
'''
範例= [
#原題目所給的測試
{'L':'HAPPY NEW YEAR', # 賀卡字串
'I':'AWPEHLPY', # 輸入字串
'T':'HAPPY'}, # 【人工預計】的正確輸出字串
{'L':'GOOD LUCK IN THE YEAR AHEAD',
'I':'OMKLDLMONNG',
'T':'GOOD L'},
#我們自己的測試
{'L':'SINCERELY RENYUAN LYU',
'I':'NCERYENSIRELYXXAABUAUNL',
'T':'SINCERELY RENYUAN L'},
{'L':'恭賀 新喜',
'I':'賀大家恭可不新',
'T':'恭賀 新'},
{'L':'呂仁園 敬賀',
'I':'仁一二三進園敬呂',
'T':'呂仁園 敬'}
]
#
# 主要的演算法在此。
#
def 拼貼賀年字串(L, I):
O= ''
for x in L:
if (x in I):
O += x
I= I.replace(x,'_',1)
elif (x == ' '):
O += x
else:
break
O= O.strip()
return O
#
# 把演算法在 範例中 測試一番,
# 包括別人給的例子,以及自己創造的例子。
#
def 主測試():
for e in 範例:
L= e['L']
I= e['I']
O= 拼貼賀年字串(L,I)
print('拼貼賀年字串= ',O)
# 以下這行可測試程式的「邏輯」正確性
assert (O==e['T']), (O,e)
if __name__=='__main__':
主測試()
'''
# 執行結果
>>>
拼貼賀年字串= HAPPY
拼貼賀年字串= GOOD L
拼貼賀年字串= SINCERELY RENYUAN L
拼貼賀年字串= 恭賀 新
拼貼賀年字串= 呂仁園 敬
>>>
'''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment