Geschichte
Ich muss mir viele Passwörter merken und möchte nicht dasselbe für mehrere Websites verwenden, daher habe ich eine Regel entwickelt, aber die Regel sollte nicht transparent sein. Ich mache also Folgendes:
- Denken Sie an ein langes Wort oder Konzept wie
breadpudding
. - Ersetzen Sie den ersten Buchstaben durch die Site, bei der wir uns anmelden. Wenn wir uns einloggen
google
, wird unser Wortgreadpudding
. - Machen Sie den ersten Buchstaben in Großbuchstaben.
- Ändern Sie den zweiten Buchstaben in ein
@
Zeichen. - Wenn das Kennwort mit einem Nichtkonsonanten beginnt, fügen Sie eine bestimmte Nummer hinzu (z. B.
1234
). Andernfalls fügen Sie eine weitere Nummer hinzu (z. B.4321
).
Ta da, Sie haben jetzt ein angemessenes Passwort.
Dieser Prozess ist jedoch mühsam, daher benötige ich ein Programm, um dies für mich zu generieren, basierend auf den folgenden:
Problem
Gegebener Input:
a
: Das Anfangswort, das eine Zeichenfolge ist und immer in Kleinbuchstaben geschrieben wird und garantiert länger als 3 Zeichen ist.b
: Die Site, bei der wir uns anmelden. Dies ist eine Zeichenfolge, die immer in Kleinbuchstaben geschrieben ist und garantiert nicht leer ist.c
: Die Zahl für Nichtkonsonanten. Dies ist eine positive Ganzzahl, die führende Nullen haben kann.d
: Die Zahl für Konsonanten. Dies ist eine positive Ganzzahl, die führende Nullen haben kann.
Geben Sie eine Zeichenfolge basierend auf den oben genannten Kriterien aus.
Testfälle
Eingang a="volvo", b="gmail", c=5555, d="0001"
G@lvo0001
Eingang a="sherlock", b="9gag", c=31415926535, d=3
9@erlock31415926535
Eingang a="flourishing", b="+google", c=11111, d=2222
+@ourishing11111
Regeln
y
ist ein Konsonant.- Wenn Sie sich für eine Ganzzahl entscheiden
c
oderd
eine Ganzzahl sind, können Sie diese als solche analysieren, und führende Nullen können ignoriert werden (0091
werden als behandelt91
). - Nachgestellte Leerzeichen und Zeilenumbrüche sind zulässig.
- Sie können das Ergebnis an STDOUT ausgeben oder das Ergebnis in einer Funktion zurückgeben.
- Zeichen erlaubt in
a
undb
sind[a-z0-9!@#$%^&*()_+=-]
. - Sie können die 4 Eingaben in beliebiger Reihenfolge akzeptieren.
Das ist Code-Golf . Der kürzeste Code in Bytes gewinnt.
Antworten:
Gelee , 17 Bytes
Ein volles Programm, die Argumente in der Reihenfolge nehmen
b
,a
,c
,d
.Probieren Sie es online aus!
Wie?
Die Hauptverbindung ist dyadischen unter
b
unda
werden die Programmeingänge dannb
,a
,c
, undd
(die dritte bis sechste Befehlszeilenargumente), so ,c
undd
als solche zugegriffen wird.quelle
Python 3 , 69 Bytes
Probieren Sie es online aus!
quelle
b[0]not in"aeiou"
stattdessen verwenden?9
als Nichtkonsonant gezählt wird.z
ist das maximal mögliche Zeichen):('a'<b[0])*b[0]not in"eiou"
05AB1E ,
222018 BytesEingabe genommen als
b,a,c,d
Probieren Sie es online aus!
Erklärung (veraltet)
0è
wird im Link verwendet, da erн
noch nicht zu TIO gezogen wurde.quelle
Javascript ES6, 87 Bytes
Demo
Code-Snippet anzeigen
quelle
{|}~
keine gültigen Zeichen sind, können Sie ersetzen/[bcdfghjklmnpqrstvwxyz]/.test(b[0])?d:c
mit/[ -_aeiou]/.test(b[0])?c:d
für minus 13 BytesC,
441286139 Bytesquelle
argv[1][0]='c'|argv[1][0]='c'|...
c = Konsonant können Sie dies leicht reduzieren, indem Sie die!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u')
Punktzahl um 264 reduzieren.(argv[0][1]>='a'&argv[0][1]<='z'&!(argv[1][0]='a'|argv[1][0]='e'|argv[1][0]='i'|argv[1][0]='o'|argv[1][0]='u'))
. Noch etwas kürzer. Es gibt jedoch so viele Möglichkeiten, diesen Code zu spielen, dass ich nicht weiß, wo ich anfangen soll ...: sR ,
105103 BytesAnonyme Funktion. Evaluiert zu
Welches ist, was auf TIO ist. Bitte helfen Sie mir, diesen Regex zu spielen, weil ich schrecklich darin bin.
2 Bytes von Giuseppe gespeichert.
Probieren Sie es online aus!
quelle
!grepl('[aeiouy]',m)
grepl('[aeiouy]',m)
und einfach tauschenc
undd
."if"
machen dieif
Syntax viel übersichtlicher, anstattelse
oder zu verwendenifelse
. Ich habe auchsubstring
in einer Variablen gespeichert undm
sofort in Großbuchstaben geschrieben, um ein Byte zu speichern.pryr
versucht,substring
ein Argument vorzubringen; und du findestgrepl
nur "keine Vokale", was nicht dasselbe ist wie Konsonanten. Das,"if"
was ich gerade verpasst habe, danke, dass du darauf hingewiesen hast.pryr::f
dass mir das nicht gefallen würde; Sie könnten den regulären Ausdruck '[az && [^ aeiouy]]' aus Kevin Cruijissens Antwort verwenden?Netzhaut ,
8075 BytesProbieren Sie es online aus!
Wenn Sie hier eine neue Sprache ausprobieren, werden Eingaben in der in der Frage angegebenen Reihenfolge vorgenommen
Erläuterung:
Erstellen Sie ein Wort, bei dem es sich um das zweite Wort, den ersten Buchstaben, das @ -Zeichen und das erste Wort ab dem 3. Zeichen handelt.
Wenn das Wort mit einem Nichtkonsonanten beginnt, fügen Sie die erste Zahl hinzu
Wenn noch 3 Zeilen übrig sind (keine Substitution im letzten Schritt, also beginnt es mit einem Konsonanten), fügen Sie die zweite Zahl hinzu
Den ersten Buchstaben in Großbuchstaben schreiben
quelle
QBIC , 81 Bytes
Erläuterung
Beachten Sie, dass die letzten beiden Zeilen gleich aussehen, der Interpreter jedoch das Verhalten in jeder Zeile geringfügig ändert
;
: Immer wenn er die;
Anweisung sieht , erstellt er eine neue Variable (in diesem Fall sind die Variablen È $and
F $ `die ersten, die nach dem Lesen aller verfügbar sind andere Literale und cmd-Zeilenargumente) und weist dieser Variablen den ersten noch nicht zugewiesenen cmd-Zeilenparameter zu.quelle
JavaScript (ES6), 76 Byte
Ich hätte dies als Vorschlag zur Verbesserung der Weedoze-Lösung hinzugefügt , aber es scheint, dass ich es nicht kommentieren kann, da ich größtenteils lauere
quelle
C # , 111 Bytes
Das Überprüfen des Konsonanten ist besonders teuer, da der
string
Typ keine direkte Regex-Fähigkeit aufweist .quelle
F # , 157 Bytes
F # ist für mich noch sehr neu, daher gibt es wahrscheinlich bessere Ansätze dafür.
quelle
Java 8,
112999287 Bytes-13 Bytes, indem der Parameter
b
last statt second verwendet wird.-1 Byte durch Entfernen von
y
-7 Bytes dank @ OlivierGrégoire (und die Parameter sind wieder in Ordnung)
-5 Bytes dank @ PunPun1000
Erläuterung:
Probieren Sie es hier aus.
quelle
y
ist ein Konsonant, so dass Sie deny
in Ihrer Regex für 1 Byte ablegen können.(a,b,c,d)->
ist kürzer alsa->b->c->d->
. Currying ist nur für 2 Parameter hilfreich. Für 3 ist Curry das gleiche wie kein Curry. Ab 4 Jahren ist kein Curry kürzer.(a,b,c,d)->b.toUpperCase().charAt(0)+"@"+a.substring(2)+(b.matches("[a-z&&[^aeiou]].*")?d:c)
ist 92 Bytes lang. Außerdem werden die Parameter in der richtigen Reihenfolge verwendet (was mich zuerst verwirrte :-().toUpperCase()
und dann.charAt(0)
ist es in der Tat kürzer. Ich bin mir nicht sicher, wie ich das verpasst habe. (Und die andere Reihenfolge war zu erlauben(b=...)
, was nicht möglich wäre, wenn es nicht der letzte Parameter mit Curry ist, weil es dannfinal
implizit sein musste / warfinal
.){|}~
es sich nicht um gültige Zeichen handelt, können Sie diese[ -_aeiou]
für Nicht-Konsonanten und Swapd
sowiec
für minus 5 Bytes verwendenV , 25 Bytes
Probieren Sie es online aus!
Nimmt Argumente im Puffer in der folgenden Reihenfolge auf:
quelle
Bash 4 , 76 Bytes
Funktioniert in Bash 4:
quelle
Ruby , 73 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6), 69 Byte
Ziemlich einfach, kann wahrscheinlich Golf gespielt werden
quelle