Défi :
Étant donné une chaîne divisée à des positions spécifiques et en majuscule le premier caractère du mot donné. Mettre en majuscule le premier caractère du premier mot si et seulement s'il était déjà en majuscule
Contribution :
Une chaîne s
et un caractère c
.
Sortie:
La chaîne à chaque occurrence de c
remplacée par le premier caractère en majuscule
Exemples :
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
Remarque :
- L'entrée donnée sera toujours valide. ie: La première sera toujours une chaîne avec au moins une instance du caractère à remplacer à. Le second sera toujours un seul caractère.
- La longueur de la chaîne d'entrée sera supérieure 4.
Il y aura au moins une occurrence du personnage à diviser.
L'entrée est garantie pour ne contenir que des lettres et le séparateur (Merci @Arnauld)
- Le séparateur est tout ce qui n'est pas un alphabet (az / AZ) (suggéré par @Dennis)
Critères gagnants:
C'est le code-golf donc le code le plus court en octets pour chaque langue gagne.
- Merci à @JonathanAllan d'avoir signalé deux erreurs.
1
). Essayez de réfléchir à la façon dont les solutions peuvent échouer et faites un test pour de telles situations. Quelques exemples: lettres comme séparateurs, le séparateur étant le dernier caractère, séparateurs consécutifs et ainsi de suite. Il n'est pas nécessaire d'avoir de nombreux cas de test qui ne testent pas différentes choses..
, je peux imaginer des fonctions de fractionnement de chaînes qui luttent avec celle-ci.Réponses:
Python 3 , 63 octets
Essayez-le en ligne!
la source
C (gcc) ,
615355 octets-8 octets grâce à Dennis!
Essayez-le en ligne!
la source
*s==c?*++s&=95:0;
place deif(*s==c)*++s&=95;
JavaScript (ES6),
5856 octets2 octets enregistrés grâce à @ l4m2 / @Downgoat
Prend des entrées dans la syntaxe de curry
(s)(c)
.Essayez-le en ligne!
Commenté
la source
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, car cela ne fonctionne pas pour les caractères spéciaux regex!prob!!lem!s!Olved!!
+
avant le.
dans le RegEx le contournera.Perl 6
-p
, 19 octetsEssayez-le en ligne!
la source
sed 4.2.2 (-r), 21
J'ai essayé à la
\W
place de[^a-z]
, mais malheureusement cela ne correspond pas_
.Essayez-le en ligne!
la source
sed 4.2.2 (-r), 21 bytes
.Gelée , 8 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Octave ,
83,66, 64 octetsEnregistré 2 octets grâce à Luis Mendo.
upper
au lieu detoupper
.Essayez-le en ligne!
Wow, c'est probablement le morceau d'Octave-code le plus salissant que j'aie jamais écrit! Cela utilise deux des astuces publiées dans cette question de conseils, à savoir la liste d'arguments et les tableaux de cellules.
Explication:
Entrée de liste d'arguments:
k
est ici le premier caractères
après chaque séparateurc
, converti en majuscules. L'index de chaque caractère en majuscule est stocké dansi
.Corps du réseau cellulaire:
Nous créons un tableau de cellules avec deux éléments, l'un étant que nous disons que tous les ièmes caractères devraient être remplacés par son homologue dans
k
, et l'autre avecs
, qui est maintenant déjà mis à jour. Nous indexons cela à l'aide de{2}
sorte que nous ne récupérons que la chaîne entière modifiée. Ce dernier est alimentéstrsplit
, ce qui le divise en cellules au niveau du séparateur. Nous le convertissons en une liste séparée par des virgules en utilisant{:}
et le concaténons en une chaîne en utilisant des crochets[]
.Toutes mes excuses si cela n'a aucun sens pour vous ... Cela n'a guère de sens pour moi: P
la source
Retina 0.8.2 , 20 octets
Essayez-le en ligne! Prend la chaîne uniquement, séparateur en option. Tous les caractères non alphabétiques sont supprimés mais tout caractère alphabétique suivant est en majuscule. La version précédente de 34 octets acceptait les entrées arbitraires:
Essayez-le en ligne! Le lien inclut une suite de tests. Suppose que l'entrée se compose de la chaîne et du caractère concaténés ensemble. Explication: La première étape translitère tous les caractères immédiatement après les occurrences du caractère de fin de minuscules en majuscules et la deuxième étape supprime ensuite toutes les occurrences du caractère de fin.
Pour les deux solutions, l'utilisation d'une correspondance de droite à gauche au lieu d'un
+
fonctionne également.la source
[^a-z]
place des têtes de lecture Essayez en ligne!APL (Dyalog Classic) , 22 octets
Essayez-le en ligne!
la source
Röda ,
5754 octets-3 octets grâce au charlatan des vaches
Essayez-le en ligne!
Explication:
la source
\E
expression rationnelle, et_[0:1]
→_[:1]
V , 6
7octets1 octet enregistré en n'utilisant pas d'argument
Essayez-le en ligne!
Le programme prend le texte en entrée et le caractère en argument.
Hexdump:
Il s'agit d'une simple substitution. Non compressé, il ressemble à ce qui suit
Effectuer une substitution globale dans laquelle
\A
, un caractère non alphabétique, suivi d'un caractère(.)
est remplacé par le\u
premier groupe de capture en majuscules\1
la source
c
trouve un caractère regex spécialScala, 83 octets
Essayez-le en ligne!
Explication:
la source
rouge , 87 octets
Essayez-le en ligne!
la source
05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
PHP,
9183 octetsCourir avec
-r
. Était de 2 octets plus court en utilisant split au lieu d'exploser, mais ^ test échoue en raison de l'expression régulière.-8 grâce à Med
la source
{
et}
de la boucle for, il ne traitera que l'instruction suivante comme corps de la condition.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 octets,
45 octetsEssayez-le en ligne . Suite de tests incluse excluant le dernier élément car il manque le caractère séparateur
c
.la source
Aller,
1389287 octetsA chuté de 46 octets grâce à @Dennis idée de cas de titre .
Essayez-le en ligne!
la source
Husk , 10 octets
Essayez-le en ligne!
Explication
la source
F # (Mono) , 122 octets
Essayez-le en ligne!
la source
Java 10, 141 octets
Essayez-le en ligne.
Explication:
la source
R , 87 octets
Essayez-le en ligne!
Utilise cette astuce ne peut pas être correctement exécutée dans TIO donc je l'ai simulée.
Nous avons besoin de l'
T
un sinon les cas de test échouent.la source
Stax , 11 octets
Exécuter et déboguer
Explication
Il y a quelques parties que j'aimerais vraiment corriger d'une manière ou d'une autre. Je peux le réduire à environ 8 octets, mais il échoue sur le dernier cas de test>. <
la source
Rubis
-pl
, 36 octetsEssayez-le en ligne!
Prend uniquement la chaîne sans deuxième argument. Utilise la version de bloc de la
gsub!
méthode car avec unegsub! x,y
syntaxe commune, il$1
n'est pas facile de remplir les données de correspondance.|$
en regex est nécessaire pour le cas de test avec séparateur à la fin.la source
Python 3 , 77 octets
Essayez-le en ligne!
Cela suppose que la chaîne est codée ASCII et suppose que
s
etc
sont des variables préchargées contenant l'entrée.Cette solution fonctionne sur le fait que dans le codage ASCII, les lettres minuscules sont positionnées 32 entrées après les lettres majuscules
Edit: je viens de réaliser que cela met également en majuscule le premier caractère de la chaîne, ce qui ne devrait pas être le cas. mais je suis assez fier de mes bêtises, donc je vais laisser ça si c'est permis
la source
s
censé être?A string s and a character c.