[checkio] Counting Tiles
11625 단어 JavaScript
이미지:
뭐랄까!처음에는 어떻게 풀어야 할지 몰라서 수학을 싫어하는 고등학교 생활을 저주했다.
그러나 아래의 계시는 하늘에서 떨어졌다
엔화를 네 부분으로 나누어 생각하다.
・왼쪽 위쪽의 원만 본다.
● 반지름과 슬라이스의 왼쪽 위 모서리와 오른쪽 아래 모서리의 중심 사이의 거리를 비교합니다. 전자는 트림일 때 전체 슬라이스이고 후자는 트림일 때 부분적으로 슬라이스를 포함합니다.
이렇게 하면 풀리고 무사히 살아날 수 있다.
자신의 대답
function countingTiles(radius){
//variables
let peT = 0;
let paT = 0;
let bigRad = Math.ceil(radius);
countTiles(bigRad, radius);
peT*=4;
paT*=4;
//counting up mates
function countTiles(a, b) {
for (let x=0; x<a; x++) {
for (let y=0; y<a; y++) {
if ((x==0&&b>=y)||(y==0&&b>=x)) {
if (b>=Math.sqrt((x+1)**2+(y+1)**2)) peT++;
else if (b>=x||b>=y) paT++;
}
else if (b>=Math.sqrt((x+1)**2+(y+1)**2)) peT++;
else if (b>=Math.sqrt(x**2+y**2)) paT++;
}
}
}
return [peT, paT]
}
상당히 간결하게 쓴 것 같다.3제곱의 정리는 적용되지 않으며 x축, y축 중 임의로 0의 도안을 분리한 곳은 약간 불필요하다.무슨 방법이 있습니까?
놀라운 성과
function countingTiles(radius) {
var d = (x, y) => Math.sqrt(x * x + y * y),
a = Math.ceil(radius), i = 0, x, y, f = 0, p = 0;
while (i < a * a)
d((x = i % a) + 1, (y = ~~(i++/a))+1) <= radius ? f++ : d(x, y) <= radius && p++
return [4 * f, 4 * p];
}
나는 그것이 어떻게 된 일인지 전혀 모른다.2-3 줄에 몇 개의 변수를 정의했다
d...두 매개변수에서 점 중심에서 떨어진 거리를 계산합니다.
a...반지름 값을 저장합니다.
i...몰라.계수기의
x...몰라.타일의 오른쪽 아래 위치 x 좌표
y...몰라.타일의 오른쪽 아래 위치 y 좌표
f...완전 한쪽 타일.
p...부분 타일.
5-6줄의while 블록은 90도의 원 속의 타일 같다
첫 번째 삼원 연산자의 첫 번째 표현식.
d((x = i % a) + 1, (y = ~~(i++/a))+1) <= radius ?
예, 예를 들면radius=1.6,a=2로 생각해보면첫 주...i=0
d(0+1, 0+1) <= 1.6 ?//왼쪽 위 위치가 [1,1]인 타일
다음 주...i=1
d(1+1, 0+1) <= 1.6 ?//왼쪽 위가 [2,1]인 타일
셋째 주...i=2
d(0+1, 1+1) <= 1.6 ?//왼쪽 위 위치가 [1,2]인 타일
넷째 주...i=3
d(1+1, 1+1) <= 1.6 ?//왼쪽 위 [2,2] 타일
그렇구나, 확실히 순서대로 온전한 타일을 하나하나 보았다
위의 공식이 정확하지 않으면 다음 공식을 수행합니다.
d(x, y) <= radius && p++
이것은 논리 연산자의 동작으로 보는 것이다!참조: JavaScript의 &&&&&|에 대한 오해가 큰 일 - Qita
오른쪽 아래 위치는 제1식의 x, y로 정의되어 있기 때문에 이를 대입
d()
하고 반경보다 짧은 상황에서 집행p++
한다.대단하다.
배우다
~~number
(참조: JavaScript를 사용하여 소수점을 정수로 변환하는 열광적인 방법 및 실행 속도-q-az)
예) Math.floor(-4.25)...-5
++a
와a++
의 차이참고: 전면 및 후면-ajaxtower,
참고:JavaScript(2) 전면 및 후면 연산자-천천히인일기
반성하다.
나는 압도적인 느낌을 느꼈다.
그런 다음 선행, 후행, 논리 연산자 등의 상세한 방법을 무시하지 말고 계속 공부해라.
Reference
이 문제에 관하여([checkio] Counting Tiles), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eiji03aero/items/a12dcdfb3bbcab46de5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)