Dans ce Coding Golf, vous devez convertir une convention de codage avec TitleCase en lower_case_with_underscores. Et vice versa!
spécification
Changez le boîtier de la manière suivante:
- Si le caractère de soulignement est un délimiteur, remplacez la casse par la casse du titre sans aucun délimiteur.
- S'il y a plusieurs mots sans délimiteur, changez la casse en minuscules et ajoutez un caractère de soulignement comme délimiteur.
- Dans le cas d'un seul mot (ou d'un seul caractère): remplacez la casse par la casse du titre si le mot commence par une minuscule; changer la casse en minuscules si le mot commence par les majuscules.
Caractères autorisés:
- De A à Z
- de A à Z
- souligner (
_
).
Les entrées avec des mots en casse mixtes sont interdites. Exemples de cas non autorisés:
Coding_Convention_Conversion
a_BC
Exemples de cas
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
Règles
- Il est autorisé à utiliser
ToUpper
,ToLower
etToTitleCase
fonctions. - L'utilisation d'expressions régulières est autorisée.
- code-golf : le code le plus court en octets gagne!
ToTitleCase
fonction est correcte? Vous n'avez pas précisé, alors je suppose que c'est correct.Réponses:
Pyth, 25 octets
29 33 35 40Sauvegardé 2 octets grâce à @Dennis
4 octets enregistrés grâce à @FryAmTheEggman
Essayez-le en ligne
la source
/z\_
àrIz0
. Je crois aussi que j'ai trouvé une alternative de même longueur au programme d'ajout de soulignementstsXzrG1_Mcj\_G2
tsXzrG1*\_G
Jolf, 35 octets
Enregistre 1 octet grâce à @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Ceci est codé dans ISO 8859-7.
Woohoo mon premier programme Jolf!
Explication
Essayez-le en ligne
la source
"(?=[A-Z])'_
. La chaîne se ferme automatiquement.Rétine , 37
Merci à @ MartinBüttner pour avoir économisé 4 octets!
(Notez la nouvelle ligne de fin.)
Essayez-le en ligne. Notez que cela inclut un supplément
m`
pour configurer quelques lignes pour traiter chaque ligne d'entrée séparément afin que tous les cas de test puissent être exécutés en une seule fois. Ce n'est pas une exigence de la question, donc ceux-ci ne sont pas comptés dans le score._
au début de la saisie ou avant les lettres majuscules. Tous les mots sont maintenant_
séparés, quel que soit le cas._
soit au début de la saisie, soit lorsqu'elles sont suivies d'une lettre majuscule.la source
?=
et en remplaçant cette étape par$1
(n'affecte cependant pas le nombre d'octets).GNU Sed, 46
Merci à @TobySpeight pour avoir économisé 2 octets!
Le score inclut +1 pour
-E
(ou-r
) l'option poursed
.Essayez-le en ligne.
Sed assez simple:
_
, suivi d'une lettre minuscule par la majuscule de cette lettre. Leg
drapeau às
effectuer cette substitution pour chaque instance trouvéet
passe à l':
étiquette sans nom s'il y a des correspondances pour la substitution ci-dessus. Cette étiquette est implicitement à la fin._
le minuscule de cette lettre_
début avant la première lettre.s/^_//
supprime cela.la source
-E
fonctionne dans mon GNU sed 4.2.2 (Ubuntu 14.04.3), bien que ce ne soit pas dans la page de manuel. J'ai lu quelque part [la citation nécessaire] qui-E
est une nouvelle option Posix qui sera officiellement ajoutée à GNU Sed dans une version plus récente, mais qui existe déjà officieusement. Quoi qu'il en soit,-r
fait la bonne chose si-E
cela ne fonctionne pas pour vous./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
-r
sed -E -e Q
JavaScript (ES6), 87 octets
Explication
Selon la partie de l'expression rationnelle correspondante, elle remplace la correspondance par le cas contraire.
Tester
la source
Rubis,
1018775 octetsMalheureusement, cela fait exactement la même chose que la solution Retina, car cette méthode a fini par être plus courte que tout ce que j'ai imaginé.
la source
Python 3, 130 octets
Tentative rapide et sale utilisant regex pour diviser les bouchons. Force brute: si quelqu'un peut proposer une approche différente, je suis sûr que cela peut être battu.
la source
PHP 160 octets
pas le plus court mais pour être complet ici ma solution en PHP, $ s contient la chaîne à convertir:
la source
Perl 6 ,
73 72 7168 octetsUsage:
Explication:
Vous vous demandez peut-être pourquoi j'ai utilisé les propriétés Unicode (
<:Lu>
,<:Ll>
) au lieu d'une simple classe de caractères. En Perl 6, ils ne sont plus orthographiés,[a-z]
ils sont épelés<[a..z]>
1,6 fois plus gros. Les crochets[ … ]
sont utilisés pour le regroupement sans capture à la place, ce qui était orthographié comme(?: … )
dans Perl 5.la source
Japt, 40 octets
Testez-le en ligne!
Comment ça fonctionne
la source
Perl 5, 42 octets
40 octets plus 2 pour
-p
(merci, dev-null )la source
-E
au lieu de-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 caractères / 32 octets (non compétitif)
Try it here (Firefox only).
v3 est sorti après ce défi, avec un tas de corrections de bugs et de mises à jour de la bibliothèque.
Explication
Ceci est juste un mashup de builtins.
la source
Gelée , 24 octets
Essayez-le en ligne!
la source
Python 3 , 86 octets
Essayez-le en ligne!
Fonctionne également en Python 2 .
En utilisant le fait pratique que la valeur ascii pour
_
(95) est juste entre celles des lettres majuscules (65-90) et minuscules (97-122), ce qui permet des comparaisons de chaînes faciles.la source
Forth (gforth) , 129 octets
Essayez-le en ligne!
Explication du code
la source