मदद! मैं अपना पासवर्ड भूल गया!


24

मदद! मैंने केवल स्टैक एक्सचेंज में लॉग इन किया, लेकिन मैं भूल गया कि मेरा पासवर्ड क्या है! मुझे लॉग ऑफ करने से पहले इसे काम करने का तरीका चाहिए।

सौभाग्य से, मैं एक उत्कृष्ट हैकर हूं। न केवल मैं अपने पासवर्ड के हैश का पता लगाने में सक्षम था, बल्कि मैंने स्टैक एक्सचेंज के हैशिंग एल्गोरिथ्म को भी पाया! यह प्रत्येक अंक के ASCII मूल्य को उस अंक के स्थान से गुणा करता है, फिर उन सभी मानों को एक साथ जोड़ देता है। उदाहरण के लिए:

"135" -> 1*49 + 2*51 + 3*53 = 310

मुझे याद है कि मेरा पासवर्ड 3 अंक लंबा है, और यह कि प्रत्येक वर्ण 0 और 5 समावेशी (जैसे कि यह रेगेक्स से मेल खाएगा ^[0-5]{3}$) के बीच एक संख्या है , लेकिन अनुमान लगाने के लिए अभी भी बहुत अधिक संभावनाएं हैं। मुझे एक प्रोग्राम की आवश्यकता है जो एक हैश को संभावित पासवर्ड में बदल सकता है, लेकिन एक विशेषज्ञ हैकर होने के बावजूद, मैं अपने जीवन को बचाने के लिए कोड नहीं कर सकता! मैं इन परीक्षणों को हाथ से लिखने में सक्षम था, हालांकि:

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

क्या आप में से कोई मेरे लिए एक प्रोग्राम लिख सकता है जो हैश में ले जाएगा और मेरे द्वारा उपयोग किए जा सकने वाले सभी संभावित पासवर्डों को प्रिंट करेगा?

इनपुट हमेशा कम से कम एक वैध पासवर्ड का उत्पादन करने में सक्षम होगा। किसी भी आउटपुट स्वरूप की अनुमति है, जब तक कि तारों को स्पष्ट रूप से पहचाना जा सके। मुझे अग्रणी शून्य के बारे में भी चिंता नहीं है, इसलिए यदि एक संभावित पासवर्ड है 001, तो मैं भी स्वीकार करूंगा 01या 1

कृपया मुझे स्टैक एक्सचेंज से लॉक होने में मदद करें!

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है!


के बजाय 1Ascii मान 49नहीं है 48?
LiefdeWen

1
@ लॉर्डफर्क्वाड परीक्षण के मामले ठीक दिखते हैं, लेकिन उदाहरण होना चाहिए"135" -> 1*49 + 2*51 + 3*53 = 310
LiefdeWen

1
अल्पविराम द्वारा सीमांकित किया जाना चाहिए (एक अल्पविराम के बाद एक या अधिक रिक्त स्थान ठीक है) प्रतिबंधात्मक आउटपुट प्रारूप क्यों? हम सामान्य रूप से लचीले स्वरूपों की अनुमति देते हैं
लुइस मेंडू

1
यहाँ सामान्य बात है कि "किसी भी प्रकार के प्रारूप की अनुमति दी जाती है, जब तक कि तारों को स्पष्ट रूप से पहचाना जा सके"। या शायद किसी भी गैर-संख्यात्मक विभाजक की अनुमति दें। यदि आप इसे बदलते हैं, तो वर्तमान उत्तरदाताओं को उनके उत्तर में एक टिप्पणी के साथ सूचित करें
लुइस मेंडू

1
@FelipeNardiBatista हां, प्रमुख शून्य वैकल्पिक हैं। मुझे याद है कि मैंने 3 अंकों का उपयोग किया था, इसलिए अगर मैं देखूं तो मैं 54सामने वाले शून्य को काम कर सकता हूं।
लॉर्ड फरक्वाड

जवाबों:



9

सी , 113 108 बाइट्स

f(int h){int i=47,j,k;while(++i<54)for(j=47;++j<54)for(k=47;++k<54;)if(h==i+j+j+k*3)printf("%c%c%c",i,j,k);}

यह देखने के लिए अद्वितीय है कि आउटपुट के लिए क्या है, आउटपुट प्रारूप का है: 200010

सभी पासवर्ड बिना सीमांकक के 3 अंकों के रूप में लिखे गए हैं।


2
अरे, कोड मैं पढ़ सकता हूँ! जैली और इस तरह के विपरीत। एक क्लासिक भाषा का उपयोग करने के लिए +1। :)
वाइल्डकार्ड

8

जेली , 16 बाइट्स

Ṿ€Oæ.J
6Ḷṗ3Ç⁼¥Ðf

अंकों की सूचियों की सूची लौटाने वाला एक विचित्र लिंक।

इसे ऑनलाइन आज़माएं!

कैसे?

Ṿ€Oæ.J - Link 1, hash: list of integers (the digits of a password)
Ṿ€     - unevaluate €ach (giving a list of characters)
  O    - cast to ordinals (Ṿ€O could actually be replaced with +48 too)
     J - range of length (i.e. [1,2,3] in all use-cases)
   æ.  - dot product

6Ḷṗ3Ç⁼¥Ðf - Main link: number, n
6Ḷ        - lowered range of 6 = [0,1,2,3,4,5]
  ṗ3      - Cartesian power with 3 = [[0,0,0],[0,0,1],...,[5,5,5]] (all passwords)
       Ðf - filter keep if:
      ¥   -   last two links as a dyad (right implicitly n):
    Ç     -     call last link (1) as a monad
     ⁼    -     equals right?

5

पायथन 2 , 126 75 बाइट्स

-2 @AnnoldPalmer को धन्यवाद

lambda h:[(P/36,P%36/6,P%6)for P in range(216)if P/36+P%36/6*2+P%6*3==h&31]

इसे ऑनलाइन आज़माएं!


यदि आप दोनों P/6/6की जगह लेते हैं P/36, तो आप 2 बाइट बचाते हैं
अर्नोल्ड पामर

यह ठीक वैसा ही है जैसा मैं लिखने वाला था, +1
musicman523


4

MATL , 20 बाइट्स

'0':'5'3Z^t3:*!si=Y)

इसे ऑनलाइन आज़माएं!

व्याख्या

'0':'5'   % Push inclusive range from '0' to '5', that is, '012345'
3Z^       % Cartesian power with exponent 3. Each Cartesian tuple is a row
t         % Duplicate
3:        % Push [1 2 3]
*         % Multiply element-wise with broadcast
!s        % Sum of each row
i         % Input number
=         % Logical mask of values that equal the input
Y)        % Use as logical index into the rows of the matrix. Implicit display



2

सी # (.NET कोर) , 133 131 125 123 बाइट्स

n=>{int i,j,k;for(i=48;i<54;++i)for(j=48;j<54;++j)for(k=48;k<54;++k)if(i+j*2+k*3==n)Console.Write($"{i%48}{j%48}{k%48},");}

इसे ऑनलाइन आज़माएं!


मैंने पहले से अधिक गहन सलाह दी, लेकिन मुझे यह सही काम करने के लिए नहीं मिला। अभी के लिए मेरा साधारण अनुकूलन Console.Write($"{i%48}{j%48}{k%48},");रिटर्न वैल्यू बनाने के बजाय आउटपुट के लिए उपयोग करना है, और यदि 8 बाइट्स को बचाने के लिए स्टेटमेंट के आसपास अनावश्यक ब्रैकेट्स को हटाना है।
कामिल दकरी

मैंने पहले उस विकल्प की कोशिश की थी, लेकिन लैंबडा को रिटर्न वैल्यू की आवश्यकता है। कोष्ठक हटाने हालांकि काम करेगा। धन्यवाद :)
jkelm

लैम्बडा को यदि आप इसे परिभाषित करते हैं Func<int,string>, तो आपको रिटर्न वैल्यू की आवश्यकता होती है , लेकिन यदि आप इसे परिभाषित करते हैं, Action<int>तो यह रिटर्न वैल्यू की उम्मीद नहीं करता है।
कामिल दकरी

इसका एहसास नहीं हुआ! मैं c # और गोल्फ दोनों के लिए नया हूं, लेकिन जब मैंने काम पर कुछ और नहीं किया तो मैंने इसे आजमाने का फैसला किया। टिप्स के लिए फिर से धन्यवाद। मैं उनकी बहुत सराहना करता हूं।
jkelm

1
आप के बीच अस्पष्टता के साथ खेलते हैं तो charऔर intसी # में, आप के रूप में अपने यात्रा चर घोषणा कर सकते हैं charपहले पाश में है और अभी भी हैश गणना बिल्कुल के रूप में आप जबकि सरल बनाने करते Console.Write()वाक्य। इस प्रकार आप एक उचित 119 बाइट समाधान प्राप्त कर सकते हैं। इसे ऑनलाइन आज़माएं!
चार्ली

2

चारकोल , 33 बाइट्स

F⁶F⁶F⁶¿⁼⁺℅Iι⁺×℅Iκ²×℅Iλ³Iθ«IιIκIλ⸿

इसे ऑनलाइन आज़माएं!

अन्य उत्तरों के लिए एक समान दृष्टिकोण: 0 से 5 तक लूप तीन बार, हैश की गणना करें और यदि इनपुट हैश के साथ मेल खाता है तो पुनरावृति चर की स्थिति को प्रिंट करें।

वर्बोज़ संस्करण से लिंक करें ।


2

सीजेएम , 26 25 बाइट्स

चैलेंजर 5 के लिए -1 बाइट धन्यवाद

{:H;6Zm*{s:i3,:).*:+H=},}

बेनामी ब्लॉक स्टैक पर हैश की उम्मीद करता है (एक पूर्णांक के रूप में) और स्टैक पर परिणाम छोड़ता है (स्ट्रिंग्स की एक सूची के रूप में)।

इसे ऑनलाइन आज़माएं!

व्याख्या

:H;    e# Store the hash in H.
6Zm*   e# 3rd Cartesian power of [0 1 2 3 4 5].
{      e# For each tuple in the power:
 s     e#  Stringify the tuple.
 :i    e#  Get the code point of each digit.
 3,:)  e#  Push [1 2 3].
 .*    e#  Element-wise multiplication of the two lists.
 :+    e#  Sum the result.
 H=    e#  Check if it's equal to the hash.
},     e# Filter the tuples to only ones for which this block gave a truthy result.

@LordFarquaad ओह, उह ... मैंने यह भी नहीं देखा कि पहली जगह में मुझे लगता है कि यह भाग्यशाली है
व्यवसाय बिल्ली

{:H;6Zm*{s:i3,:).*:+H=},}1 बाइट छोटी है। यह संख्याओं के बजाय फ़िल्टर में अंकों के तार का उपयोग करता है ताकि m*स्वचालित रेंज का उपयोग किया जा सके ।
बजे फल जूला

@ चैलेंजर 5 अच्छा, धन्यवाद!
बिज़नेस कैट

2

जावा, 162 बाइट्स

static void f(int n){for(int i=48;i<54;i++){for(int j=48;j<54;j++){for(int k=48;k<54;k++){if(i+j*2+k*3==n)System.out.println((char)i+""+(char)j+""+(char)k);}}}}

2

जावास्क्रिप्ट (फ़ायरफ़ॉक्स 30-57), 72 बाइट्स

n=>[for(i of s="012345")for(j of s)for(k of s)if(n-i-j*2-k*3==288)i+j+k]


1

QBIC , 40 बाइट्स

[0,5|[0,5|[0,5|~a+b+b+c+c+c+288=:\?a,b,c

व्याख्या

[0,5|                Make a FOR loop run through the possible digits for pos 1, called a
[0,5|                Loop for #2, b
[0,5|                Loop for #3, c
                     Calculate the hash by taking a once, b twice and c thrice, 
                     and raising all to their ASCII codepoints
 a+b+b+c+c+c+288       
~               =:   IF thta is euqal to the given hash (read from cmd line)
\?a,b,c              THEN print the digits
                     (the IF and the FOR loops are auto-closed by QBIC)

1

आर , 67 62 61 बाइट्स

-5 बाइट्स जर्को डबेलडैम के लिए धन्यवाद

b=t(t(expand.grid(rep(list(0:5),3))));b[b%*%1:3==scan()-288,]

इसे ऑनलाइन आज़माएं!

से संख्या पढ़ता है stdin; एक मैट्रिक्स लौटाता है जहाँ पंक्तियाँ वर्ण हैं।

यह एक मैट्रिक्स प्रारूप ( b) में मैट्रिक्स के सभी संभावित तीन अंकों को उत्पन्न करता है, मैट्रिक्स उत्पाद की गणना करता है b * [1,2,3], bजो कि मैच की पंक्तियों को ले जाता है ( 288इनपुट से घटाना जो है 1*48+2*28+3*48) और उन्हें वापस कर देता है।


1
t(t(m))के लिए एक आशुलिपि हैas.matrix(m)
JAD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.