Awalnya akar digital Multiplikatif
Tantangan
Pada dasarnya lakukan apa yang dikatakan judulnya
metode
Diberikan bilangan bulat positif 1 <= N <= 100000000 melalui salah satu metode input standar kami , kalikan setiap digit bersama-sama, abaikan nol.
Mis: Ambil nomor, katakan 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(abaikan nol atau ubah menjadi yang) =1152
1152
*2
=2304
Output untuk 361218402
is2304
Uji Kasus
1 => 1 setiap digit lainnya> 0 => itu sendiri 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
Celah Standar tidak diizinkan, dan ini kode-golf , sehingga jumlah byte terpendek menang!
Selamat kepada Jo King yang mendapat hadiah dengan jawaban 70 byte brain-flak!
code-golf
math
arithmetic
integer
FantaC
sumber
sumber
100000000000
saya sarankan test case99999999999 => 31381059609
, karena tidak cocok dengan integer 32-bit default. Mungkin lebih baik untuk menurunkan output maksimum ke maksimum 32-bit (2147483647).Jawaban:
Pyt , 3 byte
Penjelasan:
Cobalah online!
sumber
Haskell , 27 byte
Cobalah online!
Tidak tergabung dengan UniHaskell dan
-XUnicodeSyntax
Penjelasan
Saya akan mulai dengan apa yang awalnya saya miliki:
Ini adalah ekspresi bebas-titik yang mengevaluasi fungsi yang mengambil string (atau daftar karakter) s (
"301"
) sebagai argumen. Ini memetakanmax 1.read.pure
lebih dari s , pada dasarnya mengambil setiap karakter i , menyuntikkannya ke daftar (yang membuatnya menjadi string) (["3", "0", "1"]
), kemudian membacanya, yang mengevaluasi string ([3, 0, 1]
) dan akhirnya mengambil yang lebih besar dari i dan 1 ([3, 1, 1]
). Kemudian dibutuhkanproduct
daftar bilangan bulat yang dihasilkan (3
).Saya kemudian memutarnya dengan byte dengan:
Ini berfungsi karena
product
setara denganfoldr (*) 1
. Alih-alih memetakan dan melipat, saya menggabungkan keduanya dengan melipat(*).max 1.read.pure
yang mengambil setiap angka yang tidak nol dan mengalikannya dengan akumulator.sumber
Python 2 , 34 byte
Cobalah online!
sumber
Jelly , 4 byte
Cobalah online! atau lihat test suite
Bagaimana itu bekerja
sumber
R , 40 byte
Cobalah online!
Karena input dijamin tidak lebih dari 12 digit, ini seharusnya bekerja dengan baik. Menghitung angka sebagai
x
(termasuk angka nol di depan), lalu menggantikan angka nol dengan1
dan menghitung produk.sumber
C (gcc) , 39 byte
Perlu dikompilasi tanpa optimasi (yang merupakan pengaturan default untuk gcc).
Cobalah online!
sumber
k=k;
memasukkank
register kembali secara tidak sengaja adalah kejahatan biasa. Anda mungkin harus menambahkan bahwa ini hanya berfungsi tanpa optimisasi pada kemungkinan hanya x86 / x64. +1.O0
) adalah default untuk gcc, jadi tidak perlu secara eksplisit menggunakan flag itu. Saya kira saya akan menambahkan menyebutkannya ke posting.Brain-Flak ,
747270 byte-2 Terima kasih kepada Nitrodon karena menyarankan untuk mendapatkan negasi dari nomor sehingga Anda hanya perlu menambah daripada mengurangi nanti
Cobalah online!
Mungkin ada beberapa cara untuk bermain golf ini lebih jauh, seperti
mengulang perkalian untuk menghindari menginisialisasi total dengan 1.(-2 byte)Bagaimana itu bekerja:
sumber
05AB1E , 4 byte
Cobalah online!
Penjelasan
sumber
J ,
171413 byte-4 byte milik @GalenIvanov
Cobalah online!
Mungkin bisa diperbaiki beberapa. Edit: dan begitulah.
Penjelasan
&.
-di bawah adalah kata keterangan bagus yang menerapkan kata kerja di sebelah kanan, lalu kata kerja di sebelah kiri, kemudian kebalikan dari kata kerja di sebelah kanan. Juga mengkonversi kembali ke angka secara teknis menggunakan eval (".
-do).sumber
+0=]
ke*#]
Coba online[:*/0-.~,.&.":
selama 14 byte. Cobalah online(+-.@*)
, kira saya cenderung untuk menambahkan. Saya telah mencoba menggunakan'0'-.~
asumsi sebuah string, tidak yakin mengapa itu tidak terlintas dalam pikiran saya untuk melakukannya pada digit yang terbagi. Terima kasih!1>.
melakukan pekerjaan kurang dari0-.~
satu byte.[:*/1>.,.&.":
Cobalah!Python 2 , 43 byte
Cobalah online!
sumber
JavaScript (ES6), 28 byte
Dirancang untuk bilangan bulat 32-bit.
Uji kasus
Tampilkan cuplikan kode
sumber
Bash + coreutils + sed + bc,
272423 byteCobalah online!
sumber
Brachylog , 5 byte
Cobalah online!
Penjelasan
Ini berfungsi karena
⊇
menyatukan dari himpunan bagian yang besar ke himpunan bagian yang kecil, sehingga yang pertama yang menghasilkan produk yang tidak nol adalah ketika semua nol dikecualikan dan tidak ada yang lain.sumber
Perl 5 , 23 + 1 (
-p
) = 24 byteCobalah online!
sumber
Java 8,
55545351 bytePort jawaban @Dennis 'Python 2 .
-1 byte terima kasih kepada @RiaD .
Coba di sini.
5554 byte versi:Cobalah online.
sumber
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Julia 0,6, 26 byte
Contoh penggunaan:
Cobalah online!
sumber
JavaScript (Node.js) , 30 byte
Cobalah online!
Mengambil string sebagai input, memperlakukannya sebagai array, dan dengan merusak array memisahkan elemen pertama
[a,...b]
.+a||1
mengembalikan digit yang sesuai dengana
karakter. Saya kira istirahat itu menjelaskan diri sendiri ..sumber
Oktaf , 21 byte
Terima kasih kepada @Luis Mendo karena menyimpan byte dan terima kasih kepada @alephalpha karena telah menyimpan byte lain!
Mengambil input sebagai string angka.
Cobalah online!
30 byte:
Mengambil input sebagai angka.
Cobalah online!
sumber
@(n)prod((k=n-48)+~k)
Brain-Flak , 88 byte
Versi yang dapat dibaca:
Cobalah online!
sumber
Clojure , 56 byte
Cukup mendasar. Ubah angka menjadi string, kemudian kurangi 48 dari setiap karakter untuk mengubahnya kembali menjadi angka. Kemudian menggantikan setiap 0 dengan 1, dan berlaku
*
untuk daftar nomor yang dihasilkan (yang berkurang*
daftar). Dapat menerima nomor, atau nomor yang dikencangkan.Cobalah online!
sumber
MATL , 5 byte
Input diambil sebagai string
Cobalah di MATL Online! Atau verifikasi kasus uji di Try It Online!
Penjelasan
sumber
Befunge,
2322 byteCobalah online!
Penjelasan
sumber
JavaScript (Node.js) ,
3633 byteMetode Javascript sederhana (ES6) yang mengambil input sebagai string angka, menyebarkannya ke dalam array, kemudian menguranginya melalui perkalian atau mengembalikan nilai jika hasilnya 0.
3 byte disimpan berkat Shaggy
Cobalah online!
sumber
Ruby,
4240353227 byteDiasumsikan tidak ada baris baru dalam input Pengaruh utama
-2 byte terima kasih kepada @GolfWolf
-5 byte terima kasih kepada @Conor O'Brien
sumber
tr
: 32 byte*
untuk bergabung?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 byte
Cobalah online!
sumber
C # , 97 Bytes (Golf kode pertama)
Tidak yakin apakah saya harus membungkusnya dengan metode atau tidak jadi hanya memasukkannya agar aman.
Mengambil Int in, mengubahnya menjadi string dan mengembalikan kelipatan dari masing-masing karakter dengan mengabaikan 0's. Harus minus 48 karena program menggunakan nilai ascii saat membacanya sebagai char.
sumber
var z=y.ToString();
dan meletakkannya langsung diforeach
, seperti::foreach(var q in y.ToString())
; dan untuk mendapatkan hasilnya, Anda dapat menyimpan lebih banyak byte dengan menggantinya{if(q!=48){r*=q-48;}}
denganr*=(q>48?q:1);
, menghapus tanda kurung danif
.C # (Visual C # Interactive Compiler) , 46 byte
Cobalah online!
sumber
Haskell , 36 byte
Jumlah byte yang sama:
Cobalah online!
sumber
Jelly ,
6, 5 byteCobalah online!
sumber
DTịDP
akan menghemat satu byte, tetapi ada cara yang lebih baik untuk menghapus nol atau menggantinya dengan yang lain.> <> , 19 byte
Cobalah online!
sumber