your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
La description
L'entrée est de deux chaînes s1
et s2
de longueur égale. Ils contiendront chacun uniquement des caractères ASCII imprimables et compteront au moins un caractère. Vous pouvez les saisir sous la forme de deux chaînes, d'un tableau de deux chaînes ou d'une seule chaîne avec s1
et s2
séparées par un onglet ou une nouvelle ligne.
La sortie est la suivante:
Pour chaque personnage
c
danss1
:Si le caractère n'est pas une lettre, sortez-le inchangé.
Sinon, si
c
c'est une lettre:Recherchez le caractère correspondant (celui du même index) dans
s2
.S'il s'agit d'une lettre majuscule, la sortie est en
c
majuscule.S'il s'agit d'une lettre minuscule, sortez
c
en minuscule.Sinon, sortie
c
inchangée.
Faites ensuite la même chose, sauf avec
s1
ets2
commuté.
Essentiellement, toutes les lettres dans s1
lesquelles le caractère correspondant en s2
majuscule doit être en majuscule et toutes les lettres s1
avec une lettre minuscule au même index dans s2
doivent devenir minuscules (et vice versa).
Cas de test
Contribution:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Sortie:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Contribution:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Sortie:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Contribution:
AAAbbb111
Cc2Dd3Ee4
Sortie:
AaABbb111
CC2dd3Ee4
Réponses:
Pyth,
1918 octetsCeci définit une fonction y qui accepte et retourne une liste de chaînes.
Vérifiez tous les cas de test à la fois dans le compilateur / exécuteur Pyth .
Merci à @Jakube d'avoir joué au golf sur 1 octet.
Comment ça marche
la source
CJam, 25 octets
Il s'agit d'une fonction anonyme qui extrait un tableau de chaînes de la pile et en laisse une en retour.
Dans les navigateurs pris en charge, vous pouvez vérifier tous les cas de test à la fois dans l' interpréteur CJam .
Cas de test
Code
Contribution
Sortie
Comment ça marche
la source
C, 126 octets
C'est ma première tentative de golf de code, jamais. Faites-moi savoir si j'ai fait quelque chose de mal.
J'utilise des opérations au niveau du bit pour effectuer la commutation
Golfé:
Non golfé:
modifier: && remplacé par *
la source
SQL (PostGreSQL), 427 octets
Malgré sa taille énorme, cela a fini par être un peu plus petit que ce à quoi je m'attendais. Je n'étais pas sûr que j'allais pouvoir le faire pour être honnête. Je soupçonne qu'il y a encore beaucoup à faire :)
Formaté et commenté
Essai
la source
Julia, 140 octets
Cela crée une fonction qui accepte deux chaînes et renvoie un tuple de chaînes. Rien de particulièrement intelligent ne se passe ici; nous définissons simplement une fonction interne qui implémente directement l'algorithme dans la spécification et l'appelons deux fois.
Non golfé:
la source
JavaScript ES6,
128108 octetsJavaScript
toUpperCase()
ettoLowerCase()
prend beaucoup d'octets maisString.fromCharCode()
est encore plus longla source
s2
n'est pas une lettre et le caractère correspondant danss1
est en majuscule. Dans ce cas,c
ins1
doit être retourné inchangé.Mathematica,
173169155 155 octetsIl s'agit d'une fonction prenant un tableau de deux chaînes, par exemple
{"Foo","bAR"}
et produisant un tableau de deux chaînes. En le compressant spatialement, en réécrivant le schémaf@x
commef[x]
partout où il apparaît, en développant les abréviations de notation (f=0>1
akaFalse
,t=!f
akaTrue
etc=Characters
,u=ToUpperCaseQ
) et en ne remplaçant pas UpperCaseQ [#] par#==u@#
(ce caractère équivaut à sa version majuscule), c'est:Interfaçage: la fin en
&
fait une fonction. Son argument est inséré comme le "#" dans les deux instances de/@ #
. Par exemple,f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
produit la sortie{AaABbb111,CC2dd3Ee4}
.Traitement: Raconté à l'extérieur habituel dans l'ordre:
MapThread[...]
est une liste de deux listes de caractères. StringJoin est appliqué à chacune de ces deux listes de caractères pour produire une liste de deux chaînes, la sortie.MapThread[#[#2]&, ... , 2]
agit sur un tableau de deux listes d'éléments 2 par n. La première liste est un tableau de fonctions 2 par n. La deuxième liste est un tableau de caractères 2 par nCharacters /@ #
, les listes de caractères dans les deux chaînes d'entrée. Il travaille en profondeur 2, c'est-à-dire sur les fonctions et les caractères individuels.Reverse[...]
échange les deux sous-listes de fonctions afin que MapThread applique les fonctions de la deuxième chaîne à la première chaîne et vice versa.{ ... } &
est une fonction anonyme qui est appliquée à chacune des deux chaînes d'entrée.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
divise une chaîne en une liste de caractères, puis remplace chaque caractère par deux listes d'éléments. Dans ces deux listes d'éléments, le premier élément estTrue
si le caractère est une lettre etFalse
sinon, de même, le deuxième élément indique si le caractère est en majuscule.UpperCaseQ[]
ne peut pas retourner vrai s'il ne reçoit pas de lettre./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
remplace ces deux listes d'éléments par des fonctions. (L'expansion des abréviationst
etf
se produit avant toute tentative de correspondance.) Si une liste à deux éléments aFalse
comme premier élément, elle est remplacée par la fonction(# &)
, la fonction d'identité. (Les parenthèses sont nécessaires, sinon la flèche se lie plus étroitement que l'esperluette.) Sinon, la liste des deux éléments commence parTrue
, le caractère était une lettre, et nous sortons les fonctionsToUpperCase
etToLowerCase
correspondant à sa casse. (Vérifier ce dernierFalse
n'est pas nécessaire, en fait{_,_}->ToLowerCase
cela fonctionnerait, attraper tout ce qui n'a pas encore été remplacé, mais ce ne serait pas plus court et plus obscur.)Le seul défi consistait à trouver un moyen succinct de compresser un tableau bidimensionnel de fonctions en un tableau d'arguments.
Edit: Merci à Büttner pour attraper @ Martin couper / coller linebreak antislashs « utile », les
1>0
et1<0
abréviations, et aussi pour la direction de compter la longueur en octets pas de caractères (quels qu'ils sont :-))Edit2: Merci encore à @Martin Büttner pour avoir souligné que la pollution de l'espace de noms global est un golf acceptable, me rappelant une application de fonction de caractère et suggérant de remplacer les deux fonctions majuscules par une abréviation pour l'une et d'utiliser l'une pour émuler l'autre (sauvegarde quatre caractères). (Je pense qu'il l'a déjà fait. :-))
la source
f@g
au lieu def[g]
(tout au long de votre code). Je suis également sûr que vous n'avez pas besoin d'un bloc. Faites-le(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Cela pollue l'espace de noms global, mais cela nous convient parfaitement lorsque vous jouez au golf. De plus, je n'ai pas compté, mais vous pourriez être en mesure d'économiser des octets en stockantToUpperCase
dans une variable (u
disons) et en remplaçantUpperCaseQ@#
par#==u@#
.Python 3, 131 octets
La fonction renvoie des chaînes dans un tuple
la source
Erlang, 157 octets
Zippe les deux chaînes (en fait, les listes) dans une liste de tuple à deux caractères et mappe chaque caractère au cas approprié à l'aide d'une compréhension de liste.
la source
Python 2, 101 octets
Une fonction anonyme qui prend deux chaînes et renvoie les chaînes de sortie dans une liste. J'ai marqué cela comme Python 2 parce que Python 3 ne permet pas
I,I[::-1]
de rester seul à la fin comme ça.la source
Python, 126 octets
La fonction
f
renvoie des chaînes dans un tuplela source
C, 181 octets
Nous avons eu du mal à raccourcir les noms de bibliothèque standard de manière utile (# les définir prend 11 caractères de surcharge). Utilise la récurrence principale et les variables globales x et y comme arguments.
main (<non-zero>, argv) = appeler main (0, {argv [1], argv [2]}) puis imprimer la nouvelle ligne puis appeler main (0, {argv [2], argv [1]})
main (0, {x, y}) = si x est la fin de la chaîne, retournez 0, sinon imprimez la casse correcte du premier caractère de x et appelez main (0, {x + 1, y + 1}).
Exécutez avec les deux chaînes comme arguments.
la source
C -
164153octets - GCCgcc prog.c
./a.out AfdgF a2dfsd
Mettra à jour si je peux obtenir wc -c en panne. Fonctionne très bien en fait
la source
F #, 211 caractères
cela pourrait être mieux ...
la source
Matlab, 140
Non golfé:
Exemple:
la source
C, 164 octets
Implémenter à peu près l'algorithme comme décrit dans le problème. Prend 2 chaînes comme paramètres d'entrée.
Non golfé:
la source
Rubis, 102
Prend les chaînes originales, associe les lettres dans les tableaux. S'ils sont inférieurs / capuchon ou capuchon / inférieur, échangez les deux. Transposez ensuite les tableaux dans notre tableau ordonné.
Cela nécessite une nouvelle ligne de fin en entrée.
la source
Perl 5.10+,
10199 octets96 octets + 3 octets pour les drapeaux de ligne de commande
p00
. Prend une seule chaîne délimitée par des sauts de ligne en entrée:Ou vous pouvez entrer une entrée sur STDIN:
En panne:
la source
Première tentative à Scala, 138 caractères
f est une fonction qui prend les deux chaînes d'entrée et fait le travail, avec une fonction locale, utilisée deux fois, pour changer la casse des chaînes.
Le même code, avec indentation et juste quelques noms plus lisibles:
la source
Gelée , 13 octets
Un lien monadique acceptant et renvoyant des listes de deux "chaînes" (listes de personnages dans Jelly).
Essayez-le en ligne!
la source
Python 2 , 97 octets
Essayez-le en ligne!
la source
Tcl , 194 octets
Essayez-le en ligne!
la source
Haskell ,
10991 octetsMerci à @Laikoni pour 16 octets!
Essayez-le en ligne!
la source