2일 차: 수학은 없을 것이라고 들었습니다(2부).
8445 단어 goadventofcodetddchallenge
문제를 살펴보겠습니다.
--- Part 2 ---
The elves are also running low on ribbon. Ribbon is all the
same width, so they only have to worry about the length they
need to order, which they would again like to be exact.
The ribbon required to wrap a present is the shortest
distance around its sides, or the smallest perimeter of any
one face. Each present also requires a bow made out of ribbon
as well; the feet of ribbon required for the perfect bow is
equal to the cubic feet of volume of the present. Don't ask
how they tie the bow, though; they'll never tell.
For example:
A present with dimensions 2x3x4 requires 2+2+3+3 = 10 feet of
ribbon to wrap the present plus 2*3*4 = 24 feet of ribbon for
the bow, for a total of 34 feet.
A present with dimensions 1x1x10 requires 1+1+1+1 = 4 feet of
ribbon to wrap the present plus 1*1*10 = 10 feet of ribbon for
the bow, for a total of 14 feet.
How many total feet of ribbon should they order?
첫째 날과 마찬가지로 여기에서 이미 사용할 수 있는 많은 코드가 있습니다.
시작하려면 각 선물에 필요한 리본 길이를 계산할 수 있도록 새 테스트를 만들 것입니다.
func TestCalculateRibbonLength(t *testing.T) {
assert.Equal(t, 34, CalculateRibbonLength("2x3x4"))
assert.Equal(t, 14, CalculateRibbonLength("1x1x10"))
}
이전과 마찬가지로 예제를 사용하여 테스트 사례를 만들었습니다.
다음으로 위의 테스트를 통과하도록 코드를 작성해야 합니다.
func CalculateRibbonLength(str string) int {
s := strings.Split(str, "x")
var sides []int
for _, sideString := range s {
side, _ := strconv.Atoi(sideString)
sides = append(sides, side)
}
sort.Ints(sides)
return sides[0] + sides[0] + sides[1] + sides[1] + sides[0]*sides[1]*sides[2]
}
이제 챌린지의 첫 번째 부분에서 주요 기능을 수정하면 이제 다음을 수행합니다.
func main() {
input := LoadInput("./input.txt")
presents := MakePresentSlice(input)
total := 0
ribbon := 0
for _, present := range presents {
total += CalculatePresentArea(present)
ribbon += CalculateRibbonLength(present)
}
fmt.Println(total, "Feet of wrapping paper needed.")
fmt.Println(ribbon, "Feet of ribbon needed.")
}
위의 코드를 실행하면 리본 길이에 대한 출력은
3783758 Feet of ribbon needed
이고 이 답변을 Advent of Code에 입력하면 정답을 제공했다는 성공 메시지가 표시됩니다.That's the right answer! You are one gold star closer to powering the weather machine.
다음으로 Day 3: 파트 1을 살펴보는 대신 리팩토링을 위해 이 챌린지로 돌아올 것입니다.
현재 동일한 코드 블록을 반복하는 두 가지 기능이 있습니다.
...
s := strings.Split(str, "x")
var sides []int
for _, sideString := range s {
side, _ := strconv.Atoi(sideString)
sides = append(sides, side)
}
sort.Ints(sides)
...
이것을 자체 기능으로 추출하여 더 재사용할 수 있도록 하는 것이 좋을 것입니다.
다행히 우리는 테스트 기반 개발을 사용하고 있으므로 이 프로세스는 빠르고 고통스럽지 않아야 합니다.
Reference
이 문제에 관하여(2일 차: 수학은 없을 것이라고 들었습니다(2부).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/damiensedgwick/day-2-i-was-told-there-would-be-no-math-part-2-d83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)