¿Qué sucede cuando la CapsLocktecla de su teclado no tiene una muesca?
"Esto pasa".
El objetivo de este programa es emular constantemente las fallas del teclado donde Ase reemplaza cada pulsación CapsLock. Las 'A' mayúsculas de la fuente deberían producir el mismo efecto. Cuando CapsLockestá habilitado, se invierte la capitalización.
Casos de prueba
"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?"
El criterio ganador es, como de costumbre, el tamaño del código fuente del programa enviado.
teSTateSTateSTateST
Respuestas:
AutoHotKey , 7 bytes
// ¿Es esto válido? Esto realmente hace lo que OP quiere: reemplazar apor CapsLock (vk14).
Ejecute este programa y escriba la entrada desde el teclado.
fuente
V , 9 bytes
Pruébalo en línea!
Hexdump:
Explicación:
fuente
Vim, 16 bytes
Asume que la entrada está en una sola línea
Explicación
fuente
\c
en cualquier parte de una búsqueda de expresiones regulares permite la insensibilidad a mayúsculas y minúsculasg~$
trabajar? Porque para mí solo invierte mayúsculas y minúsculas hasta el final de la línea, no todo el archivo, por lo que esto realmente no funciona para archivos multilínea para mí.g~vG
ovG~
.C, 72 bytes
¡Gracias a @Ton Hospel por ayudar a ahorrar 16 bytes!
Pruébalo en línea!
fuente
t
ser0/32
en lugar de par / impar (XOR con 32 t por cadaa
) y luego las cartas directamente con xort
a
's6305%c
es 0 sic
es 13.Casco , 11 bytes
Pruébalo en línea!
Explicación
Estoy usando la sobrecarga un tanto oscura de
Γ
llamadalistNF
, que construye funciones recursivas que operan en listas. Corresponde al siguiente patrón de Haskell:La idea es que
listNF
toma una función auxiliarf
y devuelve una nueva funcióng
, que toma una lista. La funciónf
toma una función, que siempre serág
, y la cabezax
y la colaxs
de la lista, y hace algo con ellas. En nuestra aplicación,f
llamag
recursivamentexs
. El programa se interpreta así:fuente
Ḟ·+m\ṁx'Ax'a
. ¿Podríamos obtener una explicación? No puedo encontrar ninguna información sobre lo queΓ
hace exactamente y esta parece una buena oportunidad para aprender.Γ
es un poco difícil de explicar, espero que puedas entenderla.Γ
parece ser lenta en general. Si no está familiarizado con Husk, un programa se interpreta al recorrer todas las estructuras posibles del programa (esencialmente las posibles ubicaciones de paréntesis) y todas las sobrecargas de cada incorporado, y elegir la primera donde el resultado es bueno. mecanografiado. El intérprete es lo suficientemente inteligente como para rechazar algunas posibilidades antes, pero parece que la versión recursiva deΓ
puede interferir con este paso y obligarlo a recorrer muchas opciones.Γ
con cierto detalle .Retina ,
332117 bytesPruébalo en línea
Explicación:
-12 bytes gracias a Martin
-4 bytes gracias a Leo
fuente
iT`aAlL`__Ll`a[^a]*a?
también funciona para 21 bytes.C # , 121 bytes
** Actualización (gracias a @John & @aloisdg) **
C # , 69 bytes
fuente
new[] { 'a', 'A' }
a'a', 'A'
JavaScript (ES6),
93888482 bytes(ahorró 5 bytes gracias a @Shaggy, 4 bytes gracias a @ user81655 y 2 bytes gracias a @ l4m2.)
Casos de prueba:
Mostrar fragmento de código
fuente
['to${c<'a'?'Low':'Upp'}erCase']
debería ahorrarle unos pocos bytes, reemplazando las comillas simples con backticks.^1
de teneru
la paridad puede permitirle inicializarlo máss=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
que es más corta:a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
operador así. ¡Siempre más para aprender!R , 92 bytes
Gracias a @Giuseppe por arreglar la respuesta.
Explicación
Pruébalo en línea!
fuente
toupper
), lo cual es un requisito.c(F,T)
, aunque @Broadwell tiene razón; parece que va a ser un enchartr("a-zA-Z","A-Za-z",v)[w]
lugar detoupper
PowerShell Core , 105 bytes
Pruébalo en línea!
Sin un operador ternario real y sin un alias predeterminado para imprimir en pantalla, no es tan corto.
% t*y
se expande a| ForEach-Object -Method ToCharArray
equiv. de"$args".ToCharArray()
Write-Host -n
es para el parámetro-NoNewLine
"$_"
vuelve el[char]
tipo a[string]
(los caracteres no tienen mayúsculas / minúsculas en .Net)|% *per
hace el mismo método de acceso directo de llamada que antes, pero para.ToUpper()
, lo mismo con.ToLower()
($a,$b)[boolean test]
abusado como operador ternario falso!!$c
forza[bool]
aquí hasta que comienza indefinido,$null
por lo que se lo obliga a existir como "bloqueo de mayúsculas: $ falso".fuente
|% t*y
un buen truco que tendré que recordar. Más corto que[char[]]
, que uso mucho. Casi diría que debería ir al hilo de Consejos.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. gracias por un|% *ethod
operador!Perl 5
-p
,313029 bytes-1 byte gracias a @nwellnhof
-1 byte gracias a @ikegami
Pruébalo en línea!
fuente
s/a(.*?)(a|$)/uc$1/egi
(22 bytes)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
es un byte más corto.a([^a]*)a?
es más corto quea(.*?)(a|$)
Python, 63 bytes
Otra solución de Python, funciona en Python 2 y 3. Toma mucho tiempo para todas las entradas menos las pequeñas.
fuente
6502 rutina de código de máquina (C64), 51 bytes
Espera un puntero a una cadena de entrada terminada en 0
$fc/$fd
, las salidas a la pantalla.Desmontaje comentado
Ejemplo de programa ensamblador utilizando la rutina:
Demostración en línea
Código en sintaxis ca65 :
fuente
Java 8,
11910898 bytes-11 bytes gracias a @ OlivierGrégoire .
-10 bytes gracias a @Nevay .
Explicación:
Pruébalo en línea.
fuente
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 bytesGracias por @Martin Ender por la revisión del código: he cambiado el procesamiento de flujo por el procesamiento de cadenas para ayudar con la reutilización. También muchas gracias a @RiaD y @ceilingcat por sus sugerencias.
Pruébalo en línea!
¿Como funciona?
Notas
s[][]
es donde ocurre la magia:[][0]
es la función de comparación y[][1]
es la función de transformación relacionada para cada estado.!
se aplica a la función de comparación para forzarla al rango [0,1].fuente
d
esta manera porque significa que su función no es reutilizable . Un simpled=0;
debería arreglarlo.void f(){int c,d=0;[...]
. En cualquier caso, la secuencia muere, por lo que es necesario editar.Haskell , 92 bytes
Pruébalo en línea!
Explicación
Primero declaramos
g
ser la función que asigna minúsculas a mayúsculas y mayúsculas a minúsculas. Esta es en realidad la mayoría de nuestro bytecount. Luego definimos la funciónf
. Si la entrada af
es de la formaa:b
que hacemosa
yA
coincide con el primer patrón y, por lo tanto, aplicamosf
a la entrada con su caso invertido. De lo contrario nos movemosa
en el frente y lo aplicamosf
ab
.fuente
Wolfram Language (Mathematica) , 70 bytes
Pruébalo en línea!
Toma entrada y salida como una lista de caracteres. Por conveniencia, he agregado código en el pie de página para convertir esto de una cadena a otra.
Cómo funciona
La parte
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
es estándar: encontramos la primeraA
(mayúscula o minúscula), el caso inverso que viene después de laA
, y repetimos hasta que no se encuentren másA
.La parte interesante es cómo invertimos mayúsculas y minúsculas: la función
ToUpperCase@# + ToLowerCase@# - #&
. Sumamos la versión en mayúsculas de la entrada y la versión en minúsculas de la entrada, luego restamos la entrada real. Por ejemplo, dada la lista{"I","n","P","u","T"}
esto calculaque subprocesos en listas como
y aunque Mathematica no tiene ninguna forma particular de la adición de dos cuerdas, que es lo suficientemente inteligente como para simplificar
a+b-a
ab
para cualquier valor dea
yb
, entre ellos los valores de cadena, así que esto simplifica a{"i","N","p","U","t"}
.fuente
Ruby ,
4241 bytesPruébalo en línea!
Una lambda que acepta una cadena, muta la cadena en su lugar y la devuelve. El truco aquí es que
sub
devuelve la cadena (un valor verdadero) si se realizó una sustitución, y devuelve lonil
contrario. La existencia deswapcase
es bastante útil también.-1 byte: Reemplace la lógica booleana con un operador ternario, gracias a Asone Tuhid
fuente
PHP
10199 bytesCorre así:
Sin golf:
Esto solo recorre la cadena con un bucle for, y en cada iteración comprueba si la letra actual es
a
, si es así, voltea el caso de la cadena completa (método desde aquí ), y si no, imprime la letra actual.fuente
$argn
,$argv
,$_GET
). Por el momento, esta no es una presentación correcta. La devolución debe serecho
ed oreturn
ed (solo se permite para funciones de c).Jalea , 14 bytes
Pruébalo en línea!
Programa completo
Explicación:
fuente
MATL ,
2320 bytesPruébalo en línea!
Explicación:
Respuesta anterior (23 bytes):
"H @ 'aA'm? ~ XHx} @ w ~? Yo] & h
Otros métodos que probé:
fuente
Casco , 15 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 12 bytes
Pruébalo en línea!
Explicación
fuente
Japt v2.0a0, 16 bytes
Intentalo
Explicación
fuente
SNOBOL4 (CSNOBOL4) ,
14192 bytesPruébalo en línea!
Asume una sola línea de entrada.
¡La friolera de 49 bytes guardada por @ninjalj !
Line
S
hace todo el trabajo, explicado a continuación:fuente
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 bytes
Pruébalo en línea!
Como Fortran no tiene herramientas "avanzadas" para lidiar con cuerdas, se me ocurrió este pequeño monstruo.
Sangrado y comentado:
fuente
Stax , 12 bytes
Ejecútelo y depúrelo en línea
Se divide en una expresión regular, y luego alterna alternativamente mayúsculas y minúsculas. Aquí está el mismo programa, desempaquetado, sin golf y comentado.
Ejecute este
fuente
Javascript (ES6),
8079 bytes(En parte basado en esta respuesta de Rick Hitchcock. Publicar como una respuesta separada porque no tengo suficiente reputación para comentar).
(Guardado 1 byte gracias a la publicación de @ l4m2 aquí ).
fuente
Sucio , 55 bytes
Pruébalo en línea!
Probablemente puede ser aproximadamente un tercio más corto.
Escribiré una explicación y jugaré un poco más cuando esté en una computadora de escritorio.
fuente
Python 3,
7872 bytesfuente
m[1]
en lugar dem.group(1)
en Python 3.6+.