穆罕默德·S·安瓦爾 (Mohammad S. Anwar) 每週都會發出“每週挑戰”,讓我們所有人都有機會為每週兩次的任務提出解決方案。我的解決方案先用Python編寫,然後轉換為Perl。這對我們所有人來說都是練習編碼的好方法。
挑戰,我的解決方案
您將獲得一個二進位字串陣列 @str 和兩個整數 $x 和 $y。
寫一個腳本傳回 @str 的最大子集的大小,使得子集中最多有 $x 0 和 $y 1。
如果 m 的所有元素也是 n 的元素,則集合 m 是 n 的子集。
我沒有將變數 x 和 y 命名為 max_zeros 和 max_ones,因為這樣比較有意義。對於命令列,我將最後兩個值作為 max_zeros 和 max_ones,其餘值放入 s 數組中。
對於這個任務,我有一個可變長度,從 s 中的項目數開始減少到 1。對於每個長度,我然後使用 itertool 的組合函數來計算長度項的所有唯一組合,並將其儲存在子集變數中。
對於每個子集,我將所有字串連接在一起,計算 0 和 1 的數量,並查看它們是否分別小於或等於 max_zeros 和 max_ones。如果是,我返回長度變數。如果沒有找到,我返回零。
def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int: for length in range(len(s), 0, -1): for subset in combinations(s, length): bits = ''.join(subset) if bits.count('0') <= max_zeros and bits.count('1') <= max_ones: return length return 0
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
給你一個整數數組,@ints。
寫一個腳本來找出最小正起始值,使得逐步總和永遠不會小於 1。
實際上,正整數列表的「最小正起始值」是 0.000...01。然而,第二個例子似乎暗示這個數字實際上是一個整數。
對於此任務,我從兩個變數開始,min_value 被設定為整數列表的第一個值,value 為零。然後,我迭代 ints 列表,並將該數字添加到 value 變數中。如果值小於 min_value,我會更新 min_value 變數。
如果 min_value 大於或等於 0,我回傳 1。如果不是,我返回 1 - min_value。
def step_by_step(ints: list) -> int: min_value = ints[0] value = 0 for i in ints: value += i if min_value > value: min_value = value if min_value >= 0: return 1 return 1 - min_value
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2 $ ./ch-2.py -3 2 -3 4 2 5 $ ./ch-2.py 1 2 1 $ ./ch-2.py 1 -2 -3 5
以上是零步、第一步的詳細內容。更多資訊請關注PHP中文網其他相關文章!