Pour le défi d'aujourd'hui, vous devez écrire un programme ou une fonction qui alterne la casse d'une chaîne. Cependant, vous devez ignorer les caractères non alphabétiques. Cela signifie que chaque caractère alphabétique doit avoir une casse différente des caractères alphabétiques précédent et suivant. Ceci est légèrement plus complexe que de mettre en majuscule une lettre sur deux, par exemple. Si vous prenez une chaîne telle que
hello world
et convertissez tous les autres caractères en majuscules, vous obtiendrez:
hElLo wOrLd
Comme vous pouvez le constater, la minuscule o
est suivie d'une minuscule w
. Ceci est invalide. Au lieu de cela, vous devez ignorer l'espace en nous donnant le résultat suivant:
hElLo WoRlD
Tous les caractères non alphabétiques doivent rester les mêmes. La sortie peut commencer par des majuscules ou des minuscules, dans la mesure où elle alterne régulièrement. Cela signifie que les résultats suivants seraient également une sortie acceptable:
HeLlO wOrLd
Votre programme devrait fonctionner quel que soit le cas de l'entrée.
La chaîne d'entrée ne contiendra jamais que l' ASCII imprimable , vous n'avez donc pas à vous soucier des caractères non imprimables, des nouvelles lignes ou de l'unicode. Votre soumission peut être un programme complet ou une fonction, et vous pouvez utiliser les entrées et les sorties dans un format raisonnable. Par exemple, arguments de fonction / valeur de retour, STDIN / STDOUT, lecture / écriture d'un fichier, etc.
Exemples:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Puisqu'il s'agit de code-golf , des échappatoires standard s'appliquent et la réponse la plus courte en octets est gagnante!
cowsay
Réponses:
JavaScript (ES6),
6663 octetsCommence avec majuscule.
Cas de test
Afficher l'extrait de code
la source
s=!s
marche?s
s'agit de la chaîne d'entrée,!s
évalue d'abord àfalse
(sauf si la chaîne d'entrée est vide, auquel cas elle serait évaluée àtrue
- mais une chaîne vide ne générera aucune correspondance de toute façon). Après cela, cela devient une opération booléenne standard, alternant entrefalse
ettrue
. En outre, cela ne nous dérange pas de perdre le contenu des
à ce stade car il était déjà utilisé pour l'alimentation.replace()
."A[I"
échouera.05AB1E ,
118 octetsCode:
Utilise le codage 05AB1E . Essayez-le en ligne!
Explication:
la source
lvy¾Fš}Da½J
c’est exactement ce que vous aviez déjà ._.Oh-Five-Ay-Bee-One-Eee
je ne suis pas un homme créatif.GNU Sed, 33
Le score inclut +1 pour le
-r
drapeau à séduire.Essayez-le en ligne .
la source
Gelée , 13 octets
Essayez-le en ligne!
Comment ça marche
la source
Japt ,
1614 octetsEssayez-le en ligne!
Explication
la source
,
. À moins que ce ne soit un nombre (par exemple[12]
), Japt sait que ce sont des éléments différents. Je crois que vous pouvez supprimer le&1
aussi._m"uv"gT°
Agréable. J'étais sur le point de le suggérer.Python 3 ,
8676686663 octets-2 octets grâce à DJMcMayhem
-3 octets grâce à Cyoce
Essayez-le en ligne! ou Essayez tous les cas de test
la source
print(end=(2*i).title()[x])
?Alice , 18 octets
Essayez-le en ligne!
Explication
Ce programme suit un modèle moins connu pour les programmes de longueur impaire entièrement exécutés en mode ordinal. La version linéarisée de ce code est:
Explication du code:
Sans utiliser
l
sur le duplicata, la pile aprèsN
serait["helloworld", "helloworld"]
. Je soupçonne fortement que c'est un bug.la source
C (tcc) ,
605756 octetsMerci à DigitalTrauma d'avoir remarqué que le bit 5 est la seule différence entre les majuscules et les minuscules ASCII.
Un merci spécial à zch pour avoir joué trois octets supplémentaires.
Enregistrer un octet supplémentaire de l'idée de RJHunter
Essayez-le en ligne!
la source
strdup()
de faire en sorte que les pointeurs de la mémoire en lecture / écriture soient stockés dans le code du pilote de test.*s&~32|++l%2<<5
pour économiser 3 octets.&~33
par&95
pour sauvegarder un octet supplémentaire.Java 8, 99 octets
Explication:
Essayez ici.
la source
(c+"").matches("[A-Za-z]")
ouCharacter.isLetter(c)
économiser des octets.c>64&c<91|c>96&c<123
bien. Et comme je l’utiliseint
quand même pour les partiesCharacter.toUpperCase(...)
et lesCharacter.toLowerCase(...)
parties jouées au golf (celles-ci:(char)(c&~32)
et(char)(c|32)
), je doute d’être en mesure de les raccourcir.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Ruby,
57554741 octetsLe nombre d'octets inclut deux octets pour les options de ligne de commande.
Exécutez-le par exemple comme ceci:
$ ruby -p0 alternate_case.rb <<< "some input"
Avec l'
p0
option, la totalité de l'entrée est consommée en une fois et le global magique$.
est incrémenté à 1. Il est ensuite basculé entre 0 et 1 et est utilisé pour conserver l'état.Fonctionne avec une entrée multiligne; Essayez-le en ligne!
Merci à Ventero pour ses contributions remarquables - vérifiez les commentaires pour plus de détails
la source
$.
l'incrémentation automatique s'incrémentait à chaquegets
appel, un programme complet avec le-p
drapeau aurait été plus court ...1&$.+=1
vous permet de supprimer les parenthèses. Et pour être complet, il est un autre entier global - il est malheureusement juste en lecture seule:$$
.-p0
permet à l'interprète de lire toutes les entrées disponibles en une fois. Votre code n'est donc appelé qu'une fois, vous permettant ainsi de l'utiliser librement$.
. En combinant cela avec le fait que celagsub
fonctionne implicitement$_.gsub!
lorsque vous spécifiez,-p
un programme complet est nettement plus court: 48 caractèresgsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
pour lep0
drapeau et 2 pour le drapeau.-p0
, vous pouvez en réalité enregistrer quelques caractères supplémentaires dans la façon dont vous effectuez un basculement$.
: Dans la mesure où il est maintenant garanti1
que votre code est appelé, vous pouvez simplement l'utiliser$.^=1
./\p{L}/
(La catégorie de la lettre Unicode ) a un caractère plus court que/[a-z|/i
.Brachylog , 25 octets
Essayez-le en ligne!
C'est à la fois long et lent.
Explication
la source
MATL ,
1615 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Considérez l'entrée 'hello world'
'
la source
Perl 6 ,
3230 octetsL'essayer
L'essayer
Étendu:
la source
q / kdb +,
514238 octetsSolution:
Exemple:
Remarques:
la source
V ,
17, 13 octetsEssayez-le en ligne!
Ou vérifiez tous les cas de test!
HeXdUmP:
Explication:
Ceci utilise un regex ™ compressé so, donc avant de l'expliquer, développons le regex:
Le
VU
convertit tout en majuscule. Puis on lance ceci:Réponse ancienne / plus intéressante:
la source
PHP, 71 octets
Essayez-le en ligne!
la source
CJam ,
26 à24 octetsEssayez-le en ligne!
Explication
la source
Pyth, 11 octets
Essayez-le ici
Explication
la source
PowerShell, 86 octets
L'entrée est un
[char[]]
tableau.Commentaires dans le code pour l'explication
la source
Haskell,
10583 +24 + 1 octet de séparateur =1088688 octetsLa fonction est
(1#)
, commence en minuscule. Essayez-le en ligne!Ce qui est triste, c’est que c’est plus long que les réponses Java et C #Merci à Ørjan Johansen d’avoir économisé 22 octets en fusionnant trois lignes en une!la source
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
ne compte pas comme une fonction anonyme. Selon ma compréhension, on devrait pouvoir lier une fonction anonyme à un identifiant, maisf=1#
cela ne fonctionnera pas par exemple . Au lieu de cela, vous avez besoin de la section(1#)
pour +2 octets. Ceci est également indiqué implicitement dans les directives de notre communauté pour le golf à Haskell , bien que celles-ci devraient peut-être être adaptées pour mentionner explicitement ce cas.Google Sheets, 264 octets
C'est un gros bazar mais c'est un peu plus facile si vous le développez:
La pseudo-logique fonctionnerait comme ceci:
la source
Perl 5, 24 bytes
23 bytes + 1 byte for
-p
.Thanks to @Dada for -2 bytes.
Try it online!
la source
\pl
instead of[a-z]
to 2 bytes tho :)[a-z]
instead!). If you wonder, it comes from perlrecharclass ;)Retina, 46 bytes
Try it online! Includes test cases.
la source
C 64 bytes
Takes advantage of ascii encoding where upper and lower case letters are offset by 0x20.
la source
char
and*s
Retina, 32 bytes
Try it online!
First converts the input to uppercase, and then groups the input into matches containing up to two capital letters. The only time it will contain only one letter is if the last letter doesn't have a pair. Then it lowercases the first letter of each of these matches.
The
01
in the second stage translates roughly to: do not change the behaviour of this stage based on the match number, but only apply the changes to the first character of each match.la source
PHP 5, 54 bytes
la source
C#, 100 bytes
la source
Groovy, 79 bytes
la source
Python 3, 192 bytes
Try it online!
la source
Convex, 16 bytes
Try it online!
Convex port of @Business Cat's answer.
la source