Membantu! Saya baru saja masuk ke Stack Exchange, tetapi saya lupa kata sandi saya! Saya perlu cara untuk menyelesaikannya sebelum saya logout.
Untungnya, saya adalah peretas yang hebat. Tidak hanya saya dapat menemukan hash kata sandi saya, tetapi saya juga menemukan algoritma hashing Stack Exchange! Dibutuhkan nilai ASCII dari setiap digit dikalikan dengan tempat digit itu, lalu menjumlahkan semua nilai itu bersama-sama. Sebagai contoh:
"135" -> 1*49 + 2*51 + 3*53 = 310
Saya ingat kata sandi saya panjangnya 3 digit, dan setiap karakter adalah angka antara 0 dan 5 inklusif (sehingga akan cocok dengan regex:) ^[0-5]{3}$
, tapi itu masih terlalu banyak kemungkinan untuk ditebak. Saya memerlukan sebuah program yang dapat mengubah hash kembali menjadi kata sandi potensial, tetapi meskipun merupakan seorang peretas ahli, saya tidak dapat kode untuk menyelamatkan hidup saya! Saya bisa menulis tes ini dengan tangan:
input -> output
288 -> 000 // lowest possible hash
290 -> 200, 010
298 -> 022, 050, 103, 131, 212, 240, 321, 402, 430, 511
318 -> 555 // highest possible hash
Bisakah salah satu dari Anda menulis sebuah program untuk saya yang akan mengambil hash dan mencetak semua kata sandi yang mungkin bisa saya gunakan?
Input akan selalu dapat menghasilkan setidaknya satu kata sandi yang valid. Semua format output diperbolehkan, selama string dapat diidentifikasi dengan jelas. Saya juga tidak khawatir tentang memimpin nol, jadi jika kata sandi potensial 001
, saya juga akan menerima 01
atau 1
.
Tolong bantu saya agar tidak dikunci dari Stack Exchange!
Mencetak gol
Ini kode-golf , jadi jawaban tersingkat di setiap bahasa menang!
1
's nilai Ascii49
bukan48
?"135" -> 1*49 + 2*51 + 3*53 = 310
54
saya bisa menghitung nol di depan.Jawaban:
05AB1E , 9 byte
Cobalah online!
Mengembalikan daftar daftar digit.
sumber
C ,
113108 byteSangat unik untuk melihat apa yang dimaksudkan untuk output, output dari format: 200010
Semua kata sandi ditulis sebagai 3 digit tanpa pembatas.
sumber
Jelly , 16 byte
Tautan monadik mengembalikan daftar daftar digit.
Cobalah online!
Bagaimana?
sumber
Python 2 ,
12675 byte-2 Terima kasih kepada @ArnoldPalmer
Cobalah online!
sumber
P/6/6
denganP/36
, Anda menghemat 2 byteMATL , 20 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 81 byte
Cobalah online!
sumber
Haskell,
71706461 byteCobalah online!
sumber
C # (.NET Core) ,
133 131 125123 byteCobalah online!
sumber
Console.Write($"{i%48}{j%48}{k%48},");
untuk output daripada membangun nilai kembali, dan menghapus tanda kurung yang tidak perlu di sekitar pernyataan if untuk menyimpan 8 byte.Func<int,string>
, tetapi jika Anda mendefinisikannyaAction<int>
maka tidak mengharapkan nilai kembali.char
danint
di C #, Anda dapat mendeklarasikan variabel iterasi Anda sepertichar
di loop pertama dan masih melakukan perhitungan hash persis seperti yang Anda lakukan saat menyederhanakanConsole.Write()
kalimat. Dengan demikian Anda bisa mendapatkan solusi 119 byte yang tepat. Cobalah online!Arang , 33 byte
Cobalah online!
Pendekatan yang mirip dengan jawaban lain: loop tiga kali dari 0 hingga 5, hitung hash dan cetak status variabel iterasi jika itu bertepatan dengan hash input.
Tautan ke versi verbose .
sumber
CJam ,
2625 byte-1 byte terima kasih kepada Challenger5
Blok anonim mengharapkan hash pada stack (sebagai integer) dan meninggalkan hasilnya pada stack (sebagai daftar string).
Cobalah online!
Penjelasan
sumber
{:H;6Zm*{s:i3,:).*:+H=},}
lebih pendek 1 byte. Ini menggunakan string digit dalam filter daripada angka untuk menggunakanm*
rentang otomatis.Java, 162 Bytes
sumber
JavaScript (Firefox 30-57), 72 byte
sumber
Pyth, 18 byte
sumber
QBIC , 40 byte
Penjelasan
sumber
R ,
676261 byte-5 byte berkat Jarko Dubbeldam
Cobalah online!
membaca nomor dari
stdin
; mengembalikan matriks di mana baris adalah karakter.Ini menghasilkan semua trio kemungkinan digit dalam format matriks (
b
), menghitung produk matriksb * [1,2,3]
, mengambil barisb
yang cocok (mengurangi288
dari input yang ada1*48+2*28+3*48
) dan mengembalikannya.sumber
t(t(m))
adalah singkatan untukas.matrix(m)