穆罕默德·S·安瓦爾 (Mohammad S. Anwar) 每週都會發出“每週挑戰”,讓我們所有人都有機會為兩週的任務提出解決方案。我的解決方案先用Python編寫,然後轉換為Perl。這對我們所有人來說都是練習編碼的好方法。
挑戰,我的解決方案
這是第三百次挑戰,讓我個人感謝穆罕默德代表普華永道團隊的每個人每週所做的所有工作。
給你一個正整數,$int。
編寫一個腳本來傳回您可以建立的精美排列的數量。
如果對於每個 i (1
對於此任務,我使用 itertool 模組中的排列函數來完成所有排列。
那麼只需確定該排列是否符合指定條件即可。如果沒有,我將轉向下一個排列。如果是,我會向 count 變數加一。
def beautiful_arrangement(n: list) -> str: count = 0 for p in permutations(range(1, n+1)): for i in range(n): if p[i] % (i+1) != 0 and (i+1) % p[i] != 0: break else: count += 1 return count
可能有一種更有效的方法來計算結果,而不涉及暴力。我的程式碼在處理較大的數字時會變得非常低效。我沒有花任何時間調查這個。
$ ./ch-1.py 1 1 $ ./ch-1.py 2 2 $ ./ch-1.py 10 700
給你一個整數數組,@ints 長度為 n,包含 [0, n - 1] 範圍內數字的排列。
寫一個腳本來建立一個集合,set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ...,遵循以下規則:
這相對簡單。我從一個名為longest_set 的變數開始,設定為0。然後迭代每個起始位置並將this_set 清單設定為集合的第一項(即ints[i])。我不斷添加到這個集合,而 ints[this_set[-1]] 沒有出現在 this_set 列表中。完成此操作後,我將 this_set 清單的長度與longest_set 值進行比較。如果它更大,我會更新longest_set值。
def nested_array(ints: list) -> int: longest_set = 0 for start in range(len(ints)): this_set = [ints[start]] while ints[this_set[-1]] not in this_set: this_set.append(ints[this_set[-1]]) if longest_set < len(this_set): longest_set = len(this_set) return longest_set
$ ./ch-2.py 5 4 0 3 1 6 2 4 $ ./ch-2.py 0 1 2 1 $ ./ch-2.py 1 2 0 4 5 2 5
以上是嵌套之美的詳細內容。更多資訊請關注PHP中文網其他相關文章!