코드 출현 2015 - 6일차
8929 단어 adventofcodepython
파트 1:
우리는 아마 모든 백만(!) 조명을 추적할 필요가 없기 때문에, 내가 켜는 각 조명의 좌표에 키가 지정된 사전을 튜플로 사용하기로 결정했습니다.
나는
'turn '
와 'turn on'
에서 'turn off'
를 제거할 수 있다고 결정했기 때문에 'on', 'off', 'toggle'의 세 가지 명령만 남았습니다. 지침을 구문 분석한 방법은 다음과 같습니다.#Parse an instruction from the input file
def parse_instruction(s):
words = s.replace('turn ', '').replace(',', ' ').split()
instruction, x1, y1, _, x2, y2 = words
return instruction, int(x1), int(x2), int(y1), int(y2)
저는 밑줄에 the를 할당하여 사용하지 않는 변수를 버리는 Python의 기능과 목록을 개별 변수로 바로 압축 해제하는 기능을 좋아합니다.
코드 본문은 다음과 같습니다. 꺼진 조명은 아직
lights{}
에 없거나 '0'으로 설정되어 있고, 물론 켜져 있는 조명은 '1'입니다. 데이터가 끝날 때까지 사전에 있는 항목의 값을 간단히 합산하여 얼마나 많은 조명이 켜져 있는지 확인할 수 있습니다.lights = {}
for line in data:
instruction, x1, x2, y1, y2 = parse_instruction(line)
for x in range(x1, x2 + 1):
for y in range(y1, y2+1):
key = (x, y)
if instruction == 'off':
lights[key] = 0
elif instruction == 'on':
lights[key] = 1
else: #toggle
if key in lights:
if lights[key] == 0:
lights[key] = 1
else:
lights[key] = 0
else:
lights[key] = 1
print(sum(lights.values()))
내가 본 것 중 가장 빠른 코드는 아닙니다. 하지만 작동하며 megathread의 여러 사람이 완료 시간을 초 단위로 보고했습니다.
파트 2는 여느 때와 마찬가지로 시나리오를 약간 조정합니다.
여기서 변경하는 모든 것은
off
및 toggle
에서 일어나는 일입니다. off
에서 가장 중요한 것은 음수에 빠지지 않도록 하는 것입니다. 그리고 toggle
는 단순히 두 배의 강도 on
입니다!if instruction == 'off':
if key in lights:
if lights[key] > 0:
lights[key] -= 1
else:
if instruction == 'on':
incr = 1
else: #toggle
incr = 2
if key in lights:
lights[key] += incr
else:
lights[key] = incr
나는 오늘 골프를 치는 것을 보지 못했고(어쨌든 파이썬에서는 아님) 내 코드는 가장 길지 않았습니다. 좋지는 않지만 7일차에 접어들면 Numpy를 배워야 할 Python 주제 목록에 추가할 것입니다. 그러나 다른 언어에는 매우 짧은 솔루션이 있습니다. this one's in K 언어인지도 몰랐던 !
e:{"SJJJJ"$'@[;0 2 4 8 10]$["turn"~*x;2;0]_x}'![-4]'0:`:/Users/geocar/e.txt
a:1000 1000#0;{p:x[1 2]+!:'1 1+x[3 4]-x[1 2];.[`a;p;o@*x]}'e;+//a
o:`off`on`toggle!(0 0;1 1;1 0)
그리고 아니, 나는 그것이 무엇을 의미하는지 전혀 모른다!
Reference
이 문제에 관하여(코드 출현 2015 - 6일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jules_lewis/advent-of-code-2015-day-6-i3e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)