파이썬에서 codingbat의 코딩 문제를 해결하고 있습니다. 우리는 목표 인치가 긴 벽돌의 행을 만들고 싶어주어진 작은 숫자와 큰 숫자, 원하는 번호 - 루프없이
: 같이 make_bricks 문제는 정의된다. 우리는 작은 벽돌 (각 1 인치)과 큰 벽돌 개 (각각 5 인치)의 숫자 을 가지고 있습니다. 의 경우 True를 반환합니다. 주어진 벽돌에서부터 까지 골을 넣을 수 있습니다. 이 은 외모보다 약간 더 밝고 어떤 루프도없이 할 수 있습니다.
make_bricks(3, 1, 8) → True make_bricks(3, 1, 9) → False make_bricks(3, 2, 10) → True
내가 생각 해낸 첫 번째 솔루션
했다 : 올바르지 만 수입이 허용되지 않기 때문에 판단 소프트웨어에 의해 거부되었다from itertools import permutations
def make_bricks(small, big, goal):
l = small*[1]+big*[5]
return any([(goal in i) for i in ([[sum(j) for j in set(permutations(l,i))] \
for i in range(2,len(l)+1)])])
. 그래서 나의 다음 솔루션이었다
또한 정확하지만make_bricks(1000000, 1000, 1000100)
같은 입력에 타임 아웃으로 숨 막혀
def make_bricks(small, big, goal):
bricks = small*[1]+big*[5]
for step in range(len(bricks)+1,1,-1):
for start in range(len(bricks)):
if len(bricks[start:start+step])==step:
if sum(bricks[start:start+step])==goal:
return True
return False
.
그래서 파이썬에서 루프를 사용하지 않고 가져 오기를 사용하지 않고 시간 제한에이 문제를 어떻게 해결할 수 있습니까?
직관 :'range (len (...)) '을 볼 때면 항상 당신이하는 일을하는 더 좋은 방법이 있습니다. – katrielalex
나는 'CodingBat'과 같은 프로그래밍 웹 사이트에 도움을주기로되어 있지 않다고 생각했습니다.'이것이 숙제 문제라면 어떨까요? 그리고 코드가 너무 복잡합니다. 나는 5 줄과 훨씬 짧은 코드로 이것을했다. – Dombey