Quadrants ที่ผ่านโดยเส้น


15

งาน

เมื่อพิจารณาถึงการแสดงของเส้นให้เอาท์พุทจำนวนควอดเรนท์ที่บรรทัดนั้นผ่าน

การเป็นตัวแทนที่ถูกต้องของสาย

คุณสามารถแสดงบรรทัดเป็น

  • สามลงนามจำนวนเต็มA, BและCที่แบ่งปันไม่มีปัจจัยร่วมกันและสถานที่AและBไม่ได้เป็นทั้งศูนย์ตัวแทนสายAx + By = C,
  • สี่ลงนามจำนวนเต็ม, , และคิดเป็นเส้นผ่านจุดและหรือX1Y1X2Y2(X1, Y1)(X2, Y2)
  • ชนิดข้อมูลที่อธิบายบรรทัดหากภาษาของคุณมีหนึ่ง (ต้องรองรับบรรทัดแนวตั้ง)

คุณไม่สามารถรับอินพุตในรูปแบบใด ๆ ที่ไม่อนุญาตให้มีเส้นแนวตั้ง (เช่นรูปแบบความชัน - จุดตัด) หากคุณเลือกที่จะใช้จำนวนเต็มเป็น input [-127, 128]คุณสามารถคิดว่าพวกเขาอยู่ในช่วงรวม

ข้อมูลจำเพาะ

  • ผลลัพธ์จะเป็น 0, 2, หรือ 3 เสมอ (เส้นไม่สามารถผ่านสี่ทิศทั้งสี่ได้และจะไม่สามารถผ่านได้เพียงเส้นเดียว)
  • เส้นบนแกนถูกพิจารณาว่าไม่ให้ผ่านจตุภาคใด ๆ เส้นที่ผ่านจุดกำเนิดนั้นจะพิจารณาให้ผ่านทางจตุภาค 2 เส้นเท่านั้น
  • คุณไม่จำเป็นต้องส่งคืน Quadrants ใดที่ถูกส่งผ่าน (แม้ว่ากรณีทดสอบจะรวมไว้เพื่อความชัดเจน)
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง (วัดเป็นไบต์) ชนะ

กรณีทดสอบ

คุณจะต้องแปลงเป็นรูปแบบที่เหมาะสมก่อนที่จะใช้

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

คำตอบ:


22

Python 3 , 24 ไบต์

lambda a:3<<a.count(0)&3

ลองออนไลน์!


3
... ว้าว. นี่มันเล็กน้อยกว่าที่ฉันคิด
แยกผลไม้

คุณอาจใช้สตริงแทนรายการถ้า I / O อนุญาต
Jonathan Frech

จะใช้'320'[a.count(0)]และส่งคืนค่าในรูปแบบสตริงได้หรือไม่
FlipTack

2
และว้าวดูเหมือนว่าคำตอบทั้งหมดจะเป็น "จาก Leaky's"
FlipTack

3
@FlipTack bithacks ชนะ: P
Nun

3

เยลลี่ 5 ไบต์

TL’ȧ$

ลองออนไลน์!

  • -1 ไบต์ขอบคุณ Challenger5
  • -1 ไบต์ขอบคุณ Leaky Nun
  • -2 ไบต์ต้องขอบคุณ H.PWiz

ไม่มีคำตอบจาก Leaky อีกต่อไปแล้ว!


ċ0ị2,0,3ประหยัด byte
Esolanging Fruit

@ Challenger5 อืมมันก็เป็นเช่นนั้น ขอบคุณ!
caird coinheringaahing


1
TL’ȧ$วิธีการเกี่ยวกับ ไม่ทราบว่าเป็นเยลลี่ดังนั้นนี่อาจเป็นสิ่งที่เล่นกอล์ฟได้
H.PWiz

@ H.PWiz ดีมาก! ฉันไม่คิดว่าสามารถเล่นกอล์ฟได้ แต่ฉันอาจผิด
caird coinheringaahing

3

Javascript (ES6), 30 24 22 ไบต์

นี่เป็นครั้งแรกที่ฉันพยายามเล่นกอล์ฟใน Javascript มีวิธีที่ดีกว่าในการนับเลขศูนย์ ...

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

-6 ไบต์ขอบคุณ Herman Lauenstein, 2 ไบต์ถึงการจดจำลำดับความสำคัญของโอเปอเรเตอร์

โซลูชัน 24- ไบต์สำรองเพื่อส่งคืนสตริงแทน:

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

1
จริง ๆ แล้วมันค่อนข้างฉลาด ...
เสาะหาผลไม้

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);
}

ฉันคิดว่าคุณสามารถใช้แทน{!!}% [{!!}/]
ผลไม้แยกแยะ

CJam {:!:!:+_1>*}การแปลของการส่งนี้คือ
ผลไม้แยกแยะ

@ Challenger5 ฮ่า ๆ ฉันไม่รู้ได้อย่างไร ยังพอร์ตที่ดีฉันต้องเรียนรู้วิธีการอ่านตอนนี้
Marcos

ความแตกต่างที่สำคัญในกรณีนี้คือ 1) การจดชวเลขสำหรับการแมป ( :!เทียบเท่า{!}%), 2) การจดชวเลขสำหรับการลด ( :+เท่ากับ{+}*), 3) ที่.เปลี่ยนเป็น_(เพราะ CJam มีโฟลต) และ 4) ที่ CJam ไม่มีอินพุต บนสแต็กโดยค่าเริ่มต้นหมายความว่าคุณล้อมโค้ดไว้{}เพื่อทำให้เป็นฟังก์ชัน
แยกผลไม้





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 ของฉันและคำตอบ Python ของ Leaky

มันทำงานอย่างไร

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.