Tantangan
Dalam sesedikit mungkin karakter, temukan nilai i ^ n, dengan n, bilangan bulat positif lebih besar dari 0. Ini harus dikeluarkan sebagai String.
Bagi mereka yang tidak tahu, saya didefinisikan sedemikian sehingga i ^ 2 = -1. Begitu:
- i ^ 1 = i
- i ^ 2 = -1
- i ^ 3 = -i
- i ^ 4 = 1
Ini kemudian berulang ..
Aturan
- Jika bahasa Anda mendukung bilangan kompleks, jangan gunakan fungsi atau aritmatika apa pun yang bisa menyelesaikan masalah ini.
- Ketidaktepatan titik apung baik untuk jawaban yang akan mengembalikan desimal, tetapi input bilangan bulat harus memberikan hasil yang tepat
Poin Bonus
-5 jika Anda dapat menghitung n di mana n juga negatif
-15 jika Anda dapat menghitung nilai untuk bilangan real mana pun (bonus ini termasuk -5 dari bonus di atas)
Semoga berhasil!
code-golf
math
arithmetic
complex-numbers
Kezz101
sumber
sumber
Jawaban:
Ruby, skor -2
(13 byte, -15 bonus)
Fitur termasuk: tidak ada kesalahan pembulatan! (jika Anda memasukkan input sebagai Rasional)
diposting oleh penulis, Kezz101
Skor negatif membuat adrenalin saya bergerak maju. Dengan demikian aturan yang
disalahgunakandigunakan untuk mencapai tujuan mulia ini.Menciptakan fungsi anonim dan menghasilkan array dengan 2 entri yang mewakili bilangan kompleks dalam bentuk kutub (unit sudut: derajat).
sumber
CJam, 12 karakter - 5 = 7
Uji di sini.
Mendukung input negatif.
Hasilnya dicetak secara otomatis di akhir program.
Mathematica,
222019 karakter - 15 = 4Ini adalah fungsi anonim, yang bisa Anda gunakan seperti
(Atau tetapkan untuk
f
mengatakan, lalu lakukanf[15]
.)Mendukung real dan memberikan hasil yang tepat untuk input integer.
Perhatikan bahwa
i
ini bukan kompleks Mathatica i (yangI
). Itu hanya variabel yang tidak ditentukan.Selain itu, terlepas dari urutan ekspresi, Mathematica akan menyusun ulang output menjadi
R+Ci
bentuk.sumber
4%
. Itu bisa dilakukan secara otomatis.f@15
sebagai gantinyaf[15]
.Python 2 - (24-5) = 19
Sebagian besar kredit milik @ user2357112, saya baru saja menambahkan jawabannya dari komentar pada jawaban ini sedikit lebih banyak.
Penjelasan: Mulai dari indeks
n%4
dalam string'1i--'
. Kemudian beralih mundur di langkah dua atas setiap huruf dalam string. Jadi, misalnya,n=6
akan mulai dari indeks 2, yang pertama-
, lalu lewatii
dan ambil1
, untuk kembali-1
.@xnor menunjukkan solusi dengan panjang yang sama:
Pyth - (14-5) = 9
Saya hanya bisa mendapatkan 14, tidak peduli bagaimana saya mencoba untuk membalik / mengiris / dll. : '(
Yang pada dasarnya sama dengan jawaban python di atas, tetapi dalam 2 langkah, karena pyth tidak mendukung opsi pengindeksan penuh python. Cobalah online.
Aku akan pergi berbicara dengan isaacg tentang pengindeksan Pyth;)
sumber
lambda
perlu ditugaskan ke variabel? Paling tidak bervariasi, untuk menyebutnya Anda harus mengelilinginya dengan tanda kurung, menambahkan dua byte sehingga bisa dipanggil(lambda...)(n)
.map
dansorted
.TI-BASIC (NSpire) - 5 (20 karakter-15)
Jika Anda ingin menerima nilai pengembalian yang kompleks, ganti
i
di akhir dengan
(complex i).sumber
dengan yang normali
. Jika variabeli
tidak didefinisikan, Anda akan mendapatkan bilangan kompleks, hanya dengani
alih - alih
. Saya hanya menghitung bagian nyata dan imajiner secara terpisah.i
tetap menggunakan . Kompleks saya bahkan bukan karakter pertanyaan yang ditanyakan, dan itu akan menghemat dua byte, jadi Anda setidaknya akan mengikat saya;).Marbelous , 43 byte
Bukan pemenang, tapi Marbelous menyenangkan. :)
Ini adalah program yang membaca input sebagai integer tunggal dari argumen baris perintah pertama. Perhatikan bahwa input diambil modulo 256, tetapi ini tidak mempengaruhi validitas hasil untuk input yang lebih besar dari 255, karena 256 dapat dibagi dengan 4.
Penjelasan
Marbelous adalah bahasa pemrograman 2D, yang mensimulasikan "kelereng" (nilai byte) yang jatuh melalui banyak perangkat. Papan terdiri dari sel-sel lebar 2-karakter (perangkat), yang dapat memproses kelereng. Segala sesuatu yang jatuh dari bagian bawah papan dicetak ke STDOUT.
Mari kita lihat perangkat yang digunakan:
}0
adalah tempat argumen baris perintah pertama berjalan. Saya telah menggunakan dua contoh perangkat ini, jadi saya mendapatkan dua salinan dari nilai input (pada saat yang sama).^n
memeriksan
bit ke-marmer input (di manan=0
bit paling signifikan), dan menghasilkan1
atau0
tergantung pada bit.=0
memeriksa kesetaraan dengan0
. Jika input marmer sama, ia akan langsung jatuh, jika tidak didorong ke kanan.\/
adalah tempat sampah, jadi itu hanya menelan input marmer dan tidak pernah menghasilkan apa pun.2D
adalah kode ASCII-
,31
adalah kode ASCII1
dan69
adalah kode ASCII darii
.&n
adalah synchronisers. Sinkronisasi menghentikan marmer sampai semua sinkronisasi dengann
memegang marmer yang sama, pada titik mana mereka semua akan membiarkan marmer yang tersimpan jatuh.Jadi pada dasarnya, apa yang saya lakukan adalah menahan tiga karakter yang relevan dalam tiga sinkronisasi, dan melepaskan mereka tergantung pada bagaimana bit paling tidak signifikan diatur dalam input.
Untuk informasi lebih lanjut, lihat draf spesifikasi .
sumber
JavaScript (ES6) 29-5 = 24
Mendukung kekuatan negatif.
ES5:
sumber
f=n=>[1,'i',-1,'-i'][n%4]
). Tapi itu kurang seksi dan tidak akan mendukung kekuatan negatif. Itu tergantung pada bonus kurasa.&
operator bitwise ? Jika demikian, Anda dapat melakukannya&3
untuk operasi modulus-4 yang sebenarnya. Sunting: sepertinya itu seperti&2
yang digunakan dalam jawaban Anda ...Python 28 byte - 5 = 23
Mendukung input -ve.
Dengan asumsi fungsi lambda dapat diterima (Terima kasih FryAmTheEggman!):
jika tidak, 31 byte - 5 = 26
sumber
foo=...
, atau Anda bisa lakukanmap(<your lambda>,range(10))
untuk mendapatkan daftar nilaii^n
dari0-9
.lambda n:'--1i'[n%4-2::2]
,.'--1i'
mulai dari pada indeksn%4-2
. Ketika python mendapatkan indeks negatif, itu akan mulai banyak posisi yang tersisa dari akhir array, dan kemudian naik ke0
. Dengan cara ini,0
dan1
jangan pernah memukul-
tanda, sementara3
dan4
lakukan.lambda n:n%4/2*'-'+'1i'[n%2]
Menghapus ruang dan lebih pendek :)(Emacs) Lisp - 34
Hanya untuk bersenang-senang, di (Emacs) Lisp:
Jika Anda ingin menggunakannya, gunakan
defun
atau gunakanfuncall
:sumber
APL (Dyalog) , 8 karakter - 15 bonus = skor -7
Fungsi bawaan (dan karenanya dilarang) adalah
0J1*⊢
, tetapi ini menggunakan metode @ blutorange .Penulis tantangan, Kezz101, menulis :
Ini mengembalikan bilangan kompleks dalam bentuk
aJb
yang merupakan cara normal bagi APL untuk menampilkan bilangan kompleks.Cobalah online!
Penjelasan
¯12○
menemukan vektor satuan yang memiliki sudut dalam radian.5×
satu setengah kali○
argumen dikalikan dengan 𝜋 (konstanta lingkaran)sumber
Bash murni, 29 byte - 5 = 24
Mendukung input -ve.
sumber
Befunge-98,
41-5 = 3635-5 = 3032-5 = 27Mendukung bilangan bulat negatif. Tidak akan memenangkan penghargaan apa pun dengan solusi ini, tapi apa pun itu.
Ia hanya menerima angka sebagai input, melakukan beberapa tipu daya pada modulus (yang, sayangnya, tidak bekerja seperti modulus biasa untuk angka negatif pada interpreter yang saya gunakan untuk mengujinya) untuk membuat negatif bekerja, dan kemudian melakukan beberapa persyaratan konyol untuk tentukan masing-masing karakter yang seharusnya.
Saya yakin ini bisa bermain golf lebih jauh. Untuk saat ini, inilah solusi lain yang tidak menerima negatif, tetapi menebus kehilangan bonus dengan menjadi lebih pendek:
Befunge-98,
322623Sunting - Sekarang mengambil keuntungan dari kenyataan bahwa "-" berjarak 13 (0xd) karakter dari "".
Sunting 2 - Sekarang, sekali lagi, manfaatkan fakta bahwa "i" berjarak 56 (0x38, atau
'8
) karakter dari "1".sumber
Skor Java 8: 72
Di Jawa, bahasa golf terburuk yang pernah ada! Golf:
Diperluas:
Catatan: Saya tidak terbiasa dengan Java 8. Saya juga belum memiliki runtime untuk itu. Tolong beritahu saya jika ada kesalahan sintaksis. Ini juga golf pertama saya.
Edit: Dihapus
import
.Sunting: Deklarasi kelas yang dihapus.
Jawaban lain dengan skor = 87 - 15 = 72
Diperluas:
sumber
java.util.function
tidakjava.util
(atau aku salah?).java.util.*
dengan.*
cara impor segala sesuatu di bawah paket. Sama seperti saat ini Anda mengimpor semua kelas dalamfuction
paket.import
hanya mengimpor kelas dalam paket itu. Itu tidak mengimpor salah satu kelas dari paket dalam paket itu. Sebagai contoh, kelasFunction
ada dalam paketjava.util.function
tetapi tidak dalam paketjava.util
.MATLAB, 33 byte - 5 = 28
Meskipun beberapa byte lebih banyak (37-5 = 32), saya sebenarnya lebih menyukai pendekatan ini:
sumber
i^3
adalah-i
, daripadai
, kira itu hanya menambah 1 char - Sidenote untuk pembaca lain: tanpa aturan pertama dari tantangan, solusi Matlab hanya akan menjadi 3 karakter.C 77
Peningkatan berkat Ruslan
C 74-5 = 69
Oh dan tentu saja pendekatan yang paling jelas
sumber
n%2
dan menggunakan~
bukan!
karena meniadakann
terlebih dahulu, kemudian%
dengan 2 akan memberikan hasil yang sama, setidaknya untukn<(1<<32)-1
. Dan C tidak perlu secara eksplisit mendefinisikan tipe pengembalian untuk fungsi, sehingga Anda dapat menghapusint
di awal. Dan juga gunakan0
sebagai gantinya'\0'
. Dengan demikian -9 karakter.OCaml 47
Bukan solusi pemenang penghargaan, tapi ini adalah golf code pertama kali saya, jadi saya tidak begitu yakin dengan apa yang saya lakukan. Saya mencoba menggunakan pencocokan pola, tetapi itu membuat saya lebih dari 58.
sumber
Pari / GP , 19 byte - 5 = 14
Di
i
sini hanya sebuah simbol, bukan unit imajiner (yang adaI
di Pari / GP).Cobalah online!
sumber
Ruby 32-5 = 27
Bekerja untuk kekuatan negatif!
sumber
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26 - 5 = 21
berfungsi sebagai program mandiri (argumen pada commandline) atau badan fungsi.
sumber
Jawa:
151131-5 = 126Golf:
Tidak Disatukan:
Sebagai fungsi: 72-5 = 67
Golf:
Tidak Disatukan:
Ya, satu lagi balasan Java - dan bermain golf lebih buruk dari sebelumnya. Tetapi Anda bekerja dengan apa yang Anda bisa ...
EDIT : menambahkan versi fungsi.
EDIT 2 : jadi, setelah sedikit coba-coba, inilah versi yang mencoba melakukannya oleh buku, tanpa menjelajahi celah siklus. Begitu…
Java dengan perhitungan nilai: 146-15 = 131
Golf:
Tidak Disatukan:
(setidaknya, saya pikir saya bisa mengklaim bonus teratas, koreksi saya sebaliknya)
sumber
int n = Integer.parseInt(a[0])
Python - 31
Saya baru saja mulai belajar python. Meskipun saya tahu itu tidak baik, itu yang terbaik yang bisa saya lakukan.
sumber
Haskell GHCi, 29 Bytes - 15 = 14
Pemakaian:
sumber
R , 29 - 5 = 24 byte
Cobalah online!
Sama seperti kebanyakan metode di atas, mengambil modulo dari 4, dan meningkatkannya dengan 1, karena array R adalah 1-diindeks. Bekerja untuk bilangan bulat negatif juga.
Saya khawatir tentang output campuran di sini, tetapi Giuseppe menunjukkan bahwa R memaksa tipe numerik ke tipe string ketika mereka dicampur.
sumber
numeric
tipecharacter
ketika mereka dicampur! Buku Hadley menjelaskan ini dengan cukup baik - cukup Ctrl + F untuk "Pemaksaan" dan Anda akan melihatnya, tetapi keseluruhan buku ini layak dibaca (untuk tujuan non-golf kebanyakan, tetapi kadang-kadang Anda mengambil satu atau dua trik, heheh )PowerShell , 28 byte -5 = 23
Cobalah online!
Port semua pengindeksan siklus
sumber
Haskell, 29 byte - 5 = 24
Bekerja untuk kekuatan negatif.
Saya memiliki versi pointfree yang berhasil, tetapi ternyata itu sebenarnya lebih lama.
sumber
Clojure (
645431 karakter)Edit
Saran Per @ SeanAllred, inilah versi yang menggunakan vektor literal alih-alih
case
fungsi:Edit 2
Dengan mengandalkan REPL untuk mencetak koleksi yang dihasilkan dan mengkode fungsi menggunakan
#()
cara pintas kita dapat menguranginya menjadi(Yang sebenarnya jauh lebih Clojure / Lisp-ish karena fungsi sekarang benar-benar mengembalikan hasil yang dihasilkan, memungkinkan fungsi untuk digunakan
map
, seperti padayang mencetak
Bagikan dan nikmati.
sumber
Groovy: 27-5 = 22
sumber
C 105, adalah 117
sumber
:
dalam?:
pernyataan di dataran C. Juga, apa gunanya menggunakan0==0
ketika Anda dapat menggunakan char tunggal1
? Dan tidak perlu tanda kurung sebelumnya?
. Juga,?:
pernyataan terakhir bisa disingkat menjadic[j]=i&1?'i':'1';
.0==0
itu identik1
? Perhatikan bahwa==
memiliki prioritas lebih tinggi daripada&
, jika tidak, tes (seharusnya) Anda(i&0)==0
akan selalu benar.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
lebih pendek satu karakter, tetapi tidak menangani jawaban yang tepat. Tentu sajan->I^n
dilarang, dan mungkin juga milik PARIpowIs
.sumber
Jelly , 2 - 20 = -18 byte
Cobalah online!
Itu tidak menggunakan
i ^ x
builtin tetapi menggunakan builtin untuk1j
dan**
jadi tidak yakin jika diizinkan.sumber
1j
literal itu dilarang juga?*
) adalah.1j
literal.05AB1E , skor 5 (10 byte - 5 bonus)
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Penjelasan:
sumber