Herausforderung :
Geben Sie eine Zeichenfolge an, die an bestimmten Positionen aufgeteilt ist, und schreiben Sie das erste Zeichen des angegebenen Wortes in Großbuchstaben. Aktivieren Sie das erste Zeichen des ersten Wortes genau dann, wenn es bereits aktiviert wurde
Eingabe:
Eine Zeichenfolge s
und ein Zeichen c
.
Ausgang:
Die Zeichenfolge bei jedem Auftreten von c
durch das erste aktivierte Zeichen ersetzt
Beispiele:
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Hinweis :
- Die angegebene Eingabe ist immer gültig. Das heißt: Die erste Zeichenfolge ist immer eine Zeichenfolge mit mindestens einer Instanz des zu ersetzenden Zeichens. Der zweite wird immer ein einzelnes Zeichen sein.
- Die Länge der Eingabezeichenfolge ist größer. 4.
Es gibt mindestens ein Vorkommen des Zeichens, bei dem geteilt werden soll.
Die Eingabe enthält garantiert nur Buchstaben und das Trennzeichen (Danke @Arnauld)
- Separator ist alles, was kein Alphabet ist (az / AZ) (vorgeschlagen von @Dennis)
Gewinnkriterien:
Dies ist Code-Golf, so dass der kürzeste Code in Bytes für jede Sprache gewinnt.
- Vielen Dank an @ JonathanAllan für den Hinweis auf zwei Fehler.
1
). Überlegen Sie, wie Lösungen möglicherweise scheitern, und machen Sie einen Testfall für solche Situationen. Einige Beispiele: Buchstaben als Trennzeichen, wobei das Trennzeichen das letzte Zeichen ist, aufeinanderfolgende Trennzeichen usw. Es ist nicht erforderlich, viele Testfälle zu haben, die nicht verschiedene Dinge testen..
, so kann ich mir vorstellen, dass einige Funktionen zur Aufteilung von Strings damit zu kämpfen haben.Antworten:
Python 3 , 63 Bytes
Probieren Sie es online!
quelle
C (gcc) ,
615355 Bytes-8 Bytes dank Dennis!
Probieren Sie es online!
quelle
*s==c?*++s&=95:0;
stattdessen vorif(*s==c)*++s&=95;
JavaScript (ES6),
5856 Byte2 Bytes gespart dank @ l4m2 / @Downgoat
Übernimmt Eingaben in der Currying-Syntax
(s)(c)
.Probieren Sie es online!
Kommentiert
quelle
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, da es nicht für spezielle Regex-Zeichen funktioniert!prob!!lem!s!Olved!!
+
bevor das.
in der RegEx umgeht.Perl 6
-p
, 19 BytesProbieren Sie es online!
quelle
sed 4.2.2 (-r), 21
Ich habe es
\W
stattdessen versucht[^a-z]
, aber leider passt das nicht zusammen_
.Probieren Sie es online!
quelle
sed 4.2.2 (-r), 21 bytes
.Gelee , 8 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Octave ,
83,66, 64 Bytes2 Bytes dank Luis Mendo gespeichert.
upper
statttoupper
.Probieren Sie es online!
Wow, das ist wahrscheinlich das schmutzigste Stück Octave-Code, das ich je geschrieben habe! Diese nutzt zwei der Tricks im Thema dieser Tippfrage aufgeführten , nämlich Argumentliste und Zellenarrays.
Erläuterung:
Argumentlisten-Eingabe:
k
Hier wird das erste Zeichens
nach jedem Trennzeichenc
in Großbuchstaben umgewandelt. Der Index jedes großgeschriebenen Zeichens wird in gespeicherti
.Zellenarraykörper:
Wir erstellen ein Zellenarray mit zwei Elementen, von denen eines besagt, dass alle i-ten Zeichen durch das Gegenstück in
k
und das andere durchs
das bereits aktualisierte ersetzt werden sollen. Wir indizieren dies mit,{2}
damit wir nur den gesamten, modifizierten String zurückbekommen. Diesem wird zugeführtstrsplit
, was es beim Trennzeichen in Zellen aufteilt. Wir konvertieren es mit in eine durch Kommas getrennte Liste{:}
und verketten es mit eckigen Klammern wieder zu einer Zeichenfolge[]
.Entschuldigung, wenn das für dich keinen Sinn ergeben hat ... Es ergibt für mich kaum Sinn: P
quelle
Retina 0.8.2 , 20 Bytes
Probieren Sie es online! Nimmt nur die Zeichenfolge, Trennzeichen optional. Alle nicht-alphabetischen Zeichen werden gelöscht, nachfolgende alphabetische Zeichen werden jedoch in Großbuchstaben geschrieben. Vorherige 34-Byte-Version akzeptiert beliebige Eingabe:
Probieren Sie es online! Link enthält Testsuite. Angenommen, die Eingabe besteht aus der Zeichenfolge und dem Zeichen, die zusammen verkettet sind. Erläuterung: In der ersten Stufe werden alle Zeichen, die unmittelbar auf das Auftreten des Endzeichens folgen, von Klein- nach Großbuchstaben umgeschrieben, und in der zweiten Stufe werden alle Vorkommen des Endzeichens gelöscht.
Für beide Lösungen
+
funktioniert auch die Verwendung einer Übereinstimmung von rechts nach links anstelle von a .quelle
[^a-z]
anstelle der Lookaheads Try it online!APL (Dyalog Classic) , 22 Byte
Probieren Sie es online!
quelle
Röda ,
5754 Bytes-3 Bytes dank Kühe quaken
Probieren Sie es online!
Erläuterung:
quelle
\E
aus der Regex_[0:1]
_[:1]
V , 6
7Bytes1 Byte gespart, wenn kein Argument verwendet wird
Probieren Sie es online!
Das Programm nimmt den Text als Eingabe und das Zeichen als Argument auf.
Hexdump:
Dies ist eine einfache Ersetzung. Unkomprimiert sieht es folgendermaßen aus
Führen Sie eine globale Ersetzung durch, bei der
\A
ein nicht alphabetisches Zeichen, gefolgt von einem Zeichen, durch eine erste Erfassungsgruppe(.)
mit Großbuchstaben ersetzt wird\u
\1
quelle
c
es sich um ein spezielles Regex-Zeichen handeltScala, 83 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Rot , 87 Bytes
Probieren Sie es online!
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP,
9183 BytesLaufen Sie mit
-r
. War mit split 2 Byte kürzer als explodiert, aber ^ test schlägt aufgrund von Regex fehl.-8 danke an med
quelle
{
und}
aus der for-Schleife entfernen. Dadurch wird nur die nächste Anweisung als Hauptteil der Bedingung behandelt.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 Bytes,
45 BytesProbieren Sie es online aus . Die Testsuite ist ohne das letzte Element enthalten, da das Trennzeichen fehlt
c
.quelle
Gehen,
1389287 BytesFiel 46 Bytes dank @Dennis 'Titel Fall Idee.
Probieren Sie es online!
quelle
Schale , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
F # (Mono) , 122 Bytes
Probieren Sie es online!
quelle
Java 10, 141 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
R 87 Bytes
Probieren Sie es online!
Verwendet diesen Trick kann nicht richtig in TIO ausgeführt werden, so habe ich es simuliert.
Wir brauchen das
T
sonst einer der Testfälle ausfällt.quelle
Stax , 11 Bytes
Führen Sie es aus und debuggen Sie es
Erläuterung
Es gibt ein paar Teile, die ich gerne irgendwie reparieren würde. Ich kann es auf ungefähr 8 Bytes reduzieren, aber es schlägt im letzten Testfall>. <Fehl
quelle
Ruby
-pl
, 36 BytesProbieren Sie es online!
Nimmt nur den String ohne zweites Argument. Verwendet die Blockversion der
gsub!
Methode, da sie mit gängigergsub! x,y
Syntax$1
nicht ohne weiteres mit Übereinstimmungsdaten gefüllt wird.|$
in Regex ist für den Testfall mit Trennzeichen am Ende erforderlich.quelle
Python 3 , 77 Bytes
Probieren Sie es online!
Dies setzt voraus , dass die Zeichenfolge ASCII codiert ist , und geht davon aus, daß
s
undc
sind Variablen, die das Eingangs vorbelastet.Diese Lösung basiert auf der Tatsache, dass bei der ASCII-Codierung Kleinbuchstaben 32 Einträge nach Großbuchstaben stehen
Bearbeiten: Ich habe gerade festgestellt, dass dies auch das erste Zeichen in der Zeichenfolge großschreibt, was es nicht sollte. aber ich bin ziemlich stolz auf meinen Unsinn, also lasse ich das, wenn das erlaubt ist
quelle
s
soll seinA string s and a character c.