Que se passe-t-il lorsque la CapsLocktouche de votre clavier ne comporte pas d'entaille?
"Ce hPPENS."
Le but de ce programme est d’émuler de manière cohérente les occurrences du clavier où chaque Apression est remplacée par CapsLock. Les A majuscules de la source devraient produire le même effet. Lorsque CapsLockest activé, la capitalisation est inversée.
Cas de test
"The quick brown fox jumps over the lazy dog."
-> "The quick brown fox jumps over the lZY DOG."
"Compilation finished successfully."
-> "CompilTION FINISHED SUCCESSFULLY."
"What happens when the CapsLock key on your keyboard doesn't have a notch in it?"
-> "WhT Hppens when the CPSlOCK KEY ON YOUR KEYBOrd doesn't hVE notch in it?"
"The end of the institution, maintenance, and administration of government, is to secure the existence of the body politic, to protect it, and to furnish the individuals who compose it with the power of enjoying in safety and tranquillity their natural rights, and the blessings of life: and whenever these great objects are not obtained, the people have a right to alter the government, and to take measures necessary for their safety, prosperity and happiness."
-> "The end of the institution, mINTENnce, ND dministrTION OF GOVERNMENT, IS TO SECURE THE EXISTENCE OF THE BODY POLITIC, TO PROTECT IT, nd to furnish the individuLS WHO COMPOSE IT WITH THE POWER OF ENJOYING IN Sfety ND TRnquillity their nTURl rights, ND THE BLESSINGS OF LIFE: nd whenever these greT OBJECTS re not obtINED, THE PEOPLE Hve RIGHT TO lter the government, ND TO Tke meSURES NECESSry for their sFETY, PROSPERITY nd hPPINESS."
"aAaaaaAaaaAAaAa"
-> "" (Without the notch, no one can hear you scream)
"CapsLock locks cAPSlOCK"
-> "CPSlOCK LOCKS CPSlOCK"
"wHAT IF cAPSlOCK IS ALREADY ON?"
-> "wHt if CPSlOCK IS lreDY ON?"
Le critère gagnant est, comme d'habitude, la taille du code source du programme soumis.
teSTateSTateSTateST
Réponses:
AutoHotKey , 7 octets
// Est-ce valide? Cela fait vraiment ce que l'OP veut - remplacer apar CapsLock (vk14).
Exécutez ce programme et tapez l'entrée à partir du clavier.
la source
V , 9 octets
Essayez-le en ligne!
Hexdump:
Explication:
la source
Vim, 16 octets
Suppose que l'entrée est sur une seule ligne
Explication
la source
\c
n'importe où dans une recherche regex permet l'insensibilité à la casseg~$
pouvoir fonctionner? Parce que pour moi, cela n'inverse que les cas jusqu'à la fin de la ligne, pas le fichier entier, donc cela ne fonctionne pas vraiment pour les fichiers multilignes pour moi.g~vG
ouvG~
.C, 72 octets
Merci à @Ton Hospel d’avoir aidé à économiser 16 octets!
Essayez-le en ligne!
la source
t
été à la0/32
place de pair / impair (xor t avec 32 pour chaquea
) puis de xor lettres directement avect
a
« s6305%c
est 0 sic
est 13.Décortiquer , 11 octets
Essayez-le en ligne!
Explication
J'utilise la surcharge un peu obscure de
Γ
calledlistNF
, qui construit des fonctions récursives qui agissent sur des listes. Il correspond au modèle Haskell suivant:L'idée est que
listNF
prend une fonction d'assistancef
et retourne une nouvelle fonctiong
, qui prend une liste. La fonctionf
prend une fonction, qui sera toujoursg
, ainsi que la têtex
et la queuexs
de la liste, et fait quelque chose avec elles. Dans notre application,f
appelle deg
manière récursivexs
. Le programme est interprété comme ceci:la source
Ḟ·+m\ṁx'Ax'a
. Pouvons-nous avoir une explication? Je ne trouve aucune information sur ce quiΓ
fonctionne exactement et cela semble être une bonne chance d'apprendre.Γ
est un peu difficile à expliquer, j'espère que vous pourrez la comprendre.Γ
semble être lente en général. Si vous n'êtes pas familier avec Husk, un programme est interprété en parcourant toutes les structures possibles du programme (essentiellement les emplacements possibles des parenthèses) et toutes les surcharges de chaque fonction intégrée, et en choisissant la première où le résultat est correct. tapé. L’interprète est assez intelligent pour rejeter certaines possibilités très tôt, mais il semble que la version récursive deΓ
gâchis puisse gâcher cette étape et l’obliger à parcourir de nombreux choix.Γ
en détail .Retina ,
332117 octetsEssayez-le en ligne
Explication:
-12 octets grâce à Martin
-4 octets grâce à Leo
la source
iT`aAlL`__Ll`a[^a]*a?
aussi fonctionne pour 21 octets.C # , 121 octets
** Mise à jour (merci à @John & @aloisdg) **
C # , 69 octets
la source
new[] { 'a', 'A' }
pour'a', 'A'
JavaScript (ES6),
93888482 octets(enregistré 5 octets grâce à @Shaggy, 4 octets grâce à @ user81655 et 2 octets grâce à @ l4m2.)
Cas de test:
Afficher l'extrait de code
la source
['to${c<'a'?'Low':'Upp'}erCase']
devrait vous faire économiser quelques octets, en remplaçant les guillemets simples par des backticks.^1
d'avoiru
la parité peut vous permettre de initialisez plus court:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
qui est plus courte:a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
opérateur comme ça. Toujours plus à apprendre!R , 92 octets
Merci @ Giuseppe pour avoir corrigé la réponse.
Explication
Essayez-le en ligne!
la source
toupper
), ce qui est une exigence.c(F,T)
, bien que @Broadwell ait raison; on dirait que ça va êtrechartr("a-zA-Z","A-Za-z",v)[w]
plutôt quetoupper
PowerShell Core , 105 octets
Essayez-le en ligne!
Quoi sans opérateur ternaire réel et sans alias par défaut pour l'impression à l'écran, ce n'est pas si court.
% t*y
se développe à| ForEach-Object -Method ToCharArray
équiv. de"$args".ToCharArray()
Write-Host -n
est pour le paramètre-NoNewLine
"$_"
retourne le[char]
type à[string]
(les caractères n'ont pas de majuscules / minuscules en .Net)|% *per
fait le même raccourci d'appel de méthode que précédemment, mais pour.ToUpper()
, pareil avec.ToLower()
($a,$b)[boolean test]
abusé en tant que faux opérateur ternaire!!$c
force-castts jusqu'à[bool]
ici, il commence indéfini$null
pour le forcer à exister sous la forme "maj maj: $ false".la source
|% t*y
une astuce que je dois retenir. Plus court que[char[]]
, que j'utilise beaucoup. Je dirais presque que cela devrait aller sur le fil Astuces.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. merci pour un|% *ethod
opérateur!Perl 5
-p
,313029 octets-1 octet grâce à @nwellnhof
-1 octet grâce à @ikegami
Essayez-le en ligne!
la source
s/a(.*?)(a|$)/uc$1/egi
(22 octets)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
un octet est plus court.a([^a]*)a?
est plus court quea(.*?)(a|$)
Python, 63 octets
Une autre solution Python fonctionne en Python 2 et 3. Cela prend beaucoup de temps pour toutes les entrées, sauf les petites.
la source
6502 routine de code machine (C64), 51 octets
Attend un pointeur sur une chaîne d'entrée terminée par 0 dans
$fc/$fd
, les sorties à l'écran.Démontage commenté
Exemple de programme assembleur utilisant la routine:
Démo en ligne
Code en syntaxe ca65 :
la source
Java 8,
11910898 octets-11 octets grâce à @ OlivierGrégoire .
-10 octets grâce à @Nevay .
Explication:
Essayez-le en ligne.
la source
s->{int z=0,d;for(int c:s)if((d=c&95)==65)z^=1;else System.out.printf("%c",z<1|d<66|d>90?c:c<91?c|32:c&95);}
s->{int f=0,t;for(int c:s)if((t=c&95)==65)f^=1;else System.out.printf("%c",f<1|t<66|t>90?c:c^32);}
C,
167168158131 octetsMerci à @Martin Ender pour la révision du code: j'ai changé le traitement du flux pour le traitement des chaînes afin de faciliter la réutilisation. Merci également à @RiaD et @ceilingcat pour leurs suggestions.
Essayez-le en ligne!
Comment ça marche?
Remarques
s[][]
C'est là que se passe la magie:[][0]
c'est la fonction de comparaison et[][1]
c'est la fonction de transformation associée pour chaque état.!
est appliqué à la fonction de comparaison pour la forcer dans la plage [0,1].la source
d
ce type car cela signifie que votre fonction n'est pas réutilisable . Un simpled=0;
devrait le réparer.void f(){int c,d=0;[...]
. Dans tous les cas, le flux meurt, une édition est donc en ordre!Haskell , 92 octets
Essayez-le en ligne!
Explication
Premièrement, nous déclarons
g
être la fonction qui mappe les minuscules en majuscules et les majuscules en minuscules. C’est en fait la majorité de notre décompte. Ensuite, nous définissons la fonctionf
. Si l'entrée àf
est de la forme quea:b
nous faisonsa
etA
correspondons au premier motif et nous appliquons doncf
à l'entrée avec sa casse inversée. Sinon, nous allons de l'a
avant et nous nous adressonsf
àb
.la source
Wolfram Language (Mathematica) , 70 octets
Essayez-le en ligne!
Prend l'entrée et la sortie sous forme de liste de caractères. Pour plus de commodité, j'ai ajouté du code dans le pied de page pour convertir ceci à partir de et retour en chaîne.
Comment ça fonctionne
La partie
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
est standard: on trouve la premièreA
(majuscule ou minuscule), le cas inverse de celui-ci vient aprèsA
, et on répète jusqu'à ce qu'il n'y en ait plusA
.La partie intéressante est la façon dont nous inversons le cas: la fonction
ToUpperCase@# + ToLowerCase@# - #&
. Nous additionnons la version en majuscule de l'entrée et la version en minuscule de l'entrée, puis soustrayons l'entrée réelle. Par exemple, étant donné la liste,{"I","n","P","u","T"}
ceci calculequels threads sur les listes comme
et bien que Mathematica ne dispose d' aucun moyen particulier d'ajouter deux chaînes, il est assez intelligent pour simplifier
a+b-a
àb
pour toutes les valeurs dea
etb
, y compris les valeurs de chaîne, donc ce à simplifier{"i","N","p","U","t"}
.la source
Ruby ,
4241 octetsEssayez-le en ligne!
Un lambda accepte une chaîne, la mute en place et la renvoie. L'astuce ici est que
sub
renvoie la chaîne (une valeur de vérité) si une substitution a été effectuée, et retournenil
sinon. L'existence deswapcase
est assez pratique aussi.-1 octet: Remplacer la logique booléenne par un opérateur ternaire, grâce à Asone Tuhid
la source
PHP
10199 octetsCourez comme ça:
Ungolfed:
Cela parcourt simplement la chaîne avec une boucle for, et à chaque itération, il vérifie si la lettre actuelle est
a
, le cas échéant, puis retourne la casse de la chaîne entière (méthode à partir de ici ), et sinon, affiche la lettre actuelle.la source
$argn
,$argv
,$_GET
). Donc, pour le moment, ce n'est pas une soumission correcte. Le retour doit êtreecho
ed oureturn
ed (autorisé uniquement pour les fonctions ofc).Gelée , 14 octets
Essayez-le en ligne!
Programme complet.
Explication:
la source
MATL ,
23 à20 octetsEssayez-le en ligne!
Explication:
Réponse plus ancienne (23 octets):
"H @ 'aAm? ~ XHx} @ w ~? Yo] & h
Autres méthodes que j'ai essayées:
la source
Coque , 15 octets
Essayez-le en ligne!
Explication
la source
05AB1E , 12 octets
Essayez-le en ligne!
Explication
la source
Japt v2.0a0, 16 octets
L'essayer
Explication
la source
SNOBOL4 (CSNOBOL4) ,
14192 octetsEssayez-le en ligne!
Suppose une seule ligne d’entrée.
49 octets sauvés par @ninjalj !
Line
S
fait tout le travail, expliqué ci-dessous:la source
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 octets
Essayez-le en ligne!
Comme Fortran n’a pas "avancé" d’outils pour gérer les chaînes, j’ai imaginé ce petit monstre.
Indenté et commenté:
la source
Stax , 12 octets
Exécuter et déboguer en ligne
Il se scinde sur une expression rationnelle, puis bascule alternativement en majuscule et en majuscule. Voici le même programme, non emballé, non-golfé et commenté.
Exécuter celui-ci
la source
Javascript (ES6),
8079 octets(En partie sur la base de cette réponse de Rick Hitchcock. Publication séparée car je n'ai pas assez de réputation pour commenter.)
(1 octet enregistré grâce au message de @ l4m2 ici .)
la source
Sale , 55 octets
Essayez-le en ligne!
Peut probablement être environ un tiers plus court.
J'écrirai une explication et jouerai un peu plus quand je serai sur un bureau.
la source
Python 3,
7872 octetsla source
m[1]
à la place dem.group(1)
sur Python 3.6+.