সাহায্য করুন! আমি আমার পাসওয়ার্ড ভুলে গেছি!


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

স্ট্যাক এক্সচেঞ্জের বাইরে থাকা থেকে আমাকে সহায়তা করুন!

স্কোরিং

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ত উত্তরটি জিতে যায়!


নয় 1এর ASCII মান 49পরিবর্তে 48?
লিফডওয়েভেন 14

1
@ লর্ড ফারকোয়াড পরীক্ষার কেসগুলি দেখতে সুন্দর তবে উদাহরণটি হওয়া উচিত"135" -> 1*49 + 2*51 + 3*53 = 310
লিফডওয়েভেন

1
কমা দ্বারা সীমিত করা আবশ্যক (এক বা একাধিক স্পেসের পরে একটি কমাও ঠিক আছে) কেন সীমাবদ্ধ আউটপুট ফর্ম্যাট? আমরা সাধারনত নমনীয় ফর্ম্যাটগুলি
লুইস মেন্ডো

1
এখানে সাধারনত বলতে হবে "কোনও আউটপুট ফর্ম্যাট অনুমোদিত, যতক্ষণ না স্ট্রিংগুলি পরিষ্কারভাবে চিহ্নিত করা যায়"। অথবা হতে পারে যে কোনও অ-সংখ্যাীয় বিভাজককে অনুমতি দিন allow আপনি যদি এটি পরিবর্তন করেন তবে বর্তমান উত্তরদাতাদের তাদের উত্তরে একটি মন্তব্য দিয়ে জানান
লুইস মেন্ডো

1
@ ফিলিপনার্দিবাটিস্তা ইয়েপ, শীর্ষস্থানীয় জিরোগুলি alচ্ছিক। আমার মনে আছে আমি 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 ধন্যবাদ @ আর্নল্ডপালমারকে ধন্যবাদ

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

এমএটিএল , 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

সি # (.নেট কোর) , 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 বাইট সংরক্ষণের জন্য if স্টেটমেন্টের চারপাশে অপ্রয়োজনীয় বন্ধনীগুলি সরিয়ে ফেলা।
কামিল দ্রাকারী

আমি আগে এই বিকল্পটি চেষ্টা করেছিলাম, তবে ল্যাম্বদার একটি ফেরতের মান প্রয়োজন। বন্ধনীগুলি সরানো যদিও কাজ করবে। ধন্যবাদ :)
jkelm

ল্যাম্বদা একটি রিটার্ন মান প্রয়োজন যেমন Func<int,string>আপনি এটি হিসাবে সংজ্ঞায়িত করেন তবে আপনি যদি এটিরূপে সংজ্ঞা দেন Action<int>তবে এটি কোনও ফেরতের মান আশা করে না।
কামিল দ্রাকারী

বুঝতে পারিনি! আমি সি # এবং গল্ফ উভয়ের ক্ষেত্রেই নতুন, তবে কাজ করার সময় আমার আর কিছু করার নেই, তখন চেষ্টা করার সিদ্ধান্ত নিয়েছি। টিপস জন্য আবার ধন্যবাদ। আমি তাদের গ্রেপ্তার করি।
জেকলেম

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.

@ লর্ড ফারকোয়াড ওহ, আহ ... আমি প্রথম স্থানেও এটি দেখতে পাইনি তাই অনুমান করি যে ভাগ্যবান
বিজনেস বিড়াল

{: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

কিউবিআইসি , 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)
জেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.