# a065 - 提款卡密碼
### 題目連結: [a065](https://zerojudge.tw/ShowProblem?problemid=a065)
### 題目解析
* 將英文字串轉換為密碼
* 密碼轉換通常有所謂的公式、規則,依據這些項目,就能將任何字元進行轉換
### 題目類型
字元處理
### 範例測資解讀
* 輸入
* 每筆資料一行,每行為七個相連的大寫字母,中間無空白
* 輸出
* 經過公式後產生的密碼,由於規則限制,必定為六個數字字元
### 其他注意事項
此題的規則限制滿嚴格的,因此輸入資料都必定為7個英文字元,因此不會有太過於複雜的程式設計
### 程式解析
將英文字母轉換為密碼的公式題目上有說明:
* 相鄰的每兩個字母間的「距離」就依序代表密碼中的一位數。
* 所謂「距離」指的是從較「小」的字母要數幾個字母才能數到較「大」字母。字母的大小則是依其順序而定,越後面的字母越「大」。
從以上規則可以整理出程式計算的方法
1. 查表法
``` python
CODE = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
def encode(c1, c2):
# 首先抓出兩個字母 c1, c2
if c1 in CODE:
num1 = CODE.index(c1)+1
if c2 in CODE:
num2 = CODE.index(c2)+1
if num1>=num2:
r = num1 - num2
elif num1<num2:
r = num2 - num1
else:
r = num1 - num2
return r
```
2. ASCII 比較法,利用英文字元都有一個相對應 code 的方式,相減後取絕對值並減掉-48
``` python
def encode(c1, c2):
# 首先抓出兩個字母 c1, c2
r = abs(ord(c1)-ord(c2))-48
return r
```
### 完成程式碼 (基礎寫法提供初學者參考,並非優化過後的程式碼)
``` python=01
import sys
CODE = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
def encode(c1, c2):
if c1 in CODE:
num1 = CODE.index(c1)+1
if c2 in CODE:
num2 = CODE.index(c2)+1
if num1>=num2:
r = num1 - num2
elif num1<num2:
r = num2 - num1
else:
r = num1 - num2
return r
#start
for s in sys.stdin:
data = list(s)
#移除最後的 '\n'
data.pop()
for i in range(len(data)-1):
result = encode(data[i], data[i+1])
print(result, end='')
print()
```
###### tags: `基礎15題解` `APCS` `ZeroJudge`