Kata-kata umum harus tetap dihindari untuk digunakan sebagai kata sandi. Tantangan ini adalah tentang coding program yang sangat sederhana yang munges password yang diberikan ( M odify U ntil N ot G uessed E asily).
Memasukkan
Sebuah kata, yang merupakan string yang ditulis dalam alfabet abcdefghijklmnopqrstuvwxyz
. Tidak masalah jika hurufnya kecil atau besar.
Munging
- Ubah urutan berulang dari huruf yang sama menjadi dirinya sendiri didahului dengan berapa kali surat itu diulang (
LLLL
dengan4L
) - Ubah dulu
a
dengan@
- Ubah dulu
b
dengan8
- Ubah dulu
c
dengan(
- Ubah dulu
d
dengan6
- Ubah dulu
e
dengan3
- Ubah dulu
f
dengan#
- Ubah dulu
g
dengan9
- Ubah dulu
h
dengan#
- Ubah dulu
i
dengan1
- Ubah yang kedua
i
dengan!
- Ubah dulu
k
dengan<
- Ubah dulu
l
dengan1
- Ubah yang kedua
l
dengani
- Ubah dulu
o
dengan0
- Ubah dulu
q
dengan9
- Ubah dulu
s
dengan5
- Ubah yang kedua
s
dengan$
- Ubah dulu
t
dengan+
- Ubah dulu
v
dengan>
- Ubah yang kedua
v
dengan<
- Ubah dulu
w
denganuu
- Ubah yang kedua
w
dengan2u
- Ubah dulu
x
dengan%
- Ubah dulu
y
dengan?
Aturan 1 harus diterapkan beberapa kali hingga tidak mungkin untuk menerapkannya lebih lanjut. Setelah itu sisa aturan diterapkan.
Keluaran Kata mungis
Contohnya
codegolf
->(0639o1#
programming
->pr09r@2m1ng
puzzles
->pu2z135
passwords
->p@25uu0r6$
wwww
->4uu
aaaaaaaaaaa
->11a
lllolllolll
->3103io3l
jjjmjjjj
->3jm4j
Ini kode-golf , jadi harap buat program Anda sesingkat mungkin!
Tidak ada dalam posting ini yang dapat digunakan sebagai ide kata sandi atau sebagai bagian dari praktik kata sandi.
Jawaban:
Java 8,
237321319280247241240237 byte+84 byte karena aturan mendapat perubahan .. ( EDIT: Akhirnya kembali ke 237 byte awal saya. ) Mengganti
WWWW
dengan222W
mudah di Jawa, tetapi dengan4W
tidak .. Kalau saja Jawa punya cara untuk menggunakan regex capture-group untuk sesuatu. Memperoleh panjang lebar"$1".length()
, mengganti kecocokan itu sendiri dengan"$1".replace(...)
, mengubah kecocokan menjadi bilangan bulat dengannew Integer("$1")
, atau menggunakan sesuatu yang mirip dengan Retina (yaitus.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")
) atau JavaScript (yaitus.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))
) akan menjadi hal nomor 1 saya yang ingin saya lihat di Jawa di masa depan untuk mendapatkan keuntungan dari codegolfing ..>.> Saya pikir ini adalah kali ke-10 saya benci Java tidak bisa melakukan apa-apa dengan pertandingan grup-tangkap ..-78 byte terima kasih kepada @ OlivierGrégoire .
I / O adalah huruf besar.
Penjelasan:
Coba di sini.
sumber
JavaScript (ES6), 147 byte
Uji Kasus
Tampilkan cuplikan kode
Penjelasan
Berjalan melalui serangkaian penggantian pada string input
s
,, dalam urutan yang ditentukan oleh tantangan. Setiap item dalam seri adalah array atau string, dengan dua item, yang kemudian menyebar (...r
) dan diteruskan kes.replace()
.sumber
05AB1E , 69 byte
-9 byte terima kasih kepada Emigna
Cobalah online!
sumber
'w„uu„2u‚â
4uu
γvygD≠×yÙ}J
Perl 5 , 152 + 1 (
-p
) = 153 byteCobalah online!
sumber
-p
digunakan sebagai argumenperl
pada pada commandline yang secara otomatis membaca input dariSTDIN
danprint
isi dari$_
di akhir skrip. TIO memungkinkan opsi itu, dan karenaperl -pe<code>
1 byte lebih dariperl -e<code>
itu dihitung sebagai satu byte tambahan.~
antaraj~k
menjadi!
? Saat ini menggantikan kejadian keduai
dengan~
bukannya a!
.Mungkin bukan golf yang paling bisa, tapi berhasil.
-6 byte berkat ovs
-77 Bytes berkat NieDzejkob dan Jonathan French
Python 3 ,
329323 byte,246 byteCobalah online!
sumber
.lower()
jjjmjjjj
seharusnya output3jm4j
tetapi output3jm3jj
. Sunting: 258 byte dengan masalah ini diperbaikiRetina ,
166124 byteCobalah online! Penjelasan:
Ganti serangkaian huruf yang berulang dengan panjang dan huruf itu.
Mencocokkan kejadian pertama dari surat-surat
a
untuky
dan menandai mereka dengan pengganti.Perbaiki kemunculan pertama
w
.Perbaiki kemunculan pertama semua surat lainnya dari
a
key
dan hapus placeholder.Tandai (awalnya) terjadinya kedua dari surat-surat
i
,l
,s
,v
, atauw
dengan pengganti.Perbaiki kemunculan kedua
w
.Perbaiki kemunculan kedua dari empat huruf lainnya.
sumber
Haskell ,
221218213 byteCobalah online!
Abuse
foldr
untuk menjalankan string melalui urutan transformasi string mundur. Urutan "dimulai" denganr
yang pengulangan menghitung penggantian dengan menggunakanspan
untuk mematahkan ekor tali ketika berhenti sama dengan kepala. Jika bagian pertama dari itu tidak kosong itu adalah pengulangan jadi kami mencetak panjang +1. Selanjutnya kita mencari argumenf
untuk setiap penggantian karakter dengan urutan (terbalik). Pengganti dikodekan sebagai string tunggal dengan karakter pertama menjadi karakter yang akan diganti dan sisanya sebagai string (karena penggantian w adalah beberapa karakter) untuk menggantikannya. Saya menempatkan string yang disandikan ini dalam satu string besar yang dipisahkan oleh spasi sehinggawords
dapat memecahnya menjadi daftar untuk saya.EDIT: Terima kasih @Laikoni karena telah menyelamatkan saya 5 byte! Itu penggunaan cerdas yang
$
tidak terpikirkan oleh saya. Saya juga tidak tahu<-
trik itu.sumber
(p,q)<-span(==a)b
sebagai gantilet(p,q)=span(==a)b
danp>[]
bukannyap/=[]
.m
pointfree:($(f<$>words"w2u ... y?")++[r]).foldr($)
Cobalah online!Lua , 173 byte
Cobalah online!
Tidak digabungkan dan dijelaskan:
sumber
C # (.NET Core),
317,289, 279 BytesCobalah secara Online!
Saya harap tidak apa-apa untuk menerima array char sebagai input dan bukan string.
Tidak Disatukan :
sumber
C ++,
571495478444 byte-127 byte berkat Zacharý
yang
"/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"
string digunakan untuk mengubah dari satu karakter ke orang lain. 1/
berarti "char berikutnya" pertama harus diganti dengan yang mengikuti berikutnya/
, 2 berarti "char berikutnya" kedua harus diganti dengan yang berikut.Cobalah online
sumber
R ,
224219 byteCobalah online!
Jahat, tetapi bagian utama adalah substitusi berulang di Internet
Reduce
.sub
hanya mengubah kemunculan pertama pertandingan.Terima kasih kepada JayCe karena menunjukkan golf yang bagus!
sumber
Perl 5 , 123 byte
122 byte kode +1 untuk
-p
.Dikembangkan secara independen dari @ Xcali 's jawaban , tapi menggunakan proses yang sangat mirip.
Cobalah online!
sumber
Python 2 ,
220216194190188 byteCobalah online!
Python 3 , 187 byte
Cobalah online!
sumber
Pip ,
103102 byteCobalah online!
Penjelasan
Kode melakukan tiga langkah transformasi:
* Kita perlu menguji apakah
a@?m@0
nol. Tidak cukup untuk menguji apakah itu benar, karena 0 adalah indeks sah yang salah. Pip tidak memiliki cara pendek untuk menguji apakah suatu nilai adalah nihil, tetapi menguji panjangnya cukup baik dalam kasus ini: angka apa pun akan memiliki panjang setidaknya 1 (benar), dan nil memiliki panjang nihil (falsey).sumber