PTT推薦

Re: [爆卦] 小商人發文啦 (青青最新發文)

看板Gossiping標題Re: [爆卦] 小商人發文啦 (青青最新發文)作者
sxy67230
(charlesgg)
時間推噓 7 推:8 噓:1 →:1

※ 引述《sceleton (台科日乱写)》之銘言:
: ※ 引述《kawazakiz2 (輪蛇)》之銘言:
: 小商人也真壞,要碼也不碼的乾淨一點
: 某一張照片可以看到身分證後4碼
: https://shorturl.at/emuBR
: 再加上之前有鄉民PO的地籍謄本
: https://www.ptt.cc/Gossiping/M.1642598409.A.10F
: "假設"兩者是同一個人的身份證字號,那我們就已經得到了開頭字母,前三碼跟後四碼: (先說好,以上都是引用跟假設)
: 這讓我想到資工一個很基本的練習題,叫做身份證字號驗算
: (身分證最後一碼是檢查碼,公式是公開的)
: 我們用python來練習吧
: 其實只找兩個數字的話是有數學解的,不需要用暴力法跑到O(n2)
: 不過為了好理解python跟身份證字號公式,我們還是用暴力法來練習
: preId = "F230"
: postId = "2551"
: remainder = 10 - 1
: # F = 15
: # refer wiki for calculation rule
: sumOfKnownNum = 1 * 1 + 5 * 9 + 2 * 8 + 3 * 7 + 0 * 6 + 2 * 3 + 5 * 2 + 5 *
1
: i = 1
: for _4thNum in range(10):
: for _5thNum in range(10):
: sum = sumOfKnownNum + _4thNum * 5 + _5thNum * 4
: if sum % 10 == remainder:
: print(f"{i:2d}: {preId}{_4thNum}{_5thNum}{postId}, sum is {sum}"
)
: i += 1
: 然後就可以得到8組可能的結果
: 1: F230102551, sum is 109
: 2: F230152551, sum is 129
: 3: F230302551, sum is 119
: 4: F230352551, sum is 139
: 5: F230502551, sum is 129
: 6: F230552551, sum is 149
: 7: F230702551, sum is 139
: 8: F230752551, sum is 159
: 以上,python暖身結束,大家有興趣來學寫程式了嗎?

岔個題,如果是使用python的話,可以使用python各種內置組件像combination_with_replacement來快速排列組合,然後再使用numpy直接進行矩陣加和跟餘數計算,最後做filter即可。這樣速度可以快上很多喔!

公式解當然會快很多,但是推薦小朋友們可以善用python的library,小朋友學會了嗎?

☺ ☺

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.14.191 (臺灣)
PTT 網址

kawazakiz2 01/20 13:02我還以為青青又伸臉出來給人打

james049240 01/20 13:04我不是要看這個,不過還是知識推

okichan 01/20 13:05奇怪的知識增加了

loveyou9527 01/20 13:06好的

qwe854557 01/20 13:07只有我看不懂嗎

leoloveivy 01/20 13:08寫程式的時間心算就算完了還在那pytho

Marty 01/20 13:12優化CODE的時間比實際RUN的時間多...

hh800315 01/20 13:13講人話==

zamperla 01/20 13:14學到了

sceleton 01/20 13:14讚讚