O que acontece quando a CapsLocktecla do teclado não possui um entalhe?
"Isso hPPENS."
O objetivo deste programa é emular consistentemente as falhas do teclado onde cada Apressionamento é substituído CapsLock. A's maiúsculos da fonte devem produzir o mesmo efeito. Quando CapsLockestá ativado, a capitalização é revertida.
Casos de teste
"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?"
O critério vencedor é, como sempre, o tamanho do código fonte do programa enviado.
teSTateSTateSTateST
Respostas:
AutoHotKey , 7 bytes
// Isso é válido? Isso realmente faz o que o OP deseja - substitua apor CapsLock (vk14).
Execute este programa e digite a entrada do teclado.
fonte
V , 9 bytes
Experimente online!
Hexdump:
Explicação:
fonte
Vim, 16 bytes
Assume que a entrada está em uma única linha
Explicação
fonte
\c
qualquer lugar em um regex-de pesquisa permite caso insensibilidadeg~$
funcionar? Porque, para mim, apenas inverte o caso até o final da linha, não o arquivo inteiro, então isso realmente não funciona para arquivos com várias linhas para mim.g~vG
ouvG~
.C, 72 bytes
Agradecemos a @Ton Hospel por ajudar a salvar 16 bytes!
Experimente online!
fonte
t
ser0/32
em vez de par / ímpar (xor t com 32 para cadaa
) e, em seguida, letras XOR diretamente comt
a
's6305%c
é 0 sec
é 13.Casca , 11 bytes
Experimente online!
Explicação
Estou usando a sobrecarga um tanto obscura de
Γ
chamadalistNF
, que constrói funções recursivas que operam em listas. Corresponde ao seguinte padrão Haskell:A idéia é que
listNF
pega uma função auxiliarf
e retorna uma nova funçãog
, que pega uma lista. A funçãof
pega uma função, que sempre serág
, e o cabeçalhox
e o finalxs
da lista, e faz algo com eles. Em nossa aplicação,f
chamag
recursivamentexs
. O programa é interpretado assim:fonte
Ḟ·+m\ṁx'Ax'a
. Poderíamos obter uma explicação? Não consigo encontrar nenhuma informação sobre o queΓ
faz exatamente e isso parece ser uma boa chance de aprender.Γ
é um pouco difícil de explicar, espero que você possa entendê-lo.Γ
parece ser lenta em geral. Se você não está familiarizado com o Husk, um programa é interpretado percorrendo todas as estruturas possíveis do programa (essencialmente os possíveis posicionamentos entre parênteses) e todas as sobrecargas de cada built-in, e escolhendo a primeira onde o resultado é bom. digitado. O intérprete é inteligente o suficiente para rejeitar algumas possibilidades antecipadamente, mas parece que a versão recursivaΓ
pode mexer com essa etapa e forçá-la a percorrer várias opções.Γ
com mais detalhes .Retina ,
332117 bytesExperimente online
Explicação:
-12 bytes graças a Martin
-4 bytes graças a Leo
fonte
iT`aAlL`__Ll`a[^a]*a?
também funciona para 21 bytes.C # , 121 bytes
** Atualização (graças a @John & @aloisdg) **
C # , 69 bytes
fonte
new[] { 'a', 'A' }
para'a', 'A'
JavaScript (ES6),
93888482 bytes(salvou 5 bytes graças a @Shaggy, 4 bytes graças a @ user81655 e 2 bytes graças a @ l4m2.)
Casos de teste:
Mostrar snippet de código
fonte
['to${c<'a'?'Low':'Upp'}erCase']
economize alguns bytes, substituindo aspas simples por reticulares.^1
para teru
a paridade pode deixá-lo inicializá-lo mais curto:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
que é mais curto:a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
operador assim. Sempre mais para aprender!R , 92 bytes
Obrigado @ Giuseppe por corrigir a resposta.
Explicação
Experimente online!
fonte
toupper
), o que é um requisito.c(F,T)
, embora @Broadwell esteja certo; parece que vai ser umchartr("a-zA-Z","A-Za-z",v)[w]
pouco do quetoupper
Núcleo do PowerShell , 105 bytes
Experimente online!
Com um operador ternário real e sem um alias padrão para imprimir na tela, não é tão curto assim.
% t*y
expande para| ForEach-Object -Method ToCharArray
equiv. do"$args".ToCharArray()
Write-Host -n
é para o parâmetro-NoNewLine
"$_"
[char]
retorna o tipo para[string]
(caracteres não têm maiúsculas / minúsculas em .Net)|% *per
faz o mesmo método chamar atalho como anteriormente, mas para.ToUpper()
, mesmo com.ToLower()
($a,$b)[boolean test]
abusado como operador falso-ternário!!$c
o force-casts para[bool]
aqui começa indefinido$null
e é forçado a existir como "caps lock: $ false".fonte
|% t*y
é um truque interessante que preciso lembrar. Mais curto que[char[]]
, o que eu uso muito. Eu quase diria que isso deve ir para o tópico Dicas.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. obrigado por um|% *ethod
operador!Perl 5
-p
,313029 bytes-1 byte graças a @nwellnhof
-1 byte graças a @ikegami
Experimente online!
fonte
s/a(.*?)(a|$)/uc$1/egi
(22 bytes)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
é um byte mais curto.a([^a]*)a?
é menor quea(.*?)(a|$)
Python, 63 bytes
Outra solução Python, funciona no Python 2 e 3. Leva muito tempo para todas as entradas, exceto pequenas.
fonte
Rotina de código de máquina 6502 (C64), 51 bytes
Espera que um ponteiro para uma sequência de entrada terminada em 0 seja
$fc/$fd
enviada para a tela.Desmontagem comentada
Exemplo de programa assembler usando a rotina:
Demonstração online
Código na sintaxe ca65 :
fonte
Java 8,
11910898 bytes-11 bytes graças a @ OlivierGrégoire .
-10 bytes graças a @Nevay .
Explicação:
Experimente online.
fonte
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 bytesObrigado a Martin Ender pela revisão do código: alterei o processamento do fluxo pelo processamento de strings para ajudar na reutilização. Também muito obrigado a @RiaD e @ceilingcat por suas sugestões.
Experimente online!
Como funciona?
Notas
s[][]
é onde a mágica acontece:[][0]
é a função de comparação e[][1]
é a função de transformação relacionada a cada estado.!
é aplicado à função de comparação para forçá-la ao intervalo [0,1].fonte
d
tipo porque significa que sua função não é reutilizável . Um simplesd=0;
deve corrigi-lo.void f(){int c,d=0;[...]
. De qualquer forma, o fluxo morre, portanto, uma edição está em ordem!Haskell , 92 bytes
Experimente online!
Explicação
Primeiro, declaramos
g
ser a função que mapeia minúsculas para maiúsculas e maiúsculas para minúsculas. Esta é realmente a maioria do nosso número de bytes. Então definimos a funçãof
. Se a entrada paraf
é da formaa:b
que fazemosa
eA
corresponda ao primeiro padrão e, portanto, aplicamosf
à entrada com seu caso invertido. Caso contrário, seguimosa
em frente e aplicamosf
ab
.fonte
Wolfram Language (Mathematica) , 70 bytes
Experimente online!
Toma entrada e saída como uma lista de caracteres. Por conveniência, adicionei código no rodapé para converter isso de e para uma string.
Como funciona
A parte
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
é padrão: encontramos a primeiraA
(maiúscula ou minúscula), maiúscula e minúscula que vem após aA
, e repetimos até que não haja maisA
.A parte interessante é como invertemos o caso: a função
ToUpperCase@# + ToLowerCase@# - #&
. Adicionamos a versão em caixa alta da entrada e a versão em caixa baixa da entrada e subtraímos a entrada real. Por exemplo, dada a lista que{"I","n","P","u","T"}
isso calculaquais tópicos sobre listas como
e embora Mathematica não tem qualquer maneira particular de adicionar duas cordas, ele é inteligente o suficiente para simplificar
a+b-a
ab
para quaisquer valores dea
eb
, inclusive valores de cadeia, por isso esta simplifica para{"i","N","p","U","t"}
.fonte
Ruby ,
4241 bytesExperimente online!
Um lambda aceitando uma sequência, modificando-a no lugar e retornando-a. O truque aqui é que
sub
retorna a string (um valor verdadeiro) se uma substituição foi feita e retornanil
caso contrário. A existência de tambémswapcase
é bastante útil.-1 byte: Substitua a lógica booleana pelo operador ternário, graças a Asone Tuhid
fonte
PHP
10199 bytesExecute assim:
Ungolfed:
Isso apenas percorre a seqüência de caracteres com um loop for e, em cada iteração, verifica se a letra atual é
a
, em caso afirmativo, inverta a caixa de toda a sequência (método daqui ) e, se não, imprima a letra atual.fonte
$argn
,$argv
,$_GET
). Portanto, no momento, essa não é uma submissão correta. O retorno deve serecho
ed oureturn
ed (permitido apenas para funções ofc).Gelatina , 14 bytes
Experimente online!
Programa completo.
Explicação:
fonte
MATL ,
2320 bytesExperimente online!
Explicação:
Resposta mais antiga (23 bytes):
"H @ 'aA'm? ~ XHx} @ w ~? Yo] & h
Outros métodos que tentei:
fonte
Casca , 15 bytes
Experimente online!
Explicação
fonte
05AB1E , 12 bytes
Experimente online!
Explicação
fonte
Japt v2.0a0, 16 bytes
Tente
Explicação
fonte
SNOBOL4 (CSNOBOL4) ,
14192 bytesExperimente online!
Assume uma única linha de entrada.
Um enorme 49 bytes salvos por @ninjalj !
Line
S
faz todo o trabalho, explicado abaixo:fonte
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 bytes
Experimente online!
Como o Fortran não possui ferramentas "avançadas" para lidar com seqüências de caracteres, criei esse monstrinho.
Recuado e comentado:
fonte
Stax , 12 bytes
Execute e depure on-line
Divide-se em uma regex e alterna alternadamente entre maiúsculas e minúsculas. Aqui está o mesmo programa, descompactado, não destruído e comentado.
Execute este
fonte
Javascript (ES6),
8079 bytes(Parcialmente baseado nesta resposta de Rick Hitchcock. Postando como uma resposta separada, porque não tenho reputação suficiente para comentar.)
(Economizou 1 byte graças à postagem de @ l4m2 aqui .)
fonte
Sujo , 55 bytes
Experimente online!
Provavelmente pode ser cerca de um terço mais curto.
Vou escrever uma explicação e jogar um pouco mais quando estiver em uma mesa.
fonte
Python 3,
7872 bytesfonte
m[1]
no lugar dom.group(1)
Python 3.6+.