Catatan: Ini adalah upaya mendaur ulang pertanyaan permutasi guest271314
Ada pola menarik yang terbentuk ketika Anda menemukan perbedaan antara permutasi yang diurutkan secara leksografis dari angka-angka dasar 10 dengan angka unik yang naik. Misalnya, 123
memiliki permutasi:
123 132 213 231 312 321
Ketika Anda menemukan perbedaan di antara ini, Anda mendapatkan urutannya
9 81 18 81 9
Yang semuanya habis dibagi sembilan (karena jumlah digit dari basis 10 angka), serta menjadi palindromic.
Khususnya, jika kita menggunakan nomor berikutnya 1234
,, kita mendapatkan urutannya
9 81 18 81 9 702 9 171 27 72 18 693 18 72 27 171 9 702 9 81 18 81 9
Yang memperpanjang urutan sebelumnya sambil tetap palindrom di sekitar . Pola ini selalu berlaku, bahkan ketika Anda mulai menggunakan lebih banyak 10
angka itu, meskipun panjang urutannya adalah untuk angka. Perhatikan bahwa untuk menggunakan angka di atas 0 to 9
, kami tidak mengubah ke basis yang berbeda, kami hanya mengalikan angka dengan , misalnya .
Tujuan Anda adalah menerapkan urutan ini, dengan mengembalikan setiap elemen sebagai kelipatan dari sembilan. Misalnya, 23 elemen pertama dari urutan ini adalah:
1 9 2 9 1 78 1 19 3 8 2 77 2 8 3 19 1 78 1 9 2 9 1
Beberapa test case lainnya (0 diindeks):
23 => 657
119 => 5336
719 => 41015
5039 => 286694
40319 => 1632373
362879 => 3978052
100 => 1
1000 => 4
10000 => 3
100000 => 3
Aturan:
- Pengajuan dapat berupa:
- Program / fungsi yang mengambil angka dan mengembalikan angka pada indeks itu, baik 0 atau 1 diindeks.
- Program / fungsi yang mengambil angka dan mengembalikan ke indeks ke- , baik yang diindeks 0 atau 1.
- Program / fungsi yang menampilkan / mengembalikan urutan tanpa batas.
- Program harus mampu menangani secara teoritis hingga Elemen ke- 1 dan seterusnya, meskipun saya mengerti jika batasan waktu / memori membuat ini gagal. Secara khusus, ini berarti Anda tidak dapat menggabungkan angka dan mengevaluasi sebagai basis 10, karena sesuatu seperti akan salah.
- Ini adalah kode-golf , jadi implementasi tersingkat untuk setiap bahasa menang!
Catatan:
- Ini adalah OEIS A217626
- Saya menawarkan hadiah 500 untuk solusi yang menghitung elemen secara langsung tanpa menghitung permutasi yang sebenarnya.
- Urutan ini berfungsi untuk setiap digit yang berdekatan. Sebagai contoh, perbedaan antara permutasi sama dengan untuk .
sumber
3628799 => -83676269
Jawaban:
Jelly , 9 byte
Cobalah online! (cetak elemen ke-n)
Cobalah online! (20 elemen pertama)
Penjelasan:
(Jelly memiliki builtin
œ?
yang menghitungn
permutasi daftar dalam waktu sekitar linier. Cukup berguna.)sumber
Arang , 71 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Dapatkan daftar yang berisi input dan satu lagi dari input.
Ulangi sampai kedua nilai tersebut nol.
Lakukan konversi basis faktorial pada kedua nilai. Ini adalah pertama kalinya saya benar-benar menggunakan
≧
daftar!Kosongkan hasilnya.
Ulangi setiap nomor basis faktorial.
Buat daftar digit dari 0 hingga panjang - 1.
Inisialisasi hasilnya ke daftar kosong.
Lingkari angka-angka dari nomor basis faktorial.
Tambahkan digit permutasi berikutnya ke hasilnya.
Hapus angka itu dari daftar.
Konversikan permutasi sebagai angka dasar 10 dan kurangi hasilnya sejauh itu.
Bagi hasil akhir dengan 9 dan dilemparkan ke string.
sumber
Perl 6 , 82 byte
-2 byte terima kasih kepada Jo King
Cobalah online!
Diindeks 0. Tidak menghitung semua permutasi. Secara teoritis harus bekerja untuk semua n, tetapi menebus untuk n> 65536 dengan "Terlalu banyak argumen dalam susunan rata".
Versi 80 byte berikut ini berfungsi untuk n hingga 98! -2 dan jauh lebih cepat:
Cobalah online!
Versi 53 byte berikut secara teoritis akan bekerja untuk semua n, tetapi menebus untuk n> = 20 dengan "menolak untuk permutasi lebih dari 20 elemen".
Cobalah online!
sumber
JavaScript (Node.js) , 134 byte
Cobalah online!
1-diindeks.
Pendapat @ guest271314 benar. Perhitungan permutasi langsung lebih pendek ...
Penjelasan
Solusi asli (159 byte)
Cobalah online!
Tautan ke versi yang lebih panjang dibuat untuk kinerja.
Array(n+1)
menjadiArray(Math.min(n+1,15))
untuk membuat karya demo. Secara teoritis bekerja hingga tak terbatas (hingga batas stack dalam praktek).Penjelasan
Maksud saya ada terlalu banyak untuk dijelaskan.
sumber
n
, solusi ini stackoverflow.com/a/34238979 menyediakan cara untuk mendapatkan dua permutasi yang berdekatan, atau representasi jumlah permutasi langsung dengan indeks, yang ketika golf, harus mengurangi kode yang diperlukan untuk menghasilkan output(f(n) - f(n-1))/9
untuk tipe jawaban yang dipilih ini konsisten dengan aturan "Program / fungsi yang mengambil angka dan mengembalikan angka pada indeks itu, baik 0 atau 1 diindeks." .Pyth,
1514 byteMengembalikan istilah ke-n. Coba di sini .
sumber
J ,
44, 41 byteCobalah online!
Catatan: berfungsi bahkan untuk 10! test case, tetapi kehilangan beberapa presisi di sana ...
penjelasan asli
sumber
JavaScript (ES6), 112 byte
Sangat mirip dengan algoritma Shieru Asakoto .
Cobalah online!
sumber