Python, 274 285 241 235 225 200 190 183 179 174 166 161
- แก้ไขข้อสุดท้าย (H หรือ W เป็นตัวคั่นพยัญชนะ) Ashcraft ตอนนี้มีผลลัพธ์ที่ถูกต้อง - ทำให้ dict เล็กลง - การสร้างมีขนาดเล็ก (ไม่จำเป็นต้องใช้ python 2.6) - การค้นหา dict ที่ง่ายขึ้นk
- ค่าสระที่เปลี่ยนจาก'*'ไปยัง''และ.appendไปยัง+=[i]
- แสดงรายการความเข้าใจ FTW - ลบสายไปที่upper: D
ฉันไม่สามารถเล่นกอล์ฟได้อีกต่อไป ที่จริงฉันทำ ตอนนี้ฉันคิดว่าฉันไม่สามารถออกกอล์ฟได้อีกแล้ว! ทำอีก...
ใช้ตารางแปล:
def f(n):z=n.translate(65*'_'+'#123#12_#22455#12623#1_2#2'+165*'_').replace('_','');return n[0]+(''.join(('',j)[j>'#']for i,j in zip(z[0]+z,z)if i!=j)+'000')[:3]
รหัสความเข้าใจรายการเก่า:
x=dict(zip('CGJKQSXZDTLMNRBFPV','2'*8+'3345561111'))
def f(n):z=[x.get(i,'')for i in n if i not in'HW'];return n[0]+(''.join(j for i,j in zip([x.get(n[0])]+z,z)if i!=j)+'000')[:3]
รหัสเก่า:
x=dict(zip('CGJKQSXZDTLMNRBFPV','2'*8+'3345561111'))
def f(n):
e=a=[];k=n[0]in x
for i in[x.get(i,'')for i in n.upper()if i not in'HW']:
if i!=a:e+=[i]
a=i
return n[0]+(''.join(e)+'000')[k:3+k]
ทดสอบ:
[f(i) for i in ['WASHINGTON', 'LEE', 'GUTIERREZ', 'PFSTER', 'JACKSON',
'TYMCZAK', 'VANDEUSEN', 'ASHCRAFT']]
ให้:
['W252', 'L000', 'G362', 'P236', 'J250', 'T522', 'V532', 'A261']
อย่างที่คาดไว้.