เอาท์พุทสัญญาณ


67

รับตัวเลข N, ส่งสัญญาณสัญลักษณ์ของ N:

  • ถ้า N เป็นค่าบวกเอาต์พุต 1
  • ถ้า N เป็นลบเอาต์พุต -1
  • ถ้า N คือ 0 เอาต์พุต 0

N จะเป็นจำนวนเต็มภายในช่วงจำนวนเต็มที่สามารถแทนได้ในภาษาที่คุณเลือก


45
นี่เป็นความท้าทายเล็กน้อยที่มีวิธีแก้ปัญหาเล็กน้อยมากมาย อย่างไรก็ตามยังมีวิธีแก้ปัญหาที่ไม่สำคัญเช่นกัน วิธีการลงคะแนน: โปรดอ่านประโยคแรกของการโพสต์เมตานี้ก่อนที่จะ upvoting ฟังก์ชัน builtin
Stewie Griffin

8
นี่อาจใช้กระดานแต้มนำ
Martin Ender

2
@MrLister โหวตว่าคุณต้องการอะไร แต่จริงๆแล้วคุณควรมองหาความคิดสร้างสรรค์แทนความยาวรหัส
FlipTack

3
@FlipTack โอ้ฉันคิดว่ามันเป็น codegolf
นาย Lister

3
@MrLister นั่นเป็นเกณฑ์ในการชนะ แต่จริงๆแล้วมันใช้ความพยายามมากขึ้นในการพิมพ์sสำหรับเครื่องหมายที่มีอยู่ภายในหรือใช้ bithifting / maths ที่ชาญฉลาดในการคำนวณมันออกมา? ดูเมตาโพสต์นี้
FlipTack

คำตอบ:


46

เรติน่า 9 ไบต์

[1-9].*
1

ลองออนไลน์!

1แทนที่ไม่ใช่ศูนย์หลักและทุกอย่างหลังจากที่มันมี ใบนี้ที่มีศักยภาพนำ-เหมือนเดิมและการเปลี่ยนแปลงตัวเลขทั้งหมดยกเว้นตัวเองเพื่อค่าสัมบูรณ์01


มันฉลาดมาก :)
Mego

ใช้ได้กับสัญกรณ์วิทยาศาสตร์ของตัวเลขจำนวนเต็ม (เช่น0.42e2) หรือไม่
Egor Skriptunoff

@EgorSkriptunoff ไม่ แต่นั่นไม่ใช่ข้อกำหนด
Martin Ender

9
@EgorSkriptunoff มันไม่รองรับเลขโรมันเช่นกัน เว้นแต่ความท้าทายจะกล่าวถึงรูปแบบที่ไม่ได้มาตรฐานซึ่งจำเป็นต้องได้รับการสนับสนุนอย่างชัดเจนสมมติฐานทั่วไปคือการจัดการรูปแบบเดียวที่เป็นธรรมชาติในภาษาที่คุณเลือก
Martin Ender

3
@EgorSkriptunoff Retina ไม่มีแนวคิดของตัวเลขใด ๆ มันเป็นภาษาที่ใช้สตริง
Martin Ender

42

C (GCC), 24 23 22 18 ไบต์

ขอบคุณ @aross และ @Steadybox สำหรับการบันทึกไบต์!

f(n){n=!!n|n>>31;}

ไม่รับประกันว่าจะทำงานในระบบทั้งหมดหรือคอมไพเลอร์, ทำงานบนTIO


7
@betseg นั่นเป็นเพราะตัว upvotes บนบิวด์อินถูกดึงออกมาแล้ว
Erik the Outgolfer

4
ออมทรัพย์ 1 byte กับสิ่งนี้return n>>16|!!n;
aross

5
@GB ขนาดของ int อาจเป็น 2 (16, x86) หรือ 4 (32, x86_64) แต่จำไว้ว่าทั้งหมดที่จำเป็นคือสถาปัตยกรรมที่ใช้ได้ นี่ไม่ใช่ Stack Overlflow การพกพาไม่สำคัญ
แมว

2
f(n){n=n>>31|!!n;}ทำงานเกินไป แต่นี่เป็นเพียงคอมไพเลอร์ที่แปลกประหลาดไม่ใช่คุณสมบัติด้านภาษา
GB

2
@GB คอมไพเลอร์นิสัยใจคอมีผลใช้ได้อย่างสมบูรณ์แบบตราบใดที่มันสามารถพิสูจน์ได้ว่ามีคอมไพเลอร์ที่การเล่นโวหาร โชคดีที่gccมีมุมแหลม
Mego

34

Mathematica, 4 ไบต์

Clip

ถ้าหากไม่ใช้งานบิวท์อินSignและยังให้คะแนน 4 ไบท์ล่ะ? ;)

Clipมีคลิปเดียวอาร์กิวเมนต์ (หรือที่หนีบ) มูลค่าการป้อนข้อมูลระหว่างและ-1 เนื่องจากปัจจัยการผลิตจะเป็นจำนวนเต็มนี้เป็นเช่นเดียวกับการใช้1Sign


29

COW, 225 213 201 ไบต์

oomMOOmoOmoOmoOmoOMoOMoOmOomOomOoMoOMMMmoOMMMMOOMOomOo
mOoMOomoOmoOmoomOomOoMMMmoOmoOmoOMMMMOOOOOmoOMOoMOomOo
mOomOoMoOMMMmoOMMMMOOMOomOomOoMoOmoOmoOmoomoOmoomOomOo
mOomoomoOMOOmoOmoOmoOMOoMMMOOOmooMMMOOM

ลองออนไลน์!

วิธีการทำงานของรหัสนี้คือมันกำหนดเครื่องหมายโดยการสลับการเพิ่มและการลบจำนวนที่มากขึ้นและดูว่าอันไหนคืออันสุดท้ายที่ใช้งานได้ กำหนดจำนวนเต็มใด ๆ ที่ไม่เป็นศูนย์ให้ลบ 1 ก่อนจากนั้นบวก 2 แล้วลบ 3 ฯลฯ และในที่สุดคุณจะถึง 0 ติดตามสถานะของคุณโดยสลับการเพิ่มและลบ 2 เป็นค่าที่เริ่มต้นที่ 0 สำหรับ ตัวอย่าง:

-5  - 1  = -6  (current state: 0 + 2 = 2)
-6  + 2  = -4  (current state: 2 - 2 = 0)
-4  - 3  = -7  (current state: 0 + 2 = 2)
-7  + 4  = -3  (current state: 2 - 2 = 0)
-3  - 5  = -8  (current state: 0 + 2 = 2)
-8  + 6  = -2  (current state: 2 - 2 = 0)
-2  - 7  = -9  (current state: 0 + 2 = 2)
-9  + 8  = -1  (current state: 2 - 2 = 0)
-1  - 9  = -10 (current state: 0 + 2 = 2)
-10 + 10 =  0  (current state: 2 - 2 = 0)
value is now at 0.  state - 1 = 0 - 1 = -1
sign of original number is -1

เมื่อเสร็จแล้วให้ลบ 1 จากสถานะของคุณและคุณจะได้รับเครื่องหมายบวกหรือลบ หากหมายเลขดั้งเดิมเป็น 0 คุณไม่ต้องกังวลกับการทำสิ่งนี้และเพียงแค่พิมพ์ 0

คำอธิบายโดยละเอียด:

oom                                        ;Read an integer into [0]
MOO                                        ;Loop while [0] is non-empty
    moOmoOmoOmoOMoOMoOmOomOomOo            ;    Decrement [4] twice
    MoOMMMmoOMMM                           ;    Increment [1], then copy [1] to [2]
    MOO                                    ;    Loop while [2] is non-empty
        MOomOomOoMOomoOmoO                 ;        Decrement [0] and [2]
    moo                                    ;    End loop now that [2] is empty
    mOomOoMMMmoOmoOmoOMMM                  ;    Navigate to [0], and copy to [3]
    MOO                                    ;    Perform the next steps only if [3] is non-zero
        OOOmoOMOoMOomOomOomOoMoOMMMmoOMMM  ;        Clear [3], increment [4] twice, increment [1], and copy it to [2]
        MOO                                ;        Loop while [2] is non-empty
            MOomOomOoMoOmoOmoO             ;            Decrement [2] and increment [0]
        moo                                ;        End loop now that [2] is empty
    moO                                    ;        Navigate back to [3]
    moo                                    ;    End the condition
    mOomOomOo                              ;    Navigate back to [0]
moo                                        ;End loop once [0] is empty.
moO                                        ;Navigate to [1]. If [1] is 0, then input was 0.  Otherwise, [4] contains (sign of [0] + 1)
MOO                                        ;Perform the next steps only if [1] is non-zero
    moOmoOmoOMOoMMMOOO                     ;    Navigate to [4], copy it to the register, and clear [4].
moo                                        ;End condition
MMMOOM                                     ;If the register contains something (which is true iff the condition ran), paste it and print it.  Otherwise, no-op and print 0.

ฉันยังคงทดลองเล่นกอล์ฟอยู่ (คุณจะตกใจเมื่อพบว่าการเล่นกอล์ฟใน COW ค่อนข้างยาก) ดังนั้นนี่อาจลดลงสักสองสามไบต์ในอนาคต


1
และมี 'moo' - ภาษาอยู่หรือไม่ ...
Mukul Kumar

1
@MukulKumar มันเป็นอนุพันธ์สมองที่เรียกว่า COW ที่ช่วยให้คู่ของสิ่งที่ BF ไม่ได้
Gabriel Benamy

ยังสามารถเรียกภาษานี้ว่า "นักเวทย์ที่ไม่ดี" OUT OF MANA!!!
Magic Octopus Urn

18

Cubix , 10 ไบต์

(W0^I?>O2@

ทดสอบออนไลน์!

รหัสนี้ถูกห่อไปที่คิวบ์สุทธิต่อไปนี้:

    ( W
    0 ^
I ? > O 2 @ . .
. . . . . . . .
    . .
    . .

รหัสจะถูกเรียกใช้ด้วย IP (ตัวชี้คำสั่ง) เริ่มต้นที่Iหันหน้าไปทางทิศตะวันออก Iอินพุตจำนวนเต็มที่มีลายเซ็นจาก STDIN กดลงบนสแต็ก

คำสั่งถัดไปคือ?ซึ่งเปลี่ยนทิศทางของ IP ขึ้นอยู่กับเครื่องหมายของรายการบนสุด หากอินพุตเป็น 0 มันจะยังคงเคลื่อนไหวในทิศทางเดียวกันโดยใช้รหัสต่อไปนี้:

  • >- ชี้ IP ไปทางทิศตะวันออก (ไม่เลือกเนื่องจากเราไปทางตะวันออกแล้ว)
  • O - เอาท์พุทรายการด้านบนเป็นจำนวนเต็ม
  • 2- กด 2 ไปที่สแต็ก นี่เป็นสิ่งที่ไม่ต้องเลือกเพราะ ...
  • @ - ยุติโปรแกรม

ถ้าใส่เป็นลบ IP เลี้ยวซ้ายที่?; เนื่องจากนี่คือคิวบ์ IP จะย้ายไป0ที่แถวที่สองมุ่งหน้าไปทางทิศตะวันออก 0ผลัก 0 ตัวอักษรจากนั้นรหัสนี้จะทำงาน:

  • ^ - ชี้ IP ทิศเหนือ
  • W - "Sidestep" IP หนึ่งจุดทางด้านซ้าย
  • ( - ลดรายการด้านบน

เงื่อนไขการบริการอยู่ในขณะนี้-1และ IP ล้อมรอบก้อนผ่านพวงของไม่มี Ops จนฮิต. นี้ทำงานรหัสการส่งออกเหมือนกันดังกล่าวข้างต้นแสดงผล>-1

หากอินพุตเป็นบวกสิ่งเดียวกันจะเกิดขึ้นเช่นเดียวกับอินพุตลบโดยมีหนึ่งข้อยกเว้น: IP จะเลี้ยวขวาแทนที่จะเป็นซ้าย?และล้อมรอบลูกบาศก์ไปที่2ซึ่งจะผลักดันตัวอักษร 2 นี่จะลดลงเป็น 1 และ ส่งไปยังเอาท์พุท


4
แอนิเมชั่นของผังรายการนั้นดีมาก!
Luis Mendo

ภาษาที่ดี มันจะสั้นกว่านี้ไหม? 4 การควบคุมการไหลดูเหมือนมาก ในการนับการดำเนินการสามารถเป็น 8 ไบต์ได้โดยการแนะนำตัวอื่น แต่ตอนนี้มันใช้ครึ่งล่างของคิวบ์: ..1nI? .. >> O @ ......... ?
BlackShift

หกเป็นไปได้ถ้าเราไม่สนใจผลลัพธ์หลังจากครั้งแรก: / I? nO1 โดยวิธีการนี้จะใช้งานได้เพราะฉันส่งกลับ -1 ในล่ามออนไลน์แทน 0 ตามข้อมูลจำเพาะ
BlackShift

@ BlackShift ขอบคุณสำหรับความสนใจของคุณ! ฉันชอบคำแนะนำของคุณ แต่ฉันไม่แน่ใจว่าจะปรับปรุงอย่างไร เป็นไปได้แน่นอนที่จะใช้คำแนะนำน้อยกว่า ส่วนที่ยุ่งยากใช้ลูกบาศก์น้อยกว่า ... ;-) และขอบคุณที่ชี้ให้เห็นว่า -1 ข้อบกพร่องฉันจะได้รับการแก้ไขในไม่ช้า
ETHproductions

@ETHproductions IMO มันไม่ได้เป็นข้อผิดพลาดก็จะทำให้ความรู้สึกIที่จะกลับ -1 เมื่อป้อนข้อมูลปิดให้บริการเช่นเดียวกับพิมพ์เล็กiไม่
FlipTack

16

JavaScript (ES6), 9 ไบต์

Math.sign

ซื่อตรง

ที่ไม่ใช่บิวด์อินที่สั้นที่สุดคือ 13 ไบต์:

n=>n>0|-(n<0)

ขอบคุณ @Neil สิ่งนี้สามารถเล่นได้โดยไบต์ แต่มีค่าใช้จ่ายสำหรับการทำงานกับจำนวนเต็ม 32 บิตเท่านั้น:

n=>n>0|n>>31

หรือคุณสามารถทำได้

n=>n>0?1:!n-1

ซึ่งดูเหมือนว่าจะเล่นกอล์ฟได้มากกว่านี้ แต่ฉันไม่แน่ใจ


2
Non-builtin ใน 12 ไบต์สำหรับ 32-bit ลงนามจำนวนเต็ม:n n=>n>>31|!!n
Neil

@ Neil n>>31ฉลาดจริงๆขอบคุณ!
ETHproductions

ฉันไม่คิดว่าโซลูชันที่สามนั้นถูกต้องเนื่องจาก Javascript ใช้ความแม่นยำสองหลักสำหรับตัวเลข แต่ฉันอาจจะผิด
Mego

@Mego คุณถูกต้อง ฉันได้ชี้แจงเรื่องนี้ในโพสต์
ETHproductions

1
@Mego ขออภัยฉันพลาดความคิดเห็นของคุณ เมื่อใช้โอเปอเรเตอร์ bitwise JS จะแปลงค่าตัวถูกดำเนินการเป็นจำนวนเต็มแบบ 32 บิตดังนั้นวิธีที่สามใช้งานได้ แต่ใช้กับตัวเลขจาก -2147483648 ถึง 2147483647
ETHproductions

15

APL (Dyalog APL) , 1 ไบต์

การทำงานสำหรับตัวเลขที่ซับซ้อนเกินไปกลับ1∠ θ :

×

ลองใช้ออนไลน์!


หากไม่มีตัวในนั้นสำหรับจำนวนเต็ม (ตาม OP):

¯11⌊⊢

¯1⌈ ที่ใหญ่ที่สุดของเชิงลบหนึ่งและ

1⌊ ที่เล็กที่สุดของหนึ่งและ

อาร์กิวเมนต์

ลองใช้ออนไลน์!

... และบุคคลทั่วไป:

>∘0-<∘0

>∘0 มากขึ้นกว่าที่เป็นศูนย์

- ลบ

<∘0 น้อยกว่าศูนย์

ลองใช้ออนไลน์!


1
คุณทำได้จริงในหนึ่งไบต์ ... คุณเป็นตำนาน ฉันแน่ใจว่า Jon Skeet จะภูมิใจ

@Mango คุณพูดเล่นใช่ไหม? มีคำตอบแบบไบต์เดียวจำนวนหนึ่งสำหรับความท้าทายนี้
อดัม

1
ฉันกำลังเหน็บแนมฉันก็บอกว่าเพราะนี่เป็นคำตอบเดียวที่ฉันเห็น

14

> <> , 9 8 ไบต์

ขอบคุณ Sp3000 สำหรับการบันทึกไบต์

'i$-%n/

มีการ unprintable ก่อน0x01/

ลองออนไลน์!

คำอธิบาย

นี้เป็นท่าเรือของฉันรหัสตามตัวอักษรคำตอบเขาวงกต

'     Push the entire program (except ' itself) onto the stack, which ends 
      with [... 1 47].
i     Read the first character of the input.
$-    Subtract the 47.
%     Take the 1 modulo this value.
n     Output the result as an integer.
0x01  Unknown command, terminates the program.

ผมคิดว่าคุณก็สามารถใช้กฎหมาย;แทน unprintable ที่0x01จะยกเลิกโปรแกรมอย่างถูกต้อง :)
เอริก Outgolfer

@EriktheOutgolfer ฉันต้องการ0x01กดอีก1ครั้ง
Martin Ender

2
โอ้ดูเหมือนว่าฉันจะทดสอบข้อเสนอแนะของฉันด้วย123เท่านั้น บทเรียนได้เรียนรู้: ทดสอบกับกรณีเพิ่มเติม
Erik the Outgolfer

14

เป็นกลุ่ม 22 ไบต์

xVp:s/-/-1^M:s/[1-9]/1^M

บันทึกหนึ่งไบต์ต้องขอบคุณ@DJMcMayhem !

นี่^Mคือบรรทัดใหม่ตามตัวอักษร

ในฐานะที่เป็น@ nmjcman101ชี้ให้เห็นในความคิดเห็นที่ regex เดียวสามารถใช้ ( :s/\v(-)=[^0].*/\11^M, 20 bytes) แทน แต่เนื่องจากนี่เป็นพื้นเดียวกันกับคำตอบ Retina จะเป็นฉันติดกับวิธีการของตัวเอง

คำอธิบาย:

xVp                        Delete everything except the first character. If the number is negative, this leaves a -, a positive leaves any number between 1 and 9, and 0 leaves 0.
   :s/-/-1^M               Replace a - with a -1
            :s/[1-9]/1^M   Replace any number between 1 and 9 with 1.

นี่คือ gif ของมันที่ทำงานด้วยตัวเลขติดลบ (เวอร์ชั่นเก่า):

Running with negative

นี่มันทำงานด้วย 0:

Running with zero

ทำงานด้วยค่าบวก:

Running with positive


1
ผมชอบวิธีการของคุณ แต่มันก็เป็นไปได้ใน regex เดียว::s/\v(-)=[^0].*/\11
nmjcman101

Dithered console GIFs ... ??
Desty

12

///, 52 36 ไบต์

/a/\/1\/\///2a3a4a5a6a7a8a9a10a11/1/

คำอธิบายไม่ดี

/2/1/
/3/1/
/4/1/
/5/1/
/6/1/
/7/1/
/8/1/
/9/1/
/10/1/
/11/1/

โดยพื้นฐานแล้วมันเป็นเครื่องมือ MapReduce นั่นคือมีสองขั้นตอน:

  • แทนที่เกิดขึ้นทั้งหมดของตัวเลข2- 9โดย1เช่น1230405->1110101
  • ลดคู่11หรือ10เพื่อ1ซ้ำ ๆ เช่น1110101->1

ถ้ามีในหน้าแรกก็จะยังคงอยู่และการส่งออกจะได้รับ- -1เดียว0ไม่เคยถูกแทนที่ดังนั้นจึงเกิดขึ้นในตัวเอง

อัปเดต:บันทึกเพิ่มเติม 16 ไบต์ด้วยนามแฝง//1/ด้วยaMartin Ender

ลองออนไลน์กับกรณีทดสอบ


2
นี่มันฉลาดมาก!
Mego

11

Python 2 , 17 ไบต์

lambda n:cmp(n,0)

ลองออนไลน์!


5
โอ้คุณนินจาฉัน
Jonathan Allan

1
อ๊ะ ขออภัย ...
Dennis

5
น่าเสียดายที่คุณทำไม่ได้(0).__rcmp__...
Sp3000

1
คุณสามารถทำได้-(0).__cmp__แม้ว่า
nyuszika7h

1
@ nyuszika7h ไม่มาก พยายามที่จะใช้มันเป็นฟังก์ชั่นยกTypeError
เดนนิส

11

เขาวงกต 10 ไบต์

?:+:)%:(%!

ลองออนไลน์!

คำอธิบาย

ความหมายของโฟลว์ควบคุมของเขาวงกตให้วิธี "อิสระ" แก่คุณในการกำหนดเครื่องหมายของตัวเลขเพราะเส้นทางที่เลือกที่ทางแยก 3 ทางขึ้นอยู่กับว่าสัญญาณนั้นเป็นลบศูนย์หรือบวก อย่างไรก็ตามฉันไม่สามารถติดตั้งโปรแกรมที่มีทางแยกให้เหลือน้อยกว่า 12 ไบต์ได้ (แม้ว่าอาจเป็นไปได้)

นี่เป็นวิธีแก้ปัญหาแบบปิดที่ไม่ต้องการสาขาใด ๆ :

Code    Comment             Example -5      Example 0       Example 5
?       Read input.         [-5]            [0]             [5]
:+      Double.             [-10]           [0]             [10]
:)      Copy, increment.    [-10 -9]        [0 1]           [10 11]
%       Modulo.             [-1]            [0]             [10]
:(      Copy, decrement.    [-1 -2]         [0 -1]          [10 9]
%       Modulo.             [-1]            [0]             [1]
!       Print.              []              []              []

จากนั้นตัวชี้คำสั่งจะไปถึงจุดสิ้นสุดแล้วหมุนไปรอบ ๆ และสิ้นสุดเมื่อ%ตอนนี้พยายามหารด้วยศูนย์

เสแสร้งการป้อนข้อมูลเป็นสิ่งจำเป็นที่จะทำให้งานนี้มีปัจจัยการผลิต1และ-1มิฉะนั้นหนึ่งในสองของการดำเนินงานแบบโมดูโลแล้วจะพยายามหารด้วยศูนย์


1
รหัสของคุณมีความสุขและเศร้าใจ:D
Stefan

2
@Stefan คุณสามารถเปลี่ยนคำสั่งซื้อหากคุณต้องการ ;)
Martin Ender

9

PHP, 16 ไบต์

ใช้ผู้ประกอบการยานอวกาศใหม่

<?=$argv[1]<=>0;

อย่าลืมพูดถึงว่านี่เป็นคำตอบ PHP7 เท่านั้น และเมื่อคุณใช้<?=งานคุณควรใช้งาน$_GET[n]ซึ่งไม่ต้องใช้ไบต์อีกต่อไป หากต้องการใช้<?=คุณจะต้องอยู่ในเว็บเซิร์ฟเวอร์ (เช่น Apache) และคุณจะไม่สามารถเข้าถึง$argvได้ คุณสามารถลองเรียกใช้<?php var_dump($argv);จากไฟล์ PHP, acessed ผ่าน Apache NULLและมันจะแสดง
Ismael Miguel

1
"ในการใช้ <? = คุณต้องอยู่ในเว็บเซิร์ฟเวอร์ (เช่น Apache)" ไม่<?=ผู้ปฏิบัติงานทำงานได้ดีจากบรรทัดคำสั่ง
Alex Howansky

วิ่งphp -r '<?=1'ได้PHP Parse error: syntax error, unexpected '<' in Command line code on line 1แล้ว แต่ดูเหมือนว่าจะทำงานได้ดีจากไฟล์ ฉันคิดว่าคุณพูดถูก
Ismael Miguel

การ-rตั้งค่าสถานะคือการเรียกใช้ข้อมูลโค้ด นี่คือแหล่งที่สมบูรณ์ บันทึกลงในไฟล์แล้วเรียกใช้php file.php
Alex Howansky

ฉันคิดออกแล้ว ฉันไม่รู้จริง ๆ ว่ามันทำงานได้จากไฟล์โดยใช้-fพารามิเตอร์(โดยนัย)
Ismael Miguel

9

Brain-Flak 74 42 40 Bytes

บันทึก 2 ไบต์ต้องขอบคุณ 1000000000

{([({}<([()])>)]<>(())){({}())<>}}{}({})

ลองออนไลน์!

คำอธิบาย:

{                                }       # if 0 do nothing
   (          )                          # push:                           
    {}<     >                            # the input, after 
       (    )                            # pushing:
        [  ]                             # negative:
         ()                              # 1

 (                    )                  # Then push:
  [            ]                         # the negative of the input
                <>                       # on the other stack with:
                   ()                    # a 1 
                  (  )                   # pushed under it

                       {        }        # while 1: 
                        ({}())           # increment this stack and...
                              <>         # switch stacks

                                 {}      # pop the top (the counter or 0 from input)
                                   (  )  # push:
                                    {}   # the top (this is a no-op, or pushes a 0)

การแข่งขันที่เป็นมิตรเล็ก ๆ น้อย ๆ
ข้าวสาลีตัวช่วยสร้าง

คุณสามารถบันทึกได้ 2 ไบต์โดยการลบโมนาโร่รอบ ๆ(())
0 '


8

C, 24 20 19 18 ไบต์

ฉันใช้ช่องโหว่สองวิธีในการตีสิ่งนี้ นี่คือใน C (GCC)

f(a){a=a>0?:-!!a;}

ลองออนไลน์!


ประวัติการแก้ไข:

1) f(a){return(a>0)-(a<0);} // 24 ไบต์

2) f(a){a=(a>0)-(a<0);} // 20 ไบต์

3) f(a){a=a>0?:-1+!a;} // 19 ไบต์

4) f(a){a=a>0?:-!!a;}// 18 ไบต์


รุ่นที่ 1: ความพยายามครั้งแรก ตรรกะง่ายๆ

รุ่นที่ 2: การละเมิดหน่วยความจำ / ข้อผิดพลาดสแต็คใน GCC ซึ่งเท่าที่ฉันสามารถบอกได้ฟังก์ชั่นที่ไม่ส่งคืนจะส่งกลับตัวแปรชุดสุดท้ายในบางกรณี

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

การตรวจทานครั้งที่ 4: ลบตัวหล่อแบบบูล ( !!) จากการทดแทนแบบมีเงื่อนไขสำหรับnilการอ้างอิงในการแก้ไข 2


7

ทับทิมขนาด 10 ไบต์

->x{x<=>0}

จะใช้0.<=>งานได้หรือคุณไม่สามารถอ้างอิงวิธีการเช่นนี้ใน Ruby ได้หรือไม่
Nic Hartley

.<=>คาดว่าจะมีข้อโต้แย้ง 1 ข้อดังนั้นจะสิ้นสุด0.<=> xซึ่งเป็นอีกต่อไป
Seims

@QPaysTaxes คุณจะต้องใช้0.method:<=>เพราะการเรียกใช้เมธอดใน ruby ​​ไม่ใช้วงเล็บและ0.<=>จะตีความว่าเป็นการเรียกเมธอดที่มีอาร์กิวเมนต์น้อยเกินไป
Cyoce

7

Perl, 9 ไบต์

ต้อง-Eไม่มีค่าใช้จ่ายเพิ่มเติม

say<><=>0

การใช้

perl -E 'say<><=>0' <<< -9999
-1
perl -E 'say<><=>0' <<< 9999
1
perl -E 'say<><=>0' <<< -0
0

ฉันมีความสุขกับผู้ให้บริการปลา!


1
มันไม่ได้ "ต้องการ" จริงๆ-Eนั่นก็ต่อเมื่อคุณเรียกมันจาก CLI แทนที่จะเป็นไฟล์ซึ่งเป็นเหตุผลว่าทำไมฉันถึงคิดว่าคุณไม่มีค่าใช้จ่ายเพิ่มเติม
nyuszika7h

@ nyuszika7h แน่นอนฉันต้องเดาว่าวิธีการทดสอบผ่าน-eจะไม่ทำงาน แต่-Eได้รับการยอมรับว่าไม่นานกว่า-eนั้น ตามฉันทามติเกี่ยวกับเมตา ฉันหวังว่าจะช่วยเล็กน้อย!
Dom Hastings

ใช่ฉันไม่ได้แนะนำให้มีค่าใช้จ่ายเพิ่มเติมเนื่องจากจะทำงานได้ดีเมื่อสคริปต์ดังกล่าวดำเนินการตามปกติจากไฟล์
nyuszika7h

7

Stack Cats , 6 + 4 = 10 ไบต์

_[:I!:

+4 ไบต์สำหรับ​ -nmแฟล็ก nใช้สำหรับ I / O ที่เป็นตัวเลขและเนื่องจาก Stack Cats ต้องการให้โปรแกรมเป็น palindromic จึงทำการmจำลองซอร์สโค้ดโดยปริยายเพื่อให้ซอร์สดั้งเดิม

_[:I!:!I:]_

ลองออนไลน์! เช่นเดียวกับสนามกอล์ฟ Stack Cats ที่ดีทั้งหมดสิ่งนี้ถูกค้นพบโดยแรงเดรัจฉานเอาชนะความพยายามด้วยตนเองโดยการยิงไกลและไม่สามารถรวมเข้ากับโปรแกรมที่ใหญ่ขึ้นได้อย่างง่ายดาย

เพิ่มการDตั้งค่าสถานะหากคุณต้องการดูการติดตามโปรแกรมแบบทีละขั้นตอนเช่นทำงานด้วย-nmDและตรวจสอบ STDERR / debug


Stack Cats ใช้เทปซ้อนที่เต็มไปด้วยเลขศูนย์ที่ด้านล่าง ที่จุดเริ่มต้นของโปรแกรมอินพุตทั้งหมดจะถูกส่งไปยังอินพุตสแต็กโดยมี-1ที่ฐานเพื่อแยกอินพุตจากศูนย์โดยนัย ในตอนท้ายของโปรแกรมสแต็กปัจจุบันจะถูกส่งออกยกเว้นฐาน-1ถ้ามี

คำสั่งที่เกี่ยวข้องที่นี่คือ:

_           Perform subtraction [... y x] -> [... y y-x], where x is top of stack
[           Move left one stack, taking top of stack with you
]           Move right one stack, taking top of stack with you
:           Swap top two of stack
I           Perform [ if top is negative, ] if positive or don't move if zero. Then
                negate the top of stack.
!           Bitwise negate top of stack (n -> -n-1)

โปรดทราบว่าคำสั่งทั้งหมดเหล่านี้สามารถย้อนกลับได้โดยมีค่าผกผันเป็นกระจกสะท้อนของคำสั่ง นี่คือสถานที่ตั้งของ Stack Cats - โปรแกรมการหยุดทำงานแบบไม่เกี่ยวข้องทั้งหมดมีความยาวคี่เนื่องจากโปรแกรมที่มีความยาวจะถูกยกเลิกด้วยตนเอง

เราเริ่มต้นด้วย

               v
               n
              -1
...  0    0    0    0    0  ...

_ลบทำให้ด้านบน-1-nและ[ย้ายผลลัพธ์ที่เหลือหนึ่งกอง:

           v
       -1-n   -1
...  0    0    0    0    0  ...

:สลับสองอันดับแรกและIไม่ทำอะไรเลยเนื่องจากส่วนบนสุดของสแต็กตอนนี้เป็นศูนย์ !จากนั้น bitwise ทำให้ค่าศูนย์บนกลายเป็น a -1และ:แลกเปลี่ยนกลับสองอันดับแรก !จากนั้นค่าบิตมิชชันจะลบล้างด้านบนหัน-1-nกลับมาnอีกครั้ง:

          v
          n
         -1   -1
...  0    0    0    0    0  ...

ตอนนี้เราแยกสาขาIซึ่งใช้กับต้นฉบับของเราn:

  • หากnเป็นลบเราจะย้ายไปทางซ้ายหนึ่งสแต็กและสิ้นสุดด้วย-nศูนย์โดยนัย :สลับวางศูนย์ไว้ด้านบนและ]ย้ายศูนย์ด้านบนของ-1เราเพิ่งย้ายออก _จากนั้นลบออกจากสแต็กสุดท้ายเหมือน[-1 -1]และมีเพียงหนึ่ง-1เอาต์พุตเนื่องจากฐาน-1ถูกละเว้น

  • ถ้า nเป็นศูนย์เราจะไม่ย้ายและ:แลกเปลี่ยนวาง-1บน ]แล้วย้ายซ้ายนี้-1อยู่ด้านบนของที่เหมาะสม-1และ_ลบออกจากกองสุดท้ายเช่น[-1 0], -1ศูนย์การแสดงผลและเพิกเฉยฐาน

  • หากnเป็นบวกเราย้ายไปทางขวาหนึ่งสแต็คและจบด้วยบน-n สลับวางด้านบนและเลื่อนไปทางขวาด้านบนของศูนย์โดยปริยาย จากนั้นลบให้และออกจากกองสุดท้ายเช่นซึ่งเป็นผลลัพธ์-1:-1]-1_0 - (-1) = 1[1]


7

TI-Basic, 8 ไบต์

median({1,Ans,~1

โซลูชันทางเลือก (อย่าลังเลที่จะแนะนำเพิ่มเติม):

max(~1,min(Ans,1               8  bytes
0:If Ans:Ans/abs(Ans           9  bytes
(Ans>0)-(Ans<0                 10 bytes

สิ่งที่~ควรจะเป็น?
Conor O'Brien

สัญลักษณ์ลบ @ ConorO'Brien เพื่อแยกความแตกต่างระหว่างสัญลักษณ์ลบของ TI-Basic ฉันรู้ว่า Cemetech SC ใช้~เพื่อแสดงโทเค็นนี้เช่นกัน
Timtech

โอ้เท่ ฉันไม่มีความคิดเห็น.
Conor O'Brien

@ ConorO'Brien ทีนี้คุณก็รู้แล้ว ขอบคุณที่ถาม :)
Timtech

1
สิ่งนี้ไม่ถูกต้อง - การใช้Ansเป็นอินพุตไม่ตรงกับเกณฑ์การเป็นวิธี I / O เริ่มต้นที่ถูกต้อง (มันไม่มี upvotes มากเป็นสองเท่าของ downvotes - ปัจจุบันอยู่ที่ +19 / -12)
Mego

7

MATL , 6 ไบต์

0>EGg-

อินพุตอาจเป็นตัวเลขหรืออาร์เรย์ ผลลัพธ์ที่ได้คือตัวเลขหรืออาร์เรย์ที่มีค่าที่สอดคล้องกัน

ลองออนไลน์! หรือทดสอบหลายกรณีโดยใช้อินพุตอาเรย์

คำอธิบาย

วิธีนี้หลีกเลี่ยงการใช้ฟังก์ชันเครื่องหมายในตัว ( ZS)

0>   % Take input implicitly. Push 1 if positive, 0 otherwise
E    % Multiply by 2
Gg   % Push input converted to logical: 1 if nonzero, 0 otherwise
-    % Subtract. Implicitly display

MATL ยาวกว่าMatlabและOctaveหรือไม่!
อดัม

4
เขาสามารถใช้บิวด์อินZSตามที่ระบุไว้ในคำตอบ
Stewie Griffin

6

เยลลี่ขนาด 1 ไบต์

TryItOnline!

เครื่องหมายเอกอะตอม , ไม่ว่าสิ่งที่ระบุไว้สำหรับการป้อนข้อมูลจำนวนเต็มไม่ว่าจะเป็นโปรแกรมเต็มรูปแบบหรือเป็นลิงค์เอก (ฟังก์ชั่นการหนึ่งอาร์กิวเมนต์)


6

Mathematica, 4 ไบต์

Sign

สิ่งที่พูดบนกระป๋อง


บันทึกไบต์ที่มีsgn
อดัม

3
WolframAlpha ไม่เหมือนกับ Mathematica; มันรวมถึงการตีความอัตโนมัติของการป้อนข้อมูลภาษาที่คลุมเครือ / เป็นธรรมชาติ
Greg Martin

ดังนั้นฉันควรส่งคำตอบแยกต่างหาก
อดัม

ดูเหมือนว่าเหมาะสมกับผม ...
เกร็กมาร์ติน

6

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

f=@(x)real(asin(x))/pi*2

นี่คือคำตอบ Octave ครั้งแรกของฉันคำแนะนำใด ๆ เกี่ยวกับการเล่นกอล์ฟได้รับการชื่นชม!

ลองออนไลน์!

แนวคิดในการรับasinมาจากคำถามที่กล่าวoutput the sign:)

คำอธิบาย

หมายเหตุ: การหารจำนวนด้วยการpiคูณด้วย2จะเท่ากับการหารจำนวนทั้งหมดด้วยpi/2

Case 0:

asin(0)0อัตราผลตอบแทน รับส่วนที่แท้จริงของมันและหารด้วยpi/2ทำให้ไม่มีความแตกต่างในการส่งออก

Case positive:

asin(1)pi/2อัตราผลตอบแทนasinของจำนวนใด ๆ ที่ใหญ่กว่า1จะให้pi/2+ จำนวนเชิงซ้อน รับส่วนที่แท้จริงของมันให้pi/2และหารด้วยpi/2ให้1

Case negative:

asin(-1)-pi/2อัตราผลตอบแทน asinของจำนวนใด ๆ ที่น้อยกว่า-1จะให้-pi/2+ จำนวนเชิงซ้อน รับส่วนที่แท้จริงของมันให้-pi/2และหารด้วยpi/2ให้-1


@LuisMendo N will be an integerฉันโชคดีที่มันบอกว่าในคำถาม :)
Kritixi Lithos

โอ้ฉันไม่เคยอ่านว่าเป็นส่วนหนึ่ง :)
หลุยส์ Mendo

1
C ลิตรอีวีดี!
flawr

คุณไม่ต้องการf=ถ้าส่วนที่เหลือเป็นนิพจน์ฟังก์ชันที่ถูกต้องและไม่เรียกซ้ำ
Cyoce

@Cyoce ขออภัย แต่ฉันไม่ชอบฟังก์ชั่นที่ไม่ระบุตัวตน
Kritixi Lithos

6

ที่จริงแล้ว 1 ไบต์

s

ลองออนไลน์!

อีกกรณีของสิ่งที่มันบอกบนดีบุก - sเป็นฟังก์ชั่นสัญญาณ

ไม่มีบิวอิน (4 ไบต์):

;A\+

ลองออนไลน์!

;A\หารค่าสัมบูรณ์ของอินพุตด้วยอินพุต ผลลัพธ์นี้-1สำหรับอินพุตที่เป็นลบและ1สำหรับอินพุตที่เป็นบวก น่าเสียดายเนื่องจากการจัดการข้อผิดพลาดของจริง (หากมีสิ่งผิดปกติคำสั่งจะถูกละเว้น) 0เนื่องจากอินพุตปล่อยสอง0s บนสแต็ก +แก้ไขสิ่งนี้โดยการเพิ่มพวกเขา (ซึ่งทำให้เกิดข้อผิดพลาดกับสิ่งอื่นดังนั้นมันจึงถูกละเว้น)


6

Piet, 188 53 46 41 ไบต์

5bpjhbttttfttatraaearfjearoaearbcatsdcclq

ล่ามออนไลน์มีให้ที่นี่

รหัส piet นี้ทำตามมาตรฐาน (n>0)-(n<0)เนื่องจากไม่มีการตรวจสอบเครื่องหมายในตัว ในความเป็นจริงไม่มี builtin น้อยกว่าดังนั้นคำอธิบายที่แม่นยำมากขึ้นของวิธีนี้จะเป็น(n>0)-(0>n)เพื่อให้คำอธิบายที่ถูกต้องมากขึ้นของวิธีการนี้จะเป็น

ข้อความด้านบนแสดงถึงภาพ คุณสามารถสร้างภาพโดยวางลงในกล่องข้อความในหน้าล่าม เพื่อความสะดวกฉันได้จัดเตรียมรูปภาพด้านล่างโดยมีขนาดของ codel เป็น 31 พิกเซล เส้นตารางมีไว้สำหรับการอ่านและไม่ได้เป็นส่วนหนึ่งของโปรแกรม นอกจากนี้โปรดทราบว่าโปรแกรมนี้จะไม่ข้ามรหัสสีขาวใด ๆ ทำตามรหัสสีรอบขอบของภาพเพื่อติดตามการไหลของโปรแกรม

คำอธิบาย

Program

Instruction    Δ Hue   Δ Lightness   Stack
------------   -----   -----------   --------------------
In (Number)    4       2             n
Duplicate      4       0             n, n
Push [1]       0       1             1, n, n
Duplicate      4       0             1, 1, in, in
Subtract       1       1             0, in, in
Duplicate      4       0             0, 0, in, in
Push [4]       0       1             4, 0, 0, in, in
Push [1]       0       1             1, 4, 0, 0, in, in
Roll           4       1             0, in, in, 0
Greater        3       0             greater, in, 0
Push [3]       0       1             3, greater, in, 0
Push [1]       0       1             1, 3, greater, in, 0
Roll           4       1             in, 0, greater
Greater        3       0             less, greater
Subtract       1       1             sign
Out (Number)   5       1             [Empty]
[Exit]         [N/A]   [N/A]         [Empty]

เพื่อลดขนาดไฟล์ใด ๆ เพิ่มเติมฉันจะต้องเปลี่ยนโปรแกรม(หอบ)แทนการบีบอัดไฟล์ตามที่ฉันทำ ฉันต้องการลบหนึ่งแถวที่จะเล่นกอล์ฟนี้ลงไปที่ 36 ฉันอาจพัฒนาล่ามของฉันเองซึ่งจะมีรูปแบบการป้อนข้อมูลที่เล็กลงมากเนื่องจากการเปลี่ยนรหัสเพื่อให้เล็กลงไม่ใช่รหัสกอล์ฟที่เกี่ยวข้อง

Mod บอกฉันว่าขนาดไฟล์โดยรวมคือสิ่งที่สำคัญสำหรับรหัส Piet เมื่อล่ามยอมรับข้อความว่าอินพุตที่ถูกต้องและข้อความดิบมีจำนวนไบต์ที่เล็กกว่ารูปภาพใด ๆ ข้อความจึงเป็นตัวเลือกที่ชัดเจน ฉันขอโทษที่ทำหน้าด้านเกี่ยวกับเรื่องนี้ แต่ฉันไม่ได้ทำตามกฎ การอภิปรายเมตาดาต้าเกี่ยวกับสิ่งนี้ทำให้ความคิดเห็นของฉันในเรื่องชัดเจน

หากคุณคิดว่าสิ่งนี้ขัดกับจิตวิญญาณของ Piet หรือต้องการที่จะพูดคุยเรื่องนี้เพิ่มเติมไม่ว่าด้วยเหตุผลใดก็ตามโปรดตรวจสอบการสนทนาเกี่ยวกับ metaการอภิปรายเกี่ยวกับเมตา


2
ฉันเชื่อว่าหลักการของ Piet คือการนับโคเดกทั้งหมด
SuperJedi224

@ SuperJedi224 นั่นไม่ใช่สิ่งที่ตัดสินใจในเมตาโพสต์ดูเหมือนว่าจำนวนไบต์ในภาพคือสิ่งที่ฉันจะไปด้วย
Mike Bufardeci

6

รุกขนาด 7 ไบต์

นี่อาจเป็นโปรแกรมที่ดูแปลกประหลาดที่สุดเท่าที่ฉันเคยเขียน ...

&?&|/;#

ลองออนไลน์!

มันใช้sign(x) = abs(x) / xแต่มีความชัดเจนsign(0) = 0เพื่อหลีกเลี่ยงข้อผิดพลาดการแบ่งศูนย์

          \ Take implicit input
&?   ;    \ If the input is True (not 0):
  &|      \  Push its absolute value
    /     \  Divide
      #   \ Output TOS (the sign)

สิ่งนี้ใช้ได้เพราะx / abs(x)คือ1เมื่อxเป็นบวกและ-1เมื่อxเป็นลบ หากอินพุตเป็น 0 โปรแกรมจะข้ามไปที่คำสั่งเอาต์พุต


4 ไบต์ (ไม่ใช่การแข่งขัน)

เนื่องจากวันหยุดและมีเวลามากเกินไปฉันจึงเขียนล่ามภาษา Pushy ฉบับใหม่เสร็จสมบูรณ์ โปรแกรมด้านบนยังคงใช้งานได้ แต่เนื่องจาก0 / 0ค่าเริ่มต้นเป็น 0 ต่อไปนี้จึงสั้นกว่า:

&|/#

ลองออนไลน์!


1
ผมยังคิดเกี่ยวกับการใช้แต่มีความคิดว่าจะทำอย่างไรกับabs 0ทำได้ดี!
Kritixi Lithos

5

R, 25 ไบต์

'if'(x<-scan(),x/abs(x),0)

นำตัวเลขไปที่ STDIN จากนั้นตรวจสอบว่ามันเป็นศูนย์หรือไม่ถ้าไม่ส่งคืนx/|x|ซึ่งเป็นหนึ่ง1ใน-1นั้นและส่งออก 0 ถ้าx=0ถ้า

นี่คือโดยไม่ต้องใช้ builtin signแน่นอน


1
ใช้ builtin เป็นหลักสูตรที่สั้นกว่า sign(scan())แต่สนุกน้อย:
Billywob

ขออภัยควรจะกล่าวถึงการหลีกเลี่ยงการสร้างอย่างชัดเจน
JAD

5

V 14 12 ไบต์

ขอบคุณ @DJMcMayhem เป็นเวลา 2 ไบต์ ใช้ reg-ex เพื่อทำการทดแทน สนุกดีเพราะไม่ใช่ในตัว ฉันมีฟังก์ชั่นที่สนุกมากขึ้น แต่มันไม่ทำงานอย่างที่ฉันคาดไว้

ͨ-©½0]/±1

ตรวจสอบกรณีทดสอบ

นี่แปล:%s/\v(-)=[^0].*/\11ว่าตรงกับ-สิ่งใดสิ่งหนึ่งหรือมากกว่าตามด้วยอะไรก็ได้ยกเว้น 0, ตามด้วยอะไรก็ได้จำนวนครั้ง มันถูกแทนที่ด้วยแมตช์แรก-หรือไม่มีอะไร) และ a1และ regex ไม่ตรงกับ 0 ดังนั้นมันจึงยังคงอยู่

วิธีที่สนุกยิ่งขึ้น (21 ไบต์)

é
Àé12|DkJòhé-òó^$/a

TryItOnline

สิ่งนี้ยอมรับอินพุตเป็นอาร์กิวเมนต์มากกว่าในบัฟเฟอร์

é<CR> แทรกบรรทัดใหม่

Àเรียกใช้อาร์กิวเมนต์เป็นรหัส V -จะเลื่อนเคอร์เซอร์ไปที่บรรทัดก่อนหน้าและหมายเลขใด ๆ ที่จะกลายเป็นนับสำหรับคำสั่งต่อไป

é1 แทรก (นับ)1 's

2| ย้ายไปที่คอลัมน์ที่สอง

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

kJ เข้าร่วมสองบรรทัดด้วยกัน

òhé-òแปลเป็น: "วิ่งhé-จนแตก" หาก 1 อยู่ในบรรทัดที่สองจะหยุดทันทีหลังจาก h หากอยู่บนบรรทัดแรกมันจะแทรก a-ก่อนที่จะแตก

ó^$/aนี้ช่วยแก้ไขความจริงที่ว่า-1, 0, 1จะปล่อยให้เปล่าและแทนที่ว่างกับการลงทะเบียนการโต้แย้ง


ฉันรู้ว่าฉันควรอ่านหน้านั้นดีกว่า มันไม่ได้เป็นจริงสั้น - ฉันลืม 0 Àé1แต่ผมพยายามที่จะใช้ตัวเลขในเป็นอาร์กิวเมนต์แล้ว จำนวนบวกให้สตริงของคนจำนวนลบควรให้สตริงของคนหนึ่งแถวขึ้นไปและ 0 จะให้อะไร บิตจำนวนลบไม่ทำงานÀแต่ทำด้วยd$@"
nmjcman101

อา เหตุผลที่ไม่ได้ผลก็เพราะไม่มีแถวอื่นขึ้นมาอีก ถ้าคุณเพิ่มé<cr>มันจะมีสองบรรทัดว่างแล้วว่าไม่ทำงาน ฉันไม่แน่ใจว่าคุณสามารถใช้คำตอบนั้นได้หรือไม่
DJMcMayhem

ฉันมีอีกบรรทัดถึงไม่ได้พูดอย่างชัดเจนในความคิดเห็นของฉัน สิ่งที่--โต้แย้งคุณเพิ่ม?
nmjcman101

1
มันหมายถึง "การสิ้นสุดตัวเลือก" ตั้งแต่-6เริ่มต้นด้วยแฟล็ก docopt (ไลบรารีไพ ธ อนสำหรับตัวเลือกบรรทัดคำสั่ง) คิดว่าเป็นแฟล็กบรรทัดคำสั่งแทนที่จะเป็นอาร์กิวเมนต์ การเพิ่ม--เพียงแค่สัญญาณว่ามันเป็นอาร์กิวเมนต์ไม่ใช่ตัวเลือก มิฉะนั้นจะไม่ทำงานเลยเนื่องจากการเรียกใช้บรรทัดคำสั่งไม่ถูกต้อง
DJMcMayhem

5

C #, 16 15 ไบต์

ปรับปรุงวิธีแก้ปัญหาด้วยNeil

n=>n>0?1:n>>31;

อีกทางหนึ่งวิธีในตัวคือ 1 ไบต์ยาวขึ้น:

n=>Math.Sign(n);

โปรแกรมเต็มรูปแบบพร้อมกรณีทดสอบ:

using System;

public class P
{
    public static void Main()
    {
        Func<int,int> f =
        n=>n>0?1:n>>31;

        // test cases:
        for (int i=-5; i<= 5; i++)
            Console.WriteLine(i + " -> " + f(i));
    }
}

2
ลองแทนn>>31 n<0?-1:0
Neil

1
มันค่อนข้างเศร้าเมื่อบิวด์อินไม่ได้เป็นทางออกที่สั้นที่สุด
Mego

สมมติว่า C # เป็นที่รู้จักกันดีว่า verbose ...
adrianmp

1
A) ฉันไม่คิดว่าคุณต้องการการติดตาม;เนื่องจากแลมบ์ดาเป็นการแสดงออกไม่ใช่การแถลง B) จะMath.SignหรือMath::Signสิ่งที่คล้ายกันเป็นการส่งที่ถูกต้องหรือไม่ ไม่แน่ใจว่า C # โดยเฉพาะวิธีการจัดการ โดยทั่วไปจะx = Math.Sign;เป็นคำสั่ง C # ที่ถูกต้องหากxถูกกำหนดค่าเริ่มต้นด้วยประเภทที่ถูกต้อง?
Cyoce
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.