상한선


15

직무

선을 표현하면 해당 선이 통과하는 사분면 수를 출력합니다 .

선의 유효한 표현

라인을 다음과 같이 나타낼 수 있습니다

  • 세 부호있는 정수는 A, BC공통 요소를 공유하지 어디에있는 AB라인을 나타내는 모두 0이된다 Ax + By = C,
  • 네 부호있는 정수 , , , 그리고 , 점을 통과하는 선을 표현 하고 , 또는X1Y1X2Y2(X1, Y1)(X2, Y2)
  • 언어에 줄이있는 경우 줄을 설명하는 데이터 유형 (수직 줄을 지원해야 함).

수직선을 허용하지 않는 형식 (예 : 경사 절편 형식)으로 입력 할 수 없습니다 . 정수를 입력으로 선택하면 포함 범위에 있다고 가정 할 수 있습니다 [-127, 128].

명세서

  • 출력은 항상 0, 2 또는 3입니다 (한 라인은 4 사분면 모두를 통과 할 수 없으며 단일 사분면을 통과 할 수도 없습니다).
  • 축의 선은 사분면을 통과하지 않는 것으로 간주됩니다. 원점을 통과하는 선은 2 사분면을 통과하는 것으로 간주됩니다.
  • 통과하는 사분면을 반환 할 필요는 없습니다 (테스트 사례에는 명확성을 기하기 위해 포함됩니다).
  • 이것은 이므로 가장 짧은 유효한 답변 (바이트 단위로 측정)이 이깁니다.

테스트 사례

사용하기 전에 이들을 적절한 형식으로 변환해야합니다.

1x + 1y = 1   ->  3  (quadrants I, II, and IV)
-2x + 3y = 1  ->  3  (quadrants I, II, and III)
2x + -3y = 0  ->  2  (quadrants III and I)
1x + 1y = 0   ->  2  (quadrants II and IV)
3x + 0y = 6   ->  2  (quadrants I and IV)
-3x + 0y = 5  ->  2  (quadrants II and III)
0x + -8y = 4  ->  2  (quadrants III and IV)
0x + 1y = 0   ->  0  (lies on the x-axis)
1x + 0y = 0   ->  0  (lies on the y-axis)

1
그들은 필요하다면 학교에서 Leaky Nun으로부터 빌린 전술을 가르쳐야합니다.
mbomb007

답변:



3

젤리 , 5 바이트

TL’ȧ$

온라인으로 사용해보십시오!

  • Challenger5 덕분에 -1 바이트
  • Leaky Nun 덕분에 -1 바이트
  • H.PWiz 덕분에 -2 바이트

더 이상 Leaky의 답변을 기반으로하지 않습니다!


ċ0ị2,0,3바이트를 절약
Esolanging 과일

@ Challenger5 허, 그렇습니다. 감사!
caird coinheringaahing


1
어때요 TL’ȧ$? 젤리를 모르므로 골프를 타기 쉬울 것입니다.
H.PWiz

@ H.PWiz 아주 좋은! 나는 골프를 칠 수 있다고 생각하지 않지만 잘못되었을 수 있습니다.
caird coinheringaahing

3

자바 스크립트 (ES6), 30 24 22 바이트

자바 스크립트로 골프를 치는 것은 처음입니다. 0을 계산하는 더 좋은 방법이 있어야합니다 ...

(a,b,c)=>3<<!a+!b+!c&3

Herman Lauenstein 덕분에 -6 바이트, 운영자 우선 순위 기억 -2 바이트

문자열을 반환하는 대체 24 바이트 솔루션 :

(a,b,c)=>"320"[!a+!b+!c]

1
그것은 실제로 상당히 영리합니다 ...
Esolanging Fruit

1
배열을 사용하지 않음으로써 24 바이트(a,b,c)=>3<<(!a+!b+!c)&3
Herman L

더 이상 배열을 사용하지 않기 위해 골프를 할 수없는 것 같습니다 ...
ericw31415



2

GolfScript , 16 14 바이트

~{!!}%{+}*.1>*

온라인으로 사용해보십시오!

  • @ Challenger5 -2 바이트

이 프로그램은 방정식의 계수를 나타내는 3 개의 정수 배열을 취합니다. Ax + By = C

입력 / 출력 예

[1 1 1]   -> 3
[-2 3 1]  -> 3

작동 원리

~                       - Eval string (input)
  {  }%                 - Map to array
   !!                   - Double not (equivalent to != 0)
        {+}*            - total array (fold addition)
            .           - Duplicate top of stack
             1>         - Greater than 1?
               *        - Multiply     

처음에는 이것을 계산하는 수학적 방법을 알아내는 것이 약간 까다로 웠습니다. 그러나 8 가지 가능한 구성 만 있습니다.a != 0 & b != 0 & c != 0

0 0 0 = 0
a 0 0 = 0
0 b 0 = 0
0 0 c = 0
a 0 c = 2
0 b c = 2
a b 0 = 2
a b c = 3

나는 결국 다음 기능에 왔습니다.

F(a,b,c) {
    var r = sign(a)+sign(b)+sign(c);
    if(r > 1)
        r;
    else
        return 0;
}

모든 것이 단일 수학 문제로 요약 될 수 있습니다.

F(a,b,c) {
    return (sign(a)+sign(b)+sign(c)) * (sign(a)+sign(b)+sign(c) > 1);
}

{!!}%대신 사용할 수 있다고 생각합니다 [{!!}/].
Esolanging 과일

이 제출물의 CJam 번역은입니다 {:!:!:+_1>*}.
Esolanging 과일

@ Challenger5 lol, 어떻게 알지 못했습니다. 또한 좋은 포트, 나는 지금 그것을 읽는 법을 배워야합니다.
Marcos

이 경우에 큰 차이가 매핑 1) 속기이다 ( :!동일하다 {!}%) (감소 2) 속기은 :+동일하다 {+}*, (3))) .로 변화가 _CJam가)) 수레를 가지며, 4 때문에 (CJam 입력이없는 것을 기본적으로 스택에서 코드를 래핑한다는 것을 의미합니다.{} 함수로 만듭니다.
Esolanging 과일


1

자바 스크립트, 25 바이트

_=>3<<!_[0]+!_[1]+!_[2]&3

Leaky Nun의 답변을 기반으로합니다.




1

ABCR , 30 바이트

입력은 A,B,C숫자가 아닌 -문자 로 쉼표를 대체 할 수있는 형식 입니다.

BBi7baxci7baxci7bax@7)A7(xxo

아직 온라인 통역사는 없지만 설명은 다음과 같습니다.

BB                                Add two values to the B queue. (Values are unimportant)
  i7 ax                           Read in a number.  If it's non-zero...
    b                             Dequeue one item from the B queue.
       c                          Read in the delimiter...
        i                         ... And promptly overwrite it with the next number.
         7baxci7bax               Repeat the whole "if 0, dequeue from B" for the
                                     other two input numbers.
                   @              Get the current length of the B queue. [2, 1, or 0]
                    7             If the length isn't 0...
                     )            ... Increment it to our required [3,2,0]
                      A           ... And enqueue it to A.
                                  (We don't need to add to A otherwise, because it defaults
                                    to 0 already if there's no value in it.
                                    I used that to exit the queue with 7_ax earlier.)
                       7(xx       Set the register to 0 to exit from loop.
                           o      Peek A and print as a number.


0

Deorst , 12 바이트

l0EN))A:k?Z+

온라인으로 사용해보십시오!

Leaky의 답변을 기반으로 함 ; 동일한 전제를 사용하지만 다른 매핑 방법을 사용합니다.

작동 원리

Deorst에는 카운트 발생이 내장되어 있지만 (어떤 이유로 든) 색인 명령이 없으므로 왼쪽 a.count(0)과 오른쪽이 원하는 결과 인 다음 매핑을 만들어야 했습니다.

0 -> 3
1 -> 2
2 -> 0

프로그램 자체는 다음과 같이 작동합니다 (예 : [1,1,1] ).

l0           - Push 0;     STACK = [[1 1 1] 0]
  EN         - Count;      STACK = [0]
    ))       - Subtract 2; STACK = [-2]
      A      - Absolute;   STACK = [2]
       :     - Duplicate;  STACK = [2 2]
        k?Z  - Positive?;  STACK = [2 1]
           + - Sum;        STACK = [3]

0

추가 ++ , 23 바이트

D,f,@@@,!$!@!s2$_|d0$>+

온라인으로 사용해보십시오!

둘 다 기반 내 Deorst 답변을 Leaky의 Python 답변

작동 원리

D,f,@@@,  - Create a triadic function. 
            Example arguments;   [1 1 1]
        ! - Logical NOT; STACK = [1 1 0]
        $ - Swap;        STACK = [1 0 1]
        ! - Logical NOT; STACK = [1 0 0]
        @ - Reverse;     STACK = [0 0 1]
        ! - Logical NOT; STACK = [0 0 0]
        s - Sum;         STACK = [0]
        2 - Push 2;      STACK = [0 2]
        $ - Swap;        STACK = [2 0]
        _ - Subtract;    STACK = [-2]
        | - Absolute;    STACK = [2]
        d - Duplicate;   STACK = [2 2]
        0 - Push 0;      STACK = [2 2 0]
        $ - Swap;        STACK = [2 0 2]
        > - Greater to;  STACK = [2 1]
        + - Sum;         STACK = [3]

그러나 필자는 기본 코드 본문이 아닌 Add ++에서 함수를 너무 많이 사용하고 있다고 생각합니다. 그래서 나는 두 함수와 코드 본문을 사용 하여이 작업을 시도했으며 훨씬 더 좋은 50 바이트 조각을 얻었습니다 (예, 가장 긴 대답입니다).

# Example input: 1 1 1;
# x and y are the accumulators

D,f,@@@,!$!@!s # Count the 0s
$f>?>?>?       # Call f with the input.
-2   # Subtract 2;    x: -2;  y: 0
^2   # Square;        x: 4;   y: 0
S    # Square root;   x: 2.0; y: 0
\1   # To integer;    x: 2;   y: 0
y:x  # Assign x to y; x: 2;   y: 2
}    # Switch to y;   x: 2;   y: 2
>0   # Is positive?;  x: 2;   y: 1
}    # Switch to x;   x: 2;   y: 1
+y   # Add y to x;    x: 3;   y: 1
O    # Print x

온라인으로 사용해보십시오!

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