iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0
自我挑戰組

程式設計師大冒險系列 第 28

[28/150]10415 - Eb Alto Saxophone Player

  • 分享至 

  • xImage
  •  

鐵人賽有篇程式碼美學,看完後讓我驚覺前面註解太囉嗦,要是著用程式碼去表達。之後會再多注意註解使用,簡短但是清楚表達。


大綱


前置技能建議

學習資料處理,將資料做布林處理。
建議熟悉split()、list、dict、print
如果有辦法把第一列轉換成第二列,這題就解的開。

• c: finger 2∼4, 7∼10
"c":[0, 1, 1, 1, 0, 0, 1, 1, 1, 1]

10415 - Eb Alto Saxophone Player

按鍵處理儲存非常長一串,很怕上傳評判發生錯誤。

程式碼

import sys
global note
note={"c":[0, 1, 1, 1, 0, 0, 1, 1, 1, 1],"d":[0, 1, 1, 1, 0, 0, 1, 1, 1, 0],"e":[0, 1, 1, 1, 0, 0, 1, 1, 0, 0],"f":[0, 1, 1, 1, 0, 0, 1, 0, 0, 0],"g":[0, 1, 1, 1, 0, 0, 0, 0, 0, 0],"a":[0, 1, 1, 0, 0, 0, 0, 0, 0, 0],"b":[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],"C":[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],"D":[1, 1, 1, 1, 0, 0, 1, 1, 1, 0],"E":[1, 1, 1, 1, 0, 0, 1, 1, 0, 0],"F":[1, 1, 1, 1, 0, 0, 1, 0, 0, 0],"G":[1, 1, 1, 1, 0, 0, 0, 0, 0, 0],"A":[1, 1, 1, 0, 0, 0, 0, 0, 0, 0],"B":[1, 1, 0, 0, 0, 0, 0, 0, 0, 0]}
#測試函式運作
def test(fun):
    if(0):
        return 1
    if(fun=="inp"):
        return 0
    if(fun=="sax"):
        return 1

note非常長一串

#讀取函式
def inp():
    nuca=sys.stdin.readline()
    nuca=int(nuca)
    for cai in range(nuca):
        st=sys.stdin.readline().replace("\n","")
        if(test("inp")):print(st)
        sax(st)

這邊很簡單

def sax(ca):
    #now表現在音符、nemu表下一個音符
    global note
    sumu=[0]*10
    nemu=[0]*10
    #按鍵次數計算
    for cai in range(len(ca)):#總音符
        now=nemu
        nemu=note[ca[cai]]
        for mui in range(10):
            if((now[mui]==0)&(nemu[mui]==1)):#跟上一個音符做比較
                sumu[mui]+=1
    print(sumu)                
        
inp()      

現在音符和下一個音符做比較。

解題思路

只要按鍵處理好,剩下的就解決了。
先寫資料處理程式,上篇有提到如何寫。
之後複製結果,貼上去以後,刪掉原本的程式。
可以不刪但是浪費時間和記憶體,考試有限制處理時間3秒內。
所以建議部分資料可以做預處理。


總結

鐵人賽剩二天,明天寫週反省跟月反省,最後一天寫鐵人賽心得。
感謝撥冗閱讀。


上一篇
[27/150]將資料做預處理10415 - Eb Alto Saxophone Player
下一篇
[29/150]第五週大冒險計畫
系列文
程式設計師大冒險115
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言