Mari kita membuat sistem angka di mana digit terbesar di nilai tempat ke-n (menghitung dari kanan ke kiri) dari panjang angka m selalu sama dengan m - n + 1. Untuk memberikan contoh angka 5 digit terbesar yang dapat diekspresikan dalam sistem ini ditulis 12345. Terlepas dari jumlah digit yang tersedia untuk digunakan di tempat tertentu yang dibatasi, semua penambahan lainnya adalah standar. Yaitu ketika sebuah angka melampaui batas digitnya, kami menambahkan satu ke digit berikutnya.
Di sini adalah bagaimana penghitungan akan diwakili dalam sistem ini:
1; 10; 11; 12; 100; 101; 102; 103; 110; 111; 112; 113; 120; 121; 122; 123; 1000; 1001 ...
Tugas Anda adalah menulis fungsi yang menggunakan nomor basis 10 standar dan mengubahnya menjadi sistem penomoran saya.
Kode yang lebih pendek lebih disukai. Bonne Chance!
** Jika Anda membutuhkan digit setelah 9 (Anda harus), Anda dapat memilih untuk menggunakan huruf, atau Anda dapat mengembalikan angka 2 digit sebagai elemen dari daftar.
Uji Kasus
10 -> 111
20 -> 1003
30 -> 1023
50 -> 1123
100 -> 10035
23116 -> 1234567
21977356 -> 123456789A
Kasus terakhir mungkin sangat lambat untuk dijalankan tergantung pada bagaimana Anda menerapkannya. Anda tidak perlu menjalankannya jika terlalu lama atau menggunakan terlalu banyak memori. Namun perhatikan bahwa ada cara untuk menjalankannya dengan cepat dan menggunakan sedikit memori.
sumber
100 -> 10035
bukan100 -> 10033
, bisakah Anda memverifikasi?Jawaban:
Mathematica, 64 byte
Fungsi tanpa nama mengambil argumen bilangan bulat positif dan mengembalikan daftar bilangan bulat.
Join[{{1}},Array[Range,#-1,3]-1]
mengembalikan daftar bersarang{ {1}, {0,1,2}, {0,1,2,3}, ..., {0,1,...,#} }
. KemudianTuples
mengembalikan set (diurutkan) dari semua tupel yang elemen pertamanya terletak{1}
, elemen kedua yang terletak{0,1,2}
, dan seterusnya; ini adalah#
angka -digit dalam sistem penomoran ini.Join@@Array[...,#]
mengembalikan array dari semua angka dalam sistem penomoran ini dengan paling banyak#
digit, danPart[...,#]
mengekstraksi#
nomor tersebut.Ini sangat lambat! Ini berjalan dengan baik untuk input hingga 9. Untuk input yang lebih besar, uji dengan mengganti akhirnya
,#],#]&
dengan,Ceiling[0.9Log[#]]],#]&
; ini menempatkan batasan yang lebih realistis pada jumlah digit yang diperlukan untuk melangkah cukup jauh dalam sistem penomoran untuk menemukan yang kita inginkan.sumber
Mathematica, 93 byte
Fungsi murni dengan argumen pertama
#
. Jika bilangan bulat negatif diberikan, itu akan menampilkan daftar digit yang benar (bahkan menangani0
dengan benar!).Penjelasan
Nest[f,expr,n]
memberikan hasil dari penerapanf
untukexpr
n
kali. Dalam hal ini,expr
adalah daftar{0}
dann
bilangan bulat input#
. Fungsinyaf
rumit:sumber
y___,z_:0
untuk menambah panjang daftar!Perl 6 , 38 byte
Mengambil bilangan bulat positif, dan menampilkan daftar bilangan bulat yang mewakili digit.
Penjelasan:
sumber
Pyth - 14 byte
Cukup kembalikan
nth
nilai yang cocok dengan "pola nilai kurang dari tempat".Test Suite .
sumber
2018967
, di mana digit terakhir sama dengan 10?Haskell, 65 byte
i
meningkatkan angka dalam sistem angka dengan digit dalam urutan terbalik.iterate
membuat daftar tak terbatas semua angka-angka ini dimulai dengan nol yang diwakili oleh[]
. Maka yang harus dilakukan adalah mengambil (!!
) nomor yang diminta danreverse
itu.Baris terakhir adalah fungsi, bukan definisi fungsi, sehingga tidak dapat muncul seperti dalam file kode sumber. Alih-alih, hanya letakkan baris lain dalam kode sumber dan gunakan baris terakhir pada penerjemah (atau ikat fungsi ke nama dengan mengawali
f=
ke baris terakhir).Contoh penggunaan:
(8 byte dapat disimpan jika
[5,3,0,0,1]
representasi yang diizinkan dari hasil.)sumber
Haskell, 49 byte
Baris pertama adalah definisi tambahan, dan yang kedua mengevaluasi suatu fungsi. Dibutuhkan integer dan mengembalikan daftar integer. Cobalah online!
Penjelasan
Saya mendefinisikan
x
sebagai daftar representasi tak terbatas yang disebutkan dalam teks tantangan; fungsi utama hanya mengurangi argumennya dan mengindeksnya menjadix
. Baris pertama berfungsi seperti ini:Anda lihat itu
x
didefinisikan dari segi dirinya sendiri, tetapi Haskell malas, jadi ini bukan masalah.sumber