Avec deux chaînes de lettres, transférez le modèle de capitalisation de chaque chaîne sur l’autre. Le moins d'octets gagne.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Les deux chaînes seront de longueur égale et non vide, avec uniquement des lettres
a..z
etA..Z
. - Vous pouvez sortir les deux chaînes résultantes dans l’un ou l’autre ordre par rapport aux entrées.
- Vous pouvez représenter une paire de chaînes en tant que chaîne unique avec un séparateur à caractère unique non lettre pour entrée et / ou sortie.
- Vous pouvez représenter une chaîne sous la forme d'une liste de caractères ou d'une chaîne à un caractère, mais pas sous la forme d'une séquence de valeurs de points de code, à moins qu'il ne s'agisse simplement de chaînes dans votre langue.
- Votre entrée et votre sortie peuvent représenter des chaînes différemment.
Cas de test:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
fonctionne bien; etarray[i%n]+=...;i++;
fonctionne bien aussi, mais utiliseri++
ou++i
avec un modulo et+=
ajouter une ligne à un tableau ne fonctionne pas. Voici un exemple de Java 10 TIO pour voir le problème. S'agit-il d'un bogue (ou d'une fonctionnalité: S) dans le JDK Java 10 ou dans le compilateur Java 10 TIO?String
pourvar
.C (gcc) ,
86585553 53 octetsEssayez-le en ligne!
la source
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 bytes)Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
la source
APL (Dyalog Classic) ,
13 à12 octetsEssayez-le en ligne!
entrée et sortie est une matrice de 2 × N caractères
⎕a
est l'alphabet anglais majuscule'ABC...Z'
∊∘⎕a
retourne une matrice booléenne indiquant les lettres majuscules de l'entrée819⌶
convertit son argument de droite en majuscule ou en minuscule en fonction de son argument de gauche booléen ("819" est leetpeak pour "BIG")819⌶¨⍨
fait cela pour chaque caractère (¨
), swapping (⍨
) les arguments⊖
signifie inverser verticalement; l'un⊖
agit comme l'argument de gauche819⌶
et l'autre est l'action finalela source
"819" is leetspeak for "BIG"
... Sérieusement? C'est la véritable explication de pourquoi c'est 819? 0_oPyth , 10 octets
Essayez-le ici!
Explications et astuces Pyth utilisées
rVV_mmrIk1
- Programme complet. L'entrée provient de STDIN sous forme de liste de deux chaînes et la sortie est écrite dans STDOUT sous forme de liste de deux listes de caractères.mm
- Pour chaque caractère dans chacune des chaînes:Ik
- Vérifiez si elle est invariante sous ...r...1
- ... Conversion en majuscule. Rend Vrai pour les majuscules et Faux pour les minuscules._
- Inverser cette liste.VV
- Et double-vectoriser la fonction suivante sur les deux listes:r
- Convertir en majuscule si la valeur estTrue
(aka1
), sinon convertir en minuscule.Cette soumission abuse du fait que
r0
etr1
sont les fonctions minuscules et majuscules dans Pyth, et nous utilisons des valeurs de vérité (les valeurs obtenues en vérifiant si chaque caractère est majuscule, inversé) donnantTrue
pour des majuscules etFalse
des minuscules. Le fait que les booléens soient des sous-classes d'entiers en Python est très pratique pour l'approche utilisée par cette réponse. Le portage des approches de Dennis et Jelly de Jonathan a abouti à plus de 18 octets. Je suis donc assez satisfait des astuces spécifiques à Pyth utilisées ici.la source
MATL , 11 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Haskell , 78 octets
Essayez-le en ligne!
la source
isUpper x
peut êtrex<'a'
.J ,
36 3127 octets-9 octets grâce à FrownyFrog!
Essayez-le en ligne!
La solution précédente était:
J ,
3631 octets-5 octets grâce à FrownyFrog!
Essayez-le en ligne!
Comment ça marche:
la source
[:
peut être 0 et le(22 b.)
peut êtreXOR
.&.(3&u:)
enregistre 1 octet."
et$
? Merci!,:
, il y a 2 rangées sur le côté gauche. Nous avons besoin de"(1)
mais"$
travaille aussi, parce que cela représente"1 _
.$ b.0
donne le rang de $ (monadique, gauche dyadique, droite dyadique).R ,
118 94 7572 octetsEssayez-le en ligne!
Il doit y avoir une manière beaucoup plus golfeuse.-43 octets grâce à Giuseppe qui m'a indiqué la solution MATL de Luis Mendo. Le lien TIO contient une solution de fonction pour le même nombre d'octets.Bonus: La sortie est un vecteur nommé dont les noms sont les chaînes d'entrée d'origine!
la source
a<-
puisque vous n'utiliseza
nulle part ailleurs.code machine x86-64, 14 octets
Appelable à partir de C (convention d'appel SysV x86-64) avec ce prototype:
Une version de longueur explicite dont la longueur
rcx
est égale à la même taille.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
Cela utilise le même algorithme d'échange de bits que les réponses C et Java: si les deux lettres sont identiques, aucune des deux ne doit être modifiée. S'ils sont dans le cas contraire, ils doivent tous les deux changer.
Utilisez XOR pour différencier le bit de casse des deux chaînes.
mask = (a XOR b) AND 0x20
est 0 pour identique ou 0x20 pour différer.a ^= mask; b ^= mask
caseflip les deux lettres ssi elles étaient des cas opposés. (Parce que les codes de lettres ASCII pour les lettres supérieure et inférieure ne diffèrent que par le bit 5.)Liste NASM (de
nasm -felf64 -l/dev/stdout
). Utilisez-lecut -b 26- <casexchg.lst >casexchg.lst
pour transformer cela en quelque chose que vous pouvez assembler.L'
loop
instruction lente est également 2 octets, identique à un courtjcc
.scasb
reste le meilleur moyen d’incrémenterrdi
avec une instruction à un octet. Je suppose que nous pourrionsxor al, [rdi]
/stosb
. Ce serait la même taille mais probablement plus rapide pour leloop
cas (la mémoire src + store est moins chère que la mémoire dst + reload). Et définirait toujours ZF de manière appropriée pour le cas de longueur implicite!Essayez-le en ligne! avec un _start qui l'appelle sur argv [1], argv [2] et utilise sys_write sur le résultat
la source
k , 14 octets
Essayez-le en ligne! Entrée / sortie est une liste de deux chaînes.
la source
Python 3 , 83 octets
Essayez-le en ligne!
-3 octets grâce à Mr. Xcoder
-3 octets grâce à Chas Brown
la source
Haskell , 78 octets
Essayez-le en ligne!
la source
QBasic, 133 octets
Prend les deux chaînes séparées par des virgules et génère les résultats séparés par une nouvelle ligne. Utilise l'algorithme bidouiller de la réponse de Dennis's Jelly . En dehors de cela, l'astuce principale du golf ici est que la première chaîne de résultat est imprimée directement, un caractère à la fois, ce qui est un peu plus court que d'enregistrer les deux chaînes de résultat dans des variables et de les imprimer en dehors de la boucle.
la source
JavaScript,
777473 octetsAfficher l'extrait de code
Prend un tableau de tableaux de caractères, génère un tableau de tableaux de caractères.
-1 octet ( @Arnauld ):
c>'Z'
→c>{}
la source
c>{}
.Retina , 75 octets
Essayez-le en ligne! Explication: Les nouvelles lignes sont utilisées comme marqueurs pour déterminer la quantité de chaîne traitée. La regex essaie de faire correspondre les lettres avec des lettres majuscules ou échoue avec n'importe quel caractère. Si une lettre majuscule était appariée, l'autre caractère est mis en majuscule, sinon il est mis en minuscule et vice-versa, tandis que les nouvelles lignes sont passées au caractère suivant.
la source
Python 3 ,
7675 octetsEssayez-le en ligne!
Affiche le résultat sous la forme d'une chaîne avec un séparateur à un caractère.
Merci à Jonathon Allan pour 1 octet.
la source
(y>'Z')*32
->ord(y)&32
Assembly (nasm, x64, Linux) , 25 octets (source de 123 octets)
Hex octets:
Le point d'entrée de la fonction est à
a
, avec les chaînes passées à l'aide deRDI
etRSI
.Essayez-le en ligne!
la source
and al,32
est seulement 2 octets, en utilisant le codage spécial AL, imm8 que la plupart des instructions ALU ont. Vous pourriez avoir besoin de la longueur de chaîne dans RCX et l'utiliserloop
. J'allais dire que tu devraistest ah,ah
parce que que c'est plus efficace que d'or
avoir la même longueur, mais c'est plus long dans la source asm, donc le vieil idiot croustillant a en fait du mérite pour le golf avec le code source asm: PGelée , 13 octets
Essayez-le en ligne!
Aussi 13:
=ŒuṚ×32ạŒlO$Ọ
(ou=ŒuṚæ«5ạŒlO$Ọ
)la source
charbon , 17 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Prend l'entrée comme un tableau de deux chaînes. Explication:
la source
F #, 120 octets
Bugger.
Essayez-le en ligne!
La fonction
g
prend les deux chaînes en tant que paramètres.Seq.fold2
applique une fonction avec un accumulateur (a
) à chaque élément (x
ety
) dans les chaînes. Initialement, ila
s'agit d'une chaîne vide, qui y ajoute le caractère converti à chaque itération.b
est la fonction principale. Il convertit d'abordf
par rapport às
, puis convertits
par rapport àf
. Il retourne ensuite un tuple avec les deux valeurs.la source
Prolog (SWI) , 121 octets
Essayez-le en ligne!
la source
Ruby ,
7469 octetsEssayez-le en ligne!
L'entrée et la sortie sont des tableaux de caractères, de sorte que le pied de page effectue des transformations en arrière à partir de chaînes.
Je ne sais pas encore s'il s'agit d'une bonne approche du problème, mais ce défi ressemble certainement à un bon scénario d'utilisation pour la
swapcase
méthode.la source
PHP 4.1.2 , 40 octets
Remplacez la paire de guillemets par l'octet A0 (dans ISO-8859-1 ou Windows-1252, il s'agit de NBSP) pour obtenir le nombre d'octets affiché, puis exécutez-la à partir d'un navigateur Web (ou de la ligne de commande), en fournissant les chaînes suivantes: les arguments de la chaîne de requête (ou les variables d'environnement)
a
etb
.Dans cette version de PHP, register_globals est activé par défaut, les chaînes seront automatiquement affectées aux variables
$a
et$b
. Augmentez la valeur2e5
(200000) si nécessaire.PHP 7.1+, 58 octets
Exécuter sur la ligne de commande, en utilisant
php -r 'code here' string1 string2
:La valeur
3e5
(300000) est choisie pour dépasser (MAX_ARG_STRLEN * 2 + 1) sur la plupart des systèmes Linux (en particulier, x86 et les autres architectures pour lesquelles PAGE_SIZE est 4096 et MAX_ARG_STRLEN est donc 131072), afin d'éviter tout problème avec une chaîne d'entrée possible. Augmenter si nécessaire.Essayez-le en ligne!
la source
Stax , 10 octets
Exécuter et déboguer
Voici une représentation non golfée du même programme pour montrer comment cela fonctionne.
Exécuter celui-ci
la source
Crystal , 108 octets
Essayez-le en ligne!
Comment ça marche?
la source