Étant donné une chaîne, mettez-la en majuscule. Par capitalisation, j'entends les conTeNT-lENgth
modifications apportées à Content-Length
. Dans l'exemple, j'ai montré la chaîne avec 2 mots avec -
comme limite de mot. Cependant, je m'attends à ce que vous écriviez le code de la chaîne contenant un nombre quelconque de mots séparés par un seul caractère comme limite. Cette limite peut changer à travers la chaîne.
Conditions
- l'utilisation
regular expressions
n'est pas autorisée . - il peut y avoir n'importe quel nombre de mots dans une phrase (chaîne).
- chaque mot sera composé de
English
lettres[a-zA-Z]
de n'importe quel cas. - les différents mots de la phrase seront séparés par un seul caractère. Ce personnage ne sera l'une des
-
,.
,<space-character>
,/
,&
,#
. Vous pouvez sans risque supposer que la phrase ne contiendra aucun autre caractère que ceux mentionnés. - les limites des mots doivent être conservées dans la sortie.
- le code le plus court gagne.
Par exemple, votre programme devrait sortir Begin/With.Type&Content
pour BeGin/wITH.tyPE&conTeNt
.
Some test cases:
"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"
"type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe"
"cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc"
"lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT"
"contENT/ACcEpT"
"BeGin/wITH.tyPE&conTeNt"
"Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with"
"RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
"BEgin COdE#uSeR#aGeNt.USeR"
"TypE LENGth"
/CC/
à la ligne 2 ou-AND&
à la ligne 7) doivent être laissés seuls. Est-ce correct pour ce défi?Réponses:
GolfScript,
362719 caractèresUne approche GolfScript assez basique qui fonctionne pour toutes les entrées selon les spécifications. Les exemples peuvent être testés en ligne .
la source
Python 3,22
Ce code prendra une chaîne en entrée de stdin et donnera une sortie en majuscule à stdout.
par exemple:
contribution:
sortie:
Le code suivant est pour les entrées multilignes (si nécessaire)
Python 3, 46
la source
while 1:print(input.title())
est un équivalent plus court pour le dernier morceau de code.Mathematica 62
Les données
Code
Usage
la source
%%
%%%
%
%%
JavaScript (94)
la source
PHP:
78736564 caractèresL'entrée est transmise
$s
. Il opère sur la chaîne comme un tableau de caractères.Il s'agit d'une simple machine à 2 états. Il repose sur l'ordre lexical des chaînes et que l'analyseur suppose automatiquement que vous vouliez taper une chaîne dans certains cas.
L'état est stocké dans
$b
et est représenté comme le nom de la fonction qui doit être appelée sur le caractère suivant.ucfirst
etlcfirst
sont plus courts à taper et ont un comportement identique àstrtolower
/strtoupper
sur les chaînes de caractères uniques. De plus, comme ils ne diffèrent que par une seule lettre, nous pouvons les utiliser efficacement pour stocker l'état. La version d'origine devait stocker l'état explicitement dans un booléen.Comme l'écho n'imprime rien pour les booléens faux, j'ai utilisé une virgule et le
!
opérateur pour "masquer" l'affectation (qui dans ce cas est véridique) dans l'instruction echo. Cela m'a permis de sauvegarder un personnage en supprimant le{}
.la source
$b=ord($c)>64;
essayer$b=$c>"@";
. Ou même$b=$c>=A;
- AFAIR qui lance un avertissement, mais les bonnes pratiques de codage ne sont pas une vertu ici.$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
.C, 83
Prend des lignes
stdin
, les traduit enstdout
. (PréfèreSIGINT
àEOF
.)la source
Powershell: 37 - 43
Selon la façon dont vous souhaitez prendre l'entrée ...
Inviter l'utilisateur à entrer: 43
Prendre la contribution du pipeline: 38
Fournissez une entrée comme argument lors de l'exécution du script: 37
REMARQUE: Les scripts ci-dessus ignoreront les mots en majuscules, les laissant tels quels. Si cela doit être pris en compte, l'entrée doit être forcée en minuscules avant la conversion de casse de titre. Cela ajoute 10 caractères à la première méthode et 12 aux deux autres.
la source
foo:bar
.:
(deux-points) n'est pas répertorié comme séparateur de mots dans la règle n ° 4, par conséquent, AFAICS,foo:bar
devrait entraînerFoo:bar
, nonFoo:Bar
. Mais ce n'est que ma lecture (assez stricte) de la spécification.get-culture
parculture
; voir codegolf.stackexchange.com/a/778/1308Java - 209 caractères
J'ai ajouté des nouvelles lignes uniquement pour la lisibilité.
la source
R,
143116Une solution un peu longue peut-être mais c'est parti:
Légèrement non golfé et expliqué:
Éditer : 116 caractères
Le principal défi ici est de vectoriser
substr
. Voici une autre façon moins verbeuse.Dentelé:
Usage:
la source
a
contient que des caractères en minuscules, il n'est pas nécessaire de vérifier les correspondances avec des majusculesLETTERS
.TRUE
parT
.tolower
plus tard.mapply(substr,tolower(x),n,n)
parstrsplit(tolower(x),"")[[1]]
pour enregistrer un caractère.Befunge 98 -
2445Écrire cela m'a fait mal au cerveau.
Cela prend l'entrée
~
et si le caractère précédent était l'un des séparateurs (ou s'il n'y avait pas de caractère précédent), il s'exécuteCet extrait prend le caractère et si sa valeur ascii est supérieure ou égale à
a
, il en soustrait 32, le modifiant ainsi en majuscules. S'il est inférieur àa
,3*j
ignore le réglage. Ensuite, il saute la partie suivante. Cette partie gère le passage des majuscules aux minuscules (je suis sûr qu'elle peut être fusionnée avec la partie suivante; je ne sais pas comment):Le caractère est imprimé (
,
), puis cela vérifie si le caractère est l'une des limites:Il compare fondamentalement le caractère à la valeur ascii de
/
. Si le caractère n'est pas une frontière, le code pousse12
pour qu'il saute l'ajustement de capitalisation la prochaine fois.#
saute le programme de fin:,@
et si la fin de l'entrée est atteinte,~
renvoie l'exécution du code à la@
fin du programme.la source
Rubis:
60515047 caractèresExemple d'exécution:
la source
l==l.swapcase
la même chose quel<?0
(non testé)? Au moins pour l'entrée autorisée pour cette tâche.C # - 110
Un traitement simple basé sur une machine à états finis:
(où
x
est lestring
pour capitaliser)et bien sûr, si vous voulez être ennuyeux (après la mise à jour des spécifications), vous pouvez utiliser
ou, avec tout le passe-partout ennuyeux:
la source
Microsoft (R) Roslyn C# Compiler version 1.2.20906.1 Loading context from 'CSharpInteractive.rsp'. Type "#help" for more information. > "foobar".Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r "Foobar"
Mais si vous vous souciez vraiment du passe-partout ennuyeux, ajoutez 112 caractères.public
etstring[]a
du passepublic
, mais j'ai besoin des arguments, car c'est ce que je traite…Javascript 102
la source
(
…)
autour de la condition ternaire. Plus encore, vous avez pas besoin du deuxième ternaire:function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}
.Forth, 135
La sortie traduite est écrite au
stdout
fur et à mesure de sa lecturestdin
.la source
Befunge-98 (29), C (65)
Puisque la méthode / l'algorithme est à peu près le même, j'inclus les deux versions dans le même article. Les deux s'appuient sur le suivi du fait que le dernier caractère était un symbole ou une lettre, afin de savoir s'il faut minuscule ou non une lettre.
Befunge-98 (29) C (65)la source
05AB1E , 1 octet
Code:
Explication:
Essayez-le en ligne!
la source
Caractères Excel VBA-11
Dans la fenêtre Exécution
?[Proper()]
VBscript
la source
=PROPER(A1)
AWK,
113103 octetsCela fonctionne très bien pour le contenu sur une seule ligne, mais pour une entrée multiligne, quelques bits doivent être ajoutés
Ce serait bien si nous pouvions profiter de la division automatique d'un enregistrement en champs et de la modification de ces champs, mais nous perdrions alors nos séparateurs de champs. :(
Je sais que ce n'est pas la réponse la plus golfique et c'est une question plutôt ancienne, mais je pense que AWK est sous-représenté dans l'espace de réponse de CG :)
(Merci @manatwork pour avoir testé le code, cela devrait fonctionner maintenant :) A également changé le flux mais gardé le nombre d'octets le même, en remplaçant certains
;
par des sauts de ligne.)la source
gawk
,mawk
nioriginal-awk
. (Testé sur Ubuntu.)gawk
d'une boîte RHEL6, puis transcrit dans une boîte Windows. Il pourrait très bien y avoir un problème de transcription. J'essaierai de tester après le travail quand je pourrai faire des tests et publier sur la même machine ... Je pense que je vois le problème, de toute façon.l=0
devrait êtreL=0
{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
.$0
et le1
libellé pour éviter laprint
commande sont des choses auxquelles je n'ai pas pensé. Je devrai garder cela à l'esprit pour le futur golf :)PHP (> v5.4.32) - 25 caractères
<?=ucwords($a,'-. /&#')?>
Explication:
ucwords () est une fonction PHP intégrée
Le premier paramètre
$a
est l'entréeLe deuxième paramètre est le délimètre (caractères non alphabétiques trouvés dans les cas de test)
Le retour / l'écho / l'impression est supposé en raison de l'utilisation de
<?= ?>
Liens:
Code Playground
Fonction PHP ucwords ()
la source
-R
: Essayez-le en ligne! ou 42 en utilisant des arguments: Essayez-le en ligne!T-SQL, 179
Essayez la version SELECT dans SQL Server 2012 ici .
Remplacez "foo" par la chaîne d'entrée. Le nombre de caractères correspond à une chaîne de longueur nulle. Ce code traverse la chaîne à l'aide d'un index, en mettant en majuscule ou en minuscule le caractère à cette position en fonction du caractère précédent.
la source
JavaScript (Node.js) , 70 octets
Essayez-le en ligne!
Je suis sûr que cela peut être joué plus loin.
Remarque :
Prend entrée via
f(string)()
, les derniers sont requis mais n'effectuent rien.la source
Powershell,
7775 octetsCette solution répond pleinement aux règles de la tâche (même exemple ambigu
foo:bar
).Voir également la solution Powershell avec fonction intégrée ToTitleCase de @Iszi.
Script de test expliqué:
Production:
la source
QBasic, 74 octets
Les octets sont comptés dans CP-437 ;
est un octet unique (code de caractère 20).
La méthode de saisie ici est un peu étrange: les caractères sont tapés un à la fois et leur capitalisation est convertie avant d'être affichée. Ainsi, lorsque vous tapez
aGeNT
, il apparaît à l'écran sous la formeAgent
. Frapper Entermet fin au programme.la source
Python 3 , 122 octets
Essayez-le en ligne!
Pas un bon score, mais je voulais l'essayer sans opérations de chaîne intégrées pour changer la casse.
la source
PHP - 23 caractères
Il a besoin de php_mbstring pour fonctionner
la source
mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);
renvoie "Begin / with.type & content", pas "Begin / With.Type & Content".