Hilfe! Ich habe mich gerade bei Stack Exchange angemeldet, aber mein Passwort vergessen! Ich brauche einen Weg, um das herauszufinden, bevor ich mich abmelde.
Zum Glück bin ich ein ausgezeichneter Hacker. Ich konnte nicht nur den Hash meines Passworts finden, sondern auch den Hashing-Algorithmus von Stack Exchange! Es nimmt den ASCII-Wert jeder Ziffer, multipliziert mit der Stelle dieser Ziffer, und summiert dann alle diese Werte zusammen. Beispielsweise:
"135" -> 1*49 + 2*51 + 3*53 = 310
Ich erinnere mich, dass mein Passwort 3-stellig ist und dass jedes Zeichen eine Zahl zwischen 0 und einschließlich 5 ist (so dass es dem regulären Ausdruck entspricht:) ^[0-5]{3}$
, aber das sind immer noch zu viele Möglichkeiten, um es zu erraten. Ich benötige ein Programm, das einen Hash zurück in potenzielle Passwörter konvertieren kann, aber obwohl ich ein erfahrener Hacker bin, kann ich nicht codieren, um mein Leben zu retten! Diese Tests konnte ich allerdings von Hand ausschreiben:
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
Kann einer von Ihnen ein Programm für mich schreiben, das einen Hashwert aufnimmt und alle möglichen Passwörter ausgibt, die ich hätte verwenden können?
Die Eingabe kann immer mindestens ein gültiges Passwort erzeugen. Jedes Ausgabeformat ist zulässig, solange die Zeichenfolgen eindeutig identifiziert werden können. Ich mache mir auch keine Sorgen um führende Nullen. Wenn also ein potenzielles Passwort vorhanden ist 001
, akzeptiere ich auch 01
oder 1
.
Bitte helfen Sie mir, nicht aus Stack Exchange ausgesperrt zu werden!
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache!
1
Ascii Wert49
statt48
?"135" -> 1*49 + 2*51 + 3*53 = 310
54
kann ich die Nullen vor mir herausfinden.Antworten:
05AB1E , 9 Bytes
Probieren Sie es online!
Gibt eine Liste mit Ziffernlisten zurück.
quelle
C ,
113108 BytesEs ist einzigartig zu sehen, was für die Ausgabe gedacht ist. Die Ausgabe hat das Format: 200010
Alle Passwörter werden dreistellig ohne Trennzeichen geschrieben.
quelle
Gelee , 16 Bytes
Ein monadischer Link, der eine Liste mit Ziffernlisten zurückgibt.
Probieren Sie es online!
Wie?
quelle
Python 2 ,
12675 Bytes-2 dank @ArnoldPalmer
Probieren Sie es online!
quelle
P/6/6
‚s mitP/36
, speichern Sie 2 BytesMATL , 20 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 81 Bytes
Probieren Sie es online!
quelle
Haskell,
71706461 BytesProbieren Sie es online!
quelle
C # (.NET Core) ,
133 131 125123 BytesProbieren Sie es online!
quelle
Console.Write($"{i%48}{j%48}{k%48},");
für die Ausgabe zu verwenden, anstatt einen Rückgabewert zu erstellen, und die unnötigen Klammern um die if-Anweisung zu entfernen, um 8 Bytes zu sparen.Func<int,string>
, aber wenn Sie es als definieren,Action<int>
erwartet es keinen Rückgabewert.char
undint
in C # spielen, können Sie Ihre Iterationsvariablen wiechar
in der ersten Schleife deklarieren und trotzdem die Hash-Berechnung genauso durchführen, wie Sie es tun, während Sie denConsole.Write()
Satz vereinfachen . Auf diese Weise erhalten Sie eine richtige 119-Byte-Lösung. Probieren Sie es online!Holzkohle , 33 Bytes
Probieren Sie es online!
Ein ähnlicher Ansatz für andere Antworten: Dreimaliges Schleifen von 0 bis 5, Berechnen des Hashs und Drucken des Status der Iterationsvariablen, wenn er mit dem Eingabe-Hash übereinstimmt.
Link zur ausführlichen Version .
quelle
CJam ,
2625 Bytes-1 Byte dank Challenger5
Anonymer Block, der den Hash auf dem Stapel erwartet (als Ganzzahl) und das Ergebnis auf dem Stapel belässt (als Liste von Zeichenfolgen).
Probieren Sie es online!
Erläuterung
quelle
{:H;6Zm*{s:i3,:).*:+H=},}
ist 1 Byte kürzer. Der Filter verwendet Ziffernfolgen anstelle von Zahlen, umm*
den automatischen Bereich zu verwenden.Java, 162 Bytes
quelle
JavaScript (Firefox 30-57), 72 Byte
quelle
Pyth, 18 Bytes
quelle
QBIC , 40 Bytes
Erläuterung
quelle
R ,
676261 Bytes-5 Bytes dank Jarko Dubbeldam
Probieren Sie es online!
liest die Nummer aus
stdin
; Gibt eine Matrix zurück, in der die Zeilen die Zeichen sind.Es generiert alle möglichen Zifferntrios in einem Matrixformat (
b
), berechnet das Matrixproduktb * [1,2,3]
, nimmtb
die übereinstimmenden Zeilen (subtrahiert288
von der Eingabe, die ist1*48+2*28+3*48
) und gibt sie zurück.quelle
t(t(m))
ist eine Abkürzung füras.matrix(m)