In diesem Coding Golf sollten Sie eine Codierungskonvention mit TitleCase in Kleinbuchstaben mit Unterstrichen konvertieren. Und umgekehrt!
Spezifikation
Ändern Sie das Gehäuse folgendermaßen:
- Wenn der Unterstrich ein Begrenzer ist, ändern Sie die Groß- / Kleinschreibung in Groß- / Kleinschreibung ohne Begrenzer.
- Wenn es mehrere Wörter ohne Trennzeichen gibt, ändern Sie die Groß- / Kleinschreibung und fügen Sie einen Unterstrich als Trennzeichen hinzu.
- Bei nur einem Wort (oder einem Zeichen): Ändern Sie die Schreibweise in Groß- / Kleinschreibung, wenn das Wort mit Kleinbuchstaben beginnt. Ändern Sie die Schreibweise in Kleinbuchstaben, wenn das Wort mit Großbuchstaben beginnt.
Zulässige Zeichen:
- A bis Z
- A bis Z
- Unterstrich (
_
).
Eingaben mit gemischten Wörtern in Groß- und Kleinschreibung sind nicht zulässig. Beispiele für unzulässige Fälle:
Coding_Convention_Conversion
a_BC
Beispielfälle
Input | Expected Output
===========================================================
CodingConventionConversion | coding_convention_conversion
coding_convention_conversion | CodingConventionConversion
abc | Abc
Abc | abc
ABC | a_b_c
a_b_c | ABC
a | A
A | a
Regeln
- Es ist erlaubt
ToUpper
,ToLower
undToTitleCase
Funktionen zu verwenden. - Die Verwendung von regulären Ausdrücken ist zulässig.
- Code-Golf : Der kürzeste Code in Bytes gewinnt!
ToTitleCase
Funktion in Ordnung? Sie haben nicht angegeben, also würde ich annehmen, dass es in Ordnung ist.Antworten:
Pyth, 25 Bytes
29 33 35 402 Bytes dank @Dennis gespart
4 Bytes dank @FryAmTheEggman gespart
Probieren Sie es online aus
quelle
/z\_
auf ändernrIz0
. Ich glaube auch, dass ich eine Alternative zum Hinzufügen von Unterstrichen in gleicher Länge gefunden habe:tsXzrG1_Mcj\_G2
Vielleicht kann jemand mehr Golf spielen ...tsXzrG1*\_G
Jolf, 35 Bytes
Spart 1 Byte dank @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Dies ist in ISO 8859-7 kodiert.
Woohoo mein erstes Jolf-Programm!
Erläuterung
Probieren Sie es online aus
quelle
"(?=[A-Z])'_
. Der String wird automatisch geschlossen.Retina , 37
Vielen Dank an @ MartinBüttner für die Einsparung von 4 Bytes!
(Beachten Sie die nachstehende Zeile.)
Probieren Sie es online aus. Beachten Sie, dass dies zusätzliche
m`
Schritte umfasst , um einige Zeilen so zu konfigurieren, dass jede Eingabezeile separat behandelt wird, damit alle Testfälle auf einmal ausgeführt werden können. Dies ist keine Anforderung der Frage, daher werden diese nicht in der Punktzahl berücksichtigt._
entweder am Anfang der Eingabe oder vor Großbuchstaben eingefügt. Alle Wörter sind jetzt_
unabhängig von der Groß- und Kleinschreibung getrennt._
entweder zu Beginn der Eingabe oder nach einem Großbuchstaben entfernt.quelle
?=
und diese Stufe durch ersetzen$1
(dies hat jedoch keinen Einfluss auf die Bytezahl).GNU Sed, 46
Vielen Dank an @TobySpeight für das Speichern von 2 Bytes!
Punktzahl beinhaltet +1 für
-E
(oder-r
) Option aufsed
.Probieren Sie es online aus.
Ziemlich unkompliziert sed:
_
, gefolgt von einem Kleinbuchstaben, durch den Großbuchstaben dieses Buchstabens. Dasg
Flag,s
das diese Ersetzung für jede gefundene Instanz ausführtt
Springt zum:
unbenannten Label, wenn Übereinstimmungen für die obige Ersetzung gefunden wurden. Diese Bezeichnung steht implizit am Ende._
den Kleinbuchstaben dieses Buchstabens ersetzt_
Buchstaben vor dem ersten Buchstaben.s/^_//
entfernt das.quelle
-E
funktioniert in meiner GNU sed 4.2.2 (Ubuntu 14.04.3), obwohl es nicht in der Manpage ist. Ich habe irgendwo gelesen, dass-E
es sich um eine neuere Posix-Option handelt, die in einer neueren Version offiziell zu GNU Sed hinzugefügt wird, aber bereits inoffiziell vorhanden ist. Egal,-r
tut das Richtige, wenn-E
es bei Ihnen nicht funktioniert./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
für als Synonym-r
. Ich habe zB ein Minimalprogramm nicht richtig bestandensed -E -e Q
JavaScript (ES6), 87 Byte
Erläuterung
Abhängig davon, welcher Teil des regulären Ausdrucks übereinstimmt, wird die Übereinstimmung durch den umgekehrten Fall ersetzt.
Prüfung
quelle
Ruby,
1018775 BytesLeider funktioniert dies genauso wie die Retina-Lösung, da diese Methode kürzer war als alles andere, was ich mir ausgedacht habe.
quelle
Python 3, 130 Bytes
Schneller und schmutziger Versuch, die Kappen mit Regex zu spalten. Ziemlich brachiale Gewalt: Wenn sich jemand einen anderen Ansatz einfallen lässt, bin ich sicher, dass dies geschlagen werden kann.
quelle
PHP 160 Bytes
Nicht die kürzeste, aber der Vollständigkeit halber hier meine Lösung in PHP, $ s enthält den zu konvertierenden String:
quelle
Perl 6 ,
73 72 7168 BytesVerwendung:
Erläuterung:
Sie fragen sich vielleicht, warum ich die Unicode-Eigenschaften (
<:Lu>
,<:Ll>
) anstelle einer Zeichenklasse verwendet habe. In Perl 6 sind sie nicht mehr buchstabiert,[a-z]
sondern<[a..z]>
1,6-mal so groß. Die Klammern[ … ]
werden stattdessen für nicht erfassende Gruppierungen verwendet, die wie(?: … )
in Perl 5 geschrieben wurden.quelle
Japt, 40 Bytes
Online testen!
Wie es funktioniert
quelle
Perl 5, 42 Bytes
40 Bytes plus 2 für
-p
(danke, dev-null )quelle
-E
anstelle von-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 Zeichen / 32 Byte (nicht konkurrenzfähig)
Try it here (Firefox only).
v3 wurde nach dieser Herausforderung mit einer Reihe von Bugfixes und Bibliotheksaktualisierungen veröffentlicht.
Erläuterung
Dies ist nur ein Mashup von Buildins.
quelle
Gelee , 24 Bytes
Probieren Sie es online!
quelle
Python 3 , 86 Bytes
Probieren Sie es online!
Funktioniert auch in Python 2 .
Ausnutzen der günstigen Tatsache, dass der ASCII-Wert für
_
(95) genau zwischen den Großbuchstaben (65-90) und Kleinbuchstaben (97-122) liegt, um einen einfachen Vergleich von Zeichenfolgen zu ermöglichen.quelle
Forth (gforth) , 129 Bytes
Probieren Sie es online!
Code Erklärung
quelle