Pelat Lisensi Perancis
Plat nomor Prancis berurutan, mengikuti pola angka dan huruf tertentu:AB-012-CD
Tantangan
Tulis program atau fungsi yang, untuk nomor yang diberikan, menampilkan nomor plat Perancis yang sesuai . Program Anda tidak boleh menangani kasus khusus apa pun sebagaimana ditentukan dalam halaman tertaut. Seharusnya dapat menghasilkan 26*26*1000*26*26 => 456 976 000
piring yang mungkin, atau sejauh bahasa Anda dapat mendukung.
Sistem penomoran berjalan sebagai berikut:
- AA-000-AA ke AA-999-AA (angka berevolusi lebih dulu);
- AA-000-AB ke AA-999-AZ (lalu huruf terakhir di sebelah kanan);
- AA-000-BA ke AA-999-ZZ (kemudian huruf pertama di sebelah kanan);
- AB-000-AA ke AZ-999-ZZ (lalu huruf terakhir di sebelah kiri);
- BA-000-AA hingga ZZ-999-ZZ (lalu huruf pertama di sebelah kiri).
Memasukkan
- Indeks nomor pelat sebagai bilangan bulat
Keluaran
- Nomor plat Perancis yang sesuai
Informasi tambahan
- Huruf harus huruf besar
- Anda dapat menggunakan pengindeksan berbasis-0 dan berbasis-1 untuk menghasilkan lempeng-lempeng (artinya AA-000-AA dapat sesuai dengan
0
atau1
, dengan asumsi semua test case lainnya menggunakan pengindeksan yang sama.
Ini adalah kode-golf , jawaban terpendek dalam setiap bahasa menang!
Uji kasus (pengindeksan berbasis 0)
0 -> AA-000-AA
1 -> AA-001-AA
999 -> AA-999-AA
1000 -> AA-000-AB
675 999 -> AA-999-ZZ
676 000 -> AB-000-AA
456 975 999 -> ZZ-999-ZZ
Jawaban:
Bash Murni (tanpa utilitas eksternal), 64
Cobalah online! - Dibutuhkan sekitar 10 detik untuk menjalankan 7 testcases.
eval
diperlukan untuk memastikan ekspansi variabel (x) terjadi sebelum ekspansi brace.sumber
Perl 5 (-ap), 47 byte
Cobalah online!
PHP , 74 byte
Cobalah online!
sumber
Python 3 ,
79 7877 byteCobalah online!
Aku entah bagaimana tidak pernah menyadari bahwa
f"string"
format shortcut ada sampai melihat jawaban Black Owl Kai.sumber
tuple
oleh(*...,)
f"string"
membuat jawaban Anda Python 3.6+ eksklusif, hanya agar Anda sadar. Kerja bagus!Ruby,
615955 byteJuga 55 byte:
Cobalah online!
Ini menginisialisasi penghitung ke
AA-AA000-
, menambahn
waktu (dengan mengalikan string kode yang melakukannya dengan n daneval
ing), dan kemudian memindahkan 4 karakter terakhir setelah 3.sumber
->n{s=('AA-AA000-'..?Z*9).step.take(n)[-1];s[2]+=s.slice!5,4;s}
lebih panjang tapi saya ingin tahu apakah mungkin untuk mempersingkat.->n{s=[*'AA-AA000-'..?Z*9][n];s[2]+=s.slice!5,4;s}
harus bekerja dan panjangnya hanya 50 byte, tetapi menghasilkan setiap lempeng yang mungkin terlebih dahulu. : - /PHP ,
968479 byte-5 byte terima kasih atas komentar Ismael Miguel yang luar biasa.
Cobalah online!
Saya memanfaatkan fakta bahwa Anda dapat menambahkan huruf dalam PHP! Jadi
AAAA++
akan menjadiAAAB
danAAAZ++
akan menjadiAABA
. Saya menghitung berapa kali huruf harus bertambah dengan mendapatkan bagian bilangan bulat dariinput/1000
. Kemudian menambah panjang empat karakter yang berkali-kali dan dua karakter pertama dan terakhir terakhir akan secara otomatis menjadi sisi kiri dan kanan plat.Misalnya untuk input
675999
jumlah kenaikan huruf adalah(int)(675999 / 1000) = 675
, jadiAAAA
akan menjadiAAZZ
.Akhirnya, angka tengah dihitung oleh
input%1000
dan semuanya dicetak dalam format yang ditentukan dengan bantuan printf .%.2s
mencetak dua karakter pertama dari string,%03u
mengisi angka di sebelah kiri dengan 3 nol.sumber
%0.2s
Anda bisa menulis%.2s
. Itu menghemat 1 byte. (Sebagai tip kecil: jika Anda ingin menampilkan angka desimal dengan jumlah tempat desimal tertentu, Anda dapat melakukan%.2f
(atau pengubah lainnya) karena bekerja dengan cara yang sama)0
. Sunting: melihat dokumentasi, sepertinya saya bahkan tidak membutuhkannya di tempat pertama: P$x++^$argn/1e3
alih - alih$x++<(0^$argn/1e3)
dan Anda harus menyimpan 4 byte. Ini akan berulang sampai($x++^$argn/1e3) === 0
, dan0
kapan$x
dan bilangan integer yang$argn/1e3
sama (menggunakan akan melemparkan angka ke bilangan bulat). Anda dapat mencoba ini di sandbox.onlinephpfunctions.com/code/…^
C,
8886 byteCukup sederhana, ia menggunakan pembagian dan modulus untuk mengekstrak bidang, menambahkan 'A' untuk huruf untuk memetakannya ke karakter ASCII, dan format printf untuk angka.
Cobalah online!
sumber
Haskell,
85817977 byteCobalah online!
sumber
05AB1E ,
252220 byte-2 byte (dan meningkatkan kinerja dengan tidak menghasilkan seluruh daftar) terima kasih kepada @Grimy .
Pengindeksan berbasis 0.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Bagian terakhir (
s₄‰`UèX₄+¦'-.øý
) bisaI₄÷èI₄+3.£.ý'-ý
untuk alternatif yang sama dengan byte:Cobalah secara online atau verifikasi semua kasus uji .
sumber
Au2ããI₄‰`UèX₄+¦'-.øý
atauAu2ããI₄÷èI₄+3.£'-.øý
.J ,
564946 byteCobalah online!
-3 byte terima kasih kepada FrownyFrog
Semuanya tidak lain adalah 7 kereta bersarang - jika itu tidak menyenangkan, apa itu?
sumber
JavaScript (Node.js) , 82 byte
Cobalah online!
sumber
Ruby , 51 byte
Cobalah online!
sumber
R , 101 byte
Cobalah online!
Hanya melakukan perhitungan aritmatika yang dibutuhkan. Saya menyimpan 5 byte dengan memasukkan nilai
a
yang tidak berguna pada vektora[4]
, memungkinkan saya untuk menggunakan kembali vektor pembantub
.B
AB-012-CD
n
n %/% 676000 %% 26
%/%
%%
sumber
Jelly ,
2622 byteTautan monadik yang menerima bilangan bulat (1-diindeks) yang menghasilkan daftar karakter ... Gila-lambat karena membangun semua lempeng pertama!
Cobalah online! (tidak selesai)
Atau coba versi alfabet yang dikurangi (hanya "ABC" untuk huruf-huruf itu).
Untuk kode yang selesai tepat waktu, berikut adalah program lengkap 32 byte (0-diindeks) yang membuat plat tunggal alih-alih menggunakan aritmatika modular dan dekompresi basis numerik:
Coba yang ini!
sumber
APL + WIN, 61 byte
Anjuran untuk bilangan bulat:
Cobalah online! Atas perkenan Dyalog Classic
sumber
Arang , 33 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukkan nomor.
Cetak a
-
.Tambahkan 1000 ke nomor tersebut, lalu masukkan hasilnya ke string, dan cetak tiga digit terakhir.
Bagi angka dengan 1000, kemudian tambahkan 26⁵, sehingga konversi ke basis kustom menggunakan alfabet huruf besar menghasilkan string dengan panjang 6, yang kemudian dibagi menjadi pasangan huruf.
Cetak a
-
.Cetak pasangan huruf terakhir.
Pindah ke awal plat nomor.
Cetak sisa surat yang diinginkan.
sumber
Perl 6 , 42 byte
Cobalah online!
Solusi Port 5 dari Grimy Perl. Lambat untuk nilai input besar.
sumber
Excel,
183167155147 byte-16 byte terima kasih kepada @Neil. (6 dengan menggunakan
E3
)-12 byte terima kasih kepada @Keeta. (
TRUNC
bukannyaQUOTIENT
)-8 byte berkat @Jonathan Larouche (
INT
bukanTRUNC
)Menggabungkan 5 bagian:
sumber
MOD(QUOTIENT(A1,1E3),26)
bekerja Juga, mengapa1E3
untuk1000
tetapi tidak26E3
dll?456 975 996
->[Z-996-ZZ
CHAR(65+)
desimal diam - diam memotong hingga%.9999997614649
. Lebih besar dari itu ditangkap. BandingkanCHAR(65+24.9999997614649)
danCHAR(65+24.999999761465)
.Bersih , 107 byte
Cobalah online!
Menentukan
$ :: Int -> [Char]
pemberian plat nomor ke-nol yang diindeks.sumber
Japt , 21 byte
Sangat lambat! Serius, jangan coba-coba menjalankannya!
Ujung topi untuk Kevin untuk membuat saya menyadari di mana saya salah ketika berjuang untuk mendapatkan ini bekerja tadi malam.
Cobalah - batasi rentang angka
000-005
.sumber
Keempat (gforth) , 94 byte
Cobalah online!
Diindeks 0. Input diambil dari atas tumpukan
Penjelasan kode
sumber
q , 78 byte
sumber
T-SQL, 135 byte
sumber
Python 2 , 88 byte
Cobalah online!
sumber
Merah ,
130127 byteCobalah online!
sumber
Python 3 , 89 byte
Cobalah online!
-1 byte terima kasih kepada mypetlion
sumber
chr(x//26000%26+65)+chr(x//1000%26+65)
ke'%c%c'%(x//26000%26+65,x//1000%26+65)
untuk menyimpan 1 byte.MATLAB , 113 byte
Penjelasan:
Baris pertama mendefinisikan fungsi yang akan menghasilkan char (dari
A
keZ
), fungsi 2 input. Nomor indeksx
untuk dikonversi menjadi nomor pelat, dan bilangan bulatp
yang akan digunakan sebagai eksponen untuk 26 (yaitu26^p
). Input kedua ini memungkinkan untuk menyesuaikan perhitungan untuk digit pelat alfanumerik pertama (p=3
) hingga yang terakhir (p=0
).Misalnya, untuk digit kedua, bersepeda setiap 1000 * 26 * 26 iterasi, operasi:
mod(idivide(x,1000*26^2),26)
mengembalikan indeks antara 0 dan 25, yang kemudian dikonversi ke ASCIIchar
dengan menambahkan 65 (karena indeks0
didasarkan)Baris kedua hanya menggabungkan karakter bersama. Setiap karakter alfanumerik dihitung dengan menggunakan fungsi
c(x,p)
, karakter numerik hanya dihitung denganmodulo
operasi dan dikonversi ke string.Setiap komponen string yang menyusun nomor pelat adalah sebagai berikut:
Karena saya tidak dapat membiarkan Anda mencoba MATLAB online ( sunting: sebenarnya Anda dapat mencobanya secara online ), saya akan membiarkan pengguna MATLAB kemungkinan untuk memverifikasi kasus pengujian:
output:
Varian: Perhatikan bahwa opsi untuk membiarkan
sprintf
ataufprintf
menangani konversi angka ke karakter dimungkinkan. Ini memungkinkan untuk menyederhanakan fungsic
, tetapi secara keseluruhan menghasilkan beberapa byte lagi dalam implementasi ini (119 byte):sumber
C (gcc) ,
136106105 byteCobalah online!
-7 byte dari celingcat 's solusi , dengan tambahan -23 terinspirasi olehnya
-1 byte dari solusi ceilingcat dengan mengubah
char[]
kewchar_t[]
cast secara implisitint[]
Menggunakan pengindeksan berbasis 0.
Penjelasan / Tidak Diundang:
sumber
a
danb
parameter dari makro dan turun ke 106 byteJulia 1.0 , 86 byte
Cobalah online!
sumber
Kotlin , 93 byte
Cobalah online!
sumber
Python 3 , 161 byte
Cobalah online!
sumber