pengantar
Bob suka memiliki kata sandi yang berbeda untuk setiap situs web yang ia gunakan. Dia ingin kata sandi dalam format khusus sehingga dia bisa mengingat. Bantu dia dengan membuat generator kata sandi yang sesingkat mungkin dalam panjang kode, karena dia suka menyimpan barang sesingkat namanya.
Tantangan
Buat Bob generator kata sandi yang mengambil empat parameter -
- Alamat domain, (mis: stackexchange.com)
- Nama depan,
- nama keluarga,
- Tanggal dan tahun lahir.
dan menghasilkan string yang telah mengalami transformasi berikut.
Setiap kata sandi memiliki templat yang didasarkan pada l panjang nama domain. Jika l adalah prima maka templatnya adalah dari bentuk ini -
[birth-date][domain-name][lastname][birth-year][symbol]
selain itu dari formulir ini -
[symbol][birth-year][firstname][domain-name][birth-date]
.
Bidang simbol akan memiliki nilai berdasarkan tipe domain.
.com -> $$$ .org -> &&& .net -> %%% .edu -> +++ .gov -> @@@ .mil -> >>> default -> ~~~
Sekarang, ia juga ingin menjalankan cesar caesar di atas bidang - [firstname][domain-name][lastname]
. Arah pergeseran tepat jika aku adalah yang utama itu kiri. Nilai shift ditentukan oleh nilai penambahan tanggal lahir dan tahun.
Setelah proses di atas, teks tidak dapat dengan mudah diingat sehingga ia ingin teks yang diacak itu dapat diucapkan. Untuk melakukan ini ia ingin mengganti setiap konsonan ketiga berturut-turut dengan vokal dalam urutan abjad (yaitu, aeiou
).
Akhirnya, ia ingin menghapus kejadian berturut-turut dari huruf yang sama.
Contoh
Masukan - stackexchange.com bob williams 0894 Output - 08qraicvafyecugjigyoq94 $$$.
Penjelasan:
Templat kata sandi adalah [birth-date][domain-name][lastname][birth-year][symbol]
, karena panjang nama domain stackexchange
adalah yang utama. Simbol akan berupa $$$
tipe domain .com
.
Mari kita mengisi nilai-nilai itu di templat - 08stackexchangewilliams94$$$
. Sekarang caesar cipher harus dijalankan di bidang [firstname][domain-name][lastname]
(hanya nama belakang dalam kasus ini). Arah shift benar karena l adalah prima dan nilai shift adalah 08+94 = 102
.
Jadi, 08stackexchangewilliams94$$$
berubah menjadi 08qryaicvafylecugjjgykq94$$$
. Sekarang setiap konsonan ketiga berturut-turut diganti dengan vokal - 08qraaicvafyeecugjigyoq94$$$
setiap kali berturut-turut huruf yang sama dihapus - 08qraicvafyecugjigyoq94$$$
. Jangan khawatir itu bisa diucapkan untuk Bob.
informasi tambahan
- Alamat domain, nama depan dan nama belakang hanya berisi huruf kecil.
- Alamat domain akan selalu hanya terdiri dari domain level kedua dan level atas, suka
stackexchange.com
dan tidakcodegolf.stackexchange.com
. Juga, domain seperti.co.uk
tidak diizinkan tetapi adil.uk
atau.in
valid. - Penggantian vokal dalam urutan abjad adalah siklik. Maksud saya setelah
u
,a
digunakan untuk menggantikan. - Rentang ASCII untuk cipher Caesar adalah 97 - 122 inklusif.
- Anda dapat mengambil input seperti yang dijelaskan di sini .
- Output harus berupa string.
- Format tanggal dan tahun lahir adalah
dd
danyy
. Jadi02
dapat diterima dan2
tidak.
Ini adalah kode-golf, jadi kode terpendek dalam byte menang. Selamat Golf!
stackexchange.com
, bukanimg.stackexchange.com
? Bagaimana dengan domain negarabbc.co.uk
?0894
yang menambahkan hingga102
tetapi penjelasan menggunakan08+96=106
. Teks ciphered tampaknya menggunakan102
nilai. Hanya sedikit ketidakkonsistenan yang bisa membingungkan ...defualt
tidak mengetikdefault
Jawaban:
PowerShell 3+,
480476474453450448 byteCobalah online!
Disimpan
2426 byte berkat TimmyD !Wow, ini gila. Saya tidak berpikir saya dapat memposting rincian lengkap ini sampai nanti atau besok.
Catatan: semua akhiran baris adalah
\n
(0x10
), jadi saya tidak perlu menggunakan;
dan meletakkan ini semua di satu baris.Ikhtisar cepat:
Karena segmen tidak boleh lebih dari 63 karakter ( lihat juga RFC 1035 ), saya pikir itu lebih pendek hanya untuk hardcode daftar bilangan prima :)Menggunakan metode regex yang disarankan.Invoke-Expression
(iex
) untuk menjalankan kode emebedded yang dihasilkan, kemudian penggantian akhir dari huruf berturut-turut dengan satu huruf.sumber
-join
dan saya bisa bersumpah itu bergabung dengan spasi dan bukan$null
, yang mengejutkan saya, tetapi setelah mencobanya lagi itu bekerja seperti yang saya harapkan. Aneh (dan terima kasih lagi)!