ประเด็นคืออะไร?


22

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในจำนวนเต็มสองจำนวนที่เป็นตัวแทนของ X และ Y พิกัดของจุดบนเครื่องบินคาร์ทีเซียน

การป้อนข้อมูลที่อาจจะมาในรูปแบบที่เหมาะสมใด ๆ ตราบใดที่ค่า X มาก่อนวายตัวอย่างเช่น1 -2, (1,-2), [1, -2]หรือ1\n-2ทั้งหมดจะดีสำหรับ X = 1, y = -2

พิมพ์หรือส่งคืนสตริงอักขระเดี่ยว (ตามด้วยบรรทัดใหม่ที่เป็นทางเลือก) ที่อธิบายตำแหน่งของจุดในระนาบ:

  • 1ถ้าประเด็นอยู่ในจตุภาค I
  • 2 ถ้าประเด็นอยู่ในจตุภาคที่สอง
  • 3 ถ้าประเด็นอยู่ในเสี้ยวของ III
  • 4 ถ้าประเด็นอยู่ใน Quadrant IV
  • Xถ้าจุดอยู่บนแกน x ( xไม่อนุญาตให้ใช้ตัวพิมพ์เล็ก)
  • Yถ้าจุดอยู่บนแกน y ( yไม่อนุญาตให้ใช้ตัวพิมพ์เล็ก)
  • O ถ้าจุดอยู่บนจุดเริ่มต้น (นั่นคือตัวพิมพ์ใหญ่ "โอ้" ไม่ใช่ศูนย์)

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ 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

จำนวนเชิงซ้อน (หรือการแสดงสตริงเหมือน"30+56i") เป็นรูปแบบอินพุตที่ถูกต้องหรือไม่?
เลเวลริเวอร์เซนต์


อินพุตสามารถอยู่ในรูปของจำนวนเชิงซ้อนได้หรือไม่? (เช่น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
เข้าร่วมJelly จากชมรมโทรศัพท์
Dennis

3
Aaaaaand Jelly ชนะอีกครั้ง ...
ผลิตภัณฑ์ ETH

วิธีการที่ดีมาก!
Luis Mendo

11

Ruby, 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)

    • Yif y != 0(นี่เป็นความจริงเพราะทั้งคู่1และ-1จะส่งผลให้Yเมื่อมีการสร้างดัชนีในสตริงนี้ตามที่-1อ้างถึงอักขระตัวสุดท้ายในสตริงซึ่งเกิดขึ้นเป็นหนึ่งในดัชนี 1)

  • ถ้าเรากลับมาx > 0 'X14'[y<=>0]นี่คือXถ้าy == 0, 1ถ้าy > 0และ4ถ้าy < 0(ดูคำอธิบายข้างต้น)

  • ถ้าเรากลับมาx < 0'X23'[y<=>0]


6

JavaScript ขนาด 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

Japt, 30 22 ไบต์

"3Y2XOX4Y1"g4+3*Ug +Vg

แรงบันดาลใจจาก @Dennis 'Jelly ตอบก่อนที่เขาจะเพิ่มคำอธิบาย ทดสอบออนไลน์!

สนุกจริง: นี่จะสั้นกว่าสองไบต์ถ้าฉันได้เพิ่มการรองรับสำหรับจำนวนลบในgฟังก์ชันสำหรับสตริง

ความพยายามอื่นใกล้กับเยลลี่หนึ่งครั้ง (23 ไบต์):

"3Y2XOX4Y1"gNmg m+1 ¬n3

น่าเศร้าที่การเพิ่มรายการมีค่าใช้จ่าย 4 ไบต์ ...


2

MATL , 22 ไบต์

'3X2YOY4X1'iZSQI1h*sQ)

สิ่งนี้ใช้รีลีสปัจจุบัน (10.2.1)ของภาษา / คอมไพเลอร์

ลองออนไลน์!

คำอธิบาย

นี้ลงคอยืมวิธีการที่ดีในการตอบของเดนนิส

'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

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`ช่วงเริ่มต้นของบางบรรทัดนั้นจำเป็นสำหรับการทดสอบอินพุตหลาย ๆ ตัวในครั้งเดียวเท่านั้นดังนั้นจึงไม่นับคะแนน


ก่อนหน้านี้ฉันลองวิธีที่น่าสนใจกว่านี้แต่มันค่อนข้างนานกว่าเล็กน้อย (ประมาณ 65 โดยไม่มีmตัวดัดแปลง):

[1-9]\d*
1
-1
2
(.) (.)
$1$*3$2$*1
3
111
m`^(.)*$
$#1
T`d`OYYX14X23
  • แทนตัวเลขที่ไม่เป็นศูนย์ทั้งหมดเพื่อให้1ออกจาก-สัญญาณในสถานที่
  • ทดแทน-1ด้วย2
  • แปลงตัวเลขที่ 1 และ 2 เป็นเลขทศนิยมด้วย3และ1ตามลำดับเป็นตัวเลขหลัก สิ่งนี้ให้ 2 ฐาน 3 หลักอย่างมีประสิทธิภาพ
  • แปลงที่จะ3 111สิ่งนี้ให้หมายเลขยูนารีเดียวที่สอดคล้องกับจตุภาคแกนและต้นกำเนิดแต่ละจุดได้อย่างมีประสิทธิภาพ
  • แปลงเอกเป็นทศนิยมหนึ่งหลัก
  • แปลงหลักทศนิยมให้เป็นตัวแปลงเอาต์พุตที่เหมาะสม

1
ฉันไม่คิดว่าXเวทีต้องการ$เพราะจะไม่มีเลขศูนย์นำหน้าในอินพุต
Martin Ender

1
วิธีการที่น่าสนใจอื่น ๆ สามารถลงไปอย่างน้อย 40 ไบต์ ตอนนี้ฉันจะดูอีกพรุ่งนี้
randomra

สำหรับการทำงานชุดคุณต้องปรับเปลี่ยนบางอย่าง
randomra

1

อ็อกเทฟ 34 ไบต์

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

กลเม็ดพื้นฐาน -3 เก่าผ่านการคูณเวกเตอร์ (แม้ว่าฉันต้องเพิ่ม 5 บัญชีสำหรับดัชนีอาร์เรย์ 1 ฐาน) บวกกับเวทมนตร์การจัดทำดัชนีบางส่วน

อินพุตเป็นเวกเตอร์ของฟอร์ม[1, -2](มีหรือไม่มีเครื่องหมายจุลภาค) ดังนั้นเมื่อกำหนดให้กับตัวแปรw:

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

นี่มันอยู่บนideone


Ideone ดูเหมือนว่าจะทำงานได้อีกครั้ง คุณทำอะไรเป็นพิเศษเพื่อใช้หรือไม่
Luis Mendo

@LuisMendo อันนี้ใช้ฟังก์ชั่นที่ไม่ระบุชื่อ ฟังก์ชั่นที่มีชื่อยังคงเป็น borked สำหรับฉัน :(
บีกเกอร์

ใช่คุณพูดถูก มันเป็นชื่อฟังก์ชั่นที่ไม่ทำงาน ยังคงเหมือนเดิม: - /
Luis Mendo

1

Pyth, 24

ยาวเกินไป แต่อาจเป็นวิธีที่น่าสนใจ:

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

1-2jการป้อนข้อมูลจะต้องระบุเป็นตัวเลขที่ซับซ้อนเช่น โดยทั่วไปแล้วประกอบไปด้วย ternary เพื่อทดสอบ:

  • ถ้าอินพุตเป็นศูนย์ - เอาต์พุต O
  • ถ้าส่วนจริงเป็นศูนย์ - เอาท์พุท Y
  • อื่นถ้าส่วนจินตภาพเป็นศูนย์ - ส่งออก X
  • มิฉะนั้นคำนวณเฟสที่ซับซ้อนคูณด้วย 2 หารด้วย integ จำนวนเต็มจากนั้นปรับเปลี่ยนและเพิ่มเพื่อให้จำนวน Quadrant ที่เหมาะสม

ลองออนไลน์


1

Java 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))+"";

3 ไบต์สามารถบันทึกได้ด้วยการคืนค่า a Characterแทนที่จะเป็น a Stringแต่ฉันไม่แน่ใจว่า autoboxing จะเล่นกับแลมบ์ดาได้หรือไม่


1
ยังไม่เรียบร้อยคำตอบนี้ใช้ระบบPCCG Handicap Systemดีกว่า (1.5598) มากกว่าคำตอบ Jelly ของ Dennis (1.5929)
Draco18s

มันค่อนข้างน่าสนใจ ขอบคุณสำหรับการชี้ให้เห็น
Jack Ammo

1
เรียกใช้ค่าสำหรับรายการสองสามรายการนี้ด้วยความอยากรู้ (คะแนนทั้งหมดอยู่ระหว่าง 1.5 ถึง 2 สำหรับการอ้างอิง)
Draco18s
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.