Dalam matematika, faktorial, disingkat "fakta" dari bilangan bulat n -negatif , dilambangkan dengan n! , adalah produk dari semua bilangan bulat positif kurang dari atau sama dengan n . Misalnya, 5! adalah 1 * 2 * 3 * 4 * 5 = 120
Faktorial dari 0 adalah 1 , menurut konvensi untuk produk kosong.
Ini adalah fakta biasa yang biasa kita alami. Mari kita tambahkan beberapa alternatif:
- Faktorial (didefinisikan di atas)
- Faktorial ganda: n !! = 1 + 2 + ... + n
- Tiga faktor: n !!! = 1 - (2 - (3 - (... - n))) ...)
- Faktor empat kali lipat: n !!!! = 1 / (2 / (3 ... / n))) ...) . Catatan: Ini adalah divisi floating point, bukan divisi integer.
Tantangan
Mengambil masukan bilangan bulat non-negatif n , langsung diikuti oleh antara 1 dan 4 tanda seru. Input akan terlihat (persis) seperti ini: 0! , 5 !! , 132 !!! atau 4 !!!! . Dalam tantangan ini, Anda mungkin tidak menganggap format input yang fleksibel, maaf.
Keluaran
Hasilnya harus berupa hasil, pada format apa pun yang nyaman. Hasil faktorial empat kali lipat harus memiliki minimal 2 digit setelah titik desimal, kecuali 0 !!!! = 0 .
Kasus uji:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
---
0!! = 0
1!! = 1
2!! = 3
3!! = 6
4!! = 10
5!! = 15
6!! = 21
7!! = 28
8!! = 36
9!! = 45
10!! = 55
---
0!!! = 0
1!!! = 1
2!!! = -1
3!!! = 2
4!!! = -2
5!!! = 3
6!!! = -3
7!!! = 4
8!!! = -4
9!!! = 5
10!!! = -5
---
0!!!! = 0
1!!!! = 1
2!!!! = 0.5
3!!!! = 1.5
4!!!! = 0.375
5!!!! = 1.875
6!!!! = 0.3125
7!!!! = 2.1875
8!!!! = 0.27344
9!!!! = 2.4609
10!!!! = 0.24609
Solusi terpendek di setiap bahasa menang.
0!
->1
.Jawaban:
JavaScript (ES6), 88 byte
Uji kasus
Tampilkan cuplikan kode
Diformat dan dikomentari
sumber
Sekam , 15 byte
Cobalah online!
Penjelasan
Pengindeksan ke dalam daftar fungsi: kesenangan menggunakan bahasa fungsional.
Saya menggunakan rentang menurun dan lipatan kiri, karena
-
dan/
mengambil argumen mereka dalam urutan terbalik di Sekam.sumber
Indexing into a list of functions
is woah ...C # (.NET Core) ,
134 130128 byteCobalah online!
Bagian terbaik dari kode golf adalah hal-hal yang Anda pelajari sambil mencoba menyelesaikan tantangan. Dalam yang ini saya telah belajar bahwa di C # Anda dapat memotong karakter lain selain spasi putih dari string.
s.Split('!').Length
, cukup perbaiki batas dalame>4?i/r:e>3?i-r:e>2?i+r:i*r
dann<1&e<3?1:r
.sumber
e
n
dani
jugadouble
untuk menghindari menyatakannya untuk r untuk menyimpan 4 byte.float
untuk menyimpan byte lain.Perl 5 , 62 byte
61 byte kode +1 untuk
-p
.Terima kasih kepada @GB karena telah menunjukkan kesalahan saya!
Cobalah online! (ini digunakan
-l
untuk keterbacaan)sumber
R ,
113111 byteCoba beberapa test case!
ungolfed:
sumber
el(strsplit(s,"!"))
menghemat 1 bytePython3,
124130121119 bytePada titik ini, saya percaya rekursi adalah kunci untuk penghematan byte lebih lanjut.
Coba testcases di Coba online!
-9 byte terima kasih kepada @ Mr.Xcoder !
-2 byte berkat @Felipe Nardi Batista !
sumber
Pyth ,
3430 byteCobalah online!
Penjelasan
sumber
.U
menghemat satu byte.05AB1E , 27 byte
Cobalah online!
sumber
„.»
tidak berhasil?»
adalah bagian dari string terkompresi yang belum selesai, sehingga kesalahan keluar dan, seperti biasanya di 05AB1E, kesalahan diabaikan."*+-/"èU
setelah menggunakanL
tindak lanjut.»X
tetapi memperlakukannyaX
sebagai string, bukan perintah dan.»X.V
bahkan lebih menang.X
tidak eval.X.V
dua perintah.Ruby ,
83 8079 byteCobalah online!
Penjelasan:
sumber
Java 8,
141136134 byte-5 byte (141 → 136) berkat jawaban C # dari @CarlosAlejo .
Penjelasan:
Coba di sini.
sumber
float
lebih pendek daridouble
.float q=s.length()-(s=s.replace("!","")).length(),n=new Float(s)
ke jawaban saat ini menyelamatkan saya 5 byte. :) Lupa menambahkan " byte yang disimpan berkat " bagian yang saya perhatikan sekarang .. Maaf tentang itu.Jelly ,
24 23 2625 byte+
32 byte ditambal untuk diperbaiki setelah salah tafsir :(Program lengkap (tautan monadik dengan tautan pembantu yang dirujuk oleh lokasi program)
Cobalah online! atau lihat a test suite .
Bagaimana?
sumber
0!
./
. Pada daftar kosong D: EDIT: Ternyata berlaku untuk0!
,0!!
,0!!!
dan0!!!!
1.Memodifikasi sendiri kode mesin x86_64, 123 byte
Mengapa bahasa yang ditafsirkan dapat menjalankan kode secara dinamis dengan mewah
eval
s , tetapi bukan kode mesin biasa?Cobalah dengan:
Majelis:
Penjelasan akan ditambahkan nanti. Ide dasarnya adalah memodifikasi
divss xmm0, xmm1
instruksi di0x100000db0
dan menggantinya denganmulss
,addss
,subss
ataudivss
sesuai dengan operan disediakan. Trik kecil juga digunakan untuk melewatkan string input.Majelis dihasilkan dengan:
sumber
Haskell,
105 102 9896 byteDisimpan 9 byte berkat Zgarb dan nimi.
Cobalah online.
sumber
read n
, danf=
tidak perlu sesuai aturan kami .lex
menghemat dua byte:f s|[(n,b)]<-lex s=read n!(length b-1)
.lex
. Itu luar biasa! :) Saya tidak melihat bagaimana cara menghemat byte - saya mendapatkan 99 byte setelah ini.Gaia ,
2625 byteCobalah online!
Penjelasan
sumber
Jelly , 28 byte
Cobalah online!
Mendapat ide untuk memisahkan tautan menjadi beberapa baris dari jawaban Jonathan Allan untuk -2 byte.
sumber
APL (Dyalog) , 30 byte
Terinspirasi oleh solusi lstefano .
Cobalah online!
{
...}
fungsi anonim di mana argumen diwakili oleh⍵
:0::
jika terjadi kesalahan:0
mengembalikan nol⋄
sekarang coba:⍵∩⎕D
persimpangan argumen dan himpunan D igit (menghilangkan tanda seru)⍎
jalankan itu (mengubahnya menjadi angka)⍳
d temukan itu(
...)/
masukkan (APL asosiatif benar, sesuai kebutuhan) fungsi berikut antar istilah:⍵~⎕D
argumen tanpa D igits (meninggalkan tanda seru)≢
tally itu (yaitu berapa banyak tanda seru)'×+-⌹'⊃⍨
gunakan itu untuk memilih dari daftar simbol *⍎
mengeksekusi (mengubah simbol menjadi fungsi)⌹
(pembagian matriks) digunakan sebagai ganti÷
(pembagian normal) untuk menyebabkan kesalahan pada daftar kosongsumber
::
dilakukan di dfn?::
terjadi, maka nilai di sebelah kanan::
segera dikembalikan.Perl 5 , 96 byte
Cobalah online!
sumber
Dyalog APL, setidaknya 29 karakter
Ungkapannya HAMPIR benar. Ini melewati semua kasus uji KECUALI
0!!!!
yang ia berikan1
bukan yang diperlukan0
dan itu karena dalam APL pengurangan vektor kosong seharusnya mengembalikan elemen netral untuk fungsi yang digunakan untuk mengurangi. Untuk hasil bagi itu adalah 1. Saat ini saya tidak punya waktu untuk mencoba dan memperbaikinya tetapi saya akan meninggalkannya di sini untuk hari hujan.sumber
{0::0⋄(⍎'×+-⌹'⊃⍨≢⍵~⎕D)/⍳⍎⍵∩⎕D}
Coba online!05AB1E ,
2524 byteCobalah online!
sumber
Mathematica, 152 byte
sumber
Javascript,
111163 byteVersi yang Dapat Dibaca
sumber