Allgemeine Wörter sollten dennoch vermieden werden, um als Passwörter verwendet zu werden. Diese Herausforderung ist dabei , ein sehr einfaches Programm Codierung , dass munges ein bestimmtes Passwort ( M odify U ntil N ot G uessed E asily).
Eingang
Ein Wort, das eine im Alphabet geschriebene Zeichenfolge ist abcdefghijklmnopqrstuvwxyz
. Es spielt keine Rolle, ob die Buchstaben in Klein- oder Großbuchstaben geschrieben sind.
Munging
- Ändern jede wiederholte Sequenz eines gleichen Brief an sich selbst durch die Anzahl , wie oft der Buchstabe wurde wiederholt (
LLLL
mit4L
) - Ändern Sie den ersten
a
mit@
- Ändern Sie den ersten
b
mit8
- Ändern Sie den ersten
c
mit(
- Ändern Sie den ersten
d
mit6
- Ändern Sie den ersten
e
mit3
- Ändern Sie den ersten
f
mit#
- Ändern Sie den ersten
g
mit9
- Ändern Sie den ersten
h
mit#
- Ändern Sie den ersten
i
mit1
- Ändern Sie die Sekunde
i
mit!
- Ändern Sie den ersten
k
mit<
- Ändern Sie den ersten
l
mit1
- Ändern Sie die Sekunde
l
miti
- Ändern Sie den ersten
o
mit0
- Ändern Sie den ersten
q
mit9
- Ändern Sie den ersten
s
mit5
- Ändern Sie die Sekunde
s
mit$
- Ändern Sie den ersten
t
mit+
- Ändern Sie den ersten
v
mit>
- Ändern Sie die Sekunde
v
mit<
- Ändern Sie den ersten
w
mituu
- Ändern Sie die Sekunde
w
mit2u
- Ändern Sie den ersten
x
mit%
- Ändern Sie den ersten
y
mit?
Regel 1 muss so oft angewendet werden, bis eine weitere Anwendung nicht mehr möglich ist. Danach werden die restlichen Regeln angewendet.
Ausgabe Das gemungte Wort
Beispiele
codegolf
->(0639o1#
programming
->pr09r@2m1ng
puzzles
->pu2z135
passwords
->p@25uu0r6$
wwww
->4uu
aaaaaaaaaaa
->11a
lllolllolll
->3103io3l
jjjmjjjj
->3jm4j
Dies ist Code-Golf , also machen Sie bitte Ihr Programm so kurz wie möglich!
Nichts in diesem Beitrag sollte als Passwortidee oder als Teil der Passwortpraxis verwendet werden.
Antworten:
Java 8,
237321319280247241240237 Bytes+84 Bytes, weil die Regeln geändert wurden. ( BEARBEITEN: Endlich zurück zu meinen ursprünglichen 237 Bytes. ) Das Ersetzen
WWWW
mit222W
ist in Java einfach, aber4W
nicht. Wenn Java nur die Möglichkeit hätte, die Regex-Erfassungsgruppe für etwas zu verwenden. Englisch: www.mjfriendship.de/en/index.php?op...=view&id=167 Die Länge mit"$1".length()
, das Ersetzen der Übereinstimmung selbst durch"$1".replace(...)
, das Umwandeln der Übereinstimmung in eine Ganzzahl mitnew Integer("$1")
oder die Verwendung von etwas Ähnlichem wie Retina (dhs.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")
) oder JavaScript (dhs.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))
) wäre meine Nummer 1, die ich in Java sehen möchte Ich denke, dies ist das zehnte Mal, dass ich es hasse, dass Java mit dem Capture-Group-Match nichts anfangen kann .-78 Bytes dank @ OlivierGrégoire .
I / O wird in Großbuchstaben geschrieben.
Erläuterung:
Probieren Sie es hier aus.
quelle
JavaScript (ES6), 147 Byte
Testfälle
Code-Snippet anzeigen
Erläuterung
Durchläuft eine Reihe von Ersetzungen für die Eingabezeichenfolge
s
in der von der Abfrage angegebenen Reihenfolge. Jedes Element in der Serie ist ein Array oder eine Zeichenfolge mit zwei Elementen, die dann verteilt (...r
) und an übergeben werdens.replace()
.quelle
05AB1E , 69 Bytes
-9 Bytes dank Emigna
Probieren Sie es online!
quelle
'w„uu„2u‚â
4uu
γvygD≠×yÙ}J
Perl 5 , 152 + 1 (
-p
) = 153 BytesProbieren Sie es online!
quelle
-p
wird als Argument fürperl
die Befehlszeile verwendet , die automatisch Eingaben vonSTDIN
undprint
den Inhalt von$_
am Ende des Skripts liest . TIO erlaubt diese Option und daperl -pe<code>
ist 1 Byte mehr alsperl -e<code>
es als ein zusätzliches Byte gezählt wird.~
Dazwischenj~k
sein!
? Derzeit ersetzt es das zweite Vorkommen voni
durch a~
anstelle von a!
.Wahrscheinlich nicht das am meisten Golf spielende, aber es funktioniert.
-6 bytes dank ovs
-77 Bytes dank NieDzejkob und Jonathan French
Python 3 ,
329323 Bytes246 BytesProbieren Sie es online!
quelle
.lower()
jjjmjjjj
sollte3jm4j
aber ausgeben3jm3jj
. Edit: 258 Bytes mit diesem Problem behobenNetzhaut ,
166124 BytesProbieren Sie es online! Erläuterung:
Ersetzen Sie eine Folge von wiederholten Buchstaben durch die Länge und den Buchstaben.
Ordnen Sie das erste Vorkommen der Buchstaben
a
zuy
und markieren Sie sie mit einem Platzhalter.Korrigieren Sie das erste Vorkommen von
w
.Korrigieren Sie das erste Vorkommen aller anderen Buchstaben von
a
bisy
und löschen Sie die Platzhalter.Markiert das (ursprünglich) zweite Auftreten der Buchstaben
i
,l
,s
,v
, oderw
mit einem Platzhalter.Korrigieren Sie das zweite Vorkommen von
w
.Korrigieren Sie das zweite Vorkommen der anderen vier Buchstaben.
quelle
Haskell ,
221218213 BytesProbieren Sie es online!
Missbrauch
foldr
Ausführung der Zeichenfolge durch eine Folge von Zeichenfolgentransformationen in Reihenfolge. Die Sequenz "beginnt" mitr
der die Wiederholungszählung ersetzt wird, indemspan
der Schwanz der Zeichenkette gebrochen wird, wenn er nicht mehr gleich dem Kopf ist. Wenn der erste Teil davon nicht leer ist, ist es eine Wiederholung, also geben wir die Länge +1 aus. Als nächstes curry wir ein Argumentf
für jede Zeichenersetzung in (umgekehrter) Reihenfolge. Die Ersetzungen werden als einzelne Zeichenfolge codiert, wobei das erste Zeichen das zu ersetzende Zeichen ist und der Rest als Zeichenfolge (da die Ersetzungen aus mehreren Zeichen bestehen) an seine Stelle tritt. Ich habe diese codierten Zeichenfolgen in eine große Zeichenfolge eingefügt, die durch Leerzeichen getrennt ist, damitwords
ich sie in eine Liste aufteilen kann.EDIT: Danke @Laikoni, dass du mir 5 Bytes gespart hast! Das war eine kluge Verwendung, an die
$
ich nicht gedacht habe. Diesen<-
Trick kannte ich auch nicht .quelle
(p,q)<-span(==a)b
anstelle vonlet(p,q)=span(==a)b
undp>[]
anstelle von verwendenp/=[]
.m
pointfree machen:($(f<$>words"w2u ... y?")++[r]).foldr($)
Probieren Sie es online aus!Lua , 173 Bytes
Probieren Sie es online!
Ungolfed und erklärte:
quelle
C # (.NET Core),
317,289, 279 BytesProbieren Sie es online!
Ich hoffe, es ist in Ordnung, ein char-Array als Eingabe und nicht als Zeichenfolge zu empfangen.
Ungolfed :
quelle
C ++,
571495478444 Bytes-127 Bytes dank Zacharý
Die
"/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"
Zeichenfolge wird zum Umwandeln von einem Zeichen in ein anderes verwendet. 1/
bedeutet, dass der erste "nächste Buchstabe" durch den folgenden ersetzt werden soll/
, 2 bedeutet, dass der zweite "nächste Buchstabe" durch den folgenden ersetzt werden soll.Probieren Sie es online aus
quelle
R ,
224219 BytesProbieren Sie es online!
Böse, aber der Hauptteil ist die iterative Substitution in der
Reduce
.sub
Ändert nur das erste Vorkommen des Matches.Vielen Dank an JayCe für den Hinweis auf ein schönes Golf!
quelle
Perl 5 , 123 Bytes
122 Byte Code + 1 für
-p
.Entwickelt unabhängig von @ Xcali 's Antwort , aber ein sehr ähnliches Verfahren.
Probieren Sie es online!
quelle
Python 2 ,
220216194190188 BytesProbieren Sie es online!
Python 3 , 187 Bytes
Probieren Sie es online!
quelle
Pip ,
103102 BytesProbieren Sie es online!
Erläuterung
Der Code führt drei Transformationsschritte aus:
* Wir müssen testen, ob
a@?m@0
Null ist. Es ist nicht genug zu testen, dass es wahr ist, da 0 ein legitimer Index ist, der falsch ist. Pip hat keine kurze Methode, um zu testen, ob ein Wert null ist, aber das Testen der Länge funktioniert in diesem Fall gut genug: Jede Zahl hat eine Länge von mindestens 1 (wahr), und nil hat eine Länge von null (falsch).quelle