Ihre Herausforderung besteht darin, den String mit einem Passwort zu versehen! Was ist die Passworteingabe?
Nehmen Sie eine Zeichenfolge als Eingabe. Diese Zeichenfolge enthält nur Großbuchstaben, Kleinbuchstaben, Ziffern und Leerzeichen.
Sie müssen alle Leerzeichen durch Unterstriche ersetzen und alle Zahlen in der Reihenfolge von links nach rechts an das Ende der Zeichenfolge verschieben. Ändern Sie ihn dann für jeden Buchstaben in der Zeichenfolge nach dem Zufallsprinzip in Groß- oder Kleinbuchstaben.
Beispiele (Groß- und Kleinschreibung sollte sich jedes Mal ändern):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
Kürzester Code in Bytes gewinnt!
Wer sich bei Information Security SE erkundigt, ob dies ein guter Hashalgorithmus ist, gewinnt! - Keine Sorge, SE-Overlords, ich mache nur Spaß.
Antworten:
Pyth, 15 Bytes
Demonstration
quelle
Labyrinth , 76 Bytes
Eine weitere Zusammenarbeit mit @ MartinBüttner und auf der verrückteren Seite des Labyrinth-Spektrums - zum ersten Mal haben wir alle vier
^>v<
in einem Programm. Probieren Sie es online!Erläuterung
Der allgemeine Algorithmus, der in einer Schleife ausgeführt wird, lautet wie folgt:
Um die Erklärung kompakt zu halten, ist hier ungefähr angegeben, wie jeder Teil des Programms dem obigen Pseudocode entspricht:
Hier sind die interessanten Teile.
Zufälligkeit im Labyrinth
Es gibt nur einen Weg, um Zufälligkeit in Labyrinth zu bekommen, und zwar, wenn die IP versucht, vorwärts zu gehen, aber 1) es gibt weder einen Pfad vorwärts noch rückwärts und 2) es gibt Pfade links und rechts. In diesem Fall wählt die IP zufällig zwischen der linken und der rechten Route.
Dies ist nur mit den
^>v<
Operatoren möglich, dien
die Zeile / Spalten
um 1 verschieben. Zum Beispiel das Programm ( Online ausprobieren! )Gibt entweder 1 oder 2 nach dem Zufallsprinzip aus, da die
v
Spalte mit dem Offset 0 (dh die Spalte, in der die IP aktiv ist) um 1 verschoben wird, was ergibtDie IP zeigt nach rechts und versucht vorwärts zu gehen (Stack-Spitze ist Null), kann aber nicht. Es kann sich auch nicht rückwärts bewegen, also wählt es nach dem Zufallsprinzip zwischen links und rechts.
Golf-Tricks
Das Programm startet ab dem ersten Zeichen in der Lesereihenfolge. Sie werden feststellen, dass Schritt 6 tatsächlich ausgeführt wird. Wenn Sie jedoch aus einem leeren Labyrinth-Stapel herausspringen, erhalten Sie den Wert 0. Daher werden die Schritte 10 und 14 ausgeführt und verschieben eine Null in den Zusatzstapel, was effektiv ist ein No-Op.
Der Hauptstapel ist nach jeder Iteration praktisch leer, was es uns ermöglicht, das Codelayout mit
>
und<
auf den impliziten Nullen am unteren Rand abzugrenzen. Das>
umschließt die untere Reihe um , so dass die IP bewegt sich von rechts unten nach links unten, und die<
Verschiebungen der Reihe zurück. Die IP bewegt sich dann glücklich in der linken Spalte nach oben, um die Schleife fortzusetzen.Ziffern im Labyrinth platzen
n
und drücken10*n + <digit>
. Zusätzlich werden Zeichen vor der Ausgabe modulo 256 genommen. Wenn wir diese beiden zusammenfügen, können wir 95 (Unterstrich) ausgeben, indem wir`33
32 (Leerzeichen) verwenden, was funktioniert, weil-3233 % 256 = 95
. Auch wenn es andere Möglichkeiten gibt, 32 in 95 umzuwandeln (was;95
am einfachsten ist), können wir den Code hier mit einer negativen Zahl ein wenig mit Linkskurven komprimieren.quelle
05AB1E ,
222120 BytesCode:
Verwendet CP-1252- Codierung.
Probieren Sie es online!
quelle
CJam , 25 Bytes
Probieren Sie es online!
Erläuterung
Übersetzung meiner MATL-Antwort.
quelle
CJam, 23 Bytes
Teste es hier.
Erläuterung
quelle
Python, 107 Bytes
Eine Verbesserung gegenüber den beiden anderen Python-Antworten, weil:
[...,'_'][c<'!']
wird anstelle vons.replace(' ','_')
, und verwendetchoice(c+c.swapcase())
wird anstelle von verwendetchoice([c.upper(),c.lower()])
quelle
JavaScript (ES6),
114101 Byte47 Bytes, um den Fall eines Zeichens zufällig zu ordnen ...
Bearbeiten: Dank @ edc65 wurden massive 13 Bytes gespeichert.
quelle
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 Bytes
Probieren Sie es online!
quelle
Python 3,
128 122118 ZeichenDanke an xnor für das Abschneiden von 6 Bytes.
quelle
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 BytesS///
ist wie,s///
außer es ändert sich nicht$_
an Ort und Stellequelle
Pyth, 17 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
Mathematica, 86 Bytes
Vielen Dank an Sp3000 für das Speichern von 1 Byte.
Ahhh, Stringverarbeitung Mathematica ... ist das nicht schön? Dies ist eine unbenannte Funktion, die eine Zeichenfolge akzeptiert und zurückgibt.
Aufgrund des syntaktischen Zuckers ist die Lesereihenfolge etwas lustig:
Teilen Sie den String in Zeichen auf, sonst können wir damit gar nichts anfangen.
Sortiert die Ziffern bis zum Ende. Indem wir die Testfunktion in eine Liste einschließen, machen wir die Sortierung stabil.
Ordnet die linke Funktion jedem Zeichen in der Liste zu.
Wählt eine zufällige Funktion zum Ändern der Groß- / Kleinschreibung für das aktuelle Zeichen.
Wendet es auf das aktuelle Zeichen an.
Ersetzt Leerzeichen durch Unterstriche.
Fügt schließlich alle Zeichen wieder zu einer Zeichenfolge zusammen.
quelle
PowerShell, 113 Bytes
PowerShell steht für schreckliche Golfsprache. In ein Zeichenfeld aufteilen und Leerzeichen durch Unterstriche ersetzen. Nimm jeden Charakter und Prozess. Sammle Zahlen in die Variable $ d für die spätere Ausgabe. Jedes andere Zeichen wird zufällig in Groß- oder Kleinbuchstaben umgewandelt, indem ein Ausdruck mit
'char'.ToLower()
oder aufgerufen wird'char'.ToUpper()
. Wenn Ziffern gesammelt wurden, hängen Sie diese am Ende an.quelle
$_-in0..9
und verwenden .-in
-match
Julia,
888778 BytesDies ist eine anonyme Funktion, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Zuerst zerlegen wir die Eingabezeichenfolge in ein Array von Zeichen und sortieren das Array danach, ob jedes Zeichen eine Ziffer ist. Dadurch bleiben die Reihenfolge im Text und in den Ziffern erhalten, die Ziffern werden jedoch bis zum Ende verschoben. Dann prüfen wir für jedes Zeichen im Array, ob es sich um ein Leerzeichen handelt. Wenn ja, ersetzen Sie es durch einen Unterstrich. Andernfalls wählen Sie zufällig eines von
ucfirst
oder auslcfirst
, um es auf das Zeichen anzuwenden, und konvertieren Sie es in Groß- oder Kleinbuchstaben. Verbinden Sie das Array zu einem String und wir sind fertig!Probieren Sie es hier aus
9 Bytes gespart dank Sp3000!
quelle
Perl,
5148 BytesBeinhaltet +2 für
-lp
Führen Sie mit der Eingabe auf STDIN aus:
passwordify.pl
:quelle
Faktor 154 Bytes
oder 222 mit importieren
kernel splitting sequences ascii combinators.random regexp
Ich kann nicht so gut Golf spielen, und ich bin mir nicht sicher, ob ich hier den besten Ansatz gewählt habe, dachte aber, ich würde es versuchen
quelle
Ruby, 84 Bytes
Anonyme Funktion. Das Entfernen des Leerzeichens zuvor
c.downcase
verursacht aus irgendeinem Grund einen Syntaxfehler, und ich bin mir nicht sicher, warum.quelle
Lua, 125 Bytes
Wenn Objekt auf funktional trifft, können Sie einige schöne Dinge tun, sogar in lua! Ich glaube nicht, dass ich das runtergolfen kann, es ist schon ein ziemliches Durcheinander, und ich bin schon glücklich, die meisten Python-Antworten zu schlagen: D.
Ungolfed und Erklärungen
quelle
Im Ernst, 25 Bytes
Probieren Sie es online!
Erläuterung:
quelle
IPOS - nicht konkurrierend, 14 Bytes
Ja, ich habe Builtins für diese Herausforderung hinzugefügt, aber diese sind nicht speziell auf dieses Problem ausgerichtet.
Das funktioniert mit Version 0.1 des Interpreters .
Beispiellauf
Erläuterung
quelle
PHP, 368 Bytes
Ungolfed Code:
quelle
Python 2, 179 Bytes
Hier gibt es wahrscheinlich viel Raum für Verbesserungen, die ich später ausarbeiten werde.
quelle
AWK, 128 Bytes
Das
srand()
wird benötigt, um uns bei jeder Ausführung unterschiedliche Zufallszahlen zu geben.Damit dies bei mehrzeiligen Eingängen richtig funktioniert, müssten wir so etwas wie
A=N=""
vor diefor
Schleife setzen.quelle
Python 3.5 - 118 Bytes:
Wie Sie sehen können, verwende ich im Grunde genommen die
choice
Funktion des Zufallsmoduls , um für jeden Buchstaben in der sortierten Version des angegebenen Strings eine Zufallsfunktion (entweder .upper () oder .lower ()) auszuwählen, in der alle Ziffern zu gehen Ende. Außerdem wird jedes Leerzeichen in der sortierten Zeichenfolge durch einen Unterstrich ersetzt.quelle
PHP,
164158 Zeichen / ByteDies ist besser als die anderen PHP-Golf , weil:
Skript
Beispiel
quelle
> <> 73 Bytes
Nichts verrücktes hier, es:
_
wenn es trifftSie können es hier ausprobieren !
quelle
Python 3, 151 Bytes
quelle