합리적인 좌표가 오른쪽시 에르 핀 스키 삼각형에 있는지 확인


9

시어 핀 스키 삼각형은 하나의 삼각형에서 시작하여 반복 네 합동 삼각형으로 모든 삼각형 분할 및 중앙 삼각형을 분리하여 구성되는 평면상의 점의 집합이다. 오른쪽 시어 핀 스키 삼각형은 구석이있다 (0,0), (0,1)그리고 (1,0), 그리고 모양이 맘에 :

시 에르 핀 스키 삼각형

이 세트의 일부 동등한 정의는 다음과 같습니다.

  • n위에서 설명한 프로세스의 반복 지점 n.

  • 포인트 (x,y)0 <= x <= 1그리고 0 <= y <= 1모든 양의 정수에 대한되도록 n상기 n제 X의 이진 비트 팽창 및 Y는 둘 다 아니다 1.

  • 허락하다 T = {(0,0),(1,0),(0,1)}

    하자 f다음에 의해 정의 된 2D 점 세트의 함수가 될 :

    f(X) = {(0,0)} ∪ {(x+t)/2 | x∈X, t∈T}

    다음 오른쪽 시어 핀 스키 삼각형은 인 위상 고정상기 고정 점 의 (SET 봉쇄함으로써) f.

  • S광장 하자{(x,y) | 0<=x<=1 and 0<=y<=1}

    하자 g(X) = S ∩ {(x+t)/2 | x∈(X), t∈T}( T위에 정의 된대로)

    오른쪽 Sierpinski 삼각형은의 가장 큰 고정 점입니다 g.

도전

4 개의 정수를 받아들이고 오른쪽 Sierpinski 삼각형에 속하면 정확한 값을 제공하고 그렇지 않으면 a,b,c,d잘못된 값을 제공 하는 프로그램 또는 함수를 작성하십시오 (a/b,c/d).

채점

이것은 코드 골프입니다. 바이트 단위의 최단 코드가 이깁니다.

테스트 사례

다음은 오른쪽 Sierpinski 삼각형에 있습니다.

0 1 0 1
0 1 12345 123456
27 100 73 100
1 7 2 7
8 9 2 21
8 15 20 63
-1 -7 2 7

다음은 오른쪽 Sierpinski 삼각형에 없습니다 :

1 1 1 1
-1 100 1 3
1 3 1 3
1 23 1 7
4 63 3 66
58 217 4351 7577
-1 -7 3 7

-1 -3 1 1유효한 입력은?
xnor

예, 유효한 입력입니다. 이를 명확히하기 위해 테스트 사례를 추가했습니다.
cardboard_box

답변:


5

파이썬 2, 68

lambda n,d,N,D:1>=n/d>=0<=N/D<=1and(n<<abs(D*d))/d&(N<<abs(D*d))/D<1

개스킷 멤버쉽을 확인하는 좋은 방법은 못 생겼습니다. 입력이 음이 아니고 단위 제곱임을 보장하면 38이됩니다.

lambda n,d,N,D:(n<<D*d)/d&(N<<D*d)/D<1

아이디어는 이진 분수 확장이 비트 단위 0으로 0인지 확인하여 점이 개스킷 내에 있는지 여부를 확인하는 것 k입니다. 확장 의 첫 문자 를 얻으려면 분모로 k정수 나누기 전에 분자 비트를 비트 시프트합니다. . k반복을 잡을 수 있을만큼 충분히 커야합니다. 이진 확장 n/d에는 최대 기간이 d있으므로 공동 확장에는 최대 기간이 d*D있으므로 k=d*D충분합니다.

나머지는 분수가 상자에 있는지 확인하고 같은 입력에 대해 절연하는 것 -1/-3입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.