Bulunan i ^ n, n verilen


27

Meydan okuma

Mümkün olduğu kadar az karakterde, n, 0'dan büyük bir pozitif tamsayı verilen i ^ n değerini bulun. Bu bir String olarak verilmelidir.

Bilmeyenler için, i ^ 2 = -1 olacak şekilde tanımlanır. Yani:

  • i ^ 1 = i
  • i ^ 2 = -1
  • I ^ 3 = -i
  • i ^ 4 = 1

Bu daha sonra tekrarlar ..

kurallar

  • Diliniz karmaşık sayıları destekliyorsa, bunu çözebilecek hiçbir işlev veya aritmetik kullanmayın.
  • Kayan nokta yanlışlıkları, yine de ondalık sayı döndürecek cevaplar için iyidir, ancak tamsayı girişleri kesin sonuçlar vermelidir.

Bonus puanlar

-5 n'nin negatif olduğu yerlerde bu değeri hesaplayabilirsiniz

-15 Herhangi bir gerçek sayının değerini hesaplayabilirseniz (bu bonus yukarıdaki bonustan -5 içerir)

İyi şanslar!


1
Tam olarak hangi formatta dönüyoruz? Fonksiyon çıkışı veya stdout ile?
Gurur haskeller 21:14

@ proudhaskeller wiki etiketi bunun için varsayılanları listeler. Aksi belirtilmedikçe, işlevler ve programlar gayet iyi, işlev argümanı, STDIN veya komut satırı argümanı üzerinden giriş ve STDOUT veya işlev dönüş değeri üzerinden çıktı. İşlevlerin adlandırılması gerekmez.
Martin Ender

1
@ MartinBüttner, ancak eğer işlev çıktısını seçersem, çıktım kendi dilimde yerel karmaşık numaralar olmadan nasıl biçimlendirilmeli / saklanmalıdır?
Gurur haskeller

16
@BetaDecay Kayan nokta tam sayıları nedir? oO
Martin Ender

2
@ MartinBüttner Haha yanlış kelime: / Kayan nokta sayısı o zaman
Beta Decay

Yanıtlar:


15

Ruby, skor -2

(13 bayt, -15 bonus)

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

Özellikleri şunlardır: yuvarlama hatası yok! (girişi Rasyonel olarak iletirseniz)


yazar Kezz101 tarafından yayınlanmıştır

Herhangi bir gerçek sayıyı destekliyorsanız, geçerli bir karmaşık biçimde çıktı alabilirsiniz.

Negatif puanlar adrenalin seviyemi artırıyor. Böylelikle kötüye kullanılan kurallar , bu soylu hedefe ulaşmak için kullanılır.

Anonim bir işlev oluşturur ve kutupsal formda karmaşık bir sayıyı temsil eden 2 girişli bir dizi çıkarır (açısal birim: derece).


4
"Yakut, -2 bayt" .....
FantaC

3
Peki, bu 1.000.000.000.000 kez indirme, bana 2 TB boş sabit disk alanı sağlıyor mu? Bana iyi bir anlaşma gibi geliyor.
Redwolf Programları

^ Bunu yapmadan önce tarayıcım bozuldu. Belki de içindeki dosyayla bir "zip bombası" deneyebilirsin? (Bu alandan tasarruf ayıklanıyor.)
A

15

CJam, 12 karakter - 5 = 7

1'iW"-i"]li=

Burada test et.

Negatif girişleri destekler.

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.";

Sonuç, programın sonunda otomatik olarak yazdırılır.

Mathematica, 22 20 19 karakter - 15 = 4

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

Bu, kullanabileceğiniz anonim bir işlevdir.

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

(Ya da fsöylemesi için atama yapın ve yapın f[15].)

Gerçekleri destekler ve tamsayı girişi için kesin sonuçlar verir.

Not iolduğu değil MATHEMATICA karmaşık i (ki I). Bu sadece tanımsız bir değişken.

Ayrıca, ifadenin sırasına rağmen, Mathematica çıktıyı yeniden düzenleyecektir R+Ci.


İhtiyacın yok 4%. Otomatik olarak yapılabilir.
jimmy23013 21:14

@ user23013 şık :)
Martin Ender

8
İki cevap ayrı mı olmalı?
Justin

@ Quincunx Belki ... Aslen ikisi de CJam'daydı, bu yüzden aynı cevabı verdim. Fakat ikincisi geçerli değildi, ben de onu Mathematica'ya aktardım, ama olduğu yerde bıraktım. İnsanlar ısrar ederse onları bölebilirim.
Martin Ender

Ve f@15bunun yerine bir karakteri kullanarak kaydedebilirsiniz f[15].
23

14

Python 2 - (24-5) = 19

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

Kredilerin çoğu @ user2357112'ye aittir, bu cevaba yapılan yorumdaki cevabını biraz daha arttırdım .

Açıklama: n%4Dizedeki dizinden başlar '1i--'. Sonra dizedeki her harfin üzerinde iki adımda geriye doğru yinelenir. Bu nedenle, örneğin, n=6ilk önce 2. dizinde başlayacak -, sonra geri dönecek ive sonra atlayacak .1-1

@ xnor aynı uzunlukta bir çözümü işaret etti:

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

Pyth - (14-5) = 9

Ne kadar ters / dilim / etc denemeye çalışsam da sadece 14 elde edebiliyorum. : '(

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

Temelde yukarıdaki python cevabı ile aynıdır, ancak 2 adımda, çünkü pythhon tam indeksleme seçeneklerini desteklemez. Çevrimiçi deneyin.

İsaacg ile Pyth indeksleme hakkında konuşacağım;)


Python'un lambdabir değişkene atanması gerekmez mi? En azından, onu çağırmak için iki bayt ekleyerek parantez içine almanız gerekir (lambda...)(n).
mbomb007

@ mbomb007 Metaya göre bu kabul edilebilir. Buradaki kod, görevi gereken şekilde yapan bir işlev yaratır. Anonim lambdalar python içinde mapve gibi fonksiyonlar için nispeten sık kullanılır sorted.
FryAmTheEggman

11

TI-BASIC (NSpire) - 5 (20 karakter-15)

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

Karmaşık bir geri dönüş değeri almak istiyorsanız i, sondaki (karmaşık i) ile değiştirin.


@ MartinBüttner TI-Basic bir tür 'İfade' türü kullanıyor gibi görünüyor ve yerleşik yöntemler bunlar için kesin sonuçlar veriyor.
Shujal

Anladım, hepsi iyi o zaman. ;)
Martin Ender

"Diliniz karmaşık sayıları destekliyorsa, bu sorunu çözebilecek herhangi bir işlev veya aritmetik kullanmayın." + i aritmetik
edc65

@ edc65 + aslında karmaşık bir işlemdir. Bununla birlikte, beğenmediyseniz, normal bir şeyle değiştirin i. Değişken itanımlanmadıysa, ibunun yerine sadece ile birlikte karmaşık sayıyı alırsınız . Sadece gerçek ve hayali kısımları ayrı ayrı hesaplıyorum.
54'te Shujal

1
@Shujal Bu durumda, iyine de kullanmanız gerektiğini düşünüyorum . Karmaşık ben sorulan karakter bile değil ve iki bayttan tasarruf edecek, bu yüzden en azından benimle bağlarsın;).
Martin Ender

7

Mermer , 43 bayt

Gerçekten bir kazanan değil, ama Marbelous eğlencelidir. :)

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

Bu, girişi ilk komut satırı argümanından tek bir tam sayı olarak okuyan bir programdır. Girişin modulo 256 alındığını, ancak bunun 255'ten büyük girişler için sonucun geçerliliğini etkilemediğini unutmayın, çünkü 256 4 ile bölünebilir.

açıklama

Marbelous, bir grup cihazdan düşen "mermerleri" (bayt değerleri) simüle eden 2B programlama dilidir. Tahta, misketleri işleyebilen 2 karakterlik geniş hücrelerden (aygıtlar) oluşur. Bir tahtanın altından düşen her şey STDOUT'a yazdırılır.

Kullanılan cihazları inceleyelim:

  • }0ilk komut satırı argümanının gittiği yerdir. Bu cihazın iki örneğini kullandım, bu yüzden giriş değerinin iki kopyasını aldım (aynı anda).
  • ^ndenetler n(giriş mermer inci biti n=0anlamlı bit azından) ve üreten 1ya da 0bit bağlı olarak değişebilir.
  • =0eşitliği denetler 0. Giriş mermeri eşit ise, doğrudan düştü, değilse sağa doğru itilir.
  • \/ bir çöp tenekesidir, bu nedenle yalnızca giriş mermerini yutar ve hiçbir şey üretmez.
  • 2DASCII kodu -, 31ASCII kodu 1ve 69ASCII kodudur i.
  • &nSenkromeçler vardır. Senkronizatörler, aynı senkronizatörler bir mermer tutuncaya kadar bir mermer durur n, bu noktada depolanan mermerlerinin düşmesine izin verir.

Aslında, yaptığım şey, üç ilgili karakterin üç senkronizatörde tutulması ve girişte en az anlamlı bitlerin nasıl ayarlandığına bağlı olarak bunları serbest bırakmak.

Daha fazla bilgi için teknik taslağa bakınız .


1
Bunu gerçekten beğendim! Marbelous sesler fab birazdan bir süre sonra kontrol etmem gerekecek :)
Kezz101

3
Kezz101 @ Biz Spec taslağı var burada
Martin Ender

Oh iyi! Gerçekten ilginç görünüyor
Kezz101

Komut satırındaki ana panoya giriş verebileceğinizi unutmayın, bu yüzden bu pano olduğu gibi kullanılabilir.
Sparr

1
@overactor Hm, bilmiyorum ... ek karakterler basmak (yazdırılamaz olsalar bile) hala benim için çıkış biçimini ihlal ediyor gibi görünüyor. Yine de meta bir soruya değebilir.
Martin Ender

6

JavaScript (ES6) 29-5 = 24

Negatif gücü destekler.

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

ES5:

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

Evet, daha kısa ( f=n=>[1,'i',-1,'-i'][n%4]). Ama daha az seksi ve olumsuz güçleri desteklemeyecek. Sanırım ikramiye bağlı.
Michael M.

Hayır, 29 bayt. Negatif bu kodla desteklenir.
Michael M.

JS'nin bitsel bir &operatörü var mı? Eğer öyleyse, &3gerçek bir modül-4 işlemi için yapabilirsiniz. Düzenleme: &2cevabınızda kullanıldığı gibi görünüyor ...
feersum

5

Python 28 bayt - 5 = 23

-Ve girişleri destekler.

Lambda işlevlerinin kabul edilebilir olduğunu varsayarak (Teşekkürler FryAmTheEggman!):

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

aksi takdirde 31 bayt - 5 = 26

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

1
Tam olarak arayamazsın. Erişebileceğiniz bir yerde saklamanız gerekir. Yapabileceğin Yani foo=...ya Yapabileceğin map(<your lambda>,range(10))değerlerinin bir listesini almak için i^ngelen 0-9.
FryAmTheEggman 21:14

2
Temel olarak, eğer daha açıksa, bir fonksiyon işaretçisi yapıyorsunuz: P
FryAmTheEggman 21:14

3
@DigitalTrauma: Evet, dize dilimleme püf noktaları ile daha iyisini yapabilirsiniz. Örneğin, lambda n:'--1i'[n%4-2::2].
user2357112

2
User2357112 adlı kullanıcının yayınını çevirmek için: gelen her karakter atın '--1i'endeksinde başlayan n%4-2. Python negatif bir indeks aldığında, dizinin sonundan kalan birçok pozisyonun başlayacağı ve sonra yukarı gidecek 0. Bu yolla, 0ve 1asla -işaretlere çarpma , süre 3ve çarpma 4.
FryAmTheEggman

1
lambda n:n%4/2*'-'+'1i'[n%2]Alanı kaldırır ve daha kısadır :)
FryAmTheEggman

4

(Emacs) Lisp - 34

Sadece eğlence için, (Emacs) Lisp:

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

Kullanmak istiyorsanız, bir kullanın defunveya kullanın 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 karakter - 15 bonus = puan -7

Yerleşik (ve bu nedenle yasaklanmış) işlev 0J1*⊢, ancak bu @ blutorange yöntemini kullanır .

¯12○.5×○

Meydan yazarı Kezz101 şunları yazdı :

Herhangi bir gerçek sayıyı destekliyorsanız, geçerli bir karmaşık biçimde çıktı alabilirsiniz.

Bu aJb, APL'nin karmaşık sayıları göstermesi için normal yol olan biçimde karmaşık bir sayı döndürür .

Çevrimiçi deneyin!

açıklama

¯12○ açısı radyan cinsinden olan birim vektörü bulmak

.5× bir buçuk kez

 argüman 𝜋 (daire sabiti) ile çarpılır


3

Saf bash, 29 bayt - 5 = 24

-Ve girişleri destekler.

a=(1 i -1 -i)
echo ${a[$1%4]}

3

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

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

Negatif tamsayıları destekler. Bu çözümle herhangi bir ödül kazanamayacaksınız, ama her neyse.

Sadece girdi olarak kabul edilen bir sayıyı kabul eder, (hileli bir şekilde, test etmek için kullandığım tercümandaki negatif sayılar için normal sayı gibi çalışmayan) modülde bazı hileler yapar ve negatifler için çalışmak için bazı aptal şartlamalar yapar. Her karakterin ne olacağına karar ver.

Bunun daha fazla golf oynayabileceğinden eminim. Şimdilik, negatifleri kabul etmeyen, ancak ikramiyeyi daha kısa tutarak kaybettiren başka bir çözüm:

Befunge-98, 32 26 23

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

Düzenleme - Şimdi "-" öğesinin "" karakterinden 13 (0xd) karakter uzakta olmasından yararlanır.

Düzen 2 - Şimdi, yine, "i" nin '8"1" den 56 (0x38 veya veya ) karakter uzakta olması gerçeğinden faydalanır .


3

Java 8 Puanı: 72

Java'da şimdiye kadarki en kötü golf dili! golfed:

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

Expanded:

class Complex{

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

}

Not: Java 8'e alışkın değilim. Ayrıca henüz çalışma zamanım yok Lütfen sözdizimi hataları varsa bana bildirin. Bu da benim ilk golf.

Düzenleme: Kaldırıldı import.

Düzenleme: Kaldırılan sınıf bildirimi.

Skorlu bir başka cevap = 87 - 15 = 72

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

Expanded:

class Complex{

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

}

Sen bazı kaydedebilirsiniz "ithal java.util *."
Anubian Noob

@Anubian Noob Sınıf Fonksiyonu pakette java.util.functiondeğil java.util(veya yanlış mıyım?).
TheNumberOne

Ama bunu yaparsanız paketi altında araç ithal herşeyi. Tıpkı şu anda paketteki tüm sınıfları içe aktardığınız gibi . java.util.*.*fuction
Anubian Noob,

5
@ Anubian Noob importyalnızca bu paketteki sınıfları alır. Bu sınıftaki hiçbir paketi o paketteki paketlerden içe aktarmaz. Örneğin, sınıf Functionpaket içinde java.util.functionancak paket içinde değildir java.util.
TheNumberOne

Ah, benim hatam, bunun için üzgünüm.
Anubian Noob

3

MATLAB, 33 bayt - 5 = 28

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

Birkaç byte daha fazla olmasına rağmen (37-5 = 32), bu yaklaşımı daha çok seviyorum:

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

i^3olduğu -iziyade, ibu sadece 1 kömürü ekler sanırım. - Diğer okuyucular için sidenote: Mücadelenin ilk kuralı olmadan, Matlab çözümü sadece 3 karakter uzunluğunda olacaktı.
Dennis Jaheruddin

Evet, bu bir yazım hatası oldu. Sabit! Fark ettiğiniz için teşekkür ederiz ... En azından ikinci (biraz daha ilginç) yaklaşım doğrudur =)
Stewie Griffin

3

C 77

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

Ruslan sayesinde iyileştirildi

C 74-5 = 69

Oh ve tabii ki en açık yaklaşım

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

2
Önce parantezleri çıkarabilir n%2ve kullanabilirsiniz ~, !çünkü nönce olumsuzlamak , sonra %2 ile yazmak en azından bunun için aynı sonucu verecektir n<(1<<32)-1. Ve C, fonksiyon için dönüş tipini açıkça tanımlamayı gerektirmediğinden int başlangıçta kaldırabilirsiniz . Ve ayrıca 0yerine kullanın '\0'. Böylece -9 karakter.
Ruslan

3

OCaml 47

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

Ödüllü bir çözüm değil, ancak bu ilk defa kod-golf'üm, bu yüzden ne yaptığımdan tam olarak emin değilim. Desen eşleştirmeyi kullanmaya çalıştım, ama bu beni 58'den fazla aldı.



2

Yakut 32-5 = 27

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

Negatif güçler için çalışıyor!


Bununla daha da fazlasıyla golf oynayabilirsiniz puts %w[1 i -1 i][gets.to_i % 4].
histocrat

2

Perl, 26 - 5 = 21

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

bağımsız bir program (komut satırındaki argüman) veya bir işlevin gövdesi olarak çalışır.


2

Java: 151 131-5 = 126

golfed:

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

Bir fonksiyon olarak: 72-5 = 67

golfed:

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

Evet, başka bir Java cevabı - ve hiç olmadığı kadar kötü bir şekilde golf oynadı. Ama elinden geleni yapıyorsun.

EDIT : işlev sürümü eklendi.

EDIT 2 : biraz deneme yanılma sonra, döngü kaçamak keşfetmeden, kitap tarafından yapmaya çalışan bir sürüm. Yani…

Değer hesaplamalı Java: 146-15 = 131

golfed:

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

(en azından, sanırım en yüksek bonusu talep edebilirim, başka türlü düzeltebilirim)


Eğer argüman olarak main'e iletirseniz kodunuzu azaltabilirsiniz.
user902383

@ user902383 Gerçekten, her zaman bir işlev yapabilirdim. Muhtemelen iki versiyonu da yayınlayacak.
Rodolfo Dias

aslında onu ayrıştırmayı düşünüyordum, bu yüzden sahip olacaksınint n = Integer.parseInt(a[0])
user902383

@ user902383 Daaaaamn, bunu hatırlamadı bile. yaşasın
Rodolfo Dias

2

Python - 31

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

Python'u daha yeni yeni öğrenmeye başladım. İyi olmadığını bilmeme rağmen, yapabileceğimin en iyisi.


2

Haskell GHCi, 29 Bayt - 15 = 14

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

Kullanımı:

*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 bayt

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

Çevrimiçi deneyin!

Yukarıdaki yöntemlerin çoğunda olduğu gibi, 4'lük bir modülo alır ve R'nin dizileri 1 indeksli olduğundan 1 ile artar. Negatif tamsayılar için de çalışır.

Buradaki karışık çıktılar için endişelendim ama Giuseppe, R'nin sayısal türleri, karıştırıldığında string türlerine zorladığına dikkat çekti.



@Giuseppe Bu konuda tamamen boşverdim. Benim endişem, çıktının teknik olarak karışık, yarım dize, yarı sayısal olmasıdır.
Sumner18

Hayır, R otomatik olarak numerictürleri characterkarıştırıldıklarında zorlar ! Hadley'nin kitabı bunu oldukça iyi açıklıyor - sadece "Zorlama" dan sadece Ctrl + F'ye bakacaksınız ve göreceksiniz, ama bütün kitap okunmaya değer )
Giuseppe


1

Haskell, 29 bayt - 5 = 24

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

Negatif güçler için çalışıyor.

Sorunsuz bir sürümü çalıştı, ancak aslında daha uzun olduğu ortaya çıktı.

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

1

Clojure ( 64 54 31 karakter)

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

Düzenle

@ SeanAllred'in önerisine göre, işte caseişlev yerine değişmez vektör kullanan bir sürüm :

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

Düzenle 2

Elde edilen koleksiyonu yazdırmak için REPL'e güvenerek ve #()kısayolu kullanarak işlevi kodlayarak,

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

(Bu aslında çok daha fazla olan Clojure / Lisp-ish işlevi artık üretilen sonucu döndürür, fonksiyonun olduğu gibi kullanılmasına izin verir map.

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

hangi yazdırır

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

Paylaş ve Keyfini çıkar.


Bunun yerine seçkin bir yapıya kullanmak yerine, olduğu gibi açık dizinin çeşit kullanamaz Cevabıma ?
Sean 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);
}

Peşinde atamaları parenthesize gerekir çünkü Hatta derleme değil :de ?:kullanmanın ne anlamı var, ayrıca düz C. ifadeleri 0==0Eğer tek karakter kullanabilirsiniz zaman 1? Ve daha önce parantez içinde gerek yok ?. Ayrıca, son ?:ifade kısaltılabilir c[j]=i&1?'i':'1';.
Ruslan

@Ruslan CodeBlocks Mingw'de i & 0 etrafında sadece 1 uyarı var. i & 0 == 0 eşit olsa bile, sonuç 0 ise 1 olur.
bacchusbeale 25:14

Evet, fakat 0==0aynı olduğunda ne kullanmanın amacı 1nedir? Bundan ==daha yüksek önceliğe sahip olduğunu unutmayın &, aksi takdirde (sözde) testiniz (i&0)==0her zaman doğru olacaktır.
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)bir karakterden daha kısa, ancak kesin cevaplarla ilgilenmiyor. Tabii ki n->I^n, izin verilmeyen ve muhtemelen de PARI's powIs.


1

Jöle , 2 - 20 = -18 bayt

ı*

Çevrimiçi deneyin!

Bir i ^ xyerleşik kullanmaz, ancak bunun için yerleşik kullanır 1jve **izin verilip verilmediğinden emin değil.


“Diliniz karmaşık sayıları destekliyorsa, bunun için çalışabilecek herhangi bir işlev veya aritmetik kullanmayın.” Bence çok açık ...
tamamen insan

@totallyhuman Eh, 1j değişmezin yasak olmasına rağmen emin değilim ?
Outgolfer Erik

Evet, ama aritmetik ( *).
tamamen insanlık

1
@totallyhuman Hm, belki aşağıya bir sürüm daha ekleyeceğim, ancak "bu işe yarayabilecek herhangi bir işlev ya da aritmetik kullanmayın" olsa da bu işi yapmak için yerleşik bir sistem kullanamayacağımı gösteriyor gibi görünüyor ... BTW'yi ifade etme şekli, değişmezleri kullanmaya teşvik edildiğinizi düşünmemi sağlıyor 1j.
Outgolfer Erik

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.