這是我的代碼,我的輸出甚至看起來都不正確,我認為 0 和 1 沒有連接到變數。
#Day 3 Part 1
one_count = 0
zero_count = 0
gamma = ""
espilon = ""
with open('input3.txt') as f:
data = f.read()
nums = [str(num) for num in data.splitlines()]
nums = [list(i) for i in nums]
#print(nums)
for j in range(0, 12):
for i in range(len(nums)):
if "1" in nums[i][j]:
one_count = 1
elif "0" in nums[i][j]:
zero_count = 1
if zero_count > one_count:
gamma = "0"
espilon = "1"
zero_count = 0
one_count = 0
elif one_count > zero_count:
gamma = "1"
espilon = "0"
zero_count = 0
one_count = 0
print(gamma)
print(espilon)
輸出:
1
0
我不認為我可以添加 1,000 行 txt 檔案,但您可以自己訪問 code 2021 網站的出現并查看第 3 天第 1 部分的輸入。
代碼出現第 3 天
uj5u.com熱心網友回復:
問題是您需要為每個位位置(或每列)應用邏輯(計數零和一),而不是像您的代碼那樣只應用一次
最簡單的方法是迭代列,用于zip從行轉置,然后為每個找到最常見和最不常見的(一個與另一個相反)
puzzle = """00100\n11110\n10110\n10111\n10101\n01111\n00111\n11100\n10000\n11001\n00010\n01010"""
rows = puzzle.splitlines() # ['00100', '11110', '10110', ..
cols = list(zip(*rows)) # [('0', '1', '1', '1', '1', '0', '0', '1', '1', '1', '0', '0'), ...
gamma = "" # most common
epsilon = "" # least common
for col in cols:
if col.count('1') > col.count('0'): # most common is 1
gamma = '1'
epsilon = '0'
else: # most common is 0
gamma = '0'
epsilon = '1'
gamma = int(gamma, 2)
epsilon = int(epsilon, 2)
power = gamma * epsilon
print(f"{gamma=} {epsilon=} {power=}") # gamma=22 epsilon=9 power=198
也可以使用二進制數學
gamma = 0
epsilon = 0
l = len(cols)
for idx, col in enumerate(cols):
if col.count('1') > col.count('0'):
gamma = 2 ** (l - idx - 1)
else:
epsilon = 2 ** (l - idx - 1)
power = gamma * epsilon
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394642.html
