☆解題須知☆
本題是「駭客題」,與一般的競賽解題不同,
解題者不必根據題目撰寫解題的程式碼,
題目本身會提供一個存在問題的程式碼,
解題者的目標是構造出一個合理的輸入,
使得該程式執行後會導致錯誤(WA 或 RE 等等)。
Alice 和 Bob 是正在學習
Python 的學生,他們在順利完成「
判斷數字」之後決定繼續挑戰 Snail 老師出的其它題目,其中一題是要求學生實作一個函數
isAscendingSequence(n)
,其輸入參數
n
為一個僅包含整數(
int
)的列表(
list
),該函數需要回傳一個布林值(
bool
)用以判斷整數列表
n
是否為「遞增數列」?若一個整數列表至少包含一個整數,且對於所有整數皆大於其前一項(如果存在的話)的整數,則我們稱該整數列表為「遞增數列」。
有鑑於上一次的經驗,Alice 和 Bob 這次決定先核對彼此所撰寫的函數是否會有相同的回傳值,他們將由 Alice 所完成的函數重新命名為 isAscendingSequenceAlice(n)
,而由 Bob 所完成的函數則是重新命名為 isAscendingSequenceBob(n)
,並且共同撰寫另一個函數 checkReturnValuesAreSame(n)
用以判斷對於輸入參數 n
來說兩者是否有相同的回傳值。
整體架構如下:
from typing import List
# Alice version
def isAscendingSequenceAlice(n: List[int]) -> bool:
if not n:
return False
for i in range(1, len(n)):
if n[i-1] >= n[i]:
return False
return True
# Bob version
def isAscendingSequenceBob(n: List[int]) -> bool:
return n and all(a < b for a, b in zip(n, n[1:]))
# Checks if two functions have the same return value
def checkReturnValuesAreSame(n: List[int]) -> bool:
return isAscendingSequenceAlice(n) == isAscendingSequenceBob(n)
在順利完成之後,Alice 和 Bob 卻發現了一個大問題,即使測試了許多不同的 n
兩人都有著相同的回傳值也並不代表兩人的所撰寫的函數皆是正確的,有可能是兩人尚未找到能使兩人的函數回傳值不同的 n
,也有可能是恰好兩人所犯的錯相同而回傳了相同的錯誤回傳值。
正當兩人苦惱之時,十分倒楣的你恰巧路過他們旁邊,你隨即被請來幫助他們,聰明的你馬上就判斷出其中一方的函數是正確而另一方是錯誤的。現在你需要做的是先告訴他們誰的函數是正確的,另外為了方便說明,你還需要準備一個整數列表,該整數列表作為 checkReturnValuesAreSame(n)
的輸入參數時會回傳 False
。
你能夠順利幫助 Alice 和 Bob 嗎?