Votre entrée sera une phrase, une expression ou un mot en anglais. Il contiendra seulement a-zA-Z' -,.!?
. Votre tâche consiste à prendre l'entrée, à supprimer des espaces, puis à redistribuer les majuscules de sorte que les lettres des index qui ont été capitalisées auparavant (et uniquement les lettres des index qui ont été capitalisées auparavant) soient capitalisées.
Par exemple, si l'entrée est A Quick Brown Fox Jumped Over The Lazy Dog
, les index (basés sur 0) des lettres majuscules le sont 0, 2, 8, 14, 18, 25, 30, 34, 39
. Ensuite, supprimer les espaces de l'entrée: AQuickBrownFoxJumpedOverTheLazyDog
. Ensuite, toutes les lettres minuscules, majuscules , mais ceux à 0, 2, 8, 14, 18, 25, 30, 34, 39
: AqUickbrOwnfoxJumpEdovertHelazYdog
qui est votre sortie.
Contribution
Votre entrée sera une phrase, une expression ou un mot en anglais. Il ne peut contenir que des lettres minuscules, des lettres majuscules, des tirets, des apostrophes, des virgules, des points, des points d'interrogation, des points d'exclamation et des espaces.
Sortie
L'entrée avec les espaces supprimés, minuscule-d, avec des lettres à l'index des lettres majuscules dans l'entrée majuscule-d.
Remarque: votre programme ne peut pas planter (erreur telle exécution se termine) avec un IndexOutOfRange ou une erreur similaire.
Cas de test
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
' Ils le sont0, 2, 8, 14, 18, 25, 30, 34, 39
Réponses:
Gelée ,
1413 octetsEssayez-le en ligne!
Comment ça marche
la source
C (gcc) ,
82797472696766 octetsEssayez-le en ligne!
la source
Python 2 , 114 octets
Essayez-le en ligne!
De manière équivalente:
Python 2 , 114 octets
Essayez-le en ligne!
la source
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
pour -5 octets.Python 3 ,
787572 octetsMerci à @xnor d'avoir joué au golf sur 6 octets!
Essayez-le en ligne!
la source
s
au lieu des[0]
?(c*2).title()
peut vous obtenir les deux cas, bien que commutés.c>' '!=f()
équivaut à(c>' ') and (' '!=f())
.05AB1E ,
1514 octets-1 octet grâce à Emigna
Essayez-le en ligne!
la source
Haskell ,
9895898881 octetsMerci à @name, @nimi, @Zgarb et @Laikoni pour avoir aidé à raser 14 octets au total
Non golfé:
la source
filter(>' ')
pour un octet de moinslast(toLower:[toUpper|isUpper p])c
zipWith
doit enregistrer un octet:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 octets
Essayez-le en ligne!
Ce genre de défis est exactement ce pour quoi V a été conçu. :)
Explication:
la source
Python 2, 100 octets
la source
Alice , 32 octets
Essayez-le en ligne!
Explication
Il s'agit d'un modèle standard pour les programmes qui fonctionnent entièrement en mode ordinal. Déballé, le programme est le suivant:
la source
JavaScript (ES6),
949185 octetsEssayez-le
la source
'@'<s[i]&s[i]<'['?
?Rétine ,
7771 octetsEssayez-le en ligne! Le lien inclut une suite de tests. Explication: La première étape duplique la ligne tandis que la deuxième étape minuscule le doublon et supprime ses espaces. La troisième étape parcourt ensuite chaque lettre majuscule de droite à gauche et tente de placer un espace avant le caractère correspondant sur la deuxième ligne. La première ligne est supprimée et les espaces sont utilisés pour mettre en majuscule les caractères pertinents du résultat. Edit: sauvé 6 octets grâce à @Kobi.
la source
(.?)
et sont-$4
elles nécessaires? On dirait qu'avoir un groupe optionnel à la fin ne fait rien.Perl,
9594 + 1 = 95 octetsPénalité de +1 octet pour -n
Enregistrer un octet en remplaçant de
s/\s//g
às/ //g
Essayez-le en ligne!
Explication:
Faites une copie de la chaîne d'entrée.
Supprimez tous les espaces et transformez la chaîne en minuscules.
Ensuite, démarrez la boucle sur chaque lettre. Testez la lettre dans la même position dans la chaîne enregistrée pour les majuscules. S'il est supérieur - rendre la lettre actuelle sous-titrée. Imprimer la lettre.
Notez que perl doit être exécuté avec le commutateur de ligne de commande "-n"
la source
+1
octet pour le-n
drapeau. A part ça, ça a l'air bien! Bienvenue sur le site! :)MATL , 18 octets
Même approche que la réponse 05AB1E de Riley .
Essayez-le en ligne!
la source
Python 3 , 117 octets
Essayez-le en ligne!
C'est à peu près mon premier code de golf, donc c'est probablement mauvais, sans l'aide des commentaires ci-dessous!
PS Oui, il est stupide que la définition et l'incrémentation
i
économise des octets sur la plage (len (y)). Tant pis.la source
return
.C # (.NET Core) ,
108101octetsEssayez-le en ligne!
char
classe a des méthodesToUpper()
et des statiquesToLower()
.la source
Fusain , 33 octets
Essayez-le en ligne!
Comme je ne sais toujours pas comment passer une chaîne avec des espaces en tant que paramètre d'entrée unique dans le code Charcoal, j'assigne simplement dans l'en-tête la chaîne de test à la variable Charcoal qui représente ce qui serait la première entrée (
θ
):Ainsi, le code a le même nombre d'octets que si la chaîne était passée en première entrée.
Vous pouvez voir ici la version détaillée du code.
la source
PHP, 181 octets
J'essaye d'obtenir les nombres mineurs d'octets, voici mon code:
Essayez-le en ligne!
la source
PREG_OFFSET_CAPTURE
vous pouvez utiliser la valeur256
,$argn
est une variable plus courte quereadline()
pour une entrée et je pensectype_upper
et utiliserlcfirst
etucfirst
économisera beaucoup d'octets avec une boucle et l'utilisation de l'$$i
opérateur ternaireJava 8,
184177161 octetsPeut certainement être joué un peu plus ..
- 16 octets grâce à @ OlivierGrégoire en prenant l'entrée comme
char[]
au lieu deString
.Explication:
Essayez-le ici.
la source
char[]
au lieu d'une chaîne pour celui-ci, vous économiserez beaucoup d'octets!String
, out =char[]
:-)Lisp commun, 104 octets
Essayez-le en ligne!
Exceptionnellement court pour le verbeux Common Lisp!
Code simple:
la source
Java (OpenJDK 8) ,
15011711397 bytesEssayez-le en ligne!
En jouant plus, je suis arrivé à 102 octets:
Essayez-le en ligne!
Mais je me souvenais que cela commençait à ressembler à la réponse de Dennis 'C, alors j'ai simplement porté son peu de twiddling et ... la magie s'est produite. Le gros gain du port est la suppression des branches et des répétitions à l'intérieur.
la source
Hi! Test!
devrait devenirHi!tEst!
, mais avec votre solution cela devientHi!Test
.Google Sheets, 213 octets
L'entrée est dans la cellule
A1
et la formule se décompose comme suit:ArrayFormula()
nous permet d'évaluer chaque terme de manièreROW()
indépendanteJOIN()
concatène tous ces résultats indépendants en une seule chaîneIF(REGEXMATCH(),UPPER(),LOWER()
est ce qui le rend alternatif en utilisant des majuscules ou des minuscules selon ce que le boîtier était à cette position dans l'entréeROW(OFFSET())
retourne un tableau de valeurs1
àA1.length
qui peut être introduit dans laMID()
fonction afin que nous puissions évaluer chaque personnage à son tourRésultats des cas de test: (Il est plus facile à lire si vous cliquez sur la version plus grande.)
la source
Ruby , 80 octets
Essayez-le en ligne!
la source
n.gsub(/./){}
lieu den.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 octets
Explication:
la source
-n
indicateur pour valider votre réponse. Quelques choses au golf: celas/ //g
suffit (pas besoin\s
),y/a-z/A-Z/
c'est la même chose quetr[a-z][A-Z]
, vous pouvez utiliser le-p
drapeau pour que vous n'ayez pas besoin du dernierprint
, vous n'avez pas besoin des parenthèseslc$&
.C, 103 octets
Essayez-le en ligne!
la source
Python 3 ,
125, 124 octetsEssayez-le en ligne!
la source
Python 2,
106105 octetsModifier: enregistrez un octet via
print ''.join
=>print''.join
.Forme lambda, 99 octets
la source
SCALA, 128 caractères, 128 octets
Merci pour ce défi. Essayez-le en ligne!
la source
q / kdb +, 49 octets
Solution:
Exemples:
Explication:
Recherchez les index dans lesquels l'entrée est en majuscules, puis appliquez la fonction
upper
à ces index sur une version en minuscules et sans espace de la chaîne d'entrée. Notez que nous ne pouvons pas appliquer la fonction au-delà de la longueur de la chaîne, utilisez donc take (#
) pour tronquer la chaîne d'entrée à la longueur de la version en minuscule et à espace supprimé.Prime:
Après avoir lu les réponses, j'ai pensé essayer une solution où j'itérerais sur l'entrée, jusqu'à présent, je n'ai géré qu'une solution de 53 octets:
la source
Swift 3.0, 199 octets
Essayez-le en ligne!
la source
Perl 5 , 40 octets
37 octets de code +
-F
indicateur. (notez que sur les anciennes versions de Perl, vous devrez peut-être ajouter des-an
indicateurs)Essayez-le en ligne!
Explications:
Merci à
-F
,@F
contient une liste de tous les caractères de l'entrée.for/\S/g
itère sur chaque caractère non espace de l'entrée. Nous utilisons$i
pour compter à quelle itération nous sommes. Si$F[$i++]
est un caractère majuscule (/[A-Z]/
), alors nous imprimons le caractère courant majuscule (uc
), sinon, nous l'imprimons en minuscule (lc
). Notez celauc
etlc
renvoyez leur argument inchangé s'il ne s'agit pas d'une lettre.Version précédente (moins golfée: 47 octets):
Essayez-le en ligne!
la source