Tantangan Anda adalah mengesahkan string! Apa yang dimaksud dengan kata sandi, Anda bertanya?
Ambil string sebagai input. String ini hanya akan berisi huruf besar, huruf kecil, angka, dan spasi.
Anda harus mengganti semua spasi dengan garis bawah dan memindahkan semua angka ke ujung string dengan urutan yang muncul dari kiri ke kanan. Kemudian, untuk setiap huruf dalam string, ubah secara acak menjadi huruf besar atau kecil.
Contoh (huruf karakter harus bervariasi setiap kali):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
Kode terpendek dalam byte menang!
Siapa pun yang bertanya pada Keamanan Informasi SE apakah ini adalah algoritma hashing yang bagus menang! - Jangan khawatir SE tuan, saya hanya bercanda.
Jawaban:
Pyth, 15 byte
Demonstrasi
sumber
Labirin , 76 byte
Kolaborasi lain dengan @ MartinBüttner dan di sisi yang lebih gila dari spektrum Labyrinth - untuk pertama kalinya kami memiliki keempat
^>v<
dalam satu program. Cobalah online!Penjelasan
Algoritma umum, yang berjalan dalam satu lingkaran, adalah sebagai berikut:
Untuk menjaga penjelasannya tetap ringkas, inilah kira-kira bagaimana setiap bagian dari program sesuai dengan pseudocode di atas:
Inilah bagian yang menarik.
Mendapatkan keacakan dalam Labyrinth
Hanya ada satu cara untuk mendapatkan keacakan di Labyrinth, dan itu ketika IP mencoba untuk maju tetapi 1) tidak ada jalan maju atau mundur dan 2) ada jalan yang tersedia kiri dan kanan. Dalam hal ini, IP secara acak memilih antara rute kiri dan kanan.
Ini hanya mungkin menggunakan
^>v<
operator, yang membuangn
dan menggeser baris / kolomn
sebanyak 1. Misalnya, program ( Coba online! )output 1 atau 2 secara acak, karena
v
menggeser kolom dengan offset 0 (yaitu kolom IP aktif) dengan 1, menghasilkanIP menghadap ke kanan dan mencoba untuk maju (atas tumpukan adalah nol) tetapi tidak bisa. Itu juga tidak bisa bergerak mundur, sehingga secara acak memilih antara kiri atau kanan.
Trik golf
Program dimulai dari karakter pertama dalam urutan pembacaan, yang akan Anda perhatikan sebenarnya adalah langkah 6. Namun, muncul dari tumpukan Labirin kosong menghasilkan 0, sehingga langkah 10 dan 14 terjadi, menggeser nol ke tumpukan tambahan, yang secara efektif no-op.
Tumpukan utama secara efektif kosong setelah setiap iterasi, yang memungkinkan kita untuk bermain golf tata letak kode dengan menggunakan
>
dan<
pada nol tersirat di bagian bawah. The>
membungkus baris bawah sekitar sehingga bergerak IP dari kanan bawah ke kiri bawah, dan<
pergeseran barisan belakang. IP kemudian dengan senang hati bergerak ke atas kolom kiri untuk melanjutkan loop.Digit di pop Labyrinth
n
dan tekan10*n + <digit>
. Selain itu, karakter diambil modulo 256 sebelum menjadi output. Menyatukan keduanya memungkinkan kita menghasilkan 95 (garis bawah) dengan melakukan`33
ke 32 (spasi), yang berhasil karena-3233 % 256 = 95
. Meskipun ada cara lain untuk mengubah 32 menjadi 95 (;95
menjadi yang termudah), bekerja dengan angka negatif di sini memungkinkan kita untuk memadatkan kode sedikit dengan belokan kiri.sumber
05AB1E ,
222120 byteKode:
Menggunakan pengodean CP-1252 .
Cobalah online!
sumber
CJam , 25 byte
Cobalah online!
Penjelasan
Terjemahan dari jawaban MATL saya.
sumber
CJam, 23 byte
Uji di sini.
Penjelasan
sumber
Python, 107 byte
Perbaikan pada lain dua Python menjawab karena:
[...,'_'][c<'!']
digunakan sebagai gantis.replace(' ','_')
, danchoice(c+c.swapcase())
digunakan sebagai gantichoice([c.upper(),c.lower()])
sumber
JavaScript (ES6),
114101 byte47 byte hanya untuk mengacak kasus karakter ...
Sunting: Menyimpan 13 byte besar berkat @ edc65.
sumber
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 byte
Cobalah online!
sumber
Python 3,
128 122118 karakterTerima kasih kepada xnor untuk mencukur 6 byte.
sumber
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 byteS///
sepertis///
kecuali itu tidak dimodifikasi$_
di tempatsumber
Pyth, 17 byte
Coba di sini!
Penjelasan
sumber
Mathematica, 86 byte
Terima kasih kepada Sp3000 untuk menghemat 1 byte.
Ahhh, pemrosesan string Mathematica ... sangat bagus. Ini adalah fungsi tanpa nama yang mengambil dan mengembalikan string.
Karena semua gula sintaksis, urutan bacaannya agak lucu:
Pisahkan string menjadi karakter, jika tidak kita tidak bisa melakukan apa-apa dengannya.
Mengurutkan angka sampai akhir. Dengan membungkus fungsi tes dalam daftar, kami membuat penyortiran stabil.
Memetakan fungsi kiri di atas setiap karakter dalam daftar.
Memilih fungsi penggantian kasus acak untuk karakter saat ini.
Terapkan ke karakter saat ini.
Mengganti spasi dengan garis bawah.
Akhirnya, semua karakter digabungkan kembali menjadi satu string.
sumber
PowerShell, 113 Bytes
PowerShell adalah singkatan dari bahasa golf yang mengerikan. Membagi menjadi array char dan mengganti spasi dengan garis bawah. Ambil setiap karakter dan proses. Kumpulkan angka ke dalam variabel $ d untuk output nanti. Setiap karakter lain secara acak dibuat menjadi huruf besar atau kecil dengan memunculkan ekspresi menggunakan
'char'.ToLower()
atau'char'.ToUpper()
. Jika ada angka yang dikumpulkan tambahkan mereka di akhir.sumber
$_-in0..9
dan-in
operator diperkenalkan di PowerShell v3 bukan regex-match
.Julia,
888778 byteIni adalah fungsi anonim yang menerima string dan mengembalikan string. Untuk menyebutnya, tetapkan ke variabel.
Pertama-tama kita memecah string input menjadi array karakternya, dan mengurutkan array berdasarkan apakah setiap karakter adalah digit. Ini mempertahankan urutan dalam teks dan digit tetapi mendorong digit sampai akhir. Lalu, untuk setiap karakter dalam array, kami memeriksa apakah itu spasi. Jika demikian, ganti dengan garis bawah, jika tidak pilih secara acak salah satu
ucfirst
ataulcfirst
untuk diterapkan pada karakter, sehingga mengubahnya menjadi huruf besar atau kecil. Bergabung dengan array menjadi string dan kita selesai!Coba di sini
Disimpan 9 byte berkat Sp3000!
sumber
Perl,
5148 byteTermasuk +2 untuk
-lp
Jalankan dengan input pada STDIN:
passwordify.pl
:sumber
Faktor, 154 byte
atau 222 dengan mengimpor
kernel splitting sequences ascii combinators.random regexp
Saya tidak terlalu pandai bermain golf, dan saya tidak yakin apakah saya mengambil pendekatan terbaik di sini, tetapi saya pikir saya akan mencobanya.
sumber
Ruby, 84 byte
Fungsi anonim. Menghapus spasi sebelum
c.downcase
menyebabkan kesalahan sintaksis untuk beberapa alasan dan saya tidak yakin mengapa.sumber
Lua, 125 Bytes
Ketika objek bertemu fungsional, Anda dapat melakukan beberapa hal cantik, bahkan di lua! Saya tidak berpikir saya bisa menurunkan ini, ini sudah sangat berantakan, dan saya sudah senang mengalahkan sebagian besar jawaban python: D.
Tidak terseret dan penjelasan
sumber
Serius, 25 byte
Cobalah online!
Penjelasan:
sumber
IPOS - tidak bersaing, 14 byte
Ya, saya menambahkan builtin untuk tantangan ini, tetapi mereka tidak secara khusus ditargetkan pada masalah ini.
Ini bekerja dengan penerjemah versi 0.1 .
Contoh dijalankan
Penjelasan
sumber
PHP, 368 byte
Kode Tidak Terkunci:
sumber
Python 2, 179 byte
Mungkin ada banyak ruang untuk perbaikan di sini yang akan saya kerjakan nanti.
sumber
AWK, 128 Bytes
The
srand()
diperlukan untuk memberikan nomor acak yang berbeda setiap kali berjalan.Agar ini berfungsi dengan baik dengan input multi-line, kita harus meletakkan sesuatu
A=N=""
sebelumfor
loop.sumber
Python 3.5 - 118 byte:
Seperti yang Anda lihat, pada dasarnya saya menggunakan fungsi modul acak
choice
untuk memilih fungsi acak (baik .upper () atau .lower ()) untuk setiap huruf dalam versi string yang diurutkan, di mana semua digit menuju ke akhir. Selain itu, setiap ruang diganti dengan garis bawah pada string yang diurutkan.sumber
PHP,
164158 karakter / byteIni lebih baik daripada golf PHP lainnya , karena:
Naskah
Contoh
sumber
> <> , 73 byte
Tidak ada yang gila di sini, itu:
_
saat bertemuAnda bisa mencobanya di sini !
sumber
Python 3, 151 byte
sumber