ค้นหา i ^ n, รับ n


27

ความท้าทาย

ในตัวละครน้อยที่สุดหาค่าของ i ^ n ให้ n, จำนวนเต็มบวกมากกว่า 0 ซึ่งควรเอาท์พุทเป็นสตริง

สำหรับผู้ที่ไม่รู้ฉันถูกกำหนดเช่นนั้น i ^ 2 = -1 ดังนั้น:

  • ฉัน ^ 1 = ฉัน
  • ฉัน ^ 2 = -1
  • ฉัน ^ 3 = -i
  • ฉัน ^ 4 = 1

ซ้ำแล้วซ้ำอีก ..

กฎระเบียบ

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

คะแนนโบนัส

-5 ถ้าคุณสามารถหาค่าโดยที่ n เป็นลบเช่นกัน

-15 ถ้าคุณสามารถคำนวณมูลค่าของจำนวนจริงใด ๆ (โบนัสนี้รวม -5 จากโบนัสด้านบน)

โชคดี!


1
เรากลับมาในรูปแบบใดกันแน่? ผ่านฟังก์ชั่นการส่งออกหรือ stdout?
ภูมิใจ haskeller

@proudhaskeller แท็ก wiki แสดงรายการค่าเริ่มต้นสำหรับสิ่งนั้น ฟังก์ชั่นและโปรแกรมต่าง ๆ ยกเว้นฟังก์ชั่นอินพุตอาร์กิวเมนต์ของฟังก์ชัน STDIN หรืออาร์กิวเมนต์บรรทัดคำสั่งและเอาต์พุตผ่าน STDOUT หรือค่าส่งคืนฟังก์ชัน ไม่จำเป็นต้องตั้งชื่อฟังก์ชัน
Martin Ender

1
@ MartinBüttner แต่ถ้าฉันเลือกฟังก์ชั่นเอาท์พุทควรจะจัดรูปแบบ / จัดเก็บอย่างไรโดยไม่ต้องมีจำนวนเชิงซ้อนในภาษาของฉัน?
ภูมิใจ haskeller

16
@BetaDecay เลขจำนวนเต็มทศนิยมคืออะไร? oO
Martin Ender

2
@ MartinBüttnerฮ่าฮ่าคำผิด: / จำนวนจุดลอยตัว
Beta Decay

คำตอบ:


15

ทับทิมคะแนน -2

(13 ไบต์, -15 โบนัส)

->n{[1,90*n]}

คุณสมบัติรวมถึง: ไม่มีข้อผิดพลาดในการปัดเศษ! (ถ้าคุณผ่านอินพุตเป็น Rational)


โพสต์โดยผู้เขียน Kezz101

หากคุณรองรับจำนวนจริงใด ๆ คุณสามารถส่งออกในรูปแบบที่ซับซ้อนที่ถูกต้องใด ๆ

คะแนนเชิงลบทำให้อะดรีนาลีนของฉันพุ่งออกมา ดังนั้นกฎที่ใช้ในทางที่ผิดจะถูกใช้เพื่อบรรลุเป้าหมายที่สูงส่งนี้

สร้างฟังก์ชั่นที่ไม่ระบุชื่อและส่งออกอาร์เรย์ด้วย 2 รายการที่แสดงถึงจำนวนเชิงซ้อนในรูปแบบขั้ว (หน่วยเชิงมุม: องศา)


4
"Ruby, -2 bytes" .....
FantaC

3
ดังนั้นการดาวน์โหลด 1,000,000,000,000 ครั้งนี้ทำให้ฉันมีพื้นที่ว่างในฮาร์ดไดรฟ์ 2TB หรือไม่ ฟังดูดีเหลือเกินสำหรับฉัน
Redwolf

^ เบราว์เซอร์ของฉันพังลงมาก่อนที่ฉันจะทำเช่นนั้นได้สำเร็จ อาจลองใช้ "zip bomb" กับไฟล์ข้างใน? (การแยกจะช่วยประหยัดพื้นที่)
A̲̲

15

CJam, 12 ตัวอักษร - 5 = 7

1'iW"-i"]li=

ทดสอบที่นี่

รองรับอินพุตเชิงลบ

1              "Push 1.";
 'i            "Push the character i.";
   W           "Push -1.";
    "-i"       "Push the string -i.";
        ]      "Wrap all four in an array.";
         li    "Read STDIN and convert to integer.";
           =   "Access array. The index is automatically taken module the array length.";

ผลลัพธ์จะถูกพิมพ์โดยอัตโนมัติเมื่อสิ้นสุดโปรแกรม

Mathematica, 22 20 19 ตัวอักษร - 15 = 4

Sin[t=π#/2]i+Cos@t&

นี่คือฟังก์ชั่นนิรนามซึ่งคุณสามารถใช้เช่น

Sin[t=π#/2]i+Cos@t&[15]

(หรือมอบหมายให้fพูดแล้วทำf[15])

รองรับ reals และให้ผลลัพธ์ที่แน่นอนสำหรับอินพุตจำนวนเต็ม

โปรดทราบว่าiเป็นไม่ได้ Mathematica ซับซ้อนฉัน (ซึ่งเป็นI) มันเป็นเพียงตัวแปรที่ไม่ได้กำหนด

นอกจากนี้แม้จะมีลำดับของนิพจน์ Mathematica จะเรียงลำดับผลลัพธ์ในR+Ciรูปแบบใหม่


4%คุณไม่จำเป็นต้อง มันสามารถทำได้โดยอัตโนมัติ
jimmy23013

@ user23013 ดี :)
Martin Ender

8
ไม่ควรแยกคำตอบทั้งสองออก?
Justin

@Quincunx บางที ... ตอนแรกพวกเขาทั้งคู่อยู่ใน CJam ซึ่งเป็นสาเหตุที่ฉันตอบคำถามแบบเดียวกัน แต่อันที่สองไม่ถูกต้องดังนั้นฉันจึงนำมันไปที่ Mathematica แต่ทิ้งมันไว้ที่เดิม ถ้าคนยืนยันฉันสามารถแยกพวกเขาออก
Martin Ender

และคุณสามารถบันทึกตัวอักษรในการใช้มันกับแทนf@15 f[15]
orome

14

Python 2 - (24-5) = 19

lambda n:'1i--'[n%4::-2]

เครดิตส่วนใหญ่เป็นของ @ user2357112 ฉันเพิ่งเล่นกอล์ฟคำตอบของเขาจากความคิดเห็นในคำตอบนี้อีกเล็กน้อย

คำอธิบาย: เริ่มต้นที่ดัชนีในสตริงn%4 '1i--'จากนั้นวนซ้ำย้อนหลังเป็นขั้นตอนละสองตัวอักษรละหนึ่งตัว ดังนั้นสำหรับตัวอย่างเช่นn=6จะเริ่มต้นที่ดัชนี 2 เป็นครั้งแรก-แล้วข้ามiและใช้เพื่อการกลับมา1-1

@ xnor ชี้ให้เห็นวิธีการแก้ปัญหาความยาวเดียวกัน:

lambda n:'--i1'[~n%4::2] 

Pyth - (14-5) = 9

ฉันดูเหมือนจะได้ 14 เท่านั้นไม่ว่าฉันจะพยายามย้อนกลับ / ฝาน / ฯลฯ : '(

%_2<"1i--"h%Q4

ซึ่งเป็นหลักเช่นเดียวกับคำตอบของงูหลามข้างต้น แต่ใน 2 ขั้นตอนเพราะ pyth ไม่สนับสนุนตัวเลือกการจัดทำดัชนีแบบเต็มของงูหลาม ลองออนไลน์

ฉันจะไปคุยกับ isaacg เกี่ยวกับการทำดัชนี Pyth;)


หลามไม่lambdaจำเป็นต้องถูกกำหนดให้กับตัวแปรหรือไม่? (lambda...)(n)ที่แตกต่างกันอย่างน้อยจะเรียกมันว่าคุณจะต้องล้อมรอบด้วยวงเล็บเพิ่มสองไบต์ดังนั้นจึงอาจจะเรียกว่า
mbomb007

@ mbomb007 ตาม metaนี้เป็นที่ยอมรับ รหัสที่นี่สร้างฟังก์ชั่นที่ทำงานที่จำเป็น lambdas ที่ไม่ระบุชื่อถูกนำมาใช้ค่อนข้างบ่อยในหลามสำหรับการทำงานที่ชอบและmap sorted
FryAmTheEggman

11

TI-BASIC (NSpire) - 5 (20 ตัวอักษร -15)

cos(nπ/2)+sin(nπ/2)i

หากคุณต้องการรับค่าส่งคืนแบบซับซ้อนให้แทนที่ค่าiในตอนท้ายด้วย(complex i)


@ MartinBüttner TI-Basic ดูเหมือนจะใช้ประเภท 'Expression' บางประเภทและวิธีการในตัวจะให้ผลลัพธ์ที่แน่นอนสำหรับสิ่งเหล่านี้
Shujal

ฉันเห็นแล้วทั้งหมดดี ;)
Martin Ender

สิ่งที่เกี่ยวกับกฎ "ถ้าภาษาของคุณรองรับตัวเลขที่ซับซ้อนอย่าใช้ฟังก์ชั่นหรือเลขคณิตใด ๆ + i คือเลขคณิต
edc65

@ edc65 + จริง ๆ แล้วเป็นการดำเนินการที่ซับซ้อน แต่ถ้าคุณไม่ชอบที่แทนที่ด้วยปกติ iถ้าตัวแปรiไม่ได้กำหนดคุณจะได้รับจำนวนซับซ้อนเพียงกับแทนi ฉันแค่คำนวณชิ้นส่วนจริงและจินตภาพแยกกัน
Shujal

1
@Shujal ในกรณีนี้ฉันคิดว่าคุณควรใช้iต่อไป คอมเพล็กซ์ i ไม่ใช่ตัวละครที่คำถามถามและมันจะช่วยคุณสองไบต์ดังนั้นอย่างน้อยคุณก็จะผูกกับฉัน;)
Martin Ender

7

Marbelous , 43 ไบต์

ไม่ใช่ผู้ชนะ แต่ Marbelous นั้นสนุก :)

}0
^0
=0&2
&1
}0
^1\/
=0&02D3169
\/\/&0&1&2

นี่คือโปรแกรมที่อ่านอินพุตเป็นจำนวนเต็มเดียวจากอาร์กิวเมนต์บรรทัดคำสั่งแรก โปรดทราบว่าการป้อนข้อมูลจะได้รับ modulo 256 แต่สิ่งนี้ไม่ส่งผลกระทบต่อความถูกต้องของผลลัพธ์สำหรับอินพุตที่มากกว่า 255 เนื่องจาก 256 หารด้วย 4

คำอธิบาย

Marbelous เป็นภาษาการเขียนโปรแกรม 2D ซึ่งเลียนแบบ "หินอ่อน" (ค่าไบต์) ที่ตกลงมาในอุปกรณ์ต่างๆ กระดานประกอบด้วยเซลล์กว้าง 2 ตัวอักษร (อุปกรณ์) ซึ่งสามารถประมวลผลหินอ่อน ทุกสิ่งที่ตกลงมาด้านล่างของบอร์ดจะถูกพิมพ์ไปที่ STDOUT

มาดูอุปกรณ์ที่ใช้กัน:

  • }0เป็นที่ที่อาร์กิวเมนต์บรรทัดคำสั่งแรกไป ฉันใช้อุปกรณ์นี้สองอินสแตนซ์ดังนั้นฉันจึงได้รับสองชุดของค่าอินพุต (ในเวลาเดียวกัน)
  • ^nตรวจสอบnบิตที่สองของหินอ่อนอินพุต (ซึ่งn=0เป็นบิตที่สำคัญน้อยที่สุด) และสร้าง1หรือ0ขึ้นอยู่กับบิต
  • =00การตรวจสอบเพื่อความเท่าเทียมกันด้วย หากหินอ่อนอินพุทมีค่าเท่ากันมันจะหยดลงไปหากไม่ได้ถูกผลักไปทางขวา
  • \/ เป็นถังขยะได้ดังนั้นมันจึงกลืนหินอ่อนอินพุตและไม่สร้างอะไรเลย
  • 2Dเป็นรหัส ASCII ของ-, 31เป็นรหัส ASCII ของ1และ69เป็นรหัส ASCII iของ
  • The &nเป็นผู้ประสาน ผู้ซิงโครไนซ์แผงลอยหินอ่อนจนกว่านักซิงโครไนซ์ทุกคนที่nมีหินอ่อนจะถูกเก็บไว้ตรงจุดที่พวกเขาจะปล่อยให้หินอ่อนที่เก็บไว้ของพวกเขาตกลงมา

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

สำหรับข้อมูลเพิ่มเติมโปรดดูที่ร่างข้อมูลจำเพาะ


1
ฉันชอบอันนี้มาก! ฟังดูน่ากลัวมากฉันจะต้องลองดูอีกครั้งในไม่ช้า :)
Kezz101

3
@ Kezz101 เรามีร่างข้อกำหนดไว้ที่นี่
Martin Ender

ดี! มันดูน่าสนใจจริงๆ
Kezz101

อย่าลืมว่าคุณสามารถให้อินพุตกับกระดานหลักในบรรทัดคำสั่งดังนั้นบอร์ดนี้สามารถใช้ตามสภาพ
Sparr

1
@overactor อืมฉันไม่รู้ ... เอาท์พุทอักขระเพิ่มเติม (แม้ว่าพวกเขาจะไม่สามารถพิมพ์ออกมาได้) ก็ยังดูเหมือนว่าจะละเมิดรูปแบบผลลัพธ์สำหรับฉัน อาจจะคุ้มค่ากับคำถามเมตา
Martin Ender

6

JavaScript (ES6) 29-5 = 24

รองรับพลังงานเชิงลบ

f=n=>(n&2?'-':'')+(n&1?'i':1)

ES5:

function f(n){return (n&2?'-':'')+(n&1?'i':1)}

ใช่สั้นกว่า ( f=n=>[1,'i',-1,'-i'][n%4]) แต่มันเซ็กซี่น้อยกว่าและจะไม่สนับสนุนพลังเชิงลบ ขึ้นอยู่กับโบนัสที่ฉันเดา
Michael M.

Nop, 29 ไบต์ ลบได้รับการสนับสนุนด้วยรหัสนี้
Michael M.

JS มีตัว&ดำเนินการระดับบิตหรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถทำ&3เพื่อการดำเนินงานโมดูลัสที่แท้จริง แก้ไข: ดูเหมือนว่ามันจะเป็นไปตามที่&2ใช้ในคำตอบของคุณ ...
feersum

5

Python 28 ไบต์ - 5 = 23

รองรับอินพุต -ve

สมมติว่าฟังก์ชั่นแลมบ์ดาเป็นที่ยอมรับ (ขอบคุณ FryAmTheEggman!):

lambda n:n%4/2*'-'+'1i'[n%2]

มิฉะนั้น 31 ไบต์ - 5 = 26

print[1,"i",-1,"-i"][input()%4]

1
คุณไม่สามารถเรียกมันได้อย่างแน่นอน คุณต้องเก็บมันไว้ที่ไหนสักแห่งที่คุณสามารถเข้าถึงได้ ดังนั้นคุณจะทำfoo=...หรือคุณอาจจะทำmap(<your lambda>,range(10))ที่จะได้รับรายการของค่าของจากi^n 0-9
FryAmTheEggman

2
โดยทั่วไปคุณกำลังทำตัวชี้ฟังก์ชันถ้านั่นชัดเจนยิ่งขึ้น: P
FryAmTheEggman

3
@DigitalTrauma: ใช่แม้ว่าคุณอาจจะสามารถทำได้ดีขึ้นด้วยเทคนิคการแบ่งสตริง ตัวอย่างเช่นlambda n:'--1i'[n%4-2::2].
user2357112 รองรับ Monica

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

1
lambda n:n%4/2*'-'+'1i'[n%2]เอาพื้นที่และสั้น :)
FryAmTheEggman

4

(Emacs) เสียงกระเพื่อม - 34

เพียงเพื่อความสนุกสนานใน (Emacs) เสียงกระเพื่อม:

(lambda(n)(elt[1 i -1 -i](% n 4)))

หากคุณต้องการใช้ให้ใช้defunหรือใช้funcall:

(funcall
 (lambda (n) (elt [1 i -1 -i] (% n 4)))
 4) => 1

(mapcar
 (lambda(n)(elt[1 i -1 -i](% n 4)))
 [0 1 2 3 4 5 6 7 8])
 => (1 i -1 -i 1 i -1 -i 1)

4

APL (Dyalog) 8 ตัวอักษร - 15 โบนัส = คะแนน -7

ฟังก์ชั่นในตัว (และห้ามใช้งาน) คือ0J1*⊢แต่วิธีนี้ใช้วิธีการของ

¯12○.5×○

Kezz101 ผู้ประพันธ์ท้าทายผู้เขียน :

หากคุณรองรับจำนวนจริงใด ๆ คุณสามารถส่งออกในรูปแบบที่ซับซ้อนที่ถูกต้องใด ๆ

ส่งคืนตัวเลขที่ซับซ้อนในรูปแบบaJbซึ่งเป็นวิธีปกติสำหรับ APL เพื่อแสดงตัวเลขที่ซับซ้อน

ลองออนไลน์!

คำอธิบาย

¯12○ หาเวกเตอร์หน่วยซึ่งมีมุมเป็นเรเดียนของ

.5× ครึ่งหนึ่งครั้ง

 อาร์กิวเมนต์ถูกคูณด้วย 𝜋 (ค่าคงที่วงกลม)



3

Befunge-98, 41-5 = 36 35-5 = 30 32-5 = 27

&4%:01-`!4*+:2%'8*'1+\2/d*' +,,@

รองรับจำนวนเต็มลบ จะไม่ชนะรางวัลใด ๆ ด้วยวิธีนี้ แต่จะเป็นอะไรก็ตาม

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

ฉันแน่ใจว่านี่สามารถลงเล่นกอล์ฟได้อีกมากมาย สำหรับตอนนี้นี่เป็นวิธีแก้ปัญหาอื่นที่ไม่ยอมรับเชิงลบ แต่ชดเชยการสูญเสียโบนัสโดยทำให้สั้นลง:

Befunge-98, 32 26 23

&4%:2%'8*'1+\2/d*' +,,@

แก้ไข - ใช้ประโยชน์จากข้อเท็จจริงที่ว่า "-" มีความยาว 13 อักขระ (0xd) ตัวจาก ""

แก้ไข 2 - ตอนนี้อีกครั้งใช้ประโยชน์จากความจริงที่ว่า "i" คือ 56 (0x38 หรือ'8) ตัวละครออกจาก "1"


3

Java 8 คะแนน: 72

ใน Java ภาษากอล์ฟที่เลวร้ายที่สุดที่เคยมีมา! แข็งแรงเล่นกอล์ฟ:

java.util.function.Function s=n->{new String[]{"i","-1","-i","1"}[n%4]};

ขยาย:

class Complex{

    java.util.function.Function s = n -> {new String[]{"i","-1","-i","1"}[n%4]};

}

หมายเหตุ: ฉันยังไม่คุ้นเคยกับ Java 8 ฉันยังไม่มีรันไทม์สำหรับมัน โปรดบอกฉันว่ามีข้อผิดพลาดทางไวยากรณ์หรือไม่ นี่เป็นสนามกอล์ฟครั้งแรกของฉัน

แก้ไข:ลบimportแล้ว

แก้ไข:ลบการประกาศคลาส

อีกคำตอบด้วยคะแนน = 87 - 15 = 72

java.util.function.Function s=n->{Math.cos(n*Math.PI/2)+"+"+Math.sin(n*Math.PI/2)+"i"};

ขยาย:

class Complex{

    java.util.function.Function s = n -> {Math.cos(n * Math.PI/2) + " + " + Math.sin(n * Math.PI/2) + "i"};

}

คุณสามารถบันทึกได้ด้วย "import java.util. *"
Anubian Noob

@Nubian Noob Class Function java.util.functionไม่ได้อยู่ในแพ็คเกจjava.util(หรือฉันผิด?)
TheNumberOne

แต่ถ้าคุณทำทุกอย่างหมายถึงการนำเข้าภายใต้แพคเกจ เช่นเดียวกับที่คุณกำลังนำเข้าคลาสทั้งหมดในแพ็คเกจ java.util.*.*fuction
Anubian Noob

5
@ Anubian Noob importนำเข้าเฉพาะคลาสในแพ็คเกจนั้นเท่านั้น มันไม่ได้นำเข้าคลาสใด ๆ จากแพ็คเกจในแพ็คเกจนั้น ยกตัวอย่างเช่นระดับFunctionอยู่ในแพคเกจแต่ไม่ได้อยู่ในแพคเกจjava.util.function java.util
TheNumberOne

โอ้แย่มากขอโทษด้วย
Anubian Noob

3

MATLAB, 33 ไบต์ - 5 = 28

x={'i','-1','-i','1'};x(mod(n,4))

แม้ว่าจะมีจำนวนน้อยกว่า (37-5 = 32) แต่ฉันชอบวิธีนี้ดีกว่า:

x='1i -';x((mod([n/2,n],2)>=1)+[3,1])

i^3คือ-iแทนที่จะiคิดว่ามันแค่เพิ่ม 1 ตัว Sidenote สำหรับผู้อ่านรายอื่น: หากไม่มีกฎข้อแรกของความท้าทายโซลูชัน Matlab จะมีความยาว 3 ตัวอักษรเท่านั้น
Dennis Jaheruddin

ใช่นั่นเป็นตัวพิมพ์ผิด หนี้! ขอบคุณสำหรับการสังเกต ... อย่างน้อยวิธีที่สอง (น่าสนใจกว่าเล็กน้อย) นั้นถูกต้อง =)
Stewie Griffin

3

C 77

main(){int n;scanf("%d",&n);char c[]={n%4>1?'-':' ',~n%2?'1':'i',0};puts(c);}

ปรับปรุงขอบคุณ Ruslan

C 74-5 = 69

โอ้และแน่นอนวิธีการที่ชัดเจนที่สุด

main(){unsigned n,*c[]={"1","i","-1","-i"};scanf("%d",&n);puts(c[n%4]);}

2
คุณสามารถลบวงเล็บรอบn%2และใช้~แทน!เพราะกวนnแรกแล้ว%ไอเอ็นจีมี 2 n<(1<<32)-1จะให้ผลเหมือนกันอย่างน้อยสำหรับ และ C ไม่จำเป็นต้องกำหนดประเภทผลตอบแทนสำหรับฟังก์ชั่นอย่างชัดเจนเพื่อให้คุณสามารถลบint ที่จุดเริ่มต้น และยังใช้แทน0 '\0'ดังนั้น -9 ตัวอักษร
Ruslan

3

OCaml 47

let m n=List.nth["1";"i";"-1";"-i"](n mod 4);;

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



2

ทับทิม 32-5 = 27

puts(%w[1 i -1 -i][gets.to_i%4])

ทำงานเพื่อพลังเชิงลบ!


คุณสามารถนิด ๆ puts %w[1 i -1 i][gets.to_i % 4]กีฬากอล์ฟแห่งนี้มากขึ้นด้วย
ฮิสโทแกต

2

Perl, 26 - 5 = 21

say qw(1 i -1 -i)[pop()%4]

ทำงานเป็นโปรแกรมแบบสแตนด์อโลน (อาร์กิวเมนต์บน commandline) หรือเนื้อความของฟังก์ชัน


2

Java: 151 131-5 = 126

แข็งแรงเล่นกอล์ฟ:

class A{public static void main(String[]a){int n=Integer.parseInt(a[0]);System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}}

Ungolfed:

class A {
    public static void main(String[] a) {
        int n = Integer.parseInt(a[0]);
        System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
    }
}

ในฐานะที่เป็นฟังก์ชั่น: 72-5 = 67

แข็งแรงเล่นกอล์ฟ:

void f(int n){System.out.print(n%4==0?"1":n%4==1?"i":n%4==2?"-1":"-i");}

Ungolfed:

public void f(int n) {
    System.out.print(n % 4 == 0 ? "1" : n % 4 == 1 ? "i" : n % 4 == 2 ? "-1" : "-i");
}

ใช่แล้วยังมีคำตอบของ Java อีกชุดและทำให้แย่ลงกว่าเดิม แต่คุณทำงานกับสิ่งที่คุณสามารถ ...

แก้ไข : เพิ่มรุ่นฟังก์ชั่น

แก้ไข 2 : ดังนั้นหลังจากการลองผิดลองถูกนี่เป็นรุ่นที่พยายามทำโดยหนังสือโดยไม่ต้องสำรวจช่องโหว่ของวงจร ดังนั้น…

Java พร้อมการคำนวณค่า: 146-15 = 131

แข็งแรงเล่นกอล์ฟ:

class B{public static void main(String[]a){float n=Float.parseFloat(a[0]);System.out.print(Math.cos((n*Math.PI)/2)+Math.sin((n*Math.PI)/2)+"i");}}

Ungolfed:

class B {
    public static void main(String[] a) {
        float n = Float.parseFloat(a[0]);
        System.out.print(Math.cos((n * Math.PI) / 2) + Math.sin((n * Math.PI) / 2) + "i");
    }
}

(อย่างน้อยฉันคิดว่าฉันสามารถรับโบนัสสูงสุดแก้ไขให้ฉันเป็นอย่างอื่นได้)


คุณสามารถลดรหัสของคุณถ้าคุณส่งไปยังหลักเป็นอาร์กิวเมนต์
user902383

@ user902383 ฉันสามารถสร้างฟังก์ชั่นได้เสมอ อาจจะโพสต์ทั้งสองรุ่นด้วย
Rodolfo Dias

จริงๆแล้วฉันกำลังคิดที่จะแยกวิเคราะห์มันดังนั้นคุณจะมีint n = Integer.parseInt(a[0])
user902383

@ user902383 เอาเป็นว่าจำไม่ได้ด้วยซ้ำ ยกนิ้วให้
Rodolfo Dias

2

Python - 31

print[1,'i',-1,'-i'][input()%4]

ฉันเพิ่งเริ่มเรียนรู้งูใหญ่ แม้ว่าฉันรู้ว่ามันไม่ดี แต่ฉันก็ทำได้ดีที่สุด


2

Haskell GHCi, 29 ไบต์ - 15 = 14

i p=[cos(p*pi/2),sin(p*pi/2)]

การใช้งาน:

*Main> i 0
[1.0,0.0]
*Main> i pi
[0.22058404074969779,-0.9753679720836315]
*Main> i (-6.4)
[-0.8090169943749477,0.5877852522924728]

2

R , 29 - 5 = 24 ไบต์

c(1,"i",-1,"-i")[scan()%%4+1]

ลองออนไลน์!

เช่นเดียวกับวิธีการส่วนใหญ่ข้างต้นใช้โมดูโลของ 4 และเพิ่มค่านั้นด้วย 1 เนื่องจากอาร์เรย์ของ R เป็นดัชนี 1 ทำงานสำหรับจำนวนเต็มลบเช่นกัน

ฉันกังวลเกี่ยวกับผลผลิตที่ผสมกันที่นี่ แต่จูเซปเป้ชี้ให้เห็นว่า R ได้รวมชนิดตัวเลขเป็นประเภทสตริงเมื่อผสมกัน



@Giuseppe blanked ทั้งหมดในนั้น ความกังวลของฉันคือว่าผลผลิตจะถูกผสมทางเทคนิค, สตริงครึ่ง, ตัวเลขครึ่ง
Sumner18

ไม่ r จะรวมnumericประเภทโดยอัตโนมัติcharacterเมื่อผสมกัน! หนังสือของ Hadleyอธิบายได้ค่อนข้างดี - เพียงกด Ctrl + F ถึง "Coercion" และคุณจะเห็น แต่หนังสือทั้งเล่มมีค่าต่อการอ่าน (สำหรับจุดประสงค์ที่ไม่ใช่การเล่นกอล์ฟเป็นส่วนใหญ่ แต่บางครั้งคุณก็เล่นกลหรือสองคน )
จูเซปเป้


1

Haskell, 29 ไบต์ - 5 = 24

f n=words"1 i -1 -i"!!mod n 4

ทำงานเพื่อพลังเชิงลบ

ฉันมีเวอร์ชั่นที่ไม่มีจุดหมาย แต่มันกลับกลายเป็นว่านานกว่านั้น

f=(words"1 i -1 -i"!!).(`mod`4)

1

Clojure ( 64 54 31 ตัวอักษร)

(defn i2n[n](println(case(mod n 4) 1 "i" 2 "-1" 3 "-i" 0 "1")))

แก้ไข

คำแนะนำของ Per @ SeanAllred ต่อไปนี้เป็นเวอร์ชันที่ใช้เวกเตอร์ตัวอักษรแทนที่จะเป็นcaseฟังก์ชัน:

(defn i2n[n](println (["1" "i" "-1" "-i"] (mod n 4))))

แก้ไข 2

โดยการนับบน REPL เพื่อพิมพ์คอลเลกชันผลลัพธ์และการเข้ารหัสฟังก์ชันโดยใช้#()ทางลัดที่เราสามารถลดได้

#(["1" "i" "-1" "-i"](mod % 4))

(อันที่จริงแล้ว Clojure / Lisp-ish มากขึ้นขณะที่ฟังก์ชั่นตอนนี้จริง ๆ แล้วส่งคืนผลลัพธ์ที่สร้างขึ้นช่วยให้ฟังก์ชั่นที่จะใช้กับmapเช่นใน

(map #(["1" "i" "-1" "-i"](mod % 4)) [0 1 2 3 4 5 6 7 8])

ซึ่งพิมพ์

("1" "i" "-1" "-i" "1" "i" "-1" "-i" "1")

แบ่งปันและเพลิดเพลิน


แทนที่จะใช้โครงสร้างที่เลือกคุณไม่สามารถใช้อาเรย์ที่ชัดเจนบางประเภทในคำตอบของฉันได้หรือไม่?
ฌอน Allred


1

C 105 คือ 117

char c[2];
int main()
{
int n,i,j=0;scanf("%d",&n);i=n%4;
i>1?c[j++]='-':c[j+1]='\0';
c[j]=i&1?'i':'1';
puts(c);
}

มันไม่ได้รวบรวมเพราะคุณต้องวงเล็บการกำหนดหลังจาก:ใน?:งบในธรรมดา C นอกจากนี้สิ่งที่จุดของการใช้0==0เมื่อคุณสามารถใช้ถ่านเดียว1? ?และไม่จำเป็นต้องอยู่ในวงเล็บก่อน นอกจากนี้ที่ผ่านมาคำสั่งอาจจะลงไป?: c[j]=i&1?'i':'1';
Ruslan

@Ruslan ใน CodeBlocks Mingw มีเพียง 1 คำเตือนรอบฉัน & 0 ฉัน & 0 == 0 คือการทดสอบแม้ว่าฉันจะได้ผลลัพธ์เป็น 0 อย่างอื่นก็คือ 1
bacchusbeale

ใช่ แต่สิ่งที่เป็นจุดใช้0==0เมื่อมันเหมือนกัน1หรือไม่ โปรดทราบว่า==มีความสำคัญมากกว่า&มิฉะนั้นการทดสอบ (ควร) ของคุณ(i&0)==0จะเป็นจริงเสมอ
Ruslan

1

PARI / GP , 26 - 5 = 21

n->Str([1,I,-1,-I][n%4+1])

n->cos(t=Pi*n/2)+I*sin(t)สั้นกว่าหนึ่งตัวอักษร แต่ไม่สามารถตอบได้อย่างแม่นยำ แน่นอนn->I^nไม่ได้รับอนุญาตและน่าจะเป็นของ PARI powIsด้วย


1

เยลลี่ , 2 - 20 = -18 ไบต์

ı*

ลองออนไลน์!

มันไม่ได้ใช้i ^ xbuiltin แต่ใช้ builtins สำหรับ1jและ**ไม่แน่ใจว่าได้รับอนุญาตหรือไม่


"หากภาษาของคุณรองรับตัวเลขที่ซับซ้อนอย่าใช้ฟังก์ชั่นหรือเลขคณิตใด ๆ ที่สามารถแก้ปัญหานี้ได้" ฉันคิดว่ามันค่อนข้างชัดเจน ...
สิ้นเชิงมนุษย์

@tallyallyhuman เอ่อฉันไม่แน่ใจว่า1j ตัวอักษรถูกแบนหรือไม่?
Erik the Outgolfer

ใช่ แต่เลขคณิต ( *) คือ
สิ้นเชิงมนุษย์

1
@tallyallyhuman หืมฉันอาจจะเพิ่มเวอร์ชันอื่นด้านล่างถึงแม้ว่า "ไม่ใช้ฟังก์ชั่นหรือเลขคณิตใด ๆ ที่สามารถใช้งานได้" ดูเหมือนว่าจะแนะนำว่าฉันไม่สามารถใช้งานบิวด์อินเพื่อทำงานที่แน่นอนนี้ ... BTW ในแบบที่เขาพูดถึงทำให้ฉันคิดว่าคุณได้รับการสนับสนุนให้ใช้1jตัวอักษร
Erik the Outgolfer

1

05AB1Eคะแนน 5 (10 ไบต์ - 5 โบนัส)

'i®„-i1)Iè

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบบางมากขึ้น

คำอธิบาย:

'i         '# Push character "i"
  ®         # Push -1
   „-i      # Push string "-i"
      1     # Push 1
       )    # Wrap everything on the stack into a list: ["i", -1, "-i", 1]
        Iè  # Use the input to index into it (0-based and with automatic wrap-around)
            # (and output the result implicitly)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.