Cerita
Saya perlu mengingat banyak kata sandi dan tidak ingin menggunakan kata sandi yang sama untuk beberapa situs web, jadi saya membuat aturan, tetapi aturannya seharusnya tidak transparan sehingga yang saya lakukan adalah:
- Pikirkan kata atau konsep yang panjang seperti
breadpudding
. - Ganti huruf pertama dengan situs tempat kita masuk. Jika kita masuk
google
, kata kita menjadigreadpudding
. - Buat huruf besar pertama.
- Ubah huruf kedua menjadi sebuah
@
tanda. - Jika kata sandi dimulai dengan non-konsonan, tambahkan nomor tertentu (seperti
1234
); jika tidak, tambahkan nomor lain (seperti4321
).
Ta da, Anda sekarang memiliki kata sandi yang memadai.
Proses ini sulit, jadi saya perlu program untuk menghasilkan ini untuk saya berdasarkan hal berikut:
Masalah
Masukan yang diberikan:
a
: kata awal, yang merupakan string dan selalu huruf kecil, dan dijamin lebih dari 3 karakter.b
: situs tempat kami masuk, yang merupakan string dan selalu huruf kecil, dan dijamin tidak kosong.c
: angka untuk non-konsonan, yang merupakan bilangan bulat positif yang mungkin memiliki nol terkemuka.d
: angka untuk konsonan, yang merupakan bilangan bulat positif yang mungkin memiliki nol terkemuka.
Keluarkan string berdasarkan kriteria di atas.
Uji kasus
Memasukkan a="volvo", b="gmail", c=5555, d="0001"
G@lvo0001
Memasukkan a="sherlock", b="9gag", c=31415926535, d=3
9@erlock31415926535
Memasukkan a="flourishing", b="+google", c=11111, d=2222
+@ourishing11111
Aturan
y
adalah konsonan.- Jika Anda memutuskan
c
ataud
bilangan bulat, Anda dapat menguraikannya seperti itu, dan angka nol di depannya dapat diabaikan (0091
diperlakukan sebagai91
) - Ruang putih dan baris baru yang tertinggal diizinkan.
- Anda dapat menampilkan hasilnya ke STDOUT atau mengembalikan hasilnya dalam suatu fungsi.
- Karakter diizinkan masuk
a
danb
sedang[a-z0-9!@#$%^&*()_+=-]
. - Anda dapat menerima 4 input dalam urutan yang konsisten.
Ini adalah kode-golf . Kode terpendek dalam byte menang.
Jawaban:
Jelly , 17 byte
Sebuah program penuh, mengambil argumen dalam urutan
b
,a
,c
,d
.Cobalah online!
Bagaimana?
Link utama adalah diad, mengambil
b
dana
, masukan Program kemudianb
,a
,c
, dand
(ke-3 melalui argumen baris perintah keenam), sehinggac
dand
diakses seperti itu.sumber
Python 3 , 69 byte
Cobalah online!
sumber
b[0]not in"aeiou"
saja?9
dianggap sebagai non-konsonan.z
adalah char maksimum yang mungkin):('a'<b[0])*b[0]not in"eiou"
05AB1E ,
222018 byteInput diambil sebagai
b,a,c,d
Cobalah online!
Penjelasan (kedaluwarsa)
0è
digunakan dalam tautan karenaн
belum ditarik ke TIO.sumber
Javascript ES6, 87 byte
Demo
Tampilkan cuplikan kode
sumber
{|}~
bukan karakter yang valid, Anda dapat menggantinya/[bcdfghjklmnpqrstvwxyz]/.test(b[0])?d:c
dengan/[ -_aeiou]/.test(b[0])?c:d
minus 13 byteC,
441286139 Bytessumber
argv[1][0]='c'|argv[1][0]='c'|...
mana c = konsonan, Anda dapat dengan mudah mengurangi ini dengan melakukan!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u')
Mengurangi skor sebesar 264 hanya dengan itu!(argv[0][1]>='a'&argv[0][1]<='z'&!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u'))
. Masih lebih pendek dengan selisih. Namun ada begitu banyak cara untuk bermain golf kode ini saya tidak tahu harus mulai dari mana ...: sR ,
105103 byteFungsi anonim. Mengevaluasi ke
yang ada di TIO. Tolong bantu saya golf regex itu karena saya buruk pada mereka.
Disimpan 2 byte dari Giuseppe.
Cobalah online!
sumber
!grepl('[aeiouy]',m)
grepl('[aeiouy]',m)
dan hanya swapc
dand
."if"
membuatif
sintaks lebih rapi daripada menggunakanelse
atauifelse
; Saya juga menyimpansubstring
ke variabel danm
langsung ke huruf besar untuk menyimpan byte.pryr
mencoba membuatsubstring
argumen; dan Andagrepl
hanya menemukan "bukan vokal", yang tidak sama dengan konsonan. Hal"if"
yang baru saja saya lewatkan, terima kasih telah menunjukkan itu.pryr::f
tidak akan menyukainya; Anda bisa menggunakan regex '[az && [^ aeiouy]]' dari jawaban Kevin Cruijissen?Retina ,
8075 byteCobalah online!
Mencoba bahasa baru di sini, mengambil input sesuai urutan yang diberikan dalam pertanyaan
Penjelasan:
Buat kata yang merupakan kata kedua huruf pertama, tanda @, kata pertama dari karakter ke-3 aktif.
Jika kata itu dimulai dengan non-konsonan, tambahkan nomor pertama
Jika masih ada 3 baris yang tersisa (tidak ada substitusi pada langkah terakhir, jadi itu dimulai dengan konsonan), tambahkan angka kedua
Huruf besar huruf pertama
sumber
QBIC , 81 byte
Penjelasan
Perhatikan bahwa dua baris terakhir tampak sama, tetapi penerjemah sedikit mengubah perilaku pada masing-masing
;
: Setiap kali melihat;
instruksi, itu menciptakan variabel baru (dalam hal ini, vars È $and
F $ `adalah yang pertama tersedia setelah membaca semua argumen literal dan garis cmd lainnya) dan menetapkan paraeter baris cmd yang belum ditugaskan untuk variabel tersebut.sumber
JavaScript (ES6), 76 byte
Saya akan menambahkan ini sebagai saran sebagai peningkatan pada solusi Weedoze , tetapi sepertinya saya tidak bisa mengomentari itu karena saya kebanyakan mengintai
sumber
C # , 111 byte
Memeriksa konsonan sangat mahal tanpa kemampuan regex langsung pada
string
jenisnya.sumber
F # , 157 byte
F # masih sangat baru bagi saya sehingga mungkin ada pendekatan yang lebih baik untuk ini.
sumber
Java 8,
112999287 byte-13 byte dengan mengambil parameter
b
terakhir, bukan yang kedua.-1 byte dengan menghapus
y
-7 byte terima kasih kepada @ OlivierGrégoire (dan parameter sudah beres lagi)
-5 byte terima kasih kepada @ PunPun1000
Penjelasan:
Coba di sini.
sumber
y
adalah konsonan sehingga Anda dapat menjatuhkany
di regex Anda selama 1 byte.(a,b,c,d)->
lebih pendek daria->b->c->d->
. Kari hanya membantu untuk 2 parameter. Untuk 3, currying sama dengan no currying. Untuk 4 dan di atas, tidak ada kari yang lebih pendek.(a,b,c,d)->b.toUpperCase().charAt(0)+"@"+a.substring(2)+(b.matches("[a-z&&[^aeiou]].*")?d:c)
panjangnya 92 byte. Juga, ia menggunakan parameter dalam urutan yang tepat (yang membingungkan saya pada awalnya :-().toUpperCase()
dan kemudian.charAt(0)
memang lebih pendek .. Tidak yakin bagaimana saya melewatkan itu. (Dan urutan yang berbeda adalah untuk memungkinkan(b=...)
, yang tidak akan mungkin terjadi jika itu bukan parameter terakhir dengan kari, karena dengan demikian harusfinal
/ implisitfinal
.){|}~
bukan karakter yang valid, Anda dapat menggunakan[ -_aeiou]
untuk non konsonan dan swapd
danc
untuk minus 5 byteV , 25 byte
Cobalah online!
Membawa argumen dalam buffer secara berurutan:
sumber
Bash 4 , 76 byte
Bekerja di Bash 4:
sumber
Ruby , 73 byte
Cobalah online!
sumber
JavaScript (ES6), 69 byte
Cukup sederhana, mungkin bisa bermain golf
sumber