Es ist sehr schwer, sich mein Passwort zu merken, deshalb habe ich mir eine Möglichkeit ausgedacht, ein Passwort zu generieren.
So generiere ich mein Passwort aus einem Wort oder einem Satz:
Beginnen Sie von links nach rechts
Ermitteln Sie die Anzahl der einzelnen Buchstaben
Bringe den Buchstaben mit seiner Zählung in eine Reihenfolge
Briefe mit höherer Wiederholung werden am Ende sein
Buchstaben mit der gleichen Wiederholung werden alphabetisch sortiert
Zahlen und Sonderzeichen einschließlich Leerzeichen werden ignoriert (z. B. 9, 4, @, (, * usw. werden ignoriert)
Gruppenbuchstaben ignorieren Groß- und Kleinschreibung. Verwenden Sie in der Ausgabe den Fall des letzten Vorkommens in der Eingabe
- Die Anzahl der Buchstaben kann eine beliebige Zahl sein, z. B. 5H17M345K
- Wenn es sich bei der Eingabe um alle Zahlen oder Sonderzeichen handelt, ist die Ausgabe eine leere Zeichenfolge, z. B. Eingabe "12 $ * 34 ^!" dann "" ausgeben
- wenn die Reihenfolge für dasselbe Vorkommen in alphabetischer Reihenfolge keine Rolle spielt, z. B. 1a1B1c
Beispiel:
Input: Kitkat Tango
(2k / 1i / 3T / 2a / 1n / 1g / 1o)
Output: 1g1i1n1o2a2k3T
Ein anderes Beispiel:
Input: Database Partitions Task
(1D / 5a / 4T / 1b / 3s / 1e / 1P / 1r / 2i / 1o / 1n / 3s / 1k)
Output: 1b1D1e1k1n1o1P1r2i3s4T5a
Hinweis: Die Buchstaben mit 1 Wiederholung sind am Anfang alphabetisch geordnet, danach die Buchstaben mit mehr Wiederholungen
Dies ist Code-Golf , der kürzeste Code gewinnt.
quelle
1.
um mindestens einen Testfall hinzuzufügen, der mehr als 9 Vorkommen von einem oder mehreren Buchstaben enthält.2.
Geben Sie an, dass die Ausgabe eine Zeichenfolge sein muss (obwohl ich dringend davon abraten würde, so streng zu sein; dies fügt der Herausforderung nichts hinzu ),3.
geben Sie an, dass Eingaben ohne Buchstaben verarbeitet werden müssen, und4.
klären Sie, ob eine leere Zeichenfolge als Eingabe verarbeitet werden muss.1
. In Zukunft können Sie auch unsere Sandbox verwenden , um Probleme wie diese auszubügeln, bevor Sie eine Herausforderung veröffentlichen.Antworten:
Japt v2.0a0
-P
, 14 BytesVersuch es
quelle
05AB1E ,
191716 BytesDank Kevin Cruijssen 1 Byte gespeichert
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
‚
(Pair with) in ein«
(Concat / Merge) ändern, also eines der beidenJ
s (Joins) entfernt werden kann.J
umgezogen? Bearbeiten: Eigentlich brauchte ich sie als Paar in der 19-Byte-Version und ich dachte nicht daran, es zu ändern, als ich die 17 machte: PJ
Abhängig von der Antwort auf diese Frage istC # (Visual C # Interactive Compiler) , 105 Byte
Probieren Sie es online!
Danke an dana, die es von 138 Bytes auf 105 Bytes reduziert hat.
quelle
.OrderBy(a=>a)
?Perl 6 ,
6663 BytesProbieren Sie es online!
Erläuterung
quelle
Retina ,
67,66,4139 Bytes-25 Bytes und ein kleiner Bugfix dank @Neil .
-2 Bytes dank @Neil und @Shaggy zusammen.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Entfernen Sie alles außer Groß- und Kleinbuchstaben:
dh
Kitkat Tango 123!
→KitkatTango
Sortieren Sie die einzelnen Buchstaben ohne Berücksichtigung der Groß- / Kleinschreibung ( danke an @MartinEnder dafür ):
dh
KitkatTango
→aagiKknottT
Erfassen Sie jedes Stück von Groß- und Kleinschreibung wiederholten benachbarte Buchstaben:
dh
aagiKknottT
→ [aa
,g
,i
,Kk
,n
,o
,ttT
]Prepend die Länge jedes Spiel, und halten nur den letzten Buchstaben eines jeden Brocken:
dh [
aa
,g
,i
,Kk
,n
,o
,ttT
] →2a1g1i2k1n1o3T
Sortieren Sie die Zahlen- und Buchstabengruppen nach den Zahlen:
2a1g1i2k1n1o3T
→1g1i1n1o2a2k3T
Danach wird das Ergebnis implizit ausgegeben.
quelle
"aA" < "aa"
)\w
und.
in verwendetO`\w.
wurden, um anzuzeigen, dass wir Zeichenpaare sortieren. Wir sind uns nicht sicher, ob wir jedes Zeichenpaar sortieren können, sondern sortieren es nur basierend auf dem ersten Zeichen. Aber na ja, Martins Vorschlag, die einzelnen Zeichen nach Substitutionen zu sortieren (dies ist die Kleinbuchstabenvariante des Spiels), wirkt wie ein Zauber. :)\P{L}
könnte funktionieren, was 2 Bytes spart.Wolfram Language (Mathematica) ,
102969387 BytesProbieren Sie es online!
quelle
Pyth,
272422 BytesProbieren Sie es hier online aus .
Bearbeiten: 3 Bytes nach Zeichen vor Gruppe sortiert, Vorgängerversion:
sm+ldedo,lNr0eN.gr0kf}r0TGQ
Edit 2: Weitere 2 Bytes durch Formatieren der Ausgabe vor einer Bestellung entfernt, vorherige Version:
sm+ldedlD.gr0krD0f}r0TGQ
Edit 3: Durch Ändern des Filters dank @FryAmTheEggman ein weiteres Byte herausgefiltert. Außerdem musste ein Fehler behoben werden, als OP klarstellte, dass ein einzelner Buchstabe mehr als neunmal vorkommen kann, wodurch ein Byte wieder hinzugefügt wurde am: o (Vorgängerversion:
srD0m+lded.gr0kf}r0TGQ
quelle
APL (Dyalog Extended) , 28 Byte SBCS
Anonyme implizite Präfixfunktion.
Probieren Sie es online!
'\PL'
Nicht-Buchstaben⎕R
PCRE R eplaced mit''
leeren Saiten(
…)
Wenden folgende stillschweigende Funktion an:⌊
Mit dem Kleinbuchstaben als Schlüssel…
⌸
wenden Sie die folgende implizite Funktion auf jeden Schlüssel und die entsprechende Menge von Werten an, nämlich⊢
das Argument:(
…)
Wenden Sie die folgende implizite Funktion⍤
auf⊢
die Werteliste an:⊢/
der letzte Wert…
,
Dem Folgendes voranstellen:⍕
die stringification⍤
von≢
Tally⊂
einschließen (um die Zeichenliste als einzelne Zeichenfolge zu behandeln)∊
ϵ nliste (verflache)⍤
die∧
aufsteigend sortierte Version davonquelle
Perl 5,
746866 Bytes-6 Bytes ändern sich
-p
zu-n
und verwendensay
statt$_=join"",
-2 Bytes dank Abigail verwenden\pL
statt[a-z]
TIO
59 Bytes, falls nicht mehr als 9 Zeichen vorkommen
quelle
Python 2 , 116 Bytes
Probieren Sie es online!
quelle
Database Partitions Task
ist nicht gleich1b1D1e1k1n1o1P1r2i3s4T5a
In the output, use the case of the last occurrence in the input
du wirstrfind
stattdessen dafür brauchenfind
....] for
kann aber werden...]for
, um das auszugleichen.Python 3 , 105 Bytes
Probieren Sie es online!
-1 danke an ArBo .
quelle
Haskell ,
114/113,105 Bytes-9 Bytes dank Laikoni (mit Listenverständnis und
(||)
stattfilter
mitelem
& kürzenlength
, um hässlich loszuwerdenzip
)!Probieren Sie es online!
quelle
Rot ,
220196206 BytesProbieren Sie es online!
Vielen Dank an Shaggy für das Auffinden eines Fehlers.
quelle
Gelee , 15 Bytes
Ein vollständiges Programm, das das angegebene Passwort druckt (als monadischer Link gibt es eine Liste von Listen aus, die jeweils eine Ganzzahl und ein Zeichen enthalten).
Probieren Sie es online!
quelle
Schale , 15 Bytes
Keine Probleme mit der Einfuhr , wenn Husk verwenden, deshalb können wir den Einsatz der verschiedenen praktischen Funktionen wie machen
groupOn
,sortOn
,toLower
etc:Probieren Sie es online aus oder probieren Sie sie alle aus!
Erläuterung
quelle
JavaScript (Node.js) , 127 Byte
Probieren Sie es online!
parseInt(numberAsString, radix)
versucht, eine Ganzzahl am Anfang der Zeichenfolge zu analysieren. BeispielsweiseparseInt('120px', 10)
wird 120 ausgegeben. Wenn das Parsen fehlgeschlagen ist, wirdNaN
stattdessen zurückgegeben. Wir verbinden ein'0'
mit dem Anfang jedes Zeichens, damit es0
für alle nicht numerisch-alphanumerischen Zeichen zurückgegeben wird. Und wir können durch diesen Algorithmus dieselben Buchstaben und Nicht-Alpha-Zeichen an den Anfang sortieren.sort
undjoin
,"Hello world!123"
würde" !123deHllloorw"
. Bei einem Abgleich mit/([a-z])\1*/ig
wird jedes Nicht-Alpha-Zeichen ignoriert und die Zeichenfolge in Abschnitte mit denselben Buchstaben aufgeteilt. `.map
konvertieren"aaa"
nach"3a"
wie in der frage erforderlich."3b"
wäre es weniger als"12a"
in Basis 36, so wie wir es erwarten: Es wird zuerst die Anzahl verglichen (n div 36
) und später der Buchstabe verglichen (n mod 36
).join
sie zusammen.JavaScript (Node.js) , 146 Byte
Probieren Sie es online!
quelle
f=
. Der erste war früher kürzer. Es werden jedoch 4 Bytes mehr ausgegeben, da OP gefragt hat, ob die Ausgabe eine leere Zeichenfolge sein darf. Und ich habe sie einfach dortJava 10,
223209301 Bytes+92 Bytes als Fehlerbehebung für Eingaben mit mehr als 9 Buchstaben. Mal sehen, ob ich das mit einem anderen Ansatz wieder reduzieren kann.
Probieren Sie es online aus.
Erläuterung:
quelle
Scala , 103 Bytes
Probieren Sie es online!
quelle
Swift 4.2.1 / Xcode 10.1 ,
105410501048370368364 BytesProbieren Sie es online!
@ KevinCruijssen entfernt auch einige Leerzeichen.
quelle
false
nach0>1
undtrue
nach Golf spielen1>0
. Probieren Sie es online aus 1027 Bytes . Wahrscheinlich können Sie mehr Golf spielen, wie das Duplizierte, dasif let v=$0.key.escaped(asASCII:0>1).lowercased().unicodeScalars.first?.value{return v<$1.key.value}else{return 0>1}
Sie haben, aber das überlasse ich jemandem, der Swift tatsächlich kennt.true
undfalse
aus meiner Antwort entfernt habe.=
Zuweisungen entfernt werden können: Probieren Sie es online 364 Bytes . Genieße deinen Aufenthalt! :)Kohle , 30 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Durchsuche das Kleinbuchstaben und finde die höchste Zeichenanzahl in der Eingabe in Kleinbuchstaben. Schleife über den impliziten Bereich. (Die Schleife geht tatsächlich von
0
nach,n-1
so dass ich die Schleifenvariable bei jeder Verwendung erhöhen muss.)Bewegen Sie sich erneut über das Kleinbuchstaben.
Wenn die Anzahl der aktuellen Buchstaben gleich dem Wert der äußeren Schleife ist ...
Verketten Sie die aktuelle Anzahl mit dem letzten Vorkommen des aktuellen Buchstabens und drucken Sie implizit.
quelle
Gelee , 14 Bytes
Probieren Sie es online!
Volles Programm.
quelle
NodeJS, 299 Bytes, -6 Bytes, danke an @tsh
Nicht so schön, aber es funktioniert!
Javascript (ES8) (Firefox oder Chrome), 294 Byte, -1 Byte danke an @tsh
Mit der neuen
.flat
Methode kann ich 10 Bytes sparen:Versuchen Sie dies online: https://repl.it/repls/ConcernedHorribleHypothesis
quelle
.replace
x 3 mal ->[R='replace]
und[R]
x 2 mal.charCodeAt(0)
->.charCodeAt()
(0
Standardeinstellung)R ,
131129 BytesProbieren Sie es online!
quelle
Julia 1.0 , 158 Bytes
Original ungolfed version mit der gleichen logik:
Probieren Sie es online!
quelle
Perl 6,
8682 Bytesquelle