Dengan bilangan bulat positif, temukan kelipatan bilangan bulat positif terkecil yang merupakan run dari 9 diikuti oleh run opsional 0. Dengan kata lain, temukan multiple integer positif terkecil yang cocok dengan regex /^9+0*$/
.
Misalnya, jika bilangan bulat positif yang diberikan adalah 2, maka kembalikan 90, karena 90 adalah bilangan bulat positif dari 2 dan merupakan yang terkecil yang cocok dengan regex /^9+0*$/
.
Kasus uji:
n f(n)
1 9
2 90
3 9
4 900
5 90
6 90
7 999999
8 9000
9 9
10 90
11 99
12 900
13 999999
14 9999990
15 90
16 90000
Ini adalah kode-golf . Jawaban terpendek dalam byte menang. Celah standar berlaku.
code-golf
arithmetic
Biarawati Bocor
sumber
sumber
Jawaban:
Jelly ,
1311 byteCobalah online!
Bagaimana itu bekerja
sumber
9
atau0
dalam kode AndaPython 2 ,
5554 byteCobalah online!
sumber
Python 2 , 51 byte
Cobalah online!
sumber
JavaScript (ES6),
474342 byte-4 byte terima kasih kepada @Arnauld
-1 byte terima kasih kepada @Luke
Tes
Solusi rekursif (gagal untuk 7, 13, dan 14), 38 byte
Disebut seperti
f(5)()
. Mencapai ukuran panggilan tumpukan max di Chrome dan Firefox untukn=7
,n=13
, dann=14
.Tampilkan cuplikan kode
sumber
n=>eval('for(i=0;!/^9+0*$/.test(i);)i+=n')
Ruby , 36 byte
Brute-forcing - membutuhkan selamanya untuk x = 17.
Cobalah online!
sumber
Java 8,
6157 byte-4 byte (dan eksekusi lebih cepat) berkat @JollyJoker .
Penjelasan:
Coba di sini.
sumber
r%n
cek,n->{int r=0;for(;!(""+(r+=n)).matches("9+0*"););return r;}
for(;!(""+r).matches("9+0*");r+=n)
Python 3 , 56 byte
Cobalah online!
sumber
Brachylog , 16 byte
Cobalah online!
Ini sangat lambat
Penjelasan
sumber
05AB1E , 10 byte
Cobalah online!
Itu hanya terus menambahkan input ke 0, sampai hasil minus memimpin 9 sama dengan 0.
sumber
RProgN 2 , 18 byte
Dijelaskan
Cobalah online!
sumber
Matematika , 71 byte
Cobalah online!
Tidak terlalu keras solusi brute force, tetapi mengalahkan jawaban Mathematica lainnya, yang menggunakan beberapa trik pintar.
Salah satu kualitas penukaran Mathematica sehubungan dengan tantangan ini adalah fakta yang
StringMatchQ
membutuhkan pertandingan penuh, jadi saya bisa melakukannya9+0*
daripada^9+0*$
.sumber
"9"..~~"0"...
alih - alihRegularExpression@"9+0*"
.Batch, 175 byte
Mengambil input pada STDIN. Bukan solusi brute force tetapi sebenarnya berdasarkan jawaban saya untuk Fraksi ke desimal yang tepat sehingga akan bekerja selama 17, 19, dll. Yang sebaliknya akan melebihi batas integernya.
sumber
Mathematica, 127 byte
Memasukkan
Keluaran
di sini adalah 20 istilah pertama
sumber
Haskell , 53 byte
f
mengambil dan mengembalikan bilangan bulat.Cobalah online!
Kali ini untuk 17, yang nyaman hanya di luar kasus uji. Versi yang lebih cepat dalam 56 byte:
Cobalah online!
Bagaimana itu bekerja
f
menghasilkan semua kelipatann
, mengonversi masing-masing menjadi string, memfilter mereka dengan format yang tepat, lalu mengambil yang pertama.Versi lebih cepat bukan menggunakan angka-angka yang diperlukan adalah formulir
10^a-10^b
,a>=1
,a>b>=0
. Untuk tujuan bermain golf, ia juga menggunakan fakta bahwa untuk permainan minimala
, hanya satu yangb
dapat bekerja, yang memungkinkannya untuk menghasilkan hurufb
s dalam urutan "salah" yang sedikit lebih pendek.sumber
Rubi , 38 + 1 = 39 byte
Menggunakan
-p
bendera-p
mengelilingi program dengan:gets
menyimpan hasilnya di$_
.eval
digunakan untuk mengubahnya menjadi angka, karena lebih pendek dari.to_i
, maka brute force digunakan, menambah $ _ hingga cocok dengan regex."#{}"
interpolasi sttring, itu lebih pendek dari.to_s
panggilan karena akan membutuhkan paranthes di sekitar$_+=y
. Akhirnya,$_
dicetak.Cobalah online!
Coba semua test case!
sumber
Dyalog APL, 34 byte
DFF rekursif, berdasarkan pada solusi Python Dennis .
sumber
C ++, 106 byte
Formulir Rinci:
COBA online!
sumber
[](int n){int T=9,j=10,m;while(t%n)if(t/j){t+=m/j;j*=10;}else{t=(t+1)*9;j=10;m=t;}return t;}}
membutuhkan 94 byte. Pada dasarnya, memperlakukannya sebagai tugas fungsi untuk menyimpan byte, menyimpan pada tanda kurung yang tidak dibutuhkan, gunakan fungsi lambda untuk menghemat penamaan tipe dan ketik.Python 2 , 79 byte
Cobalah online!
Beberapa penjelasan. Ia menemukan bentuk alami terkecil
10**n-10**b
dengann>b>=0
yang membagi input.Beberapa IO
sumber
PHP , 39 byte
Cobalah online!
PHP , 52 byte
Cobalah online!
sumber
Swift 3.0, Bytes: 121
Cobalah online!
sumber
let r=
harus dilakukan Saya tidak melihatr
dirujuk ke tempat lainPython 3 , 62 byte
Fungsi ini mengambil bilangan bulat
n
dan menginisialisasim
ke nol. Kemudian menghapus semua nol dari ujungm
dan memeriksa apakah hasilnya hanya berisi 9, kembalim
jika itu. Jika tidak, ia menambahkann
untukm
dan cek lagi, dllCobalah online!
sumber
Java (OpenJDK 8) , 66 byte, tidak tersedak 17
Cobalah online!
Lebih lama dari solusi @ KevinCruijssen tetapi dapat menangani jumlah yang sedikit lebih besar. Ini menghitung angka-angka kandidat seperti 10 ^ 6 - 10 ^ 3 = 999000. Panjang 64-bit masih batas, melanggar untuk n = 23.
Mungkin bisa bermain golf sedikit tetapi sudah terlalu lama untuk membuatnya bekerja ...
sumber
> <> , 35 byte
Cobalah online , atau tonton di taman bermain ikan !
Mengasumsikan input sudah ada di stack. Bekerja dengan mencari angka dari formulir 10 a - 10 b , dengan a <b (ya, itu kurang dari tanda - dibutuhkan lebih sedikit byte!) Sampai habis dibagi input, lalu mencetak 10 b - 10 a . Ini jauh lebih cepat daripada metode brute force (yang akan sulit di> <>).
sumber
V ,
1914 byteCobalah online!
Penjelasan
sumber
JavaScript (ES6),
5149 byteBukan pendekatan terpendek, tetapi cepat jahat.
sumber
Mathematica, 82 byte
Menggunakan pola pengajuan dari jawaban @Jenny_mathy ...
Memasukkan:
Keluaran:
Dan relatif terhadap argumen dalam komentar di jawaban @ Jenny_mathy dengan @Phoenix ...
RepeatedTiming[]
aplikasi ke input[17]
memberikanjadi setengah milidetik. Pergi ke input sedikit lebih besar,
[2003]
:sedikit di bawah 4 detik.
Tabel uji: Pada 30 bilangan bulat positif pertama, hasilnya adalah
Penjelasan: Satu-satunya keajaiban di sini adalah iterator khusus ("iterator" dalam pengertian CS, bukan arti M'ma)
yang bertindak pada variabel global
x
, jumlah "9" s,,y
jumlah trailing "0", dand
, jumlah total digit. Kami ingin mengulang melalui jumlah digit, dan, untuk setiap pilihan jumlah digit, mulai dengan "0" paling banyak dan paling sedikit "9". Jadi hal pertama yang dilakukan kode adalah menginisialisasid
ke 1, memaksa adalah nilai yang diinginkan .)x
ke 1 dany
ke 0. Iterator kustom memeriksa bahwa string "0" dapat dipersingkat. Jika demikian, itu memendek string "0" s satu dan meningkatkan string "1" s satu. Jika tidak, itu menambah jumlah digit, menetapkan jumlah "0" menjadi satu kurang dari jumlah digit, dan mengatur jumlah "9" menjadi 1.d
y
sumber
Ti-Basic (TI-84 Plus CE),
4841 byteMasukan
Prompt
-ed selama program; output disimpan diAns
.Penjelasan:
Mencoba angka-angka dari bentuk (10 n ) (10 m -1) = 10 k -10 m , di mana m + n = k mulai dari 1 dan meningkat, dan untuk setiap nilai k, ia mencoba m = 1, n = k -1; m = 2, n = k-2; ... m = k, n = 0; sampai menemukan kelipatan
X
.Ini berfungsi hingga 16; 17 memberikan kesalahan domain karena
remainder(
hanya dapat menerima dividen hingga 9999999999999 (13 nines), dan 17 harus menghasilkan 999999999999999999 (16 nines).sumber
QBIC , 53 byte
Penjelasan
sumber
C (gcc) , 126 byte
Cobalah online!
Beberapa penjelasan. Ia menemukan bentuk alami terkecil
10**n-10**b
dengann>b>=0
yang membagi input.Beberapa IO
sumber
Perl 5 , 23 + 2 (-pa) = 25 byte
Metode Brute Force
Cobalah online!
Ini lambat, tapi kecil.
Metode yang Lebih Efisien:
41 + 2 (-pa) = 43 byte
Cobalah online!
Ini bekerja dengan baik untuk input apa pun, tapi ini kode yang lebih panjang.
sumber