Terinspirasi oleh CMC ini
Dengan bilangan bulat positif lebih besar dari 0, lakukan operasi berikut di atasnya:
- Jika semua sepuluh digit tunggal (
1234567890
) berada dalam angka setidaknya sekali, hasilkan penghitungan dan keluar dari program - Jika tidak, gandakan jumlahnya dan ulangi, menambah hitungan.
Hitungan dimulai pada 0 dan berapa kali input digandakan. Misalnya, jika inputnya adalah 617283945, itu harus digandakan sekali karena 1234567890 memiliki semua 10 digit di dalamnya.
Ini adalah kode-golf sehingga kode terpendek menang. Input dapat diambil sebagai string, jika Anda mau.
Uji kasus
input => output
617283945 => 1
2 => 67
66833 => 44
1234567890 => 0
100 => 51
42 => 55
n
ada sesuatuk
yangnk
pandigital? Saya ingin sekali melihat bukti.Jawaban:
Python 3 , 39 byte
Cobalah online!
Output
False
untuk0
.sumber
J ,
2423 byteCobalah online!
Penjelasan
sumber
05AB1E ,
1110 byte-1 byte berkat skottinet
Cobalah online! atau sebagai Test Suite
sumber
use x
tapi itu juga 10 ... Jawaban yang bagus. Pikiranx
akan dihilangkanD
, tapi itu ide yang sama.Perl 6 ,
3128 byte (27 karakter)-3 byte terima kasih kepada @ Yosua
Cobalah online!
Penjelasan: Konstruk yang masih sama untuk menghasilkan daftar secara rekursif. Elemen pertama adalah angka yang diberikan (
$_
), setiap elemen berikutnya adalah 2 kali dari sebelumnya (2×*
- kita menggunakan ×, karena, walaupun karakter 2 byte, itu masih 1 byte lebih murah daripada2 * *
), dan kita melakukan ini sampai kondisi akhir*.comb.unique>9
terpenuhi , yaitu ketika ada lebih dari 9 karakter unik dalam angka. (Secara teknis, kami memecah string ke daftar karakter dengan.comb
, memaksanya ke set dengan.Set
(tentu saja, Set berisi setiap elemen hanya sekali), dan membandingkan dengan 9, yang memaksa set ke dalam konteks numerik, yang pada gilirannya memberikan jumlah elemennya.)Akhirnya, kita kurangi 1 dari daftar ini. Sekali lagi, daftar dipaksa ke dalam konteks numerik, jadi apa yang kita kembalikan adalah 1 kurang dari panjang daftar itu.
sumber
.Set
alih-alih.unique
menyimpan 3 byte.JavaScript (ES6) + big.js ,
84747370 byteTerima kasih @ ConorO'Brien untuk menghemat 10 byte dengan menyarankan big.js daripada bignumber.js
Terima kasih kepada @Rick Hitchcock untuk -1 byte
Terima kasih kepada @Shaggy untuk -3 byte
Mengambil input sebagai string; mendukung hingga sekitar 2.69 karena konversi notasi ilmiah otomatis terjadi di luar titik itu.
Cuplikan Tes
Kisaran tak terbatas,
106888784 byteDengan menggunakan opsi konfigurasi untuk secara efektif menonaktifkan notasi ilmiah ketika mengubah angka menjadi string, kita dapat memiliki rentang yang hampir tak terbatas.
Tampilkan cuplikan kode
sumber
BigNumber
bit dengan menggunakan big.js ?new
bersifat opsional dalam hal itu. Akan diperbarui, terima kasih!f=n=>[..."0123456789"].every(d=>RegExp(d).test(c=Big(n)))?0:1+f(c.mul(2))
."4"+2**29
: tio.run/##BcGxDkAwEADQb2GQO41LNBZDbX7AKgbhKkSu0jZSX1/…Jelly ,
12, 11 byteCobalah online!
Penjelasan:
sumber
Haskell , 46 byte
Cobalah online!
sumber
J , 43 byte
Cobalah online!
Menentukan fungsi anonim. Mengumpulkan hasil dengan cukup optimal. Lihatlah jawaban superior miles di sini!
sumber
^:a:
:1#@}.+:^:(10>#@~.@":)^:a:
Haskell, 44 byte
sumber
Clojure,
1158982 byte-26 byte dengan hanya menggunakan string untuk mewakili daftar karakter (ya, dalam retrospeksi), dan berubah dari menggunakan rekursi menjadi
loop
, yang memungkinkan saya untuk membuat beberapa optimasi.-7 byte dengan menyingkirkan panggilan ke
bigint
. Tampaknya kita hanya perlu menangani input yang tidak akan menyebabkan overflow.Pregolfed:
sumber
every?
alih-alihempty? (remove …
:#(loop[n % c 0](if(every?(set(str n))"1234567890")c(recur(* 2 n)(inc c)))))
Retina , 85 byte
Cobalah online! Tautan termasuk kasus uji. Dioptimalkan sedikit untuk jangka waktu. Penjelasan:
Gandakan nomor input.
Mengurangi digit dalam salinan pertama.
Jika 10 digit tetap, hapus kedua angka, atau hapus salinan pertama. Perhatikan bahwa menghapus kedua angka menyebabkan sisa loop menjadi tanpa-op.
Tempatkan
#
sebelum angka besar.Gandakan setiap digit.
Tambahkan dalam membawa.
Berurusan dengan carry terkemuka.
Tambahkan a
@
dan loop sampai semua 10 digit ditemukan.Cetak jumlah yang
@
ditambahkan.sumber
APL (Dyalog Unicode) , 19 + 2 = 21 byte
Cobalah online!
Ini adalah diad
Dfn
( d irect f unctio n ), mengambil 0 sebagai argumen kirinya dan integer sebagai kanan. Karena input seharusnya hanya bilangan bulat, saya menambahkan 2 byte untuk argumen0∘
ke jumlah byte.f←
tidak termasuk dalam hitungan byte, karena itu tidak perlu . Itu hanya membuatnya lebih mudah untuk membangun test case.Bagaimana itu bekerja:
Header: Saya menghapus yang dari jumlah byte setelah beberapa mengobrol di ruang APL, karena fungsi melakukan apa yang seharusnya dilakukan dan hasilnya hanya salah karena pengaturan default REPL APL.
⎕FR←1287
Mengatur representasi F loat R ke desimal 128-bit (7 adalah kode untuk desimal dalam REPL APL).⎕PP←34
Menetapkan P etak P recision ke 34 digit. Kedua hal ini diperlukan, karena representasi default APL untuk angka besar mengubahnya menjadi notasi ilmiah (mis. 3.14159265359E15) yang mengacaukan kode waktu besar.sumber
Java 8,
1321108774 byte-57 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Coba di sini. (Catatan: test case untuk
2
dinonaktifkan karena harus berhenti di 2 68 , tetapi ukuranlong
terbatas pada 2 63 -1.)Old 132 byte menjawab menggunakan
String
input dan regex:Coba di sini. (Catatan: test case untuk
2
dinonaktifkan karena menyebabkan StackOverflowException karena rekursi yang sedikit terlalu banyak.)Regex total untuk memeriksa apakah String berisi semua 9 digit menjadi
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
, yang menggunakan pandangan positif ke depan untuk seluruh String.sumber
2^68
sebagai angka pandigital pertama, tetapi rindu di Jawa terbatas2^63-1
.reduce
\ o /(?:.*?(\d)(?!.*\1)){10}
Sekam , 10 byte
Cobalah online!
Penjelasan
sumber
Mathematica,
5948474638 byte-9 byte berkat Jenny_mathy.
Cobalah online menggunakan Matematika!
sumber
a
akan bekerja tetapi `a` tidak akan.Print/@f/@{617283945,2,66833,1234567890,100,42}
R , 74 byte
Cobalah online! Perhatikan bahwa R akan memberikan jawaban yang salah
f(2)
karena keterbatasan bagaimana bahasa menyimpan bilangan bulat besar.Penjelasan: Untuk uji pandigitalitas, input dipaksa ke vektor karakter dengan bergabung dengan string kosong dan kemudian dibagi menjadi digit individu. Kami kemudian memeriksa apakah semua 0: 9 ada dalam vektor yang dihasilkan; jika tidak, kami menambah penghitung, menggandakan input dan mengulangi.
Penghitung menggunakan F yang diinisialisasi sebagai FALSE. Untuk memastikan itu dipaksa numerik, kami mengalikannya dengan satu sebelum kembali.
sumber
c(x,"")
adalah trik yang rapi untukel(strsplit(...))
PowerShell ,
7069 byteCobalah online!
(Hampir dua kali lipat jawaban Python: - \)
Mengambil input
$args[0]
, melemparkannya sebagai[bigint]
, menyimpannya$n
. Memasukifor
loop. Setiap iterasi yang kita periksa apakah$n
jumlah dikonversi ke string kemudian kechar
-array, ketikaGroup-Object
bersama-sama, memiliki.count
-l
ess daripada ataue
kualifikasi untuk9
. Artinya, satu-satunya cara yang sama dengan 10 adalah jika setidaknya satu digit dari setiap angka1234567890
ada. Jika ya, kami keluar dari loop. Jika tidak, kami$n*=2
dan lanjutkan. Setiap iterasi di dalam loop, kami hanya menambah$i
. Ketika kita keluar dari loop, kita cukup mengeluarkan$i
.Perhatikan bahwa untuk input seperti di
1234567890
mana setiap digit sudah diperhitungkan, ini tidak akan menghasilkan apa-apa, yang merupakan nilai falsey di PowerShell, dan setara dengan0
ketika dilemparkan sebagai[int]
. Jika tidak OK, kita cukup meletakkan+
di depan output$i
untuk secara eksplisit melemparkannya sebagai integer.Menyimpan satu byte berkat Roland Heath.
sumber
Pyth , 11 byte
Suite uji .
Jumlah alam pertama
T
di manainput << T
memenuhi persyaratan.sumber
Perl 5 , 52 + 1 (-p) = 53 byte
Cobalah online!
sumber
Perl, 43 +1 byte
Menggunakan
-p
bendera. Ini didasarkan pada solusi yang disediakan oleh Xcali di atas.sumber
Cepat 4 , 111 byte
Catatan: Tidak akan berfungsi untuk x = 2, karena overflow.
Penjelasan - Input x pertama kali diketikkan ke string. Kemudian Set () menghapus karakter yang berulang. Kemudian disortir agar sesuai dengan hasilnya. Jika tidak cocok, x adalah ganda dan penghitung bertambah.
sumber
Rubi,
46453938 byteCobalah online!
Pembaruan:
def f n;
alih-alihdef f(n);
.…[9]
bukan….size==10
sumber
Japt , 15 byte
Cobalah
Penjelasan
Input bilangan bulat implisit
U
.Buat array bilangan bulat dari
0
ke99
dan melewati masing-masing melalui fungsi di manaX
elemen saat ini.U
dikalikan dengan 2 dinaikkan menjadi kekuatanX
.Dapatkan indeks elemen pertama hingga kembali benar ketika melewati fungsi berikut.
Membagi menjadi array angka dan menghapus duplikat.
Dapatkan panjang array dan periksa kesetaraan dengan
10
.Alternatif, 15 byte
Cobalah
Penjelasan
Input bilangan bulat implisit
U
.Dimulai dengan
0
, kembalikan angka pertama yang mengembalikan true ketika melewati fungsi berikut, denganX
menjadi angka saat ini.Seperti di atas, kalikan
U
dengan 2 dengan kekuatanX
.Membagi menjadi array angka, menghapus duplikat dan bergabung kembali ke integer.
Konversikan ke string, dapatkan panjangnya dan konversikan kembali ke integer.
Periksa kesetaraan dengan
10
.sumber
QBIC , 48 byte, nc
Ini seharusnya bekerja, secara teori. Namun, dalam praktiknya ini gagal karena QBasic memberikan angka sepuluh digit (setidaknya diperlukan untuk mendapatkan semua digit) ke notasi ilmiah ... Saya telah menandainya sebagai non-bersaing karena itu.
Penjelasan
sumber
GNU dc, 61 byte
Input disalin dari atas tumpukan (yang harus kosong); output didorong ke atas tumpukan.
Penjelasan
Kami menggunakan variabel array
a
, menyimpan 1 ina[d]
jika digitd
ada, jika tidak kembali ke 0 di sana. Kami menggunakan ekstensi GNU~
untuk mendapatkan hasil bagi dan sisanya dalam satu perintah.Sebagai bonus, ini akan bekerja dalam basis angka yang berubah-ubah (tidak hanya desimal): cukup atur radix input sesuai kebutuhan (konstanta
11
dalam definisif
akan dibaca menggunakan basis nomor itu, sehingga secara otomatis benar).Uji
sumber
REXX, 57 byte
sumber
q / kdb + , 33 byte
Larutan:
Contoh:
Penjelasan:
Semua byte dalam kesetaraan, mungkin bisa menurunkan yang satu ini sedikit lebih jauh. Memanfaatkan
scan
keterangan q :Catatan:
Jika kita turun ke
k
prompt maka kita dapat memiliki solusi 25 byte. Mengonversi nomor menjadi daftar karakter:sumber