Ini adalah tantangan singkat yang sangat rapi.
Tulis fungsi atau prosedur yang mengambil dua parameter, x
dan y
dan mengembalikan hasil TANPA menggunakan loop, atau fungsi daya bawaan.xy
Pemenangnya adalah solusi paling kreatif, dan akan dipilih berdasarkan jumlah suara tertinggi setelah 3 hari.
popularity-contest
math
restricted-source
CodyBugstein
sumber
sumber
exp(log(x)*y)
?Jawaban:
APL (7)
Argumen kiri adalah basis, argumen kanan adalah eksponen, misalnya:
Penjelasan:
⍵/⍺
ulangan⍺
⍵
kali, misalnya5 {⍵/⍺} 6
->5 5 5 5 5 5
×/
mengambil produk, misalnya×/5 5 5 5 5 5
->5×5×5×5×5×5
->15625
sumber
*/@$~
×/⍴⍨
C #: Eksponen titik mengambang
OK, solusi ini cukup rapuh. Anda dapat dengan mudah memecahkannya dengan melemparkan angka yang sangat besar seperti 6 di dalamnya. Tapi itu bekerja dengan baik untuk hal-hal seperti
DoublePower(1.5, 3.4)
, dan tidak menggunakan rekursi!sumber
C ++
Bagaimana dengan beberapa pemrograman meta template? Itu membengkokkan sedikit aturan yang ada, tetapi patut dicoba:
sumber
Python
Tidak bekerja untuk kekuatan noninteger.
sumber
join
?eval('*'.join([str(x)] * y))
.**
operator, jadi Anda bisa eval () d itu.Haskell - 25 karakter
Mengikuti versi APL Marinus:
Dengan dihapusnya komentar dan ruang kosong mniip, 27 karakter:
sumber
replicate y x
sebagai gantitake y $ repeat x
f=(product.).flip replicate
jumlah chars persis sama.Python
Jika
y
bilangan bulat positifsumber
JavaScript (ES6), 31
Pemakaian:
Penjelasan:
Fungsi di atas membangun ekspresi yang berlipat
x
y
kali kemudian mengevaluasinya.sumber
Saya terkejut melihat bahwa tidak ada yang menulis solusi dengan Y Combinator, namun ... dengan demikian:
Python2
Tanpa loop, Tanpa operasi vektor / daftar dan Tidak ada rekursi (eksplisit)!
sumber
fix
, mendukungnya ...C #: 45
Hanya berfungsi untuk bilangan bulat:
sumber
return --y?x:x*P(x,y);
sebagai gantinyabash & sed
Tidak ada angka, tidak ada loop, hanya penyalahgunaan bola yang sangat berbahaya. Lebih disukai dijalankan di direktori kosong agar aman. Script shell:
sumber
Javascript
Menggunakan ekspresi reguler untuk membuat array berukuran y + 1 yang elemen pertamanya adalah 1. Kemudian, kurangi array dengan perkalian untuk menghitung daya. Ketika y = 0, hasilnya adalah elemen pertama dari array, yaitu 1.
Memang, tujuan saya adalah saya) tidak menggunakan rekursi, ii) membuatnya tidak jelas.
sumber
Mathematica
Mungkin curang untuk menggunakan fakta bahwa x ^ (1 / y) = y√x
sumber
JavaScript
sumber
Golfscript, 8 karakter (termasuk I / O)
Penjelasan:
TLDR: solusi "produk array berulang lainnya".
Input yang diharapkan adalah dua angka, mis
2 5
. Tumpukan dimulai dengan satu item, string"2 5"
.sumber
Rubi
Penggunaan sampel:
Ini pada akhirnya sama dengan beberapa jawaban sebelumnya: menciptakan array y-length setiap elemen yang x, kemudian mengambil produk. Itu hanya dikaburkan untuk membuatnya terlihat seperti menggunakan
**
operator terlarang .sumber
C, eksponensial dengan mengkuadratkan
versi golf dalam 46 byte (terima kasih ugoren!)
harus lebih cepat daripada semua jawaban rekursif lainnya sejauh ini
versi sedikit lebih lambat dalam 45 byte
sumber
b
,~-b/2 == b/2
.pow(n, x)
lebih baik daripada O (n)?"Haskell - 55
Sudah ada entri Haskell yang lebih pendek, tetapi saya pikir akan menarik untuk menulis entri yang memanfaatkan
fix
fungsi, sebagaimana didefinisikan dalamData.Function
. Digunakan sebagai berikut (dalam Repl demi kemudahan):sumber
Q
9 karakter. Menghasilkan array dengan
y
contohx
dan mengambil produk.Dapat secara eksplisit dilemparkan ke float untuk rentang yang lebih besar diberikan int / panjang x:
sumber
Logika serupa dengan banyak lainnya, dalam PHP:
Jalankan dengan
php file.php 5 3
untuk mendapatkan 5 ^ 3sumber
Saya tidak yakin berapa banyak upvotes yang dapat saya harapkan untuk ini, tetapi saya merasa agak aneh bahwa saya benar - benar harus menulis fungsi itu hari ini. Dan saya cukup yakin ini adalah pertama kalinya situs .SE melihat bahasa ini (situs web sepertinya tidak terlalu membantu atm).
ABS
Bekerja untuk eksponen negatif dan pangkalan rasional.
Saya menyorotnya dalam sintaksis Java, karena itulah yang saya lakukan saat ini ketika saya bekerja dengan bahasa ini. Terlihat baik-baik saja.
sumber
Pascal
Tantangannya tidak menentukan jenis atau rentang x dan y, oleh karena itu saya mencari fungsi Pascal berikut mengikuti semua aturan yang diberikan:
Tanpa loop, tidak ada fungsi built-in power atau exponentiation, bahkan rekursi atau aritmatika!
sumber
J - 5 atau 4 byte
Persis sama dengan jawaban APL marinus .
Untuk
x^y
:Untuk
y^x
:Sebagai contoh:
x $~ y
membuat daftar waktu yangx
diulangy
(sama dengany $ x
*/ x
adalah fungsi produk,*/ 1 2 3
->1 * 2 * 3
sumber
Python
sumber
=/=
fungsiJavascript
Dengan rekursi ekor, berfungsi jika
y
bilangan bulat positifsumber
Pesta
Semua orang tahu
bash
dapat melakukan hal-hal yang mengurangi peta tipe whizzy ;-)Jika itu terlalu trolly untuk Anda maka ada ini:
sumber
C
Namun eksponensial rekursif lain dengan mengkuadratkan jawaban dalam C, tetapi mereka berbeda (ini menggunakan pergeseran alih-alih pembagian, sedikit lebih pendek dan berulang sekali lagi daripada yang lain):
sumber
Mathematica
Ini berfungsi untuk bilangan bulat.
Contoh
Bagaimana itu bekerja
Table
membuat daftary
x
's.Times
mengambil produk dari semuanya.`Cara lain untuk mencapai tujuan yang sama :
Contoh
sumber
Windows Batch
Seperti sebagian besar jawaban lain di sini, ia menggunakan rekursi.
x ^ y disimpan dalam variabel lingkungan
z
.sumber
perl
Inilah entri perl rekursif ekor. Penggunaannya adalah echo $ X, $ Y | foo.pl:
Atau untuk pendekatan tipe yang lebih fungsional, bagaimana:
sumber
Python
Saya tidak yakin apakah ini melanggar persyaratan, tetapi jika tidak di sini adalah upaya saya.
sumber