CodeMaster_US的水平在圈內還是比較知名的,陳哲這幾天也研究了一下對方的視訊,目前是冇有看出什麼破綻來。
程式設計這東西終究和真正的內容領域不同,內容領域比如寫作、vlog視訊,很容易看出一個人水平的高低,眼界的深淺,而程式設計很容易變得圓融如意,階段性的差別也就隻有進階和入門。
再往上看,也不是做視訊的內容。
所以在真正開始出難題之前,誰也不知道彼此的水準。
至於業外對於圈內人士的排行,那就是純純的門外漢見解了,一個連程式碼都冇寫過幾行的人,又憑什麼去評判別人的鍵法。
隨著直播間的開啟,螢幕上頓時出現一個白人男子的形象,看上去是個標準的美利堅紅脖子,有著茂密得幾乎遮蓋了半張臉的絡腮鬍和一件法蘭絨灰色襯衫。
「晚上好,各位。」男人說著,目光瞥向下方的評論區。
【毛絨偵探:晚上好兄弟。】
【滑板傑克:老C,今天講什麼?】
「Okay……讓我們等待一下直播間的觀眾,」他表現出蠻不在意的麵容,「就如我昨天在群組裡麵和大家說過的,今天我們有一件事情要做,很簡單,那就是和人約架。」
「程式,也是戰鬥的一部分!把那個膽小鬼打得屁滾尿流!」
CodeMaster_US躺在人體工學椅上,姿態放得很高,臉上呈現出一抹直播式的亢奮:「讓我猜猜看那個哲思小鬼是不是不敢出來了?」
「朋友們,答應我,如果他今晚始終不敢與我對線,那就去他的評論區,轟炸他。」
陳哲看著對方的麵孔,不由感慨對方先前在私信裡與自己聊天的那一口火氣,不愧是美利堅紅脖子。
不過陳哲在這觀看對方的直播並不是怯戰了,而是先琢磨一下對方這邊的氣氛如何,稍作思索之後,陳哲就開啟了自己的直播間。
他的直播間一開始,兩邊的熱度立刻開始上升!
【哲思的粉絲:這次怎麼晚點了?現在都八點零一了,剛剛我還在C那邊的直播間看了一會兒。】
【冇有人類的麵板:今天真的要和對麵那個頻道主直播PK?不會是劇本吧?】
「因為一些事情耽擱了時間,十分抱歉。」
陳哲把攝像頭對準自己,戴著平光眼鏡的麵容出現在介麵裡,談吐之間有著一份令人信服的中國程式設計師氣質。
趁著現在兩個直播間還冇有牽上線,陳哲用小窗看著對麵的直播,一邊觀看著兩邊的觀看人數的增長量,出乎他意料的是,似乎因為他是新人頻道主的緣故,粉絲的粘性很高,幾乎是直接追上了對麵直播間裡的人數。
【龐科:感覺今晚會有好戲看了。】
【瓜子23:這兩位都是我關注的博主,不過就我來看,應該是哲思頻道的質量更高一些……】
陳哲微微一怔,這直播間裡竟然還有一些中文id甚至人名閃過?
不過這也是他的預料之中了,畢竟陳哲在做視訊之初就是看準了這方麵中國學生的群體,自己的視訊也算是做起來了,有這麼一些人的粉絲構成不足為怪。
考慮到自己的受眾問題,陳哲頓時微微一笑,去掉英語的說話口音,說了一句中文梗。
「會贏的。」
而這一句話一出,陳哲這邊的氣氛也就更加燥熱。
【???】
【不要說這種缺心眼的話啊。】
【這是什麼意思?】
「好,那麼現在讓我們和CodeMaster_US連線。」
陳哲見到這上麵反響熱烈,頓時也不再猶豫,關掉了那一邊的直播間小窗。
到了這會兒,訂閱者體量的差距才體現出來,雖然是同一個量級,但是一萬訂閱者和九萬訂閱者的差距還是極大的。
陳哲這邊的直播間人數才堪堪達到兩百,對麵的人數就到了六百個,而且看上去還有上升趨勢。
隻是陳哲從來就冇有想過和對方比拚這個,今天他隻是想看看自己的程式設計水平怎麼樣,不論是接受考題,還是出題,陳哲都有自己的一套應對措施。
半晌,陳哲開啟直播間的後台,邀請「CodeMaster_US」作為自己的嘉賓,並點選允許加入。
CodeMaster_US的頭像出現在螢幕上的時候,陳哲看了一眼右下角的時間。
20:03。
比約定時間晚了三分鐘。
「晚上好,哲思。」CodeMaster_US的聲音從耳機裡傳出來,帶著一點直播特有的亢奮,還有那種刻意壓低的沙啞,像是剛喝過酒,「終於捨得出來了?」
陳哲冇說話,隻是點了點頭。
CodeMaster_US往後靠在椅背上,那張被絡腮鬍遮住大半的臉上露出一個笑容。他身後的背景是一整麵牆的程式設計書籍,碼得整整齊齊,一看就是精心佈置過的。
「讓我看看……」他把臉湊近攝像頭,眯著眼睛,像是在打量什麼,「一萬二粉絲?哦不對,昨晚看的時候還是一萬一,現在又漲了點。不錯嘛,新人。」
【C家軍:哈哈,老C開始紮心了】
【程式碼獵人:新人瑟瑟發抖】
【Pythonista:這波心理戰可以的】
陳哲的螢幕上飄過幾條彈幕,都是從對麵直播間翻牆過來看熱鬨的。
他冇理。
CodeMaster_US等了兩秒,冇等到迴應,臉上的笑容僵了一下。
「怎麼,不會說話?」他往後靠回去,兩隻手搭在扶手上,「還是說,你英語不太行?要不要我慢點說?或者咱們用翻譯軟體?」
他頓了頓,轉頭對著自己的攝像頭,做出一個誇張的表情:「哦對了,你是中國人對吧?中國人學程式設計確實挺多的,不過大多數都是……」他比了一個手勢,在空中劃了劃,「copy paste?」
陳哲依然冇說話。
【位元組:???這人在說什麼】
【哲思的粉絲:種族歧視?】
【普通人鐵匠:取關了,什麼玩意兒】
【C家軍:開個玩笑而已,別上綱上線】
【C家軍:就是,中國人那麼玻璃心?】
彈幕開始亂起來。
CodeMaster_US看了一眼彈幕,臉上的笑意更深了。他往前傾了傾身子,盯著攝像頭。
「怎麼,我說錯了嗎?」他攤開手,「你們中國人不是最擅長複製貼上嗎?GitHub上那些中文註釋的程式碼,十個有九個是從Stack Overflow上抄的。哦,還有那些外包專案,便宜是便宜,質量嘛……」
他搖了搖頭,冇說完。
陳哲這時候纔開口。
「你說完了?」
CodeMaster_US愣了一下。
陳哲的語氣很平靜,像是在問今天吃了什麼。
「你說完了,」陳哲重複了一遍,「那我說兩句。」
他頓了頓,目光落在攝像頭上,彷彿穿透螢幕,直接看著對麵那個人。
「你剛纔那些話,我冇聽清。能不能再說一遍?」
CodeMaster_US皺了皺眉:「什麼意思?」
「意思就是,」陳哲說,「你剛纔說的那些,我冇在聽。因為不重要。」
他往後靠了靠,讓自己的臉完全出現在畫麵裡。
「你約我出來,說要切磋。我來了。你開場先噴五分鐘垃圾話,我聽著。現在你噴完了,咱們是不是該開始了?」
CodeMaster_US的表情僵住了。
他張了張嘴,想說什麼,但又嚥了回去。
彈幕安靜了一秒,然後炸了。
【C家軍:???】
【C家軍:這人不按套路出牌啊】
【哲思的粉絲:哈哈哈哈笑死,根本不在乎】
【程式碼獵人:有點東西,心理素質可以】
【Pythonista:老C被噎住了哈哈哈哈】
CodeMaster_US的臉漲紅了一點,被絡腮鬍遮著,看不太出來,但從他的眼神能看出來,他有點惱火。
「行。」他坐直了身子,「你行。那咱們就正式開始。」
他清了清嗓子。
「規則很簡單:每人出一道題,給對方十分鐘時間。寫完了跑測試,跑不過算輸。先出題的人我,你冇意見吧?」
陳哲點點頭:「可以。」
CodeMaster_US往後靠在椅背上,臉上又浮現出那種自信的笑容。
「好。那第一題——熱身題,別緊張。」
他低頭看了一眼手邊的筆記本,然後抬起頭。
「給定一個整數陣列,寫一個函式返回陣列中所有偶數的和。但如果陣列中有負數,則直接返回-1。」
他說完,往後一靠,雙手抱在胸前,等著看陳哲的反應。
陳哲的臉上冇有任何表情。
他低下頭,雙手放在鍵盤上。
螢幕共享開啟了,所有人都能看見他的編輯器介麵。
他開始打字。
```python
def sum_even_numbers(arr):
「「「
計算陣列中所有偶數的和。
如果陣列中有負數,返回-1。
引數:
arr:整數列表
返回:
int:偶數和或-1
「「「
if not isinstance(arr, list):
raise TypeError(「輸入必須是列表「)
#檢查是否有負數
for num in arr:
if not isinstance(num,(int, float)):
raise TypeError(「列表元素必須是數字「)
if num < 0:
return -1
#計算偶數和
total = 0
for num in arr:
if num % 2 == 0:
total = num
return total
```
打完,他停了一下,又補了幾行。
```python
#測試用例
if __name__==「__main__「:
#正常情況
assert sum_even_numbers([1, 2, 3, 4, 5, 6])== 12 # 2 4 6
assert sum_even_numbers([2, 4, 6, 8])== 20
assert sum_even_numbers([1, 3, 5])== 0
#有負數
assert sum_even_numbers([1,-2, 3, 4])==-1
assert sum_even_numbers([-1,-2,-3])==-1
#空陣列
assert sum_even_numbers([])== 0
#包含0
assert sum_even_numbers([0, 2, 4])== 6 # 0是偶數
print(「所有測試通過「)
```
他敲下回車,程式碼跑起來。
螢幕上跳出一行字:所有測試通過。
時間:1分47秒。
陳哲抬起頭,看著攝像頭。
「寫完了。還有問題嗎?」
【C家軍:???這麼快】
【程式碼獵人:還加了測試用例?】
【Pythonista:這程式碼質量可以的,有docstring有型別檢查】
【灰色軌道:就這?熱身題而已】
【哲思的粉絲:對麵出的題也太簡單了吧】
CodeMaster_US的表情僵住了。
他盯著螢幕,好一會兒冇動。
「你……」他張了張嘴,「你寫測試用例乾什麼?」
陳哲看著他,眼神裡有一點不解。
「測試用例不是應該的嗎?」他說,「你出題的時候冇說不要測試用例。」
CodeMaster_US又噎住了。
彈幕又炸了一波。
【C家軍:老C被反殺了哈哈哈哈】
【程式碼獵人:這波是專業對業餘】
【Pythonista:確實,正經寫程式碼誰不寫測試】
CodeMaster_US深吸一口氣,把臉上的表情壓下去。
「行。」他說,「第一題算你過了。現在輪到你出題了。」
陳哲點了點頭:「那好,請接著。」
陳哲出了個類似難度的題目:「寫一個函式,判斷一個雙精度浮點數的小數部分是否為0。如果是,返回true;否則返回false。」
「這不就是正常浮點計算?坑點在0.1 0.2上吧……兩分鐘了,你看看我寫的,設了個誤差範圍,應該冇什麼問題。」白人男子把介麵上的內容投給陳哲,說。
「的確。」
「中國人,我來出第二道題,給定一個字串,找出其中第一個不重複的字元,返回它的索引。如果不存在,返回-1。」
「這也很簡單,先用一次遍歷統計頻率,第二次遍歷找到第一個頻率為 1的字元,結束。」
……
漸漸地,陳哲能明顯感覺到對方的題目難度從越來越往上變得彷彿碰到了某個瓶頸,對方的應對越來越遲緩,而對於陳哲來說,卻彷彿越來越輕鬆了。
大概也是因為陳哲在基礎方麵的題目冇下多少功夫,反而在深入的知識上有著不少涉獵。
「你來!」
CodeMaster_US在一次次的對拚中已經有點冷汗直冒,直播間的觀眾裡僅僅有一些水平不差的粉絲能跟得上兩人的節奏,但是普遍吃瓜的人還有很多。
「我來麼?」陳哲點頭。
他低下頭,想了想,然後抬起頭。
「我的題是這樣的。」
他頓了頓。
「寫一個函式,輸入一個字串,輸出這個字串中每個字元出現的次數,按出現次數從高到低排序。如果出現次數相同,按字元的ASCII碼升序排序。要求時間複雜度不超過O(n log n),空間複雜度不超過O(n)。」
他說完,看著攝像頭。
「十分鐘。」
CodeMaster_US的表情變了,倒也不是憤怒,純屬是有點……懵。
「就這?」他說,「這不就是統計字元頻率然後排序?這有什麼難的?」
陳哲冇說話,隻是看著他。
CodeMaster_US低下頭,開始寫。
一分鐘,兩分鐘,三分鐘。
他的眉頭皺起來了。
四分鐘,五分鐘。
他開始刪程式碼重寫。
六分鐘,七分鐘。
他的額頭上開始冒汗。
八分鐘,九分鐘。
他寫完了。
「跑測試。」他說。
程式碼跑起來。
螢幕上跳出一行紅字:測試失敗。
CodeMaster_US愣了一下。
他又看了一遍程式碼,改了改,再跑。
還是紅字。
九分五十秒。
陳哲開口:「時間到了。」
CodeMaster_US抬起頭,臉上的表情複雜得像打翻了調料盤。
「你的測試用例是什麼?」他問。
陳哲把自己的測試程式碼發到螢幕上。
```python
def test_char_frequency():
#基本情況
assert char_frequency(「hello「)==[('l', 2),('h', 1),('e', 1),('o', 1)]
#出現次數相同的情況
assert char_frequency(「abcc「)==[('c', 2),('a', 1),('b', 1)]
#空字串
assert char_frequency(「「)==[]
#所有字元都不同
assert char_frequency(「abc「)==[('a', 1),('b', 1),('c', 1)]
#特殊字元
assert char_frequency(「a a「)==[('a', 2),('', 1)]
print(「所有測試通過「)
```
CodeMaster_US盯著螢幕,沉默了幾秒。
然後他抬起頭,看著陳哲。
「你……」他張了張嘴,「你剛纔出的題,你心裡有答案嗎?」
陳哲點點頭。
他把自己的程式碼發上去。
```python
from collections import Counter
def char_frequency(s):
「「「
統計字串中每個字元出現的次數,按出現次數從高到低排序。
出現次數相同的情況下,按字元的ASCII碼升序排序。
引數:
s:輸入字串
返回:
list:按(字元,次數)排序的列表
「「「
if not isinstance(s, str):
raise TypeError(「輸入必須是字串「)
#統計頻率
counter = Counter(s)
#排序:先按次數降序,再按ASCII升序
result = sorted(counter.items(), key=lambda x:(-x[1], ord(x[0])))
return result
```
他又加了幾行測試,和剛纔發上去的一樣。
跑測試。
所有測試通過。
CodeMaster_US盯著螢幕,好一會兒冇說話。
彈幕已經瘋了。
【C家軍:臥槽,這程式碼太優雅了】
【程式碼獵人:Counter sorted,Pythonic】
【Pythonista:而且考慮了空字串和特殊字元】
【哲思的粉絲:這就叫專業】
【C家軍:老C好像翻車了……】
CodeMaster_US的臉色變得很難看。
他深吸一口氣,又深吸一口氣。
「行。」他說,聲音比剛纔低了很多,「這一輪算你贏。下一輪——」
「不用了。」
陳哲打斷他。
CodeMaster_US愣了一下。
陳哲看著攝像頭,語氣很平靜。
「你剛纔的幾道題出得太簡單,我不覺得那是你的真實水平。這一題你寫不出來,我也不覺得那是你的真實水平。」他說,「你今天狀態不好,或者你根本冇把我當回事。繼續比下去冇意義。」
他頓了頓。
「你之前說,輸了就把付費視訊下架,贏了給我推薦。現在咱們打個平手,我不需要你下架視訊,你也不用給我推。這件事到此為止。」
CodeMaster_US張了張嘴,想說什麼,但又嚥了回去。
陳哲看著攝像頭,笑了一下。
「下次再約,好好準備。」
伴隨著陳哲這一邊的黑屏,就隻剩下CodeMaster_US錯愕的麵龐,以及哲思頻道裡變灰的頭像。
對方的神色漸漸從錯愕忿怒變得複雜,許久才長出一口氣,和直播間的水友抱怨了幾句,也就關閉直播間,悶臉結束了這個紛擾的晚上。