코드 2020의 출현: 2일차 Python 솔루션
이 도전에는 두 부분이 있습니다.
1 부
귀하의 항공편은 해안 공항에서 며칠 후에 출발합니다. 여기에서 해안으로 내려가는 가장 쉬운 방법은 터보건을 이용하는 것입니다.
북극 터보건 렌탈샵의 가게 주인은 힘든 하루를 보내고 있습니다. "컴퓨터에 문제가 있어 로그인할 수 없습니다!"봐주실 수 있냐고 물어보십니다.
그들의 비밀번호 데이터베이스가 약간 손상된 것 같습니다. 일부 비밀번호는 선택 당시 유효한 공식 Toboggan 기업 정책에 의해 허용되지 않았을 것입니다.
문제를 디버깅하기 위해 그들은 (손상된 데이터베이스에 따라) 암호 목록(귀하의 퍼즐 입력)과 해당 암호가 설정되었을 때 회사 정책을 만들었습니다.
예를 들어 다음 목록이 있다고 가정합니다.
1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc
각 행은 암호 정책을 제공한 다음 암호를 제공합니다. 암호 정책은 암호가 유효하기 위해 주어진 문자가 나타나야 하는 최소 및 최대 횟수를 나타냅니다. 예를 들어, 1-3 a는 비밀번호에 최소 1회, 최대 3회가 포함되어야 함을 의미합니다.
위의 예에서는 2개의 비밀번호가 유효합니다. 중간 암호인 cdefg는 그렇지 않습니다. 그것은 b의 인스턴스를 포함하지 않지만 최소한 1이 필요합니다. 첫 번째와 세 번째 비밀번호는 유효합니다. 하나의 a 또는 9개의 c가 모두 해당 정책의 한도 내에서 포함됩니다.
정책에 따라 유효한 비밀번호는 몇 개입니까?
이 부분에 대한 내 솔루션은 아래에 나와 있습니다. 나는 작은 코드 블록을 작성하는 것으로 시작했습니다. 그리고 주어진 예제 데이터로 내 코드를 테스트하고 제대로 작동하면 내 입력으로 테스트합니다.
data_dir = "Data/"
day2 = open(data_dir+"day2.txt").readlines()
day2 = [line.strip() for line in day2]
valid_password = []
for line in day2:
key, value = line.split(": ")
#print(line)
#print(key, value)
v1, v2 = key.split(" ")[0].split("-")
v = key.split(" ")[1]
if int(v1) <= value.count(v) <= int(v2):
valid_password.append(value)
# print(key, value, v1, v2, v)
len(valid_password)
2 부
암호를 올바르게 검증한 것으로 보이지만 공식 Toboggan 기업 인증 시스템에서 기대하는 것과 같지 않습니다.
가게 주인은 길 아래에 있는 썰매 대여소에서 예전 직장에서 비밀번호 정책 규칙을 우연히 설명했다는 사실을 갑자기 깨달았습니다! 공식 터보건 기업 정책은 실제로 약간 다르게 작동합니다.
각 정책은 실제로 암호의 두 위치를 설명합니다. 여기서 1은 첫 번째 문자를 의미하고 2는 두 번째 문자를 의미하는 식입니다. (조심하십시오. Toboggan 기업 정책에는 "인덱스 0"이라는 개념이 없습니다!) 이러한 직책 중 정확히 하나에 지정된 문자가 포함되어야 합니다. 편지의 다른 항목은 정책 시행의 목적과 관련이 없습니다.
위의 동일한 예제 목록이 제공됩니다.
1-3 a: abcde가 유효합니다. 위치 1에는 a가 포함되고 위치 3에는 포함되지 않습니다.
1-3 b: cdefg가 유효하지 않음: 위치 1과 위치 3 모두 b를 포함하지 않습니다.
2-9 c: ccccccccc가 유효하지 않습니다: 위치 2와 위치 9 모두에 c가 포함되어 있습니다.
정책의 새로운 해석에 따르면 몇 개의 암호가 유효합니까?
당신의 퍼즐 답은 616이었습니다.
이 퍼즐의 두 부분이 모두 완료되었습니다! 그들은 두 개의 금 별을 제공합니다: **
이 시점에서 Advent 달력으로 돌아가서 다른 퍼즐을 시도해야 합니다.
그래도 보고 싶다면 퍼즐 입력을 받을 수 있습니다.
이 챌린지에서 내 코드는 다음과 같습니다.
data_dir = "Data/"
day2 = open(data_dir+"day2.txt").readlines()
day2 = [line.strip() for line in day2]
valid_password = []
for line in day2:
key, value = line.split(': ')
vint = lambda x: [int(i) for i in x]
v1,v2 = key.split(' ')[0].split('-')
v1, v2 = vint([v1, v2])
v = key.split(' ')[1]
# print(v1, v2, v, value)
count = 0
if value[v1-1] == v:
count+=1
if value[v2-1] == v:
count+=1
if count == 1:
valid_password.append(value)
len(valid_password)
시도한 각 솔루션 후에 내 GitHub Repository를 업데이트하고 있습니다.
Reference
이 문제에 관하여(코드 2020의 출현: 2일차 Python 솔루션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/iamdurga/advent-of-code-2020-day-2-python-solution-5490
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
data_dir = "Data/"
day2 = open(data_dir+"day2.txt").readlines()
day2 = [line.strip() for line in day2]
valid_password = []
for line in day2:
key, value = line.split(": ")
#print(line)
#print(key, value)
v1, v2 = key.split(" ")[0].split("-")
v = key.split(" ")[1]
if int(v1) <= value.count(v) <= int(v2):
valid_password.append(value)
# print(key, value, v1, v2, v)
len(valid_password)
암호를 올바르게 검증한 것으로 보이지만 공식 Toboggan 기업 인증 시스템에서 기대하는 것과 같지 않습니다.
가게 주인은 길 아래에 있는 썰매 대여소에서 예전 직장에서 비밀번호 정책 규칙을 우연히 설명했다는 사실을 갑자기 깨달았습니다! 공식 터보건 기업 정책은 실제로 약간 다르게 작동합니다.
각 정책은 실제로 암호의 두 위치를 설명합니다. 여기서 1은 첫 번째 문자를 의미하고 2는 두 번째 문자를 의미하는 식입니다. (조심하십시오. Toboggan 기업 정책에는 "인덱스 0"이라는 개념이 없습니다!) 이러한 직책 중 정확히 하나에 지정된 문자가 포함되어야 합니다. 편지의 다른 항목은 정책 시행의 목적과 관련이 없습니다.
위의 동일한 예제 목록이 제공됩니다.
1-3 a: abcde가 유효합니다. 위치 1에는 a가 포함되고 위치 3에는 포함되지 않습니다.
1-3 b: cdefg가 유효하지 않음: 위치 1과 위치 3 모두 b를 포함하지 않습니다.
2-9 c: ccccccccc가 유효하지 않습니다: 위치 2와 위치 9 모두에 c가 포함되어 있습니다.
정책의 새로운 해석에 따르면 몇 개의 암호가 유효합니까?
당신의 퍼즐 답은 616이었습니다.
이 퍼즐의 두 부분이 모두 완료되었습니다! 그들은 두 개의 금 별을 제공합니다: **
이 시점에서 Advent 달력으로 돌아가서 다른 퍼즐을 시도해야 합니다.
그래도 보고 싶다면 퍼즐 입력을 받을 수 있습니다.
이 챌린지에서 내 코드는 다음과 같습니다.
data_dir = "Data/"
day2 = open(data_dir+"day2.txt").readlines()
day2 = [line.strip() for line in day2]
valid_password = []
for line in day2:
key, value = line.split(': ')
vint = lambda x: [int(i) for i in x]
v1,v2 = key.split(' ')[0].split('-')
v1, v2 = vint([v1, v2])
v = key.split(' ')[1]
# print(v1, v2, v, value)
count = 0
if value[v1-1] == v:
count+=1
if value[v2-1] == v:
count+=1
if count == 1:
valid_password.append(value)
len(valid_password)
시도한 각 솔루션 후에 내 GitHub Repository를 업데이트하고 있습니다.
Reference
이 문제에 관하여(코드 2020의 출현: 2일차 Python 솔루션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iamdurga/advent-of-code-2020-day-2-python-solution-5490텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)