점은 무엇인가?


22

직교 평면 에서 점의 X 및 Y 좌표를 나타내는 두 개의 정수를 사용하는 프로그램 또는 함수를 작성하십시오 .

입력이만큼 X 값은 예를 들면, Y. 앞에 오는 임의의 적당한 형태로 올 수 있으며, 1 -2, (1,-2), [1, -2], 또는 1\n-2모든 괜찮을 것이다위한 X = 1, Y = -2.

평면에서 점의 위치를 ​​설명하는 단일 문자열 (선택적 후행 줄 바꿈)을 인쇄하거나 반환합니다.

  • 1지점이있는 경우 사분면 I
  • 2 점이 사분면 II 인 경우
  • 3 점이 사분면 III 인 경우
  • 4 점이 사분면 IV 인 경우
  • X점이 x 축에있는 경우 (소문자 x는 허용되지 않음)
  • Y점이 y 축에있는 경우 (소문자 y는 허용되지 않음)
  • O 점이 원점에있는 경우 (0이 아닌 대문자 "oh"임)

바이트 단위의 가장 짧은 코드가 이깁니다. Tiebreaker는 더 높은 투표 응답으로갑니다.

테스트 사례

(1,-2) -> 4
(30,56) -> 1
(-2,1) -> 2
(-89,-729) -> 3
(-89,0) -> X
(0,400) -> Y
(0,0) -> O
(0,1) -> Y
(0,-1) -> Y
(1,0) -> X
(-1,0) -> X
(1,1) -> 1
(1,-1) -> 4
(-1,1) -> 2
(-1,-1) -> 3

따라서이 도전의 목적으로 X와 Y 축은 사분면에 있지 않습니까?
Rɪᴋᴇʀ

@RikerW 맞습니다. 그렇지 않으면 점 (0, 9)는 사분면 I 또는 II라고 할 수 있습니다.
Calvin 's Hobbies

복소수 (또는 이와 같은 문자열 표현 "30+56i")가 유효한 입력 형식입니까?
레벨 리버 St

@steveverrill 예
캘빈의 취미

입력 값이 복소수 형식 일 수 있습니까? (예 1+2j)
디지털 외상

답변:


16

젤리, 14 바이트

Ṡḅ3ị“Y4X13X2YO

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

작동 원리

Ṡḅ3ị“Y4X13X2YO    Main link. Input: [x, y]

Ṡ                 Apply the sign function to both coordinates.
 ḅ3               Convert the resulting pair from base 3 to integer.
                  Because of how base conversion is implemented in Jelly, this maps
                  [a, b] to (3a + b), even if a and b aren't valid ternary digits.
                  Therefore:
                      [0, 1]   ->  1
                      [1, -1]  ->  2
                      [1, 0]   ->  3
                      [1, 1]   ->  4
                      [-1, -1] -> -4
                      [-1, 0]  -> -3
                      [-1, 1]  -> -2
                      [0, -1]  -> -1
                      [0, 0]   ->  0
   ị“Y4X13X2YO    Retrieve the character at that index from the string.
                Indexing is 1-based and modular in Jelly, so 1ị retrieves the
                first character, -1ị the penultimate, and 0ị the last.

6
전화 클럽 에서 젤리 가입 .
Dennis

3
Aaaaaand Jelly가 다시 한번 승리합니다 ...
ETHproductions

아주 좋은 접근법!
Luis Mendo 2016 년

11

루비, 35 바이트

->x,y{%w[OY X14 X23][x<=>0][y<=>0]}

"우주선"( <=>) 연산자 활용 .

x <=> 0 돌아올 것이다

  • 0 만약 x == 0
  • 1 만약 x > 0
  • -1 만약 x < 0

금후,

  • 만약에 x == 0, 우리는 돌려 보낸다 'OY'[y<=>0]. 이것은

    • Oif y == 0(문자열 색인 0)

    • Y경우 y != 0(이 둘 때문에 사실 1-1발생합니다 Y이 문자열에 때 색인뿐만 -1아니라 인덱스 1의 하나가 될 일어나는 문자열의 마지막 문자를 의미)

  • 만약에 x > 0, 우리는 돌려 보낸다 'X14'[y<=>0]. 이것은 Xif y == 0, 1if y > 04if입니다 y < 0(위 설명 참조).

  • 만약에 x < 0, 우리는 돌려 보낸다 'X23'[y<=>0].


6

자바 스크립트, 44 바이트

(x,y)=>x?y?x>0?y>0?1:4:y>0?2:3:'X':y?'Y':'O'


3
내 눈이 아프다. 그것은 긴 삼항 연산자 중 하나이다
andlrc

1
afaik의 익명 함수 작성 가능 ( s/^f=//)
andlrc

5

ES6, 43 바이트

(x,y)=>"OYYX32X41"[3*!!x+3*(x>0)+!!y+(y>0)]

모든 삼항보다 전체 바이트가 짧습니다!


3

apt, 30 22 바이트

"3Y2XOX4Y1"g4+3*Ug +Vg

설명을 추가하기 전에 @Dennis의 Jelly 답변에서 영감을 얻었습니다. 온라인으로 테스트하십시오!

재미있는 사실 : g문자열 함수 에서 음수에 대한 지원을 추가하면 2 바이트가 짧아집니다 .

젤리에 더 가까운 또 다른 시도 (23 바이트) :

"3Y2XOX4Y1"gNmg m+1 ¬n3

안타깝게도 목록을 증가시키는 데 4 바이트가 소요됩니다.


2

MATL , 22 바이트

'3X2YOY4X1'iZSQI1h*sQ)

이 사용하는 현재 릴리스 (10.2.1) 언어 / 컴파일러를.

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

설명

이것은 Dennis의 대답 에서 대단한 접근을 뻔뻔스럽게 차용합니다 .

'3X2YOY4X1'     % literal string. Will be indexed into to produce result
i               % input array of two numbers
ZS              % sign of each number in that array. Gives -1, 0 or 1
Q               % add 1 to produce 0, 1 or 2
I1h             % array [3 1]
*s              % multiply both arrays element-wise and compute sum
Q               % add 1. Gives a value from 1 to 9
)               % index into string. Display


1

파이썬 2, 75 바이트

lambda x,y,b=bool:[['OX','YO'][b(y)][b(x)],[[1,2],[4,3]][y<0][x<0]][b(x*y)]

꽤 직설적 인.


1

Mathematica 81 바이트

Switch[Sign@#,{1,-1},4,{1,1},1,{-1,1},2,{-1,-1},3,{0,0},"O",{_,0},"X",{0,_},"Y"]&

%/@{{1, -2}, {30, 56}, {-2, 1}, {-89, -729}, {-89, -0}, {0, 400}, {0, 0},{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}

{4, 1, 2, 3, "X", "Y", "O", "Y", "Y", "X", "X", 1, 4, 2, 3}


1

망막 , 52

이것은 간단한 대체 기반 방법입니다.

^0 0
O
^0.*
Y
.* 0
X
-.*-.*
3
^-.*
2
.*-.*
4
.* .*
1

온라인으로 사용해보십시오 . m`일부 줄의 시작 부분에있는 추가 는 한 번에 여러 입력을 테스트하는 데만 필요하므로 점수에 포함되지 않습니다.


이전에는 이보다 흥미로운 접근 방식을 시도했지만 m수정 시간이 거의없는 약 65 년이 더 길었습니다 .

[1-9]\d*
1
-1
2
(.) (.)
$1$*3$2$*1
3
111
m`^(.)*$
$#1
T`d`OYYX14X23
  • 0이 아닌 모든 숫자를로 대체하고 부호는 1그대로 둡니다.-
  • 대체 -12
  • 변환 1과와 단항 2 번호 31단항 숫자로 각각. 이것은 단항으로 표현 된 2 개의 base3 숫자를 효과적으로 제공합니다.
  • 으로 변환 3에의 111. 이것은 각 사분면, 축 및 원점에 해당하는 단일 단항 수를 효과적으로 제공합니다.
  • 단항을 십진수로 변환
  • 10 진수를 적절한 출력 문자로 바꿉니다.

1
입력에 선행 0이 없기 때문에 X무대가 필요 하다고 생각하지 않습니다 $.
Martin Ender

1
보다 흥미로운 방법은 40 바이트 이상 으로 단축 할 수 있습니다 . 이제 내일 좀 더 살펴 보겠습니다.
randomra


1

옥타브, 34 바이트

@(p)['3X2YOY4X1'](sign(p)*[3;1]+5)

벡터 곱셈 (1 기반 배열 인덱스를 설명하기 위해 5를 추가해야했지만)과 옥타브 인덱싱 마술을 사용하는 오래된 기본 3 트릭.

입력은 [1, -2](쉼표가 있거나없는) 형식의 벡터 이므로 변수에 할당 된 경우 w:

>> w([1 -2])
ans = 4

여기는 아이디어 입니다.


Ideone이 다시 작동하는 것 같습니다. 그것을 사용하기 위해 특별한 일을 했습니까?
Luis Mendo

@LuisMendo 익명 함수를 사용합니다. 명명 된 기능은 여전히 ​​나를 위해 지루합니다. :(
비커

아아, 네 말이 맞아 작동하지 않는 기능으로 명명되었습니다. 그래서 여전히 똑같습니다 :-/
Luis Mendo

1

피스, 24

너무 길지만 아마도 흥미로운 접근법 :

?Q?sQ?eQh%/yPQ.n04\X\Y\O

입력은 복소수로 지정해야합니다 (예 :) 1-2j. 기본적으로 테스트 할 중첩 된 삼항 :

  • 입력이 0 인 경우-출력 O
  • 실제 부분이 0이면 출력 Y
  • 허수 부가 0 인 경우-출력 X
  • 그렇지 않으면 복소수 위상을 계산하고, 2를 곱하고, 정수를 π로 나눈 다음 mod 및 더하여 적절한 사분면 수를 제공하십시오.

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


1

자바 8, 64 바이트

이것은에 대한 람다 식입니다 BiFunction<Integer,Integer,String>.

(x,y)->"OYYX14X23".charAt(3*(x>0?1:x<0?2:0)+(y>0?1:y<0?2:0))+"";

Character대신 3을 반환하여 3 바이트를 절약 할 수 는 String있지만 오토 박스가 람다와 잘 어울릴지는 확실하지 않습니다.


1
PCCG 핸디캡 시스템을 사용한이 답변 은 Dennis 's Jelly 답변 (1.5929)보다 점수 (1.5598)가 더 좋습니다.
Draco18s

꽤 흥미 롭습니다. 지적 해 주셔서 감사합니다
Jack Ammo

1
호기심 으로이 항목에 대한 몇 가지 항목의 값을 계산하십시오 (참고로 모든 점수는 1.5와 2 사이였습니다).
Draco18s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.