Die Leute auf dieser Seite lieben es wirklich, ihre Beitragstitel zu verschönern ...
Stewie's sequence: + * - / + * - /
Wenn dieser Titel jedoch in die Seiten-URL aufgenommen werden muss, wird dies vereinfacht:
stewies-sequence
Die Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die anhand eines Strings, der einen Beitragstitel darstellt, die "URL-freundliche" Konvertierung ausgibt / zurückgibt.
Der Algorithmus ist:
- In Kleinbuchstaben konvertieren (falls zutreffend)
- Ersetzen Sie jedes Leerzeichen (
), jeden Punkt (
.
), jedes Komma (,
) oder jeden Schrägstrich (/
) durch einen Bindestrich (-
). - Entfernen Sie alle nicht alphanumerischen Zeichen mit Ausnahme der Bindestriche.
- Minimieren Sie Gruppen benachbarter Bindestriche (
a---b -> a-b
) und entfernen Sie alle vorangestellten / nachfolgenden Bindestriche .
Bitte beachten Sie, dass dieser Algorithmus eine Vereinfachung darstellt und möglicherweise nicht immer die gleichen Ergebnisse wie die eigentliche Methode der Site liefert.
Regeln
- Sie können diese Eingabe annehmen:
- Wird nicht leer sein.
- Enthält mindestens ein alphanumerisches Zeichen.
- Enthält nur Zeichen im ASCII-Bereich 32-126 (druckbar)
- Vollständige Programme oder Funktionen sind zulässig.
- Ein Builtin, das die genaue Aufgabenspezifikation ausführt, ist nicht zulässig.
- Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes)!
Testfälle
Die meisten Beiträge auf dieser Website dienen als Test, aber hier ist eine praktische Liste:
Loading... Forever -> loading-forever
N(e(s(t))) a string -> nest-a-string
"Hello, World!" -> hello-world
URL-Friendly titles -> url-friendly-titles
C.U.S.R.S -> c-u-s-r-s
1+2+3+4+...+n = -1/12? -> 1234-n-1-12
How can I use cmp(a,b) -> how-can-i-use-cmpa-b
Einige längere ...
Export The $PATH Variable, Line-By-Line -> export-the-path-variable-line-by-line
Do n and n^3 have the same set of digits? -> do-n-and-n3-have-the-same-set-of-digits
Quine Anagrams! (Cops' Thread) -> quine-anagrams-cops-thread
The Golfer Adventure - Chapter 1 -> the-golfer-adventure-chapter-1
Bootloader golf: Brainf*** -> bootloader-golf-brainf
Und ein paar Beispiele zur Überprüfung von Randfällen (Sie können gerne weitere vorschlagen):
0123 -> 0123
a a1 -> a-a1
2-1=1 -> 2-11
-
s? Müssen sie entfernt werden? Müssen zum Beispiel inasdf-
die letzte-
entfernt werden?if(isalphanum(ch))...
_
Unterstrichen? Mein Code funktioniert nur, wenn Unterstriche vorhanden sind.Antworten:
Retina,
33-31Bytes(Das Programm hat einen abschließenden Zeilenumbruch)
Ich bin mir nicht sicher, ob ich mehr daraus machen kann. Dies sollte alles abdecken. Kam ähnlich wie Mama Fun Rolls. Weitere 33-Byte-Version mit rekursiven regulären Ausdrücken
Probieren Sie es online!
Erläuterung
Diese Leitung ist einfach, es wandelt von in Kleinbuchstaben T ransliterating
A-Z
(L
) bisa-z
(l
, Kleinbuchstaben).Diese Phase ist einfach, sie beseitigt im Wesentlichen alle nicht benötigten Charaktere, um uns später viel Ärger zu ersparen
[^a-z ,-9]
Stimmt mit jedem Zeichen überein, das NICHT ist:a-z
: Kleinbuchstaben (gesamte Zeichenfolge ist wegen des vorherigen Elements in Kleinbuchstaben geschrieben): Raumzeichen
,-9
Dies ist der Zeichencode-Bereich,,
in9
dem sich,-./0123456789
genau die Zeichen befinden , die wir benötigenAls nächstes konvertieren wir alle nicht alphanumerischen Zeichen in Bindestriche (das ist jetzt nur
und
,./-
.Dies wird nicht (nicht) übereinstimmen,
_
was in\w
(Negation von\W
) enthalten ist, weil es in der vorherigen Stufe entfernt wurdequelle
a = b
.a = b
JavaScript (ES6),
90827975 ByteDies ist ein Versuch, die Arbeit mit einem einzigen zu erledigen
replace()
. Dieser Code extrahiert nur die Zeichen, die uns interessieren, und ignoriert alles andere. Es gibt eine zusätzliche Logik, um die Bindestriche zu verarbeiten.Testfälle
Code-Snippet anzeigen
quelle
,a^a,
dieser Code gibt-aa-
(es gibt führende /V ,
41, 40, 37, 36 BytesProbieren Sie es online! oder Überprüfen Sie alle Testfälle auf einmal!
Wie üblich enthält dies eine Reihe von nicht druckbaren und Nicht-ASCII-Zeichen. Hier ist also ein Hexdump:
Es sind Herausforderungen wie diese, bei denen Vs "Compressed Regex" -System nützlich ist.
Erläuterung
Zuerst werden wir alles in Kleinbuchstaben umwandeln. Glücklicherweise gibt es eine sehr bequeme Möglichkeit, dies in zwei Bytes zu tun. Ich habe hier einen Tipp dazu geschrieben . So machen wir es
Danach führen wir eine Reihe von komprimierten Ersatzbefehlen aus. Ein guter Überblick über die Funktionsweise von Vs komprimiertem regulären Ausdruck ist hier zu finden , aber die Grundidee ist, dass wir das High-Bit setzen können, um zu vermeiden, dass bestimmte Zeichen entkommen müssen. Eine weitere Annehmlichkeit besteht darin, dass Bereiche (wie
:%
) und Flags (wie/g
) automatisch ausgefüllt werden. Letztendlich wird alles in vim-Ersatzbefehle übersetzt. Tatsächlich könnten wir sogar den Rest des Programms direkt in vim übersetzen. Das würde uns folgendes geben:Wenn Sie vim-regex sprechen, sollte klarer sein, was der Rest des Programms jetzt tut. Also hier ist der Rest des Programms:
quelle
JavaScript (ES6) 91
961 Byte gespeichert dank @ETHproductions
Prüfung
quelle
*
im letzten Regex brauchst , auch wenn ich mich irrePython 3,
1031009695 Bytes5 Bytes gespart dank Flp.Tkc
quelle
Retina, 34 Bytes
Probieren Sie es online!
Beachten Sie den nachgestellten Zeilenumbruch. Im Wesentlichen die Umsetzung des OP.
quelle
T`L`l
, um mit weniger Bytes in Kleinbuchstaben zua..
ähnlich[\W]
ist gerade\W
MATL , 38 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Ruby ,
6160616453 Bytes(52 Byte Code plus ein Byte für die
-p
)Probieren Sie es online!
Update 1:
Verwenden Siegets
anstelle von Rubys Stream-Bearbeitungsmodus, um ein Byte zu sparen.Rückgängig gemacht als je ValueInk Vorschlag .
Update 2: (+3 Bytes insgesamt)
..--hi, $/
(→hi
) (+10 Byte) - erneut mit freundlicher Genehmigung des Benutzers ValueInk-p
(+1 Byte)squeeze
undgsub
stattdessen verwendet (+2 Bytes) , was mir Folgendes ermöglichte:strip
diese Option , um die führenden und nachfolgenden Bindestriche (-10 Byte) zu behandeln .Update 3: Hattrick von ValueInk. Wir sparen 11 Bytes, indem wir die
String#split
Angewohnheit nutzen , Läufe desselben Trennzeichens automatisch zu quetschen, wodurch wir das gesamte Finalestrip
/ die gesamtegsub
Kette loswerden und durch einsplit
/ ersetzen könnenjoin
. (-11 Bytes)quelle
-p
Flagge funktioniert , aber dies wird definitiv nicht funktionieren .-p
Flags implizit 1 Byte zum Code hinzugefügt wird (da dadurch die Codeausführung vonruby -e 'your code'
nach geändert wirdruby -pe 'your code'
). Ich habe auch einen Randfall gefunden, in dem es-hi-
für Eingabe wie gibt,..--hi, $/
wenn Sie alle führenden / nachfolgenden Gedankenstriche entfernen und folglich zurückkommen solltenhi
.gsub(/[^\w ]/){}
intr('^a-z ','')
und dann mit enden,.split*?-
anstatt.strip.gsub...
automatisch Duplikate und die Enden der Zeichenfolge zu verarbeiten, alles auf einmal!JavaScript (ES6),
74 bis69 ByteBearbeiten: 5 Bytes gespart, indem erkannt wurde, dass ich bereits alle Zeichen gelöscht habe, außer
-/,. 0-9a-z
dass ich\w
die verbleibenden Wörter damit abgleichen kann .quelle
[a-z\d]
könnte sein[^\W_]
?PHP, 87 Bytes
Die Idee der regulären Ausdrücke stammt aus vorhandenen Antworten.
Es erfordert einen Server mit PHP und Zugriff über HTTP.
Der Titel muss auf der Taste sein
T
, und das Ergebnis wird auf dem Bildschirm gedruckt.Beispiel:
http://localhost/title.php?T=<my shiny title>
quelle
Bash / Unix-Tools, 56 Bytes
Ersetzen Sie Großbuchstaben durch Kleinbuchstaben und die erforderlichen Sonderzeichen durch Bindestriche.
Löschen Sie andere Zeichen als Buchstaben, Ziffern und Bindestriche (Option -d) und drücken Sie dann die Option -s, um mehrere Bindestriche in einer Reihe zu einem Bindestrich zusammenzufassen.
Löschen Sie Bindestriche am Anfang und dann am Ende.
quelle
Powershell, 85 Bytes
mach es klein, dann werden 3 reguläre Ausdrücke hintereinander ersetzt und alle nachfolgenden
-
abgeschnittenquelle
$input
Sparen Sie vielleicht nicht 2 Bytes?JavaScript,
90989493919091 Bytes1 Byte gespart dank @ edc65!
Dank @IsmaelMiguel für das Erkennen eines führenden Semikolons 1 Byte gespart!
1 Byte gewonnen nach einem Fehler für
,a-^-a,
Was mir an diesem Beitrag am besten gefällt, sind die Bereiche. In dem ersten
replace
, entfernen wir alles , was nicht alphanumerische und keine ist,
,-
,.
,/
und kein Raum. Wir verwendena-z
zur Erkennung der Buchstaben und,-9
zur Erkennung dieser Sonderzeichen und -zahlen, da die Zeichencodes dieser ASCII-Literale alle in einer Reihe stehen!Code-Snippet anzeigen
quelle
f=
daher beträgt Ihre Byteanzahl jetzt 96. Und kein Bedarf an \ innerhalb eines Bereichs im regulären Ausdruck, daher könnte es 95 sein. Aber ... funktioniert immer noch nicht: try...title
f=
und das;
am Ende nicht. Geben Sie einfach an, dass dies eine anonyme Funktion ist. Damit sollte Ihre Antwort 90 Bytes lang sein.Lua, 91 Bytes
Wo
a
ist die URL-Zeichenfolge?Erläuterung:
a:lower()
Gibt die Kleinbuchstabenfunktion zurück:gsub
Findet die Übereinstimmung des Musters und ersetzt es durch die Zeichenfolge.'[ .,/]'
: Klammern bedeuten "oder", daher entspricht dies Leerzeichen, Punkt, Komma und Schrägstrich. Du musst nicht gierig sein, weil:gsub
es alle Vorkommen gibt.'[^%w-]'
:^
bedeutet "nicht" in Klammern,%w
bedeutet irgendetwas Alphanumerisches. Entspricht also'[^%w-]
allem, was nicht alphanumerisch oder mit einem Bindestrich versehen ist.'%-+'
: Kombiniere so viele Striche wie möglich und ersetze sie mit nur einem Strich.match'%-?(.*)%-?'
: Wenn in Lua ein String das einzige Argument der Funktion ist, sind keine Klammern erforderlich. Es muss nur am Anfang und am Ende nach einem Bindestrich gesucht werden, da Bindestriche bereits minimiert wurden. Keine Notwendigkeit für Ankerzeichen, da.*
alles passt, gierig.quelle
C 194 Bytes
Rufen Sie an mit:
quelle
SAS, 108
Eine der weniger konkurrenzfähigen Antworten hier aufgrund der ausführlichen SAS-Syntax - die 9-Zeichen-Strafe pro Regex schmerzt wirklich -, aber es war eine gute Regex-Lernübung:
quelle
Pyth, 35 Bytes
Erläuterung
quelle
Perl 6, 75
quelle
GNU Sed, 65 Bytes
Eine Reihe von Regex-Substitutionen. Verwendet nicht-portable
\L
von GNU sed, um die Eingabe in Kleinbuchstaben zu schreiben. Führen Sie aus einer Datei mitsed -f
.quelle