나는 수학이 없을 것이라고 들었다
코드 출현 2015 2일 차
1 부
오, 많은 수학이있을 것입니다.
기쁘게도 Advent of Code 전반에 걸친 수학의 대부분은 다양한 과학, 산술 또는 알고리즘 공식 및 증명의 기본 패턴을 기념하는 것이었습니다.
내 도구 상자에서 몇 가지 친숙한 도구 사용
reduce()
누계split()
문자열을 배열로 변환map()
데이터 강제 또는 조작array destructuring
여러 값을 간결하게 추출하고 저장sort()
숫자를 정렬하려면slice()
배열에서 항목의 하위 집합 추출자바스크립트 내 알고리즘:
input.reduce(
(sqft, box) => {
let [l, w, h] = box.split('x').map(Number)
let smallestArea = [l, w, h]
.sort((a, b) => a - b)
.slice(0, 2)
.reduce((a, c) => a * c)
return sqft += 2*l*w + 2*w*h + 2*h*l + smallestArea
}
, 0)
2 부
사소한 수학적 조정
자바스크립트 내 알고리즘:
input.reduce(
(sqft, box) => {
let [l, w, h] = box.split('x').map(Number)
let smallestPerimeter = [l, w, h]
.sort((a, b) => a - b)
.slice(0, 2)
.map(el => el * 2)
.reduce((a, c) => a + c)
return sqft += l*w*h + smallestPerimeter
}
, 0)
두 부분 모두 1년 전
이것은 내가 이 퍼즐을 처음 풀었을 때 JavaScript에서 작동하는 알고리즘이었습니다.
function dayTwoPart1(input) {
return input.map(box => wrappingPaperFor(box))
.reduce((acc, curr) => { return acc + curr }, 0)
}
function dayTwoPart2(input) {
return input.map(box => ribbonFor(box))
.reduce((acc, curr) => { return acc + curr }, 0)
}
function wrappingPaperFor(box) {
return surfaceAreaFor(box) + slackFor(box)
}
function surfaceAreaFor(box) {
let [l, w, h] = box.split("x").map(i => +i)
return (2 * l * w) + (2 * w * h) + (2 * h * l)
}
function slackFor(box) {
let sortedBox = box.split("x").map(i => +i).sort((a,b) => a - b)
return sortedBox[0] * sortedBox[1]
}
function ribbonFor(box) {
let [s1, s2, s3] = box.split("x").map(i => +i).sort((a,b) => a - b)
return (s1 + s1 + s2 + s2) + (s1 * s2 * s3)
}
해냈어!!
이 퍼즐의 수학은 그다지 흥미롭지 않았지만 놀랍도록 흥미로운 수학을 특징으로 하는 다른 모든 퍼즐에 대한 콜백 역할을 했습니다.
하루 남았습니다!
Reference
이 문제에 관하여(나는 수학이 없을 것이라고 들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/i-was-told-there-would-be-no-math-1f6k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)